はじめに
以前、MacBookでマルチターン対話のDPO(Direct Preference Optimization)訓練を試みたところ、データ量不足が原因と思われる失敗に終わりました。そこで今回は、クラウドGPUサービス「Lambda Labs」を使って、データ量を2.5倍に増やし、より強力な環境で再挑戦してみました。Lambda Labsとは?
Lambda Labsは、機械学習向けのクラウドGPUサービスです。主な特徴:- シンプルな料金体系: 時間課金、わかりやすい価格設定
- 高性能GPU: A100、H100、GH200など最新GPUが利用可能
- 即座に起動: アカウント作成からインスタンス起動まで数分
- ML向けに最適化: CUDA、PyTorch、TensorFlowなど主要ライブラリがプリインストール
競合と比較すると:
- RunPod: より安価だが、設定が複雑
- Vast.ai: 最安値だが、品質にばらつき
- AWS/GCP: 高機能だが、料金体系が複雑で高額
今回の実験設定
目的
MacBookでの失敗(20会話、成功率0%)をGPU環境とデータ拡張で克服できるか検証環境
- GPU: NVIDIA GH200 480GB (Grace Hopper Superchip)
- VRAM: 480GB(驚異的な容量!)
- CUDA: 12.8
- PyTorch: 2.7.0
- 料金: 約$4/時間
データ
- 会話数: 20 → 50会話(2.5倍)
- 形式: 2-3ターンの日本語マルチターン対話
- トピック: 結婚式、転職、ヨガ、株式、ブログ、筋トレなど30種類を追加
モデル
- ベースモデル: rinna/japanese-gpt2-medium (337M parameters)
- 訓練方法: 2段階アプローチ(SFT → DPO)
- LoRA: Rank 16、訓練パラメータ0.47%
訓練パラメータ
Stage 1 (SFT): 10エポック、batch_size=4、lr=5e-5
Stage 2 (DPO): 5エポック、batch_size=2、lr=5e-6、beta=0.1
Lambda Labsでの作業フロー
1. インスタンス起動(5分)
- Webコンソールからワンクリックで起動
- SSH鍵を登録
- IPアドレスが即座に発行される
2. 環境セットアップ(30分)
- Python 3.10、CUDA 12.8が最初から入っている
- 必要なのはML用ライブラリの追加のみ:
pip3 install transformers==4.38.0 peft==0.9.0 'numpy<2'
3. ファイル転送(10分)
- ローカルで作成したスクリプトとデータをscp転送
- tarで圧縮して効率的に転送
4. 訓練実行(20分)
全自動スクリプトで実行:./run_all_training.sh
内容: 1. SFT訓練(10エポック、約5分) 2. DPO訓練(5エポック、約5分) 3. 検証(約1分)
5. 結果ダウンロード(5分)
- 訓練済みアダプター(6.0MB × 2)
- ログファイル(3種類)
訓練結果
SFT訓練: ✅ 成功
損失が順調に減少:
エポック1: 3.1166
エポック5: 2.9723
エポック10: 2.6591
総改善: -14.7%
モデルは会話応答能力を獲得できました。
DPO訓練: ❌ 失敗
驚くべきことに、DPO損失がほぼ横ばい:
エポック1: 0.6927
エポック2: 0.6935
エポック3: 0.6929
エポック4: 0.6928
エポック5: 0.6931
これは選好学習が全く機能していないことを示しています。
検証結果
平均 Chosen 対数確率変化: -0.5273 ❌
平均 Rejected 対数確率変化: -0.6413 ✅
成功率: 0/50 (0%)
Chosenが増加すべきなのに減少しています。完全な失敗です。
衝撃的な発見
最も重要な発見は、データ量を増やしたら逆に悪化したことです:| 環境 | 会話数 | Chosen変化 | 成功率 | |------|--------|-----------|--------| | MacBook | 20会話 | -0.1320 | 0% | | Lambda Labs | 50会話 | -0.5273 | 0% | | (参考)単一ターン | 52ペア | +0.1355 ✅ | 100% |
2.5倍のデータで4倍悪化という結果に。 これは「データ量不足」という当初の仮説が完全に誤りだったことを示しています。失敗の原因分析
1. DPO損失の異常
正常なDPO訓練では損失が減少しますが、今回はほぼ横ばい。選好を学習していません。2. マルチターン対話の複雑性
単一ターンでは完璧に動作するのに、マルチターンで失敗するのは:- 会話履歴フォーマットがGPT-2に不適切
- 長い文脈での位置エンコーディングの問題
- 文脈依存の選好判断が複雑すぎる
3. データ設計の問題
人工的に作成した会話データの質に問題がある可能性が高いです。Lambda Labsの使用感
良かった点
- ✅ セットアップが超簡単: アカウント作成から訓練開始まで1時間以内
- ✅ 高性能: GH200の480GB VRAMは驚異的、メモリ不足の心配なし
- ✅ 料金が明確: 時間課金で予算管理しやすい
- ✅ ML環境が完備: CUDA、PyTorchなど主要ツールがプリインストール
改善してほしい点
- ⚠️ リージョン選択不可: 最寄りのデータセンターを選べない
- ⚠️ 永続ストレージが高額: インスタンス削除でデータ消失
- ⚠️ SSH鍵管理: 複数鍵の管理がやや不便
コスト
今回の実験:約1時間 × $4/時間 = 約$4 MacBookで同じ訓練をしようとすると発熱とバッテリー消費で現実的ではないため、この価格は妥当です。得られた教訓
1. ハードウェアは魔法ではない
高性能GPUを使っても、根本的なアプローチが間違っていれば意味がない。2. データ量 ≠ データ品質
量を増やすだけでは解決しない。むしろ悪化することもある。3. 段階的な検証が重要
- 単一ターン: ✅ 成功
- マルチターン: ❌ 失敗
4. クラウドGPUの有用性
失敗したとはいえ、1時間$4で最先端GPUを使えるのは素晴らしい。ローカル環境では不可能な実験ができました。今後の方向性
マルチターン対話DPOを成功させるには:1. 対話専用モデルへ変更 - GPT-2 → rinna/japanese-gpt-neox-instruction-sft - 会話フォーマットに対応したモデル
2. 会話フォーマット改善 - 現在: "User: ... Assistant: ..." - 改善案: "<|user|>...<|assistant|>..."
3. ターン数削減 - 3ターン → 2ターンでシンプル化
4. 実データ使用 - 人工データ → 実際の人間の対話ログ
まとめ
Lambda Labsを使ったマルチターン対話DPO訓練は技術的には失敗でしたが、多くの知見を得られました:- ✅ Lambda Labsは使いやすく、ML実験に最適
- ✅ GH200 480GBの性能は圧倒的
- ❌ データ量増加は解決策ではない
- ❌ マルチターンDPOは根本的な見直しが必要
