W1D6 学习手册 1.定位2.Ollama3.跑模型4.量化本质5.量化选型 6.上下文7.本地vsAPI8.测试记录9.vLLM10.边界 达标①达标②自测速记

FDE W1D6 学习手册 · 本地模型体验 [B]

W1 Day6 · B 级(动手体验,面试加分)· 4h · 学完能讲清"量化本质 / 本地模型 vs API 的成本效果权衡"

本日定位:W1 前 5 天在"概念 + 工程 + 评测"打底,D6 是第一次真正把模型跑在自己机器上:用 Ollama 拉 Qwen3 / DeepSeek-R1 蒸馏版,亲手感受量化对显存与效果的影响,并和 API 模型做对比实验。
学完能回答:① 量化的本质是什么、int4/int8/fp16 怎么权衡显存与效果、怎么选型;② 一个具体场景(如特药理赔初审)为什么该用本地模型还是 API 模型;③ 怎么科学地做模型对比测试并留下可复现结果。
使用方法:先按步骤把模型跑起来(没有 GPU 也能用 CPU 量化版体验)→ 重点读「量化本质」「本地 vs API」两章和两条达标线 → 做自测清单 → 配合《FDE-W1D6-评测题.md》。选中不熟的词可标注(左下★重要 / 右下📌待查)。

一、为什么要亲手体验本地模型

做 FDE(前端/全栈开发工程师方向的 AI 能力岗),理解"模型怎么被部署、跑在自己机器上是什么体验"比只会调 API 更有竞争力。本地模型体验的核心价值有三层:

医疗/保险场景相关性:医保/特药理赔数据高度敏感,很多保险公司要求"推理不出内网"。本地模型 = 数据不出域的硬约束,这是本地部署在保险业最大的卖点,也是面试官最爱追问的点。
我体验本地模型不是为了"替代 API",而是为了建立成本、显存、效果、延迟的第一手直觉,并能就具体场景给出"本地 vs API"的选型理由——这是只调 API 的人讲不出来的。

二、Ollama 安装与启动

2.1 是什么

Ollama 是本地运行开源大模型的最简工具:一行命令装好,一行命令拉模型、起服务,自动处理权重下载、量化加载、本地 HTTP 接口(/api/generate)。它是 FDE 体验本地模型的首选,不用自己配 CUDA 环境。

2.2 安装与基本命令

# macOS / Linux 一键安装(详见官网 ollama.com)
# 启动后台服务
ollama serve

# 拉取并运行(首次会自动下载)
ollama run qwen3:8b
ollama run deepseek-r1:8b

# 列出本地已有模型
ollama list

# 查看模型信息(包含量化级别、参数规模、上下文长度)
ollama show qwen3:8b

2.3 资源

Ollama 把"本地跑大模型"的门槛从"配环境两周"降到"半小时"。工程上它适合开发调试、内网推理原型;生产高并发要用 vLLM/SGLang 这类吞吐优化引擎(见 s9)。FDE 面试不要求会部署 vLLM,但要知道它存在且解决什么问题。
① 不要以为 ollama run 跑起来就代表"生产可用"——它默认单并发、吞吐低,只适合体验/原型。② 没有独立显卡也能跑(CPU + 量化),但速度很慢,体验时要记下来"在 CPU 上 8B 模型出 100 字要 X 秒"。③ ollama show 能看量化级别,要用它核实你拉的是 fp16 还是 q4,否则对比实验不可信。

三、拉取并运行 Qwen3 / DeepSeek-R1 蒸馏模型

3.1 选哪个尺寸的蒸馏版

模型适合体验的尺寸显存需求(约,fp16)用途
Qwen34B / 8B8B≈16GB通用对话、中文强、工具调用
DeepSeek-R1 蒸馏7B / 8B7B≈14GB推理链(CoT)、数学/逻辑

3.2 指定量化级别拉取

# 拉 int4 量化版(最省显存,速度最快)
ollama run qwen3:8b-q4_K_M

