ローカルLLMファインチューニング環境構築への道

ローカルLLMファインチューニング環境構築への道

12分で読めます注目

Google ColabのVRAM不足に悩み、「いっそ最強のローカル開発環境を作ろう」と決意。デュアルGPU構成の調査から、GGUF変換、Excel自動化まで。VRAMの壁を突破する1日の記録。

#AI活用#インフラ投資#DX推進#業務効率化ファインチューニングGPUGGUFPython

測定結果

項目BeforeAfter
パフォーマンスGoogle Colab無料プラン(VRAM 15GB制限)ローカル環境構想(VRAM 48GB、RAM 128GB)
コスト月額0円(Colab無料) + 開発時間無限初期投資55万円 + 電気代月5,000円
所要時間調査・実装で8時間

プロジェクト概要:タクミAIの進化

前回のLLMファインチューニング実験の続き。Google Colabの無料プランでVRAM不足に直面し、「いっそ最強のローカル環境を作ろう」という野望が芽生えた1日。

今回のテーマ:

  • Google Colab → OpenAI API → GGUFへの変換フロー確立
  • ローカルLLM開発環境のハードウェア調査(GPU、RAM、MB選定)
  • サイドクエスト:Excel注文書の自動化

技術スタック全体像

Phase 1: ファインチューニング(Google Colab)

# LoRAでELYZA-3.0-8Bをファインチューニング base_model = "elyza/Elyza-japanese-Llama-2-7b-instruct" dataset = "職人キャラクター「タクミ」の会話データ" # 学習設定 config = { "r": 8, # LoRAのランク "lora_alpha": 16, "target_modules": ["q_proj", "v_proj"], "lora_dropout": 0.05, "task_type": "CAUSAL_LM" } # 🔴 問題発生: VRAM不足(Colab無料プランは15GB制限) # 💡 解決策1: モデルを4bit量子化 → メモリ消費を1/4に削減 # 💡 解決策2: gradient_checkpointing有効化 → さらに50%削減

VRAMの限界突破テクニック:

# ❌ Before: 通常読み込み(VRAM 15GB使用 → OOM) model = AutoModelForCausalLM.from_pretrained("elyza-8b") # ✅ After: 4bit量子化(VRAM 4GB使用) from transformers import BitsAndBytesConfig bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.float16 ) model = AutoModelForCausalLM.from_pretrained( "elyza-8b", quantization_config=bnb_config, device_map="auto" )

Phase 2: API統合(Next.js + OpenAI)

// src/app/api/chat/route.ts import OpenAI from 'openai'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }); export async function POST(request: Request) { const { message } = await request.json(); const completion = await openai.chat.completions.create({ model: "gpt-4o-mini", // 月額80円(100会話/日想定) messages: [ { role: "system", content: "お前は職人「タクミ」だ。〜だぜ、〜だな、口調で話す..." }, { role: "user", content: message } ], max_tokens: 200, temperature: 0.7, }); return Response.json({ response: completion.choices[0].message.content }); }

API統合のメリット:

  • ✅ インフラ不要(サーバーレス)
  • ✅ 月額80円〜(低コスト)
  • ✅ GPT-4o miniの高品質出力

デメリット:

  • ❌ 外部API依存(オフライン不可)
  • ❌ データプライバシー懸念
  • ❌ カスタマイズ性の限界

Phase 3: GGUF変換(ローカル実行用)

# 方法1: Hugging Face Hubを経由(無料) # ① LoRAアダプターをHF Hubにアップロード huggingface-cli login huggingface-cli upload my-adapter ./lora-output # ② HF Spaces(llama.cpp)でGGUF変換 # https://huggingface.co/spaces/ggml-org/gguf-my-repo # ③ 変換済みGGUFをダウンロード wget https://huggingface.co/username/model-gguf/resolve/main/model-q4_k_m.gguf

GGUF形式のメリット:

  • ✅ 完全オフライン実行
  • ✅ 4bit量子化で8GBモデルが2GBに圧縮
  • ✅ llama.cpp/Ollamaで簡単に実行

最強ローカルLLM開発環境の研究

現状の限界

現在のPC:

  • CPU: Snapdragon X Elite(ARM)
  • RAM: 16GB
  • GPU: Adreno GPU

問題点:

  • ❌ CUDA非対応(NVIDIAが必須)
  • ❌ RAM不足(70Bモデルには128GB必要)
  • ❌ ARM環境(PyTorch/LlamaIndexの互換性に難)

ハードウェア調査結果

🏆 最強コスパ構成(予算: 約55万円)

