PyTorch 是一个提供两大高级功能的 Python 包:
- 张量计算(类似 NumPy)并具有强大的 GPU 加速
- 基于录像带自动求导系统建立的深度神经网络
您可以重复使用您喜欢的 Python 包,例如 NumPy、SciPy 和 Cython,在需要时扩展 PyTorch。
我们的中枢健康状况(持续集成信号)可以在 hud.pytorch.org 找到。
更多关于 PyTorch
在细粒度层面上,PyTorch 是一个由以下组件组成的库:
组件 | 描述 |
---|---|
torch | 类似 NumPy 的张量库,具有强大的 GPU 支持 |
torch.autograd | 支持 torch 中所有可微分张量操作的基于录像带的自动微分库 |
torch.jit | 编译堆栈(TorchScript),用于从 PyTorch 代码创建可序列化和可优化的模型 |
torch.nn | 深度集成与 autograd 的神经网络库,设计为最大灵活性 |
torch.multiprocessing | Python 多进程处理,但具有跨进程的 torch 张量神奇内存共享。对数据加载和 Hogwild 训练非常有用 |
torch.utils | DataLoader 和其他便捷的实用功能 |
通常,PyTorch 用作以下用途之一:
- 用于使用 GPU 的强大功能替代 NumPy。
- 提供最大灵活性和速度的深度学习研究平台。
详细说明:
一个准备用 GPU 的张量库
如果你使用过 NumPy,那么你已经使用过张量(别名 ndarray)。
PyTorch 提供可以在 CPU 或 GPU 上运行的张量,并加速运算的速度。
我们提供了一系列加速计算和适合您科学计算需求的张量例程,如切片、索引、数学运算、线性代数、归约运算。 而且它们的速度非常快!
动态神经网络:基于录像带的自动求导
PyTorch 有一种独特的建立神经网络的方法:使用并重放录像带。
大多数框架如 TensorFlow、Theano、Caffe 和 CNTK 都有静态的世界观。 必须建立一个神经网络并反复使用相同的结构。 改变网络行为的方式意味着必须从头开始。
使用 PyTorch,我们使用一种称为反向模式自动微分的技术,允许您随意改变网络的行为而没有任何延迟或开销。我们的灵感来自于几篇关于该主题的研究论文,以及当前和过去的工作,如 torch-autograd、 autograd、Chainer 等。
虽然这种技术并不是 PyTorch 独有的,但它目前是最快的实现之一。 你可以在你的疯狂研究中获得速度和灵活性的最佳结合。
Python 优先
PyTorch 不是 Python 绑定到单一的 C++ 框架。 它被设计为深度集成到 Python 中。 你可以自然地使用它,像使用 NumPy / SciPy / scikit-learn 等。 你可以使用你最喜欢的库自己在 Python 中编写神经网络层, 并且使用诸如 Cython 和 Numba 之类的包。 我们的目标是不在适当的地方重新发明轮子。
命令式体验
PyTorch 被设计为直观、线性且易于使用。 当你执行一行代码时,它会被执行。没有异步的世界观。 当你进入调试器或收到错误消息和堆栈跟踪时,理解它们是简单的。 堆栈跟踪指向你的代码定义的确切位置。 我们希望你不会因为糟糕的堆栈跟踪或异步和不透明的执行引擎而花费数小时调试代码。
快速且精简
PyTorch 的框架开销很小。我们集成了加速库,如 Intel MKL 和 NVIDIA (cuDNN, NCCL) 以最大化速度。 其核心的 CPU 和 GPU 张量和神经网络后端 已经成熟并经过多年的测试。
因此,无论您运行小型还是大型神经网络,PyTorch 都非常快。
与 Torch 或一些替代品相比,PyTorch 的内存使用效率极高。 我们为 GPU 编写了自定义内存分配器,以确保 你的深度学习模型最大限度地高效使用内存。 这使您能够训练比以前更大的深度学习模型。
轻松扩展
编写新的神经网络模块或与 PyTorch 的张量 API 接口被设计为简单明了且具最少抽象。
你可以在 Python 中使用 torch API 编写新的神经网络层 或者你喜欢的基于 NumPy 的库,如 SciPy。
如果您希望在 C/C++ 中编写您的层,我们提供了一个方便的扩展 API,既高效又具最少模板代码。 无需编写包裹代码。你可以在这里查看教程和这里查看示例。
安装
二进制文件
通过 Conda 或 pip 轮子的命令在我们的网站上:https://pytorch.org/get-started/locally/
NVIDIA Jetson 平台
提供用于 NVIDIA 的 Jetson Nano、Jetson TX1/TX2、Jetson Xavier NX/AGX 和 Jetson AGX Orin 的 Python 轮子在这里, L4T 容器发布在这里
它们需要 JetPack 4.2 及以上版本,并由 @dusty-nv 和 @ptrblck 维护。
从源码安装
前提条件
如果你想从源码安装,你将需要:
- Python 3.8 或更高版本(对于 Linux,需要 Python 3.8.1+)
- 完全支持 C++17 的编译器,如 clang 或 gcc(需要 gcc 9.4.0 或更新版本)
我们强烈推荐安装 Anaconda 环境。您将获得一个高质量的 BLAS 库(MKL),并且无论您的 Linux 发行版是什么,您都会获得受控的依赖版本。
NVIDIA CUDA 支持
如果您希望编译带有 CUDA 支持的版本,从我们的支持矩阵中选择一个支持的 CUDA 版本,然后安装以下内容:
- NVIDIA CUDA
- NVIDIA cuDNN v8.5 或更高版本
- 与 CUDA 兼容的编译器
注意:你可以参考 cuDNN 支持矩阵 了解支持的 CUDA、CUDA 驱动程序和 NVIDIA 硬件的各版本 cuDNN
如果你想禁用 CUDA 支持,请导出环境变量 USE_CUDA=0
。
其他可能有用的环境变量可以在 setup.py
中找到。
如果你正在为 NVIDIA 的 Jetson 平台(Jetson Nano、TX1、TX2、AGX Xavier)进行构建,请参考 如何为 Jetson Nano 安装 PyTorch 的说明。
AMD ROCm 支持
如果您希望编译带有 ROCm 支持的版本,请安装
- AMD ROCm 4.0 及以上版本
- ROCm 当前仅支持 Linux 系统。
如果您想禁用 ROCm 支持,请导出环境变量 USE_ROCM=0
。
其他可能有用的环境变量可以在 setup.py
中找到。
Intel GPU 支持
如果您希望编译带有 Intel GPU 支持的版本,请按照以下说明进行操作:
- PyTorch 的 Intel GPU 支持前提条件 。
- Intel GPU 支持 Linux 和 Windows。
如果您希望禁用 Intel GPU 支持,请导出环境变量 USE_XPU=0
。
其他可能有用的环境变量可以在 setup.py
中找到。
安装依赖
通用
conda install cmake ninja
# 在克隆源码后从 PyTorch 目录运行该命令,使用下面的“获取 PyTorch 源码”部分
pip install -r requirements.txt
在 Linux 上
pip install mkl-static mkl-include
# 仅 CUDA:如果需要为 GPU 添加 LAPACK 支持
conda install -c pytorch magma-cuda121 # 或者与您的 CUDA 版本匹配的 magma-cuda* 版本:https://anaconda.org/pytorch/repo
# (可选)如果使用 torch.compile 以及 inductor/triton,请安装匹配版本的 triton
# 在克隆后从 pytorch 目录运行
# 如果需要 Intel GPU 支持,请在运行命令前显式 `export USE_XPU=1`。
make triton
在 MacOS 上
# 仅在 intel x86 处理器的机器上添加此包
pip install mkl-static mkl-include
# 如果需要 torch.distributed,则添加这些包
conda install pkg-config libuv
在 Windows 上
pip install mkl-static mkl-include
# 如果需要 torch.distributed,添加这些包
# Windows 上的分布式包支持是一个原型功能,可能会有变化。
conda install -c conda-forge libuv=1.39
获取 PyTorch 源码
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# 如果你正在更新现有的检出
git submodule sync
git submodule update --init --recursive
安装 PyTorch
在 Linux 上
如果你想在启用 新 C++ ABI 的情况下编译 PyTorch,请首先运行此命令:
export _GLIBCXX_USE_CXX11_ABI=1
请注意,从 PyTorch 2.5 开始,带有 XPU 的 PyTorch 支持新旧 C++ ABI。以前,XPU 仅支持新的 C++ ABI。如果你想在编译时支持 Intel GPU,请遵循 Intel GPU 支持。
如果你在为 AMD ROCm 编译,请首先运行以下命令:
# 仅在为 ROCm 编译时运行
python tools/amd_build/build_amd.py
安装 PyTorch
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py develop
旁注: 如果你使用 Anaconda,你可能会遇到链接器引起的错误:
build/temp.linux-x86_64-3.7/torch/csrc/stub.o: file not recognized: file format not recognized collect2: error: ld returned 1 exit status error: command 'g++' failed with exit status 1
这是因为来自 Conda 环境的
ld
掩盖了系统的ld
。你应该使用一个较新的 Python 版本来修复这个问题。推荐的 Python 版本是 3.8.1+。
在 macOS 上
python3 setup.py develop
在 Windows 上
选择正确的 Visual Studio 版本。
PyTorch CI 使用 Visual C++ BuildTools,这些工具随 Visual Studio Enterprise、Professional 或 Community Editions 一起提供。你也可以从 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 安装构建工具。构建工具不与 Visual Studio Code 默认一起提供。
如果你想构建遗留的python代码,请参考 在遗留代码和 CUDA 上构建
CPU-only 构建
在这种模式下,PyTorch 计算将在您的 CPU 上运行,而不是您的 GPU
conda activate
python setup.py develop
关于 OpenMP 的说明:推荐的 OpenMP 实现是 Intel OpenMP(iomp)。为了链接到 iomp,你需要手动下载库并通过调整 CMAKE_INCLUDE_PATH
和 LIB
来设置构建环境。可以参考 此处 示例中的设置以配置 MKL 和 Intel OpenMP。没有这些 CMake 配置,微软 Visual C OpenMP 运行时(vcomp)将被使用。
基于 CUDA 的构建
在这种模式下,PyTorch 计算将利用您的 GPU 来加速数据处理
NVTX 是构建启用 CUDA 的 Pytorch 所需的。 NVTX 是 CUDA 分发版的一部分,其中被称为“Nsight Compute”。如果要在已经安装 CUDA 后安装它,请重新运行 CUDA 安装,并选中相应的复选框。 确保 CUDA 与 Nsight Compute 在 Visual Studio 之后安装。
目前,支持使用 VS 2017/2019 和 Ninja 作为 CMake 的生成器。如果在 PATH
中检测到 ninja.exe
,则 Ninja 将被用作默认的生成器,否则将使用 VS 2017/2019。
如果选择 Ninja 作为生成器,则最新的 MSVC 将作为底层工具链被选择。
通常需要额外的库,如 Magma 、 [oneDNN(又 您还可以从Docker Hub拉取预构建的docker镜像并使用docker v19.03+运行
docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest
请注意,PyTorch使用共享内存在进程之间共享数据,因此如果使用torch多进程(例如,多线程数据加载器),容器运行的默认共享内存段大小是不够的,您应该使用--ipc=host
或--shm-size
命令行选项来增加共享内存大小,以便nvidia-docker run
。
自行构建镜像
注意: 必须使用docker版本 > 18.06
提供的Dockerfile
用于构建支持CUDA 11.1和cuDNN v8的镜像。您可以传递PYTHON_VERSION=x.y
变量来指定Miniconda使用的Python版本,或者保持未设置以使用默认值。
make -f docker.Makefile
# 镜像标记为 docker.io/${your_docker_username}/pytorch
您还可以传递CMAKE_VARS="..."
环境变量来指定在构建期间传递给CMake的其他CMake变量。有关可用变量的列表,请参见setup.py。
make -f docker.Makefile
构建文档
要以各种格式构建文档,您需要Sphinx和readthedocs主题。
cd docs/
pip install -r requirements.txt
然后,您可以通过从docs/
文件夹中运行make <format>
来构建文档。运行make
以获取所有可用输出格式的列表。
如果您遇到katex错误,请运行npm install katex
。如果问题仍然存在,请尝试
npm install -g katex
注意:如果您使用不同的包管理器(例如
conda
)安装了nodejs
,那么npm
可能会安装一个与您的nodejs
版本不兼容的katex
版本,导致文档构建失败。已知可以工作的版本组合是node@6.13.1
和katex@0.13.18
。要用npm
安装后者,您可以运行npm install -g katex@0.13.18
以前的版本
以前的PyTorch版本的安装说明和二进制文件可以在我们的网站上找到。
入门指南
三点入门指南:
资源
- PyTorch.org
- PyTorch教程
- PyTorch示例
- PyTorch模型
- Udacity 的 PyTorch 深度学习简介
- Udacity 的 PyTorch 机器学习简介
- Coursera 的 PyTorch 深层神经网络
- PyTorch Twitter
- PyTorch 博客
- PyTorch YouTube
通信
- 论坛: 讨论实现、研究等. https://discuss.pytorch.org
- GitHub问题: 错误报告、功能请求、安装问题、RFC、想法等。
- Slack: PyTorch Slack主要面向中高级PyTorch用户和开发者进行一般聊天、在线讨论、协作等。如果您是初学者需要帮助,请主要使用PyTorch论坛。如果您需要Slack邀请,请填写此表单: https://goo.gl/forms/PP1AGvNHpSaJP8to1
- 简报: 无噪音,用于PyTorch重要公告的一种方式电子邮件简报。您可以在此注册: https://eepurl.com/cbG0rv
- Facebook页面: PyTorch的重要公告。https://www.facebook.com/pytorch
- 有关品牌指南,请访问我们的网站https://pytorch.org/
版本发布与贡献
通常,PyTorch每年会有三个小版本发布。如果您遇到错误,请通过提交问题告知我们。
我们感谢所有贡献。如果您计划回馈错误修复,请直接进行,无需进一步讨论。
如果您计划贡献新功能、实用程序函数或核心扩展,请首先打开一个问题并与我们讨论该功能。未经讨论就提交PR可能会导致PR被拒绝,因为我们可能会朝着与您的计划不同的方向发展核心。
要了解更多有关向Pytorch贡献的信息,请参见我们的贡献页面。有关PyTorch版本的更多信息,请参见发布页面。
团队
PyTorch是一个社区驱动的项目,由多名技艺精湛的工程师和研究人员共同贡献。
目前,PyTorch由Soumith Chintala、Gregory Chanan、Dmytro Dzhulgakov、Edward Yang和Nikita Shulga维护,主要贡献来自于数百位才华横溢的个人以各种形式和方式的贡献。 需要提及的一个非详尽但不断增长的名单包括:Trevor Killeen, Sasank Chilamkurthy, Sergey Zagoruyko, Adam Lerer, Francisco Massa, Alykhan Tejani, Luca Antiga, Alban Desmaison, Andreas Koepf, James Bradbury, Zeming Lin, Yuandong Tian, Guillaume Lample, Marat Dukhan, Natalia Gimelshein, Christian Sarofeen, Martin Raison, Edward Yang, Zachary Devito。
注意:此项目与具有相同名称的hughperkins/pytorch无关。Hugh是Torch社区的重要贡献者,他在许多Torch和PyTorch相关事情上提供了帮助。
许可证
PyTorch有一个BSD风格的许可证,请查阅LICENSE文件。