PyTorch:支持GPU加速与自动求导,安装使用全攻略来了!

1. PyTorch简介

PyTorch是一个Python包,具备两大高级特性:一是支持强大GPU加速的张量计算(类似NumPy);二是基于磁带式自动求导系统构建的深度神经网络。必要时,可复用喜欢的Python包,如NumPy、SciPy和Cython来扩展PyTorch。主干健康状况(持续集成信号)可在hud.pytorch.org查看。

2. 关于PyTorch

2.1 支持GPU的张量库

若使用过NumPy,就用过张量(即ndarray)。PyTorch提供的张量既可以存储在CPU上,也能存储在GPU上,能极大加速计算。其提供了丰富的张量操作,如切片、索引、数学运算、线性代数和归约操作等,以满足科学计算需求,而且速度极快。

2.2 动态神经网络:磁带式自动求导

PyTorch构建神经网络的方式独特,采用磁带记录和回放机制。大多数框架,如TensorFlow、Theano、Caffe和CNTK对网络结构的看法是静态的,必须先构建好神经网络,然后反复使用相同结构,若要改变网络行为,就得从头开始。而PyTorch使用反向模式自动求导技术,可随意改变网络行为,且无延迟和额外开销。该技术的灵感源于相关研究论文,以及torch - autograd、autograd、Chainer等现有和过往的工作。虽然此技术并非PyTorch独有,但它是目前最快的实现之一,能为研究提供速度和灵活性。

2.3 Python优先

PyTorch并非将Python绑定到庞大的C++框架,而是深度集成于Python。可以像使用NumPy、SciPy或scikit - learn一样自然地使用它。能用Python编写新的神经网络层,借助喜欢的库,还能使用Cython和Numba等包。目标是避免重复造轮子。

2.4 命令式体验

PyTorch设计直观,思路清晰,易于使用。执行代码行时会立即执行,没有异步的概念。调试或收到错误信息和堆栈跟踪时,理解起来很直接,堆栈跟踪能准确指向代码定义位置,无需因糟糕的堆栈跟踪或异步不透明的执行引擎而花费数小时调试代码。

2.5 快速轻量

PyTorch框架开销极小。集成了Intel MKL和NVIDIA(cuDNN、NCCL)等加速库以提升速度。其CPU和GPU张量及神经网络后端成熟,经过多年测试。因此,无论运行小型还是大型神经网络,PyTorch都很快。与Torch或其他一些替代方案相比,PyTorch的内存使用效率极高。为GPU编写了自定义内存分配器,确保深度学习模型的内存使用效率最大化,能训练更大的深度学习模型。

2.6 轻松扩展

编写新的神经网络模块或与PyTorch的张量API交互简单直接,抽象程度低。可以使用torch API或喜欢的基于NumPy的库(如SciPy)在Python中编写新的神经网络层。若想使用C/C++编写层,提供了方便的扩展API,高效且样板代码少,无需编写包装代码。可查看教程和示例。

3. 安装

3.1 二进制文件

通过Conda或pip wheels安装二进制文件的命令可在网站查看。

3.2 NVIDIA Jetson平台

为NVIDIA的Jetson Nano、Jetson TX1/TX2、Jetson Xavier NX/AGX和Jetson AGX Orin提供了Python wheels,可在相应位置获取,L4T容器发布在相应位置。它们需要JetPack 4.2及以上版本,由@dusty - nv和@ptrblck维护。

3.3 从源码安装
3.3.1 前提条件

