英語|中文
這是針對具有有限資源和Adalomo的大型語言模型進行完整參數微調的實施方法:具有自適應學習率的低內存優化。
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的優化器不同,但不相同(示例)。我們建議在沒有gradnorm
情況下使用AdaLomo
以獲得更好的性能和更高的吞吐量。
在這項工作中,我們提出了一個新的優化器,即L -W-Memory O Ptimization( LOMO ),該功能將梯度計算和參數更新融合,以減少存儲器使用情況。我們的方法啟用了單個RTX 3090上7B模型的完整參數微調,或者在具有8×RTX 3090的單個計算機上的65B模型,每個模型都有24GB內存。
我們的實現依賴於將鉤子功能注入Pytorch的向後通過。如圖所示,我們為每個參數註冊一個自定義的掛鉤函數。當計算參數的梯度(在將其寫入.grad屬性之前)時,調用其相應的鉤函數。有關掛鉤功能和自動踢圖的向後通過的更多信息,請參閱Pytorch的文檔。總而言之,在向後傳球期間,我們通過張量及其grad_fn,將梯度寫入.grad屬性,然後傳遞到下一個張量。
我們的自定義掛鉤函數掃描所有參數,如果其.grad屬性不是空的,則更新一個參數,然後清除並釋放.grad屬性。由於在設置其.grad屬性之前調用了一個參數的掛鉤函數,因此在調用最後一個掛鉤函數時,Autograd Graph中最後一個參數的.grad屬性尚未準備就緒。因此,我們執行額外的掃描以更新最後一個參數。
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}
}