把 LLM 评测写进 pytest:DeepEval 让每次改提示词都有据可查

做过提示词工程的人都懂这种痛:上周还好好的回复,今天改了一段系统提示,某个边角场景突然开始胡来,而你根本不知道。解法不是更小心,而是把评测变成自动化测试。本文用 DeepEval 把 LLM 评测写进 pytest,接进 CI。 一条 DeepEval 用例长什么样? DeepEval 把评测指标封装成断言:用一个样例,包含输入与期望输出,配上一个或多个指标,例如答案相关性、事实一致性、严格匹配。写起来和普通 pytest 几乎一样:定义样例列表,循环调用被测智能体,断言指标不低于阈值。逻辑上就是:对黄金集里的每条用例,跑一遍被测流程,再断言相关分数高于你设的红线。 黄金集该怎么一步步攒起来? 别一开始就建几百条。先从线上真实工单里挑三五十条「最容易出错」的典型问题,人工标注期望行为。每次线上翻车,就把这个案例补进黄金集——它就会变成一条永远不许再犯的回归用例。黄金集是长出来的,不是设计出来的。 把评测接进 CI 有多大成本? 评测要调模型,比普通单测慢且花钱。做法是:提交请求级别只跑子集做冒烟,合并到主干才跑全量。再给评测成本设个上限,避免半夜 CI 跑飞烧掉一大笔 API 费。 大模型评测分数该怎么正确看待? DeepEval 这类「用大模型评大模型」的指标不是绝对真理,它更像一个报警器:分数掉了说明有变化,值不值得修要人判断。别把它当成精确的质量分,要把它当成「改动有没有让事情变坏」的护栏。 指标一开始该选几个才合适? 一开始别把七八个指标全挂上,每加一个指标,评测成本和噪音都涨。先选两个最贴你业务的:答案相关性和事实一致性。跑稳了,再按需加。指标是手段不是目的,你要的是「改动没让事情变坏」这一条报警线,不是一张看着漂亮却没人看的仪表盘。 为什么提示词也需要回归测试? 提示词和智能体代码和软件一样需要回归测试。把几十条黄金用例用 DeepEval 写进 pytest,你就拥有了一张安全网——下次再改提示词,心里有底,而不是靠玄学。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:DeepEval回归

2026-10-09 · 1 min · 36 words · AI 实战派

HuggingFace TGI 上线新模型怎么做金丝雀:滚动更新不中断服务

大模型服务上线最尴尬的时刻,是你满心欢喜部署了新模型版本,一次重启把在线请求全部打断,半小时后发现效果还不如旧版。用 HuggingFace TGI 做生产时,正确姿势不是停旧起新,而是金丝雀:先放一小部分流量到新模型,观察无误再全量。 金丝雀发布的架构怎么搭? 起两个 TGI 实例:旧版本占主端口,新版本占另一个端口。前面放一层极薄的路由,例如 Nginx、Caddy 或任何支持按比例分流的网关,按权重把小部分流量导到新实例。关键是两个实例用不同的模型缓存目录,避免抢同一份权重文件。 放量时该盯哪几个指标? 金丝雀不是只看延迟。至少盯三个:首 token 延迟、输出合格率(用一个小黄金集跑自动判定)、以及错误率。新模型可能更快但开始胡言乱语——只看延迟会翻车。建议每隔一段时间自动跑一批固定问题,对比新旧两版的回答质量。 发现问题怎么快速回滚? 回滚要快。网关把权重拨回全部走旧实例只需改一行配置;新实例保留但不删,方便对比。切忌金丝雀发现问题后原地调试——把流量切走,在隔离实例上慢慢改。 TGI 有什么特有的坑? TGI 加载大模型到显存需要时间,金丝雀切流前要确认新实例已经预热——空缓存的第一次请求会慢得离谱,让你误以为新模型崩了。等它跑完几批预热请求再放量。 流量比例该怎么逐级放? 别从极小比例直接跳到全量。按五、二十、五十、一百这个梯度逐步放,每一档至少观察一个完整业务高峰再进下一档。很多问题只在高峰并发下才暴露——平峰看着一切正常,一到白天流量上来就崩。观察期内务必保留一键回滚的能力,真出问题时这比任何事后排查都值钱。 模型上线怎么才能不再赌一把? 模型迭代越来越快,「每次上线都赌一把全量重启」的模式迟早出事。用 TGI 双实例加一层按比例路由,把金丝雀做成日常,上线风险就从一次赌博变成可控的小步实验。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:TGI金丝雀发布

