MetaとMicrosoftの合作言語モデルLlama-2をlit-GPTでfinetuningする
Llama-2とは
研究にも商用にも使える最強のOSSモデル
https://huggingface.co/blog/llama2
OpenAIのChatGPT, GoogleのPaLM, BardなどのLarge-language model(LLM)が次々と発表されてきていますが、そのデータセットやモデルの公開は非常に限定的です。メガテック企業以外にとってLLMを使ったビジネスというのは非現実的でした。
OSSでもBloomなどのLLMが公開されてきましたが、モデルパラメータ数が小さく性能が足りなかったり、商用に使えないライセンスだったりしました。
LLMビジネス最大の障壁:カスタマイズ性
非現実的であることの最大の要因はモデルをカスタマイズできないことです。ChatGPTはインターネットに書いてある以上の情報はくれないし、最新の情報にアクセスすることはできません。
一般的な知識を返してくれるだけでも有益ですが、それだけならChatGPTで無料でできてしまう。自分たちの領域の専門知識を使ったタスクをLLMにさせるためにはモデルをカスタマイズする必要があります。Supervised Fine Tuning(SFT)やInstruct Tuningなどが必要です。
OSSモデルとしてパラメータを更新して性能をカスタマイズできることはLLMのビジネス化において欠かせないポイントです。
Llamaの実力
この度公開されたLlama 2はFacebookとMicrosoftが協力して作成したモデルでパラメータ数は70B(700億)にのぼります。
その実力は人間の評価によるとChatGPT 3.5-turbo0301(みんながブラウザで使っているあのChatGPT)と同等以上です。
Helpfulness human evaluation result
Safety human evaluation result
こんなに優れたモデルを世界中の人が無料で使える時代が来たってすごすぎます!
さらにうれしいのがLlama 2は人間との対話に特化させるInstruction Tuning済みのモデルも併せて公開されている点。ChatBotなどの代表的なユースケースではモデルのスタート地点として非常に優れていると考えられます。
Lit-GPTでSFTしてみる
Lit-GPTはPyTorch-Lightningでおなじみのlightning.aiが作成したLLM用のレポジトリです。PyTorch-Lightningの土台になっているLightning-Fabricを土台に実装されています。
コードのほぼ全貌が1枚のファイルに入っていて、レポジトリの理解が浅くても簡単にハッキングできる点がポイントになっています。TRLを使ったやり方は公式に譲ります。(あとは個人的にlightning.aiのファンです。
Lit-GPTでFineTuningする
前提
- 20GB程度のGPU
- CUDAなどのGPU utilities
- Linux
- Hugging faceのアカウント登録済
Lit-GPT環境構築
gitからlit-GPTをクローンしてきます。
git clone https://github.com/Lightning-AI/lit-gpt
cd lit-gpt
nightly-versionのPyTorchをインストールします。
pip install --index-url https://download.pytorch.org/whl/nightly/cu118 --pre 'torch>=2.1.0dev'
最後にそのほかの依存関係をインストールします。(このtorchだけ特殊な方法でinstallしなければならないの、クールじゃないですよね)
pip install -r requirements.txt
HuggingFaceアカウント登録
続いてLlama 2をつかうためにHugging faceにアカウント登録します。すでにアカウントがある人はスキップします。
次でLlamaにもアカウントを作成しますがメールアドレスが同じである必要があります。
Llamaアカウント登録
このページからSign Upを押してアカウント登録します。
モデルダウンロード
HuggingFaceのトークン管理ページからトークンを作成・コピーして環境変数に代入します。
export HUGGINGFACE_TOKEN=<your_token_here>
これを使ってモデルをダウンロードします。
python scripts/download.py | grep Llama-2
と叩くとllama-2関連のモデルを一覧できます。
ここでは7Bモデルをダウンロードして、lit-GPT形式にcheckpointを変換しましょう。
pip install huggingface_hub
python scripts/download.py --repo_id meta-llama/Llama-2-7b-chat-hf --token $HUGGINGFACE_TOKEN
python scripts/convert_hf_checkpoint.py --checkpoint_dir checkpoints/meta-llama/Llama-2-7b-chat-hf
動かしてみる
Llamaの追加dependencyであるsentencepieceをインストールしたら、いよいよ動きます!
pip install sentencepiece
python chat/base.py --checkpoint_dir checkpoints/meta-llama/Llama-2-7b-chat-hf
今回利用している7Bのモデルは近年のLLMとしては大したことないですが、それらしい回答が。
Supervised Fine Tuning
最後にSFTをしてみます。今回使うのはStanfordのAlpacaデータセットです。このデータセットをあなたの望むデータセットへとカスタムすることで専門的だったり特殊なパーソナリティをもった言語AIの作成が可能になります。
データセットの用意
Alpacaデータセットを用意します。
python scripts.prepare_alpaca.py
パラメータの調整
finetune/lora.pyを編集してmicro_batch_sizeを1にします。
そうしたらいよいよFineTuningを開始できます。
計算精度を絞ることと、さきほどダウンロードしたモデルを使うことを指示するパラメータとともに
python finetune/lora.py --checkpoint_dir checkpoints/meta-llama/Llama-2-7b-chat-hf --precision bf16-true
と叩くと学習が進んでいきます。
ここで使うのはLow-Rank-Adaptationと呼ばれるメモリ消費量が極めて少ない学習方法ですが、庶民のGPUではLLMの学習を1バッチ進めるのに128回推論する必要があります。
学習が終わるとout/lora/alpaca
以下にチェックポイントが保存されます。このチェックポイントを先ほどの--checkpoint_dir
引数に与えればあなただけのLlama 2が爆誕です!
まとめ
今回はLlamaの概要とlit-GPTを使ったSFTのやり方まで解説しました。
今後はカスタムデータセットを使ってドメイン知識を覚えさせるところまで挑戦してみたいと思います。
今後もDeep Learningの知識をがんがんご紹介していきます。とても励みになるのでいいね教えていっていただけますと幸いです。
Yosematでした。
Discussion