Bahasa Inggris |中文
Ini adalah implementasi untuk fine-tuning parameter penuh untuk model bahasa besar dengan sumber daya terbatas dan adalomo: optimasi memori rendah dengan tingkat pembelajaran adaptif.
transformers
dan accelerate
.lomo-optim
dirilis.CoLLiE
Library, yang mendukung pelatihan kolaboratif model bahasa besar dengan cara yang efisien. Anda dapat menginstal lomo-optim
dari PYPI menggunakan PIP.
pip install lomo-optim
Kemudian, impor Lomo
atau AdaLomo
.
from lomo_optim import Lomo
from lomo_optim import AdaLomo
Penggunaan Lomo
dan AdaLomo
serupa tetapi tidak sama dengan pengoptimal Pytorch (contoh). Kami merekomendasikan untuk menggunakan AdaLomo
tanpa gradnorm
untuk mendapatkan kinerja yang lebih baik dan throughput yang lebih tinggi.
Dalam karya ini, kami mengusulkan pengoptimal baru, lo w-memory o ptimization ( LOMO ), yang memadukan perhitungan gradien dan pembaruan parameter dalam satu langkah untuk mengurangi penggunaan memori. Pendekatan kami memungkinkan penyempurnaan parameter penuh dari model 7B pada RTX 3090 tunggal, atau model 65B pada mesin tunggal dengan 8 × RTX 3090, masing-masing dengan memori 24GB.
Implementasi kami bergantung pada fungsi suntikan kait ke pass mundur Pytorch. Seperti yang digambarkan dalam gambar, kami mendaftarkan fungsi kait yang disesuaikan untuk setiap parameter. Ketika gradien parameter dihitung (sebelum menulisnya ke atribut .grad), fungsi kait yang sesuai dipanggil. Untuk informasi lebih lanjut tentang fungsi kait dan lulus mundur dari grafik Autograd, silakan merujuk ke dokumentasi Pytorch. Singkatnya, selama lulus mundur, kita melewati tensor dan lulusannya, tuliskan gradien ke atribut .grad, dan kemudian lulus ke tensor berikutnya.
Fungsi kait yang disesuaikan kami memindai semua parameter, memperbarui parameter jika atribut .Grad tidak kosong, dan kemudian menghapus dan membebaskan atribut .Grad. Karena fungsi kait untuk parameter dipanggil sebelum atribut .grad diatur, atribut .Grad dari parameter terakhir dalam grafik Autograd tidak siap ketika fungsi kait terakhir dipanggil. Oleh karena itu, kami melakukan pemindaian tambahan untuk memperbarui parameter terakhir.
Kode untuk LOMO ada di folder LOMO.
Dalam karya ini, kami memeriksa perbedaan antara teknik optimisasi LOMO dan Adam dan memperkenalkan Adalomo, yang memberikan tingkat pembelajaran adaptif untuk setiap parameter dan menggunakan normalisasi pembaruan yang dikelompokkan dengan tetap mempertahankan efisiensi memori. Adalomo mencapai hasil yang sebanding dengan ADAMW baik dalam penyetelan instruksi dan pra-pelatihan lebih lanjut dengan lebih sedikit jejak memori.
Kode untuk Adalomo ada di folder 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}
}