2026-10-09 · 1 min · 28 words · AI 实战派

ExLlamaV2 配 TabbyAPI 多卡跑长上下文:比你想的省显存

提到本地跑大模型,多数人直接上通用框架或图形化工具。但在「多卡、长上下文、量化模型、要 OpenAI 兼容接口」这个组合下,ExLlamaV2 配 TabbyAPI 往往更省显存、启动更快。本文记录一套可用的多卡配置。 多卡启动要调哪些关键参数? 用 TabbyAPI 起服务,核心是指定模型路径、量化档位、GPU 切分方式。多卡时指定模型,并把不同层映射到不同卡。长上下文场景重点调三个:最大序列长度按业务设,位置编码缩放配合长上下文,缓存类型选分页或低比特量化以省 KV 显存。 它凭什么比别的框架更省显存? ExLlamaV2 的长上下文实现对 KV cache 做了量化与分页,同样的长上下文,它吃的显存常比裸跑高精度 KV 小一截。代价是吞吐略低于高端数据中心卡上的顶级框架表现——但在消费级多卡上,这点差距远不如「能装下」重要。 它和高吞吐框架怎么分工? 经验是:对外高并发在线服务用高吞吐框架;本地开发、长文档分析、个人多卡工作站用 ExLlamaV2 加 TabbyAPI,显存优先。两套都提供 OpenAI 兼容接口,上层代码不用改,切换只换一个 base URL。 自动兜底有什么隐患? TabbyAPI 的量化格式支持有边界,不是所有 GGUF 都能直接跑,遇到加载报错先查模型文件是否兼容。另外,多卡切分时别让某一张卡承担过多层,用显存监控观察满载分布,必要时手动调整切分比例。 什么场景别勉强用它? 它省显存的另一面是吞吐天花板。如果你要对外同时扛几百路并发,这套本地方案会先顶不住,那是数据中心级框架的主场。它的最佳定位是:一个人或小团队,在一块到几块消费级显卡上,处理一批可以容忍几秒延迟的长文档任务。把它塞进对延迟敏感的高并发产品,等于用错了工具。另外,第一次在新卡上跑通后,记一份参数备忘——哪张卡切几层、最大上下文设多少,下次直接抄,别重新踩一遍坑。 消费级多卡到底该选哪套? 工具没有绝对优劣,只有场景匹配。在消费级多卡上跑长上下文,ExLlamaV2 加 TabbyAPI 是被低估的一套——它不会给你最高的每秒 token 数,但常常是「唯一能把这个模型塞进显存」的那条路。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:ExLlamaV2多卡

2026-10-09 · 1 min · 46 words · AI 实战派

TensorRT-LLM 在 Blackwell 上 build engine:别再照搬常用框架的启动参数

