PyTorch é um pacote Python que fornece dois recursos de alto nível:
Você pode reutilizar seus pacotes Python favoritos, como NumPy, SciPy e Cython, para estender o PyTorch quando necessário.
Nossa integridade do tronco (sinais de integração contínua) pode ser encontrada em hud.pytorch.org.
Aprenda o básico do PyTorch
Em um nível granular, PyTorch é uma biblioteca que consiste nos seguintes componentes:
Componente | Descrição |
---|---|
tocha | Uma biblioteca Tensor como NumPy, com forte suporte a GPU |
tocha.autograd | Uma biblioteca de diferenciação automática baseada em fita que oferece suporte a todas as operações diferenciáveis do Tensor no torch |
tocha.jit | Uma pilha de compilação (TorchScript) para criar modelos serializáveis e otimizáveis a partir do código PyTorch |
tocha.nn | Uma biblioteca de redes neurais profundamente integrada ao autograd projetada para máxima flexibilidade |
tocha.multiprocessamento | Multiprocessamento Python, mas com compartilhamento mágico de memória de tensores de tocha entre processos. Útil para carregamento de dados e treinamento Hogwild |
tocha.utils | DataLoader e outras funções utilitárias para maior conveniência |
Normalmente, PyTorch é usado como:
Elaborando ainda mais:
Se você usa NumPy, então usou Tensores (também conhecidos como ndarray).
PyTorch fornece tensores que podem residir na CPU ou na GPU e acelera enormemente a computação.
Fornecemos uma ampla variedade de rotinas de tensores para acelerar e atender às suas necessidades de computação científica, como fatiamento, indexação, operações matemáticas, álgebra linear, reduções. E eles são rápidos!
PyTorch tem uma maneira única de construir redes neurais: usando e reproduzindo um gravador.
A maioria das estruturas como TensorFlow, Theano, Caffe e CNTK têm uma visão estática do mundo. É preciso construir uma rede neural e reutilizar a mesma estrutura continuamente. Mudar a forma como a rede se comporta significa que é preciso começar do zero.
Com o PyTorch, usamos uma técnica chamada diferenciação automática de modo reverso, que permite alterar arbitrariamente a maneira como sua rede se comporta, sem atraso ou sobrecarga. Nossa inspiração vem de vários artigos de pesquisa sobre este tema, bem como de trabalhos atuais e anteriores, como torch-autograd, autograd, Chainer, etc.
Embora esta técnica não seja exclusiva do PyTorch, é uma das implementações mais rápidas até hoje. Você obtém o melhor em velocidade e flexibilidade para suas pesquisas malucas.
PyTorch não é uma ligação Python em uma estrutura C++ monolítica. Ele foi desenvolvido para ser profundamente integrado ao Python. Você pode usá-lo naturalmente como usaria NumPy/SciPy/scikit-learn etc. Você pode escrever suas novas camadas de rede neural no próprio Python, usando suas bibliotecas favoritas e pacotes como Cython e Numba. Nosso objetivo é não reinventar a roda quando apropriado.
PyTorch foi projetado para ser intuitivo, linear e fácil de usar. Quando você executa uma linha de código, ela é executada. Não existe uma visão assíncrona do mundo. Quando você acessa um depurador ou recebe mensagens de erro e rastreamentos de pilha, entendê-los é simples. O rastreamento de pilha aponta exatamente para onde seu código foi definido. Esperamos que você nunca gaste horas depurando seu código devido a rastreamentos de pilha incorretos ou mecanismos de execução assíncronos e opacos.
PyTorch tem sobrecarga mínima de estrutura. Integramos bibliotecas de aceleração como Intel MKL e NVIDIA (cuDNN, NCCL) para maximizar a velocidade. Basicamente, seu tensor de CPU e GPU e back-ends de rede neural estão maduros e foram testados há anos.
Conseqüentemente, o PyTorch é bastante rápido – quer você execute redes neurais pequenas ou grandes.
O uso de memória no PyTorch é extremamente eficiente em comparação com o Torch ou algumas das alternativas. Escrevemos alocadores de memória personalizados para a GPU para garantir que seus modelos de aprendizado profundo tenham a máxima eficiência de memória. Isso permite treinar modelos de aprendizado profundo maiores do que antes.
Escrever novos módulos de rede neural ou fazer interface com a API Tensor do PyTorch foi projetado para ser simples e com o mínimo de abstrações.
Você pode escrever novas camadas de rede neural em Python usando a API torch ou suas bibliotecas favoritas baseadas em NumPy, como SciPy.
Se você deseja escrever suas camadas em C/C++, fornecemos uma API de extensão conveniente que é eficiente e com o mínimo de padrões. Nenhum código wrapper precisa ser escrito. Você pode ver um tutorial aqui e um exemplo aqui.
Comandos para instalar binários via Conda ou pipwheels estão em nosso site: https://pytorch.org/get-started/locally/
Rodas Python para Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX e Jetson AGX Orin da NVIDIA são fornecidas aqui e o contêiner L4T é publicado aqui
Eles exigem JetPack 4.2 e superior, e @dusty-nv e @ptrblck os mantêm.
Se estiver instalando a partir do código-fonte, você precisará de:
* PyTorch CI usa Visual C++ BuildTools, que vem com o Visual Studio Enterprise, Professional ou Community Editions. Você também pode instalar as ferramentas de compilação em https://visualstudio.microsoft.com/visual-cpp-build-tools/. As ferramentas de compilação não vêm com o Visual Studio Code por padrão.
* É altamente recomendável instalar um ambiente Anaconda. Você obterá uma biblioteca BLAS (MKL) de alta qualidade e versões de dependência controlada, independentemente da sua distribuição Linux.
Um exemplo de configuração de ambiente é mostrado abaixo:
$ 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
Se você deseja compilar com suporte a CUDA, selecione uma versão suportada de CUDA em nossa matriz de suporte e instale o seguinte:
Nota: Você pode consultar a matriz de suporte cuDNN para versões cuDNN com vários CUDA suportados, driver CUDA e hardware NVIDIA
Se você deseja desabilitar o suporte CUDA, exporte a variável de ambiente USE_CUDA=0
. Outras variáveis de ambiente potencialmente úteis podem ser encontradas em setup.py
.
Se você estiver construindo para plataformas Jetson da NVIDIA (Jetson Nano, TX1, TX2, AGX Xavier), as instruções para instalar o PyTorch para Jetson Nano estão disponíveis aqui
Se você deseja compilar com suporte ROCm, instale
Por padrão, o sistema de compilação espera que o ROCm seja instalado em /opt/rocm
. Se o ROCm estiver instalado em um diretório diferente, a variável de ambiente ROCM_PATH
deverá ser configurada para o diretório de instalação do ROCm. O sistema de compilação detecta automaticamente a arquitetura da GPU AMD. Opcionalmente, a arquitetura da GPU AMD pode ser explicitamente definida com a variável de ambiente PYTORCH_ROCM_ARCH
Arquitetura da GPU AMD
Se desejar desabilitar o suporte ROCm, exporte a variável de ambiente USE_ROCM=0
. Outras variáveis de ambiente potencialmente úteis podem ser encontradas em setup.py
.
Se você deseja compilar com suporte para GPU Intel, siga estes
Se você deseja desativar o suporte à GPU Intel, exporte a variável de ambiente USE_XPU=0
. Outras variáveis de ambiente potencialmente úteis podem ser encontradas em 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
Comum
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
No 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
No Mac OS
# 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
No 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
No Linux
Se você deseja compilar o PyTorch com a nova ABI C++ habilitada, primeiro execute este comando:
export _GLIBCXX_USE_CXX11_ABI=1
Observe que a partir do PyTorch 2.5, a compilação do PyTorch com XPU oferece suporte a ABIs C++ novas e antigas. Anteriormente, o XPU suportava apenas a nova ABI C++. Se você deseja compilar com suporte para GPU Intel, siga Suporte para GPU Intel.
Se você estiver compilando para AMD ROCm, primeiro execute este comando:
# Only run this if you're compiling for ROCm
python tools/amd_build/build_amd.py
Instale o PyTorch
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py develop
No macOS
python3 setup.py develop
No Windows
Se você deseja construir código python legado, consulte Construindo em código legado e CUDA
Compilações somente de CPU
Neste modo, os cálculos do PyTorch serão executados na sua CPU, não na sua GPU
python setup.py develop
Nota sobre OpenMP: A implementação OpenMP desejada é Intel OpenMP (iomp). Para vincular ao iomp, você precisará baixar manualmente a biblioteca e configurar o ambiente de construção ajustando CMAKE_INCLUDE_PATH
e LIB
. A instrução aqui é um exemplo para configurar MKL e Intel OpenMP. Sem essas configurações para o CMake, o tempo de execução do Microsoft Visual C OpenMP (vcomp) será usado.
Construção baseada em CUDA
Neste modo, os cálculos do PyTorch aproveitarão sua GPU via CUDA para processamento de números mais rápido
NVTX é necessário para construir Pytorch com CUDA. NVTX faz parte da distribuição CUDA, onde é chamado de "Nsight Compute". Para instalá-lo em um CUDA já instalado, execute a instalação do CUDA mais uma vez e marque a caixa de seleção correspondente. Certifique-se de que o CUDA com Nsight Compute esteja instalado após o Visual Studio.
Atualmente, VS 2017/2019 e Ninja são suportados como gerador do CMake. Se ninja.exe
for detectado em PATH
, então Ninja será usado como gerador padrão, caso contrário, usará VS 2017/2019.
Se Ninja for selecionado como gerador, o MSVC mais recente será selecionado como o conjunto de ferramentas subjacente.
Bibliotecas adicionais como Magma, oneDNN, também conhecida como MKLDNN ou DNNL e Sccache são frequentemente necessárias. Consulte o auxiliar de instalação para instalá-los.
Você pode consultar o script build_pytorch.bat para algumas outras configurações de variáveis de ambiente
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
Você pode ajustar a configuração das variáveis cmake opcionalmente (sem compilar primeiro), fazendo o seguinte. Por exemplo, o ajuste dos diretórios pré-detectados para CuDNN ou BLAS pode ser feito com essa etapa.
No 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
No 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
Você também pode extrair uma imagem docker pré-construída do Docker Hub e executá-la com o docker v19.03+
docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest
Observe que o PyTorch usa memória compartilhada para compartilhar dados entre processos, portanto, se o multiprocessamento de tocha for usado (por exemplo, para carregadores de dados multithread), o tamanho do segmento de memória compartilhada padrão com o qual o contêiner é executado não é suficiente e você deve aumentar o tamanho da memória compartilhada com --ipc=host
ou --shm-size
opções de linha de comando para nvidia-docker run
.
NOTA: Deve ser construído com uma versão docker > 18.06
O Dockerfile
é fornecido para construir imagens com suporte CUDA 11.1 e cuDNN v8. Você pode passar a variável make PYTHON_VERSION=xy
para especificar qual versão do Python deve ser usada pelo Miniconda ou deixá-la sem definição para usar o padrão.
make -f docker.Makefile
# images are tagged as docker.io/${your_docker_username}/pytorch
Você também pode passar a variável de ambiente CMAKE_VARS="..."
para especificar variáveis adicionais do CMake a serem passadas ao CMake durante a compilação. Consulte setup.py para obter a lista de variáveis disponíveis.
make -f docker.Makefile
Para construir documentação em vários formatos, você precisará do Sphinx e do tema readthedocs.
cd docs/
pip install -r requirements.txt
Você pode então construir a documentação executando make
na pasta docs/
. Execute make
para obter uma lista de todos os formatos de saída disponíveis.
Se você receber um erro katex, execute npm install katex
. Se persistir, tente npm install -g katex
Nota: se você instalou
nodejs
com um gerenciador de pacotes diferente (por exemplo,conda
), entãonpm
provavelmente instalará uma versão dokatex
que não é compatível com a sua versão donodejs
e as compilações de documentos falharão. Uma combinação de versões que funcionam é[email protected]
e[email protected]
. Para instalar o último comnpm
você pode executarnpm install -g [email protected]
Instruções de instalação e binários para versões anteriores do PyTorch podem ser encontrados em nosso site.
Três dicas para você começar:
Normalmente, o PyTorch tem três lançamentos menores por ano. Informe-nos se encontrar um bug registrando um problema.
Agradecemos todas as contribuições. Se você está planejando contribuir com correções de bugs, faça-o sem mais discussões.
Se você planeja contribuir com novos recursos, funções utilitárias ou extensões para o núcleo, primeiro abra um problema e discuta o recurso conosco. Enviar um PR sem discussão pode acabar resultando em um PR rejeitado porque podemos estar levando o núcleo em uma direção diferente da que você imagina.
Para saber mais sobre como fazer uma contribuição para o Pytorch, consulte nossa página de Contribuição. Para obter mais informações sobre os lançamentos do PyTorch, consulte Página de lançamento.
PyTorch é um projeto conduzido pela comunidade com vários engenheiros e pesquisadores habilidosos contribuindo para ele.
PyTorch é atualmente mantido por Soumith Chintala, Gregory Chanan, Dmytro Dzhulgakov, Edward Yang e Nikita Shulga, com contribuições importantes vindas de centenas de indivíduos talentosos em várias formas e meios. Uma lista não exaustiva, mas crescente, precisa mencionar: 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.
Nota: Este projeto não está relacionado ao hughperkins/pytorch com o mesmo nome. Hugh é um contribuidor valioso para a comunidade Torch e ajudou em muitas coisas com Torch e PyTorch.
PyTorch possui uma licença estilo BSD, conforme encontrada no arquivo LICENSE.