PyTorch 是一个优化的张量库,用于使用 GPU 和 CPU 进行深度学习。它提供了一个非常灵活的、高性能的深度学习平台,允许用户使用Python代码来定义、训练和部署各种深度学习模型,如神经网络、卷积神经网络、递归神经网络等。
PyTorch的一个主要特点是其动态计算图。相比于其他框架,如TensorFlow和Keras,PyTorch的计算图可以根据数据和模型结构的变化进行调整。这意味着,可以使用Python控制结构(如循环和条件语句)来构建动态计算图,从而使得模型的开发过程更加灵活和直观。
此外,PyTorch还提供了丰富的工具和库,例如自动微分、优化器、损失函数等,以帮助用户更轻松地构建和训练深度学习模型。
今年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(无需重新编译就能发送不同大小的向量),这使得它们具备灵活、易于破解的特性,降低了开发人员和供应商的使用门槛。
为了验证这些技术,研发团队在机器学习领域测试了 163 个开源模型,包括图像分类、目标检测、图像生成等、NLP 任务,如语言建模、问答、序列分类、推荐系统和强化学习任务,测试模型主要有 3 个来源:
46 个来自 HuggingFace Transformers 的模型;
来自 TIMM 的 61 个模型:由 Ross Wightman 收集的SOTA PyTorch 图像模型;
来自 TorchBench 的 56 个模型:包含来自 Github 上收集的一组流行代码库。
对于开源模型,PyTorch 官方没有进行修改,只是增加了一个 torch.compile 调用来进行封装
接下来 PyTorch 工程师在这些模型中测量速度并验证精度,由于加速可能取决于数据类型,因此研究团队选择测量 Float32 和自动混合精度 (AMP) 的加速。
在 163 个开源模型中,该团队发现使用 2.0 可以将训练速度提高 38-76%。torch.compile 在 93% 的情况下都有效,模型在 NVIDIA A100 GPU 上的训练速度提高了 43%。在 Float32 精度下,它的平均运行速度提高了 21%,而在 AMP 精度下,它的运行速度平均提高了 51%。
注意事项:官方测得在 NVIDIA 3090 等桌面级 GPU 上的加速比 A100 等服务器级 GPU 低。截至今天,我们的默认后端 TorchInductor 支持 CPU 以及 NVIDIA Volta 和 Ampere GPU。它(目前)不支持其他 GPU、xPU 或较旧的 NVIDIA GPU。
详细信息可参考官方文档:https://pytorch.org/get-started/pytorch-2.0/
以下 Windows 发行版支持 PyTorch:
目前,Windows 上的 PyTorch 仅支持 Python 3.7-3.9;不支持 Python 2.x。
由于在 Windows 上没有默认安装,安装 Python 有多种方法:
详细的安装方式这里就不赘述了,下载安装指引可以参考python官网:https://wiki.python.org/moin/BeginnersGuide/Download
进入Pytorch官网可以看到最新版Pytorch的安装命令及其对应的CUDA版本(2.0只支持CUDA 11.7和CUDA 11.8版本,可以根据自身电脑支持的版本选择):
Windows 安装:
# CUDA 11.7
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
# CUDA 11.8
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUP
pip3 install torch torchvision torchaudio
# CUDA 11.7
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
# CUDA 11.8
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
# CUP
conda install pytorch torchvision torchaudio cpuonly -c pytorch
Linux安装:
# CUDA 11.7
pip3 install torch torchvision torchaudio
# CUDA 11.8
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# ROCm 5.4.2
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2
# CUP
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
# CUDA 11.7
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
# CUDA 11.8
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
# ROCm 5.4.2
NOTE: Conda packages are not currently available for ROCm, please use pip instead
# CUP
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
本文选择Windows的CUP版本通过PIP安装,在终端使用官方的命令执行:
import torch
print(torch.__version__)