# 拉 fp16(全精度,最占显存,效果基准)
ollama run qwen3:8b-fp16

# 通过 Modelfile 自定义(改上下文、改系统提示)
ollama create my-qwen -f Modelfile

3.3 用代码调用本地接口

import requests, json

resp = requests.post("http://localhost:11434/api/generate", json={
    "model": "qwen3:8b-q4_K_M",
    "prompt": "判断以下特药理赔是否符合条款:患者患肺癌,申请奥希替尼,已购特效药险。请给结论和理由。",
    "stream": False,
    "options": {"temperature": 0.1, "num_ctx": 4096}
})
data = resp.json()
print(data["response"])
蒸馏模型(Distilled)是什么:DeepSeek-R1 蒸馏版是用大模型(教师)教出来的小模型(学生),把"推理能力"迁移到 7B/8B 上。它不是原版 671B,但比同尺寸普通模型更会"一步步想"。面试可说"蒸馏 = 用大模型监督小模型训练,让小模型获得接近的推理行为"。
我用 Ollama 拉 Qwen3 8B 和 DeepSeek-R1 蒸馏 7B,分别跑 fp16 和 int4 两个版本,用同一组特药理赔问题做对照——这样对比才公平,结论才站得住。

四、量化的本质:int4 / int8 / fp16

4.1 原理

大模型权重默认是 fp16(半精度浮点),每个参数占 16 bit。量化(Quantization)是用更少的比特表示权重,从而缩小体积、降低显存、加快推理:

fp16(16 bit/参数) → 量化 → int8(8 bit) / int4(4 bit) / int2(2 bit) 体积与显存 ≈ 比特数成正比下降;精度损失随比特下降而上升

4.2 显存粗算

推理显存 ≈ 参数量 × 每参数比特数 ÷ 8 + 上下文/KV cache 开销 例:8B 模型 fp16 ≈ 8×10⁹ × 16 ÷ 8 ≈ 16 GB;int4 ≈ 4 GB

注意:实际启动还要加上 KV Cache、框架开销,所以 8B int4 常说"6GB 显存能跑",而非理论 4GB。

4.3 为什么量化会掉效果

量化本质是有损压缩:低位宽装不下原始浮点精度,权重被"近似"。激活值偏大/偏小的层受影响更大;对数值敏感的任务是(如精确计算、长链推理)损失更明显。

量化是"用精度换资源"。工程选型的核心就是找那个效果可接受、显存又能放下的甜蜜点:int8 几乎不掉点却省一半显存,是性价比首选;int4 适合显存紧或要在一张卡上塞多个模型;fp16 只在显存充足且对精度零容忍时用。
量化 = 用更少比特表示模型权重,本质是"有损压缩"。int8 省一半显存几乎不掉点,int4 省 3/4 显存但部分任务有损。选型的本质是"显存 vs 效果"的权衡。
① 量化"省显存"不等于"免费"——它会掉效果,尤其是需要精确数值或长推理链的任务。② 别拿 int4 的结果去和 API 的 fp16/更大模型比"效果",这是不公平对照。③ 不同量化方法(如 GPTQ / AWQ / 训练后量化)质量不同,Ollama 的 q4_K_M 是其中一种,面试不必背算法,但要懂"量化方法之间有质量差异"。

五、量化选型:显存 / 效果权衡决策

5.1 决策表

你的约束推荐量化理由
显存充足(≥32GB)fp16 / int8优先保效果
消费级显卡(8~16GB)int8 / int4能装下 + 速度可接受
只能 CPU 跑int4体积小、靠内存带宽也能动
多模型同卡 / 高并发int4 / int8省显存放更多实例
理赔金额计算、精确抽取尽量 int8 以上数值敏感,怕精度损失

5.2 选型经验

选型三步走:先 int8(性价比王)→ 试 int4(看掉点能否接受)→ fp16 仅作对比基线。关键是用同一评测集量化对比,而不是凭感觉。显存紧就果断 int4,数值敏感任务(金额/抽取)尽量 int8。

六、上下文长度(Context Window)测试

