Ollama: 模型管理
模型是本地 AI 的核心资产——选对模型、管好版本,就像厨师选食材一样关键。
💡 提示:Modelfile的FROM指令支持继承机制——你可以基于已有模型创建自定义模型,新模型共享基础模型的权重文件,仅叠加System Prompt、参数和模板配置,不额外占用磁盘空间。这让多角色模型(如退款专家、物流专家)的创建成本几乎为零。
📋 前置知识:需要先掌握以下内容
- 第3课:CLI基础交互
1. 你将学到
- ollama list / pull / rm / show 命令全解
- 模型标签体系与变体选择
- Ollama Library 浏览与选型指南
- 模型文件存储与磁盘管理
- 离线环境 GGUF 文件迁移
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) 模型生命周期
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) 按场景选型决策
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 导入。
📖 小节
- 是模型管理四大核心命令
- 标签体系(//)精确定位模型变体
- Q4_K_M 量化是性价比最优选择,体积减 70% 质量几乎无损
- 按场景选型:中文用 qwen2.5,代码用 codellama,嵌入用 nomic-embed-text
- 模型存储路径可通过 OLLAMA_MODELS 环境变量自定义
- 离线迁移只需打包 blobs 目录或从 GGUF 文件导入
📝 作业
- 基础题(难度⭐):拉取 3 个不同参数量的模型(3B/8B/嵌入),用 和 查看详情。
- 进阶题(难度⭐⭐):根据你的硬件配置,为 SupportBot 场景选择合适的模型组合(主对话 + 嵌入),说明选型理由。
- 挑战题(难度⭐⭐⭐):实现离线迁移流程——在一台机器上拉取模型,打包传输到另一台离线机器,验证可用。