NVIDIA 官方反复强调,GB300 NVL72 那 $0.123/百万 token、约 116 TPS/用户的数字,是用 Dynamo 加 TensorRT-LLM 打出来的,不是开箱即用的通用框架。TensorRT-LLM 的核心动作是「先编译 engine,再加载服务」——这和一条命令拉起的范式完全不同。想在自己的 Blackwell 卡上逼近官方数字,就得过 build engine 这一关。 TensorRT-LLM 为什么要先编译后运行? 第一步,把开源模型转成中间 checkpoint,再 build 成针对你这套 GPU 拓扑优化的 engine。关键编译参数包括:最大批大小、最大序列长度、张量并行度、是否开启分页 KV cache。这些参数一旦定死,engine 就定型了,改任何一个都要重新编译。第二步,用编译好的 engine 起推理服务,这时你会发现启动快得多——因为重活已经在 build 时干完了。 哪三个参数最容易踩错? 最大序列长度设太大会让 engine 体积暴涨、显存预留过多;按业务真实 P99 长度设,不要拍脑袋给一个远超需要的值。张量并行度要和你实际卡数一致,八卡机器别 build 成四路并行。分页 KV cache 的块大小影响显存碎片,默认值通常够用,但长上下文场景值得微调。 编译报错该怎么一步步排查? build 阶段最常见的错是模型与算子不兼容——某些自定义算子在新架构上需要最新版 TensorRT-LLM。遇到算子不支持,先查版本,别急着改模型。另一个坑是 build 很吃磁盘和显存,build 时最好独占机器,别和别的任务抢显存。 编译耗时和版本升级要注意什么? 要有心理准备:编译 engine 在大模型上可能要几十分钟甚至更久,这是一次性成本,但团队会因此倾向于少改配置。建议把常用配置固化成脚本和模板,build 过程放进缓存——同一套参数、同一版本工具链,不必每次重编。另外,工具链小版本升级后,旧 engine 未必能加载,升级前先在测试环境重新编译一遍验证,别在生产上原地升级,否则一次启动失败就是全站事故。 什么场景才值得用 TensorRT-LLM? TensorRT-LLM 的性能上限确实高,但它把灵活性换成了「编译期定型」。对追求极限单 token 成本、流量波形平稳的在线服务,值得投入;对需要频繁换模型、频繁调参的研发环境,通用动态框架仍然更顺手。选哪个,看你是要稳态产能还是要迭代速度。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:TensorRTLLM部署

2026-10-09 · 1 min · 68 words · AI 实战派

MoE 推理的隐形瓶颈:专家加载与 WideEP 为什么要把专家摊到更多卡上

跑 MoE 模型的人都见过一个怪现象:模型总参数巨大,但每个 token 只激活一小部分,GPU 利用率却上不去。NVIDIA 技术博客点破了原因——高交互场景下,MoE 的执行时间被专家权重加载时间卡住,而不是被矩阵乘法本身。这就是 WideEP(Wide Expert Parallel)要解决的问题。 decode 阶段的带宽地狱 生成阶段每一步,路由器只挑出少数几个专家(比如 671B 里激活约 37B)。问题是:被选中的专家权重要从显存里读进来,才能做这一步计算。专家越大、越分散,每一步的权重读取量就越接近「把整个模型读一遍」。 换句话说,MoE 在 decode 阶段退化成了内存带宽问题:算力(FLOPS)严重闲置,时间全花在把专家权重从 HBM 搬到计算单元上。 WideEP 的解法 传统专家并行把所有专家放在一组卡上,每个 decode step 要跨这组卡集体通信。WideEP 反过来:把专家切分到 NVL72 机架内更多节点上并行,缩短单个专家的加载路径,用机架级 NVLink 的高带宽抵消跨卡成本。配合前面提到的 EP64DP3 这类配置,专家被摊得足够开,每步加载时间显著下降。 为什么 2026 年才规模化 这不是算法创新,是基础设施创新。没有 NVL72 这种把几十张卡做成一个统一域的机架、没有 HBM4 的容量、没有 Dynamo 把 prefill/decode 拆开各自配拓扑,WideEP 就是纸上谈兵。MoE 模型(DeepSeek-V4、Qwen3.8 这类)与机架级硬件是同步成熟的。 给实践者的提醒 如果你在自建 MoE 服务,监控面板里别只看 GPU 算力利用率,要看 decode 阶段的显存带宽饱和率。如果带宽先打满、算力空着,说明你需要的不是更多卡,而是更合理的专家切分拓扑。 另一个实务建议是按请求类型分流。计算密集的批量任务与带宽敏感的交互式生成,最好路由到不同拓扑的资源池,而不是挤在同一批卡上互相抢带宽。这与 Dynamo 的分离式思路一脉相承:把负载画像摸清楚,再决定怎么切专家。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:MoE 专家并行

