跳转到主要内容

使用Python的强GPU加速进行张量和动态神经网络

此版本被撤回的原因

已弃用,请参阅 torch-directml

项目描述

PyTorch Logo


PyTorch 是一个 Python 包,提供两个高级功能

  • 张量计算(类似于 NumPy)并具有强大的 GPU 加速
  • 基于 tape-based autograd 系统的深度神经网络

您可以在需要时重用您最喜欢的 Python 包,例如 NumPy、SciPy 和 Cython 来扩展 PyTorch。

此版本的 PyTorch 利用 DirectML 在 Windows 10 和 Windows Subsystem for Linux(WSL)上实现硬件加速。

当前支持包括来自 PyTorch BenchmarkTorchVision 模型 的视觉模型。请访问 运算符路线图 以获取支持运算符的完整列表。

PyTorch、PyTorch 标志及其相关标志是 Facebook Inc. 的商标。

系统 3.6 3.7 3.8
Linux CPU Build Status Build Status
Linux GPU Build Status Build Status
Windows CPU / GPU Build Status
Linux (ppc64le) CPU Build Status
Linux (ppc64le) GPU Build Status
Linux (aarch64) CPU Build Status Build Status Build Status

另请参阅 ci.pytorch.org HUD

更多关于 PyTorch 的信息

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

组件 描述
torch 一个类似于 NumPy 的张量库,具有强大的 GPU 支持
torch.autograd 一个基于 tape 的自动微分库,支持 torch 中的所有可微张量操作
torch.jit 一个编译栈(TorchScript),用于从 PyTorch 代码创建可序列化和可优化的模型
torch.nn 一个与 autograd 深度集成的神经网络库,旨在提供最大的灵活性
torch.multiprocessing Python 多进程,但具有跨进程的 torch 张量魔法内存共享。对于数据加载和 Hogwild 训练很有用
torch.utils DataLoader 和其他方便的实用函数

通常,PyTorch 被用作

  • NumPy 的替代品,以利用 GPU 的功能。
  • 一个提供最大灵活性和速度的深度学习研究平台。

进一步说明

GPU-Ready 张量库

如果您使用过 NumPy,那么您已经使用过张量(即 ndarray)。

Tensor illustration

PyTorch 提供可以在 CPU 或 GPU 上运行的张量,并通过大量加速计算。

我们提供多种张量例程来加速并满足您的科学计算需求,如切片、索引、数学运算、线性代数、缩减等。而且它们非常快!

动态神经网络:基于 tape 的 autograd

PyTorch以独特的方式构建神经网络:使用和回放录音机。

大多数框架如TensorFlow、Theano、Caffe和CNTK对世界有一个静态的看法。必须构建一个神经网络并反复使用相同的结构。改变网络的行为方式意味着必须从头开始。

在PyTorch中,我们使用一种称为反向模式自动微分的技术,它允许您以零延迟或开销任意改变网络的行为。我们的灵感来自关于这个主题的几篇研究论文,以及当前的和历史的工作,如torch-autogradautogradChainer等。

虽然这项技术并非PyTorch独有,但它是迄今为止最快实现之一。您将获得疯狂研究中的速度和灵活性的最佳组合。

Dynamic graph

Python 优先

PyTorch不是将Python绑定到单体C++框架中。它是为深度集成到Python而构建的。您可以像使用NumPy / SciPy / scikit-learn等一样自然地使用它。您可以使用Python本身编写新的神经网络层,使用您喜欢的库,并使用如CythonNumba之类的包。我们的目标是在适当的地方不重复造轮子。

命令式体验

PyTorch设计得直观、线性思维、易于使用。当您执行一行代码时,它会立即执行。没有异步的世界观。当您陷入调试器或收到错误信息和堆栈跟踪时,理解它们是直接的。堆栈跟踪指向代码定义的确切位置。我们希望您永远不要因为糟糕的堆栈跟踪或异步和不透明的执行引擎而花费几个小时调试代码。

快速且精简

PyTorch具有最小的框架开销。我们将加速库如Intel MKL和NVIDIA(cuDNNNCCL)集成到系统中,以最大限度地提高速度。在核心,其CPU和GPU张量和神经网络后端(TH、THC、THNN、THCUNN)成熟并经过多年的测试。

因此,PyTorch非常快——无论您运行的是小型还是大型神经网络。

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

无需痛苦的扩展

编写新的神经网络模块或与PyTorch的Tensor API接口被设计成简单明了,具有最少的抽象。

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

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

安装

二进制文件

从二进制文件通过Conda或pip轮安装的命令在我们的网站上:https://pytorch.ac.cn