若从源码安装,需要:Python 3.10或更高版本;完全支持C++20的编译器,如clang或gcc(Linux上需要gcc 11.3.0或更新版本);Visual Studio或Visual Studio Build Tool(仅适用于Windows);至少10 GB的可用磁盘空间;首次构建需要30 - 60分钟(后续重建会快很多)。PyTorch CI使用Visual C++ BuildTools,它包含在Visual Studio Enterprise、Professional或Community版本中。也可从相应网站安装构建工具,Visual Studio Code默认不包含这些构建工具。以下是环境设置示例:Linux:source /bin/activate;conda create -y -n ;conda activate 。Windows:source \Scripts\activate.bat;conda create -y -n ;conda activate ;call "C:\Program Files\Microsoft Visual Studio\Community\VC\Auxiliary\Build\vcvarsall.bat" x64。不一定需要conda环境,只要系统安装了所有必要但无法通过pip包获取的依赖项(如CUDA、MKL),也可在标准虚拟环境(如使用uv创建的环境)中构建PyTorch。

3.3.2 NVIDIA CUDA支持

若要编译支持CUDA的版本,需从支持矩阵中选择支持的CUDA版本,然后安装以下组件:NVIDIA CUDA;NVIDIA cuDNN v9.0或更高版本;与CUDA兼容的编译器。注意:可以参考cuDNN支持矩阵查看不同支持的CUDA、CUDA驱动和NVIDIA硬件对应的cuDNN版本。若要禁用CUDA支持,可导出环境变量 `USE_CUDA = 0`。其他可能有用的环境变量可在 `setup.py` 中找到。若CUDA安装在非标准位置,需设置 `PATH` 以便找到所需的 `nvcc`。若为NVIDIA的Jetson平台(Jetson Nano、TX1、TX2、AGX Xavier)构建,可在相应位置查看安装PyTorch的说明。

3.3.3 AMD ROCm支持

若要编译支持ROCm的版本,需安装AMD ROCm 4.0及以上版本。目前,ROCm仅支持Linux系统。默认情况下,构建系统期望ROCm安装在 `/opt/rocm` 目录。若ROCm安装在其他目录,必须将 `ROCM_PATH` 环境变量设置为ROCm安装目录。构建系统会自动检测AMD GPU架构,也可通过 `PYTORCH_ROCM_ARCH` 环境变量显式设置AMD GPU架构。若要禁用ROCm支持,可导出环境变量 `USE_ROCM = 0`。其他可能有用的环境变量可在 `setup.py` 中找到。

3.3.4 Intel GPU支持

若要编译支持Intel GPU的版本,请遵循Intel GPU的PyTorch前提条件说明。Intel GPU在Linux和Windows系统均受支持。若要禁用Intel GPU支持,可导出环境变量 `USE_XPU = 0`。其他可能有用的环境变量可在 `setup.py` 中找到。

3.3.5 获取PyTorch源码

git clone https://github.com/pytorch/pytorch;cd pytorch;若更新现有检出:git submodule sync;git submodule update --init --recursive。

3.3.6 安装依赖项
3.3.6.1 通用

克隆源码后,在PyTorch目录中运行以下命令:pip install --group dev。Linux:pip install mkl - static mkl - include;仅CUDA:如有需要,为GPU添加LAPACK支持;magma安装:在激活的conda环境中运行,指定CUDA版本进行安装;.ci/docker/common/install_magma_conda.sh 12.4;(可选)如果使用torch.compile和inductor/triton,安装匹配版本的triton;克隆后在pytorch目录中运行;若要支持Intel GPU,请在运行命令前显式执行 `export USE_XPU = 1`;make triton。Windows:pip install mkl - static mkl - include;若需要torch.distributed,添加以下包;Windows上的分布式包支持是实验性功能,可能会有变化;conda install -c conda - forge libuv = 1.51。

3.3.7 安装PyTorch

