目录
一、什么是PyTorch
PyTorch 是一个优化的张量库,用于使用 GPU 和 CPU 进行深度学习。它提供了一个非常灵活的、高性能的深度学习平台,允许用户使用Python代码来定义、训练和部署各种深度学习模型,如神经网络、卷积神经网络、递归神经网络等。
PyTorch的一个主要特点是其动态计算图。相比于其他框架,如TensorFlow和Keras,PyTorch的计算图可以根据数据和模型结构的变化进行调整。这意味着,可以使用Python控制结构(如循环和条件语句)来构建动态计算图,从而使得模型的开发过程更加灵活和直观。
此外,PyTorch还提供了丰富的工具和库,例如自动微分、优化器、损失函数等,以帮助用户更轻松地构建和训练深度学习模型。
二、PyTorch 2.0
今年3月PyTorch 2.0稳定版正式发布,延续了之前的 eager 模式,同时从根本上改进了 PyTorch 在编译器级别的运行方式。PyTorch 2.0 能为「Dynamic Shapes」和分布式运行提供更快的性能和更好的支持。
PyTorch 2.0 官宣了一个重要特性 —— torch.compile,这一特性将 PyTorch 的性能推向了新的高度,并将 PyTorch 的部分内容从 C++ 移回 Python。torch.compile 是一个完全附加的(可选的)特性,因此 PyTorch 2.0 是 100% 向后兼容的。
支撑 torch.compile 的技术包括研发团队新推出的 TorchDynamo、AOTAutograd、PrimTorch 和 TorchInductor。
TorchDynamo:使用 Python Frame Evaluation Hooks 安全地捕获 PyTorch 程序,这项重大创新是 PyTorch 过去 5 年来在安全图结构捕获方面的研发成果汇总;
AOTAutograd:重载 PyTorch 的 autograd 引擎,作为一个跟踪 autodiff,用于生成 ahead-of-time 向后跟踪;
PrimTorch:将约 2000 多个 PyTorch 算子归纳为一组约 250 个原始算子的闭集,开发人员可以将其作为构建完整 PyTorch 后端的目标。这大大降低了编写 PyTorch 功能或后端的流程;
TorchInductor:是一种深度学习编译器,可为多个加速器和后端生成快速代码。对于 NVIDIA GPU,它使用 OpenAI Triton 作为关键构建块。
TorchDynamo、AOTAutograd、PrimTorch 和 TorchInductor 是用 Python 编写的,并支持 dynamic shapes(无需重新编译就能发送不同大小的向量ÿ