| パーツ | 仕様 | 価格 | 理由 | |--------|------|------|------| | GPU | RTX 3090 24GB × 2枚(中古) | 28万円 | VRAM 48GB、70Bモデルを4bit量子化で実行可能 | | RAM | DDR4 3200MHz 128GB | 6万円 | モデルマージ、GGUF変換時に必要 | | CPU | AMD Ryzen 9 7900X | 6万円 | 12コア、TDP 170W | | MB | ASUS TUF X670E-PLUS | 4.5万円 | PCIe 5.0 x16 × 2(デュアルGPU対応) | | SSD | PCIe 4.0 NVMe 2TB | 2.5万円 | データセット保存用 | | PSU | 1200W 80PLUS Platinum | 3万円 | デュアルGPUの消費電力対応 | | その他 | ケース + 冷却 | 5万円 | エアフロー重視 | | 合計 | - | 55万円 | - |

💎 究極性能構成(予算: 約140万円)

| パーツ | 仕様 | 価格 | 理由 | |--------|------|------|------| | GPU | RTX 4090 24GB × 2枚(新品) | 70万円 | RTX 3090比で1.5倍高速、消費電力-20% | | RAM | DDR5 5200MHz 192GB | 18万円 | 大規模モデルのマージ対応 | | CPU | AMD Ryzen 9 7950X | 8万円 | 16コア、最高性能 | | その他 | - | 44万円 | - | | 合計 | - | 140万円 | - |

🔬 プロ向け構成(予算: 約200万円)

| パーツ | 仕様 | 価格 | 理由 | |--------|------|------|------| | GPU | NVIDIA RTX 6000 Ada 48GB × 2枚 | 180万円 | VRAM 96GB、24時間稼働保証 | | RAM | 256GB ECC | - | エラー訂正メモリ | | その他 | - | 20万円 | - | | 合計 | - | 200万円 | - |

🔍 NVLinkは必要か?

従来の認識:

「デュアルGPUならNVLink必須(VRAM統合のため)」

2025年の現実:

  • ✅ PyTorch FSDP(Fully Sharded Data Parallel)がNVLink不要に
  • ✅ DeepSpeed ZeRO-3も同様にPCIe経由で効率的
  • ✅ NVLinkは「あれば便利」程度(必須ではない)

結論: 中古RTX 3090のコスパが圧倒的(NVLink対応だが無くても可)

📊 RAM要件(重要)

| モデルサイズ | 推奨RAM | 用途 | |--------------|---------|------| | 7B | 16GB | 実験・学習 | | 13B | 32GB | 中規模開発 | | 30B | 64GB | 大規模開発 | | 70B | 128GB | プロダクション |

⚠️ 注意: モデルマージ時はさらに2倍必要

  • 例: 70Bモデルをマージ → 256GB RAM必要

💻 OS選択: Windows WSL2 vs Linux

| OS | 性能 | メリット | デメリット | |----|------|----------|-----------| | Linux Ubuntu 22.04 LTS | 100%(ベースライン) | ドライバ安定、コミュニティ大 | GUI不慣れ、ゲーム不可 | | Windows 11 + WSL2 | 99%(ほぼ同等) | 普段使いと両立、VS Code統合 | CUDA設定が若干複雑 |

結論: WSL2で十分(性能差1%は誤差範囲)


サイドプロジェクト: Excel自動化

背景

「工事注文書_本格版.xlsx」の改善依頼。手作業で毎回フォーマットを整えるのが面倒。

実装: openpyxl + pandas

from openpyxl import load_workbook from openpyxl.styles import Font, Alignment, PatternFill wb = load_workbook('工事注文書_本格版.xlsx') ws = wb.active # 自動計算式を挿入 ws['F20'] = '=C20*E20' # 金額 = 数量 × 単価 ws['F36'] = '=SUM(F20:F34)' # 小計 ws['F37'] = '=ROUNDDOWN(F36*0.1,0)' # 消費税10% ws['F38'] = '=F36+F37' # 合計 # 色分け header_fill = PatternFill(start_color='D9E1F2', end_color='D9E1F2', fill_type='solid') total_fill = PatternFill(start_color='FFF2CC', end_color='FFF2CC', fill_type='solid') ws['A5'].fill = header_fill # ヘッダー部分 ws['F38'].fill = total_fill # 合計金額 # イワサキ内装の情報を事前入力 ws['B6'] = 'イワサキ内装' ws['B7'] = '東京都江東区' wb.save('工事注文書_改善版.xlsx')

結果:

  • ✅ 手入力が50%削減
  • ✅ 計算ミス防止
  • ✅ 見やすいレイアウト

