• Introduction
• Installation
• couches
• Fonctions mathématiques
• Fallback pytorch
• Tests
Attorch est un sous-ensemble du module nn de Pytorch, écrit uniquement en Python à l'aide d'Openai d'Openai. Son objectif est d'être une collection facilement piratable, autonome et lisible de modules de réseau neuronal tout en maintenant ou en améliorant l'efficacité du pytorch. En d'autres termes, il entend être un projet à fourche doté d'une conception simple et intuitive qui peut servir de point de départ accessible pour ceux qui cherchent à développer des opérations d'apprentissage en profondeur personnalisées mais qui ne sont pas satisfaits de la vitesse d'une implémentation pytorch pure et n'ont pas l'expertise technique ou les ressources pour écrire des noyaux Cuda.
Il existe déjà un certain nombre de merveilleux cadres de type pytorch propulsés par Triton, y compris Kernl, XFORMERS, UNSLOTH et fla , mais la plupart se concentrent principalement sur les transformateurs et les applications NLP, tandis que l'attrort vise à être plus inclusif en présentant également une variété de couches qui se répercutent aux zones à l'exception du NLP comme la vision informatique. De plus, Attorch n'est pas un package uniquement en inférence et prend en charge entièrement les passes vers l'avant et vers l'arrière, ce qui signifie qu'elle peut être utilisée pendant la formation ainsi que l'inférence, bien que ses performances pour ce dernier ne soient généralement pas à la hauteur des moteurs d'inférence dédiés.
Les seules dépendances d'Attorch sont torch==2.4.0 et triton==3.0.0 . Veuillez installer les versions spécifiées de ces deux bibliothèques et cloner ce référentiel pour commencer.
Les couches actuellement implémentées, avec une prise en charge automatique de précision mixte (AMP), sont, sont,
attorch.Conv1d : 1D Convolve sur l'entrée en utilisant des poids, en ajoutant éventuellement des biais.attorch.Conv2d : 2D Convolve sur l'entrée en utilisant des poids, en ajoutant éventuellement des biais.attorch.MultiheadAttention : s'applique une attention à l'échelle à l'échelle multiples sur les entrées.attorch.Hardsigmoid : applique un sigmoïde dur à l'entrée, en fusion éventuellement.attorch.Hardswish : s'applique durs swish à l'entrée, en fusion éventuellement.attorch.LeakyReLU : applique un relard qui fuit à l'entrée, en fusion éventuellement.attorch.GELU : applique Gelu à l'entrée, en fusion éventuellement.attorch.ReLU : applique RELU à l'entrée, éventuellement, fusionnant le dépôt.attorch.ReLU6 : applique RELU6 à l'entrée, éventuellement en fusion.attorch.SELU : applique SELU à l'entrée, éventuellement, fusionnant le dépôt.attorch.SiLU : applique SILU à l'entrée, éventuellement, fusionnant le dépôt.attorch.Mish : applique l'intégration à l'entrée, en fusion éventuellement.attorch.Sigmoid : Applique sigmoïde à l'entrée, éventuellement en fusion.attorch.Tanh : Applique TANH à l'entrée, éventuellement, fusionnant le dépôt.attorch.GLU : applique l'unité linéaire fermée avec une fonction d'activation arbitraire à l'entrée.attorch.LogSoftmax : normalise l'entrée à l'aide de softmax et prend son journal.attorch.Softmax : normalise l'entrée à l'aide de softmax.attorch.Softmin : normalise l'entrée à l'aide de softmin.attorch.BatchNorm1d : LOTCH-normalise l'entrée 2D ou 3D, fusionnant éventuellement une fonction d'activation et ajoutant un résidu au résultat de pré-activation.attorch.BatchNorm2d : LOTCH-normalise l'entrée 4D, fusionnant éventuellement une fonction d'activation et ajoutant un résidu au résultat de pré-activation.attorch.LayerNorm : couche-normalise l'entrée.attorch.RMSNorm : LORME-Square à la racine-normalise l'entrée.attorch.Linear : transforme linéairement l'entrée en utilisant des poids, en ajoutant éventuellement du biais et en fusion d'une fonction d'activation.attorch.Dropout : zéros aléatoirement des éléments dans la contribution pendant la formation.attorch.L1Loss : mesure l'erreur absolue moyenne entre l'entrée et la cible.attorch.MSELoss : mesure l'erreur quadratique moyenne entre l'entrée et la cible.attorch.CrossEntropyLoss : mesure la perte d'entropie croisée moyenne entre l'entrée et la cible, avec une redettements facultatifs de chaque classe.attorch.NLLLoss : mesure la perte de vraisemblance de logarithme négative entre l'entrée et la cible, avec une réweigh facultative de chaque classe.Sauf indication contraire dans leurs docstrings, les couches susmentionnées se comportent de manière identique à leurs équivalents pytorch.
Les noyaux Triton sont généralement composés de deux parties: l'une gère le chargement et le stockage des tenseurs pertinents, l'autre transforme les données en utilisant des fonctions mathématiques appropriées. Par exemple, un noyau de normalisation de couche lit une ou plusieurs lignes de l'entrée (charge), standardise les fonctionnalités (mathématiques) et écrit les résultats dans un conteneur (magasin). Une sélection de ces fonctions mathématiques pures est fournie par attorch.math , l'objectif étant de faciliter la mise en œuvre des noyaux personnalisés et de l'opération Fusion. Bien que seules les passes avant desdites fonctions soient disponibles dans attorch.math , grâce à leur pureté et à leur absence d'actions d'E / S, leurs gradients peuvent être automatiquement dérivés via la bibliothèque triton-autodiff . Des parties importantes des noyaux d'Attorch peuvent être refactorisées en supplantant leurs bits mathématiques avec les transformations de mm attorch.math correspondantes ou leurs dérivés, mais cela sacrifierait la conception unique et autonome de l'attrort, donc attorch.math et le reste de Attorch resteront séparés.
Pour permettre une intégration plus facile des couches Attorch et Pytorch, attorch.nn est proposé, qui fournit une interface aux modules d'attronation avec une secours Pytorch si une couche souhaitée ne soit pas disponible, comme on le voit ci-dessous.
from attorch import nn
lin = nn . Linear ( 10 , 20 ) # Uses attorch's linear layer
gap = nn . AdaptiveAvgPool2d ( 1 ) # Uses PyTorch's global pooling since GAP is not available in attorch Chaque module peut être testé contre son homologue Pytorch pour assurer l'exactitude. Ces tests sont inclus dans tests/ et peuvent être exécutés à l'aide pytest . Il convient de noter que certains pourraient échouer en raison de problèmes de précision numérique, mais dans la plupart des cas d'utilisation pratiques, cela ne devrait pas être un problème.