具有强大 GPU 加速功能的 Python 中的张量和动态神经网络
项目描述
PyTorch 是一个 Python 包,它提供了两个高级特性:
- 具有强大 GPU 加速功能的张量计算(如 NumPy)
- 建立在基于磁带的 autograd 系统上的深度神经网络
您可以在需要时重用您最喜欢的 Python 包(例如 NumPy、SciPy 和 Cython)来扩展 PyTorch。
此版本的 Pytorch 利用 DirectML 在 Windows 10 和适用于 Linux 的 Windows 子系统 (WSL) 上进行硬件加速。
当前支持包括来自PyTorch Benchmark和TorchVision 模型的视觉模型。请访问运营商路线图以获取运营商支持的完整列表。
PyTorch、PyTorch 徽标和任何相关标记是 Facebook Inc. 的商标。
| 系统 | 3.6 | 3.7 | 3.8 |
|---|---|---|---|
| Linux CPU | <中心>—</中心> | ||
| Linux GPU | <中心>—</中心> | ||
| 视窗 CPU / GPU | <中心>—</中心> | <中心>—</中心> | |
| Linux (ppc64le) CPU | <中心>—</中心> | <中心>—</中心> | |
| Linux (ppc64le) GPU | <中心>—</中心> | <中心>—</中心> | |
| Linux (aarch64) CPU |
另请参阅ci.pytorch.org HUD。
更多关于 PyTorch
在粒度级别上,PyTorch 是一个由以下组件组成的库:
| 零件 | 描述 |
|---|---|
| 火炬 | 像 NumPy 这样的张量库,具有强大的 GPU 支持 |
| torch.autograd | 一个基于tape的自动微分库,支持torch中所有可微分的张量运算 |
| 火炬.jit | 用于从 PyTorch 代码创建可序列化和可优化模型的编译堆栈 (TorchScript) |
| 火炬.nn | 与 autograd 深度集成的神经网络库,旨在实现最大的灵活性 |
| 火炬多处理 | Python 多处理,但具有跨进程的火炬张量的神奇内存共享。对数据加载和 Hogwild 训练很有用 |
| 火炬工具 | 为方便起见,DataLoader 和其他实用程序功能 |
通常,PyTorch 用作:
- 替代 NumPy 以使用 GPU 的强大功能。
- 一个深度学习研究平台,可提供最大的灵活性和速度。
进一步阐述:
GPU 就绪的张量库
如果你使用 NumPy,那么你就使用了张量(又名 ndarray)。
PyTorch 提供了可以在 CPU 或 GPU 上运行的张量,并大大加快了计算速度。
我们提供各种张量例程来加速和满足您的科学计算需求,例如切片、索引、数学运算、线性代数、约简。他们很快!
动态神经网络:基于磁带的 Autograd
PyTorch 有一种构建神经网络的独特方式:使用和回放录音机。
TensorFlow、Theano、Caffe 和 CNTK 等大多数框架都有静态的世界视图。一个人必须建立一个神经网络并一次又一次地重复使用相同的结构。改变网络的行为方式意味着必须从头开始。
在 PyTorch 中,我们使用了一种称为反向模式自动微分的技术,它允许您以零延迟或开销任意更改网络的行为方式。我们的灵感来自于有关该主题的几篇研究论文,以及当前和过去的工作,例如 torch-autograd、 autograd、 Chainer等。
虽然这种技术并不是 PyTorch 独有的,但它是迄今为止最快的实现之一。您可以在疯狂的研究中获得最佳的速度和灵活性。
蟒蛇优先
PyTorch 不是一个 Python 绑定到一个单一的 C++ 框架。它被构建为深度集成到 Python 中。你可以像使用NumPy / SciPy / scikit-learn等一样自然地使用它。你可以用 Python 本身编写新的神经网络层,使用你喜欢的库并使用Cython和Numba等包。我们的目标是不在适当的地方重新发明轮子。
势在必行的经历
PyTorch 被设计为直观、线性且易于使用。当你执行一行代码时,它就会被执行。没有异步的世界观。当您进入调试器或收到错误消息和堆栈跟踪时,理解它们很简单。堆栈跟踪指向您的代码的确切定义位置。我们希望您永远不要因为错误的堆栈跟踪或异步和不透明的执行引擎而花费数小时调试您的代码。
快速和精益
PyTorch 的框架开销最小。我们集成了英特尔 MKL和 NVIDIA(cuDNN、NCCL)等加速库,以最大限度地提高速度。在核心,它的 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.org
NVIDIA Jetson 平台
NVIDIA 的 Jetson Nano、Jetson TX2 和 Jetson AGX Xavier 的 Python 轮子可通过以下 URL 获得:
- 稳定的二进制文件:
- 滚动每周二进制文件:
它们需要 JetPack 4.2 及更高版本,@dusty-nv维护它们
从源头
如果从源代码安装,则需要 Python 3.6.2 或更高版本以及 C++14 编译器。此外,我们强烈建议安装Anaconda环境。您将获得高质量的 BLAS 库 (MKL),并且无论您的 Linux 发行版如何,您都将获得受控的依赖版本。
一旦你安装了Anaconda,这里是说明。
如果要使用 CUDA 支持进行编译,请安装
- NVIDIA CUDA 9.2 或以上
- NVIDIA cuDNN v7 或更高版本
- 与 CUDA 兼容的编译器注意:您可以参考cuDNN 支持矩阵,了解具有各种支持的 CUDA、CUDA 驱动程序和 NVIDIA 硬件的 cuDNN 版本
如果要禁用 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
这是由于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 上
使用 CPU 构建
使用 CPU 构建起来相当容易。建议使用 Visual Studio 2019 版本 16.7.6(MSVC 工具链版本 14.27)或更高版本。
使用 CUDA 构建
使用 CUDA 构建Pytorch需要 NVTX。NVTX 是 CUDA 分布式的一部分,它被称为“Nsight Compute”。要将其安装到已安装的 CUDA 上,请再次运行 CUDA 安装并选中相应的复选框。确保在 Visual Studio 之后安装了带有 Nsight Compute 的 CUDA。
目前支持 VS 2017 / 2019 和 Ninja 作为 CMake 的生成器。如果ninja.exe在 中检测到PATH,则默认使用 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 中
通常需要其他库,例如 Magma、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 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 支持和 cuDNN v7 的图像。你可以传递PYTHON_VERSION=x.ymake 变量来指定 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
然后,您可以通过make <format>从
docs/文件夹运行来构建文档。运行make以获取所有可用输出格式的列表。
如果你得到一个 katex 错误运行npm install katex。如果仍然存在,请尝试
npm install -g katex
之前的版本
可以在我们的网站上找到以前 PyTorch 版本的安装说明和二进制文件。
入门
三点帮助您入门:
资源
- PyTorch.org
- PyTorch 教程
- PyTorch 示例
- PyTorch 模型
- 来自 Udacity 的 PyTorch 深度学习简介
- Udacity 的 PyTorch 机器学习简介
- Coursera 的 PyTorch 深度神经网络
- PyTorch 推特
- PyTorch 博客
- PyTorch YouTube
沟通
- 论坛:讨论实现、研究等。https://discuss.pytorch.org
- GitHub 问题:错误报告、功能请求、安装问题、RFC、想法等。
- Slack:PyTorch Slack的主要受众是中等到有经验的 PyTorch 用户和开发人员,用于一般聊天、在线讨论、协作等。如果您是寻求帮助的初学者,主要媒介是PyTorch 论坛。如果您需要 slack 邀请,请填写此表格:https ://goo.gl/forms/PP1AGvNHpSaJP8to1
- 时事通讯:No-noise,一种单向电子邮件时事通讯,其中包含有关 PyTorch 的重要公告。您可以在这里注册:https ://eepurl.com/cbG0rv
- Facebook 页面:关于 PyTorch 的重要公告。https://www.facebook.com/pytorch
- 有关品牌指南,请访问我们的网站pytorch.org
发布和贡献
PyTorch 有 90 天的发布周期(主要版本)。如果您遇到错误,请通过提交问题告诉我们。
我们感谢所有贡献。如果您打算回馈错误修复,请不要进一步讨论。
如果您计划为核心贡献新功能、实用功能或扩展,请先打开一个问题并与我们讨论该功能。在没有讨论的情况下发送 PR 最终可能会导致 PR 被拒绝,因为我们可能会将核心引向与您可能意识到的不同的方向。
要了解有关为 Pytorch 做出贡献的更多信息,请参阅我们的贡献页面。
团队
PyTorch 是一个社区驱动的项目,有几位技术娴熟的工程师和研究人员为它做出了贡献。
PyTorch 目前由Adam Paszke、Sam Gross、Soumith Chintala和Gregory 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 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 877d6f7dd39fa1d7a442599a06bb0cb9b1bd5c6e8f96204f8c86ff76e9a9733b |
|
| MD5 | 3cafa61b4898c2e0ad1a7a6a417cb366 |
|
| 布莱克2-256 | fffa21edca3096ddbc8a94f1bb9a155b8ef4b67f8a952021b9887389c37aa88b |
pytorch_directml -1.8.0a0.dev220506-cp38-cp38-manylinux2014_x86_64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | f5e8150b5b5c1de251c16fc8a1da020bc0b7c5521b689c4efbb018b93bbc9512 |
|
| MD5 | 4f63ac3420535036b45f2d6203d89b48 |
|
| 布莱克2-256 | eab845f8bd4da6b35afc976f3e3b0218038bed4d616587657a2fc70c51ff843e |
pytorch_directml -1.8.0a0.dev220506-cp37-cp37m-win_amd64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b9cf0790f1da6ac9f3e85dd32aea6a50e70ab8432ecc807dedf13c45ad0f8372 |
|
| MD5 | 95334ca825db828bd535c0eb70805622 |
|