Inglês |中文
Esta é a implementação para o ajuste fino de parâmetro completo para grandes modelos de idiomas com recursos limitados e adalomo: otimização de baixa memória com taxa de aprendizado adaptável.
transformers
e accelerate
.lomo-optim
foi lançado.CoLLiE
, que suporta o treinamento colaborativo de grandes modelos de idiomas de maneira eficiente. Você pode instalar lomo-optim
a partir do PYPI usando o PIP.
pip install lomo-optim
Em seguida, importar Lomo
ou AdaLomo
.
from lomo_optim import Lomo
from lomo_optim import AdaLomo
O uso de Lomo
e AdaLomo
é semelhante, mas não é o mesmo que os otimizadores de Pytorch (exemplo). Recomendamos usar AdaLomo
sem gradnorm
para obter melhor desempenho e maior taxa de transferência.
Neste trabalho, propomos um novo otimizador, a memória de Pimização ( LOMO ), que funde o cálculo do gradiente e a atualização de parâmetros em uma etapa para reduzir o uso da memória. Nossa abordagem permite o ajuste fino do parâmetro completo de um modelo 7B em um único RTX 3090, ou um modelo de 65b em uma única máquina com 8 × RTX 3090, cada um com memória de 24 GB.
Nossa implementação depende de funções de injeção de gancho no passe para trás de Pytorch. Conforme mostrado na figura, registramos uma função de gancho personalizada para cada parâmetro. Quando o gradiente de um parâmetro é calculado (antes de gravá -lo no atributo .grad), sua função de gancho correspondente é invocada. Para obter mais informações sobre as funções do gancho e o passe para trás do gráfico do AutoGRAD, consulte a documentação de Pytorch. Em resumo, durante o passe para trás, passamos por um tensor e seu grad_fn, escrevemos o gradiente no atributo. Grad e depois passamos para o próximo tensor.
Nossa função de gancho personalizada verifica todos os parâmetros, atualizando um parâmetro se o seu atributo .grad não estiver vazio e depois limpa e libera o atributo .grad. Como a função de gancho para um parâmetro é chamada antes do seu atributo .grad, o atributo .grad do último parâmetro no gráfico do AutoGRAD não está pronto quando a última função de gancho for invocada. Portanto, realizamos uma varredura adicional para atualizar o último parâmetro.
O código para LOMO está na pasta Lomo.
Neste trabalho, examinamos as distinções entre as técnicas de otimização LOMO e Adam e introduzimos o Adalomo, que fornece uma taxa de aprendizado adaptável para cada parâmetro e utiliza a normalização da atualização agrupada, mantendo a eficiência da memória. O Adalomo alcança resultados comparáveis ao ADAMW no ajuste das instruções e no pré-treinamento adicional com menos pegada de memória.
O código para Adalomo está na pasta 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}
}