文章目录
- 一、先聊一个所有人都经历过的瞬间
- 二、先立个坐标系:PyTorch 到底是什么
- 先感受一下这个体量
- 三、五块积木:模块地图
- 四、六条设计哲学:这才是 PyTorch 的"手感"来源
- 4.1 GPU-Ready:张量天生就是双栖的
- 4.2 磁带式自动微分:PyTorch 最骄傲的一件事
- 这里有个必须搞懂的坑:三个"开关"的区别
- 4.3 Python First:它不是给 C++ 套了个壳
- 4.4 命令式:写一行,执行一行
- 4.5 Fast and Lean:省下来的每一点,都是你能装的参数
- 4.6 扩展无需折腾:这是最容易低估的一条
- 五、一次训练到底发生了什么
- 重点难点一:混合精度(AMP)-- 最划算的一刀
- 重点难点二:梯度累积 -- 小卡训大 batch
- 重点难点三:梯度检查点 -- 用时间换显存
- 六、数据管道与扩展:两个"不起眼但要命"的地方
- 重难点四:DataLoader 的三个数字,决定你的 GPU 有多少时间在发呆
- 重难点五:扩展机制——什么时候该写 Python 层,什么时候该上 C++
- 七、`torch.compile`:为什么第一次慢,后面快
- 重难点:graph break 才是真正的敌人
- 八、分布式:从"能跑"到"跑得动"
- 为什么 DDP 不够用?
- FSDP2 的核心思路:把参数切碎
- 2.15 的一个关键变化:NCCL 后端被重写了
- 另一个 2.15 的新东西:单边传输
- 九、安装:三条路,别走错
- 路线一:装 wheel(99% 的人应该走这条)
- 路线二:Docker(最省心)
- 路线三:从源码编译(只有三种人需要)
- 特殊情况:嵌入式、Windows 与多版本并存
- 十、训练完之后:模型怎么出去
- 三条出口,别混着走
- 重难点六:导出的敌人是"动态"
- 一个容易被低估的能力:稳定 ABI
- 十一、版本演进:这些年它到底在补什么
- 性能数字背后的意思
- 十二、踩坑清单:升级前请务必看一遍
- 🔴 致命级(静默错误 / 直接崩溃)
- 🟠 高优级(行为变化,容易踩)
- 🟡 环境级(装机就会遇到)
- 💡 一条通用建议
- 十三、它还是个"社区",不只是代码
- 学习入口怎么选?四个门,别走错
- 还有一条:怎么参与进去
一、先聊一个所有人都经历过的瞬间
你有没有过这种体验:
模型跑起来了,loss 也在降,看起来一切正常。但你就是说不清——为什么第一次运行那么慢?为什么显存莫名其妙爆了?为什么torch.compile加了之后不但没变快,反而报了一堆看不懂的错?
然后你去搜,搜到一堆"五分钟上手 PyTorch"的文章。它们教你nn.Linear、教你optimizer.step(),教得非常好。但没有一个告诉你这些 API 背后到底在干什么。
于是你就卡在了一个很尴尬的位置:API 会用了,但一出问题就只能靠猜。
这篇文章想干的事很简单:把 PyTorch 里那些真正重要的设计决策,翻译成人话。不讲虚的,只讲"为什么这么设计"“这样做会踩什么坑”。
读完你不一定能立刻成为专家,但你至少会觉得——这个框架,我算是看懂了。
二、先立个坐标系:PyTorch 到底是什么
它对自己的一句话概括其实非常克制,但把本质说透了:
两个高层能力:
- 张量计算(像 NumPy,但带强 GPU 加速)
- 深度神经网络(构建在基