跳转到主要内容

Python中的张量和动态神经网络,具有强大的GPU加速

项目描述

PyTorch Logo


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

  • 张量计算(如NumPy)具有强大的GPU加速
  • 基于自动微分系统的深度神经网络

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

我们的主干健康(持续集成信号)可以在hud.pytorch.org找到。

关于PyTorch的更多信息

学习PyTorch的基础知识

在细粒度上,PyTorch是一个包含以下组件的库

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

通常,PyTorch要么用作

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

进一步阐述

GPU就绪的张量库

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

Tensor illustration

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

我们提供各种张量例程来加速和满足你的科学计算需求,例如切片、索引、数学运算、线性代数、减少。而且它们很快!

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

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

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

在PyTorch中,我们使用称为反向模式自动微分的技巧,这使得你可以随意更改网络的行为,而没有滞后或开销。我们的灵感来自该主题的几篇研究论文,以及当前和过去的工作,例如torch-autogradautogradChainer等。

虽然这种技巧并非PyTorch独有,但它是目前为止最快的实现之一。你可以获得疯狂研究的速度和灵活性。

Dynamic graph

Python优先

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

命令式体验

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

快速且精简

PyTorch具有最小的框架开销。我们集成了Intel MKL和NVIDIA(cuDNN、NCCL)等加速库,以最大限度地提高速度。在核心,其CPU和GPU张量和神经网络后端已经成熟,并且已经经过多年的测试。

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

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

轻松扩展

编写新的神经网络模块或与PyTorch的Tensor API接口被设计得简单直观,抽象最少。

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

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

安装

二进制文件

通过Conda或pip wheel安装二进制文件的命令在我们的网站上:[https://pytorch.ac.cn/get-started/locally/](https://pytorch.ac.cn/get-started/locally/)

NVIDIA Jetson平台

NVIDIA的Jetson Nano、Jetson TX1/TX2、Jetson Xavier NX/AGX和Jetson AGX Orin的Python wheel在这里提供,L4T容器在这里发布

它们需要JetPack 4.2及以上版本,由@dusty-nv@ptrblck维护。

从源代码

先决条件

如果您是从源代码安装,您将需要

  • Python 3.8或更高版本(对于Linux,需要Python 3.8.1+)
  • 完全支持C++17的编译器,如clang或gcc(需要gcc 9.4.0或更高版本)

我们强烈建议安装一个Anaconda环境。您将获得高质量的BLAS库(MKL),并且您将获得受控的依赖关系版本,而不会影响您的Linux发行版。

NVIDIA CUDA支持

如果您想编译带有CUDA支持的版本,请从我们的支持矩阵中选择一个受支持的CUDA版本,然后安装以下内容

注意:您可以参考cuDNN支持矩阵以获取支持各种CUDA、CUDA驱动和NVIDIA硬件的cuDNN版本

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

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

AMD ROCm支持

如果您想编译带有ROCm支持的版本,请安装

  • AMD ROCm 4.0及更高版本安装
  • ROCm目前仅支持Linux系统。

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

Intel GPU支持

如果您想编译带有Intel GPU支持的版本,请遵循以下说明

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

安装依赖项

通用

conda install cmake ninja
# 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上

conda install intel::mkl-static intel::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
conda install intel::mkl-static intel::mkl-include
# Add these packages if torch.distributed is needed
conda install pkg-config libuv

在Windows上

conda install intel::mkl-static intel::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

获取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上

如果您想编译带有新C++ ABI启用的PyTorch,请首先运行此命令

export _GLIBCXX_USE_CXX11_ABI=1

如果您正在为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))/../"}
python setup.py develop

旁白:如果您正在使用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.8.1+。

在macOS上

python3 setup.py develop

在Windows上

选择正确的Visual Studio版本。

PyTorch CI使用Visual C++ BuildTools,这些工具包含在Visual Studio Enterprise、Professional或Community版本中。您也可以从https://visualstudio.microsoft.com/visual-cpp-build-tools/安装构建工具。构建工具默认不包含Visual Studio Code。

如果您想构建旧的Python代码,请参阅在旧代码和CUDA上构建

CPU-only构建

在此模式下,PyTorch计算将在您的CPU上运行,而不是GPU上。

conda activate
python setup.py develop

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

CUDA基于的构建

在此模式下,PyTorch计算将通过CUDA利用您的GPU进行更快的数值计算。

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将被选择作为底层工具链。

通常还需要额外的库,如MagmaoneDNN,也称为MKLDNN或DNNLSccache。请参阅安装辅助程序以安装它们。

您可以通过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 setup.py develop
调整构建选项(可选)

您可以通过以下方式选择性地调整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 11.1和cuDNN v8的镜像。您可以通过传递PYTHON_VERSION=x.y make变量来指定Miniconda使用的Python版本,或者将其保留为未设置以使用默认版本。

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

您还可以通过设置环境变量 CMAKE_VARS="..." 来指定在构建过程中传递给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 版本,这会导致文档构建失败。已知可以一起工作的版本是 node@6.13.1katex@0.13.18。要使用 npm 安装后者,您可以运行 npm install -g katex@0.13.18

以前的版本

有关以前 PyTorch 版本的安装说明和二进制文件,请访问我们的网站 https://pytorch.ac.cn/previous-versions

入门指南

开始使用 PyTorch 的三个要点

资源

沟通

  • 论坛:讨论实现、研究等。 https://discuss.pytorch.org
  • GitHub 问题:错误报告、功能请求、安装问题、RFC、想法等。
  • Slack:PyTorch Slack 是一个以中等到有经验的 PyTorch 用户和开发者为主体的主要受众,用于一般聊天、在线讨论、协作等。如果您是寻找帮助的初学者,主要平台是 PyTorch 论坛。如果您需要 Slack 邀请,请填写此表格: https://goo.gl/forms/PP1AGvNHpSaJP8to1
  • 时事通讯:无噪音,单向电子邮件时事通讯,包含有关 PyTorch 的重要公告。您可以在以下位置注册: https://eepurl.com/cbG0rv
  • Facebook 页面:有关 PyTorch 的重要公告。 https://#/pytorch
  • 有关品牌指南,请访问我们的网站 pytorch.org

发布和贡献

通常,PyTorch 每年有三个小版本发布。如果您遇到错误,请通过 提交问题 告诉我们。

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

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

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

团队

PyTorch 是一个由几位技艺高超的工程师和研究人员共同驱动的社区项目。

PyTorch 目前由 Soumith ChintalaGregory ChananDmytro DzhulgakovEdward YangNikita 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、Marat Dukhan、Natalia Gimelshein、Christian Sarofeen、Martin Raison、Edward Yang、Zachary Devito。

注意:本项目与同名的 hughperkins/pytorch 无关。Hugh 是 Torch 社区的一位宝贵贡献者,并帮助了许多关于 Torch 和 PyTorch 的事情。

许可证

PyTorch 使用 BSD 风格许可,如 LICENSE 文件所示。

项目详情


下载文件

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

源代码分发

此版本没有可用的源代码分发文件。请参阅 生成分发存档 的教程。

构建分发

torch_cpp-0.1.0-py3-none-any.whl (79.7 MB 查看哈希)

上传时间 Python 3

由以下支持