6.1 概念

上下文长度 = 模型单次能"看见"的 token 总数(输入 + 输出)。本地模型默认上下文(如 2048/4096)往往比 API 模型(32K~128K)短得多,长文档会截断。

6.2 测试方法

# 用 Ollama 调大上下文
ollama run qwen3:8b --num_ctx 16384
# 或请求时指定
requests.post(..., json={"options": {"num_ctx": 16384}})
本地模型上下文短是硬伤。工程对策:① 长文档先切片 + 向量检索(RAG)再喂给模型,而不是整篇塞进去;② 关键指令放首尾(规避中间遗忘);③ 用 num_ctx 显式控制,别默认太小丢信息。
① 上下文"长"不等于"用得好"——很多模型在长上下文中间段表现明显变差(lost in the middle),要实测不是看参数表。② 调大 num_ctx 会让 KV Cache 显存暴涨,可能直接 OOM,要边调边看显存。③ 本地小模型(8B)的长上下文能力本就弱于大 API 模型,这是尺寸决定的,不是你调参能补的。

七、本地模型 vs API 模型:延迟 / 成本 / 效果

7.1 三维度对比

维度本地模型(如 Qwen3 8B int4)API 模型(如大模型厂商)
延迟首 token 慢、吞吐低(尤其 CPU);但无网络往返首 token 快、吞吐高;受网络与排队影响
成本一次性硬件 + 电费,边际成本≈0,可无限调用按 token 持续付费,量越大越贵
效果小模型上限低,复杂推理/长上下文弱大模型上限高,复杂任务更稳
数据数据不出域,合规友好数据上云,需隐私评估
可控性可换量化/上下文/自托管由厂商决定版本与策略

7.2 怎么选——场景化

真实工程里 90% 不是"二选一"而是"分层路由":用网关(见 W1D7)把简单、敏感、高频的请求发给本地小模型,把复杂、长上下文、低频的请求发给 API 大模型。这样既控成本又保效果,还满足合规。
本地 vs API 不是非黑即白,核心是三个约束:数据合规(敏感数据必须本地)、成本(量大事小就本地)、效果(复杂任务上 API)。最务实是分层路由——简单/敏感走本地,复杂走 API。

八、测试环境搭建与结果记录(可复现)

8.1 必须记录的字段

字段示例值为什么记
硬件Mac M2 / 16GB;或 RTX 3060 12GB结果强依赖硬件
模型+量化qwen3:8b-q4_K_M保证对照一致
上下文num_ctx=4096影响长文本表现
温度等参数temperature=0.1参数影响输出
题目集50 条特药理赔判定评测要可复现
指标准确率/延迟/显存峰值量化对比依据

8.2 实验结果记录模板

# 实验:Qwen3 8B 不同量化下特药理赔判定
| 版本        | 显存峰值 | 平均延迟 | 准确率 |
| qwen3 8b fp16 | 15.2GB  | 2.1s    | 86%   |
| qwen3 8b int8 | 8.1GB   | 1.4s    | 85%   |
| qwen3 8b q4   | 4.6GB   | 0.9s    | 81%   |
结论:int8 显存省一半、准确率仅降 1pt,性价比最优;
      q4 再省但掉 5pt,仅在显存受限时用。
① 对比实验最忌"换模型又换题目又换参数",这样得不出任何结论。要只变一个变量(如只变量化)。② 延迟要测"首 token 延迟"和"总耗时"两个,本地模型两者差异大。③ 结果要可复现——把命令、题目、版本号全记下来,否则面试被追问"你这数哪来的"就露怯。

九、vLLM 概念了解(推理加速引擎)

9.1 它解决什么问题

Ollama 适合单机体验,但高并发、低延迟、高吞吐的生产场景需要推理引擎。vLLM 是其中代表,核心是让 GPU 利用率和吞吐大幅提升。

9.2 关键概念

9.3 资源