NVIDIA Jetson 平台

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

它们需要4.2或更高版本的JetPack,并且由@dusty-nv维护。

从源码

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

一旦您安装了Anaconda,以下是安装说明。

如果您想编译带有CUDA支持,请安装

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

如果您为NVIDIA的Jetson平台(Jetson Nano、TX1、TX2、AGX Xavier)构建,有关安装Jetson Nano PyTorch的说明在这里

安装依赖项

常见

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

在Linux上

# 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

安装 PyTorch

在Linux上

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

请注意,如果您使用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.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上

使用CPU构建

使用CPU构建相对简单。建议使用Visual Studio 2019版本16.7.6(MSVC工具链版本14.27)或更高版本。

使用CUDA构建

NVTX是构建带有CUDA的PyTorch所需的。NVTX是CUDA分发的一部分,其中它被称为“Nsight Compute”。要将它安装到已安装的CUDA中,请再次运行CUDA安装,并勾选相应的复选框。确保在Visual Studio之后安装了带有Nsight Compute的CUDA。

目前,VS 2017 / 2019和Ninja被支持作为CMake的生成器。如果检测到ninja.exePATH中,则Ninja将用作默认生成器,否则它将使用VS 2017 / 2019。
如果选择Ninja作为生成器,则最新版本的MSVC将被选择为底层工具链。

CUDA、MSVC和PyTorch版本相互依赖;请从此表中安装匹配的版本

CUDA版本 最新支持的VS版本 PyTorch版本
9.2 Visual Studio 2017更新5(15.5)(_MSC_VER <= 1912) 0.4.1 ~ 1.5.1
10.1 Visual Studio 2019 (16.X) (_MSC_VER < 1930) 1.3.0 ~ 1.7.0
10.2 Visual Studio 2019 (16.X) (_MSC_VER < 1930) 1.5.0 ~ 1.7.0
11.0 Visual Studio 2019 (16.X) (_MSC_VER < 1930) 1.7.0

注意:从16.7.1开始的几个Visual Studio 2019版本存在编译问题,因此请确保您的Visual Studio 2019版本不在16.7.1 ~ 16.7.5之间。

通常需要其他库,如MagmaoneDNN,也称为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镜像,并使用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 的docker构建。

提供Dockerfile以构建具有Cuda支持和cuDNN v7的镜像。您可以使用PYTHON_VERSION=x.y make变量指定Miniconda使用的Python版本,或者将其设置为空以使用默认版本。

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

构建文档

要使用各种格式构建文档,您需要Sphinx和readthedocs主题。

cd docs/
pip install -r requirements.txt

然后您可以从docs/目录运行make <format>来构建文档。运行make以获取所有可用输出格式列表。

如果您遇到katex错误,请运行npm install katex。如果问题仍然存在,请尝试运行npm install -g katex

以前的版本

旧版PyTorch的安装说明和二进制文件可以在我们的网站上找到。

入门指南

三个入门指针

资源

通信

发布和贡献

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

我们感谢所有贡献。如果您计划贡献错误修复,请直接这样做,无需进一步讨论。

如果您计划贡献新功能、实用函数或核心扩展,请首先打开一个问题,并与我们讨论该功能。在不讨论的情况下发送PR可能会导致PR被拒绝,因为我们可能将核心引向您可能不知道的不同方向。

有关如何向PyTorch做出贡献的更多信息,请参阅我们的贡献页面

团队

PyTorch是一个由几位技术娴熟工程师和研究人员驱动的社区项目。

PyTorch目前由Adam PaszkeSam GrossSoumith ChintalaGregory Chanan维护,该项目得到了数百位才华横溢的个人以各种形式和方式的重要贡献。以下是非详尽但不断增长的一份名单: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文件所示。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码发行版

此版本没有提供源代码发行版文件。请参阅生成发行版存档的教程。

构建发行版

pytorch_directml-1.8.0a0.dev220506-cp38-cp38-win_amd64.whl (81.4 MB 查看散列)

上传时间: CPython 3.8 Windows x86-64

pytorch_directml-1.8.0a0.dev220506-cp37-cp37m-win_amd64.whl (81.3 MB 查看散列)

上传时间: CPython 3.7m Windows x86-64

pytorch_directml-1.8.0a0.dev220506-cp37-cp37m-manylinux2014_x86_64.whl (69.9 MB 查看散列)

上传时间: CPython 3.7m

pytorch_directml-1.8.0a0.dev220506-cp36-cp36m-win_amd64.whl (81.3 MB 查看散列)

上传于 CPython 3.6m Windows x86-64

支持者: