Einige Tricks von Pytorch
Changelog
- 29. November 2019: Aktualisierte einige Modelldesign -Techniken und Argumentationsbeschleunigungsinhalte und fügte einen Einführungslink zum Apex hinzu.
Außerdem habe ich Tffrecord gelöscht, kann Pytorch verwendet werden? Ich erinnere mich, dass ich nicht kann, also habe ich es gelöscht (Zeigt Löschung an: <) - 30. November 2019: Ergänzende MAC -Bedeutung, Ergänzungspapierverbindung von SHUPFLENETV2
- 2. Dezember 2019: Der zuvor erwähnte Pytorch kann TFRECORD nicht verwenden. Heute habe ich eine Antwort von https://www.zhihu.com/question/358632497 gesehen, und ich bin in einer aufstrebenden Haltung.
- 23. Dezember 2019: Mehrere beliebte wissenschaftliche Artikel zur Quantifizierung der Modellkomprimierung hinzugefügt
- 7. Februar 2020: Ein paar zu beachten
- 30. April 2020:
- Fügte eine Dokumentsicherung von Github hinzu
- Ergänzte Verbindungen zur Einführung der Faltungsschicht und der Bn -Schichtfusion
- Hier ist eine weitere Erklärung. Für die Artikel und Antworten vieler Freunde, auf die ich zuvor verwiesen habe, werden die Links und die entsprechende Inhaltsübersicht nicht miteinander verknüpft. Es wird geschätzt, dass einige Freunde beim Lesen des verwandten Inhalts Fragen stellen und den ursprünglichen Autor nicht fragen können. Hier tut es mir zutiefst leid.
- Passen Sie einige Inhalte an und versuchen Sie, der Referenzverbindung zu entsprechen
- 18. Mai 2020: Fügen Sie Pytorch einige Tipps hinzu, um Videospeicher zu speichern. Passen Sie gleichzeitig das Format an. Ich habe auch einen vorherigen Fehler gefunden:
non_blocking=False 's Vorschlag sollte non_blocking=True sein. - 6. Januar 2021: Passen Sie einige Einführungen für das Lesen von Bilddaten an.
- 13. Januar 2021: Eine Strategie für beschleunigte Argumentation hinzugefügt. Ich denke, ich sollte zuerst das Github -Dokument aktualisieren. Das Update von Zhihu Antworten ist etwas problematisch, und es ist unmöglich, die Informationsänderung zu vergleichen, daher ist es sehr schwierig.
- 26. Juni 2022: Das folgende Format und die Inhaltsvereinbarung wurden neu angepasst, während zusätzliche Referenzen und einige der neuesten Entdeckungen hinzugefügt wurden.
- 20. Juni 2024: Die einfache Anpassung des Formats wird mit der Idee ergänzt, die Daten zu beschleunigen, die auf
tar -Format und IterableDataset basiert.
Pytorch beschleunigt
Notiz
Originaldokument: https://www.yuque.com/lart/ugkv9f/ugysgn
Aussage: Der größte Teil des Inhalts stammt aus dem Teilen von Zhihu und anderen Blogs und wird hier nur als Sammlung aufgeführt. Weitere Vorschläge sind willkommen.
Zhihu Antwort (Willkommen zu mögen):
- Das Laden von Pytorch Dataloader -Daten nimmt die meiste Zeit in Anspruch. Wie lösen ihr es? - Antwort des Künstlers der Menschen - Zhihu
- Bei der Verwendung von Pytorch gibt es zu viele Trainingseinsatzdaten, um zehn Millionen zu erreichen. Was sollte ich tun, wenn der Dataloader sehr langsam lädt? - Antwort des Künstlers der Menschen - Zhihu
Vorbehandlung beschleunigt
- Um die Vorverarbeitungsvorgänge bei jedem Lesen von Daten zu minimieren, können Sie einige feste Vorgänge wie
resize in Betracht ziehen und im Voraus speichern und direkt während des Trainings verwenden. - Bewegen Sie die Vorverarbeitung in die GPU, um sich zu beschleunigen.
- Linux kann
NVIDIA/DALI verwenden. - Verwenden Sie Tensor-basierte Bildverarbeitungsvorgänge.
Ich beschleunigt
- MMCV bietet eine relativ effiziente und umfassende Unterstützung für das Lesen von Daten: OpenMMLAB: MMCV -Kernkomponentenanalyse (III): Fileclient
Verwenden Sie eine schnellere Bildverarbeitung
-
opencv ist im Allgemeinen schneller als PIL .- Beachten Sie, dass die faule Ladungsstrategie von
PIL open aussieht als imread von opencv , aber tatsächlich lädt sie die Daten nicht vollständig. Sie können die load() -Methode auf dem Objekt aufrufen, das von open zum Laden von Daten manuell zurückgegeben wurde. Die Geschwindigkeit ist zu diesem Zeitpunkt angemessen.
- Für
jpeg -Reads können Sie jpeg4py ausprobieren. - Speichern Sie das
bmp -Diagramm (Reduzieren Sie die Dekodierungszeit). - Diskussion über die Geschwindigkeit verschiedener Bildverarbeitungsbibliotheken: Was ist der Unterschied zwischen der Implementierungsmethode und der Lesegeschwindigkeit der verschiedenen IMRead -Funktionen von Python? - Zhihu
Integrieren Sie Daten in eine einzelne kontinuierliche Datei (reduzieren Sie die Anzahl der Lesevorgänge)
Für große kleine Dateiwerte kann es als kontinuierliches Dateiformat gespeichert werden, das kontinuierlich gelesen werden kann. Sie können TFRecord (Tensorflow) , recordIO , hdf5 , pth , n5 , lmdb usw. berücksichtigen.
-
TFRecord : https://github.com/vahidk/tfrecord -
lmdb -Datenbank:- https://github.com/fangyh09/image2lmdb
- https://blog.csdn.net/p_lart/article/details/103208405
- https://github.com/lartpang/pysodtoolbox/blob/master/forbigdataset/imageFolder2lmdb.py
- Implementierung basierend auf
Tar -Datei und IterableDataset
Daten vorlesen
Lesen Sie die für die nächsten Iteration erforderlichen Daten vor. Anwendungsfälle:
- So geben Sie den Dataloader in Pytorch - MKFMIKU -Artikel - Zhihu
- Beschleunigen Sie die Lesendaten an Pytorch - Artikel über Hi - Zhihu
Mit Gedächtnis
- Laden Sie direkt in den Speicher.
- Lesen Sie das Bild und speichern Sie es in einem festen Containerobjekt.
- MAP -Speicher auf Festplatte.
Mit festem Zustand
Die mechanische Festplatte wird durch NVME -Festkörperzustand ersetzt. Weitere Informationen finden Sie in Pytorch - Mkfmikus Artikel - Zhihu
Trainingsstrategien
Training mit niedriger Präzision
Im Training werden Repräsentationen mit niedriger Präzision ( FP16 oder sogar INT8 , Binärnetzwerk und Drei-Wert-Netzwerk) anstelle der ursprünglichen Repräsentationen der Genauigkeit ( FP32 ) verwendet.
Es kann eine bestimmte Menge an Videospeicher sparen und beschleunigen, aber achten Sie darauf, dass unsichere Operationen wie Mittelwert und Summe vorsichtig sind.
- Einführung in ein gemischtes Präzisionstraining:
- Tutorial für gemischte Präzisionsausbildung von flach nach tiefe
- Unterstützung der gemischten Genauigkeit von
NVIDIA/Apex .- Pytorch Must-Have Artefact | Schnellfrei: Apex-basierte hybride Präzisionsbeschleunigung
- Pytorch -Installation von Apex -Lösungen für schwierige und verschiedene Krankheiten - Chen Hanke's Artikel - Zhihu
- Pytorch1.6 startet mit
torch.cuda.amp zur Unterstützung gemischter Präzision.
Eine größere Charge
Größere Chargen führen bei fester Epoche tendenziell zu einer kürzeren Trainingszeit. Große Chargen sind jedoch mit vielen Überlegungen wie Hyperparametereinstellung und Speicherverbrauch ausgesetzt, was ein weiterer Bereich ist, der viel Aufmerksamkeit erregt hat.
- Hyperparametereinstellungen
- Genaue, große Minibatch -SGD: Trainingsbild in 1 Stunde, Papier
- Optimieren Sie die Verwendung von Video -Speicherverbrauch
- Gradientenakkumulation
- Gradientenprüfung
- Tiefe netze mit sublinearen Speicherkosten, Papier
- In-Place-Operation
- In-Place-Aktivierung von Batchnorm für das Gedächtnisoptimizierte Training von DNNs, Papieren, Code
Codestufe
Bibliothekseinstellungen
- Einstellen
torch.backends.cudnn.benchmark = True Bevor die Trainingsschleife die Berechnung beschleunigen kann. Da die Leistung von Cudnn -Algorithmen, die die Konvolutionen verschiedener Kernelgrößen berechnen, unterschiedlich, kann der Autotuner einen Benchmark ausführen, um den besten Algorithmus zu finden. Es wird empfohlen, diese Einstellung zu aktivieren, wenn sich Ihre Eingangsgröße nicht häufig ändert. Wenn sich die Eingangsgröße häufig ändert, muss der Autotuner zu oft zu oft bewertet werden, was die Leistung beeinträchtigen kann. Es kann die nach vorne und rückständige Ausbreitungsgeschwindigkeit um 1,27x auf 1,70x erhöhen. - Verwenden Sie die Seite, um den Speicher zu sperren, dh
pin_memory=True in Dataloader. - Für die entsprechende
num_worker finden Sie detaillierte Diskussionen im Pytorch -Geschwindigkeitshandbuch - Yunmengs Artikel - Zhihu. - optimizer.zero_grad (set_to_none = false Hier können Sie den Speicherpflichtiger reduzieren, indem
optimizer.zero_grad() set_to_none=True memset und die Leistung None verbessern. Dies ändert jedoch auch ein gewisses Verhalten, was für die Dokumentation sichtbar ist. memset wird bei allen Parametern durch das model.zero_grad() ausgeführt. Der Gradient wird mit der Operation "Nur schreiben" aktualisiert, wodurch der Gradient None schneller ist. - Verwenden Sie während der Backpropagation den
eval und verwenden Sie torch.no_grad , um Gradientenberechnungen auszuschalten. - Erwägen Sie das Speicherformat von Channels_Last.
- Ersetzen Sie
DataParallel durch DistributedDataParallel . Für Multi-GPUs wird auch wenn nur ein einzelner Knoten DataParallel ist, und es wird immer bevorzugt DistributedDataParallel DistributedDataParallel mehrere Prozesse angewendet wird und eine für jede GPU erstellt, wobei die Python Global Interpreter Lock (GIL) und die Geschwindigkeit umgehen.
Modell
- Initialisieren Sie keine nicht verwendeten Variablen, da die Initialisierung von Pytorch und
forward getrennt sind und nicht initialisiert, da Sie sie nicht verwenden. -
@torch.jit.script , verwenden Sie Pytroch JIT, um Punkt-für-Punkt-Operationen auf einen einzelnen Cuda-Kernel zu verschmelzen. Pytorch optimiert den Betrieb von Tensoren mit großen Abmessungen. Es ist sehr ineffizient, zu viele Operationen auf kleinen Tensoren in Pytorch zu führen. Wenn möglich, kann das Umschreiben aller Berechnungsvorgänge in Chargen den Verbrauch verringern und die Leistung verbessern. Wenn Sie Stapelvorgänge nicht manuell implementieren können, kann Torchscript verwendet werden, um die Leistung Ihres Codes zu verbessern. Torchscript ist eine Untergruppe von Python -Funktionen, aber nachdem Pytorch durch Pytorch verifiziert wurde, kann Pytorch den Torchscript -Code automatisch optimieren, um die Leistung durch seinen Just -Time -Compiler (Just Time (JTT) zu verbessern. Ein besserer Ansatz besteht jedoch darin, Stapeloperationen manuell zu implementieren. - Setzen Sie bei Verwendung von FP16 mit gemischter Präzision ein Vielfaches der Größe 8 für alle architektonischen Designs.
- Die Faltungsschicht vor BN kann die Verzerrung entfernen. Da mathematisch die Verzerrung durch die Subtraktion von BN ausgeglichen werden kann. Wir können Modellparameter und Laufzeitspeicher speichern.
Daten
- Stellen Sie die Stapelgröße auf ein Vielfaches von 8 ein, um die GPU -Speicherverwendung zu maximieren.
- Führen Sie in der GPU so weit wie möglich in Numpy-Stil-Operationen aus.
- Verwenden Sie
del , um den Speicher Fußabdruck zu freien. - Vermeiden Sie unnötige Datenübertragung zwischen verschiedenen Geräten.
- Geben Sie beim Erstellen eines Tensors das Gerät direkt an, anstatt es zu erstellen und dann auf das Zielgerät zu übertragen.
- Verwenden Sie
torch.from_numpy(ndarray) oder torch.as_tensor(data, dtype=None, device=None) , das den Speicherplatz durch die Freigabe des Speichers vermeiden kann. Details und Vorsichtsmaßnahmen finden Sie im entsprechenden Dokument. Wenn die Quell- und Zielgeräte CPUs sind, kopiert torch.from_numpy und torch.as_tensor die Daten nicht. Wenn die Quelldaten ein Numpy -Array sind, verwenden Sie torch.from_numpy schneller. Wenn die torch.as_tensor ein Tensor mit demselben Datentyp und dem gleichen Gerätetyp sind. - Verwenden Sie nicht blockierende Übertragung, dh
non_blocking=True . Dies versucht eine asynchrone Konvertierung, wenn möglich, beispielsweise ein CPU -Tensor im Seitenspeicherspeicher in einen CUDA -Tensor umwandeln.
Optimierung des Optimierers
- Speichern Sie Modellparameter in einem kontinuierlichen Speicherstück, wodurch die Zeit des
optimizer.step() .-
contiguous_pytorch_params
- Verwenden von fusionierten Bausteinen in Apex
Modelldesign
CNN
- SHUFFLENETV2, Papier.
- Die Eingangs- und Ausgangskanäle der Faltungsschicht sind konsistent: Wenn die Anzahl der Eingangs- und Ausgangsfunktionskanäle der Faltungsschicht gleich ist, ist der MAC (Speicherzugriffszeit,
memory access cost ist MAC ) am kleinsten und die Modellgeschwindigkeit ist derzeit am schnellsten - Reduzieren Sie die Faltungsgruppierung: Zu viele Gruppenoperationen erhöhen den MAC, wodurch das Modell verlangsamt wird
- Modellzweige reduzieren: Je weniger Zweige im Modell, desto schneller ist das Modell
- Element in Bezug auf die
element-wise reduzieren: Der zeitliche Verbrauch, der durch element-wise Operationen mitgebracht wird, ist viel größer als die Werte, die sich in Flops widerspiegeln. Daher sollte element-wise so weit wie möglich minimiert werden. depthwise convolution hat auch die Eigenschaften von niedrigen Flops und hohem Mac.
Vision Transformator
- TRT-vit: Tensorrt-orientiertes Sehtransformator, Papier, Interpretation.
- Bühnenebene: Transformator Block ist für spätere Phasen des Modells geeignet, was den Kompromiss zwischen Effizienz und Leistung maximiert.
- Bühnenebene: Das Bühnendesign-Muster mit flachem und dann tief und dann kann die Leistung verbessern.
- Blockebene: Ein Hybridblock aus Transformator und Engpass ist effektiver als ein separater Transformator.
- Blockebene: Das globale und dann lokale Blockdesignmuster hilft, Leistungsprobleme auszugleichen.
Allgemeine Ideen
- Komplexität reduzieren: Reduzieren Sie beispielsweise Modellschneiden und Beschneidungen, reduzieren Sie die Modellebenen und die Parameterskala
- Ändern Sie die Modellstruktur: Beispiele für die Modelldestillation und erhalten Sie kleine Modelle durch Wissensdestillationsmethode
Argumentation beschleunigen
Halbe Präzision und Gewichtung
Verwenden Sie die Darstellung von Niedrigvorräten ( FP16 oder sogar INT8 , Binärnetzwerk und Drei-Wert-Netzwerk) in Inferenz, um die Darstellung der ursprünglichen Genauigkeit ( FP32 ) zu ersetzen.
-
TensorRT ist eine von NVIDIA vorgeschlagene Inferenzmotor für neuronale Netzwerke, die die 8-Bit-Quantisierung nach dem Training unterstützt. Es verwendet einen quer-entropy-basierten Modellquantisierungsalgorithmus, um den Differenzgrad zwischen den beiden Verteilungen zu minimieren. - Pytorch1.3 hat die Quantisierungsfunktion bereits auf der Grundlage der QNNPack-Implementierung unterstützt und unterstützt die Quantisierung, Dynamik- und Quantisierungswahrnehmungstraining und andere Technologien.
- Darüber hinaus ist
Distiller ein Open -Source -Modelloptimierungsinstrument, das auf Pytorch basiert, und unterstützt natürlich die quantitative Technologie in Pytorch. - Microsofts
NNI integriert eine Vielzahl von quantitativen Wahrnehmungstrainingsalgorithmen und unterstützt mehrere Open -Source -Frameworks wie PyTorch/TensorFlow/MXNet/Caffe2
Weitere Informationen finden Sie in drei AIs: [Verschiedenes Gespräch] Welche Open -Source -Tools stehen für die aktuelle Modellquantifizierung zur Verfügung?
Betriebsfusion
- Beschleunigungsfähigkeiten der Modellstelle
- Die Konvergenz der Konvolkschicht und der BN -Schicht in der Netzwerkinferenzstufe - Autocyz -Artikel - Zhihu
- Pytorch selbst liefert ähnliche Funktionen
Neuparametrisierung
- Repvgg
- Repvgg | Lassen Sie Ihr überzeugt bis zum Ende, das einfache Netzwerk übersteigt erstmals 80% Top1
Zeitanalyse
- Python verfügt über mehrere
profile , cProfile und hotshot . Die Nutzungsmethoden sind im Grunde gleich. Es ist nichts anderes als, ob das Modul reines Python ist oder in C geschrieben wurde. - Pytorch Profiler ist ein Tool, das während des Trainings und der Inferenz Leistungsmetriken sammelt. Profiler's Context Manager -API von Profiler kann verwendet werden, um besser zu verstehen, welcher Modellbetreiber am teuersten ist, die Eingangsform- und Stapeldatensätze, die Kernelaktivität für Studiengeräte und die Ausführungsakten visualisieren.
Projektempfehlung
- Modellkomprimierung basierend auf Pytorch:
- Quantifizierung: 8/4/2 Bits (Dorefa), Drei-Wert/Binärwert (TWN/BNN/XNOR-NET).
- Beschneidung: Normale, regelmäßige Kanal -Beschneidung für gruppierte Faltungsstrukturen.
- Gruppierte Faltungsstruktur.
- BN -Fusion für die Binärquantisierung von Merkmalen.
Verlängerte Lesung
- Das Laden von Pytorch Dataloader -Daten nimmt die meiste Zeit in Anspruch. Wie lösen ihr es? - Zhihu
- Bei der Verwendung von Pytorch gibt es zu viele Trainingseinsatzdaten, um zehn Millionen zu erreichen. Was sollte ich tun, wenn der Dataloader sehr langsam lädt? - Zhihu
- Was sind die Fallstricke/Fehler in Pytorch? - Zhihu
- Optimierung des Pytorch -Trainingscode
- 26 Sekunden Single GPU -Training CIFAR10, Jeff Dean mag auch die Fähigkeiten zur Deep Learning -Optimierung - Artikel über das Herz der Maschinen - Zhihu
- Warum ist die Vorhersagezeit des Tensorflows, der mehr als 20 -mal langsamer ist als die ursprüngliche, ein paar neue Funktionen im Online -Modell trainiert haben? - Tzesings Antwort - Zhihu
- Komprimierung des Deep -Lernmodells
- Hat Ihr Modell heute beschleunigt? Hier sind 5 Methoden für Ihre Referenz (mit Codeanalyse)
- Zusammenfassung der gemeinsamen Fallstricke in Pytorch - Yu Zhenbos Artikel - Zhihu
- Pytorch Speedup Guide - Yunmengs Artikel - Zhihu
- Optimieren Sie die Geschwindigkeits- und Speicher -Effizienz von Pytorch (2022)
Pytorch speichert Videospeicher
Originaldokument: https://www.yuque.com/lart/ugkv9f/nvffyf
Gesammelt von: Was sind die Tipps zum Speichern von Speicher (Videospeicher) in Pytorch? - Zhihu https://www.zhihu.com/question/274635237
Verwenden Sie an Ort und Stelle
- Versuchen Sie, Vorgänge zu aktivieren, die standardmäßig in
inplace unterstützen. Zum Beispiel kann relu inplace=True verwenden. -
batchnorm und einige spezifische Aktivierungsfunktionen können in inplace_abn verpackt werden.
Verlustfunktion
Das Löschen des Verlustes am Ende jeder Schleife kann nur sehr wenig Videospeicher sparen, aber es ist besser als nichts. Tensor zu Variablen und Speicherfreiheit Best Practices
Mischgenauigkeit
Es kann eine bestimmte Menge an Videospeicher sparen und beschleunigen, aber achten Sie darauf, dass unsichere Operationen wie Mittelwert und Summe vorsichtig sind.
- Einführung in ein gemischtes Präzisionstraining:
- Tutorial für gemischte Präzisionsausbildung von flach nach tiefe
- Unterstützung der gemischten Genauigkeit von
NVIDIA/Apex .- Pytorch Must-Have Artefact | Schnellfrei: Apex-basierte hybride Präzisionsbeschleunigung
- Pytorch -Installation von Apex -Lösungen für schwierige und verschiedene Krankheiten - Chen Hanke's Artikel - Zhihu
- Pytorch1.6 startet mit
torch.cuda.amp zur Unterstützung gemischter Präzision.
Verwalten Sie Operationen, für die keine Backpropagation erforderlich ist
- Verwenden
torch.no_grad für Vorwärtsphasen, für die keine Backpropagation erforderlich ist, wie z.- Beachten Sie, dass
model.eval() nicht gleich der folgenden Diskussion enthält: 'model.eval ()' vs 'mit torch.no_grad() ()'
- Legen Sie
requires_grad der Variablen fest, die den Gradienten nicht auf False berechnen müssen, damit die Variable nicht an der Rückwärtsausbreitung des Gradienten beteiligt ist, um die Speicherverwendung unnötiger Gradienten zu verringern. - Entfernen Sie den Gradientenpfad, der nicht berechnet werden muss:
- Stochastische Backpropagation: Eine Speicherstrategie für Schulungsvideodelle ist die Interpretation zu sehen:
- https://www.yuque.com/lart/papers/xu5t00
- https://blog.csdn.net/p_lart/article/details/124978961
Video -Speicherreinigung
-
torch.cuda.empty_cache() ist eine erweiterte Version von del . Die Verwendung nvidia-smi wird feststellen, dass der Videospeicher offensichtliche Änderungen hat. Die maximale Verwendung von Video -Speicher während des Trainings scheint sich jedoch nicht zu ändern. Sie können es versuchen: Wie können wir GPU -Speichercache veröffentlichen? - Sie können
del verwenden, um unnötige Zwischenvariablen zu löschen, oder die Form des replacing variables verwenden, um die Belegung zu verringern.
Gradientenakkumulation
Teilen Sie eine batchsize=64 in zwei Chargen von 32 und nach zwei weiteren weiter nach hinten. Aber es wirkt sich batchnorm und andere mit batchsize bezogene Schichten aus.
In der Dokumentation von Pytorch wird ein Beispiel für die Verwendung von Gradientenakkumulation und Mischungspräzision erwähnt.
Verwenden Sie die Gradientenakkumulationstechnologie, um das verteilte Training zu beschleunigen, mit dem sich auf: [Original] [Deep] [Pytorch] DDP -Serie 3: Praktische und Fähigkeiten - 996 Artikel aus der Goldenen Generation - Zhihu
Gradientenprüfung
torch.utils.checkpoint ist in Pytorch bereitgestellt. Dies wird erreicht, indem die Ausbreitung der Vorwärtsversorgung an jedem Checkpoint-Ort während der Backpropagation erneut ausgesetzt ist.
Das Papiertraining tiefe Netze mit Sublinear -Speicherkosten basiert auf der Gradienten -Checkpoint -Technologie, um das Videospeicher von O (N) auf O (SQRT (N)) zu reduzieren. Für tiefere Modelle speichert diese Methode je mehr Speicher, und verlangsamt sich nicht wesentlich.
- Analyse des Checkpoint -Mechanismus von Pytorch
- Torch.utils.Checkpoint Einführung und einfach zu bedienen
- Eine Pytorch -Implementierung von Sublinear -Speicherkosten, auf die verwiesen wird: Was sind die Tipps zum Speichern von Speicher (Videospeicher) in Pytorch? - Lykens Antwort - Zhihu
Verwandte Werkzeuge
- Diese Codes können Ihnen helfen, Ihr GPU -Speicher während des Trainings mit Pytorch zu erkennen. https://github.com/oldpan/pytorch-memory-utils
- Nur weniger als Nvidia-Smi? https://github.com/wookayin/gpustat
Referenzen
- Was sind die Tipps zum Speichern von Speicher (Videospeicher) in Pytorch? - Zheng Zhedongs Antwort - Zhihu
- Eine kurze Diskussion über Deep Learning: Wie berechnet man den Speicherausdruck von Modellen und Zwischenvariablen
- So nutzen Sie den Videospeicher in Pytorch fein
- Was sind die Tipps zum Speichern von Videospeichern in Pytorch? - Chen Hankees Antwort - Zhihu
- Analyse des Pytorch -Video -Speichermechanismus - Connollys Artikel - Zhihu
Andere Tipps
Reproduzieren
Sie können relevante Kapitel im Dokument befolgen.
Obligatorischer deterministischer Operation
Vermeiden Sie nicht deterministische Algorithmen.
In Pytorch kann torch.use_deterministic_algorithms() die Verwendung deterministischer Algorithmen anstelle von nichtterministischen Algorithmen erzwingen, und ein Fehler wird geworfen, wenn bekannt ist, dass die Operation nicht deterministisch ist (und keine deterministische Alternative).
Setzen Sie Zufallszahlensamen
def seed_torch ( seed = 1029 ):
random . seed ( seed )
os . environ [ 'PYTHONHASHSEED' ] = str ( seed )
np . random . seed ( seed )
torch . manual_seed ( seed )
torch . cuda . manual_seed ( seed )
torch . cuda . manual_seed_all ( seed ) # if you are using multi-GPU.
torch . backends . cudnn . benchmark = False
torch . backends . cudnn . deterministic = True
seed_torch () Referenz von https://www.zdaiot.com/mlframeworks/pytorch/pytorch%E9%9A%8F%E6%9C%AIN7%A7%8D%E5%AD%90/
Versteckter Fehler in Dataloader vor Pytorch Version 1.9
Die spezifischen Details zeigen, dass 95% der Menschen immer noch Pytorch -Fehler machen - Serendipity -Artikel - Zhihu
Für Lösungen finden Sie in der Dokumentation:
def seed_worker ( worker_id ):
worker_seed = torch . initial_seed () % 2 ** 32
numpy . random . seed ( worker_seed )
random . seed ( worker_seed )
DataLoader (..., worker_init_fn = seed_worker )