🔥 依存関係地獄からの大脱出

AI LLM ファインチューニング トラブルシューティング Windows

「Project Genesisの世界観をAIに学習させたい!」と意気込んで、LLMのファインチューニング環境を構築しようとしたら、2時間以上も依存関係の迷宮に迷い込んでしまった話です。

同じように苦しんでいる未来の誰かのために、この長い戦いの全記録を残します。


📋 前提条件

  • OS: Windows 11
  • GPU: RTX 3060 Ti (8GB VRAM)
  • Python: 3.10
  • 目的: Llama-3ベースのモデルをProject Genesisのデータでファインチューニング

💥 第一の罠:Unslothのインストール

期待していたこと

「Unslothは高速でメモリ効率が良い」と評判だったので、これを使おうと決めました。

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install unsloth

現実

エラー連発。まず ModuleNotFoundError: No module named 'torch' が発生。

原因: Unslothが pip install の「ビルド段階」で torch の存在をチェックするが、Windowsでは同時インストール中のパッケージがまだ認識されていない。


💥 第二の罠:torchバージョンの不一致

torchを先にインストールしたら、今度は:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed.
torchaudio 2.5.1+cu121 requires torch==2.5.1+cu121, but you have torch 2.10.0 which is incompatible.

原因: Unslothの最新版(2026.1.4)が、自動的に最新のPyTorch 2.10.0を要求するが、CUDA 12.1向けのPyTorchは2.5.1までしか公式提供されていない。


💥 第三の罠:xformersの闇

バージョンを統一しようとして xformers を指定すると:

ERROR: Could not find a version that satisfies the requirement xformers==0.0.28.post3

原因: xformersのビルド済みバイナリがPythonバージョンやCUDAバージョンに非常に依存しており、指定したバージョンが存在しない。


💥 第四の罠:torchaoの自爆

何とか進めると、実行時にこれが出現:

AttributeError: module 'torch' has no attribute 'int1'

原因: torchao という最適化ライブラリが、まだリリースされていない超最新機能(int1 データ型)を前提にしている。torch 2.5.1にはそんなものはない。


💥 第五の罠:transformersの大爆発

transformersをアップグレードすると:

ImportError: cannot import name 'CompileConfig' from 'transformers'

逆にダウングレードすると:

unsloth-zoo 2026.1.4 requires transformers>=4.51.3, but you have transformers 4.47.1

原因: Unslothが最新のtransformersの機能(CompileConfig)を使おうとするが、バージョン管理が追いついていない。


🚨 決断:Unslothを諦める

2時間の試行錯誤の末、ついに決断しました:

「Unslothはまだ2026年初頭のWindowsでは不安定すぎる。標準ライブラリに切り替えよう。」


✅ 解決策:PEFT + LoRAの標準構成

最終的なインストールコマンド

# 問題児を全削除
pip uninstall unsloth unsloth-zoo torchao xformers -y

# シンプルで確実な構成
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install transformers datasets peft trl accelerate bitsandbytes

学習スクリプト(train_genesis_simple.py)

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from trl import SFTTrainer
import torch

# 4-bit量子化設定(8GB VRAM向け)
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
)

# TinyLlama(認証不要、軽量)
model = AutoModelForCausalLM.from_pretrained(
    "TinyLlama/TinyLlama-1.1B-Chat-v1.0",
    quantization_config=bnb_config,
    device_map="auto",
)

# LoRA設定
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)

# ... 以下、学習処理

このシンプルな構成で、ついに 「Loading model and tokenizer...」 という待望のメッセージが表示され、学習が始まりました。


💥 第六の罠:API仕様の激変 (TRL 2025-2026)

「標準ライブラリなら安心」と思っていたら、そこにも罠が。2025年から2026年にかけて、trl ライブラリのAPIが大幅に更新されていました。

1. SFTTrainer の引数名変更

TypeError: SFTTrainer.__init__() got an unexpected keyword argument 'tokenizer'

解決策: tokenizerprocessing_class という名前に変更されていました。

2. SFTConfig への設定集約

TypeError: SFTTrainer.__init__() got an unexpected keyword argument 'dataset_text_field'

解決策: 設定値の多くが、SFTTrainer に直接渡すのではなく、新設された SFTConfig オブジェクトの中に含める形式に変わっていました。

3. バージョン 0.12.2 の地雷:max_length

TypeError: SFTConfig.__init__() got an unexpected keyword argument 'max_seq_length'

解決策: 多くのドキュメントでは max_seq_length とされていますが、この特定のバージョンでは単に max_length と定義されていました。OS側からAPIの中身を inspect することでようやく正解に辿り着きました。


📊 比較:UnslothとPEFT

項目 Unsloth PEFT + LoRA
インストール 🔴 非常に困難(2026年2月時点) 🟢 シンプル
学習速度 🟢 高速 🟡 やや遅い
VRAM消費 🟢 最小 🟡 やや多い(8GBでも動く)
安定性 🔴 依存関係が複雑 🟢 枯れた技術

🎓 学んだ教訓

  1. 2026年初頭のUnslothは、Windowsでは「開発版」扱い
    • Linux環境やGoogle Colabでは安定しているが、Windowsの依存関係管理ツール(pip)との相性が悪い。
  2. 「最新」は必ずしも「ベスト」ではない
    • 枯れた技術(PEFT + LoRA)の方が、結果的に早く目的を達成できることもある。
  3. 依存関係地獄に2時間以上費やすくらいなら、早めに方針転換を
    • 「あと少しで動くはず」という希望的観測が、時間を浪費させる。

🔮 今後の展望

Unslothの開発は非常に活発なので、数ヶ月後にはWindows環境でも安定すると期待しています。

それまでは、標準的なPEFT + LoRA で十分に高品質なファインチューニングが可能です。

Project Genesisの世界観をAIに学習させる旅は、これからが本番です!


この記事は、実際に2時間以上かけて試行錯誤した全記録をもとに執筆しました。