PyTorch — это пакет Python, который предоставляет две функции высокого уровня:
Вы можете повторно использовать свои любимые пакеты Python, такие как NumPy, SciPy и Cython, для расширения PyTorch при необходимости.
Состояние нашего ствола (сигналы непрерывной интеграции) можно найти на hud.pytorch.org.
Изучите основы PyTorch
На детальном уровне PyTorch представляет собой библиотеку, состоящую из следующих компонентов:
Компонент | Описание |
---|---|
факел | Библиотека Tensor, такая как NumPy, с мощной поддержкой графического процессора. |
факел.автоград | Библиотека автоматического дифференцирования на ленточной основе, которая поддерживает все дифференцируемые операции Tensor в Torch. |
torch.jit | Стек компиляции (TorchScript) для создания сериализуемых и оптимизируемых моделей из кода PyTorch. |
torch.nn | Библиотека нейронных сетей, глубоко интегрированная с autograd и обеспечивающая максимальную гибкость. |
факел.мультипроцессинг | Многопроцессорность Python, но с магическим разделением памяти между тензорами факелов между процессами. Полезно для загрузки данных и обучения Хогвилду. |
факел.utils | DataLoader и другие служебные функции для удобства. |
Обычно PyTorch используется либо как:
Разрабатываем дальше:
Если вы используете NumPy, значит, вы использовали Tensors (он же ndarray).
PyTorch предоставляет тензоры, которые могут работать как на процессоре, так и на графическом процессоре, и значительно ускоряет вычисления.
Мы предоставляем широкий спектр тензорных процедур для ускорения и удовлетворения ваших потребностей в научных вычислениях, таких как нарезка, индексирование, математические операции, линейная алгебра и сокращения. И они быстрые!
PyTorch предлагает уникальный способ построения нейронных сетей: использование и воспроизведение магнитофона.
Большинство фреймворков, таких как TensorFlow, Theano, Caffe и CNTK, имеют статическое представление о мире. Приходится строить нейронную сеть и снова и снова использовать одну и ту же структуру. Изменение поведения сети означает, что придется начинать с нуля.
В PyTorch мы используем метод, называемый автодифференциацией в обратном режиме, который позволяет вам произвольно изменять поведение вашей сети с нулевой задержкой или накладными расходами. Наше вдохновение исходит из нескольких исследовательских работ по этой теме, а также текущих и прошлых работ, таких как факел-автоград, автоград, Чайнер и т. д.
Хотя этот метод не является уникальным для PyTorch, на сегодняшний день это одна из самых быстрых его реализаций. Вы получаете максимальную скорость и гибкость для своих сумасшедших исследований.
PyTorch не является привязкой Python к монолитной платформе C++. Он создан для глубокой интеграции с Python. Вы можете использовать его естественным образом, как если бы вы использовали NumPy/SciPy/scikit-learn и т. д. Вы можете писать свои новые слои нейронной сети на самом Python, используя свои любимые библиотеки и такие пакеты, как Cython и Numba. Наша цель – не изобретать велосипед там, где это необходимо.
PyTorch спроектирован интуитивно понятным, линейным по мышлению и простым в использовании. Когда вы выполняете строку кода, она выполняется. Асинхронного взгляда на мир не существует. Когда вы заходите в отладчик или получаете сообщения об ошибках и трассировку стека, понять их несложно. Трассировка стека указывает на то, где именно был определен ваш код. Мы надеемся, что вы никогда не будете тратить часы на отладку своего кода из-за плохих трассировок стека или асинхронных и непрозрачных механизмов выполнения.
PyTorch имеет минимальные накладные расходы на инфраструктуру. Мы интегрируем библиотеки ускорения, такие как Intel MKL и NVIDIA (cuDNN, NCCL), чтобы максимизировать скорость. По сути, его тензорные процессоры и графические процессоры, а также серверные части нейронных сетей являются зрелыми и проверены годами.
Следовательно, PyTorch довольно быстр — независимо от того, используете ли вы маленькие или большие нейронные сети.
Использование памяти в PyTorch чрезвычайно эффективно по сравнению с Torch или некоторыми альтернативами. Мы написали специальные распределители памяти для графического процессора, чтобы обеспечить максимальную эффективность использования памяти вашими моделями глубокого обучения. Это позволяет вам обучать более крупные модели глубокого обучения, чем раньше.
Написание новых модулей нейронной сети или взаимодействие с Tensor API PyTorch было спроектировано так, чтобы быть простым и с минимальными абстракциями.
Вы можете написать новые слои нейронной сети на Python, используя API-интерфейс torch или ваши любимые библиотеки на основе NumPy, такие как SciPy.
Если вы хотите писать свои слои на C/C++, мы предоставляем удобный API расширения, который эффективен и содержит минимум шаблонов. Никакого кода-обертки писать не нужно. Вы можете увидеть руководство здесь и пример здесь.
Команды для установки двоичных файлов через Conda или Pip Wheels находятся на нашем сайте: https://pytorch.org/get-started/locally/
Колеса Python для NVIDIA Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX и Jetson AGX Orin представлены здесь, а контейнер 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 StudioCommunityVCAuxiliaryBuildvcvarsall.bat " x64
Если вы хотите скомпилировать с поддержкой CUDA, выберите поддерживаемую версию CUDA из нашей матрицы поддержки, а затем установите следующее:
Примечание. Вы можете обратиться к матрице поддержки cuDNN для версий cuDNN с различными поддерживаемыми CUDA, драйвером CUDA и оборудованием NVIDIA.
Если вы хотите отключить поддержку CUDA, экспортируйте переменную среды USE_CUDA=0
. Другие потенциально полезные переменные среды можно найти в setup.py
.
Если вы создаете платформу NVIDIA Jetson (Jetson Nano, TX1, TX2, AGX Xavier), инструкции по установке PyTorch для Jetson Nano доступны здесь.
Если вы хотите скомпилировать с поддержкой ROCm, установите
По умолчанию система сборки ожидает, что ROCm будет установлен в /opt/rocm
. Если ROCm установлен в другой каталог, переменная среды ROCM_PATH
должна быть установлена в каталог установки ROCm. Система сборки автоматически определяет архитектуру графического процессора AMD. При желании архитектуру графического процессора AMD можно явно задать с помощью переменной среды PYTORCH_ROCM_ARCH
Архитектура графического процессора AMD.
Если вы хотите отключить поддержку ROCm, экспортируйте переменную среды USE_ROCM=0
. Другие потенциально полезные переменные среды можно найти в setup.py
.
Если вы хотите скомпилировать с поддержкой Intel GPU, следуйте этим
Если вы хотите отключить поддержку графического процессора Intel, экспортируйте переменную среды 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
Если вы хотите скомпилировать PyTorch с включенным новым C++ ABI, сначала запустите эту команду:
export _GLIBCXX_USE_CXX11_ABI=1
Обратите внимание , что начиная с PyTorch 2.5 сборка PyTorch с XPU поддерживает как новые, так и старые ABI C++. Ранее XPU поддерживал только новый C++ ABI. Если вы хотите скомпилировать с поддержкой графического процессора Intel, следуйте инструкциям по поддержке графического процессора Intel.
Если вы компилируете для 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.
Сборки только для процессора
В этом режиме вычисления PyTorch будут выполняться на вашем процессоре, а не на графическом процессоре.
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 для более быстрого вычисления чисел.
NVTX необходим для сборки Pytorch с CUDA. NVTX является частью дистрибутива CUDA, где он называется «Nsight Compute». Чтобы установить его на уже установленный CUDA, запустите установку CUDA еще раз и установите соответствующий флажок. Убедитесь, что CUDA с Nsight Compute установлена после Visual Studio.
В настоящее время в качестве генератора CMake поддерживаются VS 2017/2019 и Ninja. Если в 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 из Docker Hub и запустить его с помощью Docker v19.03+.
docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest
Обратите внимание, что PyTorch использует общую память для совместного использования данных между процессами, поэтому, если используется многопроцессорная обработка (например, для многопоточных загрузчиков данных), размера сегмента общей памяти по умолчанию, с которым работает контейнер, недостаточно, и вам следует увеличить размер общей памяти либо с помощью --ipc=host
или --shm-size
параметры командной строки для nvidia-docker run
.
ПРИМЕЧАНИЕ. Должна быть собрана с версией докера > 18.06.
Dockerfile
предоставляется для сборки образов с поддержкой CUDA 11.1 и cuDNN v8. Вы можете передать переменную make PYTHON_VERSION=xy
, чтобы указать, какую версию Python будет использовать Miniconda, или оставить ее неустановленной, чтобы использовать версию по умолчанию.
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
Затем вы можете собрать документацию, запустив make
из папки docs/
. Запустите make
, чтобы получить список всех доступных выходных форматов.
Если вы получаете ошибку katex, запустите npm install katex
. Если проблема не исчезнет, попробуйте npm install -g katex
Примечание. Если вы установили
nodejs
с другим менеджером пакетов (например,conda
), тоnpm
, вероятно, установит версиюkatex
, несовместимую с вашей версиейnodejs
, и сборка документов завершится неудачей. Известно, что работает комбинация версий:[email protected]
и[email protected]
. Чтобы установить последний с помощьюnpm
вы можете запуститьnpm install -g [email protected]
Инструкции по установке и двоичные файлы для предыдущих версий PyTorch можно найти на нашем веб-сайте.
Трехочковые для начала:
Обычно PyTorch выпускает три небольших выпуска в год. Пожалуйста, дайте нам знать, если вы столкнулись с ошибкой, сообщив о проблеме.
Мы ценим каждый вклад. Если вы планируете внести исправления ошибок, сделайте это без дальнейшего обсуждения.
Если вы планируете добавить новые функции, служебные функции или расширения в ядро, сначала откройте проблему и обсудите эту функцию с нами. Отправка PR без обсуждения может привести к отклонению PR, поскольку мы можем двигаться в другом направлении, о котором вы, возможно, знаете.
Чтобы узнать больше о внесении вклада в Pytorch, посетите нашу страницу «Вклад». Дополнительную информацию о выпусках PyTorch см. на странице «Выпуск».
PyTorch — это проект, управляемый сообществом, в котором участвуют несколько опытных инженеров и исследователей.
В настоящее время PyTorch поддерживают Сумит Чинтала, Грегори Чанан, Дмитрий Джулгаков, Эдвард Янг и Никита Шульга, при этом значительный вклад вносят сотни талантливых людей в различных формах и средствах. В неисчерпывающий, но постоянно растущий список следует упомянуть: Тревор Киллин, Сасанк Чиламкурти, Сергей Загоруйко, Адам Лерер, Франсиско Масса, Алихан Теджани, Лука Антига, Альбан Десмайсон, Андреас Кепф, Джеймс Брэдбери, Цеминг Лин, Юандонг Тянь, Гийом Лампле, Марат Духан, Наталья Гимельшейн, Кристиан Сарофин, Мартин Рэйсон, Эдвард Янг, Закари Девито.
Примечание. Этот проект не имеет отношения к одноименному проектуhughperkins/pytorch. Хью вносит ценный вклад в сообщество Torch и помогал во многих проектах Torch и PyTorch.
PyTorch имеет лицензию в стиле BSD, как указано в файле LICENSE.