2026-10-08 · 1 min · 65 words · AI 实战派

NVIDIA Dynamo:分离式推理为什么到 2026 才在机架级落地

「prefill 与 decode 应该分开跑」在论文里讨论了好几年,但真正把它做成机架级产品的是 NVIDIA Dynamo:1.0 版今年 4 月发布,6 月迭代到 v1.2.0,成为 GB300 NVL72 上拿到 0.123 美元每百万 token 这个数字的关键软件栈之一。为什么概念不新,落地却等到今年? 混跑为什么不行 一次推理天然分两段:prefill 把整个输入一次性算完,是计算密集;decode 一个 token 一个 token 出,是内存带宽密集。把它们放在同一批 GPU 上混跑,长请求的 prefill 会堵住短请求的 decode 排队,用户感受到的就是「首 token 慢、出字也慢」。 分离式服务的思路是:prefill 一批卡、decode 一批卡,中间靠高速 NVLink 传 KV cache,各用各的最优 batch size。道理简单,难在工程。 2026 年才凑齐的三块拼图 机架内带宽:GB300/Vera Rubin NVL72 的第六代 NVLink,让 KV cache 在 prefill 池与 decode 池之间搬运不成为瓶颈。以前跨机柜 InfiniBand 搬 KV,延迟直接吃掉收益。 路由智能:Dynamo 的分离式路由器要判断请求在远端 prefill 还是本地分块 prefill,v1.2 还专门加了 prefill_load_scale 参数做负载打分。 多模态扩展:9 月文档进一步把 encode 也拆出来,形成 encode-prefill-decode 三段分离,给视觉编码与 LLM 不同资源池。 对部署团队的含义 分离式推理不再是大厂专利。如果你已经在 GB300 这类机架上做生产服务,Dynamo 类方案让你可以按「计算池」与「带宽池」分别扩容,而不是买一个通用大池子盲目堆卡。对自建团队,判断自己是否需要分离式,先看监控里 prefill 与 decode 的排队时间谁长——前者瓶颈在算力,后者在带宽,治理方向完全不同。 ...

2026-10-08 · 1 min · 96 words · AI 实战派

KV Cache 的 2026 生存指南:量化、分层与驱逐怎么组合用

当权重被压到 4bit、prefill 被前缀缓存复用之后,推理显存里最贵的那块往往变成了 KV cache。一个长上下文 Agent 会话,几十路并发挂着,KV cache 能吃掉远超模型权重的显存。2026 年围绕 KV 的优化已经形成一套组合拳,值得按场景对号入座。 第一招:KV 量化,从可选变默认 Qwen3 系列本地部署文档里,KV 缓存已经支持把 K、V 缓存量化到 q8_0 甚至更低,配合 f16/bf16 主权重,显存占用直接腰斩,还因为减少了数据搬运而提速。SGLang 在 Hopper 上的 FP8 后端也默认对 KV 做 FP8 处理。 工程含义:KV 量化的代价远低于权重量化——注意力对 KV 低位宽的容忍度更高,是性价比最高的一刀。 第二招:冷热分层,把不活跃的请出显存 SGLang 的 HiCache 把基数树上冷掉的节点卸到主机内存,命中热前缀时再异步取回;Qwen3.8-Flash-Next 甚至把 N-gram 嵌入整个挪到主机内存,靠异步预取隐藏延迟。长会话里真正被反复访问的往往只有最近若干轮,把冷历史卸到 DRAM 而不是 HBM,等于给昂贵显存扩容。 第三招:前缀命中即驱逐 RadixAttention 体系下,驱逐策略要和复用一起设计:被多个会话共享的公共前缀节点永不驱逐,只有叶子端的私有历史可以被回收。这比 LRU 一刀切聪明——保住了缓存收益,又限制了无限膨胀。 组合决策表 高并发短会话:先上 KV 8bit 量化,命中率靠前缀缓存。 超长上下文(10 万 token 级):量化 + 冷热分层,配合分块 prefill。 多租户 Agent 平台:公共系统提示强制置顶保证复用,私有历史设 TTL 驱逐。 判断 权重压缩的红利在 FP4 那波吃得差不多了,下一年推理成本的下降主要来自 KV cache 的精细化管理。你的显存监控面板里,该把 KV 占用单列出来了。 ...

