英語|中文
これは、リソースが限られている大規模な言語モデルとAdalomo:Adaptive学習率を備えた低メモリの最適化の完全なパラメーター微調整の実装です。
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
使用して、パフォーマンスを向上させ、スループットを高めることをお勧めします。
この作業では、メモリの使用量を減らすために1つのステップで勾配計算とパラメーターの更新を融合する新しいオプティマイザーLo W-Memory O Ptimization( LOMO )を提案します。私たちのアプローチにより、単一のRTX 3090の7Bモデルの完全なパラメーター微調整、または8×RTX 3090を備えた単一マシンの65Bモデル、それぞれが24GBメモリを備えています。
私たちの実装は、Pytorchのバックワードパスにフック機能を注入することに依存しています。図に描かれているように、各パラメーターのカスタマイズされたフック関数を登録します。パラメーターの勾配が計算されると(.grad属性に書き込む前に)、対応するフック関数が呼び出されます。フック関数とオートグラードグラフの後方パスの詳細については、Pytorchのドキュメントを参照してください。要約すると、バックワードパス中に、テンソルとそのGRAD_FNを通過し、グラデーションを.grad属性に書き込み、次のテンソルに渡します。
カスタマイズされたフック関数はすべてのパラメーターをスキャンし、.grad属性が空でない場合にパラメーターを更新し、.grad属性をクリアして解放します。パラメーターのフック関数は.grad属性が設定される前に呼び出されるため、自動グラフグラフの最後のパラメーターのグラデーション属性は、最後のフック関数が呼び出されたときに準備ができていません。したがって、最後のパラメーターを更新するために追加のスキャンを実行します。
LomoのコードはLomoフォルダーにあります。
この作業では、ロモとアダムの最適化手法の区別を調べ、各パラメーターに適応学習率を提供し、メモリ効率を維持しながらグループ化された更新正規化を利用します。 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}
}