Ollama: 模型管理

模型是本地 AI 的核心资产——选对模型、管好版本,就像厨师选食材一样关键。

💡 提示:Modelfile的FROM指令支持继承机制——你可以基于已有模型创建自定义模型,新模型共享基础模型的权重文件,仅叠加System Prompt、参数和模板配置,不额外占用磁盘空间。这让多角色模型(如退款专家、物流专家)的创建成本几乎为零。

📋 前置知识:需要先掌握以下内容

1. 你将学到


2. 一个 SaaS 创业者的真实故事

(1) 痛点:选错模型浪费资源

Alice 创办了 GlobalShop 电商平台,最初为 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 --> [*]

▶ 示例 1: 基本管理操作

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 Library拉取的,可以重新 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) 标签命名规则

标签(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-bit ~3 GB 明显下降 极度受限硬件
q3_K_M 3-bit ~3.8 GB 轻度下降 4GB VRAM
q4_K_M 4-bit ~5 GB 接近原版 8GB VRAM (推荐)
q5_K_M 5-bit ~5.7 GB 几乎无损 8GB VRAM
q8_0 8-bit ~8 GB 无损 12GB+ VRAM
f16 16-bit ~16 GB 完整精度 24GB+ VRAM
💡 提示: 不指定量化标签时,Ollama 自动选择最优量化(通常是 Q4_K_M)。显式指定可精确控制。

▶ 示例 2: 拉取不同量化变体

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 Library 与模型选型

(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),模型文件以 blob 形式存储在 ~/.ollama/models/blobs/ 中。多个模型共享相同的基础层 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

▶ 示例 4: 磁盘空间管理

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

▶ 示例 5: 从 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,国内可能较慢。可设置 指定路径后,从镜像站下载 GGUF 文件手动导入。详见 Lesson 8 Modelfile。
Q 删除模型后磁盘空间没释放?
A Ollama 使用内容寻址存储(CAS),blob 文件可能被其他模型共享。 只移除引用,需重启服务触发清理,或手动删除 blobs 目录中无引用文件。
Q 如何查看某个模型支持的最大上下文长度?
A 运行 ,查看 字段。llama3.2 支持 131K tokens,mistral 支持 32K tokens。
Q 多个模型能同时运行吗?
A 可以,但受 VRAM 限制。设置 允许同时加载 2 个模型。小模型(3B)+嵌入模型可共用 8GB VRAM。
Q latest 标签会自动更新吗?
A 不会。 只在手动执行时拉取最新版。已下载的模型不会自动更新。
Q 离线环境如何获取模型?
A 在线机器 后打包 目录,传输到离线机器解压到相同路径即可。也可从 HuggingFace 下载 GGUF 文件用 Modelfile 导入。

📖 小节


📝 作业

  1. 基础题(难度⭐):拉取 3 个不同参数量的模型(3B/8B/嵌入),用 和 查看详情。
  2. 进阶题(难度⭐⭐):根据你的硬件配置,为 SupportBot 场景选择合适的模型组合(主对话 + 嵌入),说明选型理由。
  3. 挑战题(难度⭐⭐⭐):实现离线迁移流程——在一台机器上拉取模型,打包传输到另一台离线机器,验证可用。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