영어 |中文
이것은 자원이 제한된 대형 언어 모델에 대한 전체 매개 변수 미세 조정을위한 구현입니다.
transformers
에 통합되어 accelerate
.lomo-optim
출시되었습니다.CoLLiE
Library에 통합되어 효율적인 방식으로 대형 언어 모델의 공동 교육을 지원합니다. PIP를 사용하여 PYPI에서 lomo-optim
설치할 수 있습니다.
pip install lomo-optim
그런 다음 Lomo
또는 AdaLomo
수입하십시오.
from lomo_optim import Lomo
from lomo_optim import AdaLomo
Lomo
와 AdaLomo
의 사용은 유사하지만 Pytorch의 Optimizers (예)와 동일하지는 않습니다. 더 나은 성능과 더 높은 처리량을 얻기 위해 gradnorm
없이 AdaLomo
사용하는 것이 좋습니다.
이 작업에서는 새로운 최적화 제이 저 인 LOMO ( LOMO )를 제안합니다. LOMO (LOMO)는 그라디언트 계산과 매개 변수 업데이트를 한 단계로 융합하여 메모리 사용량을 줄입니다. 우리의 접근 방식은 단일 RTX 3090에서 7B 모델의 전체 매개 변수 미세 조정 또는 각각 24GB 메모리를 갖는 8 × RTX 3090을 가진 단일 시스템의 65B 모델을 가능하게합니다.
우리의 구현은 후크 기능을 Pytorch의 후진 패스에 주입하는 데 의존합니다. 그림과 같이, 우리는 각 매개 변수에 대해 사용자 정의 된 후크 함수를 등록합니다. 매개 변수의 그라디언트가 계산되면 (. 그레이드 속성에 쓰기 전에) 해당 후크 함수가 호출됩니다. 후크 기능 및 Autograd 그래프의 후진 통과에 대한 자세한 내용은 Pytorch의 문서를 참조하십시오. 요약하면, 뒤로 패스 중에, 우리는 텐서와 그 grad_fn을 통해 그라디언트를 .grad 속성에 작성한 다음 다음 텐서로 전달합니다.
우리의 사용자 정의 된 후크 함수는 모든 매개 변수를 스캔하여. 그레이드 속성이 비어 있지 않은 경우 매개 변수를 업데이트 한 다음. 그레이드 속성을 지우고 해제합니다. . 그레이드 속성이 설정되기 전에 매개 변수의 후크 함수가 호출되므로, 마지막 후크 함수가 호출 될 때 AutoGrad 그래프의 마지막 매개 변수의. 그레이드 속성이 준비되지 않았습니다. 따라서 마지막 매개 변수를 업데이트하기 위해 추가 스캔을 수행합니다.
LOMO 코드는 LOMO 폴더에 있습니다.
이 작업에서 우리는 LOMO와 ADAM 최적화 기술의 차이점을 조사하고 각 매개 변수에 대한 적응 학습 속도를 제공하고 메모리 효율을 유지하면서 그룹화 된 업데이트 정규화를 활용하는 Adalomo를 도입했습니다. Adalomo는 덜 메모리 풋 프린트로 교육 조정 및 추가 사전 훈련 모두에서 ADAMW와 비슷한 결과를 달성합니다.
Adalomo 코드는 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}
}