Inglés |中文
Esta es la implementación de parámetros completos ajustados para modelos de idiomas grandes con recursos limitados y adalomo: optimización de baja memoria con tasa de aprendizaje adaptativo.
transformers
y accelerate
.lomo-optim
.CoLLiE
, que respalda la capacitación colaborativa de modelos de idiomas grandes de manera eficiente. Puede instalar lomo-optim
desde PYPI usando PIP.
pip install lomo-optim
Luego, importe Lomo
o AdaLomo
.
from lomo_optim import Lomo
from lomo_optim import AdaLomo
El uso de Lomo
y AdaLomo
es similar pero no es lo mismo que los optimizadores de Pytorch (ejemplo). Recomendamos usar AdaLomo
sin gradnorm
para obtener un mejor rendimiento y un mayor rendimiento.
En este trabajo, proponemos un nuevo optimizador, Lo W-Memory O Ptimization ( LOMO ), que fusiona el cálculo de gradiente y la actualización de los parámetros en un solo paso para reducir el uso de la memoria. Nuestro enfoque permite el ajuste fino de los parámetros completos de un modelo 7B en un solo RTX 3090, o un modelo de 65B en una sola máquina con 8 × RTX 3090, cada uno con memoria de 24 GB.
Nuestra implementación se basa en inyectar funciones de gancho en el pase hacia atrás de Pytorch. Como se muestra en la figura, registramos una función de gancho personalizada para cada parámetro. Cuando se calcula el gradiente de un parámetro (antes de escribirlo al atributo .grad), se invoca su función de gancho correspondiente. Para obtener más información sobre las funciones de gancho y el pase hacia atrás del gráfico Autograd, consulte la documentación de Pytorch. En resumen, durante el pase hacia atrás, pasamos por un tensor y su graduación, escribimos el gradiente en el atributo .grad y luego pasamos al siguiente tensor.
Nuestra función de gancho personalizada escanea todos los parámetros, actualizando un parámetro si su atributo .grad no está vacío, y luego borra y libera el atributo .grad. Dado que la función de gancho para un parámetro se llama antes de que se establece su atributo .grad, el atributo .grad del último parámetro en el gráfico Autograd no está listo cuando se invoca la última función de gancho. Por lo tanto, realizamos un escaneo adicional para actualizar el último parámetro.
El código para LOMO está en la carpeta LOMO.
En este trabajo, examinamos las distinciones entre las técnicas de optimización de LOMO y Adam e introducimos Adalomo, que proporciona una tasa de aprendizaje adaptativa para cada parámetro y utiliza la normalización de actualizaciones agrupadas mientras se mantiene la eficiencia de la memoria. Adalomo logra resultados comparables a ADAMW tanto en el ajuste de instrucciones como en el pre-entrenamiento adicional con menos huella de memoria.
El código para Adalomo está en la carpeta 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}
}