PyTorch 是一個 Python 包,提供兩個進階功能:
您可以在需要時重複使用您最喜歡的 Python 套件(例如 NumPy、SciPy 和 Cython)來擴充 PyTorch。
我們的主幹健康狀況(持續整合訊號)可以在 hud.pytorch.org 上找到。
了解 PyTorch 的基礎知識
從粒度上講,PyTorch 是一個由以下元件組成的函式庫:
成分 | 描述 |
---|---|
火炬 | 像 NumPy 這樣的 Tensor 庫,具有強大的 GPU 支持 |
火炬.autograd | 基於磁帶的自動微分庫,支援 torch 中所有可微分張量運算 |
火炬.jit | 用於從 PyTorch 程式碼建立可序列化和可最佳化模型的編譯堆疊 (TorchScript) |
火炬網 | 與 autograd 深度整合的神經網路庫,旨在實現最大的靈活性 |
torch.multiprocessing | Python 多處理,但具有跨進程的火炬張量的神奇記憶體共享。對於資料載入和 Hogwild 訓練很有用 |
火炬工具 | DataLoader 和其他方便的實用功能 |
通常,PyTorch 用作:
進一步闡述:
如果您使用 NumPy,那麼您就使用了 Tensors(又稱 ndarray)。
PyTorch 提供的張量可以運行在 CPU 或 GPU 上,並且大幅加速運算。
我們提供各種張量程式來加速和滿足您的科學計算需求,例如切片、索引、數學運算、線性代數、歸約。而且它們速度很快!
PyTorch 有一種建構神經網路的獨特方法:使用和重播錄音機。
大多數框架(例如 TensorFlow、Theano、Caffe 和 CNTK)都具有靜態的世界視圖。人們必須建構一個神經網路並一次又一次地重複使用相同的結構。改變網路的行為方式意味著必須從頭開始。
在 PyTorch 中,我們使用一種稱為反向模式自動微分的技術,它允許您以零延遲或零開銷任意改變網路的行為。我們的靈感來自於該主題的幾篇研究論文,以及當前和過去的工作,例如 torch-autograd、autograd、Chainer 等。
雖然這種技術並不是 PyTorch 所獨有的,但它是迄今為止最快的實現之一。您可以在瘋狂的研究中獲得最佳的速度和靈活性。
PyTorch 不是綁定到整體 C++ 框架的 Python。它旨在深度整合到 Python 中。您可以像使用 NumPy / SciPy / scikit-learn 等一樣自然地使用它。我們的目標是在適當的情況下不重新發明輪子。
PyTorch 的設計直覺、思維線性且易於使用。當您執行一行程式碼時,它就會被執行。不存在異步的世界觀。當您進入偵錯器或收到錯誤訊息和堆疊追蹤時,理解它們很簡單。堆疊追蹤準確指向定義程式碼的位置。我們希望您永遠不會因為錯誤的堆疊追蹤或非同步和不透明的執行引擎而花費數小時來調試程式碼。
PyTorch 的框架開銷最小。我們整合了 Intel MKL 和 NVIDIA(cuDNN、NCCL)等加速庫,以最大限度地提高速度。從核心來看,其CPU和GPU Tensor以及神經網路後端都很成熟,並且經過了多年的測試。
因此,無論您運行小型還是大型神經網絡,PyTorch 都相當快。
與 Torch 或某些替代方案相比,PyTorch 中的記憶體使用效率非常高。我們為 GPU 編寫了自訂記憶體分配器,以確保您的深度學習模型具有最大的記憶體效率。這使您能夠訓練比以前更大的深度學習模型。
編寫新的神經網路模組或與 PyTorch 的 Tensor API 進行互動的目的是簡單明了且抽象最少。
您可以使用 torch API 或您最喜歡的基於 NumPy 的函式庫(例如 SciPy)在 Python 中編寫新的神經網路層。
如果您想用 C/C++ 編寫層,我們提供了一個方便的擴充 API,該 API 高效且樣板程式碼最少。無需編寫包裝器程式碼。您可以在此處查看教學和範例。
透過 Conda 或 pipwheel 安裝二進位檔案的命令位於我們的網站上:https://pytorch.org/get-started/locally/
此處提供了適用於 NVIDIA Jetson Nano、Jetson TX1/TX2、Jetson Xavier NX/AGX 和 Jetson AGX Orin 的 Python 輪,L4T 容器發佈於此處
它們需要 JetPack 4.2 及更高版本,@dusty-nv 和 @ptrblck 正在維護它們。
如果您從來源安裝,您將需要:
* PyTorch CI 使用 Visual C++ BuildTools,它隨 Visual Studio Enterprise、Professional 或 Community Edition 一起提供。您也可以從 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 安裝建置工具。預設情況下,Visual Studio Code不附帶建置工具。
* 我們強烈建議安裝 Anaconda 環境。您將獲得高品質的 BLAS 庫 (MKL),並且無論您的 Linux 發行版如何,您都可以獲得受控的依賴版本。
環境設定範例如下圖所示:
$ source < CONDA_INSTALL_DIR > /bin/activate
$ conda create -y -n < CONDA_NAME >
$ conda activate < CONDA_NAME >
$ source < CONDA_INSTALL_DIR > S cripts a ctivate.bat
$ conda create -y -n < CONDA_NAME >
$ conda activate < CONDA_NAME >
$ call " C:Program FilesMicrosoft Visual Studio<VERSION>CommunityVCAuxiliaryBuildvcvarsall.bat " x64
如果您想使用 CUDA 支援進行編譯,請從我們的支援清單中選擇支援的 CUDA 版本,然後安裝以下內容:
注意:您可以參考 cuDNN 支援矩陣,以了解具有各種支援的 CUDA、CUDA 驅動程式和 NVIDIA 硬體的 cuDNN 版本
如果要停用 CUDA 支持,請匯出環境變數USE_CUDA=0
。其他可能有用的環境變數可以在setup.py
中找到。
如果您正在針對 NVIDIA 的 Jetson 平台(Jetson Nano、TX1、TX2、AGX Xavier)進行構建,請在此處獲取為 Jetson Nano 安裝 PyTorch 的說明
如果您想使用 ROCm 支援進行編譯,請安裝
預設情況下,建置系統期望 ROCm 安裝在/opt/rocm
中。如果 ROCm 安裝在其他目錄中,則必須將ROCM_PATH
環境變數設定為 ROCm 安裝目錄。建置系統自動偵測 AMD GPU 架構。或者,可以使用PYTORCH_ROCM_ARCH
環境變數 AMD GPU 架構明確設定 AMD GPU 架構
如果要停用 ROCm 支持,請匯出環境變數USE_ROCM=0
。其他可能有用的環境變數可以在setup.py
中找到。
如果您想使用 Intel GPU 支援進行編譯,請依照下列步驟操作
如果要停用 Intel GPU 支持,請匯出環境變數USE_XPU=0
。其他可能有用的環境變數可以在setup.py
中找到。
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
常見的
conda install cmake ninja
# Run this command on native Windows
conda install rust
# 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
在 Linux 上
如果您想在啟用新 C++ ABI 的情況下編譯 PyTorch,請先執行下列命令:
export _GLIBCXX_USE_CXX11_ABI=1
請注意,從 PyTorch 2.5 開始,使用 XPU 建構的 PyTorch 支援新舊 C++ ABI。此前,XPU 僅支援新的 C++ ABI。如果您想使用 Intel GPU 支援進行編譯,請遵循 Intel GPU 支援。
如果您正在針對 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))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py develop
在 macOS 上
python3 setup.py develop
在 Windows 上
如果您想建立舊版Python程式碼,請參閱建置舊版程式碼和CUDA
僅 CPU 構建
在此模式下,PyTorch 運算將在您的 CPU 上運行,而不是在 GPU 上執行
python setup.py develop
關於 OpenMP 的說明:所需的 OpenMP 實作是 Intel OpenMP (iomp)。為了連結 iomp,您需要手動下載庫並透過調整CMAKE_INCLUDE_PATH
和LIB
設定來建構環境。此處的指令是設定 MKL 和 Intel OpenMP 的範例。如果沒有這些 CMake 配置,將使用 Microsoft Visual C OpenMP 執行時間 (vcomp)。
基於 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腳本
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}mklinclude
set LIB = {Your directory}mkllib; %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 StudioInstallervswhere.exe" -version [15^,17^) -products * -latest -property installationPath`) do call "% iVCAuxiliaryBuildvcvarsall.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 Studio2019CommunityVCToolsMSVC14.27.29110binHostX64x64cl.exe
python setup.py develop
您可以透過執行以下操作來選擇性地調整 cmake 變數的配置(無需先建置)。例如,調整 CuDNN 或 BLAS 的預檢測目錄可以透過這樣的步驟來完成。
在 Linux 上
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py build --cmake-only
ccmake build # or cmake-gui build
在 macOS 上
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
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
命令列選項。
注意:必須使用 docker 版本 > 18.06 建置
提供Dockerfile
用於建立支援 CUDA 11.1 和 cuDNN v8 的映像。您可以傳遞PYTHON_VERSION=xy
make 變數來指定 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
版本,並且文件建置將會失敗。已知有效的版本組合是[email protected]
和[email protected]
。要使用npm
安裝後者,您可以執行npm install -g [email protected]
先前的 PyTorch 版本的安裝說明和二進位檔案可以在我們的網站上找到。
三點幫助您入門:
通常,PyTorch 每年發布三個小版本。如果您遇到錯誤,請透過提交問題告知我們。
我們感謝所有的貢獻。如果您打算回饋錯誤修復,請這樣做,無需任何進一步的討論。
如果您打算為核心貢獻新功能、實用功能或擴展,請先提出問題並與我們討論該功能。未經討論而發送 PR 可能最終會導致 PR 被拒絕,因為我們的核心方向可能與您可能意識到的不同。
要了解有關為 Pytorch 做出貢獻的更多信息,請參閱我們的貢獻頁面。有關 PyTorch 版本的更多信息,請參閱版本頁面。
PyTorch 是一個社群驅動的項目,有多位熟練的工程師和研究人員為其做出貢獻。
PyTorch 目前由 Soumith Chintala、Gregory Chanan、Dmytro Dzhulgakov、Edward Yang 和 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 Tian 、馬拉特·杜漢、娜塔莉亞·吉梅爾辛、克里斯蒂安·薩羅芬、馬丁·雷森、愛德華·楊、扎克瑞·德維托。
注意:該項目與同名的hughperkins/pytorch無關。 Hugh 是 Torch 社群的重要貢獻者,為 Torch 和 PyTorch 的許多事情提供了幫助。
PyTorch 具有 BSD 風格的許可證,如 LICENSE 文件所示。