从零部署千问模型(三):使用Ollama快速部署千问模型
前言
在上一篇中,我们使用 vLLM 部署了高性能推理服务,适合生产环境。但如果你只是想在本地快速体验千问模型,或者需要一个轻量级的方案,Ollama 是更好的选择。它就像大模型界的 Docker——一行命令拉取模型,一行命令启动服务,自动管理模型文件和 GPU 资源。
一、Ollama 简介
Ollama 是一个开源的本地大模型运行框架,核心特点:
- 极简安装:一行命令完成安装,无需配置 CUDA、PyTorch 等环境
- 模型管理:类似 Docker 的 pull/run 命令,自动下载和管理模型
- GGUF 量化:内置多种量化方案,自动选择最优配置
- API 服务:内置 REST API,兼容 OpenAI 接口格式
- 多模型支持:Qwen、Llama、Mistral、Phi 等主流模型均支持
- CPU/GPU 自适应:自动检测硬件,有 GPU 用 GPU,没有用 CPU
二、安装 Ollama
2.1 Linux 安装(推荐)
# 官方一键安装脚本
curl -fsSL https://ollama.com/install.sh | sh
国内用户如果下载慢,可以使用镜像加速:
# 设置 Ollama 镜像加速(在安装前执行)
export OLLAMA_MIRROR=https://ollama.mirror.example.com
# 或者手动下载二进制
wget https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64 -O /usr/local/bin/ollama
chmod +x /usr/local/bin/ollama
2.2 验证安装
ollama --version
# Ollama version: 0.5.x
2.3 配置服务参数
Ollama 安装后会自动创建 systemd 服务。可以通过环境变量调整配置:
sudo tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MAX_LOADED_MODELS=4"
Environment="OLLAMA_KEEP_ALIVE=24h"
Environment="OLLAMA_NUM_PARALLEL=4"
EOF
sudo systemctl daemon-reload
sudo systemctl restart ollama
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| OLLAMA_HOST | 监听地址和端口 | 127.0.0.1:11434 |
| OLLAMA_MAX_LOADED_MODELS | 同时加载的模型数 | 1(受显存限制) |
| OLLAMA_KEEP_ALIVE | 模型在内存中保持的时间 | 5m |
| OLLAMA_NUM_PARALLEL | 并行请求数 | 1 |
| OLLAMA_MODELS | 模型存储路径 | ~/.ollama/models |
2.4 修改模型存储路径
默认模型存在 ~/.ollama/models,如果磁盘空间不足,可以修改到其他路径:
# 停止服务
sudo systemctl stop ollama
# 迁移模型目录
sudo mkdir -p /data/ollama/models
sudo rsync -av ~/.ollama/models/ /data/ollama/models/
# 修改配置
sudo tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/data/ollama/models"
EOF
sudo systemctl daemon-reload
sudo systemctl start ollama
三、部署 Qwen 模型
3.1 拉取官方模型
# 查看 Qwen 可用版本
ollama search qwen
# 拉取 Qwen3-8B(默认量化的 GGUF 版本)
ollama pull qwen3:8b
# 其他常用版本
ollama pull qwen3:4b # 小尺寸,适合轻量设备
ollama pull qwen3:14b # 中型,需要较好 GPU
ollama pull qwen3:32b # 大型,需要大显存
ollama pull qwen3-coder:8b # 编程专用
拉取过程会显示下载进度:
pulling manifest...
pulling 8b4f6f3a2e1c... 100% ▕██████████████████▏ 4.9 GB
pulling 8c17c5c0e2a1... 100% ▕██████████████████▏ 17 KB
pulling 5f4e3d2a1c9b... 100% ▕██████████████████▏ 11 KB
verifying sha256 digest
writing manifest
success
3.2 查看已安装模型
ollama list
# NAME ID SIZE MODIFIED
# qwen3:8b abc123def456 4.9 GB 2 minutes ago
# qwen3:4b xyz789uvw012 2.5 GB 1 hour ago
3.3 查看模型详情
ollama show qwen3:8b
# Model
# architecture qwen3
# parameters 8.2B
# context length 32768
# embedding length 4096
# quantization Q4_K_M
#
# Parameters
# num_keep 24
# temperature 0.7
# top_p 0.9
# top_k 40
3.4 命令行对话
ollama run qwen3:8b
进入交互式对话:
>>> 你好,介绍一下你自己
我是通义千问(Qwen),由阿里巴巴开发的大语言模型...
>>> /bye # 退出对话
四、导入自定义模型
如果官方仓库没有你需要的版本,可以导入自己的 GGUF 模型文件:
4.1 创建 Modelfile
# 下载 GGUF 格式模型文件
# 可以从 ModelScope 或 HuggingFace 下载
wget https://www.modelscope.cn/models/Qwen/Qwen3-8B-GGUF/resolve/master/qwen3-8b-q4_k_m.gguf
# 创建 Modelfile
cat > Modelfile << 'EOF'
FROM ./qwen3-8b-q4_k_m.gguf
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER top_k 40
PARAMETER num_ctx 32768
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""
SYSTEM """You are a helpful assistant."""
PARAMETER stop "<|im_end|>"
PARAMETER stop "<|im_start|>"
EOF
4.2 构建并运行
# 构建模型
ollama create qwen3-8b-custom -f Modelfile
# 运行
ollama run qwen3-8b-custom
五、API 接口调用
5.1 生成文本(Generate)
curl -s http://localhost:11434/api/generate -d '{
"model": "qwen3:8b",
"prompt": "用Python写一个二分查找",
"stream": false
}' | python3 -m json.tool
返回格式:
{
"model": "qwen3:8b",
"created_at": "2026-06-23T10:00:00Z",
"response": "def binary_search(arr, target):\n left, right = 0, len(arr) - 1\n while left <= right:\n mid = (left + right) // 2\n if arr[mid] == target:\n return mid\n elif arr[mid] < target:\n left = mid + 1\n else:\n right = mid - 1\n return -1\n...",
"done": true,
"context": [128, 4523, 908, ...],
"total_duration": 3500000000,
"load_duration": 500000000,
"prompt_eval_count": 15,
"prompt_eval_duration": 200000000,
"eval_count": 128,
"eval_duration": 2800000000
}
5.2 对话接口(Chat)
curl -s http://localhost:11434/api/chat -d '{
"model": "qwen3:8b",
"messages": [
{"role": "system", "content": "你是一个运维专家"},
{"role": "user", "content": "Docker容器无法启动怎么排查?"}
],
"stream": false
}' | python3 -m json.tool
5.3 OpenAI 兼容接口
Ollama 也提供 OpenAI 兼容的 API,方便直接替换:
curl -s http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3:8b",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Ollama 不校验 key,随意填
)
response = client.chat.completions.create(
model="qwen3:8b",
messages=[{"role": "user", "content": "解释Kubernetes的Pod概念"}],
temperature=0.7
)
print(response.choices[0].message.content)
5.4 流式输出
import requests
import json
response = requests.post(
"http://localhost:11434/api/chat",
json={
"model": "qwen3:8b",
"messages": [{"role": "user", "content": "写一个Docker Compose部署Nginx的配置"}],
"stream": True
},
stream=True
)
for line in response.iter_lines():
if line:
data = json.loads(line)
if not data.get("done"):
print(data["message"]["content"], end="", flush=True)
print()
六、多模型管理
6.1 同时运行多个模型
# 拉取多个模型
ollama pull qwen3:8b
ollama pull qwen3-coder:8b
# 修改配置允许同时加载
sudo tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MAX_LOADED_MODELS=2"
Environment="OLLAMA_NUM_PARALLEL=2"
EOF
sudo systemctl daemon-reload
sudo systemctl restart ollama
6.2 创建自定义角色模型
可以基于已有模型创建带有特定 system prompt 的定制版本:
cat > Modelfile.devops << 'EOF'
FROM qwen3:8b
SYSTEM """你是一个资深DevOps工程师,擅长:
- Linux系统管理
- Docker/Kubernetes容器编排
- CI/CD流水线设计
- 监控与告警体系
- 云原生架构
回答时请:
1. 先分析问题根因
2. 给出具体解决方案和命令
3. 提供最佳实践建议"""
PARAMETER temperature 0.3
PARAMETER num_ctx 32768
EOF
ollama create qwen-devops -f Modelfile.devops
ollama run qwen-devops
6.3 模型版本管理
# 查看所有模型
ollama list
# 查看运行中的模型
ollama ps
# NAME ID SIZE PROCESSOR UNTIL
# qwen3:8b abc123def456 5.2 GB 100% GPU 24 minutes from now
# 删除模型
ollama rm qwen3:4b
# 复制模型
ollama cp qwen3:8b qwen3:8b-backup
七、vLLM vs Ollama 对比
| 特性 | vLLM | Ollama |
|---|---|---|
| 安装复杂度 | 较高(需CUDA+PyTorch) | 极低(一行命令) |
| 推理性能 | 极高(PagedAttention+连续批处理) | 中等(基于llama.cpp) |
| 并发能力 | 高(支持数百并发) | 低(默认单并发) |
| 模型格式 | Safetensors/AWQ/GPTQ | GGUF |
| OpenAI API | ✅ 原生兼容 | ✅ 兼容 |
| Function Calling | ✅ 支持 | ✅ 支持 |
| CPU 推理 | 不推荐 | ✅ 自适应 |
| 多模型切换 | 需重启服务 | 热切换 |
| 适用场景 | 生产环境、高并发 | 个人开发、轻量部署 |
八、总结
本文使用 Ollama 快速部署了 Qwen 模型,核心收获:
- ✅ 一行命令安装 Ollama,自动管理 GPU 和模型
- ✅ 通过 pull/run 命令快速拉取和运行 Qwen 模型
- ✅ 掌握了 Modelfile 自定义模型配置
- ✅ 学会了 REST API 和 OpenAI 兼容接口的调用
- ✅ 了解了多模型管理和自定义角色创建
- ✅ 对比了 vLLM 和 Ollama 的适用场景
下一篇也是本系列最后一篇,我们将搭建一个美观的 Web 对话界面,让千问模型拥有类似 ChatGPT 的用户体验,并对接 API 实现完整的应用闭环。
参考资料
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







