本地部署大模型完全指南②:Ollama一键部署DeepSeek与Qwen
·
本地部署大模型完全指南②:Ollama一键部署DeepSeek与Qwen
看完硬件篇,环境搭好了。现在我们来实战部署国内最火的两款大模型——DeepSeek和通义千问,从下载到API调用全流程。
前言:为什么选DeepSeek和Qwen?
国内开源大模型在2026年已经非常成熟,其中最值得关注的两个:
| 对比项 | DeepSeek R1 | Qwen 2.5 (通义千问) |
|---|---|---|
| 开发者 | 深度求索 | 阿里巴巴 |
| 参数量 | 671B(蒸馏版7B~70B) | 0.5B~72B |
| 中文能力 | 极强 | 极强 |
| 推理能力 | 顶级 | 优秀 |
| 代码能力 | 优秀 | 极强 |
| 上下文 | 128K tokens | 128K tokens |
| 开源协议 | MIT | Apache 2.0 |
| 生态集成 | 广泛 | 极其广泛 |
选择建议:
- 编程和数学推理 → DeepSeek(思维链能力强)
- 综合任务与函数调用 → Qwen(工具调用生态好)
- 多模型互补 → 两个都装,根据任务切换
一、Ollama核心操作实战
1.1 模型管理全命令
# 列出所有已下载的模型
ollama list
# 搜索Ollama Hub上的模型
ollama search deepseek
# 拉取模型(下载)
ollama pull deepseek-r1:7b
# 运行模型(如果没有会自动下载)
ollama run deepseek-r1:7b
# 停止运行中的模型
ollama stop deepseek-r1:7b
# 复制模型(创建副本)
ollama cp deepseek-r1:7b my-deepseek
# 删除模型
ollama rm deepseek-r1:7b
# 查看模型详细信息
ollama show deepseek-r1:7b
1.2 模型文件在哪?
# 默认存储位置
# Windows: C:\Users\用户名\.ollama\models
# Linux: ~/.ollama/models
# macOS: ~/.ollama/models
# 修改存储位置(见第①篇)
# 设置环境变量:OLLAMA_MODELS
1.3 模型选择策略
不同硬件配置下的推荐模型组合:
| 硬件配置 | 推荐模型 | 备注 |
|---|---|---|
| 4GB显存 | deepseek-r1:1.5b / qwen2.5:1.5b | 小模型,日常问答够用 |
| 8GB显存 | deepseek-r1:7b / qwen2.5:7b | 最佳入门配置 |
| 12GB显存 | deepseek-r1:14b / qwen2.5:14b | 能力明显提升 |
| 24GB显存 | deepseek-r1:32b / qwen2.5:32b | 接近GPT-4水平 |
| 多卡/服务器 | deepseek-r1:70b+ / qwen2.5:72b | 企业级 |
二、DeepSeek系列部署实战
2.1 一次性搞定:下载+运行
DeepSeek R1提供了多个蒸馏版本,从轻量到全量覆盖:
# 最推荐的入门版本(7B)
ollama run deepseek-r1:7b
# 如果你想看模型思考过程
ollama run deepseek-r1:7b:qwen_distill
# 升级到14B(需要12GB显存以上)
ollama pull deepseek-r1:14b
ollama run deepseek-r1:14b
2.2 测试DeepSeek的推理能力
DeepSeek的最大特色是思维链推理。运行后输入:
请计算:一个水池,甲管单独注满需要4小时,乙管单独注满需要6小时,
如果甲乙两管同时开,需要多久才能注满水池?
你会看到DeepSeek先展示思考过程(用中文或英文),再给出答案:
<think>
我需要计算两管同时开的工作效率。
甲管1小时注水:1/4
乙管1小时注水:1/6
两管同时开1小时注水:1/4 + 1/6 = 3/12 + 2/12 = 5/12
所以需要 1 ÷ (5/12) = 12/5 = 2.4 小时
</think>
甲乙两管同时开,需要2.4小时(即2小时24分钟)才能注满水池。
2.3 在代码中使用DeepSeek
Python调用:
import requests
import json
def ask_deepseek(prompt: str, model: str = "deepseek-r1:7b") -> str:
"""本地DeepSeek API调用"""
url = "http://localhost:11434/api/generate"
payload = {
"model": model,
"prompt": prompt,
"stream": False,
"options": {
"temperature": 0.7,
"top_p": 0.9
}
}
response = requests.post(url, json=payload)
if response.status_code == 200:
return response.json()["response"]
else:
return f"Error: {response.status_code}"
# 使用示例
result = ask_deepseek("用Python写一个二分查找算法")
print(result)
Node.js调用:
const fetch = require('node-fetch');
async function askDeepSeek(prompt, model = 'deepseek-r1:7b') {
const response = await fetch('http://localhost:11434/api/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model,
prompt,
stream: false,
options: { temperature: 0.7 }
})
});
const data = await response.json();
return data.response;
}
// 使用
askDeepSeek('解释什么是RESTful API').then(console.log);
三、通义千问(Qwen)系列部署实战
3.1 下载运行Qwen
# Qwen 2.5 7B(推荐,综合能力强)
ollama run qwen2.5:7b
# Qwen 2.5 14B(需要12GB+显存)
ollama pull qwen2.5:14b
ollama run qwen2.5:14b
# Qwen 2.5 Coder(代码专用版)
ollama run qwen2.5-coder:7b
# Qwen 2.5 32B(接近GPT-4水平,需要24GB+)
ollama pull qwen2.5:32b
2 测试Qwen的函数调用能力
Qwen 2.5原生支持工具调用/函数调用,这是企业应用的关键能力:
import json
import requests
def qwen_with_tools():
"""测试Qwen的工具调用能力"""
# 定义工具
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取城市天气预报",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
}
}
},
{
"type": "function",
"function": {
"name": "calculate",
"description": "执行数学计算",
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "数学表达式"
}
},
"required": ["expression"]
}
}
}
]
# Ollama Qwen API调用
response = requests.post("http://localhost:11434/api/chat", json={
"model": "qwen2.5:7b",
"messages": [
{"role": "user", "content": "帮我查一下北京的天气,然后计算3.14乘以2.5的结果"}
],
"tools": tools,
"stream": False
})
return response.json()
result = qwen_with_tools()
print(json.dumps(result, indent=2, ensure_ascii=False))
四、双模型并行部署方案
4.1 同时运行两个模型
# 终端1:运行DeepSeek
ollama run deepseek-r1:7b
# 终端2:运行Qwen(新开一个窗口)
ollama run qwen2.5:7b
两个模型会在后台作为独立服务运行,分别监听Ollama的API。
4.2 按任务切换模型
def smart_model_select(task: str) -> str:
"""根据任务类型自动选择最优模型"""
programming_tasks = ["写代码", "debug", "算法", "架构设计"]
reasoning_tasks = ["数学", "逻辑推理", "分析"]
general_tasks = ["写作", "翻译", "问答", "总结"]
if any(kw in task for kw in programming_tasks):
return "qwen2.5-coder:7b"
elif any(kw in task for kw in reasoning_tasks):
return "deepseek-r1:7b"
else:
return "qwen2.5:7b"
# 使用
task = "帮我写一个Python的装饰器"
model = smart_model_select(task)
print(f"选择模型:{model}")
prompt = "帮我写一个Python装饰器,用于计算函数执行时间"
response = requests.post("http://localhost:11434/api/generate", json={
"model": model,
"prompt": prompt,
"stream": False
})
print(response.json()["response"])
4.3 模型性能监控脚本
import subprocess
import json
import time
def monitor_model_performance(model_name: str, test_prompt: str) -> dict:
"""测试模型性能"""
start = time.time()
# 发送请求
response = requests.post("http://localhost:11434/api/generate", json={
"model": model_name,
"prompt": test_prompt,
"stream": False
})
elapsed = time.time() - start
data = response.json()
# 计算指标
total_tokens = data.get("eval_count", 0)
tokens_per_second = total_tokens / elapsed if elapsed > 0 else 0
return {
"model": model_name,
"total_time_s": round(elapsed, 2),
"tokens_generated": total_tokens,
"speed_token_s": round(tokens_per_second, 2),
"response_length": len(data.get("response", ""))
}
# 对比测试
test_prompt = "请用Python写一个快速排序算法,包含详细注释"
results = []
for model in ["deepseek-r1:7b", "qwen2.5:7b", "llama3.1:8b"]:
print(f"测试模型:{model}")
perf = monitor_model_performance(model, test_prompt)
results.append(perf)
print(f" 速度:{perf['speed_token_s']} token/s")
print(f" 耗时:{perf['total_time_s']}s")
print()
# 输出对比表
print(f"{'模型':20} {'速度(tok/s)':15} {'耗时(s)':10}")
print("-" * 45)
for r in results:
print(f"{r['model']:20} {r['speed_token_s']:<15} {r['total_time_s']:<10}")
五、模型管理与切换优化
5.1 设置别名和默认模型
# 创建特定用途的模型副本
ollama cp deepseek-r1:7b my-default
# 用Modelfile设置参数
cat > Modelfile << 'EOF'
FROM deepseek-r1:7b
# 降低随机性,适合代码生成
PARAMETER temperature 0.3
PARAMETER top_p 0.8
PARAMETER num_ctx 8192
# 设置系统角色
SYSTEM You are an expert Python developer assistant. Always provide complete, working code examples.
EOF
ollama create code-assistant -f Modelfile
5.2 批量测试多个模型
#!/bin/bash
# batch_test.sh - 批量测试模型
models=("deepseek-r1:7b" "qwen2.5:7b" "llama3.1:8b")
prompt="用Python写一个二分查找算法"
for model in "${models[@]}"; do
echo "=== Testing: $model ==="
time curl -X POST http://localhost:11434/api/generate \
-d "{\"model\": \"$model\", \"prompt\": \"$prompt\", \"stream\": false}" \
-o /dev/null -w "\nTime: %{time_total}s\n"
echo ""
done
六、常见问题
Q1: 下载太慢怎么办?
# 设置国内镜像源
export OLLAMA_HOST=http://localhost:11434
# 手动下载模型文件(从ModelScope等国内源)
# 然后放到 ~/.ollama/models/blobs/ 目录
Q2: 显存不够跑大模型?
# 强制使用CPU运行
ollama run deepseek-r1:7b --num-gpu 0
Q3: 如何让模型记住对话历史?
# 维护消息列表来实现多轮对话
messages = [
{"role": "system", "content": "你是一个友好的AI助手"},
{"role": "user", "content": "我叫张三"},
{"role": "assistant", "content": "你好张三!很高兴认识你。"},
{"role": "user", "content": "我叫什么名字?"} # 模型会根据历史回答
]
response = requests.post("http://localhost:11434/api/chat", json={
"model": "deepseek-r1:7b",
"messages": messages,
"stream": False
})
总结
现在你的电脑上已经部署好了DeepSeek和通义千问,可以通过命令行或API随时调用。双模型并行让你能针对不同任务选择最合适的工具。
下一篇预告:第③篇《私有知识库搭建(Ollama + Dify)》—— 让你的本地模型能读懂自己的文档,构建真正的私有RAG知识库。
需要完整脚本和配置文件的同学,可以看我主页的付费资源专栏。
有问题欢迎评论区留言,大家一起讨论!
更多推荐
所有评论(0)