HuggingFaceが提供しているライブラリ等を用いてLLMのファインチューニングや推論をしたいとき、手始めに参考になるかもしれない事柄や文書などをまとめた。
公開されている代表的なLLM
Model Hub ID | コメント |
---|---|
facebook/opt-125m | とても軽量なLLM |
microsoft/phi-2 | 軽量かつ高性能なLLM |
meta-llama/Llama-2-7b-hf | 有名なオープンソースLLM |
lmsys/vicuna-7b-v1.5 | Llama 2にInstruction tuningを施したLLM |
mistralai/Mistral-7B-v0.1 | 高性能なLLM |
llava-hf/llava-1.5-7b-hf | VicunaとCLIPをベースに画像を入力できるようにしたMLLM |
HuggingFaceが提供するライブラリ
ライブラリ名 | コメント |
---|---|
Transformers | Model、TokenizerやTrainerなど、LLMを使うためのクラスが揃っている |
Datasets | データセットを簡単にロードして使うためのライブラリ |
PEFT | 効率的なファインチューニング手法を実装したライブラリ |
Accelerate | 分散学習手法を実装したライブラリ |
TRL | Instruction tuningをするのに便利なクラスを提供する |
TGI | LLMの推論サーバ |
ファインチューニングの大まかな流れ
- ベースとなるモデルを
AutoModelForCausalLM.from_pretrained()
などでロードする - トークナイザも
AutoTokenizer.from_pretrained()
などでロードする - データセットをDatasetsの
load_dataset()
でロードする
3.1. 必要に応じてmap()
メソッドでトークナイズなどデータの準備をする -
Trainer
にモデルやデータセット等を渡して学習を走らせる
4.1. Instruction tuningの場合は、かわりにTRLのSFTTrainer
とDataCollatorForCompletionOnlyLM
を使うと手軽に学習できる
References
- Fine-tuning a model with the Trainer API - 🤗 Course
- Training a causal language model from scratch - 🤗 Course
- Fine-Tuning Gemma Models in Hugging Face - 🤗 Blog
- huggingfaceのTrainerクラスを使えばFineTuningの学習コードがスッキリ書けてめちゃくちゃ便利です
- huggingface/TRLのSFTTrainerクラスを使えばLLMのInstruction Tuningのコードがスッキリ書けてとても便利です
1つのGPUでLLMを効率的に扱う
量子化(Quantization)と呼ばれる手法を用いることで、モデルの重みを8bitや4bitで表現することができ、限られたGPUメモリでもより大きなモデルを動かすことができる。bitsandbytesはモデルに即座に適用できるのに対し、AWQやGPTQは素のモデルに適用する場合にはキャリブレーションが必要。これらはTransformersに統合されている。
量子化手法 | コメント |
---|---|
bitsandbytes | 8bit量子化およびQLoRAの4bit量子化(NF4)を実装したライブラリ |
AWQ | 4bit量子化(INT4)。要キャリブレーション |
GPTQ | AWQの前身といえる量子化手法。要キャリブレーション |
訓練ではLoRAなどを用いることで、重みをすべて学習するよりも効率化できる。また、Gradient accumulationなどの手法を用いることでも、メモリ使用量を抑えることができる。
References
- bnb-4bit-training.ipynb - QLoRAでファインチューニングするサンプルコード
- Quantization - 🤗 PEFT
- Methods and tools for efficient training on a single GPU - 🤗 Transformers
- Fine-tuning Mistral 7B with W&B
- OpenCALM-7BをLoRAでinstruction tuningするための実装解説 / QLoRAの実装も紹介
実験の管理
Trainer
にはW&Bへの連携が統合されており、Webでの実験のトラッキングやチェックポイントの保存が簡単にできる。
References
- Hugging Face Transformers - W&B Integrations
推論サーバ
LLMの推論サーバを用いることで、複数の推論を効率的に実行することができる。
vLLMは多くのLLMに対応し、LoRAのAdapterを適用することもできる。Attentionの実装にPagedAttentionを用いることで高いスループットを実現している。OpenAI API互換なので、OpenAI APIを用いているアプリケーションからdrop-in replacementとして使える。
SGLangはRadixAttentionを用いてvLLM以上に高いスループットを達成する。また、複雑なプロンプトのフローを効率的に記述するための言語も提供する。
デプロイ
SkyPilotを用いることで、最も安価にGPUインスタンスを使用可能なクラウドプロバイダを自動的に選択して推論サーバをデプロイできる。