定义
PyTorch是一套面向机器学习与深度学习的开源框架,官方将其定位为从研究原型到生产部署的加速工具。它在设计上强调灵活性与模块化,同时兼顾生产环境所需的稳定性与支持能力。
在结构上,PyTorch可分为前端与后端两部分:前端是供使用者直接调用的Python应用程序接口,后端则是框架内部的实现,其中包括自动微分引擎Autograd[2]。它以张量为核心数据结构,torch.Tensor用于存储和运算同构的多维矩形数组,这类张量与NumPy数组相似,但可以放到支持CUDA的英伟达图形处理器上运行[1]。除Python接口外,PyTorch也提供C++接口[1]。
PyTorch基于早期的科学计算框架Torch开发,早期版本沿用Torch7的张量库,其后逐步演变为自有的张量实现[2]。它与TensorFlow并列为深度学习领域使用最广的两大框架[4]。
原理
PyTorch提供两项高层能力:一是类似NumPy的张量计算,并可通过图形处理器获得显著加速;二是建立在磁带式自动微分系统之上的深度神经网络[1]。所谓磁带式,是指前向计算过程被逐条记录下来,反向传播时按记录逆序回放,从而自动求出梯度。
计算图采用动态构建方式,即定义与运行同步发生,代码逐行执行,因此调试器与错误堆栈能够直接指向代码定义的位置,无需先编译静态图。这一机制在模型开发与调试阶段便于在运行时打印、修改或分析计算图[5]。
在性能层面,PyTorch 2.0引入了torch.compile作为主要接口,它包装模型并返回编译后的模型,其底层由TorchDynamo、AOTAutograd、PrimTorch与TorchInductor组成[6]。其中TorchDynamo借助Python的框架评估钩子捕获计算图,TorchInductor则为多种加速器生成代码,在英伟达与AMD图形处理器上以OpenAI Triton作为关键构件,在英特尔处理器上生成多线程向量化的C++代码[6]。当遇到无法捕获的Python代码时会发生图中断,编译被中断、执行该段代码后继续编译,这会损失部分优化机会,但可避免结果错误或程序崩溃[7]。
PyTorch还通过torch.jit提供编译栈TorchScript,可从PyTorch代码生成可序列化、可优化的模型。TorchScript采用静态图表示,计算图在执行前定义并编译一次,以提升推理阶段的性能,这与PyTorch默认的动态图执行方式不同[8]。
发展历程
PyTorch的源头可追溯到Torch系列框架。Torch是瑞士Idiap研究所的一个机器学习与科学计算项目,最初以Lua语言编写,后采用LuaJIT提升性能,Torch7是该系列最后一个版本,在其神经网络库获得较高评价的同时,Lua语言的流行度已不及Python[5][2]。
2016年,主导Torch7的Soumith Chintala收到当时在波兰读大学的Adam Paszke的询问,后者希望用Python替换Torch中的Lua,随后又有Sam Gross与Gregory Chanan加入[5]。团队经过约一个半月的开发做出框架雏形,并邀请约100名来自不同公司和大学的开发者试用,早期反馈帮助其在一周内修复了30多个问题[4]。框架最初版本于2016年推出,同年10月在Facebook公开发布[2][9]。
与简单地封装Lua Torch不同,PyTorch重构了张量之上的全部模块,并加入自动求导系统[10]。2017年9月,Meta与微软共同发起开放神经网络交换项目,用于在不同框架之间转换模型;2018年3月底,Caffe2被并入PyTorch[1]。2018年10月,Facebook在NeurIPS 2018会议上宣布发布PyTorch 1.0,将研究与生产能力统一到同一框架中,被视为其商业化进程的重要一步[2][11]。
2022年9月,Meta宣布PyTorch由新成立的PyTorch基金会治理,该基金会是Linux基金会的下属机构[1]。基金会旨在培育一个供应商中立的开源项目生态[3]。2023年3月15日,PyTorch 2.0发布,引入torch.compile,官方称其在165个开源模型中有93%可正常工作,float32精度下平均提速20%,自动混合精度下平均提速36%[6]。
应用
PyTorch被广泛用于学术界与工业界,覆盖自然语言处理、计算机视觉、强化学习与生成式人工智能等场景。它针对中央处理器、图形处理器以及自定义硬件加速器进行了优化,支持分布式训练,并可将模型部署到云平台与移动设备上。
在模型生态方面,不少深度学习软件构建于PyTorch之上,包括特斯拉的Autopilot、Uber的Pyro、Hugging Face的Transformers、PyTorch Lightning与Catalyst[1]。生物信息学领域也大量采用它,用于分析复杂的生物数据[12]。
在应用落地上,Meta将PyTorch用于旗下产品的推荐与增强现实功能。以图片社交产品Instagram的个性化推荐为例,其模型训练数据量最大可达10TB,采用PyTorch后训练与调试大规模模型的时间从数月缩短到数周甚至数天,团队还通过模型自动分片在单机上训练更大的模型[11]。
面向移动与嵌入式设备的部署,PyTorch提供了独立于TorchScript的ExecuTorch方案,采用torch.export导出并以.pte文件形式下发,运行时为可链接进应用程序的C++库[13][8]。该运行时体积较小,可运行于手机、嵌入式设备乃至微控制器,并已用于Meta旗下应用与雷朋智能眼镜等产品[14]。
局限
动态图带来了调试便利,但在早期也意味着性能优化的空间受限。PyTorch通过TorchScript等编译路径将动态图转换为静态图来提升推理效率,而TorchScript采用静态图表示,计算图需在执行前定义并编译一次[8]。目前TorchScript已被弃用,其功能正在被逐步移除,PyTorch官方建议新的移动端与边缘部署改用ExecuTorch[8]。
编译路径本身也存在限制。在torch.compile中,数据相关的控制流会触发图中断,导致优化机会丢失[7]。其动态形状支持在推出时仍属原型阶段,存在较多限制,例如依赖数据的nonzero等运算仍需中断图形,动态特性也无法与非标准的reduce-overhead或max-autotune模式配合使用[6]。
导出到设备端同样有约束。torch.export要求得到不含Python、可在推理时运行的图,因此基于张量取值的条件分支、循环次数依赖输入的循环、带阈值的提前返回等数据相关控制流无法被捕获,导出过程会直接报错,需要改写在模型中而非导出器一侧[13]。此外,导出图默认会针对示例输入的形状特化,若某个维度需要变化,必须显式声明动态形状[13]。
后端加速的覆盖范围也是有限的。分区器会挑选可加速的算子,其余部分回落到可移植的CPU内核,因此后端实际接管的图占比是关键指标,若一个模型仅有一小部分算子被接管,其表现会接近CPU模型并额外承担传输开销[13]。在不同框架之间转换模型时,语义差异也可能在部署之后才暴露,例如PyTorch中的量化感知训练未必能忠实转换为其他格式的量化语义[15]。
参见
参考资料
- epfl.ch 上的网页 [引用日期2026-10-14]
- 图文详情——科普中国资源服务 [引用日期2026-10-14]
- PyTorch 成為 AI 與 ML 領域的主流開源框架:2024 年度回顧 [引用日期2026-10-14]
- PyTorch 迎来 5 岁生日,创始人带领大一实习生开发:没想到会这么成功! [引用日期2026-10-14]
- 为什么PyTorch如此受欢迎 [引用日期2026-10-14]
- PyTorch 2.0:我們的新一代發布,比以往更快、更符合 Python 風格且更具動態性 [引用日期2026-10-14]
- Introduction to torch.compile [引用日期2026-10-14]
- 将 YOLO26 导出为 TorchScript | Ultralytics 文档 [引用日期2026-10-14]
- OpenAI全面使用Facebook的Pytorch机器学习框架 [引用日期2026-10-14]
- Facebook万字长文:AI模型全部迁移至PyTorch框架 [引用日期2026-10-14]
- Facebook万字长文:AI模型全部迁移至PyTorch框架 [引用日期2026-10-14]
- Deep Learning Platforms: PyTorch [引用日期2026-10-14]
- ExecuTorch for On-Device PyTorch Inference - DEV Community [引用日期2026-10-14]
- Mengtao-Yun_Mergen-Nachin(PDF) [引用日期2026-10-14]
- 236f915dd02af4f11927f67330b21d4b-Paper-Conference(PDF) [引用日期2026-10-14]