【LLM】LoRAファインチューニングのOOMエラー解決法

LLMのLoRAファインチューニングOOMエラー

LLMの使用中にLoRAファインチューニングOOMエラーに遭遇する場合があります。本記事ではこの問題の原因と解決方法を詳しく解説します。

エラーの症状

LoRAを使ったファインチューニング実行時に「CUDA out of memory」エラーが発生します。LoRAは通常のフルファインチューニングよりメモリ効率が良いはずですが、それでも不足する場合の対処法です。

原因

1. ベースモデルのロードでVRAMを消費
7Bモデルをfp16でロードするだけで約14GBのVRAMが必要です。

2. バッチサイズが大きすぎる
LoRAでもバッチサイズに比例してメモリが増加します。

3. Gradient Checkpointingの未使用
メモリ節約技術を有効にしていない場合です。

解決方法

手順1: 4bit量子化 + LoRA (QLoRA)

from transformers import BitsAndBytesConfig, AutoModelForCausalLM
from peft import LoraConfig, get_peft_model

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B",
    quantization_config=bnb_config,
    device_map="auto"
)

lora_config = LoraConfig(
    r=16, lora_alpha=32,
    target_modules=["q_proj","v_proj"],
    lora_dropout=0.05,
)
model = get_peft_model(model, lora_config)

手順2: Gradient Checkpointingの有効化

model.gradient_checkpointing_enable()
model.enable_input_require_grads()

手順3: バッチサイズの最適化

# 小さなバッチサイズ + Gradient Accumulation
training_args = TrainingArguments(
    per_device_train_batch_size=1,
    gradient_accumulation_steps=16,  # 実効バッチサイズ16
)

まとめ

本記事で紹介した手順を試すことで、多くの場合問題を解決できます。環境固有の問題が残る場合は、公式ドキュメントやコミュニティフォーラムを参照してください。

☁️ ローカルGPUが足りない?クラウドGPUという選択肢

高性能GPUを今すぐ使いたい方には、クラウドGPUサービスがおすすめです:

  • RunPod — RTX 4090が$0.44/h〜、Serverless推論にも対応。セットアップ不要で即利用可能
  • Vast.ai — 最安値のGPUマーケットプレイス。H100/A100も格安で利用可能

💡 この問題を根本的に解決するには

ローカル環境のGPUトラブルが頻発する場合、ハードウェアの見直しも検討してみてください:

💡 この問題を根本的に解決するには

ローカル環境でGPUトラブルが頻発する場合、クラウドGPUサービスの利用も検討してみてください。環境構築の手間なく、すぐにAI開発を始められます。

  • RunPod — RTX 4090が$0.44/h〜、ワンクリックでJupyter環境が起動
  • Vast.ai — コミュニティGPUマーケットプレイス、最安値でGPUレンタル
この記事は役に立ちましたか?