PyTorch es un paquete de Python que proporciona dos características de alto nivel:
Puede reutilizar sus paquetes de Python favoritos, como NumPy, SciPy y Cython, para ampliar PyTorch cuando sea necesario.
Nuestro estado del tronco (señales de integración continua) se puede encontrar en hud.pytorch.org.
Aprenda los conceptos básicos de PyTorch
A nivel granular, PyTorch es una biblioteca que consta de los siguientes componentes:
Componente | Descripción |
---|---|
antorcha | Una biblioteca Tensor como NumPy, con fuerte soporte para GPU |
antorcha.autograd | Una biblioteca de diferenciación automática basada en cinta que admite todas las operaciones de Tensor diferenciables en torch |
antorcha.jit | Una pila de compilación (TorchScript) para crear modelos serializables y optimizables a partir de código PyTorch. |
antorcha.nn | Una biblioteca de redes neuronales profundamente integrada con autograd diseñada para una máxima flexibilidad |
antorcha.multiprocesamiento | Multiprocesamiento de Python, pero con memoria mágica compartida de tensores de antorcha entre procesos. Útil para carga de datos y entrenamiento de Hogwild. |
antorcha.utils | DataLoader y otras funciones de utilidad para mayor comodidad |
Normalmente, PyTorch se utiliza como:
Desarrollando más:
Si usa NumPy, entonces ha usado Tensores (también conocidos como ndarray).
PyTorch proporciona tensores que pueden vivir en la CPU o en la GPU y acelera el cálculo en gran medida.
Proporcionamos una amplia variedad de rutinas tensoriales para acelerar y satisfacer sus necesidades de cálculo científico, como corte, indexación, operaciones matemáticas, álgebra lineal y reducciones. ¡Y son rápidos!
PyTorch tiene una forma única de construir redes neuronales: usar y reproducir una grabadora.
La mayoría de los marcos como TensorFlow, Theano, Caffe y CNTK tienen una visión estática del mundo. Hay que construir una red neuronal y reutilizar la misma estructura una y otra vez. Cambiar la forma en que se comporta la red significa que hay que empezar desde cero.
Con PyTorch, utilizamos una técnica llamada diferenciación automática en modo inverso, que le permite cambiar la forma en que se comporta su red de forma arbitraria sin retrasos ni sobrecargas. Nuestra inspiración proviene de varios artículos de investigación sobre este tema, así como de trabajos actuales y pasados, como torch-autograd, autograd, Chainer, etc.
Si bien esta técnica no es exclusiva de PyTorch, es una de las implementaciones más rápidas hasta la fecha. Obtienes lo mejor en velocidad y flexibilidad para tu loca investigación.
PyTorch no es un enlace de Python a un marco monolítico de C++. Está diseñado para integrarse profundamente en Python. Puede usarlo de forma natural como usaría NumPy / SciPy / scikit-learn, etc. Puede escribir sus nuevas capas de red neuronal en Python, usando sus bibliotecas favoritas y usando paquetes como Cython y Numba. Nuestro objetivo es no reinventar la rueda cuando corresponda.
PyTorch está diseñado para ser intuitivo, de pensamiento lineal y fácil de usar. Cuando ejecutas una línea de código, se ejecuta. No existe una visión asincrónica del mundo. Cuando ingresa a un depurador o recibe mensajes de error y seguimientos de pila, comprenderlos es sencillo. El seguimiento de la pila apunta exactamente a donde se definió su código. Esperamos que nunca pase horas depurando su código debido a seguimientos de pila incorrectos o motores de ejecución asincrónicos y opacos.
PyTorch tiene una sobrecarga de marco mínima. Integramos bibliotecas de aceleración como Intel MKL y NVIDIA (cuDNN, NCCL) para maximizar la velocidad. En esencia, su CPU y GPU Tensor y sus backends de red neuronal están maduros y han sido probados durante años.
Por lo tanto, PyTorch es bastante rápido, ya sea que ejecute redes neuronales grandes o pequeñas.
El uso de memoria en PyTorch es extremadamente eficiente en comparación con Torch o algunas de las alternativas. Hemos escrito asignadores de memoria personalizados para la GPU para garantizar que sus modelos de aprendizaje profundo tengan la máxima eficiencia de memoria. Esto le permite entrenar modelos de aprendizaje profundo más grandes que antes.
Escribir nuevos módulos de redes neuronales o interactuar con la API Tensor de PyTorch se diseñó para ser sencillo y con abstracciones mínimas.
Puede escribir nuevas capas de redes neuronales en Python utilizando la API de antorcha o sus bibliotecas basadas en NumPy favoritas, como SciPy.
Si desea escribir sus capas en C/C++, le proporcionamos una API de extensión conveniente que es eficiente y con un mínimo de texto repetitivo. No es necesario escribir ningún código contenedor. Puedes ver un tutorial aquí y un ejemplo aquí.
Los comandos para instalar binarios a través de Conda o pip wheels se encuentran en nuestro sitio web: https://pytorch.org/get-started/locally/
Las ruedas Python para Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX y Jetson AGX Orin de NVIDIA se proporcionan aquí y el contenedor L4T se publica aquí.
Requieren JetPack 4.2 y superior, y @dusty-nv y @ptrblck los mantienen.
Si está instalando desde la fuente, necesitará:
* PyTorch CI utiliza Visual C++ BuildTools, que vienen con Visual Studio Enterprise, Professional o Community Editions. También puede instalar las herramientas de compilación desde https://visualstudio.microsoft.com/visual-cpp-build-tools/. Las herramientas de compilación no vienen con Visual Studio Code de forma predeterminada.
* Recomendamos encarecidamente instalar un entorno Anaconda. Obtendrá una biblioteca BLAS (MKL) de alta calidad y obtendrá versiones de dependencia controladas independientemente de su distribución de Linux.
A continuación se muestra un ejemplo de configuración del entorno:
$ 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
Si desea compilar con soporte CUDA, seleccione una versión compatible de CUDA de nuestra matriz de soporte y luego instale lo siguiente:
Nota: Puede consultar la matriz de compatibilidad de cuDNN para conocer las versiones de cuDNN con los distintos CUDA, controladores CUDA y hardware NVIDIA compatibles.
Si desea deshabilitar la compatibilidad con CUDA, exporte la variable de entorno USE_CUDA=0
. Se pueden encontrar otras variables de entorno potencialmente útiles en setup.py
.
Si está compilando para las plataformas Jetson de NVIDIA (Jetson Nano, TX1, TX2, AGX Xavier), las instrucciones para instalar PyTorch para Jetson Nano están disponibles aquí
Si desea compilar con soporte ROCm, instale
De forma predeterminada, el sistema de compilación espera que ROCm se instale en /opt/rocm
. Si ROCm está instalado en un directorio diferente, la variable de entorno ROCM_PATH
debe configurarse en el directorio de instalación de ROCm. El sistema de compilación detecta automáticamente la arquitectura de la GPU AMD. Opcionalmente, la arquitectura de GPU AMD se puede configurar explícitamente con la variable de entorno PYTORCH_ROCM_ARCH
Arquitectura de GPU AMD
Si desea deshabilitar la compatibilidad con ROCm, exporte la variable de entorno USE_ROCM=0
. Se pueden encontrar otras variables de entorno potencialmente útiles en setup.py
.
Si desea compilar con soporte para GPU Intel, siga estos
Si desea deshabilitar la compatibilidad con Intel GPU, exporte la variable de entorno USE_XPU=0
. Se pueden encontrar otras variables de entorno potencialmente útiles en 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
Común
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
En 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
En 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
En 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
En Linux
Si desea compilar PyTorch con la nueva ABI de C++ habilitada, primero ejecute este comando:
export _GLIBCXX_USE_CXX11_ABI=1
Tenga en cuenta que a partir de PyTorch 2.5, la compilación de PyTorch con XPU admite ABI de C++ nuevas y antiguas. Anteriormente, XPU solo admitía la nueva ABI de C++. Si desea compilar con soporte para GPU Intel, siga el soporte para GPU Intel.
Si está compilando para AMD ROCm, primero ejecute este comando:
# Only run this if you're compiling for ROCm
python tools/amd_build/build_amd.py
Instalar PyTorch
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py develop
En MacOS
python3 setup.py develop
En Windows
Si desea crear código Python heredado, consulte Creación de código heredado y CUDA.
Compilaciones solo de CPU
En este modo, los cálculos de PyTorch se ejecutarán en su CPU, no en su GPU.
python setup.py develop
Nota sobre OpenMP: la implementación de OpenMP deseada es Intel OpenMP (iomp). Para vincularse con iomp, deberá descargar manualmente la biblioteca y configurar el entorno de construcción modificando CMAKE_INCLUDE_PATH
y LIB
. Las instrucciones aquí son un ejemplo para configurar MKL e Intel OpenMP. Sin estas configuraciones para CMake, se utilizará el tiempo de ejecución de Microsoft Visual C OpenMP (vcomp).
Construcción basada en CUDA
En este modo, los cálculos de PyTorch aprovecharán su GPU a través de CUDA para realizar cálculos numéricos más rápidos.
Se necesita NVTX para construir Pytorch con CUDA. NVTX es parte de la distribución CUDA, donde se llama "Nsight Compute". Para instalarlo en un CUDA ya instalado, ejecute la instalación de CUDA una vez más y marque la casilla de verificación correspondiente. Asegúrese de que CUDA con Nsight Compute esté instalado después de Visual Studio.
Actualmente, VS 2017/2019 y Ninja son compatibles como generador de CMake. Si se detecta ninja.exe
en PATH
, Ninja se usará como generador predeterminado; de lo contrario, usará VS 2017/2019.
Si se selecciona Ninja como generador, se seleccionará el último MSVC como cadena de herramientas subyacente.
A menudo se necesitan bibliotecas adicionales como Magma, oneDNN, también conocidas como MKLDNN o DNNL, y Sccache. Consulte el asistente de instalación para instalarlos.
Puede consultar el script build_pytorch.bat para conocer otras configuraciones de variables de entorno.
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
Puede ajustar la configuración de las variables de cmake opcionalmente (sin compilar primero), haciendo lo siguiente. Por ejemplo, con este paso se pueden ajustar los directorios predetectados para CuDNN o BLAS.
En 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
En 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
También puede extraer una imagen de Docker prediseñada desde Docker Hub y ejecutarla con Docker v19.03+.
docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest
Tenga en cuenta que PyTorch utiliza memoria compartida para compartir datos entre procesos, por lo que si se utiliza el multiprocesamiento de antorcha (por ejemplo, para cargadores de datos multiproceso), el tamaño de segmento de memoria compartida predeterminado con el que se ejecuta el contenedor no es suficiente y debe aumentar el tamaño de la memoria compartida con --ipc=host
o --shm-size
opciones de línea de comando para nvidia-docker run
.
NOTA: Debe compilarse con una versión de Docker > 18.06
El Dockerfile
se suministra para crear imágenes con soporte CUDA 11.1 y cuDNN v8. Puede pasar PYTHON_VERSION=xy
make variable para especificar qué versión de Python utilizará Miniconda, o dejarla sin configurar para usar la predeterminada.
make -f docker.Makefile
# images are tagged as docker.io/${your_docker_username}/pytorch
También puede pasar la variable de entorno CMAKE_VARS="..."
para especificar variables de CMake adicionales que se pasarán a CMake durante la compilación. Consulte setup.py para obtener la lista de variables disponibles.
make -f docker.Makefile
Para crear documentación en varios formatos, necesitará Sphinx y el tema readthedocs.
cd docs/
pip install -r requirements.txt
Luego puede crear la documentación ejecutando make
desde la carpeta docs/
. Ejecute make
para obtener una lista de todos los formatos de salida disponibles.
Si recibe un error de katex, ejecute npm install katex
. Si persiste, intente npm install -g katex
Nota: si instaló
nodejs
con un administrador de paquetes diferente (por ejemplo,conda
), entoncesnpm
probablemente instalará una versión dekatex
que no es compatible con su versión denodejs
y las compilaciones de documentos fallarán. Una combinación de versiones que se sabe que funciona es[email protected]
y[email protected]
. Para instalar este último connpm
puedes ejecutarnpm install -g [email protected]
Las instrucciones de instalación y los archivos binarios para versiones anteriores de PyTorch se pueden encontrar en nuestro sitio web.
Tres consejos para empezar:
Normalmente, PyTorch realiza tres lanzamientos menores al año. Háganos saber si encuentra un error al presentar un problema.
Agradecemos todas las contribuciones. Si planea contribuir con la corrección de errores, hágalo sin más discusión.
Si planea aportar nuevas funciones, funciones de utilidad o extensiones al núcleo, primero abra un problema y analice la función con nosotros. Enviar un RP sin discusión podría terminar dando como resultado un RP rechazado porque podríamos estar llevando el núcleo en una dirección diferente a la que usted podría imaginar.
Para obtener más información sobre cómo hacer una contribución a Pytorch, consulte nuestra página de Contribución. Para obtener más información sobre las versiones de PyTorch, consulte la página de versiones.
PyTorch es un proyecto impulsado por la comunidad en el que varios ingenieros e investigadores hábiles contribuyen.
Actualmente, PyTorch es mantenido por Soumith Chintala, Gregory Chanan, Dmytro Dzhulgakov, Edward Yang y Nikita Shulga con importantes contribuciones provenientes de cientos de personas talentosas en diversas formas y medios. En una lista no exhaustiva pero creciente cabe 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 proyecto no está relacionado con hughperkins/pytorch con el mismo nombre. Hugh es un valioso colaborador de la comunidad de Torch y ha ayudado con muchas cosas de Torch y PyTorch.
PyTorch tiene una licencia estilo BSD, como se encuentra en el archivo LICENCIA.