PyTorch 是一个 Python 包,提供两个高级功能:
您可以在需要时重用您最喜欢的 Python 包(例如 NumPy、SciPy 和 Cython)来扩展 PyTorch。
我们的主干健康状况(持续集成信号)可以在 hud.pytorch.org 上找到。
了解 PyTorch 的基础知识
从粒度上讲,PyTorch 是一个由以下组件组成的库:
成分 | 描述 |
---|---|
火炬 | 像 NumPy 这样的 Tensor 库,具有强大的 GPU 支持 |
火炬.autograd | 基于磁带的自动微分库,支持 torch 中所有可微分张量运算 |
火炬.jit | 用于从 PyTorch 代码创建可序列化和可优化模型的编译堆栈 (TorchScript) |
火炬网 | 与 autograd 深度集成的神经网络库,旨在实现最大的灵活性 |
torch.multiprocessing | Python 多处理,但具有跨进程的火炬张量的神奇内存共享。对于数据加载和 Hogwild 训练很有用 |
火炬工具 | DataLoader 和其他方便的实用功能 |
通常,PyTorch 用作:
进一步阐述:
如果您使用 NumPy,那么您就使用了 Tensors(又名 ndarray)。
PyTorch 提供的张量可以运行在 CPU 或 GPU 上,并大大加速计算。
我们提供各种张量例程来加速和满足您的科学计算需求,例如切片、索引、数学运算、线性代数、归约。而且它们速度很快!
PyTorch 有一种构建神经网络的独特方法:使用和重放录音机。
大多数框架(例如 TensorFlow、Theano、Caffe 和 CNTK)都具有静态的世界视图。人们必须构建一个神经网络并一次又一次地重复使用相同的结构。改变网络的行为方式意味着必须从头开始。
在 PyTorch 中,我们使用一种称为反向模式自动微分的技术,它允许您以零延迟或零开销任意改变网络的行为方式。我们的灵感来自于该主题的几篇研究论文,以及当前和过去的工作,例如 torch-autograd、autograd、Chainer 等。
虽然这种技术并不是 PyTorch 所独有的,但它是迄今为止最快的实现之一。您可以在疯狂的研究中获得最佳的速度和灵活性。
PyTorch 不是绑定到整体 C++ 框架的 Python。它旨在深度集成到 Python 中。您可以像使用 NumPy / SciPy / scikit-learn 等一样自然地使用它。您可以使用您最喜欢的库并使用 Cython 和 Numba 等软件包,用 Python 本身编写新的神经网络层。我们的目标是在适当的情况下不重新发明轮子。
PyTorch 的设计直观、思维线性且易于使用。当您执行一行代码时,它就会被执行。不存在异步的世界观。当您进入调试器或收到错误消息和堆栈跟踪时,理解它们很简单。堆栈跟踪准确指向定义代码的位置。我们希望您永远不会因为错误的堆栈跟踪或异步和不透明的执行引擎而花费数小时来调试代码。
PyTorch 的框架开销最小。我们集成了 Intel MKL 和 NVIDIA(cuDNN、NCCL)等加速库,以最大限度地提高速度。从核心来看,其CPU和GPU Tensor以及神经网络后端都很成熟,并且经过了多年的测试。
因此,无论您运行小型还是大型神经网络,PyTorch 都相当快。
与 Torch 或某些替代方案相比,PyTorch 中的内存使用效率非常高。我们为 GPU 编写了自定义内存分配器,以确保您的深度学习模型具有最大的内存效率。这使您能够训练比以前更大的深度学习模型。
编写新的神经网络模块或与 PyTorch 的 Tensor API 进行交互的目的是简单明了且抽象最少。
您可以使用 torch API 或您最喜欢的基于 NumPy 的库(例如 SciPy)在 Python 中编写新的神经网络层。
如果您想用 C/C++ 编写层,我们提供了一个方便的扩展 API,该 API 高效且样板代码最少。无需编写包装器代码。您可以在此处查看教程和示例。
通过 Conda 或 pipwheel 安装二进制文件的命令位于我们的网站上:https://pytorch.org/get-started/locally/
此处提供了适用于 NVIDIA Jetson Nano、Jetson TX1/TX2、Jetson Xavier NX/AGX 和 Jetson AGX Orin 的 Python 轮,L4T 容器发布于此处
它们需要 JetPack 4.2 及更高版本,@dusty-nv 和 @ptrblck 正在维护它们。
如果您从源安装,您将需要:
* PyTorch CI 使用 Visual C++ BuildTools,它随 Visual Studio Enterprise、Professional 或 Community Edition 一起提供。您还可以从 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 安装构建工具。默认情况下,Visual Studio Code不附带构建工具。
* 我们强烈建议安装 Anaconda 环境。您将获得高质量的 BLAS 库 (MKL),并且无论您的 Linux 发行版如何,您都可以获得受控的依赖版本。
环境设置示例如下所示:
$ source < CONDA_INSTALL_DIR > /bin/activate
$ conda create -y -n < CONDA_NAME >
$ conda activate < CONDA_NAME >
$ source < CONDA_INSTALL_DIR > S cripts a ctivate.bat
$ conda create -y -n < CONDA_NAME >
$ conda activate < CONDA_NAME >
$ call " C:Program FilesMicrosoft Visual StudioCommunityVCAuxiliaryBuildvcvarsall.bat " x64
如果您想使用 CUDA 支持进行编译,请从我们的支持列表中选择受支持的 CUDA 版本,然后安装以下内容:
注意:您可以参考 cuDNN 支持矩阵,了解具有各种支持的 CUDA、CUDA 驱动程序和 NVIDIA 硬件的 cuDNN 版本
如果要禁用 CUDA 支持,请导出环境变量USE_CUDA=0
。其他可能有用的环境变量可以在setup.py
中找到。
如果您正在针对 NVIDIA 的 Jetson 平台(Jetson Nano、TX1、TX2、AGX Xavier)进行构建,请在此处获取为 Jetson Nano 安装 PyTorch 的说明
如果您想使用 ROCm 支持进行编译,请安装
默认情况下,构建系统期望 ROCm 安装在/opt/rocm
中。如果 ROCm 安装在其他目录中,则必须将ROCM_PATH
环境变量设置为 ROCm 安装目录。构建系统自动检测 AMD GPU 架构。或者,可以使用PYTORCH_ROCM_ARCH
环境变量 AMD GPU 架构显式设置 AMD GPU 架构
如果要禁用 ROCm 支持,请导出环境变量USE_ROCM=0
。其他可能有用的环境变量可以在setup.py
中找到。
如果您想使用 Intel GPU 支持进行编译,请按照以下步骤操作
如果要禁用 Intel GPU 支持,请导出环境变量USE_XPU=0
。其他可能有用的环境变量可以在setup.py
中找到。
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive
常见的
conda install cmake ninja
# Run this command on native Windows
conda install rust
# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section below
pip install -r requirements.txt
在 Linux 上
pip install mkl-static mkl-include
# CUDA only: Add LAPACK support for the GPU if needed
conda install -c pytorch magma-cuda121 # or the magma-cuda* that matches your CUDA version from https://anaconda.org/pytorch/repo
# (optional) If using torch.compile with inductor/triton, install the matching version of triton
# Run from the pytorch directory after cloning
# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.
make triton
在 MacOS 上
# Add this package on intel x86 processor machines only
pip install mkl-static mkl-include
# Add these packages if torch.distributed is needed
conda install pkg-config libuv
在 Windows 上
pip install mkl-static mkl-include
# Add these packages if torch.distributed is needed.
# Distributed package support on Windows is a prototype feature and is subject to changes.
conda install -c conda-forge libuv=1.39
在 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 进行编译,请首先运行以下命令:
# Only run this if you're compiling for ROCm
python tools/amd_build/build_amd.py
安装 PyTorch
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py develop
在 macOS 上
python3 setup.py develop
在 Windows 上
如果您想构建旧版Python代码,请参阅构建旧版代码和CUDA
仅 CPU 构建
在此模式下,PyTorch 计算将在您的 CPU 上运行,而不是在 GPU 上运行
python setup.py develop
关于 OpenMP 的说明:所需的 OpenMP 实现是 Intel OpenMP (iomp)。为了链接 iomp,您需要手动下载库并通过调整CMAKE_INCLUDE_PATH
和LIB
设置构建环境。此处的指令是设置 MKL 和 Intel OpenMP 的示例。如果没有这些 CMake 配置,将使用 Microsoft Visual C OpenMP 运行时 (vcomp)。
基于 CUDA 的构建
在此模式下,PyTorch 计算将通过 CUDA 利用 GPU 来实现更快的数字运算
使用 CUDA 构建 Pytorch 需要 NVTX。 NVTX 是 CUDA 分布式的一部分,被称为“Nsight Compute”。要将其安装到已安装的 CUDA 上,请再次运行 CUDA 安装并选中相应的复选框。确保在 Visual Studio 之后安装带有 Nsight Compute 的 CUDA。
目前支持 VS 2017 / 2019 和 Ninja 作为 CMake 的生成器。如果在PATH
中检测到ninja.exe
,则 Ninja 将用作默认生成器,否则,它将使用 VS 2017 / 2019。
如果选择 Ninja 作为生成器,则将选择最新的 MSVC 作为底层工具链。
通常还需要其他库,例如 Magma、oneDNN(又名 MKLDNN 或 DNNL)和 Sccache。请参考安装帮助程序来安装它们。
其他一些环境变量配置可以参考build_pytorch.bat脚本
cmd
:: Set the environment variables after you have downloaded and unzipped the mkl package,
:: else CMake would throw an error as `Could NOT find OpenMP`.
set CMAKE_INCLUDE_PATH = {Your directory}mklinclude
set LIB = {Your directory}mkllib; %LIB%
:: Read the content in the previous section carefully before you proceed.
:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.
:: "Visual Studio 2019 Developer Command Prompt" will be run automatically.
:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.
set CMAKE_GENERATOR_TOOLSET_VERSION = 14.27
set DISTUTILS_USE_SDK = 1
for /f " usebackq tokens=* " %i in (`"% ProgramFiles(x86) %Microsoft Visual StudioInstallervswhere.exe" -version [15^,17^) -products * -latest -property installationPath`) do call "% iVCAuxiliaryBuildvcvarsall.bat " x64 -vcvars_ver= %CMAKE_GENERATOR_TOOLSET_VERSION%
:: [Optional] If you want to override the CUDA host compiler
set CUDAHOSTCXX = C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.27.29110binHostX64x64cl.exe
python setup.py develop
您可以通过执行以下操作来选择性地调整 cmake 变量的配置(无需先构建)。例如,调整 CuDNN 或 BLAS 的预检测目录可以通过这样的步骤来完成。
在 Linux 上
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py build --cmake-only
ccmake build # or cmake-gui build
在 macOS 上
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py build --cmake-only
ccmake build # or cmake-gui build
您还可以从 Docker Hub 中提取预构建的 docker 映像并使用 docker v19.03+ 运行
docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest
请注意,PyTorch 使用共享内存在进程之间共享数据,因此,如果使用 torch 多处理(例如,对于多线程数据加载器),则容器运行时使用的默认共享内存段大小是不够的,您应该通过以下方式增加共享内存大小--ipc=host
nvidia-docker run
的--ipc=host
或--shm-size
命令行选项。
注意:必须使用 docker 版本 > 18.06 构建
提供Dockerfile
用于构建支持 CUDA 11.1 和 cuDNN v8 的映像。您可以传递PYTHON_VERSION=xy
make 变量来指定 Miniconda 将使用哪个 Python 版本,或者将其保留为未设置以使用默认值。
make -f docker.Makefile
# images are tagged as 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
来构建文档。运行make
以获取所有可用输出格式的列表。
如果出现 katex 错误,请运行npm install katex
。如果仍然存在,请尝试npm install -g katex
注意:如果您使用不同的包管理器(例如
conda
)安装了nodejs
,那么npm
可能会安装与您的nodejs
版本不兼容的katex
版本,并且文档构建将失败。已知有效的版本组合是[email protected]
和[email protected]
。要使用npm
安装后者,您可以运行npm install -g [email protected]
以前的 PyTorch 版本的安装说明和二进制文件可以在我们的网站上找到。
三点帮助您入门:
通常,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、马拉特·杜坎、娜塔莉亚·吉梅尔辛、克里斯蒂安·萨罗芬、马丁·雷森、爱德华·杨、扎卡里·德维托。
注意:该项目与同名的hughperkins/pytorch无关。 Hugh 是 Torch 社区的重要贡献者,为 Torch 和 PyTorch 的许多事情提供了帮助。
PyTorch 具有 BSD 风格的许可证,如 LICENSE 文件中所示。