2026-10-08 · 1 min · 86 words · AI 实战派

从 GPTQ/AWQ 到 NVFP4:2026 年为什么量化重新变成硬件原生

两年前谈量化,聊的是 GPTQ、AWQ、GPTQ-for-LLM 这些在权重训练完之后「再压一遍」的离线技巧。2026 年这条线换了赛道:NVIDIA 在 Blackwell 与 Rubin 上把 FP4 做成硬件原生格式,SGLang 直接支持 FP4/FP8/INT4 量化路径,Unsloth 在 Blackwell 上针对 NVFP4 优化,Qwen3.8-Flash-Next 发布当天社区就放出 RadixArk/NVFP4 量化版。为什么说今天要重新看量化? 后训练量化与硬件原生是两回事 GPTQ/AWQ 时代,4bit 是「软」压缩:权重存成 4bit,计算时还要反量化回高精度,靠近似误差换显存。它的收益主要在显存容量,速度提升有限,且需要逐模型校准。 NVFP4/MXFP4 是「硬」格式:GPU 的张量核心原生支持 4bit 矩阵运算,DeepGEMM 内核直接在 4bit 上做矩阵乘,不需要反量化回传。收益从「省显存」变成「真实吞吐翻倍」——Vera Rubin NVL72 的 3.6 EFLOPS,本身就是按 NVFP4 算的。 生态正在一天内成熟 看三个信号: SGLang 在官方文档里把 FP4/FP8/INT4/AWQ/GPTQ 并列为支持的量化格式,FP4 已不是实验项。 Unsloth 与 NVIDIA 合作博客明确:Blackwell 上单卡可微调到 40B 级模型,且针对 NVFP4 精度优化。 Qwen3.8-Flash-Next 发布当天,RadixArk 就放出 NVFP4 检查点,等于「模型发布即 FP4 可用」。 这意味着量化正在从「部署时的最后一道工序」前移到「模型出厂预设」。未来的权重发布很可能默认附带 FP4 版本。 给实践者的建议 如果你的目标硬件是 Hopper(H100/H200),FP4 没有原生支持,仍以 FP8/INT8 为主;如果已经上 GB300 或未来的 Rubin,直接评估 NVFP4 检查点,并用自己的评测集(而不是厂商跑分)验证精度损失。跨硬件迁移时,量化格式要和算力一起选型,不能事后再压。 ...

2026-10-08 · 1 min · 89 words · AI 实战派

SGLang 的 RadixAttention:Agent 时代为什么前缀缓存是头等大事

