AI・機械学習
中級
UnSloth(高速LLMファインチューニング)(アンスロス)
QLoRAファインチューニングをカスタムCUDAカーネルで最適化したオープンソースライブラリ。HuggingFace PEFT比で学習速度2〜5倍高速化・メモリ使用量60〜70%削減を実現し、無料Google Colabでも70Bモデルのファインチューニングを可能にする。
0 回閲覧
0 いいね
2026/6/6 更新
関連タグ
unsloth
fine-tuning
qlora
fast-training
llm
cuda-kernel
colab
UnSloth(高速LLMファインチューニング)とは
UnSlothは2023年末にDaniel HanとMichael Hanの兄弟が公開したオープンソースのLLMファインチューニング最適化ライブラリ。HuggingFaceのPEFT+Transformersスタックで動くQLoRAを、手書きのCUDA/Tritonカーネルで全面的に最適化した。
主な最適化内容
カーネルフュージョン
通常の実装では別々のCUDAカーネルとして実行される以下の処理をフュージョン(統合):
- RoPE(Rotary Position Embedding)計算
- RMSNorm(Root Mean Square Normalization)
- Cross-Entropy Loss計算
- SwiGLU活性化関数
GPUのメモリ帯域幅ボトルネックを解消し実行時間を短縮する。
手動バックワードパス
PyTorchの自動微分(autograd)を使わず、バックワードパスを手動実装することで中間テンソルのメモリ保持を最小化し不要な計算グラフの構築を回避する。
性能比較
- Llama-3-8B LoRA速度: 標準比 2.0〜2.2倍
- Llama-3-70B QLoRA速度: 標準比 1.8〜2.5倍
- VRAMピーク使用量: 30〜40%(標準比60〜70%削減)
- Mistral-7B Colab T4: 標準でOOM → UnSlothで動作
インストールと基本使用法
pip install "unsloth[cu124-torch250]"
from unsloth import FastLanguageModel
import torch
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Meta-Llama-3.1-8B-Instruct",
max_seq_length=4096,
load_in_4bit=True,
dtype=None,
)
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=["q_proj","k_proj","v_proj","o_proj",
"gate_proj","up_proj","down_proj"],
lora_alpha=16,
lora_dropout=0,
bias="none",
use_gradient_checkpointing="unsloth",
use_rslora=True,
use_dora=False,
)
from trl import SFTTrainer
trainer = SFTTrainer(model=model, train_dataset=dataset,
max_seq_length=4096, tokenizer=tokenizer)
trainer.train()
対応モデル(2025年)
- Llama系: Llama-3.1/3.2/3.3(8B/70B/405B)
- Qwen系: Qwen-2.5(0.5B〜72B)、Qwen-2.5-Coder
- Mistral系: Mistral-v0.3、Mistral-Nemo
- Gemma系: Gemma-2(2B/9B/27B)、Gemma-3
- Phi系: Phi-3/3.5、Phi-4
UnSloth推奨の設定
use_gradient_checkpointing="unsloth" # "unsloth"文字列指定が重要
use_rslora=True # lora_alphaをrank依存でスケーリング → 収束改善
lora_dropout=0 # UnSlothはdropout=0前提で最適化
学習後のエクスポート
# GGUF(llama.cpp用)
model.save_pretrained_gguf("model_gguf", tokenizer, quantization_method="q4_k_m")
# HuggingFace Hubへプッシュ
model.push_to_hub_gguf("username/my-model-gguf", tokenizer, quantization_method="q4_k_m")
# Merged(通常HF形式)
model.save_pretrained_merged("model_merged", tokenizer, save_method="merged_16bit")
まとめ
UnSlothはQLoRAをより速く・より安く実行するための現時点の最速実装。特に無料Colab・手持ちのゲーミングGPUでLLMをファインチューニングしたい場合の第一選択肢。HuggingFaceのPEFTと完全互換なので、既存のコードをほぼそのまま移行できる。