Ollama: モデル管理
モデルはローカルAIのコア資産です——適切なモデルを選び、バージョンを管理することは、シェフが食材を選ぶことと同じくらい重要です。
💡 ヒント: ModelfileのFROM命令は継承メカニズムをサポートしています——既存のモデルをベースにカスタムモデルを作成できます。新しいモデルはベースモデルの重みファイルを共有し、システムプロンプト、パラメータ、テンプレート設定のみを追加レイヤーとして重ねるため、追加のディスク容量を消費しません。これにより、複数のロール特化モデル(返金専門、物流エキスパートなど)の作成が実質コストフリーになります。
📋 前提条件: まず以下を修了してください
- レッスン3:CLI基本操作
1. 学べること
- ollama list / pull / rm / showコマンドの完全ガイド
- モデルのタグシステムとバリアント選択
- Ollamaライブラリの閲覧と選択ガイド
- モデルファイルの保存とディスク管理
- オフラインGGUFファイル移行
2. SaaS創業者でのリアルな事例
(1) ペインポイント:間違ったモデル選択がリソースを無駄に
AliceはGlobalShopというECプラットフォームを立ち上げ、最初はSupportBotカスタマーサービスシステム用にllama3.1:70bモデルをプルしました。40GB以上のモデルがサーバーのディスクを埋め尽くし、推論も遅かったです。後に、3Bパラメータの小規模モデルで一般的な質問の80%を処理できることが分かりました。70Bが必要なのは複雑なチケットだけでした。
(2) ソリューション:ニーズに基づく段階的デプロイ
モデルのタグとパラメータレベルを理解することで、Aliceは段階的戦略を構築しました:3Bは一般的な質問を処理(高速)、8Bは中程度の複雑さ、70Bは高難度のチケットのみを処理。
BASH
# Pull different sizes for different tasks
ollama pull llama3.2:3b # Fast, for simple queries
ollama pull llama3.1:8b # Balanced
ollama pull llama3.1:70b # Powerful, for complex cases
3. モデル管理コマンド完全ガイド
(1) コマンドリファレンス表
| コマンド | 目的 | 例 |
|---|---|---|
| ollama list | ローカルモデル一覧 | ollama list |
| ollama pull | モデルをプル | ollama pull llama3.2 |
| ollama rm | モデルを削除 | ollama rm llama3.2:3b |
| ollama show | モデル詳細を表示 | ollama show llama3.2 |
| ollama cp | モデルタグをコピー | ollama cp llama3.2 my-llama |
| ollama run | モデルを実行 | ollama run llama3.2 |
(2) モデルライフサイクル
stateDiagram-v2
[*] --> Pulled: ollama pull
Pulled --> Running: ollama run
Running --> Idle: Keep alive timeout
Idle --> Running: ollama run (reload)
Idle --> Unloaded: Memory pressure
Unloaded --> Running: ollama run (reload)
Pulled --> Copied: ollama cp
Copied --> Running: ollama run copy
Pulled --> Deleted: ollama rm
Deleted --> [*]
(3) ▶ サンプル:基本管理操作
BASH
# List all local models
ollama list
# NAME ID SIZE MODIFIED
# llama3.2:latest a80c4feeb02f 2.0 GB 2 hours ago
# mistral:latest 2b3e5c5f1e3d 4.1 GB 1 day ago
# Pull a specific model
ollama pull llama3.2
# pulling manifest... done
# success
# Show model details
ollama show llama3.2
# Model
# architecture: llama
# parameters: 3.2B
# quantization: Q4_K_M
# context length: 131072
# Delete a model to free space
ollama rm llama3.2:3b
# deleted 'llama3.2:3b'
⚠️ 注意:
ollama rmは取り消しできません——モデルファイルはディスクから永久に削除されます。Ollamaライブラリからプルしたモデルの場合、ollama pullで再ダウンロードできますが、大規模モデルのダウンロードには長時間かかる場合があります(40GB以上で10〜30分)。削除前にモデルが不要であることを確認してください。
出力:
TEXT
NAME ID SIZE
llama3.2:latest a80... 2.0 GB
mistral:latest 61... 4.1 GB
4. モデルタグシステム
⚠️ 警告: 70Bパラメータモデルのプルには40GB以上のVRAM(マルチGPU)と40GB以上のディスク容量が必要です。ハードウェアがサポートしていない場合は、むやみに
ollama pull llama3.1:70bしないでください——40GBダウンロードした後に実行できず、ディスク容量を無駄にします。プルする前にハードウェアを確認してください。
(1) タグ命名ルール
タグはモデルの特定バリアントを指定し、<name>:<tag>の形式です:
| タグ形式 | 意味 | 例 |
|---|---|---|
| name:latest | デフォルトの最新版 | llama3.2:latest |
| name / パラメータ数 / 量子化 | パラメータレベル | llama3.1:8b / llama3.1:70b |
| name:q4_K_M | 量子化レベル | llama3.2:q4_K_M |
| name:v1.0 | バージョン番号 | llama3.2:v1.0 |
| name(タグなし) | latestと同等 | llama3.2 |
(2) 量子化タグの比較
| タグ | 量子化レベル | 8Bモデルサイズ | 品質評価 | ユースケース |
|---|---|---|---|---|
| q2_K | 2ビット | ~3 GB | 顕著な品質低下 | 極めて制約のあるハードウェア |
| q3_K_M | 3ビット | ~3.8 GB | 軽微な低下 | 4GB VRAM |
| q4_K_M | 4ビット | ~5 GB | オリジナルに近い | 8GB VRAM(推奨) |
| q5_K_M | 5ビット | ~5.7 GB | ほぼロスレス | 8GB VRAM |
| q8_0 | 8ビット | ~8 GB | ロスレス | 12GB以上 VRAM |
| f16 | 16ビット | ~16 GB | フル精度 | 24GB以上 VRAM |
💡 ヒント: 量子化タグを指定しない場合、Ollamaは最適な量子化(通常Q4_K_M)を自動選択します。精密な制御には明示的に指定してください。
(3) ▶ サンプル:異なる量子化バリアントのプル
BASH
# Default: auto-select quantization (usually Q4_K_M)
ollama pull llama3.2
# Explicit: pull specific quantization
ollama pull llama3.2:q4_K_M # Balanced (recommended)
ollama pull llama3.2:q8_0 # Higher quality, larger file
# Pull by parameter size
ollama pull llama3.1:8b # 8 billion parameters
ollama pull llama3.1:70b # 70 billion parameters (needs 40GB+ VRAM)
# List all available variants
ollama show llama3.2 --modelfile
出力:
TEXT
pulling manifest...
success
5. Ollamaライブラリとモデル選択
(1) 人気モデル選択ガイド
| モデル | パラメータ | サイズ | 強み | ライセンス |
|---|---|---|---|---|
| llama3.2 | 3B / 1B | 2 GB | 一般会話、軽量デプロイ | Llama Community |
| llama3.1 | 8B / 70B | 5 / 40 GB | 汎用、多言語 | Llama Community |
| mistral | 7B | 4.1 GB | 指示追従、コード | Apache 2.0 |
| qwen2.5 | 7B / 72B | 4.7 / 42 GB | 日本語・中国語最適化、コード | Apache 2.0 |
| codellama | 7B / 34B | 3.8 / 19 GB | コード生成と補完 | Llama Community |
| phi-3-mini | 3.8B | 2.3 GB | 推論、軽量 | MIT |
| nomic-embed-text | 274M | 274 MB | テキスト埋め込み(RAG用) | Apache 2.0 |
(2) シナリオ別モデル選択の判断
graph TD
A[What do you need?] --> B{Primary use case?}
B -->|Chat / General| C{Hardware?}
B -->|Code| D[codellama / qwen2.5-coder]
B -->|Chinese| E[qwen2.5]
B -->|Embedding / RAG| F[nomic-embed-text / mxbai-embed-large]
C -->|8GB RAM| G[llama3.2:3b / phi-3-mini]
C -->|16GB+ RAM or 8GB VRAM| H[llama3.1:8b / mistral]
C -->|40GB+ VRAM| I[llama3.1:70b]
(3) ▶ サンプル:シナリオ別モデル選択
BASH
# Alice's SupportBot: multi-language customer service
ollama pull qwen2.5:7b # Best Chinese + multilingual
ollama pull nomic-embed-text # For RAG knowledge base
# Alice's GlobalShop: SQL generation
ollama pull codellama:7b # Code-focused model
# Alice's SaaS: metrics analysis
ollama pull llama3.1:8b # General reasoning
# Check total disk usage
ollama list | awk '{sum+=$3} END {print "Total: " sum/1024/1024/1024 " GB"}'
出力:
TEXT
NAME ID SIZE
llama3.2:latest a80... 2.0 GB
mistral:latest 61... 4.1 GB
6. ディスク容量管理とオフライン移行
ℹ️ 情報: Ollamaはコンテンツアドレス指定ストレージ(CAS)を使用しています。モデルファイルは
~/.ollama/models/blobs/にblobとして保存されます。複数のモデルが同じベースレイヤーblobを共有するため、ollama listの合計サイズが実際のディスク使用量を上回る場合があります。
(1) 保存場所とクリーンアップ戦略
| プラットフォーム | デフォルトパス | 備考 |
|---|---|---|
| macOS | ~/.ollama/models | ユーザーディレクトリに従う |
| Linux | /usr/share/ollama/.ollama/models | systemdサービスユーザー |
| Windows | C:\Users\<user>\.ollama\models |
ユーザーディレクトリ |
(2) オフライン環境のモデル移行手順
| ステップ | 操作 | コマンド |
|---|---|---|
| 1 | オンラインマシンでモデルをプル | ollama pull llama3.2 |
| 2 | モデルファイルの場所を特定 | ls ~/.ollama/models/blobs/ |
| 3 | blobsディレクトリをパッケージ | tar czf ollama-models.tar.gz blobs/ |
| 4 | オフラインマシンに転送 | scp ollama-models.tar.gz user@offline:~ |
| 5 | ターゲットパスに展開 | tar xzf ollama-models.tar.gz -C /usr/share/ollama/.ollama/models/ |
| 6 | 可用性を確認 | ollama list |
(3) ▶ サンプル:ディスク容量管理
BASH
# Check disk usage per model
ollama list
# Remove unused models to free space
ollama rm llama3.1:70b # Free ~40GB
ollama rm mistral:latest # Free ~4GB
# Change model storage path (if disk full)
export OLLAMA_MODELS=/data/ollama/models
ollama serve
# Verify new path
ls $OLLAMA_MODELS/blobs/
出力:
TEXT
NAME ID SIZE
llama3.2:latest a80... 2.0 GB
mistral:latest 61... 4.1 GB
(4) ▶ サンプル:GGUFファイルからカスタムモデルをインポート
BASH
# Download a GGUF file from HuggingFace
wget https://huggingface.co/.../model-q4_K_M.gguf
# Create a Modelfile pointing to the GGUF
cat > Modelfile <<EOF
FROM ./model-q4_K_M.gguf
EOF
# Build and register with Ollama
ollama create my-custom-model -f Modelfile
# Run it like any other model
ollama run my-custom-model "Hello"
出力:
TEXT
I'm a helpful AI assistant running locally on your machine...
7. 総合例:Aliceのモデル管理スクリプト
BASH
#!/bin/bash
# ============================================
# Comprehensive: Model management dashboard
# Pull, inspect, clean, and report models
# ============================================
MODEL_STORE="$HOME/.ollama/models"
# Function: Show model inventory report
show_inventory() {
echo "=== Ollama Model Inventory ==="
echo ""
ollama list | while read -r name id size modified; do
if [ "$name" != "NAME" ]; then
echo "Model: $name"
echo " ID: $id"
echo " Size: $size"
echo " Modified: $modified"
echo ""
fi
done
echo "Total disk: $(du -sh $MODEL_STORE 2>/dev/null | cut -f1)"
}
# Function: Pull models for SupportBot stack
pull_support_stack() {
echo "=== Pulling SupportBot Model Stack ==="
local models=(
"qwen2.5:7b" # Main chat model
"nomic-embed-text" # Embedding for RAG
"llama3.2:3b" # Fast classifier
)
for model in "${models[@]}"; do
echo "Pulling $model..."
ollama pull "$model"
done
echo "=== Stack Ready ==="
}
# Function: Clean old/unused models
clean_unused() {
echo "=== Models Available for Cleanup ==="
ollama list
echo ""
read -p "Enter model name to remove (or 'cancel'): " model
if [ "$model" != "cancel" ] && [ -n "$model" ]; then
ollama rm "$model"
echo "Removed: $model"
fi
}
# Main menu
echo "1. Show inventory"
echo "2. Pull SupportBot stack"
echo "3. Clean unused models"
read -p "Choose: " choice
case $choice in
1) show_inventory ;;
2) pull_support_stack ;;
3) clean_unused ;;
esac
❓ よくある質問
Q ollama pullのダウンロードが遅すぎます。どうすればいいですか?
A モデルはollama.comでホストされており、一部の地域では遅い場合があります。
OLLAMA_MODELSをカスタムパスに設定し、ミラーサイトからGGUFファイルをダウンロードして手動インポートできます。詳細はレッスン8のModelfileを参照してください。Q モデルを削除してもディスク容量が解放されませんでした?
A Ollamaはコンテンツアドレス指定ストレージ(CAS)を使用しており、blobファイルが他のモデルと共有されている場合があります。
ollama rmは参照のみを削除します。サービスを再起動してクリーンアップをトリガーするか、blobsディレクトリ内の未参照ファイルを手動で削除してください。Q モデルの最大コンテキスト長を確認するには?
A
ollama show <model>を実行し、context lengthフィールドを確認してください。llama3.2は131Kトークン、mistralは32Kトークンをサポートしています。Q 複数のモデルを同時に実行できますか?
A はい、ただしVRAMの制限を受けます。
OLLAMA_MAX_LOADED_MODELS=2を設定すると2つのモデルを同時読み込みできます。小規模モデル(3B)+埋め込みモデルは8GB VRAMを共有できます。Q latestタグは自動更新されますか?
A いいえ。
ollama pullは手動実行時にのみ最新版を取得します。ダウンロード済みモデルは自動更新されません。Q オフライン環境でモデルを入手するには?
A オンラインマシンでモデルをプルし、
~/.ollama/models/blobs/ディレクトリをパッケージしてオフラインマシンに転送し、同じパスに展開してください。HuggingFaceからGGUFファイルをダウンロードし、Modelfileでインポートすることもできます。📖 まとめ
ollama list/pull/rm/showは4つのコアモデル管理コマンド- タグシステム(
name/パラメータ数/量子化)がモデルバリアントを正確に識別 - Q4_K_M量子化は最もコストパフォーマンスに優れた選択——70%のサイズ削減でほぼロスレス
- シナリオ別選択:日本語・中国語にはqwen2.5、コードにはcodellama、埋め込みにはnomic-embed-text
- モデル保存パスはOLLAMA_MODELS環境変数でカスタマイズ可能
- オフライン移行はblobsディレクトリのパッケージまたはGGUFファイルからのインポートのみ
📝 練習問題
- 基本(難易度 ⭐):異なるパラメータ数(3B/8B/埋め込み)のモデルを3つプルし、
ollama listとollama showで詳細を確認してください。 - 中級(難易度 ⭐⭐):ハードウェア構成に基づいて、SupportBotシナリオに適切なモデル組み合わせ(メインチャット+埋め込み)を選択し、選択理由を説明してください。
- 上級(難易度 ⭐⭐⭐):オフライン移行ワークフローを実装してください——あるマシンでモデルをプルし、パッケージして別のオフラインマシンに転送し、機能を確認してください。