Koila löst
CUDA error: out of memory errorschmerzlos. Beheben Sie es mit nur einer Codezeile und vergessen Sie es.

Hauptzweig ist eine vollständige Neustruktur des Projekts (die derzeit größtenteils leer ist, weil ich nicht genügend Zeit habe, um es abzuschließen). Um den Arbeitscode zu sehen, sehen Sie sich das v0.1.1 -Tag für einen Proof of Concept (der nicht die volle Unterstützung für alle Operationen bietet und nicht für die Produktion geeignet ist). Um es zu verwenden, laden Sie die Version V0.1.1 hier herunter.
? Verhindert CUDA error: out of memory error mit einer einzelnen Codezeile.
⚗️ akkumuliert automatisch Gradienten, wenn die Stapelgrößen zu groß sind.
? Wenn Sie den Pytorch -Code faul evaluiert, um Rechenleistung zu speichern.
✂️ spaltet automatisch die Batch -Dimension auf mehr GPU -freundliche Zahlen (2 -Kräfte), um die Ausführung zu beschleunigen.
? Minimale API (das Wickeln aller Eingänge reicht aus).
Schon mal auf RuntimeError: CUDA error: out of memory ? Wir alle lieben PyTorch wegen seiner Geschwindigkeit, Effizienz und Transparenz, aber das bedeutet, dass es keine zusätzlichen Dinge tut. Dinge wie das Verhindern eines sehr häufigen Fehlers, der seit 2017 viele Benutzer stört.
Diese Bibliothek soll dies verhindern, indem es ein leichter Wrapper über nativem PyTorch ist. Wenn ein Tensor verpackt ist, berechnet die Bibliothek automatisch die Menge des verbleibenden GPU-Speichers und verwendet die richtige Chargengröße , wodurch alle die Stapelgröße, wenn ein Modell verwendet wird, manuell fein abteilen muss.
Außerdem verwendet die Bibliothek automatisch die richtige Stapelgröße für die GPU. Wussten Sie, dass die Verwendung größerer Chargen nicht immer die Verarbeitung beschleunigt? Es wird auch automatisch in dieser Bibliothek behandelt.
Da Koila Code PyTorch PyTorch ist, können Sie beide zusammen verwenden, ohne dass dies ohne besorgniserregende Kompatibilität unterwegs ist.
Oh, und das alles in 1 Codezeile! ?
Koila ist auf PYPI erhältlich. Führen Sie den folgenden Befehl aus.
pip install koila Die Verwendung ist tot einfach. Zum Beispiel haben Sie den folgenden PyTorch -Code (kopiert aus PyTorch Tutorial)
Definieren Sie die Eingabe, Beschriftung und Modell:
# A batch of MNIST image
input = torch . randn ( 8 , 28 , 28 )
# A batch of labels
label = torch . randn ( 0 , 10 , [ 8 ])
class NeuralNetwork ( Module ):
def __init__ ( self ):
super ( NeuralNetwork , self ). __init__ ()
self . flatten = Flatten ()
self . linear_relu_stack = Sequential (
Linear ( 28 * 28 , 512 ),
ReLU (),
Linear ( 512 , 512 ),
ReLU (),
Linear ( 512 , 10 ),
)
def forward ( self , x ):
x = self . flatten ( x )
logits = self . linear_relu_stack ( x )
return logitsDefinieren Sie die Verlustfunktion, berechnen Sie Ausgang und Verluste.
loss_fn = CrossEntropyLoss ()
# Calculate losses
out = nn ( t )
loss = loss_fn ( out , label )
# Backward pass
nn . zero_grad ()
loss . backward () OK. Wie kann ich den Code so anpassen, dass sie Koila Funktionen verwenden?
Sie fügen diese Codezeile hinzu (ab V0.1.1):
# Wrap the input tensor and label tensor.
# If a batch argument is provided, that dimension of the tensor would be treated as the batch.
# In this case, the first dimension (dim=0) is used as batch's dimension.
( input , label ) = lazy ( input , label , batch = 0 )Erledigt. Sie werden nicht wieder das Gedächtnis mehr haben.
CUDA error: out of memory kommt es im Allgemeinen im Vorwärtspass, da temporäre Variablen im Speicher gespeichert werden müssen.
Koila ist ein dünner Wrapper um PyTorch . Es ist inspiriert von TensorFlows statische/faule Bewertung. Durch das Erstellen der Grafik zuerst und das Modell nur dann ausführen, wenn das Modell notwendigerweise Zugriff auf alle Informationen hat, um festzustellen, wie viel Ressourcen wirklich benötigt werden müssen, um das Modell zu berechnen.
In Bezug auf die Speicherverwendung sind nur Formen temporärer Variablen erforderlich, um die Speicherverwendung der im Modell verwendeten Variablen zu berechnen . Zum Beispiel nimmt + zwei Tensoren mit gleichen Größen auf und gibt einen Tensor mit einer Größe aus, die der Eingangsgröße entspricht, und log nimmt einen Tensor ein und gibt einen weiteren Tensor mit derselben Form aus. Rundfunk macht es etwas komplizierter als das, aber die allgemeinen Ideen sind gleich. Durch die Verfolgung all dieser Formen könnte man leicht erkennen, wie viel Speicher in einem Vorwärtspass verwendet wird. Und wählen Sie die optimale Chargengröße entsprechend aus.
NEIN . In der Tat klingen die Berechnung von Formen und Berechnung der Größe und des Speicherverbrauchs wie viel Arbeit. Denken Sie jedoch daran, dass selbst ein gigantisches Modell wie GPT-3, das 96 Schichten hat, nur wenige hundert Knoten in seinem Rechendiagramm enthält. Da die Algorithmen von Koila in linearer Zeit ausgeführt werden, kann jeder moderne Computer ein solches Diagramm sofort verarbeiten.
Der größte Teil des Computers wird für die Berechnung einzelner Tensoren und zum Übertragen von Tensoren auf Geräte ausgegeben. Und denken Sie daran, dass diese Schecks sowieso in Vanille PyTorch stattfinden. Also nein, überhaupt nicht langsam.
Dieses Projekt wurde ursprünglich Koala genannt, die faulste Art der Welt, und in diesem Projekt geht es um die faule Bewertung von Tensoren. Da dieser Name jedoch auf PYPI aufgenommen wird, hatte ich keine andere Wahl, als einen anderen Namen zu verwenden. Koila ist ein Wort, das von mir erfunden wurde und ähnlich wie Voila (es ist ein französisches Wort) ausgesprochen wird, also klingt es wie Koala.
Wenn Ihnen das gefällt, was Sie sehen, sollten Sie dies einen Stern geben (★)!
Warum habe ich mir die Mühe durchgemacht und dieses Projekt erstellt, trotz vielen ähnlichen Bibliotheken im Internet?
Die Batchgrößesuche ist nicht neu. Tatsächlich hat der mächtige beliebte Blitz ihn.
Die Batchgröße von Lightning ist tief in ein eigenes Ökosystem integriert. Sie müssen den DataLoader , die Unterklasse aus ihren Modellen, verwenden und Ihre Modelle entsprechend trainieren. Während es relativ einfach ist, beaufsichtigte Lernaufgaben zur Verwendung von Blitz zu refaktieren, ist es wirklich schmerzhaft, dasselbe mit einer Basis für Verstärkungslerncode zu tun, bei der die Interaktion mit der Umgebung ein Muss ist.
Da Koila im Vergleich dazu ein superleichter Pytorch -Wrapper ist, funktioniert es, wenn Pytorch funktioniert und somit maximale Flexibilität und minimale Änderungen des vorhandenen Codes bietet.
Beachten Sie jedoch, dass in dem Fall, in dem Sie einen neuen Code schreiben, Blitz empfohlen wird, da es ein besseres Muster des Codestils erzwingt, was die Modularität auf lange Sicht zugute kommt.
Ebenso ist es keine neue Idee, einen leeren Tensor zum Erstellen eines Rechendiagramms (auch bekannt als statisches Diagramm ) zu erstellen, sondern in der beliebten Tensorflow -Bibliothek und einer ähnlichen Keops PyTorch -Wrapper -Bibliothek gründlich untersucht. Diese Bibliotheken leiden unter der Tatsache, dass das Debuggen von Programmen in ihnen unnötig kompliziert ist. Zum Beispiel war TensorFlow für seine einfache Bereitstellung, aber die Entwicklung in der Entwicklung bekannt, bis zu dem Punkt, dass Benutzer auf PyTorch umgestellt wurden. Während des Debuggens sehen die Leute gerne, was sich in einer Variablen befindet, um festzustellen, ob es einen falschen Wert enthält. Da statische Graphen jedoch nur die Beziehungen definieren, werden die Werte nicht berechnet, wodurch das Debuggen schwierig wird.
Koila löst das durch eifrige Bewertung, wenn sie in Saiten, Ganzzahlen oder irgendwelche Pythonwerte umgewandelt werden. Dies ermöglicht ein nahtloses Debuggen, während die Fähigkeit beibehält, eine Speicherverwaltung durchzuführen, die einfach nicht für ein einfacheres PyTorch -Programm verfügbar ist, das den Speicher dynamisch (bei Bedarf) im laufenden Fliegen zuordnet und frei macht.
Tensor S und LazyTensor S). Der Code funktioniert in vielen Fällen, ist aber noch in Arbeit. Dies ist aufgrund begrenzter Zeit keine vollständig PyTorch -kompatible Bibliothek (noch). Vermeiden Sie es, es in Produktionsumgebungen zu verwenden!
Offenheit und Inklusivität werden sehr ernst genommen. Der Code ist unter Apache -Lizenz verfügbar. Bitte folgen Sie dem folgenden Verhaltenskodex.