Xiaomi MiMo-V2-Flashをローカルで実行する方法:完全インストールガイド
Xiaomi MiMo-V2-Flashをローカルで実行する方法:完全インストールガイド
XiaomiのMiMo-V2-Flashは効率的なAIモデル設計の突破口であり、総パラメータ数3090億のうち推論時にはわずか150億パラメータがアクティブになるMixture-of-Experts(MoE)アーキテクチャを採用しています。この構造により、優れた性能を発揮しつつ、ローカル環境での運用に適したハードウェア要件を維持しています。本ガイドでは、MiMo-V2-Flashをローカル環境で実行するための複数の方法について詳しく解説します。
なぜMiMo-V2-Flashをローカルで実行するのか?
MiMo-V2-Flashをローカルで実行することには以下のような多くの利点があります:
- データプライバシー:機密データが外部に一切送信されません
- コスト効率:トークン単位のAPI課金やサブスクリプション料金がありません
- 低レイテンシ:ハードウェアに直接アクセスできるため推論速度が高速です
- カスタマイズ性:モデルパラメータやファインチューニングを完全に管理可能
- オフライン対応:インストール後はインターネット接続不要
- パフォーマンス:ローカルGPUをフル活用し最適な速度を実現
ハードウェア要件
最低システム要件
| コンポーネント | 要件 | 推奨仕様 |
|---|---|---|
| GPU | NVIDIA RTX 3080 (12GB VRAM) | RTX 4090 (24GB VRAM) または A6000 |
| RAM | 32GB | 64GB以上 |
| ストレージ | 100GBの空き容量 | 200GB以上のNVMe SSD |
| CPU | Intel i7-10700K / AMD Ryzen 7 3700X | Intel i9-12900K / AMD Ryzen 9 5900X |
| CUDA | 11.8以上 | 12.4以上 |
モデルサイズに関する注意点
- モデル総サイズ:量子化フォーマットで約180GB
- ピークGPUメモリ使用量:15〜20GB VRAM(アクティブパラメータ分)
- コンテキスト長:256Kトークン(大量のRAMを消費)
ソフトウェアの事前準備
インストール前に以下を準備してください:
- Python 3.10以上のインストール
- CUDA Toolkit 11.8以上または12.4以上
- NVIDIAドライバ(最新バージョン推奨)
- Git(リポジトリクローン用)
CUDAインストールの確認
nvidia-smi
nvcc --version方法1:SGLangを使ってインストール(推奨)
SGLangはMiMo-V2-Flashに最適化されたフレームワークで、MoEモデルに適した高速なパフォーマンスを提供します。
ステップ1:SGLangのインストール
# 仮想環境の作成
python -m venv mimo-env
source mimo-env/bin/activate # Windowsの場合: mimo-env\Scripts\activate
# CUDAサポート付きPyTorchのインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# SGLangのインストール
pip install sglangステップ2:モデルのダウンロード
# Hugging Faceにログイン
huggingface-cli login
# MiMo-V2-Flashのダウンロード
huggingface-cli download XiaomiMiMo/MiMo-V2-Flash --local-dir ./models/MiMo-V2-Flashステップ3:SGLangサーバーの起動
python -m sglang.launch_server \
--model-path ./models/MiMo-V2-Flash \
--host 0.0.0.0 \
--port 30000 \
--trust-remote-code \
--dtype float16 \
--max-model-len 262144 \
--gpu-memory-utilization 0.9ステップ4:インストールテスト
import requests
import json
url = "http://localhost:30000/v1/chat/completions"
headers = {"Content-Type": "application/json"}
data = {
"model": "MiMo-V2-Flash",
"messages": [
{"role": "user", "content": "Write a Python function to calculate fibonacci numbers"}
],
"temperature": 0.7,
"max_tokens": 500
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())方法2:Hugging Face Transformersを使う
ステップ1:依存パッケージのインストール
pip install transformers==4.51.0
pip install accelerate
pip install bitsandbytes
pip install torch --index-url https://download.pytorch.org/whl/cu124ステップ2:基本使用スクリプト作成
run_mimo.pyを作成:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# モデルID
model_id = "XiaomiMiMo/MiMo-V2-Flash"
# トークナイザーとモデルの読み込み
print("Loading tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(
model_id,
trust_remote_code=True
)
print("Loading model...")
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True,
load_in_8bit=True, # 8ビット量子化を有効に
max_memory={0: "15GB"} # GPUメモリ使用制限
)
# テキスト生成
prompt = "Explain the concept of machine learning"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
print("Generating response...")
outputs = model.generate(
**inputs,
max_new_tokens=200,
temperature=0.7,
do_sample=True
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(f"\n{response}")ステップ3:スクリプト実行
python run_mimo.py方法3:Ollamaを使う(実験的)
ステップ1:Ollamaのインストール
# macOS/Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windowsの場合:ollama.comからダウンロードステップ2:カスタムModelfile作成
MiMo-V2-Flash用のModelfile作成:
FROM ./models/MiMo-V2-Flash
# パラメータ設定
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER top_k 50
PARAMETER num_ctx 262144ステップ3:ビルドと起動
# モデルの作成
ollama create mimo-v2-flash -f Modelfile
# モデルの実行
ollama run mimo-v2-flash方法4:Dockerでのデプロイ
ステップ1:Dockerfile作成
Dockerfileを作成:
FROM nvidia/cuda:12.4-devel-ubuntu20.04
# Pythonと依存パッケージのインストール
RUN apt-get update && apt-get install -y \
python3.10 \
python3-pip \
git \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
RUN pip3 install sglang transformers accelerate
# モデルとアプリケーションのコピー
COPY models/MiMo-V2-Flash /app/models/MiMo-V2-Flash
COPY app.py /app/
# ポート公開
EXPOSE 30000
# サーバー起動
CMD ["python3", "-m", "sglang.launch_server", "--model-path", "/app/models/MiMo-V2-Flash", "--host", "0.0.0.0", "--port", "30000"]ステップ2:ビルドと起動
# イメージのビルド
docker build -t mimo-v2-flash .
# コンテナの起動
docker run --gpus all -p 30000:30000 -v $(pwd)/models:/app/models mimo-v2-flash高度な設定
Flash Attentionを有効化
パフォーマンス向上のため、Flash Attentionをインストール:
pip install flash-attn --no-build-isolationモデル設定に以下を追加:
from sglang import set_default_backend, RuntimeBackend
set_default_backend(RuntimeBackend.CUDA)メモリ最適化
メモリ不足エラーが発生した場合:
# 量子化を利用
model = AutoModelForCausalLM.from_pretrained(
model_id,
load_in_4bit=True, # 4ビット量子化を使用
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True,
)マルチGPU構成
複数GPUを搭載した環境の場合:
# モデルを複数GPUに分散
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
max_memory={0: "10GB", 1: "10GB", 2: "10GB", 3: "10GB"}
)パフォーマンス最適化
1. GPUメモリ利用率の調整
python -m sglang.launch_server \
--gpu-memory-utilization 0.95 # GPUメモリの95%を使用2. コンテキスト長の最適化
# 高速化したい場合はコンテキスト長を短縮
--max-model-len 32768 # 256Kから32Kに縮小3. テンソル並列化の有効化
# 複数GPUで推論
--tensor-parallel-size 4よくある問題の対処法
問題1:メモリ不足(OOM)
対策:
# 勾配チェックポイントを有効化
model.gradient_checkpointing_enable()
# またはバッチサイズを小さく設定
batch_size = 1 # 大きい値ではなく問題2:CUDAのメモリ不足
対策:
--gpu-memory-utilizationを0.8に下げる- 量子化(8ビットまたは4ビット)を有効に
- 他のGPU負荷の高いアプリケーションを閉じる
問題3:モデル読み込みエラー
対策:
# キャッシュを削除して再ダウンロード
huggingface-cli download XiaomiMiMo/MiMo-V2-Flash --local-dir ./models/MiMo-V2-Flash --resume-download問題4:推論が遅い
対策:
- Flash Attentionの導入:
pip install flash-attn - テンソル並列化を利用して複数GPU活用
- コンテキスト長を短縮
- GPUメモリ使用率を上げる
問題5:インポートエラー
対策:
# 依存関係を再インストール
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
pip uninstall sglang
pip install sglangインストールの動作確認
総合テストスクリプト
test_mimo.pyを作成:
import requests
import json
def test_mimo():
url = "http://localhost:30000/v1/chat/completions"
headers = {"Content-Type": "application/json"}
# テスト1: 基本的なテキスト生成
data1 = {
"model": "MiMo-V2-Flash",
"messages": [{"role": "user", "content": "Write a hello world program in Python"}],
"max_tokens": 100
}
# テスト2: コード生成
data2 = {
"model": "MiMo-V2-Flash",
"messages": [{"role": "user", "content": "Create a REST API with FastAPI"}],
"max_tokens": 200
}
# テスト3: 数学的推論
data3 = {
"model": "MiMo-V2-Flash",
"messages": [{"role": "user", "content": "Solve: What is the derivative of x^2 + 3x + 5?"}],
"max_tokens": 100
}
for i, data in enumerate([data1, data2, data3], 1):
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
print(f"Test {i} passed!")
print(response.json()["choices"][0]["message"]["content"])
else:
print(f"Test {i} failed: {response.status_code}")
if __name__ == "__main__":
test_mimo()テストを実行:
python test_mimo.pyベストプラクティス
- GPU使用状況の監視:
nvidia-smiでメモリと温度をチェック - バッチサイズの調整:最初は1から始めて徐々に増やす
- 仮想環境の活用:venvやcondaで依存関係を隔離
- 定期的なアップデート:ドライバーとCUDAツールキットを最新に保つ
- モデルのバックアップ:ダウンロードしたモデルはバックアップを常に取る
ベンチマークパフォーマンス
簡単なベンチマークを実行
import time
import torch
def benchmark_model(model, tokenizer, prompt):
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
start_time = time.time()
outputs = model.generate(**inputs, max_new_tokens=200)
end_time = time.time()
tokens_generated = len(outputs[0])
tokens_per_second = tokens_generated / (end_time - start_time)
return tokens_per_second
# ベンチマーク用プロンプト
prompt = "Write a detailed explanation of quantum computing"
tps = benchmark_model(model, tokenizer, prompt)
print(f"Tokens per second: {tps:.2f}")まとめ
XiaomiのMiMo-V2-Flashをローカルで実行することは、最先端のAI機能をプライバシーと制御を保ちながら活用できる強力な方法です。最大性能を求めるならSGLangがおすすめですが、使いやすさ重視ならHugging Face Transformersも良い選択肢です。このガイドは、ご自身の環境に応じて開始し、調整を加えていくための全ての情報を提供しています。
重要ポイント:
- 最適なパフォーマンスにはSGLangを推奨
- 十分なGPUメモリ(15GB以上)を確保すること
- メモリが限られる場合は量子化を活用
- コンテキスト長を調整し性能と速度のバランスを取る
- GPU使用状況をモニターし過熱を防止
ローカルハードウェアの限界を超えてスケーリングしたい場合やハードウェア制約に悩む際は、クラウドGPUサービスの活用も検討してください。まずは推奨のSGLang方式で始め、ご自身のニーズや環境に合わせて他のフレームワークも試してみましょう。