PyTorch est un package Python qui fournit deux fonctionnalités de haut niveau :
Vous pouvez réutiliser vos packages Python préférés tels que NumPy, SciPy et Cython pour étendre PyTorch si nécessaire.
L’état de notre tronc (signaux d’intégration continue) peut être consulté sur hud.pytorch.org.
Apprenez les bases de PyTorch
À un niveau granulaire, PyTorch est une bibliothèque composée des composants suivants :
Composant | Description |
---|---|
torche | Une bibliothèque Tensor comme NumPy, avec un fort support GPU |
torche.autograd | Une bibliothèque de différenciation automatique sur bande qui prend en charge toutes les opérations Tensor différenciables dans Torch |
torche.jit | Une pile de compilation (TorchScript) pour créer des modèles sérialisables et optimisables à partir du code PyTorch |
torche.nn | Une bibliothèque de réseaux de neurones profondément intégrée à Autograd conçue pour une flexibilité maximale |
torche.multitraitement | Multitraitement Python, mais avec partage magique de la mémoire des Tensors de torche entre les processus. Utile pour le chargement de données et la formation Hogwild |
torche.utils | DataLoader et autres fonctions utilitaires pour plus de commodité |
Habituellement, PyTorch est utilisé comme :
Élaborer davantage :
Si vous utilisez NumPy, alors vous avez utilisé Tensors (aka ndarray).
PyTorch fournit des Tensors qui peuvent vivre soit sur le CPU, soit sur le GPU et accélère considérablement le calcul.
Nous proposons une grande variété de routines tensorielles pour accélérer et répondre à vos besoins en calcul scientifique, tels que le découpage, l'indexation, les opérations mathématiques, l'algèbre linéaire et les réductions. Et ils sont rapides !
PyTorch dispose d'une manière unique de créer des réseaux de neurones : utiliser et relire un magnétophone.
La plupart des frameworks tels que TensorFlow, Theano, Caffe et CNTK ont une vision statique du monde. Il faut construire un réseau de neurones et réutiliser la même structure encore et encore. Changer le comportement du réseau signifie qu’il faut repartir de zéro.
Avec PyTorch, nous utilisons une technique appelée auto-différenciation en mode inverse, qui vous permet de modifier arbitrairement le comportement de votre réseau sans décalage ni surcharge. Notre inspiration vient de plusieurs articles de recherche sur ce sujet, ainsi que de travaux actuels et passés tels que torch-autograd, autograd, Chainer, etc.
Bien que cette technique ne soit pas propre à PyTorch, c'est l'une des implémentations les plus rapides à ce jour. Vous bénéficiez du meilleur de la rapidité et de la flexibilité pour vos folles recherches.
PyTorch n'est pas une liaison Python dans un framework C++ monolithique. Il est conçu pour être profondément intégré à Python. Vous pouvez l'utiliser naturellement comme vous utiliseriez NumPy / SciPy / scikit-learn etc. Vous pouvez écrire vos nouvelles couches de réseau neuronal dans Python lui-même, en utilisant vos bibliothèques préférées et en utilisant des packages tels que Cython et Numba. Notre objectif n’est pas de réinventer la roue lorsque cela est approprié.
PyTorch est conçu pour être intuitif, linéaire et facile à utiliser. Lorsque vous exécutez une ligne de code, elle est exécutée. Il n’existe pas de vision asynchrone du monde. Lorsque vous accédez à un débogueur ou recevez des messages d'erreur et des traces de pile, leur compréhension est simple. La trace de la pile pointe exactement là où votre code a été défini. Nous espérons que vous ne passerez jamais des heures à déboguer votre code à cause de mauvaises traces de pile ou de moteurs d'exécution asynchrones et opaques.
PyTorch a une surcharge de framework minimale. Nous intégrons des bibliothèques d'accélération telles qu'Intel MKL et NVIDIA (cuDNN, NCCL) pour maximiser la vitesse. À la base, ses backends CPU et GPU Tensor et réseau neuronal sont matures et ont été testés depuis des années.
Par conséquent, PyTorch est assez rapide, que vous exploitiez des réseaux de neurones petits ou grands.
L'utilisation de la mémoire dans PyTorch est extrêmement efficace par rapport à Torch ou à certaines des alternatives. Nous avons écrit des allocateurs de mémoire personnalisés pour le GPU afin de garantir que vos modèles d'apprentissage en profondeur utilisent une efficacité mémoire maximale. Cela vous permet de former des modèles d’apprentissage profond plus importants qu’auparavant.
L'écriture de nouveaux modules de réseau neuronal ou l'interface avec l'API Tensor de PyTorch a été conçue pour être simple et avec un minimum d'abstractions.
Vous pouvez écrire de nouvelles couches de réseau neuronal en Python à l'aide de l'API torch ou de vos bibliothèques NumPy préférées telles que SciPy.
Si vous souhaitez écrire vos couches en C/C++, nous fournissons une API d'extension pratique, efficace et avec un minimum de passe-partout. Aucun code wrapper ne doit être écrit. Vous pouvez voir un tutoriel ici et un exemple ici.
Les commandes pour installer les binaires via Conda ou pip wheel sont sur notre site Web : https://pytorch.org/get-started/locally/
Les roues Python pour Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX et Jetson AGX Orin de NVIDIA sont fournies ici et le conteneur L4T est publié ici
Ils nécessitent JetPack 4.2 et supérieur, et @dusty-nv et @ptrblck les maintiennent.
Si vous installez à partir des sources, vous aurez besoin de :
* PyTorch CI utilise Visual C++ BuildTools, fourni avec les éditions Visual Studio Enterprise, Professional ou Community. Vous pouvez également installer les outils de génération à partir de https://visualstudio.microsoft.com/visual-cpp-build-tools/. Les outils de génération ne sont pas fournis par défaut avec Visual Studio Code.
* Nous vous recommandons fortement d'installer un environnement Anaconda. Vous obtiendrez une bibliothèque BLAS (MKL) de haute qualité et des versions à dépendances contrôlées quelle que soit votre distribution Linux.
Un exemple de configuration d'environnement est présenté ci-dessous :
$ 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 vous souhaitez compiler avec le support de CUDA, sélectionnez une version prise en charge de CUDA dans notre matrice de support, puis installez ce qui suit :
Remarque : Vous pouvez vous référer à la matrice de support cuDNN pour les versions de cuDNN avec les différents pilotes CUDA, CUDA et matériel NVIDIA pris en charge.
Si vous souhaitez désactiver la prise en charge de CUDA, exportez la variable d'environnement USE_CUDA=0
. D'autres variables d'environnement potentiellement utiles peuvent être trouvées dans setup.py
.
Si vous construisez pour les plates-formes Jetson de NVIDIA (Jetson Nano, TX1, TX2, AGX Xavier), les instructions pour installer PyTorch pour Jetson Nano sont disponibles ici
Si vous souhaitez compiler avec le support ROCm, installez
Par défaut, le système de build s'attend à ce que ROCm soit installé dans /opt/rocm
. Si ROCm est installé dans un répertoire différent, la variable d'environnement ROCM_PATH
doit être définie sur le répertoire d'installation de ROCm. Le système de build détecte automatiquement l'architecture GPU AMD. En option, l'architecture GPU AMD peut être explicitement définie avec la variable d'environnement PYTORCH_ROCM_ARCH
Architecture GPU AMD
Si vous souhaitez désactiver la prise en charge de ROCm, exportez la variable d'environnement USE_ROCM=0
. D'autres variables d'environnement potentiellement utiles peuvent être trouvées dans setup.py
.
Si vous souhaitez compiler avec le support GPU Intel, suivez ces
Si vous souhaitez désactiver la prise en charge du GPU Intel, exportez la variable d'environnement USE_XPU=0
. D'autres variables d'environnement potentiellement utiles peuvent être trouvées dans 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
Commun
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
Sous 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
Sur 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
Sous 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
Sous Linux
Si vous souhaitez compiler PyTorch avec le nouveau C++ ABI activé, exécutez d'abord cette commande :
export _GLIBCXX_USE_CXX11_ABI=1
Veuillez noter qu'à partir de PyTorch 2.5, la version PyTorch avec XPU prend en charge les nouveaux et les anciens ABI C++. Auparavant, XPU ne prenait en charge que le nouvel ABI C++. Si vous souhaitez compiler avec le support GPU Intel, veuillez suivre le support Intel GPU.
Si vous compilez pour AMD ROCm, exécutez d'abord cette commande :
# Only run this if you're compiling for ROCm
python tools/amd_build/build_amd.py
Installer PyTorch
export CMAKE_PREFIX_PATH= " ${CONDA_PREFIX :- ' $(dirname $(which conda))/../ ' } : ${CMAKE_PREFIX_PATH} "
python setup.py develop
Sur macOS
python3 setup.py develop
Sous Windows
Si vous souhaitez créer du code Python existant, veuillez vous référer à Création à partir du code existant et de CUDA.
Versions CPU uniquement
Dans ce mode, les calculs PyTorch s'exécuteront sur votre CPU, pas sur votre GPU
python setup.py develop
Remarque sur OpenMP : L'implémentation OpenMP souhaitée est Intel OpenMP (iomp). Afin d'établir un lien avec iomp, vous devrez télécharger manuellement la bibliothèque et configurer l'environnement de construction en modifiant CMAKE_INCLUDE_PATH
et LIB
. Les instructions ici sont un exemple de configuration de MKL et Intel OpenMP. Sans ces configurations pour CMake, le runtime Microsoft Visual C OpenMP (vcomp) sera utilisé.
Construction basée sur CUDA
Dans ce mode, les calculs PyTorch exploiteront votre GPU via CUDA pour une analyse plus rapide des chiffres.
NVTX est nécessaire pour construire Pytorch avec CUDA. NVTX fait partie du distributif CUDA, où il s'appelle « Nsight Compute ». Pour l'installer sur un CUDA déjà installé, exécutez à nouveau l'installation de CUDA et cochez la case correspondante. Assurez-vous que CUDA avec Nsight Compute est installé après Visual Studio.
Actuellement, VS 2017/2019 et Ninja sont pris en charge en tant que générateur de CMake. Si ninja.exe
est détecté dans PATH
, alors Ninja sera utilisé comme générateur par défaut, sinon il utilisera VS 2017/2019.
Si Ninja est sélectionné comme générateur, le dernier MSVC sera sélectionné comme chaîne d'outils sous-jacente.
Des bibliothèques supplémentaires telles que Magma, oneDNN, alias MKLDNN ou DNNL, et Sccache sont souvent nécessaires. Veuillez vous référer à l'assistant d'installation pour les installer.
Vous pouvez vous référer au script build_pytorch.bat pour certaines autres configurations de variables d'environnement
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
Vous pouvez éventuellement ajuster la configuration des variables cmake (sans construire au préalable), en procédant comme suit. Par exemple, l'ajustement des répertoires pré-détectés pour CuDNN ou BLAS peut être effectué avec une telle étape.
Sous 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
Sur 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
Vous pouvez également extraire une image Docker prédéfinie de Docker Hub et l'exécuter avec Docker v19.03+
docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest
Veuillez noter que PyTorch utilise la mémoire partagée pour partager des données entre les processus, donc si le multitraitement torch est utilisé (par exemple pour les chargeurs de données multithread), la taille par défaut du segment de mémoire partagée avec laquelle le conteneur s'exécute n'est pas suffisante, et vous devez augmenter la taille de la mémoire partagée soit avec --ipc=host
ou --shm-size
options de ligne de commande pour nvidia-docker run
.
REMARQUE : doit être construit avec une version Docker > 18.06
Le Dockerfile
est fourni pour créer des images avec la prise en charge de CUDA 11.1 et cuDNN v8. Vous pouvez transmettre la variable PYTHON_VERSION=xy
make pour spécifier quelle version de Python doit être utilisée par Miniconda, ou la laisser non définie pour utiliser la version par défaut.
make -f docker.Makefile
# images are tagged as docker.io/${your_docker_username}/pytorch
Vous pouvez également transmettre la variable d'environnement CMAKE_VARS="..."
pour spécifier des variables CMake supplémentaires à transmettre à CMake lors de la construction. Voir setup.py pour la liste des variables disponibles.
make -f docker.Makefile
Pour créer de la documentation dans différents formats, vous aurez besoin de Sphinx et du thème readthedocs.
cd docs/
pip install -r requirements.txt
Vous pouvez ensuite créer la documentation en exécutant make
à partir du dossier docs/
. Exécutez make
pour obtenir une liste de tous les formats de sortie disponibles.
Si vous obtenez une erreur katex, exécutez npm install katex
. Si cela persiste, essayez npm install -g katex
Remarque : si vous avez installé
nodejs
avec un autre gestionnaire de packages (par exemple,conda
), alorsnpm
installera probablement une version dekatex
qui n'est pas compatible avec votre version denodejs
et les builds doc échoueront. Une combinaison de versions connues pour fonctionner est[email protected]
et[email protected]
. Pour installer ce dernier avecnpm
vous pouvez exécuternpm install -g [email protected]
Les instructions d'installation et les binaires des versions précédentes de PyTorch sont disponibles sur notre site Web.
Trois points pour commencer :
En règle générale, PyTorch propose trois versions mineures par an. Veuillez nous faire savoir si vous rencontrez un bug en signalant un problème.
Nous apprécions toutes les contributions. Si vous envisagez de contribuer aux corrections de bogues, veuillez le faire sans autre discussion.
Si vous envisagez d'apporter de nouvelles fonctionnalités, fonctions utilitaires ou extensions au noyau, veuillez d'abord ouvrir un ticket et discuter de la fonctionnalité avec nous. L'envoi d'un PR sans discussion peut aboutir à un PR rejeté, car nous pourrions prendre le noyau dans une direction différente de celle dont vous êtes peut-être au courant.
Pour en savoir plus sur la contribution à Pytorch, veuillez consulter notre page de contribution. Pour plus d'informations sur les versions de PyTorch, consultez la page Version.
PyTorch est un projet communautaire auquel plusieurs ingénieurs et chercheurs compétents y contribuent.
PyTorch est actuellement maintenu par Soumith Chintala, Gregory Chanan, Dmytro Dzhulgakov, Edward Yang et Nikita Shulga avec des contributions majeures provenant de centaines d'individus talentueux sous diverses formes et moyens. Une liste non exhaustive mais qui s'allonge doit mentionner: 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.
Remarque : ce projet n'a aucun rapport avec Hughperkins/pytorch du même nom. Hugh est un contributeur précieux à la communauté Torch et a aidé dans de nombreux domaines avec Torch et PyTorch.
PyTorch possède une licence de style BSD, comme celle trouvée dans le fichier LICENSE.