HyperAI

PyTorch 1.13 Officiellement Publié : Mise À Niveau CUDA, Intégration De Plusieurs Bibliothèques, Prise En Charge De La Puce M1

il y a 2 ans
Information
Jiaxin Sun
特色图像

Introduction au contenu : Récemment, l'équipe PyTorch a annoncé la sortie de Pytorch 1.13 sur le blog officiel. Cet article présentera en détail les quatre points forts de la nouvelle version.

Cet article a été publié pour la première fois sur WeChat : PyTorch Developer Community

Selon l'introduction officielle, PyTorch 1.13 inclut la version stable de BetterTransformer, ne prend plus en charge CUDA 10.2 et 11.3 et a terminé la migration vers CUDA 11.6 et 11.7. De plus, la version bêta ajoute également la prise en charge de la puce Apple M1 et de Functorch.fuctorch est une bibliothèque dans PyTorch qui fournit des transformations vmap composables (vectorisation) et autodiff

Résumé des points forts de PyTorch 1.13 :

  1. L'ensemble de fonctionnalités BetterTransformer prend en charge l'exécution rapide des modèles Transformer généraux pendant l'inférence sans modifier le modèle. Les améliorations incluent également l'accélération du noyau d'algèbre linéaire add+matmul pour les tailles couramment utilisées dans les modèles Transformer, et les tenseurs imbriqués sont désormais activés par défaut.

  2. Les anciennes versions de CUDA ne sont plus prises en charge et la dernière version de CUDA publiée par Nvidia est introduite. Cela permet la prise en charge de C++17 pour PyTorch et les nouveaux modules du noyau NVIDIA Open GPU.

  3. functorch a été modifié d'un package séparé à un package direct import functorch Importez PyTorch pour l'utiliser sans l'installer séparément.

  4. Les tests fournissent des versions natives pour les Mac à puce M1 et une meilleure prise en charge de l'API PyTorch.insérer la description de l'image ici

Caractéristiques stables

1. API BetterTransformer

L'ensemble de fonctionnalités BetterTransformer prend en charge l'exécution rapide des modèles Transformer généraux pendant l'inférence sans modifier le modèle.

En complément, PyTorch 1.13 accélère également le noyau d'algèbre linéaire add+matmul pour la taille couramment utilisée dans le modèle Transformer.

Afin d'améliorer les performances des modèles NLP,BetterTransformer dans PyTorch 1.13 active les tenseurs imbriqués par défaut. En termes de compatibilité, un contrôle du masque est effectué pour garantir qu'un masque continu peut être fourni.

La vérification du masque de src_key_padding_mask dans Transformer Encoder peut être désactivée en définissant mask_check=False. Ce paramètre peut accélérer le traitement, plutôt que de simplement fournir un masque aligné.

Enfin, de meilleurs messages d’erreur sont fournis pour simplifier le diagnostic des entrées incorrectes et fournir de meilleures méthodes de diagnostic pour les erreurs d’exécution fastpath.

Better Transformer est directement intégré dans la bibliothèque PyTorch TorchText. Cela permet aux utilisateurs de TorchText de profiter plus facilement de la vitesse et de l'efficacité de BetterTransformer.

L'implémentation fastpath de Betterformfast est désormais stable et permet des optimisations éparses pour les représentations de tenseurs imbriqués par défaut

2. Présentation de CUDA 11.6 et 11.7, ne prenant plus en charge CUDA 10.2 et 11.3

CUDA 11 est la première version de CUDA à prendre en charge C++17. L’abandon de la prise en charge de CUDA 10.2 est une étape importante dans l’avancement de la prise en charge de PyTorch pour C++17 et l’amélioration du code PyTorch en éliminant les instructions héritées spécifiques à CUDA 10.2.

Le retrait de CUDA 11.3 et l'introduction de 11.7 rendent PyTorch plus compatible avec les modules du noyau NVIDIA Open GPU. Un autre point fort important est la prise en charge du chargement paresseux.

CUDA 11.7 est livré avec cuDNN 8.5.0, qui inclut un certain nombre d'optimisations pour accélérer les modèles basés sur Transformer, réduire la taille de la bibliothèque de 30% et apporter diverses améliorations au moteur de fusion d'exécution.

Fonctionnalités bêta

1. fonction

Similaire à Google JAX, functorch est une bibliothèque dans PyTorch qui fournit des transformations vmap composables (vectorisation) et autodiff. Il prend en charge les cas d'utilisation avancés d'autodiff qui sont difficiles à exprimer dans PyTorch, notamment :

  • Assemblage de modèles

  • Calcul efficace des Jacobiennes et des Hessiennes

  • Calculer les gradients par échantillon ou d'autres quantités par échantillon

