1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

量子化したLLMを低GPUリソースでfinetuningする

Last updated at Posted at 2024-08-03

本記事の構成

関連キーワードを列挙して、最後の最後にタイトルへのアンサーをする流れになってます。

・QLoRA

量子化したLLMをfinetuningするためのLoRA。

・bitsandbytes

HuggingFaceがサポートする、LLMを量子化するライブラリ。シンプルで高速。
量子化手法は他にもAWQやGPTQがある。精度はAWQやGPTQの方が高いが量子化に時間がかかる

・PEFT

LLMをLoRAでfinetuningするためのライブラリ

・使用するメモリに関するtips

モデルそのもののデータ量以外にも、トレーニングで使う文章もメモリを食う。しかし使用しているメモリのほとんどはモデルそのもののデータによるものである。

・バッチサイズ

一度に処理するデータの数。一個ずつやってたらキリがないから複数個ずつ処理する。増やすと早くなるが、必要なメモリサイズは大きくなる。

・device_map = "auto"

分散処理手法。例えばGPU8台で140GBのモデルを学習するなら、一個あたり17.5GB分の処理が自動で割り当たる。しかし並列処理ではないので、1台が使われている時に残りの7台は順番待ちをしている。

・DDP(Distributed Data Parallel)

分散処理手法。全てのGPUにフルのLLMをロードし、学習をそれぞれ同時処理する。速いが、フルモデルをロードできるだけのGPUメモリが必要。

・FSDP(Full Shared Data Parallel、開発元:Meta)

分散処理手法。device_map = "auto"とDDPのいいどこどり。つまり、モデルを分割してロードしつつ並列処理を行う。コンパクトかつ速い。
でも、モデルを分割する処理するために最初にGPUへフルモデルをロードする必要があったため、結局大きめのGPU必要じゃんってなった、というプチトラブルを乗り越えて構築完了したらしい。
FSDPをtransformers,accelarate,PEFTの生態系に適応させることに成功しました。

・Gradient Checkpoint

一部のデータで処理した結果を保存して、次のデータで処理をして、結果保存して、を繰り返す手法。バッチ処理が可能になる。

・CPU offloading

使用してない重みデータをCPUに保存しておく手法。GPUリソース使用量を抑えられる。

・Flash Attention 2

CUDAで効率的にアテンション計算する手法。アテンション計算では、入力データのどこに注目するべきかを計算。データそのものをいじるのではなく、データのどこに注目すべきかというデータを追加するイメージ。

・AWQとLora

現在、AWQで量子化したLLMをLoRAでfinetuningすることはできないっぽいです。

・上記を総合すると、、、

QLoRA(PEFT)とFSDPを使うと、量子化された70BのLLMを低GPUリソースでfinetuningできそう!
でも量子化方法はGPTQやbitsandbytesに限るよ、って感じですかね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?