Linux:若为AMD ROCm编译,先运行以下命令:python tools/amd_build/build_amd.py;安装PyTorch:export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}";python -m pip install --no - build - isolation -v -e .;非conda环境(如Python venv)的CMake前缀;激活venv后调用;export CMAKE_PREFIX_PATH="${VIRTUAL_ENV}:${CMAKE_PREFIX_PATH}"。macOS:python -m pip install --no - build - isolation -v -e .。Windows:若要构建旧版Python代码,请参考旧版代码和CUDA CPU仅构建说明。在此模式下,PyTorch计算将在CPU上运行,而非GPU:python -m pip install --no - build - isolation -v -e .。关于OpenMP:推荐使用Intel OpenMP(iomp)。若要链接iomp,需手动下载库并通过调整 `CMAKE_INCLUDE_PATH` 和 `LIB` 来设置构建环境,相应位置是设置MKL和Intel OpenMP的示例。若未为CMake进行这些配置,将使用Microsoft Visual C OpenMP运行时(vcomp)。

3.3.7.1 基于CUDA的构建

在此模式下,PyTorch计算将通过CUDA利用GPU进行更快的数值计算。构建支持CUDA的PyTorch需要NVTX,NVTX是CUDA发行版的一部分,在其中称为“Nsight Compute”。若要将其安装到已安装的CUDA中,需再次运行CUDA安装程序并勾选相应复选框。确保在安装Visual Studio后再安装带有Nsight Compute的CUDA。目前,VS 2017 / 2019和Ninja支持作为CMake的生成器。若在 `PATH` 中检测到 `ninja.exe`,则默认使用Ninja作为生成器,否则使用VS 2017 / 2019。若选择Ninja作为生成器,将选择最新的MSVC作为底层工具链。通常还需要Magma、oneDNN(即MKLDNN或DNNL)和Sccache等额外库,请参考安装助手进行安装。可以参考 `build_pytorch.bat` 脚本进行其他环境变量配置。

3.3.7.2 Intel GPU构建

在此模式下,将构建支持Intel GPU的PyTorch。请确保已正确安装通用前提条件和Intel GPU相关前提条件,并在开始构建前配置好环境变量。构建工具方面,需要Visual Studio 2022。然后可使用以下命令构建PyTorch:CMD命令;设置CMAKE_PREFIX_PATH以帮助查找相应包;%CONDA_PREFIX%仅在 `conda activate custom_env` 后有效;if defined CMAKE_PREFIX_PATH ( set "CMAKE_PREFIX_PATH=%CONDA_PREFIX%\Library;%CMAKE_PREFIX_PATH%" ) else ( set "CMAKE_PREFIX_PATH=%CONDA_PREFIX%\Library" );python -m pip install --no - build - isolation -v -e .。

3.3.8 调整构建选项(可选)

可以选择调整CMake变量的配置(无需先构建),例如调整预先检测到的CuDNN或BLAS目录。Linux:export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}";CMAKE_ONLY = 1 python setup.py build;ccmake build;或cmake - gui build。macOS:export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}";MACOSX_DEPLOYMENT_TARGET = 11.0;CMAKE_ONLY = 1 python setup.py build;ccmake build;或cmake - gui build。

3.4 Docker镜像
3.4.1 使用预构建镜像

也可以从Docker Hub拉取预构建的Docker镜像,并使用Docker v23.0+运行:docker run --gpus all --rm -ti --ipc = host pytorch/pytorch:latest。请注意,PyTorch使用共享内存在进程间共享数据,因此若使用torch多进程(如多线程数据加载器),容器运行的默认共享内存段大小不足,应使用 `--ipc = host` 或 `--shm - size` 命令行选项来增加共享内存大小。

3.4.2 自行构建镜像

注意:必须使用Docker版本 >= 23.0进行构建。提供的Dockerfile可用于构建支持CUDA 12.1和cuDNN v9的镜像。可以通过传递 `PYTHON_VERSION=x.y` 变量来指定Miniconda使用的Python版本,若不设置则使用默认值,因为Dockerfile使用系统Python。make -f docker.Makefile;镜像标签为docker.io/${your_docker_username}/pytorch。还可以传递 `CMAKE_VARS="..."` 环境变量来指定构建期间传递给CMake的额外CMake变量,可用变量列表见 `setup.py`。make -f docker.Makefile。

