pytorch/pytorch
GitHub: pytorch/pytorch
PyTorch 是一个提供 GPU 加速张量计算和动态神经网络自动求导的 Python 深度学习框架,以灵活性和易用性著称。
Stars: 99783 | Forks: 27731

PyTorch 是一个 Python 包,提供了两项高级功能:
- 具有强大 GPU 加速功能的 Tensor 计算(类似 NumPy)
- 基于基于磁带的自动求导系统构建的深度神经网络
如有需要,你可以复用你最喜欢的 Python 包(如 NumPy、SciPy 和 Cython)来扩展 PyTorch。
我们的主干健康状况(持续集成信号)可以在 [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main) 找到。
- [更多关于 PyTorch](#more-about-pytorch)
- [支持 GPU 的 Tensor 库](#a-gpu-ready-tensor-library)
- [动态神经网络:基于磁带的 Autograd](#dynamic-neural-networks-tape-based-autograd)
- [Python 优先](#python-first)
- [命令式体验](#imperative-experiences)
- [快速且精简](#fast-and-lean)
- [轻松扩展](#extensions-without-pain)
- [安装](#installation)
- [二进制文件](#binaries)
- [NVIDIA Jetson 平台](#nvidia-jetson-platforms)
- [从源码构建](#from-source)
- [前置条件](#prerequisites)
- [NVIDIA CUDA 支持](#nvidia-cuda-support)
- [AMD ROCm 支持](#amd-rocm-support)
- [Intel GPU 支持](#intel-gpu-support)
- [获取 PyTorch 源码](#get-the-pytorch-source)
- [安装依赖](#install-dependencies)
- [安装 PyTorch](#install-pytorch)
- [调整构建选项(可选)](#adjust-build-options-optional)
- [Docker 镜像](#docker-image)
- [使用预构建镜像](#using-pre-built-images)
- [自行构建镜像](#building-the-image-yourself)
- [构建文档](#building-the-documentation)
- [排查 CI 错误](#troubleshooting-ci-errors)
- [构建 PDF](#building-a-pdf)
- [历史版本](#previous-versions)
- [入门指南](#getting-started)
- [资源](#resources)
- [交流](#communication)
- [版本发布与贡献](#releases-and-contributing)
- [团队](#the-team)
- [许可证](#license)
## 更多关于 PyTorch
[学习 PyTorch 基础知识](https://pytorch.org/tutorials/beginner/basics/intro.html)
从底层逻辑来看,PyTorch 是一个由以下组件组成的库:
| 组件 | 描述 |
| ---- | --- |
| [**torch**](https://pytorch.org/docs/stable/torch.html) | 一个类似 NumPy 的 Tensor 库,具有强大的 GPU 支持 |
| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | 一个基于磁带的自动微分库,支持 torch 中所有可微的 Tensor 操作 |
| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | 一个编译栈 (TorchScript),用于从 PyTorch 代码创建可序列化且可优化的模型 |
| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | 一个与 autograd 深度集成的神经网络库,旨在提供最大的灵活性 |
| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python 多进程,但具有跨进程的 torch Tensor 神奇内存共享功能。对数据加载和 Hogwild 训练非常有用 |
| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader 和其他实用工具函数,以方便使用 |
通常,PyTorch 的使用场景为:
- 替代 NumPy 以利用 GPU 的强大算力。
- 一个提供最大灵活性和速度的深度学习研究平台。
进一步详述:
### 支持 GPU 的 Tensor 库
如果你使用过 NumPy,那么你就已经使用过 Tensor(又名 ndarray)。

PyTorch 提供的 Tensor 既可以存放在 CPU 上,也可以存放在 GPU 上,并且能大幅加速计算。
我们提供了各种各样的张量计算例程,以加速并满足你的科学计算需求,
例如切片、索引、数学运算、线性代数和归约操作。
而且它们非常快!
### 动态神经网络:基于磁带的 Autograd
PyTorch 有一种构建神经网络的独特方式:使用并重放磁带记录器。
大多数框架(如 TensorFlow、Theano、Caffe 和 CNTK)对世界有静态的看法。
人们必须构建一个神经网络,然后一遍又一遍地重用相同的结构。
改变网络的行为意味着必须从头开始。
在 PyTorch 中,我们使用了一种称为反向模式自动微分的技术,
它允许你以零延迟或开销的方式任意改变网络的行为。我们的灵感来自于关于这个主题的几篇研究论文,
以及当前和过去的工作,例如
[torch-autograd](https://github.com/twitter/torch-autograd)、
[autograd](https://github.com/HIPS/autograd)、
[Chainer](https://chainer.org) 等。
虽然这种技术并非 PyTorch 独有,但它是迄今为止该技术最快的实现之一。
你能为你的疯狂研究获得极致的速度与灵活性。

### Python 优先
PyTorch 不是绑定到单体 C++ 框架的 Python 接口。
它是为了深度集成到 Python 中而构建的。
你可以像使用 [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) 等库一样自然地使用它。
你可以直接使用 Python 编写你自己的神经网络层,使用你最喜欢的库
以及诸如 [Cython](https://cython.org/) 和 [Numba](http://numba.pydata.org/) 等包。
我们的目标是在合适的地方不重复造轮子。
### 命令式体验
PyTorch 的设计直观、思路线性且易于使用。
当你执行一行代码时,它就会被立即执行。这里不存在异步的世界观。
当你进入调试器或收到错误消息和堆栈跟踪时,理解它们是非常直接的。
堆栈跟踪会准确地指向你的代码定义的位置。
我们希望你永远不会因为糟糕的堆栈跟踪或异步且不透明的执行引擎而花费数小时调试你的代码。
### 快速且精简
PyTorch 具有极小的框架开销。我们集成了加速库
如 [Intel MKL](https://software.intel.com/mkl) 和 NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) 以实现速度最大化。
其核心的 CPU 和 GPU Tensor 以及神经网络后端已经非常成熟,并经过了多年的测试。
因此,无论你是运行小型还是大型神经网络,PyTorch 都相当快。
与 Torch 或其他一些替代方案相比,PyTorch 的内存使用效率极高。
我们为 GPU 编写了自定义内存分配器,以确保你的深度学习模型最大程度地节省内存。
这使你能够训练比以前更大的深度学习模型。
### 轻松扩展
编写新的神经网络模块或与 PyTorch 的 Tensor API 进行交互的设计非常直接
并且只有最少的抽象。
你可以使用 torch API 在 Python 中编写新的神经网络层,
[或者你最喜欢的基于 NumPy 的库(如 SciPy)](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html)。
如果你想用 C/C++ 编写你的层,我们提供了一个方便的扩展 API,它高效且样板代码极少。
不需要编写包装代码。你可以在这里查看[教程](https://pytorch.org/tutorials/advanced/cpp_extension.html)和[示例](https://github.com/pytorch/extension-cpp)。
## 安装
### 二进制文件
通过 Conda 或 pip wheels 安装二进制文件的命令可以在我们的网站上找到:[https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)
#### NVIDIA Jetson 平台
针对 NVIDIA 的 Jetson Nano、Jetson TX1/TX2、Jetson Xavier NX/AGX 和 Jetson AGX Orin 的 Python wheels 已在[此处](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048)提供,L4T 容器已发布在[此处](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)
它们需要 JetPack 4.2 及以上版本,由 [@dusty-nv](https://github.com/dusty-nv) 和 [@ptrblck](https://github.com/ptrblck) 进行维护。
### 从源码构建
#### 前置条件
如果你从源码安装,你将需要:
- Python 3.10 或更高版本
- 完全支持 C++20 的编译器,例如 clang 或 gcc(在 Linux 上需要 gcc 11.3.0 或更新版本)
- Visual Studio 或 Visual Studio Build Tool(仅限 Windows)
- 至少 10 GB 的可用磁盘空间
- 首次构建需要 30-60 分钟(随后的重新构建会快得多)
\* PyTorch CI 使用的是 Visual C++ BuildTools,它随 Visual Studio Enterprise、Professional 或 Community Editions 一起提供。你也可以从
https://visualstudio.microsoft.com/visual-cpp-build-tools/ 安装构建工具。默认情况下,构建工具*不*随 Visual Studio Code 一起提供。
以下是环境设置的示例:
* Linux:
```
$ source /bin/activate
$ conda create -y -n
$ conda activate
```
* Windows:
```
$ source \Scripts\activate.bat
$ conda create -y -n
$ conda activate
$ call "C:\Program Files\Microsoft Visual Studio\\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
```
Conda 环境不是必须的。你也可以在标准的虚拟环境中构建 PyTorch,例如,使用 `uv` 等工具创建的环境,前提是你的系统已安装了所有无法通过 pip 包获取的必要依赖(例如 CUDA、MKL)。
##### NVIDIA CUDA 支持
如果你想编译带有 CUDA 支持的版本,请从我们的支持矩阵中[选择受支持的 CUDA 版本](https://pytorch.org/get-started/locally/),然后安装以下内容:
- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)
- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 或更高版本
- 与 CUDA 兼容的[编译器](https://gist.github.com/ax3l/9489132)
注意:你可以参考 [cuDNN 支持矩阵](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) 以获取针对各种受支持的 CUDA、CUDA 驱动和 NVIDIA 硬件的 cuDNN 版本信息。
如果你想禁用 CUDA 支持,请导出环境变量 `USE_CUDA=0`。
其他可能有用的环境变量可以在 `setup.py` 中找到。如果 CUDA 安装在非标准位置,请设置 PATH,以便能够找到你想使用的 nvcc(例如,`export PATH=/usr/local/cuda-12.8/bin:$PATH`)。
如果你正在为 NVIDIA 的 Jetson 平台(Jetson Nano、TX1、TX2、AGX Xavier)构建,为 Jetson Nano 安装 PyTorch 的说明可以在[这里找到](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)
##### AMD ROCm 支持
如果你想编译带有 ROCm 支持的版本,请安装
- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 及以上版本
- ROCm 目前仅支持 Linux 系统。
默认情况下,构建系统期望 ROCm 安装在 `/opt/rocm`。如果 ROCm 安装在不同的目录中,则必须将 `ROCM_PATH` 环境变量设置为 ROCm 的安装目录。构建系统会自动检测 AMD GPU 架构。或者,也可以使用 `PYTORCH_ROCM_ARCH` 环境变量显式设置 [AMD GPU 架构](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)
如果你想禁用 ROCm 支持,请导出环境变量 `USE_ROCM=0`。
其他可能有用的环境变量可以在 `setup.py` 中找到。
##### Intel GPU 支持
如果你想编译带有 Intel GPU 支持的版本,请按照以下说明操作
- [Intel GPU 的 PyTorch 前置条件](https://www.intel.com/content/www/us/en/developer/articles/tool/pytorch-prerequisites-for-intel-gpu.html) 说明。
- Linux 和 Windows 均支持 Intel GPU。
如果你想禁用 Intel GPU 支持,请导出环境变量 `USE_XPU=0`。
其他可能有用的环境变量可以在 `setup.py` 中找到。
#### 获取 PyTorch 源码
```
git clone https://github.com/pytorch/pytorch
cd pytorch
# 如果您正在更新现有的 checkout
git submodule sync
git submodule update --init --recursive
```
#### 安装依赖
**通用**
```
# 在使用上方的“获取 PyTorch 源码”部分 clone 源代码后,从 PyTorch 目录运行此命令
pip install --group dev
```
**在 Linux 上**
```
pip install mkl-static mkl-include
# 仅限 CUDA:如果需要,为 GPU 添加 LAPACK 支持
# magma 安装:在激活的 conda 环境中运行。指定要安装的 CUDA 版本
.ci/docker/common/install_magma_conda.sh 12.4
# (可选)如果将 torch.compile 与 inductor/triton 结合使用,请安装匹配版本的 triton
# 在 clone 之后从 pytorch 目录运行
# 如需 Intel GPU 支持,请在运行命令前明确执行 `export USE_XPU=1`。
make triton
```
**在 Windows 上**
```
pip install mkl-static mkl-include
# 如果需要 torch.distributed,请添加这些包。
# Windows 上的 Distributed 包支持是一项原型功能,可能会发生变化。
conda install -c conda-forge libuv=1.51
```
#### 安装 PyTorch
**在 Linux 上**
如果你正在为 AMD ROCm 编译,请首先运行以下命令:
```
# 仅在为 ROCm 编译时才运行此命令
python tools/amd_build/build_amd.py
```
安装 PyTorch
```
# conda 环境的 CMake prefix
export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}"
python -m pip install --no-build-isolation -v -e .
# 非 conda 环境的 CMake prefix,例如 Python venv
# 在激活 venv 之后调用以下内容
export CMAKE_PREFIX_PATH="${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}"
```
**在 macOS 上**
```
python -m pip install --no-build-isolation -v -e .
```
**在 Windows 上**
如果你想构建旧版 Python 代码,请参考[在旧版代码和 CUDA 上构建](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)
**仅限 CPU 构建**
在这种模式下,PyTorch 的计算将在你的 CPU 上运行,而不是在 GPU 上。
```
python -m pip install --no-build-isolation -v -e .
```
关于 OpenMP 的注意事项:首选的 OpenMP 实现是 Intel OpenMP (iomp)。为了链接到 iomp,你需要手动下载该库,并通过修改 `CMAKE_INCLUDE_PATH` 和 `LIB` 来设置构建环境。[这里](https://github.com/pytorch/pytorch/blob/main/docs/source/notes/windows.rst#building-from-source)的说明是一个同时设置 MKL 和 Intel OpenMP 的示例。如果没有针对 CMake 的这些配置,将使用 Microsoft Visual C OpenMP 运行时。
**基于 CUDA 的构建**
在这种模式下,PyTorch 的计算将通过 CUDA 利用你的 GPU,以实现更快的数值计算。
构建带有 CUDA 的 PyTorch 需要 [NVTX](https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm)。
NVTX 是 CUDA 发行版的一部分在其中被称为“Nsight Compute”。要将其安装到已安装的 CUDA 上,请再次运行 CUDA 安装程序并勾选相应的复选框。
请确保带有 Nsight Compute 的 CUDA 在 Visual Studio 之后安装。
目前,VS 2017 / 2019 和 Ninja 被支持作为 CMake 的生成器。如果在 `PATH` 中检测到 `ninja.exe`,则 Ninja 将被用作默认生成器,否则将使用 VS 2017 / 2019。
如果选择 Ninja 作为生成器,最新的 MSVC 将被选为底层工具链。 通常还需要一些额外的库,例如 [Magma](https://developer.nvidia.com/magma)、[oneDNN,又名 MKLDNN 或 DNNL](https://github.com/oneapi-src/oneDNN) 和 [Sccache](https://github.com/mozilla/sccache)。请参考 [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) 来安装它们。 你可以参考 [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/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}\mkl\include set LIB={Your directory}\mkl\lib;%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 Studio\Installer\vswhere.exe" -version [15^,17^) -products * -latest -property installationPath`) do call "%i\VC\Auxiliary\Build\vcvarsall.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 Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX64\x64\cl.exe python -m pip install --no-build-isolation -v -e . ``` **Intel GPU 构建** 在此模式下,将构建带有 Intel GPU 支持的 PyTorch。 在开始构建之前,请确保已正确安装了[通用前置条件](#prerequisites)以及[Intel GPU 的前置条件](#intel-gpu-support),并配置了环境变量。对于构建工具的支持,需要 `Visual Studio 2022`。 然后可以使用以下命令构建 PyTorch: ``` :: CMD Commands: :: Set the CMAKE_PREFIX_PATH to help find corresponding packages :: %CONDA_PREFIX% only works after `conda activate custom_env` if defined CMAKE_PREFIX_PATH ( set "CMAKE_PREFIX_PATH=%CONDA_PREFIX%\Library;%CMAKE_PREFIX_PATH%" ) else ( set "CMAKE_PREFIX_PATH=%CONDA_PREFIX%\Library" ) python -m pip install --no-build-isolation -v -e . ``` ##### 调整构建选项(可选) 你可以选择性地调整 cmake 变量的配置(无需先构建), 操作如下。例如,调整预先检测到的 CuDNN 或 BLAS 目录可以通过这样的步骤完成。 在 Linux 上 ``` export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}" CMAKE_ONLY=1 python setup.py build ccmake build # or cmake-gui build ``` 在 macOS 上 ``` export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}" MACOSX_DEPLOYMENT_TARGET=11.0 CMAKE_ONLY=1 python setup.py build ccmake build # or cmake-gui build ``` ### Docker 镜像 #### 使用预构建镜像 你也可以从 Docker Hub 拉取预构建的 Docker 镜像,并使用 docker v23.0+ 运行 ``` docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest ``` 请注意,PyTorch 使用共享内存在进程之间共享数据,因此如果使用 torch multiprocessing(例如,用于多线程数据加载器),容器运行时的默认共享内存段大小是不够的,你应该通过在 `nvidia-docker run` 中添加 `--ipc=host` 或 `--shm-size` 命令行选项来增加共享内存大小。 #### 自行构建镜像 **注意:** 必须使用 Docker 版本 >= 23.0 进行构建 提供的 Dockerfile 用于构建支持 CUDA 12.1 和 cuDNN v9 的镜像。 你可以传递 `PYTHON_VERSION=x.y` make 变量来指定 Miniconda 使用的 Python 版本,或者 不设置它以使用默认版本,因为 Dockerfile 使用的是系统 Python。 ``` make -f docker.Makefile # 镜像被标记为 docker.io/${your_docker_username}/pytorch ``` 你还可以传递 `CMAKE_VARS="..."` 环境变量,以指定在构建期间要传递给 CMake 的额外 CMake 变量。 有关可用变量的列表,请参见 [setup.py](./setup.py)。 ``` make -f docker.Makefile ``` ### 构建文档 要以各种格式构建文档,你需要 [Sphinx](http://www.sphinx-doc.org) 和 `pytorch_sphinx_theme2`。 在本地构建文档之前,请确保你的环境中已安装 `torch`。对于一些小修复,你可以按照[入门指南](https://pytorch.org/get-started/locally/)中的说明安装 nightly 版本。 对于更复杂的修复,例如添加新模块以及该模块的 docstring,你可能需要[从源码安装](#from-source) torch。 请参阅 [Docstring 指南](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines) 以了解 docstring 约定。 ``` cd docs/ pip install -r requirements.txt make html make serve ``` 运行 `make` 以获取所有可用输出格式的列表。 如果你遇到 katex 错误,请运行 `npm install katex`。如果问题仍然存在,请尝试 `npm install -g katex` #### 排查 CI 错误 你的构建可能会显示你在本地没有遇到的错误 - 以下是如何找到与文档相关的错误的方法。 如果构建有任何错误,你将在 PR 上看到类似这样的内容:
任何与文档相关的错误将出现在标题中包含“doc”字样的作业中。看起来这些作业都没有与我们的文档相关。
无论如何,我们来看看。点击作业以查看日志:
而且我们可以确定这个作业与文档无关。
通过查看这个构建,我们可以看到这些作业与我们的文档相关 - 并且它们没有任何错误:
你可能还会在 PR 上看到类似这样的评论:
我们可以看到其中一些问题与我们的文档相关。
通过点击 `gh` 链接打开日志:
在这里我们可以看到有一个与文档相关的错误:
你始终可以通过转到 PR 上的 `Checks` 选项卡并向下滚动到 `pull` 来找到相关的文档构建。
你可以点击展开或切换折叠面板以查看此处的所有作业,在这里你可以看到突出显示的文档作业:
如果你点击进入,你会在底部看到文档作业,像这样:
#### 构建 PDF
要编译包含所有 PyTorch 文档的 PDF,请确保你已安装 `texlive` 和 LaTeX。在 macOS 上,你可以使用以下命令安装它们:
```
brew install --cask mactex
```
要创建 PDF:
1. 运行:
make latexpdf
这将在 `build/latex` 目录中生成必要的文件。
2. 导航到该目录并执行:
make LATEXOPTS="-interaction=nonstopmode"
这将生成包含所需内容的 `pytorch.pdf`。再运行一次这个命令,以便它生成正确的目录和索引。
### 历史版本
先前版本的 PyTorch 的安装说明和二进制文件可以在[我们的网站](https://pytorch.org/get-started/previous-versions)上找到。
## 入门指南
指导你入门的指针:
- [教程:帮助你开始理解和使用 PyTorch](https://pytorch.org/tutorials/)
- [示例:涵盖所有领域的易于理解的 PyTorch 代码](https://github.com/pytorch/examples)
- [API 参考](https://pytorch.org/docs/)
- [词汇表](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)
## 资源
* [PyTorch.org](https://pytorch.org/)
* [PyTorch 教程](https://pytorch.org/tutorials/)
* [PyTorch 示例](https://github.com/pytorch/examples)
* [PyTorch 模型](https://pytorch.org/hub/)
* [来自 Udacity 的 PyTorch 深度学习简介](https://www.udacity.com/course/deep-learning-pytorch--ud188)
* [来自 Udacity 的 PyTorch 机器学习简介](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)
* [来自 Coursera 的使用 PyTorch 构建深度神经网络](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)
* [PyTorch Twitter](https://twitter.com/PyTorch)
* [PyTorch 博客](https://pytorch.org/blog/)
* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)
## 交流
* 论坛:讨论实现、研究等。https://discuss.pytorch.org
* GitHub Issues:错误报告、功能请求、安装问题、RFCs、想法等。
* Slack:[PyTorch Slack](https://pytorch.slack.com/) 面向中高级 PyTorch 用户和开发者的主要群体,用于一般性聊天、在线讨论、协作等。如果你是寻求帮助的初学者,主要的交流平台是 [PyTorch 论坛](https://discuss.pytorch.org)。如果你需要 Slack 邀请,请填写此表单:https://goo.gl/forms/PP1AGvNHpSaJP8to1
* 新闻邮件:无干扰的单向电子邮件通讯,包含关于 PyTorch 的重要公告。你可以在这里注册:https://eepurl.com/cbG0rv
* Facebook 页面:关于 PyTorch 的重要公告。https://www.facebook.com/pytorch
* 有关品牌指南,请访问我们的网站 [pytorch.org](https://pytorch.org/)
## 版本发布与贡献
通常,PyTorch 每年会有三个次要版本发布。如果你遇到 bug,请通过[提交 issue](https://github.com/pytorch/pytorch/issues) 让我们知道。
我们感谢所有的贡献。如果你打算贡献错误修复,请直接进行,无需进一步讨论。
如果你计划贡献新功能、实用函数或核心扩展,请先开一个 issue 并与我们讨论该功能。
在没有讨论的情况下发送 PR 可能最终会导致 PR 被拒绝,因为我们可能正在将核心引向与你所了解的不同的方向。
要了解更多关于向 PyTorch 做贡献的信息,请参阅我们的[贡献页面](CONTRIBUTING.md)。有关 PyTorch 版本发布的更多信息,请参见[发布页面](RELEASE.md)。
## 团队
PyTorch 是一个社区驱动的项目,有几位熟练的工程师和研究人员为其做出贡献。
PyTorch 目前由 [Soumith Chintala](http://soumith.ch)、[Gregory Chanan](https://github.com/gchanan)、[Dmytro Dzhulgakov](https://github.com/dzhulgakov)、[Edward Yang](https://github.com/ezyang)、[Alban Desmaison](https://github.com/albanD)、[Piotr Bialecki](https://github.com/ptrblck) 和 [Nikita Shulga](https://github.com/malfet) 维护,并以各种形式获得了数百名才华横溢的个人的重大贡献。
一个不详尽但不断增长的名单需要提及:[Trevor Killeen](https://github.com/killeent)、[Sasank Chilamkurthy](https://github.com/chsasank)、[Sergey Zagoruyko](https://github.com/szagoruyko)、[Adam Lerer](https://github.com/adamlerer)、[Francisco Massa](https://github.com/fmassa)、[Alykhan Tejani](https://github.com/alykhantejani)、[Luca Antiga](https://github.com/lantiga)、[Alban Desmaison](https://github.com/albanD)、[Andreas Koepf](https://github.com/andreaskoepf)、[James Bradbury](https://github.com/jekbradbury)、[Zeming Lin](https://github.com/ebetica)、[Yuandong Tian](https://github.com/yuandong-tian)、[Guillaume Lample](https://github.com/glample)、[Marat Dukhan](https://github.com/Maratyszcza)、[Natalia Gimelshein](https://github.com/ngimel)、[Christian Sarofeen](https://github.com/csarofeen)、[Martin Raison](https://github.com/martinraison)、[Edward Yang](https://github.com/ezyang)、[Zachary Devito](https://github.com/zdevito)。
注意:本项目与同名的 [hughperkins/pytorch](https://github.com/hughperkins/pytorch) 无关。Hugh 是 Torch 社区的宝贵贡献者,并在 Torch 和 PyTorch 的许多方面提供了帮助。
## 许可证
PyTorch 采用 BSD 风格的许可证,详见 [LICENSE](LICENSE) 文件。
如果选择 Ninja 作为生成器,最新的 MSVC 将被选为底层工具链。 通常还需要一些额外的库,例如 [Magma](https://developer.nvidia.com/magma)、[oneDNN,又名 MKLDNN 或 DNNL](https://github.com/oneapi-src/oneDNN) 和 [Sccache](https://github.com/mozilla/sccache)。请参考 [installation-helper](https://github.com/pytorch/pytorch/tree/main/.ci/pytorch/win-test-helpers/installation-helpers) 来安装它们。 你可以参考 [build_pytorch.bat](https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/win-test-helpers/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}\mkl\include set LIB={Your directory}\mkl\lib;%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 Studio\Installer\vswhere.exe" -version [15^,17^) -products * -latest -property installationPath`) do call "%i\VC\Auxiliary\Build\vcvarsall.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 Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX64\x64\cl.exe python -m pip install --no-build-isolation -v -e . ``` **Intel GPU 构建** 在此模式下,将构建带有 Intel GPU 支持的 PyTorch。 在开始构建之前,请确保已正确安装了[通用前置条件](#prerequisites)以及[Intel GPU 的前置条件](#intel-gpu-support),并配置了环境变量。对于构建工具的支持,需要 `Visual Studio 2022`。 然后可以使用以下命令构建 PyTorch: ``` :: CMD Commands: :: Set the CMAKE_PREFIX_PATH to help find corresponding packages :: %CONDA_PREFIX% only works after `conda activate custom_env` if defined CMAKE_PREFIX_PATH ( set "CMAKE_PREFIX_PATH=%CONDA_PREFIX%\Library;%CMAKE_PREFIX_PATH%" ) else ( set "CMAKE_PREFIX_PATH=%CONDA_PREFIX%\Library" ) python -m pip install --no-build-isolation -v -e . ``` ##### 调整构建选项(可选) 你可以选择性地调整 cmake 变量的配置(无需先构建), 操作如下。例如,调整预先检测到的 CuDNN 或 BLAS 目录可以通过这样的步骤完成。 在 Linux 上 ``` export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}" CMAKE_ONLY=1 python setup.py build ccmake build # or cmake-gui build ``` 在 macOS 上 ``` export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}" MACOSX_DEPLOYMENT_TARGET=11.0 CMAKE_ONLY=1 python setup.py build ccmake build # or cmake-gui build ``` ### Docker 镜像 #### 使用预构建镜像 你也可以从 Docker Hub 拉取预构建的 Docker 镜像,并使用 docker v23.0+ 运行 ``` docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest ``` 请注意,PyTorch 使用共享内存在进程之间共享数据,因此如果使用 torch multiprocessing(例如,用于多线程数据加载器),容器运行时的默认共享内存段大小是不够的,你应该通过在 `nvidia-docker run` 中添加 `--ipc=host` 或 `--shm-size` 命令行选项来增加共享内存大小。 #### 自行构建镜像 **注意:** 必须使用 Docker 版本 >= 23.0 进行构建 提供的 Dockerfile 用于构建支持 CUDA 12.1 和 cuDNN v9 的镜像。 你可以传递 `PYTHON_VERSION=x.y` make 变量来指定 Miniconda 使用的 Python 版本,或者 不设置它以使用默认版本,因为 Dockerfile 使用的是系统 Python。 ``` make -f docker.Makefile # 镜像被标记为 docker.io/${your_docker_username}/pytorch ``` 你还可以传递 `CMAKE_VARS="..."` 环境变量,以指定在构建期间要传递给 CMake 的额外 CMake 变量。 有关可用变量的列表,请参见 [setup.py](./setup.py)。 ``` make -f docker.Makefile ``` ### 构建文档 要以各种格式构建文档,你需要 [Sphinx](http://www.sphinx-doc.org) 和 `pytorch_sphinx_theme2`。 在本地构建文档之前,请确保你的环境中已安装 `torch`。对于一些小修复,你可以按照[入门指南](https://pytorch.org/get-started/locally/)中的说明安装 nightly 版本。 对于更复杂的修复,例如添加新模块以及该模块的 docstring,你可能需要[从源码安装](#from-source) torch。 请参阅 [Docstring 指南](https://github.com/pytorch/pytorch/wiki/Docstring-Guidelines) 以了解 docstring 约定。 ``` cd docs/ pip install -r requirements.txt make html make serve ``` 运行 `make` 以获取所有可用输出格式的列表。 如果你遇到 katex 错误,请运行 `npm install katex`。如果问题仍然存在,请尝试 `npm install -g katex` #### 排查 CI 错误 你的构建可能会显示你在本地没有遇到的错误 - 以下是如何找到与文档相关的错误的方法。 如果构建有任何错误,你将在 PR 上看到类似这样的内容:
任何与文档相关的错误将出现在标题中包含“doc”字样的作业中。看起来这些作业都没有与我们的文档相关。
无论如何,我们来看看。点击作业以查看日志:
而且我们可以确定这个作业与文档无关。
通过查看这个构建,我们可以看到这些作业与我们的文档相关 - 并且它们没有任何错误:
你可能还会在 PR 上看到类似这样的评论:
我们可以看到其中一些问题与我们的文档相关。
通过点击 `gh` 链接打开日志:
在这里我们可以看到有一个与文档相关的错误:
你始终可以通过转到 PR 上的 `Checks` 选项卡并向下滚动到 `pull` 来找到相关的文档构建。
你可以点击展开或切换折叠面板以查看此处的所有作业,在这里你可以看到突出显示的文档作业:
如果你点击进入,你会在底部看到文档作业,像这样:
#### 构建 PDF
要编译包含所有 PyTorch 文档的 PDF,请确保你已安装 `texlive` 和 LaTeX。在 macOS 上,你可以使用以下命令安装它们:
```
brew install --cask mactex
```
要创建 PDF:
1. 运行:
make latexpdf
这将在 `build/latex` 目录中生成必要的文件。
2. 导航到该目录并执行:
make LATEXOPTS="-interaction=nonstopmode"
这将生成包含所需内容的 `pytorch.pdf`。再运行一次这个命令,以便它生成正确的目录和索引。
### 历史版本
先前版本的 PyTorch 的安装说明和二进制文件可以在[我们的网站](https://pytorch.org/get-started/previous-versions)上找到。
## 入门指南
指导你入门的指针:
- [教程:帮助你开始理解和使用 PyTorch](https://pytorch.org/tutorials/)
- [示例:涵盖所有领域的易于理解的 PyTorch 代码](https://github.com/pytorch/examples)
- [API 参考](https://pytorch.org/docs/)
- [词汇表](https://github.com/pytorch/pytorch/blob/main/GLOSSARY.md)
## 资源
* [PyTorch.org](https://pytorch.org/)
* [PyTorch 教程](https://pytorch.org/tutorials/)
* [PyTorch 示例](https://github.com/pytorch/examples)
* [PyTorch 模型](https://pytorch.org/hub/)
* [来自 Udacity 的 PyTorch 深度学习简介](https://www.udacity.com/course/deep-learning-pytorch--ud188)
* [来自 Udacity 的 PyTorch 机器学习简介](https://www.udacity.com/course/intro-to-machine-learning-nanodegree--nd229)
* [来自 Coursera 的使用 PyTorch 构建深度神经网络](https://www.coursera.org/learn/deep-neural-networks-with-pytorch)
* [PyTorch Twitter](https://twitter.com/PyTorch)
* [PyTorch 博客](https://pytorch.org/blog/)
* [PyTorch YouTube](https://www.youtube.com/channel/UCWXI5YeOsh03QvJ59PMaXFw)
## 交流
* 论坛:讨论实现、研究等。https://discuss.pytorch.org
* GitHub Issues:错误报告、功能请求、安装问题、RFCs、想法等。
* Slack:[PyTorch Slack](https://pytorch.slack.com/) 面向中高级 PyTorch 用户和开发者的主要群体,用于一般性聊天、在线讨论、协作等。如果你是寻求帮助的初学者,主要的交流平台是 [PyTorch 论坛](https://discuss.pytorch.org)。如果你需要 Slack 邀请,请填写此表单:https://goo.gl/forms/PP1AGvNHpSaJP8to1
* 新闻邮件:无干扰的单向电子邮件通讯,包含关于 PyTorch 的重要公告。你可以在这里注册:https://eepurl.com/cbG0rv
* Facebook 页面:关于 PyTorch 的重要公告。https://www.facebook.com/pytorch
* 有关品牌指南,请访问我们的网站 [pytorch.org](https://pytorch.org/)
## 版本发布与贡献
通常,PyTorch 每年会有三个次要版本发布。如果你遇到 bug,请通过[提交 issue](https://github.com/pytorch/pytorch/issues) 让我们知道。
我们感谢所有的贡献。如果你打算贡献错误修复,请直接进行,无需进一步讨论。
如果你计划贡献新功能、实用函数或核心扩展,请先开一个 issue 并与我们讨论该功能。
在没有讨论的情况下发送 PR 可能最终会导致 PR 被拒绝,因为我们可能正在将核心引向与你所了解的不同的方向。
要了解更多关于向 PyTorch 做贡献的信息,请参阅我们的[贡献页面](CONTRIBUTING.md)。有关 PyTorch 版本发布的更多信息,请参见[发布页面](RELEASE.md)。
## 团队
PyTorch 是一个社区驱动的项目,有几位熟练的工程师和研究人员为其做出贡献。
PyTorch 目前由 [Soumith Chintala](http://soumith.ch)、[Gregory Chanan](https://github.com/gchanan)、[Dmytro Dzhulgakov](https://github.com/dzhulgakov)、[Edward Yang](https://github.com/ezyang)、[Alban Desmaison](https://github.com/albanD)、[Piotr Bialecki](https://github.com/ptrblck) 和 [Nikita Shulga](https://github.com/malfet) 维护,并以各种形式获得了数百名才华横溢的个人的重大贡献。
一个不详尽但不断增长的名单需要提及:[Trevor Killeen](https://github.com/killeent)、[Sasank Chilamkurthy](https://github.com/chsasank)、[Sergey Zagoruyko](https://github.com/szagoruyko)、[Adam Lerer](https://github.com/adamlerer)、[Francisco Massa](https://github.com/fmassa)、[Alykhan Tejani](https://github.com/alykhantejani)、[Luca Antiga](https://github.com/lantiga)、[Alban Desmaison](https://github.com/albanD)、[Andreas Koepf](https://github.com/andreaskoepf)、[James Bradbury](https://github.com/jekbradbury)、[Zeming Lin](https://github.com/ebetica)、[Yuandong Tian](https://github.com/yuandong-tian)、[Guillaume Lample](https://github.com/glample)、[Marat Dukhan](https://github.com/Maratyszcza)、[Natalia Gimelshein](https://github.com/ngimel)、[Christian Sarofeen](https://github.com/csarofeen)、[Martin Raison](https://github.com/martinraison)、[Edward Yang](https://github.com/ezyang)、[Zachary Devito](https://github.com/zdevito)。
注意:本项目与同名的 [hughperkins/pytorch](https://github.com/hughperkins/pytorch) 无关。Hugh 是 Torch 社区的宝贵贡献者,并在 Torch 和 PyTorch 的许多方面提供了帮助。
## 许可证
PyTorch 采用 BSD 风格的许可证,详见 [LICENSE](LICENSE) 文件。标签:Apex, Bash脚本, C++, CUDA, NumPy, Python, PyTorch, ROCm, SciPy, Vectored Exception Handling, 人工智能, 动态神经网络, 开源库, 张量库, 张量计算, 搜索引擎爬虫, 数据擦除, 无后门, 机器学习, 模型训练, 深度学习, 用户模式Hook绕过, 神经网络框架, 科学计算, 自动微分, 计算机视觉, 逆向工具, 高性能计算