Englisch |中文
Dies ist die Implementierung für die Feinabstimmung der vollständigen Parameter für große Sprachmodelle mit begrenzten Ressourcen und Adalomo: niedrige Memory-Optimierung mit adaptiver Lernrate.
transformers
integriert und accelerate
.lomo-optim
wurde veröffentlicht.CoLLiE
-Bibliothek integriert, die die kollaborative Schulung von großsprachigen Modellen auf effiziente Weise unterstützt. Sie können lomo-optim
von PYPI mit PIP installieren.
pip install lomo-optim
Importieren Sie dann Lomo
oder AdaLomo
.
from lomo_optim import Lomo
from lomo_optim import AdaLomo
Die Verwendung von Lomo
und AdaLomo
ist ähnlich, aber nicht die gleiche wie die Optimierer von Pytorch (Beispiel). Wir empfehlen, AdaLomo
ohne gradnorm
zu verwenden, um eine bessere Leistung und einen höheren Durchsatz zu erzielen.
In dieser Arbeit schlagen wir einen neuen Optimierer vor, lo W-Memory O Ptimization ( LOMO ), der die Gradientenberechnung und das Parameter-Update in einem Schritt vereint, um die Speicherverwendung zu verringern. Unser Ansatz ermöglicht die volle Parameterfeineinstellung eines 7B-Modells auf einem einzelnen RTX 3090 oder einem 65B-Modell auf einer einzelnen Maschine mit 8 × RTX 3090 mit jeweils 24 GB Speicher.
Unsere Implementierung beruht auf der Injektion von Hakenfunktionen in Pytorchs Rückwärtspass. Wie in der Abbildung dargestellt, registrieren wir für jeden Parameter eine benutzerdefinierte Hakenfunktion. Wenn der Gradient eines Parameters berechnet wird (vor dem Schreiben in das .grad -Attribut), wird die entsprechende Hakenfunktion aufgerufen. Weitere Informationen zu Hakenfunktionen und den Rückwärtspass des Autograd -Diagramms finden Sie in der Dokumentation von Pytorch. Zusammenfassend lässt sich sagen, dass wir während des Rückwärtspasses einen Tensor und seinen Grad_fn durchlaufen, den Gradienten in das .grad -Attribut schreiben und dann zum nächsten Tensor übergeben.
Unsere kundenspezifische Hakenfunktion scannt alle Parameter und aktualisiert einen Parameter, wenn das .grad -Attribut nicht leer ist, und löscht und befreit das .grad -Attribut. Da die Hakenfunktion für einen Parameter vor seinem .grad -Attribut aufgerufen wird, ist das .grad -Attribut des letzten Parameters im Autograd -Diagramm nicht fertig, wenn die letzte Hakenfunktion aufgerufen wird. Daher führen wir einen zusätzlichen Scan durch, um den letzten Parameter zu aktualisieren.
Der Code für Lomo befindet sich im LOMO -Ordner.
In dieser Arbeit haben wir die Unterscheidungen zwischen den LOMO- und ADAM -Optimierungstechniken untersucht und Adalomo einführen, was eine adaptive Lernrate für jeden Parameter bietet und gruppierte Update -Normalisierung verwendet, während die Speicherwirkungsgrad aufrechterhalten wird. Adalomo erzielt die Ergebnisse, die sowohl in der Anweisungsabfindung mit ADAMW als auch mit weniger Speicherpflichdern vergleichbar sind.
Der Code für Adalomo befindet sich im Adalomo -Ordner.
@article{lv2023full,
title={Full Parameter Fine-tuning for Large Language Models with Limited Resources},
author={Lv, Kai and Yang, Yuqing and Liu, Tengxiao and Gao, Qinghui and Guo, Qipeng and Qiu, Xipeng},
journal={arXiv preprint arXiv:2306.09782},
year={2023}
}
@article{lv2023adalomo,
title={AdaLomo: Low-memory Optimization with Adaptive Learning Rate},
author={Lv, Kai and Yan, Hang and Guo, Qipeng and Lv, Haijun and Qiu, Xipeng},
journal={arXiv preprint arXiv:2310.10195},
year={2023}
}