技術的学びとGGUF変換の選択肢

GGUF変換方法の比較

| 方法 | 難易度 | 費用 | 時間 | メリット | |------|--------|------|------|----------| | Hugging Face Spaces | ⭐ 簡単 | 無料 | 10分 | GUI操作、初心者向け | | ローカルllama.cpp | ⭐⭐⭐ 難 | 無料 | 30分 | カスタマイズ性高 | | 有料変換サービス | ⭐ 簡単 | $5〜 | 5分 | 最速、サポート有 |

ハードウェア選定の教訓

  1. GPU: 中古RTX 3090が最強コスパ(新品4090の1/2.5価格で80%性能)
  2. RAM: 128GB以上必須(70Bモデル運用の最低ライン)
  3. NVLink: 2025年時点では「あれば便利」程度(必須ではない)

次のステップ

短期(1週間以内)

  1. ✅ Google ColabでLoRA学習完了
  2. ✅ OpenAI API統合完了
  3. ⏳ GGUF変換(HF Hub経由)
  4. ⏳ Ollamaでローカル実行テスト

中期(1ヶ月以内)

  1. ⏳ 中古RTX 3090を2枚購入(予算28万円)
  2. ⏳ ローカル開発環境セットアップ
  3. ⏳ 70Bモデルでファインチューニング実験

長期(3ヶ月以内)

  1. ⏳ Buildeeプロジェクトへの統合
  2. ⏳ 職人向けAIアシスタントのプロダクト化
  3. ⏳ 論文執筆(「中小企業におけるローカルLLM活用事例」)

まとめ

今回の一番の学びは、「ローカルLLM開発は想像以上にハードウェア投資が必要」 という現実。

主な発見:

  • Google Colabの無料プランは「実験」までが限界
  • プロダクション運用にはVRAM 48GB+、RAM 128GB+が必要
  • 中古RTX 3090が2025年時点で最強コスパ
  • NVLinkは2025年では必須ではない(FSDP、DeepSpeed対応)

そして意外な発見は、Excel自動化がめちゃくちゃ楽しい こと。openpyxlでビジネス文書を自動生成できると、事務作業の効率が劇的に改善される。

「AIで世界を変える」とか大きなビジョンも大事だけど、こういう地味な自動化の積み重ねが、実は一番インパクトがあるのかもしれない。


参考資料:

コード例

finetune_with_lora.pypython
from transformers import AutoModelForCausalLM, BitsAndBytesConfig from peft import LoraConfig, get_peft_model # 4bit量子化設定 bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.float16 ) # モデル読み込み(VRAM 4GB) model = AutoModelForCausalLM.from_pretrained( "elyza/Elyza-japanese-Llama-2-7b-instruct", quantization_config=bnb_config, device_map="auto" ) # LoRA設定 lora_config = LoraConfig( r=8, lora_alpha=16, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, task_type="CAUSAL_LM" ) model = get_peft_model(model, lora_config)

Google Colab無料プランでもVRAM 15GB以内に収める4bit量子化 + LoRA学習の設定

improve_order.pypython
from openpyxl import load_workbook from openpyxl.styles import PatternFill wb = load_workbook('工事注文書_本格版.xlsx') ws = wb.active # 自動計算式 ws['F20'] = '=C20*E20' # 金額 = 数量 × 単価 ws['F36'] = '=SUM(F20:F34)' # 小計 ws['F37'] = '=ROUNDDOWN(F36*0.1,0)' # 消費税10% # 会社情報事前入力 ws['B6'] = 'イワサキ内装' ws['B7'] = '東京都江東区' wb.save('工事注文書_改善版.xlsx')

Excel注文書の自動化。計算式と会社情報を事前入力することで手作業を50%削減

失敗した試み

  • Colab無料プランで70Bモデルを直接学習 → VRAM不足でOOM
  • NVLinkなしでデュアルGPUは不可能と思い込んでいた → 実は不要
  • ARM CPUでもPyTorchは動くと期待 → CUDA非対応で断念

未解決の課題

  • ローカル環境の初期投資をどう捻出するか(55万円)
  • GGUF変換後のモデル品質検証方法
  • Excel自動化のさらなる展開(見積書、請求書など)

AI生成コンテンツについて

この記事は、AI(Claude、ChatGPT等)によって生成されたコンテンツです。 経営者とAIの実際の対話を元に作成していますが、技術的な内容には誤りが含まれる可能性があります。

重要な決定をされる際は、専門家にご相談されることをお勧めします。 また、記事の内容について疑問がある場合は、お気軽にお問い合わせください。