PyTorch는 두 가지 고급 기능을 제공하는 Python 패키지입니다.
NumPy, SciPy, Cython 등 자주 사용하는 Python 패키지를 재사용하여 필요할 때 PyTorch를 확장할 수 있습니다.
트렁크 상태(지속적 통합 신호)는 hud.pytorch.org에서 확인할 수 있습니다.
PyTorch의 기본 사항 알아보기
세부적인 수준에서 PyTorch는 다음 구성 요소로 구성된 라이브러리입니다.
요소 | 설명 |
---|---|
토치 | 강력한 GPU 지원을 갖춘 NumPy와 같은 Tensor 라이브러리 |
토치.autograd | 토치에서 모든 미분 가능한 Tensor 연산을 지원하는 테이프 기반 자동 미분 라이브러리 |
토치.jit | PyTorch 코드에서 직렬화 및 최적화 가능한 모델을 생성하기 위한 컴파일 스택(TorchScript) |
토치.nn | 유연성을 극대화하도록 설계된 autograd와 긴밀하게 통합된 신경망 라이브러리 |
토치.멀티프로세싱 | Python 멀티프로세싱이지만 프로세스 전반에 걸쳐 토치 Tensor의 마법 같은 메모리 공유가 가능합니다. 데이터 로딩 및 Hogwild 훈련에 유용합니다. |
토치.utils | 편의를 위한 DataLoader 및 기타 유틸리티 기능 |
일반적으로 PyTorch는 다음 중 하나로 사용됩니다.
추가 설명:
NumPy를 사용한다면 Tensor(일명 ndarray)를 사용한 것입니다.
PyTorch는 CPU나 GPU에 존재할 수 있는 Tensor를 제공하고 계산을 엄청난 양으로 가속화합니다.
우리는 슬라이싱, 인덱싱, 수학 연산, 선형 대수학, 축소와 같은 과학적 계산 요구 사항을 가속화하고 충족하기 위해 다양한 텐서 루틴을 제공합니다. 그리고 그들은 빠릅니다!
PyTorch에는 테이프 레코더를 사용하고 재생하는 독특한 방법으로 신경망을 구축할 수 있습니다.
TensorFlow, Theano, Caffe 및 CNTK와 같은 대부분의 프레임워크는 세상에 대한 정적인 관점을 가지고 있습니다. 신경망을 구축하고 동일한 구조를 계속해서 재사용해야 합니다. 네트워크 작동 방식을 변경한다는 것은 처음부터 다시 시작해야 함을 의미합니다.
PyTorch에서는 역방향 자동 차별화라는 기술을 사용합니다. 이를 통해 지연이나 오버헤드 없이 네트워크가 임의로 작동하는 방식을 변경할 수 있습니다. 우리는 이 주제에 관한 여러 연구 논문과 torch-autograd, autograd, Chainer 등과 같은 현재 및 과거 작업에서 영감을 얻었습니다.
이 기술은 PyTorch에만 있는 것은 아니지만 현재까지 가장 빠른 구현 중 하나입니다. 당신은 미친 연구를 위한 최고의 속도와 유연성을 얻을 수 있습니다.
PyTorch는 모놀리식 C++ 프레임워크에 대한 Python 바인딩이 아닙니다. Python에 긴밀하게 통합되도록 구축되었습니다. NumPy/SciPy/scikit-learn 등을 사용하는 것처럼 자연스럽게 사용할 수 있습니다. 즐겨 사용하는 라이브러리를 사용하고 Cython 및 Numba와 같은 패키지를 사용하여 Python 자체에서 새로운 신경망 계층을 작성할 수 있습니다. 우리의 목표는 적절한 경우 바퀴를 재발명하지 않는 것입니다.
PyTorch는 직관적이고 선형적이며 사용하기 쉽도록 설계되었습니다. 코드 줄을 실행하면 해당 코드가 실행됩니다. 세상에 대한 비동기적인 관점은 없습니다. 디버거에 접속하거나 오류 메시지와 스택 추적을 받으면 이를 이해하는 것은 간단합니다. 스택 추적은 코드가 정의된 정확한 위치를 가리킵니다. 잘못된 스택 추적이나 비동기적이고 불투명한 실행 엔진으로 인해 코드를 디버깅하는 데 시간을 낭비하지 않기를 바랍니다.
PyTorch에는 최소한의 프레임워크 오버헤드가 있습니다. 속도를 극대화하기 위해 Intel MKL 및 NVIDIA(cuDNN, NCCL)와 같은 가속 라이브러리를 통합합니다. 핵심에는 CPU, GPU Tensor 및 신경망 백엔드가 성숙되어 있으며 수년간 테스트를 거쳤습니다.
따라서 PyTorch는 소규모 또는 대규모 신경망을 실행하든 관계없이 매우 빠릅니다.
PyTorch의 메모리 사용량은 Torch나 일부 대안에 비해 매우 효율적입니다. 우리는 딥 러닝 모델이 메모리 효율성을 극대화할 수 있도록 GPU용 사용자 정의 메모리 할당자를 작성했습니다. 이를 통해 이전보다 더 큰 딥 러닝 모델을 훈련할 수 있습니다.
새로운 신경망 모듈을 작성하거나 PyTorch의 Tensor API와 인터페이스하는 것은 간단하고 최소한의 추상화를 사용하도록 설계되었습니다.
토치 API나 SciPy와 같은 즐겨 사용하는 NumPy 기반 라이브러리를 사용하여 Python에서 새로운 신경망 레이어를 작성할 수 있습니다.
C/C++로 레이어를 작성하려는 경우 최소한의 상용구를 사용하여 효율적이고 편리한 확장 API를 제공합니다. 래퍼 코드를 작성할 필요가 없습니다. 여기에서 튜토리얼을 볼 수 있고 여기에서 예제를 볼 수 있습니다.
Conda 또는 pip 휠을 통해 바이너리를 설치하는 명령은 당사 웹사이트(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 Studio Enterprise, Professional 또는 Community Edition과 함께 제공되는 Visual C++ BuildTools를 사용합니다. 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 StudioCommunityVCAuxiliaryBuildvcvarsall.bat " x64
CUDA 지원으로 컴파일하려면 지원 매트릭스에서 지원되는 CUDA 버전을 선택한 후 다음을 설치하십시오.
참고: 다양한 CUDA, CUDA 드라이버 및 NVIDIA 하드웨어가 지원되는 cuDNN 버전에 대한 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 아키텍처를 자동으로 감지합니다. 선택적으로 AMD GPU 아키텍처는 PYTORCH_ROCM_ARCH
환경 변수 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
리눅스에서
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
리눅스에서
새로운 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
파이토치 설치
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 계산이 GPU가 아닌 CPU에서 실행됩니다.
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는 "Nsight Compute"라고 불리는 CUDA 배포판의 일부입니다. 이미 설치된 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에 대해 사전 감지된 디렉터리를 조정하는 것은 이러한 단계를 통해 수행할 수 있습니다.
리눅스에서
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는 공유 메모리를 사용하여 프로세스 간에 데이터를 공유하므로 토치 다중 처리가 사용되는 경우(예: 다중 스레드 데이터 로더의 경우) 컨테이너가 실행되는 기본 공유 메모리 세그먼트 크기가 충분하지 않으며 다음 중 하나를 사용하여 공유 메모리 크기를 늘려야 합니다 --ipc=host
nvidia-docker run
에 대한 --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
실행하여 문서를 작성할 수 있습니다. 사용 가능한 모든 출력 형식 목록을 얻으려면 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는 1년에 3번의 마이너 릴리스를 제공합니다. 버그가 발생하면 문제를 제출하여 알려주시기 바랍니다.
모든 기여에 감사드립니다. 버그 수정에 기여할 계획이라면 더 이상의 논의 없이 그렇게 하시기 바랍니다.
새로운 기능, 유틸리티 기능 또는 코어 확장을 기여할 계획이라면 먼저 이슈를 열고 해당 기능에 대해 논의하십시오. 논의 없이 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, 마라트 두칸, 나탈리아 기멜셰인, 크리스티안 사로핀, 마틴 레이슨, 에드워드 양, 재커리 데비토.
참고: 이 프로젝트는 동일한 이름을 가진hughperkins/pytorch와 관련이 없습니다. Hugh는 Torch 커뮤니티의 소중한 공헌자이며 Torch와 PyTorch에 많은 도움을 주었습니다.
PyTorch에는 LICENSE 파일에 있는 BSD 스타일 라이선스가 있습니다.