3.5 构建文档

若要以各种格式构建文档,需要Sphinx和 `pytorch_sphinx_theme2`。在本地构建文档前,确保环境中已安装torch。对于小的修复,可以按照入门指南安装夜间版本;对于更复杂的修复,如添加新模块和为新模块添加文档字符串,可能需要从源码安装torch。文档字符串约定见文档字符串指南。cd docs/;pip install -r requirements.txt;make html;make serve。运行 `make` 可获取所有可用输出格式的列表。若遇到katex错误,运行 `npm install katex`;若问题依旧,尝试 `npm install -g katex`。若遇到numpy不兼容错误,运行 `pip install 'numpy<2'`。

3.6 解决CI错误

构建可能会显示本地没有的错误,以下是查找与文档相关错误的方法。若构建出现错误,在PR上会看到类似信息:所有与文档相关的错误会出现在标题中包含“doc”的作业里。即便看起来这些作业与文档无关,也可点击作业查看日志。通过查看构建情况,可确定哪些作业与文档相关以及是否有错误。可能还会在PR上看到类似评论,点击gh链接打开日志,就能看到与文档相关的错误。始终可以在PR的Checks标签页中找到相关文档构建,向下滚动到pull部分,点击或展开折叠项查看所有作业,其中文档作业会高亮显示,点击后可在底部看到文档作业。

3.7 构建PDF

若要编译PyTorch所有文档的PDF,需确保安装了texlive和LaTeX。在macOS上,可使用以下命令安装:brew install --cask mactex。创建PDF:make latexpdf。这将在 `build/latex` 目录生成必要文件,进入该目录并执行:make LATEXOPTS="-interaction = nonstopmode"。这将生成包含所需内容的 `pytorch.pdf`,再次运行该命令可生成正确的目录和索引。注意:若要查看目录,请在PDF查看器中切换到目录视图。

3.8 旧版本

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

4. 入门指南

以下是帮助入门的指引:教程:助你理解和使用PyTorch;示例:涵盖各个领域、易于理解的PyTorch代码;API参考;术语表。

5. 资源

PyTorch官网;PyTorch教程;PyTorch示例;PyTorch模型;Udacity的PyTorch深度学习入门;Udacity的PyTorch机器学习入门;Coursera的PyTorch深度神经网络;PyTorch Twitter;PyTorch博客;PyTorch YouTube。

6. 交流渠道

论坛:讨论实现、研究等内容;GitHub Issues:报告bug、提出功能请求、安装问题、征求意见等;Slack:PyTorch Slack主要面向有一定经验的PyTorch用户和开发者,用于日常交流、在线讨论和协作等。若你是初学者寻求帮助,主要渠道是PyTorch论坛。若需要Slack邀请,请填写相应表单;时事通讯:无干扰的单向电子邮件通讯,提供PyTorch的重要公告,可在相应位置订阅;Facebook页面:发布PyTorch的重要公告,品牌指南请访问网站。

7. 版本发布与贡献

通常,PyTorch每年有三个小版本发布。若遇到bug,请提交issue告知,感谢所有贡献。若计划贡献bug修复,可直接进行;若计划贡献新功能、实用函数或核心扩展,请先提交issue讨论。未经讨论直接发送PR可能会被拒绝,因为对核心的发展方向可能与了解的不同。若想了解更多关于为PyTorch做贡献的信息,请查看贡献页面。关于PyTorch版本发布的更多信息,请查看发布页面。

8. 团队

PyTorch是一个社区驱动的项目,有许多优秀的工程师和研究人员为其做出贡献。目前由Soumith Chintala、Gregory Chanan、Dmytro Dzhulgakov、Edward Yang、Alban Desmaison、Piotr Bialecki和Nikita 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提供了很多帮助。

9. 许可证

PyTorch采用BSD风格许可证,具体见 `LICENSE` 文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值