Anglais |中文
Il s'agit de la mise en œuvre du réglage des paramètres complets pour les modèles de grandes langues avec des ressources limitées et Adalomo: optimisation à faible mémoire avec taux d'apprentissage adaptatif.
transformers
et accelerate
.lomo-optim
a été publié.CoLLiE
, qui soutient la formation collaborative de modèles de gros langues de manière efficace. Vous pouvez installer lomo-optim
à partir de PYPI à l'aide de PIP.
pip install lomo-optim
Ensuite, importez Lomo
ou AdaLomo
.
from lomo_optim import Lomo
from lomo_optim import AdaLomo
L'utilisation de Lomo
et AdaLomo
est similaire mais pas la même chose que les optimisateurs de Pytorch (exemple). Nous vous recommandons d'utiliser AdaLomo
sans gradnorm
pour obtenir de meilleures performances et un débit plus élevé.
Dans ce travail, nous proposons un nouvel optimiseur, LO W MEMORY O PTIMITION ( LOMO ), qui fusionne le calcul du gradient et la mise à jour des paramètres en une étape pour réduire l'utilisation de la mémoire. Notre approche permet le réglage fin du paramètre complet d'un modèle 7b sur un seul RTX 3090, ou un modèle 65B sur une seule machine avec 8 × RTX 3090, chacun avec une mémoire de 24 Go.
Notre implémentation repose sur l'injection des fonctions de crochet dans la passe arrière de Pytorch. Comme illustré dans la figure, nous enregistrons une fonction de crochet personnalisée pour chaque paramètre. Lorsque le gradient d'un paramètre est calculé (avant de l'écrire sur l'attribut .grad), sa fonction de crochet correspondante est invoquée. Pour plus d'informations sur les fonctions de crochet et la passe arrière du graphique Autograd, veuillez vous référer à la documentation de Pytorch. En résumé, pendant la passe arrière, nous passons par un tenseur et son grad_fn, écrivons le gradient dans l'attribut .grad, puis passons au tenseur suivant.
Notre fonction Hook personnalisée analyse tous les paramètres, mettant à jour un paramètre si son attribut .grad n'est pas vide, puis efface et libère l'attribut .grad. Étant donné que la fonction de crochet d'un paramètre est appelée avant son attribut .grad, l'attribut .grad du dernier paramètre du graphique Autograd n'est pas prêt lorsque la dernière fonction de crochet est invoquée. Par conséquent, nous effectuons une analyse supplémentaire pour mettre à jour le dernier paramètre.
Le code pour Lomo est dans le dossier Lomo.
Dans ce travail, nous avons examiné les distinctions entre les techniques d'optimisation LOMO et ADAM et introduit Adalomo, qui fournit un taux d'apprentissage adaptatif pour chaque paramètre et utilise une normalisation de mise à jour groupée tout en maintenant l'efficacité de la mémoire. Adalomo obtient des résultats comparables à l'ADAMW dans le réglage de l'instruction et une pré-formation supplémentaire avec moins d'empreinte mémoire.
Le code pour Adalomo est dans le dossier Adalomo.
@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}
}