Pytorch-强GPU加速的Python中的张量和动态神经网络

PyTorch是一个Python软件包,提供了两个高级功能。

张量计算(如NumPy),具有强大的GPU加速能力,建立在基于磁带的autograd系统上的深度神经网络,在需要的时候,你可以重复使用你最喜欢的Python包,如NumPy、SciPy和Cython,来扩展PyTorch。

系统 3.6 3.7 3.8
Linux CPU
Linux GPU
Windows CPU/GPU
Linux(Ppc64le)CPU
Linux(Ppc64le)GPU
Linux(Aarch64)CPU

另请参阅ci.pytorch.org HUD

更多关于PyTorch的信息

在粒度级别上,PyTorch是一个由以下组件组成的库:

组件 描述
火炬 像NumPy这样的张量器库,具有强大的GPU支持
torch.autograd 基于磁带的自动区分库,支持TORCH中的所有可微分张量操作
torch.jit 从PyTorch代码创建可序列化和可优化模型的编译堆栈(TorchScript)
torch.nn 与Autograd深度集成的神经网络库,旨在实现最大的灵活性
torch.multiprocessing Python多处理,但具有跨进程共享火炬张量的神奇内存。适用于数据加载和HogWild培训
torch.utils 为方便起见,DataLoader和其他实用程序功能

通常,PyTorch用作以下任一用途:

  • 替代NumPy使用GPU的功能
  • 提供最大灵活性和速度的深度学习研究平台

进一步阐述:

一种支持GPU的张量库