在 vLLM 与 llama.cpp 之外,SGLang 是 2026 年生产环境里增长最快的开源推理引擎之一:8 月版本 0.5.17 发布,先后为 Qwen3.8(8 月 12 日)、Qwen3.8-Flash-Next(8 月 26 日)提供 day-0 支持,还把全套特性搬到了 Google TPU 上。它的核心武器是 RadixAttention——用一棵基数树自动跨请求复用 KV cache。这套机制在 Agent 时代突然变得关键,原因值得讲清楚。 一次对话里藏着多少重复 prefill 传统推理引擎把每个请求当成独立任务:用户每多发一轮,系统提示、工具描述、历史对话都要重新算一遍 prefill。一个十轮的 Agent 会话,系统提示可能被完整计算十次。 RadixAttention 的做法是:把每个请求的 token 前缀组织成基数树(radix tree),树上每个节点对应一段连续 token 的 KV cache。两个请求共享同一个前缀,就直接复用同一块 GPU 显存里的 KV,跳过重复计算。多轮对话、RAG 的固定系统提示、Agent 重复挂载的工具清单——这些天然共享前缀的场景,命中之后 prefill 成本直接归零。 2026 年的进化:从全注意力到混合架构 SGLang 今年的两次升级更说明方向。4 月支持 DeepSeek-V4 时提出 ShadowRadix:混合注意力(滑动窗口 + 压缩状态)下,用虚拟全 token 坐标系统一把 KV 与循环状态都索引进基数树。8 月支持 Qwen3.8 时又推出 Unified Radix Cache,同时管理全注意力 KV 与 Mamba/GDN 递归状态。HiCache/HiRadixTree 进一步把冷数据卸到主机内存。 ...

2026-10-08 · 1 min · 87 words · AI 实战派

一条命令把视频转成带时间轴的字幕:yt-dlp 加 faster-whisper 流水线

做内容分析、课程整理、或者把播客变成可检索文档时,第一步总是绕不开「把视频里的话变成文字」。找在线服务又慢又要传文件,其实本地两条开源命令就能搞定:yt-dlp 负责下载,faster-whisper 负责转写。这条流水线完全离线,数据不流出机器。 两步走 第一步,下载音频。yt-dlp -x --audio-format mp3 <视频地址> -o input.mp3——直接抽音频轨,比下完整视频再转码快得多。 第二步,转写。faster-whisper 是 OpenAI Whisper 的加速重实现,pip install faster-whisper 之后,用 faster-whisper input.mp3 --model large-v3 --output_format srt,它会按时间轴吐出 .srt 字幕文件,带每句话的起止时间。 有 GPU 就指定 --device cuda,一段半小时的播客几分钟就能转完。没有 GPU 用 CPU 也能跑,只是慢些,模型选 small 或 medium 平衡速度与准确率。 怎么再往上叠 拿到带时间轴的文字稿,后面能接的就多了:按时间戳切分喂给 RAG 做知识问答、让模型提取摘要和待办、或者把字幕对齐双语翻译。转写只是入口,文字稿才是原料。 判断 视频是最不结构化的信息载体,转写工具的价值就是把它变成可检索、可分析的文本。在大模型都能看视频的 2026 年,这套本地流水线依然有它的位置:便宜、离线、可复现。要批量处理一批内部会议录像,这是最省事的起点。 补两个提升准确率的细节。第一,转写时给提示词传入上下文——比如专业术语、人名,faster-whisper 支持初始提示,能显著减少同音错字。第二,中英文混读的视频,指定语言检测比让它自动猜更稳;自动猜在中英夹杂时容易整段判错语种,输出一堆乱码。拿到字幕后,再用一个大模型做标点与分段后处理,可读性会再上一个台阶。 把视频转成带时间轴的文字稿,它才从「只能看」变成「能检索、能分析」的资产;后续做知识库、做摘要、做多语翻译,都建立在这层干净的转写之上,一步先通,后面才能节节顺。 去论坛讨论 这篇文章里的观点,欢迎到硅基AGI论坛讨论。按标题搜索:视频字幕

2026-10-08 · 1 min · 53 words · AI 实战派
🔗 硅基 AGI 论坛 · silicon-agi.com | 📡 RSS 订阅
鲁ICP备2026018361号
📮 邮件订阅 每周 AI 深度长文与辩论精选,直达收件箱
订阅功能即将由邮件服务商(Brevo 免费版)正式启用 · 您的邮箱仅用于本站内容推送