• Einführung
• Installation
• Schichten
• Mathematikfunktionen
• Pytorch Fallback
• Tests
Attorch ist eine Untergruppe von Pytorchs nn
-Modul, das nur in Python unter Verwendung von OpenAIs Triton geschrieben wurde. Sein Ziel ist es, eine leicht hackbare, in sich geschlossene und lesbare Sammlung neuronaler Netzwerkmodule zu sein, während die Effizienz von Pytorch aufrechterhalten oder verbessert wird. Mit anderen Worten, es beabsichtigt, ein gabelhaftes Projekt zu sein, das mit einem einfachen, intuitiven Design ausgestattet ist, das als zugänglicher Ausgangspunkt für diejenigen dienen kann, die eine benutzerdefinierte Deep -Learning -Operationen entwickeln möchten, aber mit der Geschwindigkeit einer reinen Pytorch -Implementierung nicht zufrieden sind und nicht über das technische Know -how oder die Ressourcen verfügen, um Cuda -Kerne zu schreiben.
Es gibt bereits eine Reihe wunderbarer pytorchähnlicher Frameworks, die von Triton angetrieben werden, darunter Kernl, Xformers, Unloth und fla
, aber die meisten konzentrieren sich hauptsächlich auf Transformers und NLP-Anwendungen, während Attorch darauf abzielt, auch eine Vielzahl von Schichten zu bieten, die auch in Bereichen und NLP-Bereichen wie Computer Visionen wie Computer-Visionen vorliegen. Darüber hinaus ist Attorch kein Paket nur für Inferenz und unterstützt sowohl Vorwärts- als auch Rückwärtsgänge, was bedeutet, dass es sowohl während des Trainings als auch während der Inferenz verwendet werden kann, obwohl seine Leistung für Letztere im Allgemeinen nicht mit speziellen Inferenzmotoren entspricht.
Die einzigen Abhängigkeiten von Attorch sind torch==2.4.0
und triton==3.0.0
. Bitte installieren Sie die angegebenen Versionen dieser beiden Bibliotheken und klonen Sie dieses Repository, um loszulegen.
Derzeit implementierte Ebenen mit automatischer Unterstützung für gemischte Präzision (AMP) sind,
attorch.Conv1d
: 1D-Convolves über den Eingang mit Gewichten und optional Hinzufügen von Verzerrungen.attorch.Conv2d
: 2D-Convolves über dem Eingang mit Gewichten und optional Hinzufügen von Verzerrungen.attorch.MultiheadAttention
: Wendet die Aufmerksamkeit mit mehrköpfigen skalierten DOT-Produkten auf die Eingaben an.attorch.Hardsigmoid
: Wendet harte Sigmoid auf den Eingang an und fungiere optional den Tropfen.attorch.Hardswish
: Wendet das Eingang harten Schwärmen an und fungiere optional Tropfen.attorch.LeakyReLU
: Wendet die undichte Relu auf die Eingabe an und fungiere optional den Ausfall.attorch.GELU
: Wendet Gelu auf die Eingabe an, wobei optional der Tropfen verschmelzen.attorch.ReLU
: Wendet Relu auf die Eingabe an und fungiere optional den Tropfen.attorch.ReLU6
: Wendet Relu6 auf die Eingabe an und fungiere optional den Tropfen.attorch.SELU
: Wendet Selu auf die Eingabe an und fungiere optional aus dem Tropfen.attorch.SiLU
: Wendet Silu auf die Eingabe an und fungiere optional den Ausfall.attorch.Mish
: Wendet die Eingabe misstrauisch an und fungiere optional den Tropfen.attorch.Sigmoid
: Wendet Sigmoid auf den Eingang an und fungiere optional Tropfen.attorch.Tanh
: Wendet Tanh auf die Eingabe an und fungiere optional den Tropfen.attorch.GLU
: Wendet die Gated Lineare Unit mit einer willkürlichen Aktivierungsfunktion auf die Eingabe an.attorch.LogSoftmax
: Normalisiert die Eingabe mit Softmax und nimmt sein Protokoll an.attorch.Softmax
: Normalisiert die Eingabe mit Softmax.attorch.Softmin
: Normalisiert die Eingabe mit Softmin.attorch.BatchNorm1d
: Batch-Normalwert des 2D- oder 3D-Eingangs, fusioniert optional eine Aktivierungsfunktion und addiert dem Voraktivierungsergebnis einen Rest.attorch.BatchNorm2d
: Batch-Normalwert des 4D-Eingangs, fusioniert optional eine Aktivierungsfunktion und addiert dem Voraktivierungsergebnis einen Rest.attorch.LayerNorm
: Schicht-Normalwert der Eingabe.attorch.RMSNorm
: Wurzel-Mittelwerte-Quadrat-Normalwert der Eingabe.attorch.Linear
: Linear transformiert die Eingabe mit Gewichten, addiert optional Verzerrung und verschmelzen eine Aktivierungsfunktion.attorch.Dropout
: Zufällige Zullenelemente im Eingang während des Trainings.attorch.L1Loss
: misst den mittleren absoluten Fehler zwischen Eingabe und Ziel.attorch.MSELoss
: misst den mittleren quadratischen Fehler zwischen Eingabe und Ziel.attorch.CrossEntropyLoss
: Misst den mittleren Quer -Entropie -Verlust zwischen Eingang und Ziel mit optionalem Wiederaufweischen jeder Klasse.attorch.NLLLoss
: Misst den negativen Log -Log -Wahrscheinlichkeitsverlust zwischen Eingabe und Ziel mit optionalem Wiederaufweischen jeder Klasse.Sofern in ihren Docstrings nicht anders angegeben, verhalten sich die oben genannten Schichten identisch mit ihren Pytorch -Äquivalenten.
Triton -Kerne bestehen im Allgemeinen aus zwei Teilen: Eine verarbeitet das Laden und Speichern der relevanten Tensoren, der andere verwandelt die Daten mit geeigneten mathematischen Funktionen. Beispielsweise liest ein Schichtnormalisierungskernel eine oder mehrere Zeilen aus der Eingabe (Last), standardisiert die Merkmale (Mathematik) und schreibt die Ergebnisse in einen Container (Speicher). Eine Auswahl dieser reinen Mathematikfunktionen wird von attorch.math
geliefert, wobei das Ziel darin besteht, die Implementierung von benutzerdefinierten Kerneln und Operation Fusion zu erleichtern. Obwohl nur die Vorwärtspässe der genannten Funktionen in attorch.math
erhältlich sind, können ihre Gradienten aufgrund ihrer Reinheit und Abwesenheit von I/A-Aktionen automatisch über die triton-autodiff
-Bibliothek abgeleitet werden. Wichtige Teile der Körner von Attorch können durch Ersetzen ihrer Mathematikstücke mit den entsprechenden attorch.math
Transformationen oder derenivate neu gestaltet werden. Dies würde jedoch die Ein-File-und in sich geschlossene Entwurf von attorch.math
opfern.
Um die Integration von Attorch- und Pytorch -Schichten zu ermöglichen, wird attorch.nn
angeboten, das eine Schnittstelle zu den Modulen von Attorch mit Pytorch -Fallback bietet, falls eine gewünschte Schicht nicht verfügbar ist, wie nachstehend zu sehen ist.
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
Jedes Modul kann gegen sein Pytorch -Gegenstück getestet werden, um die Korrektheit zu gewährleisten. Diese Tests sind untersucht tests/
und können mit pytest
ausgeführt werden. Es ist zu beachten, dass einige aufgrund numerischer Präzisionsprobleme möglicherweise scheitern, aber in den meisten praktischen Anwendungsfällen sollte dies kein Problem sein.