第 04 课 | 本地模型部署:用 Ollama 在 RTX 3090 上运行 Llama 3 和 Qwen2
从今天开始,你的电脑有了一个「大脑」。不用给 OpenAI 交钱,不用担心 API 限额,数据完全留在本地。这节课我们把本地大模型跑起来。
为什么要在本地跑模型
在开始之前,你可能有个疑问:现在 OpenAI、通义千问的 API 都挺方便的,为什么还要费劲在本地跑模型?
说实话,如果你只是写个小 demo 玩玩,用云端 API 确实够了。但如果你要做一套真正能上线的产品,本地部署有三个绕不开的优势:
第一,零费用。云端 API 按 token 计费,跑一个多 Agent 系统,一天下来几十上百块很正常。本地模型跑在你的显卡上,电费可以忽略不计。对于我们要做的 50 课教程来说,这意味着你不需要花一分钱 API 费用就能学完全部课程。
第二,数据不出本地。如果你要处理的竞品数据、业务数据涉及商业机密,你肯定不想把它们发到云端 API 上。本地模型完全在你的机器上运行,数据从网卡都不走。
第三,无速率限制。云端 API 通常有 QPM(每分钟请求数)限制。当你跑多 Agent 系统的时候,一个任务可能同时发十几个请求,很容易触发限流。本地模型你想怎么调就怎么调。
当然,本地模型也有局限:受显存限制,目前能跑的最大模型大概在 14B 左右(量化后)。但 7B-14B 的模型对于我们的教程场景已经完全够用了。
你的 RTX 3090 有 24GB 显存,这是本地跑大模型的黄金配置。7B 模型全精度加载大概需要 14GB 显存,14B 模型量化后也能塞进去。
安装 Ollama
Ollama 是目前最流行的本地模型运行工具,一行命令就能跑起一个大模型。
打开浏览器,访问 ollama.com,点击 Download,下载 Windows 安装包。
安装过程很简单,一路 Next 就行。安装完成后,Ollama 会自动在后台启动一个服务。
打开 PowerShell,验证一下:
ollama--version如果看到版本号输出(比如ollama version 0.x.x),就说明安装成功了。
Ollama 的架构很简单:一个后台服务(server)负责加载和管理模型,一个命令行客户端(client)负责跟服务交互。你在 PowerShell 里敲的命令,其实都是在跟后台服务通信。
下载第一个模型:Qwen2 7B
我们来下载第一个模型。为什么选 Qwen2 7B?因为它的中文能力在同级别模型里是最强的。我们的教程主要处理中文场景,Qwen2 是最佳选择。
ollama pull qwen2:7b这个模型大概 4.4GB,取决于你的网速,下载可能需要几分钟到十几分钟。
下载完成后,验证一下:
ollama list你应该能看到qwen2:7b在列表里。
用 Ollama 对话:命令行体验
在正式写代码之前,先用命令行体验一下模型的效果。
ollama run qwen2:7b进入对话模式后,试试问几个问题:
>>> 你好,请介绍一下你自己 >>> 用 Python 写一个快速排序算法 >>> 分析一下最近 AI Agent 领域的发展趋势你会发现 Qwen2 7B 的中文回答质量相当不错,逻辑清晰,代码也能写对。
试试调整 temperature 参数,感受不同输出风格的差异:
ollama run qwen2:7b--temperature 0.1# 低 temperature:回答更确定、更保守ollama run qwen2:7b--temperature 0.9# 高 temperature:回答更多样、更有创意对于我们的竞品分析、数据问答场景,建议用 0.3-0.7 的 temperature。太低了回答太死板,太高了容易胡说八道。
输入/bye退出对话模式。
下载 Llama 3 8B:对比测试
再来下载一个 Llama 3 8B,跟 Qwen2 做个对比。
ollama pull llama3:8bLlama 3 8B 大概 4.7GB。下载完成后,用同样的问题测试一下:
ollama run llama3:8b>>> 你好,请介绍一下你自己 >>> 用 Python 写一个快速排序算法 >>> 分析一下最近 AI Agent 领域的发展趋势你会发现一个有趣的现象:Llama 3 在英文任务上表现更好,但中文回答有时候会「夹带」英文,或者中文表达不够自然。这是因为 Llama 3 的训练数据以英文为主。
下面这张表对比了两个模型在几个维度上的表现:
| 对比维度 | Qwen2 7B | Llama 3 8B |
|---|---|---|
| 模型大小 | 4.4 GB | 4.7 GB |
| 中文能力 | 强,表达自然 | 中等,偶尔夹英文 |
| 英文能力 | 好 | 很强 |
| 代码能力 | 好 | 好 |
| 推理速度 | 约 45 tokens/s | 约 40 tokens/s |
| 显存占用 | 约 5.5 GB | 约 6.2 GB |
| 推荐场景 | 中文为主的任务 | 英文为主的任务 |
结论:对于我们的教程场景(中文竞品分析、中文数据问答),Qwen2 7B 是更好的选择。
但两个模型都下载下来没坏处。后面我们会根据任务类型灵活切换模型。
用 Python 调用 Ollama
命令行体验完了,现在用 Python 来调用模型。
Ollama 提供了一个OpenAI 兼容的 API 接口,这意味着你写的代码可以无缝切换 Ollama 和 OpenAI。这个设计非常重要,后面我们会反复用到。
Ollama 的 API 默认运行在http://localhost:11434。
# ollama_chat.py - 用 Python 调用 Ollama# AI Agent 全栈开发 50 讲 - 第 04 课importrequestsimportjsondefchat(model:str,messages:list,temperature:float=0.7)->str:"""调用 Ollama 的 OpenAI 兼容 API Args: model: 模型名称,如 "qwen2:7b" messages: 消息列表,格式为 [{"role": "user", "content": "..."}] temperature: 温度参数,0-1 之间 Returns: 模型的回复文本 """url="http://localhost:11434/v1/chat/completions"payload={"model":model,"messages":messages,"temperature":temperature,"stream":False}response=requests.post(url,json=payload,timeout=120)response.raise_for_status()result=response.json()returnresult["choices"][0]["message"]["content"]defmain():# 测试 Qwen2print("="*50)print("测试 Qwen2 7B")print("="*50)messages=[{"role":"system","content":"你是一个专业的市场分析师,擅长竞品分析和行业洞察。"},{"role":"user","content":"用 3 句话总结一下 AI Agent 的核心价值。"}]reply=chat("qwen2:7b",messages)print(f"\nQwen2 回复:\n{reply}")# 测试 Llama 3print("\n"+"="*50)print("测试 Llama 3 8B")print("="*50)reply=chat("llama3:8b",messages)print(f"\nLlama 3 回复:\n{reply}")if__name__=="__main__":main()运行:
uv run python ollama_chat.py你应该能看到两个模型分别输出了回复。注意看中文表达质量的差异——Qwen2 明显更自然。
这段代码虽然简单,但它奠定了整个教程的基础。后面所有的 Agent 调用、Tool Calling、ReAct 推理,底层都是通过类似的 API 调用完成的。
显存监控与性能测试
跑模型的时候,你得知道显存够不够用、速度够不够快。
打开一个新的 PowerShell 窗口,运行:
nvidia-smi你会看到类似这样的输出:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 560.94 Driver Version: 560.94 CUDA Version: 12.6 | |-------------------------------+----------------------+----------------------+ | GPU Name Display Use | Memory-Usage | GPU-Util | |-------------------------------+----------------------+----------------------+ | 0 NVIDIA GeForce Off | 5500 MiB / 24576 MiB | 85% | | RTX 3090 | | | +-------------------------------+----------------------+----------------------+关键看两个数字:
- Memory-Usage:当前显存占用。跑 Qwen2 7B 大概占 5.5GB,跑 Llama 3 8B 大概占 6.2GB。
- GPU-Util:GPU 利用率。模型在推理的时候会接近 100%。
你的 3090 有 24GB 显存,跑一个 7B 模型还剩 18GB,完全可以再跑一个嵌入模型(后面会用到)。
下面这个脚本可以测试模型的推理速度:
# benchmark.py - 模型性能测试# AI Agent 全栈开发 50 讲 - 第 04 课importrequestsimporttimedefbenchmark(model:str,prompt:str)->dict:"""测试模型推理速度"""url="http://localhost:11434/v1/chat/completions"payload={"model":model,"messages":[{"role":"user","content":prompt}],"temperature":0.7,"stream":False}start=time.time()response=requests.post(url,json=payload,timeout=120)elapsed=time.time()-start result=response.json()content=result["choices"][0]["message"]["content"]tokens=len(content)# 粗略估算 token 数(中文约 1 字 = 1.5 token)return{"model":model,"output_length":len(content),"elapsed_seconds":round(elapsed,2),"tokens_per_second":round(tokens/elapsed,1),}defmain():prompt="用 200 字介绍一下人工智能的发展历程。"print("模型性能测试")print("="*50)print(f"测试 Prompt:{prompt}")print("="*50)formodelin["qwen2:7b","llama3:8b"]:print(f"\n测试模型:{model}")result=benchmark(model,prompt)print(f" 输出长度:{result['output_length']}字符")print(f" 耗时:{result['elapsed_seconds']}秒")print(f" 推理速度:{result['tokens_per_second']}tokens/s")if__name__=="__main__":main()运行:
uv run python benchmark.py在我的 RTX 3090 上,测试结果大概是:
| 模型 | 输出长度 | 耗时 | 推理速度 |
|---|---|---|---|
| Qwen2 7B | ~200 字符 | ~4.5 秒 | ~45 tokens/s |
| Llama 3 8B | ~200 字符 | ~5.0 秒 | ~40 tokens/s |
这个速度对于我们的场景完全够用。一个竞品分析报告可能需要调用模型 10-20 次,总耗时也就 1-2 分钟。
多模型管理
你下载的模型都存在 Ollama 的默认目录里。Windows 上通常是C:\Users\你的用户名\.ollama\models。
常用管理命令:
# 查看已下载的模型ollama list# 删除不需要的模型(释放磁盘空间)ollamarmllama3:8b# 查看模型详情ollama show qwen2:7b如果你的磁盘空间紧张,可以只保留 Qwen2 7B,后面需要其他模型的时候再下载。
常见问题排查
问题 1:模型下载很慢
Ollama 默认从海外服务器下载,国内可能比较慢。你可以设置代理:
$env:HTTPS_PROXY ="http://127.0.0.1:7890"ollama pull qwen2:7b或者直接用国内镜像源(如果有的话)。
问题 2:显存不足
如果你同时跑了太多模型,或者其他程序占用了显存,可能会报 OOM 错误。解决方法:
# 查看显存占用nvidia-smi# 关闭不需要的程序(比如游戏、视频编辑软件)# 或者卸载不用的模型ollamarm不需要的模型问题 3:Ollama 服务没启动
如果 Python 调用报 Connection Refused,可能是 Ollama 服务没启动:
# 手动启动 Ollama 服务ollama serve通常 Ollama 安装后会设置为开机自启动。如果没有,可以在 Windows 服务管理器里把 Ollama 设置为自动启动。
小结与预告
这节课我们完成了三件重要的事:
- 安装了 Ollama,有了本地运行大模型的能力
- 下载了 Qwen2 7B 和 Llama 3 8B,对比了它们的中文能力
- 用 Python 调用了模型,封装了一个兼容 OpenAI API 的 chat 函数
现在你的 RTX 3090 上有了一个能用的「大脑」。后续所有的 Agent 推理、分析、生成,都会调用这个本地模型。
下一节课,我们会讲解模型量化技术——怎么用 GGUF 量化让 14B 的模型也能在你的 24GB 显存上流畅运行。更大的模型意味着更强的推理能力。
我们下一课见。
系列教程导航
上一篇:第 03 课 | 环境搭建:Python 3.12 + UV 虚拟环境 + 项目骨架
下一篇:第 05 课 | 模型量化与优化:让 14B 模型也能流畅运行
本系列共 50 课,持续更新中。关注我不迷路。