AI 学习路线 · 深入
Part 14 · 开源模型与私有化部署
目标:把主流开源模型在本地/服务器跑通,理解服务化工程(显存、量化、并发)。
Section 1 · Ollama 复习(跑通 qwen2.5:1.5b)
Subsection 1 · 确认 Ollama 可用
- cmd 输入
ollama list - 预期看到:你 Part 2 下的 qwen2.5:1.5b 在列表里。没有就:
ollama run qwen2.5:1.5b先下一个。
Subsection 2 · 跑对话
ollama run qwen2.5:1.5b 进对话,问它一句中文,/bye 退出。
- 记住:Ollama 是"个人级"部署,一行命令跑本地模型。
过关:ollama 能跑 qwen = Section 1 完成。
Section 2 · 下载并对比多个开源模型
Subsection 1 · 下载两个模型 cmd 分别执行:
ollama pull llama3.2:1bollama pull qwen2.5:1.5b- 预期看到:下载完成(各 1GB 左右)。
Subsection 2 · 对比中文效果
两个模型各问一遍:中国的首都是哪里?请用中文回答
- 记录:哪个中文更流畅?哪个更快?
- 结论通常:中文场景 Qwen 明显强于同体量 Llama。这就是"选型"的第一课。
过关:能对比出差异 = Section 2 完成。
Section 3 · Ollama 的 OpenAI 兼容 API
Subsection 1 · 用代码调本地模型
新建 ollama_api.py:
from openai import OpenAI# Ollama 提供 OpenAI 兼容接口,base_url 指向本地client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")resp = client.chat.completions.create( model="qwen2.5:1.5b", messages=[{"role": "user", "content": "用一句话介绍你自己"}],)print(resp.choices[0].message.content)- 预期看到:本地模型回答(不需要联网、不需要花钱)。
- 关键价值:代码几乎不用改,就能在"云端 API"和"本地模型"之间切换——这就是本地部署的意义。
过关:代码调本地模型跑通 = Section 3 完成。
Section 4 · 显存计算(能跑多大模型)
Subsection 1 · 记公式
模型显存 ≈ 参数量 × 每参数字节数FP32 = 4字节/参数 FP16/BF16 = 2字节 INT8 = 1字节 INT4 ≈ 0.5字节例:7B 模型 FP16 ≈ 7×10^9 × 2字节 = 14GB 显存;INT4 量化后 ≈ 4GB(再加 KV Cache 和开销,实际再加 20~50%)Subsection 2 · 算自己的机器
- cmd
nvidia-smi看你的显存(或wmic path win32_videocontroller get name看核显/独显)。 - 在备忘录写:
我的显存 = X GB → 能跑 FP16 的 ~X/2/参数(B) 模型,或量化后更大的模型。
过关:会算显存 = Section 4 完成。
Section 5 · 装 vLLM 并部署(服务级)
Subsection 1 · 装 vLLM
cmd:pip install vllm(需要 GPU;没有 GPU 会装失败,跳去 Section 6 做概念笔记,或改用 CPU 版参数 --device cpu)
- 预期看到:Successfully installed vllm…
Subsection 2 · 启动服务 cmd 运行:
vllm serve Qwen/Qwen2.5-1.5B-Instruct --port 8001- 预期看到:服务启动,最后出现
Uvicorn running on http://0.0.0.0:8001。 - 另开一个 cmd 用 OpenAI 客户端调它(base_url 改成
http://localhost:8001/v1)。
Subsection 3 · 概念
vLLM = 高吞吐推理框架,核心是 PagedAttention(显存分页管理)适合:并发大、要求高的生产环境;Ollama 适合个人/小团队过关:vLLM 部署(或 CPU 版)跑通 = Section 5 完成。
Section 6 · 并发压测(vLLM vs Ollama)
Subsection 1 · 写压测脚本
新建 bench.py(先装 pip install httpx):
import asyncio, httpx, timeasync def call_one(client, url): t0 = time.time() r = await client.post(url, json={ "model": "qwen2.5:1.5b", "messages": [{"role": "user", "content": "写一句关于秋天的话"}], "max_tokens": 30, }) return time.time() - t0async def bench(url, n=10): async with httpx.AsyncClient(timeout=60) as c: ts = await asyncio.gather(*[call_one(c, url) for _ in range(n)]) print(f"{url} 平均耗时: {sum(ts)/len(ts):.2f}s 总并发 {n}")# 分别对 Ollama 和 vLLM 测(vLLM 若没起来就先只测 Ollama)asyncio.run(bench("http://localhost:11434/v1/chat/completions", 5))- 预期看到:并发耗时数据。
- 记录数据,写进笔记:并发越高,vLLM 优势越明显。
过关:压测数据拿到 = Section 6 完成。
Section 7 · Dify 接入本地模型
Subsection 1 · Dify 里配 Ollama
- 打开 Dify → 右上角设置 → 模型供应商 → 添加 “Ollama”
- 填 base_url
http://host.docker.internal:11434(Docker 访问宿主机的地址)→ 模型名qwen2.5:1.5b - 在应用里把模型切成刚配的本地模型,跑一次问答
- 预期看到:Dify 用本地模型回答。
- 至此你打通了:本地模型 → Dify 编排 → 前端应用 的私有化全链路。
过关:Dify 用本地模型跑通 = Section 7 完成。
Section 8 · 开源模型盘点(国外)
Subsection 1 · 记清单
Llama 系列 Meta:Llama3.1 8B/70B/405B,生态最全Falcon 阿联酋TII:早期开源代表Mistral 法国:7B 小而强,Mixtral 是 MoE 混合专家Gemma Google:轻量,适合端侧Qwen 系列 阿里(算国产但国际通用):多语言强- 打开 https://huggingface.co/models 按 Downloads 排序,扫一眼当前主流。
过关:能报出国外主流开源模型 = Section 8 完成。
Section 9 · 开源模型盘点(国产)
Subsection 1 · 记清单
ChatGLM 智谱:GLM-4 系列,中文对话不错Qwen 阿里:0.5B~72B+,开源最全,微调生态最好DeepSeek 深度求索:R1 推理强,开源的 V3/R1 影响巨大Baichuan 百川:通用开源Moss 复旦:早期中文开源InternLM 上海AI实验室:书生,学术向Subsection 2 · 选型决策
写笔记:我接下来的微调/部署实验,优先选 Qwen(教程多、体量全、社区大)。
过关:能说出国产清单 + 自己的选型 = Section 9 完成。
Section 10 · ModelScope 下载模型
Subsection 1 · 从国内源下载
- 打开 https://modelscope.cn 注册
- 安装:
pip install modelscope - 用代码下载一个 Qwen 模型:
from modelscope import snapshot_downloadsnapshot_download("Qwen/Qwen2.5-0.5B-Instruct")- 预期看到:模型下载到
~/.cache/modelscope/...。 - ModelScope = 国内版 HuggingFace,下载不走外网,速度快。
过关:能下载一个模型 = Section 10 完成。
Section 11 · GGUF 与 llama.cpp
Subsection 1 · 概念
GGUF = llama.cpp 的模型格式,专门支持 CPU/边缘设备运行llama.cpp = 纯 C++ 推理框架,能在没 GPU 的机器跑量化模型Subsection 2 · 用 Ollama 体验 GGUF
Ollama 里的模型底层就是 GGUF。ollama pull qwen2.5:0.5b 再 ollama run qwen2.5:0.5b 感受小模型在 CPU 上也能跑。
过关:能说出 GGUF 与 llama.cpp 关系 = Section 11 完成。
Section 12 · Open WebUI(给本地模型加界面)
Subsection 1 · 装 Open WebUI
- 打开 https://github.com/open-webui/open-webui 按文档安装(Docker 方式最省事)。
- 启动后浏览器打开,登录,接入你的 Ollama。
- 预期看到:一个类似 ChatGPT 的界面,但背后是本地模型。
- 这就是"私有化 ChatGPT"——数据不出你的电脑。
过关:Open WebUI 跑通 = Section 12 完成。
Section 13 · 私有化部署综合项目
Subsection 1 · 搭私有化"公司知识库" 组合已有能力:Ollama/Qwen(本地模型)+ Part 7 RAG(检索)+ Open WebUI 或 Dify(界面):
- Ollama 跑 qwen2.5
- 用Part 5 的 rag_tool 改成调用本地模型(把 OpenAI 的 base_url 换成
http://localhost:11434/v1) - 问它 company.md 的问题
- 预期看到:全程不联网、不花钱的私有知识库问答。
- 这就是"数据不出内网"的私有化 AI 方案,企业买单的核心场景。
过关:私有化知识库跑通 = Section 13 完成。
Section 14 · 推理优化:量化选型
Subsection 1 · 记量化选型
FP16 效果好,显存贵INT8 效果损失小,显存减半INT4 显存最省,效果下降(中文可能明显)选型:显存够 → FP16;不够 → INT8;再不够 → INT4 + 小模型- Part 17 会系统学量化,这里先有概念。
过关:能说出量化选型原则 = Section 14 完成。
Section 15 · 生产部署注意(工程经验)
Subsection 1 · 记生产要点
① 模型网关:用 vLLM/Triton 统一暴露 API,业务层不直连② 并发与排队:压测定上限,超出排队,防止 OOM③ 监控:吞吐、延迟、显存、GPU 利用率(Prometheus + Grafana)④ 弹性:多副本水平扩展⑤ 安全:鉴权、限流、输入输出过滤Subsection 2 · 对照你自己的部署
写笔记:我的部署缺哪几项?接下来补什么。
过关:能说出 5 条生产要点 = Section 15 完成。
Section 16 · 综合实战:端到端私有化聊天助手
Subsection 1 · 做项目
把Part 12 全部能力串成一个项目 private_chat:
- Ollama 起本地模型
- FastAPI 封装聊天接口(流式)
- 前端一个简单 HTML 页面(或直接命令行)
- 加 RAG:能回答私有文档
- README 写清架构图和启动步骤
- 预期看到:一个"本地大模型 + 私有知识库 + Web 界面"的完整应用。
过关:端到端项目跑通 = Section 16 完成。
Section 17 · 项目打磨 + 推 GitHub
Subsection 1 · 打磨
- 给 private_chat 写 README(架构图/启动命令/截图占位)
- 处理 .gitignore(排除 .env、模型缓存)
Subsection 2 · 推 GitHub
git initgit add .git commit -m "private chat with local LLM + RAG"git remote add origin <你的仓库地址>git push -u origin main- 预期看到:GitHub 上有你的私有化部署项目。
过关:项目上线 GitHub = Section 17 完成。
Section 18 · 常见坑
Subsection 1 · 记坑
坑1 显存溢出 OOM → 换更小模型/量化/减小 max_tokens坑2 中文乱码 → 确认模型是中文优化版(Qwen 系),输出加 utf-8坑3 vLLM 无 GPU 装不了 → 用 CPU 版参数或只做概念坑4 Docker 里连不上宿主机 Ollama → 用 host.docker.internal坑5 模型"发烧"回答怪 → 降到 INT8 或换原版(非量化)过关:坑笔记写完 = Section 18 完成。
Section 19 · 面试题
Subsection 1 · 练习作答
- 你部署过哪些开源模型?怎么评估和切换?
- Ollama 和 vLLM 的区别?
- 一个 7B 模型 FP16 要多少显存?INT4 呢?
- 私有化部署的关键工程问题?
- 中文场景选什么开源模型,为什么?
- 每题先自己答,再让 DeepSeek 帮忙补充标准答案。
过关:5 题能流畅作答 = Section 19 完成。
Section 20 · 站 12 验收
勾选
- 两个开源模型对比过,知道中文选谁
- 用 OpenAI 兼容代码调本地模型(Section 3)
- 会算显存,知道自己的机器能跑什么
- vLLM 部署 + 压测(Section 5/6)
- Dify 接入本地模型(Section 7)
- 能报出国外 + 国产开源清单
- ModelScope 下载过模型(Section 10)
- 了解 GGUF / llama.cpp(Section 11)
- Open WebUI 或类似界面跑通(Section 12)
- 私有化知识库项目跑通(Section 13/16)
- 能说出 5 条生产部署要点
- 项目推上 GitHub(Section 17)
写 400 字Part 12 总结:你部署了什么、显存多少、私有化和云端各适合什么。
全勾选 = Part 14 通过 → 进入下一站 Part 15 · 模型微调 Fine-Tuning,15 天)。
