跳转到主要内容

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

项目描述

PyTorch Logo


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

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

您可以在需要时重用您最喜欢的Python包,如NumPy、SciPy和Cython来扩展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 方便的数据加载器和其它实用函数

通常,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的加速库(如Intel MKLcuDNNNCCL)以最大化速度。在核心上,其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/

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环境。[Anaconda],您将获得高质量的BLAS库(MKL),并且无论您的Linux发行版如何,您都将获得受控的依赖版本。

NVIDIA CUDA支持

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

注意:您可以参考[cuDNN支持矩阵](https://docs.nvda.net.cn/deeplearning/cudnn/reference/support-matrix.html),以获取各种支持的CUDA、CUDA驱动程序和NVIDIA硬件的cuDNN版本。

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

如果您正在为NVIDIA的Jetson平台(Jetson Nano、TX1、TX2、AGX Xavier)构建,有关安装PyTorch for Jetson Nano的说明[点击此处](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)。

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上

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

在Windows上

pip install mkl-static 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](https://anaconda.net.cn/distribution/#download-section),您可能会遇到由链接器引起的错误。

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/](https://visualstudio.microsoft.com/visual-cpp-build-tools/)安装构建工具。默认情况下,构建工具不包含在Visual Studio Code中。

如果您想构建遗留的python代码,请参阅[在遗留代码和CUDA上构建](https://github.com/pytorch/pytorch/blob/main/CONTRIBUTING.md#building-on-legacy-code-and-cuda)。

仅CPU构建

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

conda activate
python setup.py develop

关于OpenMP的说明:期望的OpenMP实现是Intel OpenMP (iomp)。为了链接到iomp,您需要手动下载库,并通过调整CMAKE_INCLUDE_PATHLIB来设置构建环境。[此处](https://github.com/pytorch/pytorch/blob/main/docs/source/notes/windows.rst#building-from-source)的说明是设置MKL和Intel OpenMP的示例。如果没有这些CMake的配置,将使用Microsoft Visual C OpenMP运行时(vcomp)。

基于CUDA的构建

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

构建支持CUDA的PyTorch需要NVTX。NVTX是CUDA发行版的一部分,被称为“Nsight Compute”。要将其安装在已安装的CUDA上,请再次运行CUDA安装程序并勾选相应的复选框。确保CUDA和Nsight Compute在Visual Studio之后安装。

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

还需要一些额外的库,例如MagmaoneDNN,也称为MKLDNN或DNNL、以及Sccache。请参阅安装辅助工具以安装它们。

您还可以参考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编译器变量来指定Miniconda使用的Python版本,或者将其留空以使用默认版本。

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

您还可以传递CMAKE_VARS="..."环境变量来指定在构建期间传递给CMake的额外CMake变量。有关可用变量的列表,请参阅setup.py

make -f docker.Makefile

构建文档

要构建不同格式的文档,您需要Sphinx和readthedocs主题。

cd docs/
pip install -r requirements.txt

然后,您可以从docs/文件夹运行make <format>来构建文档。运行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://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-2.4.1-cp312-none-macosx_11_0_arm64.whl (62.1 MB 查看哈希)

上传时间 CPython 3.12 macOS 11.0+ ARM64

torch-2.4.1-cp312-cp312-win_amd64.whl (199.4 MB 查看哈希)

上传时间 CPython 3.12 Windows x86-64

torch-2.4.1-cp312-cp312-manylinux2014_aarch64.whl (89.6 MB 查看哈希)

上传时间 CPython 3.12

torch-2.4.1-cp312-cp312-manylinux1_x86_64.whl (797.0 MB 查看哈希)

上传时间 CPython 3.12

torch-2.4.1-cp311-none-macosx_11_0_arm64.whl (62.1 MB 查看哈希)

上传时间 CPython 3.11 macOS 11.0+ ARM64

torch-2.4.1-cp311-cp311-win_amd64.whl (199.4 MB 查看哈希)

上传时间 CPython 3.11 Windows x86-64

torch-2.4.1-cp311-cp311-manylinux2014_aarch64.whl (89.7 MB 查看哈希)

上传时间 CPython 3.11

torch-2.4.1-cp311-cp311-manylinux1_x86_64.whl (797.1 MB 查看哈希)

上传时间 CPython 3.11

torch-2.4.1-cp310-none-macosx_11_0_arm64.whl (62.1 MB 查看哈希)

上传时间 CPython 3.10 macOS 11.0+ ARM64

torch-2.4.1-cp310-cp310-win_amd64.whl (199.4 MB 查看哈希)

上传时间 CPython 3.10 Windows x86-64

torch-2.4.1-cp310-cp310-manylinux2014_aarch64.whl (89.7 MB 查看哈希)

上传于 CPython 3.10

torch-2.4.1-cp310-cp310-manylinux1_x86_64.whl (797.1 MB 查看哈希值)

上传于 CPython 3.10

torch-2.4.1-cp39-none-macosx_11_0_arm64.whl (62.1 MB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

torch-2.4.1-cp39-cp39-win_amd64.whl (199.3 MB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

torch-2.4.1-cp39-cp39-manylinux2014_aarch64.whl (89.7 MB 查看哈希值)

上传于 CPython 3.9

torch-2.4.1-cp39-cp39-manylinux1_x86_64.whl (797.1 MB 查看哈希值)

上传于 CPython 3.9

torch-2.4.1-cp38-none-macosx_11_0_arm64.whl (62.1 MB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

torch-2.4.1-cp38-cp38-win_amd64.whl (199.4 MB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

torch-2.4.1-cp38-cp38-manylinux2014_aarch64.whl (89.7 MB 查看哈希值)

上传于 CPython 3.8

torch-2.4.1-cp38-cp38-manylinux1_x86_64.whl (797.1 MB 查看哈希值)

上传于 CPython 3.8