Ollama: モデル管理

モデルはローカルAIのコア資産です——適切なモデルを選び、バージョンを管理することは、シェフが食材を選ぶことと同じくらい重要です。

💡 ヒント: ModelfileのFROM命令は継承メカニズムをサポートしています——既存のモデルをベースにカスタムモデルを作成できます。新しいモデルはベースモデルの重みファイルを共有し、システムプロンプト、パラメータ、テンプレート設定のみを追加レイヤーとして重ねるため、追加のディスク容量を消費しません。これにより、複数のロール特化モデル(返金専門、物流エキスパートなど)の作成が実質コストフリーになります。

📋 前提条件: まず以下を修了してください

1. 学べること


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) モデルライフサイクル

100%
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) シナリオ別モデル選択の判断

100%
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でインポートすることもできます。

📖 まとめ


📝 練習問題

  1. 基本(難易度 ⭐):異なるパラメータ数(3B/8B/埋め込み)のモデルを3つプルし、ollama listollama showで詳細を確認してください。
  2. 中級(難易度 ⭐⭐):ハードウェア構成に基づいて、SupportBotシナリオに適切なモデル組み合わせ(メインチャット+埋め込み)を選択し、選択理由を説明してください。
  3. 上級(難易度 ⭐⭐⭐):オフライン移行ワークフローを実装してください——あるマシンでモデルをプルし、パッケージして別のオフラインマシンに転送し、機能を確認してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%