PyTorch 1.13 dispose d'une bibliothèque functorch intégrée, il n'est pas nécessaire de l'installer séparément. Après avoir installé PyTorch via conda ou pip, vous pouvez l'utiliser dans votre programme import functorch .

2. Intel VTune™ Profiler et ITT intégrés

Si les utilisateurs de PyTorch souhaitent utiliser les mesures de performances sous-jacentes pour analyser les performances de chaque opérateur sur la plate-forme Intel,La chronologie au niveau de l'opérateur d'une exécution de script PyTorch peut être visualisée dans Intel VTune™ Profiler.

with torch.autograd.profiler.emit_itt():
    for i in range(10):
        torch.itt.range_push('step_{}'.format(i))
        model(input)
        torch.itt.range_pop()

3. NNC : Ajout de la prise en charge de BF16 et des canaux en dernier

En ajoutant la prise en charge des derniers canaux et de BF16 dans NNC, les performances d'inférence en mode graphique de TorchScript sur les processeurs x86 ont été considérablement améliorées.

Sur les processeurs Intel Cooper Lake, ces deux optimisations peuvent plus que doubler les performances des modèles visuels.

Grâce au TorchScript existant, aux canaux en dernier et à l'API BF16 Autocast, Des améliorations de performances peuvent être obtenues. Comme indiqué ci-dessous, les optimisations dans NNC seront migrées vers le nouveau compilateur PyTorch DL TorchInductor :

import torch
import torchvision.models as models
model = models.resnet50(pretrained=True)
# Convert the model to channels-last
model = model.to(memory_format=torch.channels_last)
model.eval()
data = torch.rand(1, 3, 224, 224)
# Convert the data to channels-lastdata = data.to(memory_format=torch.channels_last)
# Enable autocast to run with BF16
with torch.cpu.amp.autocast(), torch.no_grad():
# Trace the model
model = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
  model = torch.jit.freeze(model)
  # Run the traced model
  model(data)

4. Ajoutez la prise en charge des appareils Apple équipés de la puce M1

Depuis la version 1.12, PyTorch travaille à fournir des builds natives pour la puce M1 d'Apple. PyTorch 1.13 améliore encore l'API concernée.

PyTorch 1.13 est testé sur les instances M1 macOS 12.6 avec tous les sous-modules à l'exception de torch.distribution. Ces tests améliorés corrigent des choses comme l'expansion cpp et la correction de la convolution sur certaines entrées.

Remarque : cette fonctionnalité nécessite macOS 12 ou une version ultérieure pour la puce M1 et utilise Python natif (arm64).

Caractéristiques du prototype

1. Prise en charge du backend ACL pour AWS Graviton

PyTorch 1.13 apporte des améliorations substantielles au raisonnement CV et NLP sur les processeurs aarch64 grâce à la bibliothèque Arm Compute Library (ACL). Cela permet au backend ACL de prendre en charge les modules PyTorch et torch-xla. Les points forts incluent :

  • Activer mkldnn+acl comme backend par défaut pour la roue de torche aarch64

  • Activer l'opérateur matmul mkldnn pour les périphériques arch64 BF16

  • Apportez la fonctionnalité TensorFlow xla+acl à torch-xla.

2. Désinfectant CUDA

Une fois activé, le Sanitizer commencera à analyser les opérations CUDA sous-jacentes appelées par le code PyTorch de l'utilisateur pour détecter les erreurs de course de données.

Remarque : ces erreurs sont causées par un accès aux données non synchronisé à partir de différents flux CUDA.

Similaire à Thread Sanitizer, l'erreur localisée sera imprimée avec la trace de la pile de l'accès incorrect.

Les données corrompues dans les applications d'apprentissage automatique peuvent être facilement négligées et les erreurs ne sont parfois pas apparentes. C'est pourquoi CUDA Sanitizer, utilisé pour détecter et localiser les erreurs, est particulièrement important.

3. Prise en charge partielle de Python 3.11

Les utilisateurs peuvent télécharger des binaires Linux prenant en charge Python 3.11 via pip. Cependant, cette fonctionnalité n'est qu'une version préliminaire et les fonctionnalités telles que Distributed, Profiler, FX et JIT ne sont pas entièrement prises en charge.

De 0 à 1, apprenez le tutoriel officiel de PyTorch

OpenBayes.com a lancé plusieurs tutoriels officiels PyTorch en chinois, y compris, mais sans s'y limiter, NLP, CV, DL et d'autres exemples. Tu peuxVisitez la console et recherchez des ressources publiques.

Exécutez le didacticiel chinois PyTorch, cliquez sur la fin de l'article pour lire le texte original ou visitez le lien suivant :

https://openbayes.com/console/public/tutorials

insérer la description de l'image ici