如果您使用NumPy,则您使用的是张量(也称为(Ndarray)

PyTorch提供的张量既可以在CPU上运行,也可以在GPU上运行,从而将计算速度大幅提高

我们提供各种各样的张量例程来加速和满足您的科学计算需求,例如切片、索引、数学运算、线性代数、约简。而且他们跑得很快!

动态神经网络:基于磁带的自动评分

PyTorch有一种构建神经网络的独特方式:使用和重放磁带录音机

大多数框架,如TensorFlow、Theano、Caffe和CNTK都有静电的世界观。人们必须建立一个神经网络,并一次又一次地重复使用相同的结构。改变网络的行为方式意味着必须从头开始

对于PyTorch,我们使用一种称为反向模式自动区分的技术,该技术允许您在没有延迟或开销的情况下任意更改网络的行为方式。我们的灵感来自于几篇关于这一主题的研究论文,以及目前和过去的工作,如手电筒-自动分级自动评分链条

虽然这种技术不是PyTorch独有的,但它是迄今为止最快的实现之一。你在疯狂的研究中获得了最快的速度和最好的灵活性

Python优先

PyTorch不是到单一C++框架的Python绑定。它是为深度集成到Python而构建的。你可以像以前一样自然地使用它NumPy/科学Py/科学工具包-学习等。您可以用Python本身编写新的神经网络层,使用您喜欢的库并使用包,如CythonNumba我们的目标是不在适当的地方重新发明轮子。

势在必行的经验

PyTorch被设计为直观、线性的思想,并且易于使用。当您执行一行代码时,它就会被执行。没有异步的世界观。当您进入调试器或接收错误消息和堆栈跟踪时,理解它们很简单。堆栈跟踪准确地指向定义代码的位置。我们希望您永远不要因为错误的堆栈跟踪或异步且不透明的执行引擎而花费数小时调试您的代码

快速精益

PyTorch的框架开销最小。我们集成了加速库,如英特尔MKL和NVIDIA(CuDNNNCCL)以最大限度地提高速度。在核心上,其CPU和GPU张量以及神经网络后端(TH、THC、THNN、THCUNN)已经成熟,并且经过多年的测试

因此,PyTorch是相当快的-无论您运行的是小型神经网络还是大型神经网络

与Torch或某些替代方案相比,PyTorch中的内存使用效率非常高。我们已经为GPU编写了自定义内存分配器,以确保您的深度学习模型具有最高的内存效率。这使您能够训练比以前更大的深度学习模型

无痛延长

编写新的神经网络模块,或者与PyTorch的张量API接口,设计得简单明了,抽象最少

您可以使用Torch API在Python中编写新的神经网络图层或者您最喜欢的基于NumPy的库,如SciPy

如果您想用C/C++编写您的层,我们提供了一个方便的扩展API,它是高效的,并且具有最少的样板。不需要编写包装器代码。你可以看到此处提供教程这里有一个例子

安装

二进制文件

通过conda或pip轮从二进制文件安装的命令在我们的网站上提供:https://pytorch.org

NVIDIA Jetson平台

NVIDIA的Jetson Nano、Jetson TX2和Jetson AGX Xavier的Python轮可通过以下URL获得:

它们需要JetPack 4.2和更高版本,以及@达斯蒂-内华达州维护它们

来自源

如果从源代码安装,则需要Python 3.6.2或更高版本和C++14编译器。此外,我们强烈建议您安装蟒蛇环境。您将获得一个高质量的BLAS库(MKL),并且无论您的Linux发行版是什么,您都可以获得受控的依赖项版本

一旦你有了蟒蛇已安装,以下是说明

如果要使用CUDA支持进行编译,请安装

如果要禁用CUDA支持,请导出环境变量USE_CUDA=0其他可能有用的环境变量可以在setup.py

如果您正在为NVIDIA的Jetson平台(Jetson Nano、TX1、TX2、AGX Xavier)构建,请参阅以下安装PyTorch for Jetson Nano的说明此处提供

如果要使用ROCM支持进行编译,请安装

  • AMD ROCM4.0及更高版本的安装
  • ROCM目前仅支持Linux系统

如果要禁用ROCM支持,请导出环境变量USE_ROCM=0其他可能有用的环境变量可以在setup.py

安装依赖项

常见

conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses

在Linux上

# CUDA only: Add LAPACK support for the GPU if needed
conda install -c pytorch magma-cuda110  # or the magma-cuda* that matches your CUDA version from https://anaconda.org/pytorch/repo

在MacOS上

# Add these packages if torch.distributed is needed
conda install pkg-config libuv

在Windows上

# 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

获取PyTorch源代码

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 --jobs 0

安装PyTorch

在Linux上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py install

请注意,如果您正在为ROCM编译,则必须首先运行此命令:

python tools/amd_build/build_amd.py

请注意,如果您使用的是Python,您可能会遇到链接器导致的错误:

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

这是由以下原因引起的ld从Conda环境跟踪系统ld您应该使用较新版本的Python来修复此问题。推荐的Python版本为3.6.10+、3.7.6+和3.8.1+

在MacOS上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install

每个CUDA版本仅支持一个特定的XCode版本。据报道,以下组合可与PyTorch配合使用

CUDA版 Xcode版本
10.0 Xcode 9.4
10.1 Xcode 10.1

在Windows上

选择正确的Visual Studio版本

在Visual Studio的新版本中有时会出现回归,因此最好使用相同的Visual Studio版本16.8.5作为Pytorch CI。虽然PyTorch CI使用Visual Studio BuildTools,但您可以使用Visual Studio Enterprise、Professional或Community

如果您想构建遗留的python代码,请参阅在遗留代码和CUDA的基础上构建

使用CPU构建

使用CPU构建相当容易

有关OpenMP的说明:所需的OpenMP实施是英特尔OpenMP(IOMP)。为了链接到iomp,您需要手动下载库并通过调整设置构建环境CMAKE_INCLUDE_PATHLIB该说明这里是设置MKL和英特尔OpenMP的示例。如果没有这些CMake配置,将使用Microsoft Visual C OpenMP运行时(vcomp

使用CUDA构建

NVTX是使用CUDA构建Pytorch所必需的。NVTX是CUDA分布式的一部分,被称为“NSight Compute”。要将其安装到已安装的CUDA上,请再次运行CUDA安装并选中相应的复选框。确保在Visual Studio之后安装带Night Compute的CUDA

目前支持VS 2017/2019,支持忍者作为CMake的生成器。如果ninja.exe在以下位置检测到PATH,则使用忍者作为默认生成器,否则将使用VS 2017/2019
如果选择忍者作为生成器,则会选择最新的MSVC作为底层工具链

其他库,如岩浆oneDNN,也称为MKLDNN或DNNL,以及Sccache是经常需要的。请参阅安装帮助器要安装它们,请执行以下操作

您可以参考build_pytorch.bat其他一些环境变量配置的脚本

cmd

:: [Optional] If you want to build with the VS 2017 generator for old CUDA and PyTorch, please change the value in the next line to `Visual Studio 15 2017`.
:: Note: This value is useless if Ninja is detected. However, you can force that by using `set USE_NINJA=OFF`.
set CMAKE_GENERATOR=Visual Studio 16 2019

:: 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^,16^) -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 setup.py install
调整生成选项(可选)

您可以通过执行以下操作来调整cmake变量的配置(无需首先构建)。例如,可以通过这样的步骤来调整CuDNN或BLAS的预先检测的目录

在Linux上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py build --cmake-only
ccmake build  # or cmake-gui build

在MacOS上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py build --cmake-only
ccmake build  # or cmake-gui build

Docker镜像

使用预构建映像

您还可以从Docker Hub获取预构建的坞站映像,并使用Docker v19.03+运行

docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest

请注意,PyTorch使用共享内存在进程之间共享数据,因此如果使用Torch多处理(例如,对于多线程数据加载器),运行容器的默认共享内存段大小是不够的,您应该使用以下两种方法之一来增加共享内存大小--ipc=host--shm-size命令行选项用于nvidia-docker run

自己打造形象

注:必须使用18.06以上的坞站版本构建

这个Dockerfile用于构建支持CUDA 11.1和cuDNN V8的映像。你可以通过PYTHON_VERSION=x.yMake Variable指定Miniconda要使用的Python版本,或将其保留为未设置为使用默认版本

make -f docker.Makefile
# images are tagged as docker.io/${your_docker_username}/pytorch

构建文档

要构建各种格式的文档,您需要狮身人面像以及阅读文档的主题

cd docs/
pip install -r requirements.txt

然后,您可以通过运行以下命令来生成文档make <format>docs/文件夹。跑make要获取所有可用输出格式的列表,请执行以下操作

如果运行Katex错误npm install katex如果它持续存在,请尝试npm install -g katex

以前的版本

早期PyTorch版本的安装说明和二进制文件可在以下位置找到我们的网站

快速入门

帮助您入门的三点建议:

资源

沟通

发布和贡献

PyTorch有90天的发布周期(主要版本)。如果您通过以下方式遇到错误,请通知我们提交问题

我们感谢所有的贡献。如果您计划回馈错误修复,请在不做任何进一步讨论的情况下这样做

如果您计划为核心贡献新的功能、实用程序功能或扩展,请先打开一个问题并与我们讨论该功能。未经讨论发送PR可能最终导致拒绝PR,因为我们可能会将核心带到与您可能意识到的方向不同的方向

要了解更多关于为Pytorch做出贡献的信息,请参阅我们的投稿页面

团队

PyTorch是一个社区驱动的项目,有几个熟练的工程师和研究人员参与其中

PyTorch目前由亚当·帕兹克萨姆·格罗斯苏史密斯·钦塔拉格雷戈里·查南(Gregory Chanan)主要贡献来自于数以百计的各种形式和手段的人才。值得一提的是:特雷弗·基林(Trevor Killeen)、萨桑克·奇拉姆库尔蒂(Sasank Chilamkurthy)、谢尔盖·扎戈鲁伊科(Sergey Zagoruyko)、亚当·莱勒(Adam Lerer)、弗朗西斯科·马萨(Francisco Massa)、阿利汗·特贾尼(Alykhan Tejani)、卢卡·安提加(Luca Antiga)、阿尔班·德斯迈森(Alban Desmaison)、安德烈亚斯·科普夫(Andreas Koepf)、詹姆斯·布拉德伯里(James Bradbury)、林泽明、田远东、纪尧姆·兰普尔(Guillaume Lample

注:此项目与哈伯金/火炬同名同姓。休是Torch社区的一位有价值的贡献者,并在Torch和PyTorch的许多事情上提供了帮助

许可证

PyTorch具有BSD样式的许可证,可以在许可证