与 Ollama 的关系:Ollama = 个人体验神器;vLLM = 生产级推理服务。FDE 面试只要能说清"vLLM 用 PagedAttention + 连续批处理把吞吐做上去、显存更省"就达标,不必会部署。
vLLM 是生产级推理引擎,靠 PagedAttention(KV Cache 分页,省显存)和连续批处理(token 级拼批,提吞吐)把 GPU 利用率拉满。Ollama 体验、vLLM 上线,两者分层。

十、本地模型在医疗/保险场景的适用边界

10.1 什么适合本地

10.2 什么不适合本地小模型

在保险业,"能不能用本地模型"往往不是技术问题而是合规与责任问题。FDE 要能讲清:本地解决"数据不出域 + 成本可控",但复杂判断要保留"人工复核 + API 大模型"的退路,形成"本地预处理 + 云端精算/复核"的混合链路。
本地模型在保险业的最大价值是"数据不出域 + 成本可控",适合知识库问答、结构化抽取这类高频简单任务;复杂特药推理、最新医保目录判断、高风险拒付仍要走 API 大模型 + 人工复核。

十一、面试达标线①:量化的本质与选型

问题达标回答要点
量化本质是什么?用更少比特表示权重,是有损压缩;int8 省一半显存几乎不掉点,int4 省 3/4 但有损。
显存怎么粗算?参数量 × 比特数 ÷ 8 + KV Cache;8B fp16≈16GB,int4≈4GB(实际加开销)。
怎么选型?先 int8(性价比)→ 试 int4(看掉点)→ fp16 作基线;用同一评测集量化对比。
为什么量化会掉效果?低位宽装不下原始精度,数值敏感/长推理任务损失更明显。
核心一句话:量化 = 有损压缩换资源,选型本质是"显存 vs 效果"的权衡,方法是用同一评测集做 int4/int8/fp16 对照,而不是凭感觉。

十二、面试达标线②:一个场景说清"为什么本地 vs API"

给定场景 → 看三个约束(数据合规 / 成本量级 / 效果要求)→ 给出选型 + 兜底方案

示例(特药理赔初审):

讲场景不要只背"本地省成本"。要落到三个约束:数据合规(敏感不出域)、成本量级(量大边际成本)、效果要求(复杂上 API),最后给"本地预处理 + API 兜底"的混合方案,这才显专业。

十三、Day 6 自测清单

十四、高频面试题速记卡

Q:量化的本质是什么?
用更少比特表示模型权重,本质是有损压缩。int8 省一半显存几乎不掉点,int4 省 3/4 但有损。
Q:8B 模型 fp16 大概占多少显存?
≈ 8×10⁹ × 16 ÷ 8 ≈ 16GB,再加 KV Cache 和框架开销,实际更高。
Q:量化为什么掉效果?
低位宽装不下原始浮点精度,权重被近似;数值敏感/长推理任务损失更明显。
Q:量化怎么选型?
先 int8(性价比)→ 试 int4(看掉点能否接受)→ fp16 仅作对比基线,用同一评测集量化对比。
Q:本地 vs API 怎么选?
看三约束:数据合规(敏感不出域)、成本量级(量大本地)、效果要求(复杂上 API)。最务实是分层路由。
Q:本地模型上下文短怎么办?
长文档先 RAG 切片检索再喂;关键指令放首尾规避中间遗忘;用 num_ctx 显式控制。
Q:什么是 lost in the middle?
长上下文里模型对放在中间的关键信息表现明显变差,需实测而非看参数表。
Q:vLLM 解决什么问题?
生产级高吞吐推理:PagedAttention 省 KV Cache 显存、连续批处理提 GPU 利用率。
Q:保险业为什么爱本地模型?
理赔/医保数据敏感,合规要求数据不出域;且高频简单任务本地边际成本≈0。
Q:蒸馏模型是什么?
用大模型(教师)监督小模型(学生)训练,让小模型获得接近的推理行为,如 DeepSeek-R1 蒸馏 7B。
FDE W1D6 学习手册 · 本地模型体验(面试级)· 配合《FDE-W1D6-评测题.md》自测
📌 待查★ 重要