コスト効率の高いチューニングのためのLoRAとQLoRA
量子化済みのベースモデル上で低ランクアダプターだけを学習し、70Bモデルのファインチューニングを1台のGPUに収めます。
「コスト効率の高いチューニングのためのLoRAとQLoRA」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
なぜPEFTなのか
Llama 70Bのフルファインチューニングには8台以上のH100が必要で、700億個のパラメータを更新します。PEFT(Parameter-Efficient Fine-Tuning)は、同程度の品質を保ちながら、パラメータの1%未満を更新します。コストを大幅に削減できます。
LoRA:低ランク適応
LoRA(Hu et al. 2021)は、凍結したベースの重みと並行して、小さな「アダプター」行列を学習します。
- Aがdxr、Bがrxdで、rが小さい(8、16、64)A x B行列を追加する
- 順伝播:y = Wx + (BA)x
- AとBだけを学習するため、パラメータ数を桁違いに少なくできる
QLoRA:量子化LoRA
QLoRA(Dettmers et al. 2023)は、トレーニング中にベースモデルを4ビットに量子化することで、コストをさらに削減します。
- ベースモデルはNF4(4ビット)
- LoRAアダプターはより高い精度で保持
- 1台のA100/H100で70Bモデルのファインチューニングが可能
Setup with peft + transformers
# pip install peft transformers bitsandbytes
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
'meta-llama/Llama-3.1-8B-Instruct',
load_in_4bit=True, # QLoRA
device_map='auto'
)
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=['q_proj', 'v_proj'],
lora_dropout=0.05,
bias='none'
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: ~0.5% of totalTraining Loop with TRL
from trl import SFTTrainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
tokenizer=tokenizer,
args=TrainingArguments(
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
num_train_epochs=3,
output_dir='./lora-out'
)
)
trainer.train()
model.save_pretrained('./adapter')Unslothの使用
Unslothは最速のLoRAライブラリで、標準のpeftより2倍高速です。ドロップインで使えるAPIを提供します。
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name='meta-llama/Llama-3.1-8B-Instruct',
load_in_4bit=True
)
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=['q_proj', 'k_proj', 'v_proj', 'o_proj', 'gate_proj', 'up_proj', 'down_proj']
)コストの見積もり
10k個の例を使ってLlama 3.1 8BをQLoRAで学習する場合:
- 1台のH100で約4時間
- クラウドGPUのコストは約5~10ドル
- アダプターファイルは100~300 MB
ランクrの選択
- r = 8 — 最小限。形式やスタイルの変更向け
- r = 16~32 — ほとんどのケース
- r = 64以上 — 大幅な新しい振る舞い。より大きな容量
対象モジュール
デフォルトではアテンション射影(q、v)を対象にします。より大きな容量が必要な場合は、すべての線形層を含めます。品質は向上しますが、パラメータ数も増加します。
重要なハイパーパラメータ
- 学習率 — 1e-4~5e-4が一般的です
- エポック数 — SFTでは2~5です
- バッチサイズ — VRAMに依存します。勾配累積を使って、より大きなバッチサイズを擬似的に実現します
アダプターのベースへのマージ
推論時には、LoRAをベースの重みにマージし直すことができます。
merged = model.merge_and_unload()
merged.save_pretrained('./full-model')複数のLoRAの提供
vLLMは推論時のLoRAのホットスワップに対応しています。共有ベースモデル上で顧客ごとにファインチューニングする場合に便利です。
llm = LLM(model='base', enable_lora=True, max_lora_rank=64)
response = llm.generate(prompt, lora_request=LoRARequest('customer-a', 1, './customer-a-adapter'))アダプターの評価
必ずご自身の評価セットをチューニング済みモデルで実行してください。エッジケースではチューニングによって性能が低下することもあるため、回帰を正直に確認しましょう。
LoRAの利点
フルファインチューニングと比べたLoRAの主な実用上の利点は何でしょうか。
まとめ
LoRA + QLoRAは、コスト効率の高いファインチューニングを実現します。速度にはUnsloth、幅広い機能にはpeft/TRLを使います。ほとんどのケースではランク16~32が適しています。正解データセットと比較して評価してください。
よくある質問
「コスト効率の高いチューニングのためのLoRAとQLoRA」レッスンは無料ですか?
はい。「コスト効率の高いチューニングのためのLoRAとQLoRA」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「コスト効率の高いチューニングのためのLoRAとQLoRA」で何を学びますか?
量子化済みのベースモデル上で低ランクアダプターだけを学習し、70Bモデルのファインチューニングを1台のGPUに収めます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「コスト効率の高いチューニングのためのLoRAとQLoRA」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プロンプトよりファインチューニングが有効な場合
- データ収集:軌跡とトレースの再生
- コスト効率の高いチューニングのためのLoRAとQLoRA
- チューニング済みモデルとベースモデルの評価