跳转至内容
  • 0 赞同
    1 帖子
    0 浏览
    A
    开源大模型推理服务选型,最容易陷入两个误区。第一个误区是只问“哪个最快”,却没有说清楚模型大小、显卡数量、上下文长度、并发形态、流式体验、结构化输出、量化方式和运维环境。第二个误区是只看单机压测分数,忽略了上线后的排队、冷启动、显存碎片、长短请求混跑、监控告警、模型兼容和团队维护能力。vLLM、SGLang、TGI、llama.cpp都能跑大模型,但它们适合的主战场不完全一样。 如果只要一句话结论:GPU服务器上的通用高并发推理,优先看vLLM;复杂代理、多轮流程、结构化输出和前缀复用很重,重点看SGLang;已经在Hugging Face生态里、需要稳定容器和成熟接口,TGI仍有参考价值,但要注意它的维护状态;本地电脑、CPU、边缘设备、GGUF量化模型、轻量私有部署,llama.cpp最实用。真正做选型时,不要把这句话当成硬规则,而要按自己的负载画像做验证。 推理服务的“快”不是一个指标。用户打开聊天框后,第一感知是首个token多久出来,也就是首token延迟;连续生成时,用户感知每秒能看到多少字,对应输出token速度;平台经营者关心单位时间能处理多少请求、多少token,对应吞吐;运维关心显存利用率、排队长度、错误率、重启恢复时间;产品关心流式是否平滑、长问题是否不容易超时、工具调用和JSON是否稳定。四个项目的差异,往往体现在这些指标的取舍上。 一、先画清楚自己的负载画像 选型前先回答六个问题。第一,模型多大,是七十亿、三百亿、七百亿,还是混合专家模型。第二,硬件是什么,是单张消费级显卡、单机多卡、集群多卡、CPU、Mac、边缘设备,还是云端托管。第三,请求形态是什么,是短问短答、长文总结、代码生成、客服对话、RAG问答、代理调用、批量离线生成,还是多模态理解。第四,并发规模是什么,是个人使用、十几人团队、几百并发、上千并发,还是平台级调度。第五,输出约束是什么,是普通聊天、强JSON、工具调用、函数调用、正则约束、分类打分,还是多轮程序化控制。第六,运维要求是什么,是能跑就行、可观测、可灰度、可回滚、多租户、安全审计,还是要接入现有网关。 没有负载画像时,任何“最佳推理框架”都只是口号。比如同一台服务器,短请求高并发需要连续批处理和调度效率;长上下文RAG需要KV缓存管理和显存稳定性;代理系统需要前缀缓存和结构化输出;本地隐私助手需要简单部署和量化模型;研究实验需要快速换模型和改采样参数。场景不同,最优选择会变化。 还要区分“服务框架”和“模型格式”。vLLM、SGLang、TGI通常服务Hugging Face Transformers生态里的权重和配置,面向GPU推理;llama.cpp长期围绕GGUF量化格式和C/C++运行时发展,CPU和多种后端都能覆盖。模型从一个生态迁到另一个生态,可能需要转换权重、重新验证tokenizer、对齐chat template、检查停止词、测试函数调用和JSON输出。不要以为只要模型名一样,服务行为就完全一致。 二、评估指标要从用户体验和机器效率两边看 首token延迟决定“有没有反应”。聊天产品里,用户点发送后如果几秒没有任何输出,就会觉得系统卡住。首token延迟由排队、预填充、调度、显存状态和网络共同决定。长提示词、RAG上下文、系统提示、多轮历史都会增加预填充成本。支持前缀缓存、连续批处理和高效KV管理的框架,在长上下文场景里会更有优势。 生成吞吐决定“能不能撑住”。同一模型同一显卡,服务框架的批处理策略、注意力实现、KV缓存分配、张量并行、量化支持都会影响吞吐。吞吐不只看单请求每秒token,还要看多用户混合请求下的总体输出。生产环境里,几十个短请求和几个长请求同时进来,比单条固定长度压测更接近真实情况。 尾延迟决定“最差用户会不会崩”。平均延迟漂亮不代表系统稳定。一个请求如果因为队列饱和、长上下文抢占、显存不足、批次调度不均而拖到几十秒,用户体验仍然很差。选型压测时要看P50、P90、P95、P99,而不是只看平均值。还要分别压测短请求、长请求、混合请求、流式请求和失败重试。 显存效率决定“同样硬件能服务多少人”。大模型推理时,权重占一部分显存,KV缓存占另一部分,而且KV缓存会随着上下文和生成长度增长。PagedAttention、RadixAttention、连续批处理、前缀缓存、量化KV缓存等技术,都是围绕显存和调度效率展开。显存利用率高不等于安全,真正要看高并发下是否会频繁OOM、是否能稳定拒绝超限请求、是否有明确的最大上下文和最大并发边界。 接口兼容决定“能不能低成本接入”。很多应用已经按OpenAI风格的chat completions、embeddings、responses、tool calling或streaming来写。服务框架提供兼容接口,可以减少迁移成本。但兼容不等于完全一致。字段支持、错误格式、流式事件、工具调用格式、JSON schema约束、logprobs、停止原因、usage统计都要实际测试。网关层最好做适配,不要让业务代码直接依赖某个框架的细节。 运维能力决定“能不能长期跑”。健康检查、指标暴露、Prometheus、OpenTelemetry、请求日志、模型加载日志、限流、优雅关闭、滚动升级、容器镜像、Kubernetes部署、权限隔离、私有模型鉴权,这些都不是压测榜单里的亮点,却是生产上线的底座。社区选型不能只看性能图,还要看团队能不能修问题、查问题和升级问题。 三、vLLM:通用GPU高并发服务的默认强选项 vLLM的核心吸引力是把大模型服务里的KV缓存管理和调度做得很强。PagedAttention论文把操作系统分页思想引入注意力KV缓存管理,减少碎片和重复复制,让服务能在相近延迟下承载更高吞吐。对普通工程团队来说,这意味着vLLM不是只适合跑demo,而是天然面向高并发在线服务。 vLLM适合的场景很明确:有NVIDIA或其他支持后端的GPU资源,主要运行开源聊天模型、代码模型、RAG生成模型、Embedding或Reward等服务,希望通过OpenAI兼容接口对上层应用提供统一访问;请求量不是个人玩具级,而是希望稳定支撑团队或产品流量;未来可能要做张量并行、LoRA适配、量化、前缀缓存、投机解码、监控指标和Kubernetes部署。 vLLM的优势之一是生态入口清楚。它提供在线服务、OpenAI兼容服务、离线推理、支持模型列表、量化、LoRA、结构化输出、生产指标等文档。对团队协作来说,文档完整度很重要,因为部署、调参、扩容、排障都需要统一语言。一个框架如果只有零散命令和社区帖子,短期能跑,长期会把维护成本转嫁给团队。 vLLM尤其适合“平台层”角色。比如公司内部要搭一个模型网关,后面挂多个开源模型,对前端、RAG、代理、批处理任务提供统一接口。vLLM的OpenAI兼容服务可以让许多现有SDK直接接入,生产指标可以进入监控系统,部署文档也能对接容器和集群。对于LocalAIHub这类社区或团队基础设施,vLLM常常是GPU推理池的第一候选。 但vLLM不是所有场景的答案。第一,它更偏GPU服务,不是低资源本地端的最省心选择。第二,它支持很多模型,但具体模型、量化格式、多模态能力、工具调用行为仍要按版本验证。第三,高性能参数很多,团队要理解max model len、gpu memory utilization、tensor parallel size、batch相关配置、prefix caching等设置,否则容易出现“能启动但不稳定”。第四,某些复杂代理流程如果大量复用共享前缀、强结构化输出或需要语言模型程序控制,SGLang可能更顺手。 选择vLLM时,建议先做三组压测。第一组是短问答高并发,用来观察吞吐、排队和首token。第二组是长上下文RAG,用真实检索上下文压测预填充、显存和尾延迟。第三组是混合负载,把短请求、长请求、流式请求、失败重试放在一起,看系统是否稳定。只跑单条固定prompt,很难发现生产问题。 四、SGLang:复杂流程、结构化输出和前缀复用强项明显 SGLang最初强调的不只是“把模型跑起来”,而是高效执行结构化语言模型程序。论文里把前端语言和运行时结合起来,用RadixAttention复用KV缓存,用压缩有限状态机加速结构化输出解码。这些方向非常贴近今天的代理系统:多轮调用、工具使用、JSON输出、并行分支、少样本提示、RAG流水线、复杂控制流,都不只是普通聊天补全。 如果你的应用有大量固定系统提示、固定工具说明、固定角色模板、固定知识前缀,前缀缓存就很重要。很多平台的真实请求并不是完全不同的prompt,而是共享一大段系统规则和工具schema,然后用户输入不同。RadixAttention这类面向前缀复用的优化,在这种负载下会体现价值。尤其是代理平台、代码助手、评测平台和复杂工作流服务,SGLang值得认真测。 SGLang也适合重结构化输出场景。普通聊天可以容忍句子自由发挥,但生产系统经常需要稳定JSON、固定字段、工具参数、分类标签、评分结果、可解析动作。结构化输出如果不稳定,上游业务就要写大量修补逻辑。SGLang围绕结构化语言模型程序的设计,使它在这类需求上有明确定位。 多模态和大规模服务也是SGLang的重要方向。官方文档强调它是面向大语言模型和多模态模型的高性能服务框架,支持低延迟、高吞吐、前缀缓存、多GPU并行,以及OpenAI兼容接口。对于想把文本模型、视觉语言模型、复杂推理流程统一到一个服务层的团队,它不是小众玩具,而是可作为生产候选的推理框架。 SGLang的潜在成本在于学习曲线。vLLM更像“强推理服务引擎”,SGLang还带有“语言模型程序运行时”的思路。团队如果只需要普通OpenAI兼容聊天接口,可能一开始觉得SGLang的优势没有完全用上;但如果系统正在走向代理编排、工具调用、结构化输出和复杂多步推理,提前理解SGLang会减少后续改造成本。 选择SGLang时,要重点验证三件事。第一,自己的模型和硬件是否在当前版本下稳定支持。第二,结构化输出和工具调用是否符合业务解析要求。第三,前缀缓存、并行请求和长上下文在真实prompt模板下是否有收益。不要只拿随机prompt压测,因为SGLang的优势常常来自真实业务prompt的共享结构。 五、TGI:Hugging Face生态里的成熟老牌,但要看维护状态 Text Generation Inference曾经是开源模型服务的重要选择,尤其适合Hugging Face模型生态。它提供容器化服务、token streaming、连续批处理、张量并行、量化、Prometheus指标、OpenTelemetry等生产能力。很多团队第一次把开源模型作为HTTP服务上线,就是从TGI开始。 TGI的优点是路径熟悉。模型在Hugging Face Hub上,部署方式、镜像、CLI参数、私有模型鉴权、流式输出、指标文档都比较完整。对于已经有Hugging Face平台经验的团队,TGI的接入心智成本低。它也能作为理解推理服务架构的好样本:launcher、router、model server、batching、streaming、metrics这些概念都很典型。 但现在选择TGI必须注意官方文档里的维护状态。文档已明确说明TGI进入维护模式,后续主要接受小修复、文档改进和轻量维护任务,同时提到下游推理引擎如vLLM、SGLang以及llama.cpp等方向。这个信息对新项目很关键:如果你是从零建设长期演进的推理平台,应该谨慎把TGI作为唯一核心底座。 这并不代表TGI没有价值。已有TGI服务如果运行稳定、模型覆盖够用、团队熟悉、业务没有复杂新需求,可以继续维护并逐步规划迁移。某些标准Hugging Face模型、固定容器环境、简单生成接口,TGI仍能完成任务。它更像一个成熟但增长速度放缓的选项,而不是当前最值得押注的新平台核心。 新项目是否选TGI,关键看约束。如果公司已有大量TGI部署脚本、监控模板、镜像仓库和运维经验,短期用TGI上线一个稳定服务并非错误。相反,如果需求包含快速跟进新模型架构、复杂结构化输出、多模态扩展、大规模高并发优化、社区活跃演进,那么vLLM或SGLang通常更值得优先验证。 TGI迁出时要做兼容测试。虽然上层可能都是HTTP生成接口,但不同框架的采样参数、停止词、流式chunk、错误码、usage统计、模板处理、工具调用、量化模型输出都会有差异。迁移时不要只测服务能不能返回文本,要用真实业务问题对比答案、延迟、成本和失败率。 六、llama.cpp:本地、边缘、CPU和GGUF生态的实用冠军 llama.cpp的定位和前三者不同。它是轻量C/C++推理生态,围绕本地运行、量化模型、CPU/GPU混合、GGUF格式、跨平台和低门槛部署发展。它不一定是数据中心GPU高并发的第一选择,但在个人电脑、Mac、边缘设备、离线环境、小团队私有助手里非常有生命力。 llama.cpp的HTTP server已经不仅是简单demo。官方README列出OpenAI兼容的聊天、响应和嵌入路由,支持量化模型的CPU和GPU推理,支持连续批处理、多用户并行、监控端点、schema约束JSON、函数调用、投机解码、Web UI等能力。这些特性让它能承担轻量服务,而不只是命令行工具。 它最适合的场景,是“资源有限但要掌控”。比如开发者想在本机跑一个私有代码助手,社区节点想在小服务器上提供低成本模型,企业某个内网工具不能把数据发到外部GPU集群,边缘设备需要离线问答,或者教育场景需要每台机器本地运行。GGUF量化模型让显存和内存压力大幅降低,部署也比完整GPU服务栈简单。 llama.cpp的优势还包括可移植性。很多机器没有数据中心GPU,却有CPU、Apple Silicon、消费级显卡或其他后端。llama.cpp生态长期围绕这些环境优化,能让“先跑起来”变得容易。对于社区项目,低门槛很重要,因为不是每个人都有A100、H100或多卡服务器。 它的限制也要说清。第一,高并发平台服务不是它最典型的优势区。第二,极致吞吐和多机调度通常不如vLLM、SGLang这类数据中心服务框架。第三,GGUF模型转换、量化等级选择、上下文长度、GPU offload层数、CPU线程、内存带宽都会显著影响效果。第四,量化会带来质量变化,不能只看模型能跑,还要用业务样本测回答质量。 选择llama.cpp时,建议把目标说清楚:是本地个人助手、局域网小服务、离线演示、低成本社区节点,还是生产平台后端。如果是前几类,llama.cpp往往又快又省事;如果是最后一类,除非负载很轻或硬件特殊,否则应把vLLM和SGLang也纳入评测。 七、四个项目放在一起怎么判断 如果你的核心需求是“单机或多卡GPU上服务多个开源模型,接OpenAI兼容接口,追求高吞吐和成熟部署”,先测vLLM。它在工程社区里的默认心智很强,资料多,部署路径清楚,生产指标和扩展能力比较完整。很多团队从普通聊天、RAG生成、代码补全、embedding服务开始,用vLLM做统一推理层,是务实选择。 如果你的核心需求是“代理流程、结构化输出、长系统提示复用、多轮程序化控制、复杂RAG流水线”,优先测SGLang。它不只是补全服务器,而是把语言模型调用当成可优化的程序执行。当前代理应用越来越多,工具schema和系统提示越来越长,前缀复用、结构化解码和并行控制的重要性会持续上升。 如果你已经重度使用TGI,而且服务稳定,短期没有必要为了追新而盲目迁移。但如果你在做新平台,TGI的维护模式意味着它更适合作为存量服务或过渡方案。新需求增长很快的团队,应把主要验证精力放在vLLM和SGLang上,同时保留TGI经验作为接口和运维参考。 如果你的核心需求是“本地可用、低成本、私有、离线、CPU也能跑、GGUF模型丰富”,llama.cpp就是优先级很高的选择。很多社区应用不需要一开始就追求多卡集群,先让用户在自己的机器或小服务器上稳定跑起来,反而更有价值。 还有一种常见组合:云端GPU用vLLM或SGLang,本地节点用llama.cpp,历史Hugging Face服务保留TGI,上层通过统一模型网关屏蔽差异。这样每个框架做自己擅长的事,不强迫一个工具覆盖所有场景。对于社区基础设施,这种多后端架构比单一框架崇拜更稳。 八、模型兼容比框架口碑更重要 选型时不要只问框架支持哪些“家族”,要验证具体模型。模型架构、tokenizer、chat template、rope scaling、context length、多模态processor、quantization config、特殊token、工具调用模板,都可能影响运行结果。同样叫Qwen、Llama、DeepSeek、Mistral的模型,不同版本和微调分支也可能有不同要求。 上线前要做模型兼容矩阵。每个候选框架至少记录:能否加载、最大上下文、显存占用、首token延迟、输出速度、流式是否稳定、stop tokens是否正确、中文质量是否异常、JSON是否可解析、工具调用是否符合上层协议、长上下文是否退化、并发下是否报错。矩阵比口头经验可靠。 量化模型要单独评测。AWQ、GPTQ、bitsandbytes、FP8、GGUF等路线对速度、显存和质量影响不同。量化不是免费午餐。某些任务几乎不受影响,某些任务会在数学、代码、工具参数、细节抽取上明显变差。社区服务如果要开放给很多用户,最好提供“高质量模型”和“低成本模型”两个档位,而不是把量化模型伪装成完全等价。 多模态模型更要保守。图像、视频、音频输入涉及预处理、processor、输入格式、显存峰值和接口兼容。某个框架支持文本模型,不代表同等成熟地支持你的多模态模型。要用真实图片、长图、截图、表格图、低清图、中文图文混排做测试。多模态失败常常不是服务崩溃,而是输出看似正常但理解错误。 九、硬件决定上限,也决定麻烦 单张消费级显卡适合小团队试用、中小模型服务和低并发应用。此时vLLM、SGLang都可能可用,llama.cpp也能通过量化模型提供更省资源的路线。关键瓶颈通常是显存容量和散热稳定性。不要把消费级显卡压到没有余量,长上下文请求很容易把服务打爆。 单机多卡适合更大的模型和更高吞吐。这里要看框架的张量并行、流水并行、专家并行、通信后端和部署经验。vLLM和SGLang都在多GPU方向持续投入,但具体模型要实测。多卡服务不是把参数设成卡数就结束,跨卡通信、负载均衡、显存碎片、故障恢复都会变复杂。 多机集群适合平台级服务,但工程成本显著上升。此时推理框架只是底层之一,还要有模型网关、队列、调度、监控、灰度发布、容量规划、权限控制、成本归因和自动扩缩容。不要指望单个推理框架替代平台工程。vLLM和SGLang可以是核心引擎,但平台能力需要单独建设。 CPU和边缘设备更适合llama.cpp。CPU推理速度不一定快,但胜在便宜、可控、部署简单、隐私好。很多内部问答、离线摘要、小模型分类、嵌入、低频助手不需要GPU集群。只要把用户预期管理好,CPU本地模型能解决大量“够用就好”的问题。 Mac和个人开发环境也值得单独考虑。开发者常常希望在本机调prompt、测RAG、跑小模型、做离线验证。llama.cpp在这类环境里很顺手。vLLM和SGLang更适合正式服务环境,本地开发也能用,但依赖和硬件要求通常更重。 十、接口层最好统一,不要把业务绑死在单一框架上 无论底层选谁,上层都建议经过模型网关。模型网关负责统一认证、限流、计费、日志、重试、路由、模型别名、灰度、熔断、字段适配和安全策略。业务应用只认“聊天模型”“代码模型”“嵌入模型”“重排模型”,不直接关心后端是vLLM、SGLang、TGI还是llama.cpp。 统一接口有两个好处。第一,迁移成本低。底层框架升级或切换时,上层业务不需要大量改代码。第二,能做多后端调度。高并发请求走vLLM,结构化代理走SGLang,本地私有任务走llama.cpp,历史服务保留TGI,都可以在同一个入口下共存。 但模型网关不能掩盖所有差异。工具调用、JSON schema、logprobs、函数参数、图像输入、embedding维度、rerank接口等能力,不同后端支持程度不同。网关应提供能力声明,让业务知道某个模型支持什么,而不是等请求失败。更好的做法是把模型能力写进注册表:上下文长度、输入类型、输出约束、价格、延迟、适用任务、风险说明。 十一、结构化输出和工具调用要认真测 很多AI应用从聊天演示走向生产后,最先遇到的问题不是模型不会说话,而是模型输出不稳定。JSON少一个逗号、字段名变了、数组多一层、工具参数类型错了,都会让业务流程断掉。推理框架如果支持约束解码、schema约束、工具调用格式或结构化输出优化,会明显降低上层修补成本。 vLLM和SGLang都在结构化输出上有相关能力,SGLang的系统设计尤其强调结构化语言模型程序。TGI也有Guidance相关能力,llama.cpp server也列出schema-constrained JSON和函数调用。实际选型时,不能只看“支持”两个字,要拿业务schema测试。比如订单创建、日程安排、代码审查、财务分类、RAG引用数组、工具调用参数,都要验证能否稳定解析。 结构化输出还要看速度。约束越复杂,解码开销可能越大。一个小JSON对象和一个深层嵌套schema不是一回事。压测时要分别测自由文本、简单JSON、复杂JSON、工具调用、多工具选择和错误输入。不要等上线后才发现结构化输出让吞吐下降明显。 十二、长上下文和RAG场景要单独压测 RAG应用常常把检索证据、系统规则、对话历史、用户问题一起送进模型。输入长,输出可能短。普通聊天压测无法代表这种负载。长上下文场景里,预填充成本、KV缓存显存、前缀复用、上下文截断策略和流式首token都很关键。 vLLM的PagedAttention和KV缓存管理对这类场景有吸引力。SGLang的RadixAttention和前缀复用在共享模板、共享工具说明、共享RAG框架提示里也可能很有价值。TGI支持连续批处理和PagedAttention等优化,但新项目仍要考虑维护状态。llama.cpp能跑长上下文模型,但本地资源和量化质量会成为主要限制。 RAG压测不要用随机长文本。要用真实检索片段,包含中文、表格、代码、标题、引用编号、长制度条款和多轮历史。观察模型是否能稳定引用、是否会因为上下文太长忽略中间证据、是否首token过慢、是否生成到一半断流。推理框架只负责高效运行模型,但框架选择会影响RAG产品的实际体验。 十三、监控和排障能力决定能否放心开放给用户 生产服务必须有健康检查、请求指标、延迟分位数、token统计、队列长度、显存使用、错误类型、模型加载状态和版本信息。vLLM文档里有生产指标、监控看板、Prometheus和Grafana相关内容;TGI文档强调Prometheus指标和OpenTelemetry;llama.cpp server也提供监控端点;SGLang作为生产服务框架同样需要接入监控体系。框架提供基础能力,团队要把它们接入统一观测平台。 日志要能支持问题定位。用户说“刚才回答很慢”,你要知道请求进入哪个后端、排队多久、预填充多久、生成多久、输出多少token、是否命中缓存、是否重试、是否被限流。用户说“回答格式错了”,你要能找到模型、参数、模板、schema和原始输出。没有日志,推理服务就是黑盒。 告警要按影响设置。服务进程挂掉当然要告警,但更常见的问题是尾延迟升高、OOM次数增加、首token变慢、某个模型错误率上升、流式中断、显存接近上限、队列积压。高质量告警不追求多,而追求能让值班者知道该扩容、降级、重启、切流还是回滚。 十四、安全和权限不是上层应用单独负责 推理服务经常处理内部文档、用户输入、代码、合同、图片和日志。即使模型本身不联网,服务层也可能泄露数据。基础安全包括认证、授权、TLS、请求体大小限制、日志脱敏、模型访问控制、租户隔离和密钥管理。不要把推理端口裸露在公网,也不要让任何人都能调用高成本模型。 多模型平台还要防止越权使用。某些模型可能只能内部团队访问,某些量化模型只能用于低风险场景,某些带工具调用的模型不能给未授权用户。模型网关应按用户、应用、租户和场景做权限控制。底层框架提供服务能力,权限边界应由平台层明确执行。 提示注入和越狱也会影响推理服务,尤其是RAG和代理场景。虽然防护不完全属于vLLM、SGLang、TGI、llama.cpp本身,但服务层要支持日志、审计、限流和策略控制。对高风险请求,可以路由到更保守的模型、关闭工具调用、降低最大输出或要求人工确认。 十五、迁移策略:先兼容,再灰度,再替换 从TGI迁到vLLM或SGLang,从vLLM迁到SGLang,或者把部分请求迁到llama.cpp,都不要一次性切干净。先建立统一接口适配层,把请求和响应字段对齐。再选一批低风险流量做影子请求,比较输出、延迟、错误率和成本。确认没有明显退化后,再做灰度切流。 迁移时要保留回滚路径。模型服务失败通常会直接影响用户对话、自动化流程或后台任务。上线前准备旧服务地址、路由开关、模型别名回滚、缓存清理和指标对比。不要把迁移和模型升级、提示词改版、业务逻辑重构放在同一天,否则出了问题无法判断原因。 迁移验收要看真实任务。普通“你好”没有意义。要覆盖中文问答、长上下文、JSON输出、工具调用、RAG引用、代码生成、拒答、超长输入、并发流式、错误参数和限流场景。只有这些都过了,才能说迁移可用。 十六、社区部署里的几种推荐组合 个人开发者组合:llama.cpp跑本地GGUF模型,配一个轻量Web UI或OpenAI兼容客户端;需要GPU云服务时,再接一个vLLM后端。这样本地隐私和云端能力都能兼顾。 小团队组合:单台GPU服务器上用vLLM服务主力聊天模型和embedding模型,另起llama.cpp做低成本本地备用或小模型任务。上层通过统一网关管理模型名、权限和日志。 代理应用组合:SGLang作为复杂代理和结构化输出后端,vLLM承担通用聊天和RAG生成,llama.cpp用于开发者本地调试。这样既能利用SGLang的程序化执行能力,也能保留vLLM的通用服务优势。 存量Hugging Face组合:已有TGI继续稳定跑,新增模型优先在vLLM和SGLang验证。网关层把TGI标为存量后端,逐步迁移高价值模型,不做无意义的大爆炸替换。 社区节点组合:中心节点用vLLM或SGLang提供高性能GPU服务,普通成员机器用llama.cpp贡献低成本边缘能力。模型网关按任务、成本和隐私要求路由。这样能让社区基础设施更开放,也更符合不同硬件水平。 十七、常见错误判断 错误一:看到某个benchmark第一,就认为它适合所有业务。benchmark通常有固定模型、固定硬件和固定请求长度。你的业务如果是长RAG、强JSON、多轮代理或低资源本地,结果可能完全不同。 错误二:只测吞吐,不测输出质量。不同框架、不同模板、不同量化和不同采样参数可能让答案行为变化。推理服务选型不是纯系统问题,也会影响最终模型表现。 错误三:把OpenAI兼容当成完全兼容。兼容接口能降低接入成本,但字段细节、流式格式、工具调用、错误处理和usage统计仍要测。业务代码最好通过网关适配,避免直接依赖底层差异。 错误四:忽略维护状态。开源项目活跃度、文档更新、issue响应、模型支持速度和社区方向都会影响长期成本。TGI进入维护模式这一点,对新项目选型就是重要信号。 错误五:在没有监控的情况下开放服务。推理服务不是静态网站,成本高、状态多、错误形态复杂。没有指标和日志,用户越多,风险越大。 错误六:用一个框架解决所有问题。vLLM、SGLang、TGI、llama.cpp各有主场。统一网关加多后端,往往比单一工具崇拜更适合社区和团队长期演进。 十八、最终建议 如果你现在要为生产级GPU推理服务选一个默认起点,先测vLLM。它的通用性、性能路线、OpenAI兼容、部署文档和生产指标都适合做主力后端。测试通过后,再根据模型和业务逐步调参。 如果你的应用已经明显走向代理、工具调用、复杂JSON、长前缀、多轮控制和结构化语言模型程序,SGLang应该和vLLM并列进入第一轮评测。不要等业务代码写出大量修补逻辑后才意识到结构化执行的重要性。 如果你维护的是Hugging Face旧服务,TGI可以继续服务稳定业务,但新平台不要忽略它的维护模式。把它当成成熟存量和参考架构,比把它当成未来唯一底座更合理。 如果你的目标是本地、离线、低成本、边缘、CPU或GGUF模型,llama.cpp优先级非常高。它让模型服务从“必须有GPU集群”变成“很多机器都能跑”,这对社区生态很重要。 真正成熟的选型不是争论谁赢,而是把不同后端放到统一服务体系里:主力GPU池、代理专用池、本地轻量池、存量兼容池,各自承担合适任务。这样既能跟上开源推理框架的快速变化,也能让最终用户拿到稳定、快速、可控的模型能力。 十九、压测方法:别让测试流量骗了你 推理服务压测最忌讳使用漂亮但无意义的样本。固定一个短prompt、固定输出几十个token、固定并发数,确实能得到整齐表格,却很难代表真实产品。真实请求往往有长短混合、中文英文混合、RAG上下文、工具schema、多轮历史、用户中途断开、失败重试和突发流量。压测样本越接近真实业务,选型结论越可信。 建议准备五类测试集。第一类是短问短答,用来测首token和基础吞吐。第二类是长输入短输出,模拟RAG、文档问答和政策解释。第三类是短输入长输出,模拟写作、代码生成和报告草稿。第四类是结构化输出,模拟JSON、工具调用和分类结果。第五类是混合流量,把前四类按真实比例混在一起,观察尾延迟、排队和错误率。 压测要记录完整指标。至少包含请求成功率、首token延迟、总延迟、输出token每秒、输入token吞吐、输出token吞吐、P50、P90、P95、P99、显存峰值、CPU占用、队列长度、OOM次数、超时次数、流式中断次数和服务重启次数。只看“每秒多少token”会忽略很多用户真正感受到的问题。 还要测冷启动和热启动。模型第一次加载需要多久,服务重启后多久可用,切换模型要不要清理显存,容器滚动升级时是否会中断请求,这些都属于生产体验。某些框架在稳定运行时很快,但模型加载慢、失败恢复慢,也会影响运维选择。 压测结果要按成本解释。同样吞吐下,使用几张卡、什么显卡、量化等级、上下文长度、功耗、云厂商价格,都会影响最终成本。社区或小团队尤其要算“每万输出token成本”和“高峰并发所需机器数”。性能高但硬件贵,不一定比性能略低但部署简单的方案更适合。 二十、配置参数常见坑 最大上下文长度不是越大越好。把模型服务配置成超长上下文,会增加KV缓存压力,降低并发容量,甚至让普通短请求也被资源规划拖累。应根据业务场景设置默认上下文,并为少数长文任务单独开模型或后端。RAG系统更应先压缩证据,而不是无限扩大上下文。 显存利用率参数也不能拉满。很多服务允许设置GPU memory utilization或类似参数。数值过高看似充分利用硬件,但会减少突发余量,遇到长请求、并发波动或碎片变化时容易OOM。生产环境通常要留安全余量,并通过限流和最大输入长度保护服务。 批处理参数要和延迟目标一起调。连续批处理能提高吞吐,但等待合批会影响首token。客服聊天、实时助手和代码补全更看重响应快;离线批量生成和评测任务更看重总体吞吐。不要用同一套参数服务所有任务,最好按产品类型拆分后端池。 采样参数会影响质量和可复现性。temperature、top_p、top_k、repetition penalty、max tokens、stop sequences不是纯前端选择,它们会影响服务负载和错误率。结构化输出场景通常需要更低随机性;创意写作可以更开放;代码和工具调用要保守。模型网关应给不同任务设置默认参数,避免每个业务随意传值。 chat template必须校验。很多开源模型依赖特定对话模板。模板错了,模型可能仍然输出文本,但质量明显下降,工具调用失效,停止符异常。迁移框架或换模型时,必须用同一批问题对比模板前后输出,不要只看服务能否启动。 二十一、容量规划:把高峰当成常态的一部分 容量规划不是等服务满了再加机器。先估算日活、峰值并发、平均输入token、平均输出token、长请求比例、流式保持时长和重试率。再用压测数据反推需要多少GPU、多少副本、多少队列余量。对社区服务来说,还要考虑某些用户批量脚本调用导致的突发压力。 限流策略必须提前设计。按用户、应用、模型、租户和IP设置不同额度,防止单个调用方占满昂贵GPU。高成本模型可以设置更低并发,低成本模型可以开放更多额度。限流文案要面向用户说明当前繁忙和重试建议,不要暴露内部队列、GPU编号或服务栈细节。 降级策略同样重要。高峰时可以把部分非关键请求路由到小模型、量化模型或本地llama.cpp节点;也可以降低最大输出、关闭长上下文、延迟离线任务、暂停批量评测。降级不等于随便变差,而是按任务优先级保护核心体验。 多后端架构下,容量规划还要看路由规则。不要让所有请求默认打到最强模型。简单分类、摘要草稿、轻量问答可以走便宜后端;关键推理、长代码、重要RAG答案再走强模型。这样推理平台才有可持续成本。 二十二、最终用户体验不能被技术细节污染 推理服务选型最终会落到产品体验。用户不关心后端叫vLLM、SGLang、TGI还是llama.cpp,用户关心回复快不快、会不会断、答案是否稳定、格式是否能用、隐私是否可信。界面里不应把内部错误、GPU显存、batch编号、trace id直接抛给普通用户。技术信息应进入日志和运维面板,用户界面只给清楚、可行动的提示。 流式输出要稳定。很多系统模型本身够快,但前端流式处理不平滑,用户看到一大段一大段跳出来,体验仍然差。后端需要稳定发送chunk,网关要避免缓冲,前端要正确处理断线和重试。框架支持streaming只是基础,端到端体验还要单独验证。 错误恢复要自然。模型服务繁忙时,用户应看到“当前请求较多,请稍后重试”这类最终用户能理解的话;如果输入太长,应提示如何缩短或拆分;如果模型暂不可用,应自动切换备选模型或保留草稿。不要把Python异常、HTTP堆栈、内部模型路径显示给用户。 对于社区平台,还要给用户透明选择。可以用“快速模型”“高质量模型”“本地模型”“长文模型”这样的名称,而不是要求用户理解每个推理框架。底层选型越复杂,前台呈现越要简单。把复杂性留在平台层,是推理服务工程的基本责任。 参考资料 vLLM 官方文档: https://docs.vllm.ai/en/latest/ vLLM OpenAI-Compatible Server 文档: https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html vLLM Production Metrics 文档: https://docs.vllm.ai/en/latest/usage/metrics.html Kwon et al., Efficient Memory Management for Large Language Model Serving with PagedAttention: https://arxiv.org/abs/2309.06180 SGLang 官方文档: https://docs.sglang.io/ Zheng et al., SGLang: Efficient Execution of Structured Language Model Programs: https://arxiv.org/abs/2312.07104 Hugging Face Text Generation Inference 文档: https://huggingface.co/docs/text-generation-inference/index Hugging Face TGI API Reference: https://huggingface.co/docs/text-generation-inference/reference/api_reference llama.cpp HTTP Server README: https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md llama.cpp 项目仓库: https://github.com/ggml-org/llama.cpp
  • 0 赞同
    1 帖子
    1 浏览
    A
    Ollama 很容易让人产生一种强烈的直觉:既然一条命令就能在本机跑起大模型,既然它提供 HTTP API,既然还能兼容 OpenAI 风格接口,那是不是可以直接拿来做生产服务?这个问题不能用一句“能”或“不能”回答。Ollama 适合什么生产,取决于你说的生产到底是个人工作流、团队内部工具、企业知识助手、面向客户的在线服务,还是高并发、可审计、可扩缩容、可灰度发布的模型平台。 如果结论先行:Ollama 非常适合个人试用、本地开发、模型评估、离线演示、小团队内网工具和低并发的受控服务。它把本地模型运行体验做得很轻,安装、拉模型、调用、切换都很顺手,对开发者和 AI 应用原型非常友好。但如果你的生产定义包括公网暴露、多租户权限、严格鉴权、水平扩容、请求排队、GPU 调度、版本灰度、审计日志、SLA、成本统计、集中治理和异常恢复,Ollama 本身不是完整生产平台。它可以是生产架构里的一个模型运行节点,却不应该被误当成整套生产服务体系。 这篇文章不做“本地一定好”或“云端一定强”的口号,而是从真实边界出发:Ollama 做了什么,没做什么;个人试用为什么很舒服;团队服务为什么会遇到安全、性能、运维和治理问题;什么时候可以继续用 Ollama;什么时候应该换 vLLM、KServe、Triton、云厂商托管模型或自建网关;如果坚持用 Ollama,前面至少要补哪些层。 一、先定义什么叫生产 很多争论来自“生产”这个词含义不一致。一个人把 Ollama 接到自己的笔记软件里,每天让它总结资料,这当然可以叫个人生产使用。一个研发团队在内网部署一台机器,给十几个同事做代码解释和文档问答,只要接受低并发和人工维护,也可以算团队内部生产工具。一个公司把 AI 能力嵌入面向客户的 SaaS,每分钟几千次请求,有付费用户、权限边界和服务承诺,这就是另一种生产。不同等级对系统的要求完全不同。 可以把生产分为四级。 第一级是个人生产。用户就是运维者,模型跑在本机,失败后自己重启,数据不出设备。关注点是易用、隐私、速度和模型选择。Ollama 在这一级非常合适。 第二级是团队内网生产。服务跑在办公室服务器、工作站或私有云里,供少量内部用户使用。失败可以接受人工处理,访问范围可以通过内网、VPN 或反向代理控制。Ollama 可以胜任一部分场景,但必须补鉴权、访问控制、日志和资源限制。 第三级是业务嵌入生产。模型服务被接入真实业务流程,例如客服辅助、知识库问答、内部审批、代码助手、运营文案生成。这里不仅要能回答,还要能稳定、可追踪、可回滚。Ollama 可以作为底层推理组件,但需要外层网关、队列、监控、评估和降级。 第四级是平台级生产。模型服务对多个业务、多团队、多租户开放,有统一配额、计费、灰度、模型目录、密钥管理、审计、自动扩缩容和 SLA。这个层级通常不应该直接以 Ollama 裸服务为核心,而要使用专门的推理服务框架、Kubernetes 模型服务平台或模型网关。 所以问题不是“Ollama 能不能生产”,而是“你要的生产级别需要哪些能力,Ollama 覆盖了哪些,缺的由谁补”。 二、Ollama 做得最好的部分 Ollama 的优势很清晰:它把本地大模型运行的门槛降得很低。安装后可以用 ollama run 拉起模型,用 ollama pull 下载模型,用 ollama serve 提供服务,用 HTTP API 调用生成、聊天、embedding、模型管理等能力。对开发者来说,它省去了手动下载权重、处理格式、编译推理后端、配置模型模板和写服务包装的大量工作。 Ollama 的模型分发体验也很直接。用户可以从模型库拉取 Llama、Qwen、Gemma、Mistral、DeepSeek 等不同家族的模型,也可以用 Modelfile 定义自定义模型、系统提示、模板、参数和 adapter。对个人和小团队来说,这种体验比从头搭建推理环境简单很多。你可以在一天内比较多个模型对中文、代码、摘要、问答、工具调用提示的表现。 Ollama 的 API 也够直观。官方 API 包括生成、聊天、创建模型、列出本地模型、展示模型信息、复制、删除、拉取、推送、生成 embedding、列出运行中模型等。keep_alive 能控制模型在内存中保留多久,options 可以设置 temperature、top_p、num_ctx 等推理参数,流式输出适合聊天界面。对应用开发来说,这些能力足够完成原型和很多内部工具。 Ollama 还提供 OpenAI 兼容接口。很多应用已经围绕 OpenAI Chat Completions 或相关 SDK 编写,兼容接口可以让开发者更快把云模型替换为本地模型,或者在本地开发时使用相同调用风格。这对测试、离线开发、隐私敏感资料处理都很有价值。 最重要的是,Ollama 适合把“模型实验”变成“可触摸的服务”。以前团队讨论本地模型,常常停留在模型榜单和论文性能;有了 Ollama,非算法团队也能快速跑起来,接入一个页面,上传几份资料,感受响应速度和回答质量。这种低摩擦试验,对产品决策很有价值。 三、Ollama 没有替你解决的生产问题 Ollama 不是完整 AI 平台。它提供模型运行和 API,但没有替你解决所有生产系统问题。很多团队把 Ollama 跑起来后,真正麻烦的不是模型能不能生成文字,而是服务怎么安全开放、怎么限制用户、怎么观测质量、怎么处理并发、怎么升级模型、怎么恢复故障。 第一个问题是鉴权。Ollama 默认更像本地服务,不应该被直接暴露到公网。若把 11434 端口开放给外部,没有前置认证、访问控制和网络边界,就可能让任何能访问端口的人调用模型、消耗资源,甚至触发模型拉取、删除等管理类能力。生产使用必须把 Ollama 放在受控网络后面,通过反向代理、API 网关、VPN、零信任访问或服务网格提供认证和授权。 第二个问题是多租户隔离。一个团队服务可能有不同部门、项目、客户和权限范围。Ollama 本身不理解租户、用户、额度、知识库权限和审计主体。你需要在外层应用中处理谁能调用、能用哪些模型、能访问哪些资料、每天能用多少 token、哪些请求需要记录和复核。没有这层,模型服务会变成共享资源池,出了问题很难追责。 第三个问题是资源调度。大模型推理吃 CPU、内存、显存和磁盘带宽。Ollama 可以让模型常驻或按需加载,但它不是一个完整集群调度器。模型多、用户多、上下文长时,显存不够、模型频繁加载、请求排队、响应抖动都会出现。生产系统需要明确并发上限、队列策略、超时策略、模型预热、资源隔离和降级方案。 第四个问题是扩缩容。单机 Ollama 很适合小规模服务,但面向更多用户时,问题会变成多节点路由、负载均衡、健康检查、模型版本一致性、冷启动、节点故障转移和容量规划。Ollama 本身不是 Kubernetes 原生模型服务平台,也不提供完整自动扩缩容语义。你可以用容器和编排系统包起来,但生产能力来自外层架构,而不是裸 Ollama。 第五个问题是可观测性。生产服务需要知道每个请求用了哪个模型、多少输入输出 token、延迟是多少、是否超时、是否失败、是否命中缓存、是否触发安全策略、用户是否满意。Ollama API 返回一些推理统计信息,但完整运营仍需要网关、日志、指标、追踪、告警和质量评估。没有可观测性,就只能凭用户抱怨定位问题。 第六个问题是模型治理。生产系统不能今天随手换模型,明天随手改模板。模型版本、量化方式、上下文长度、系统提示、参数、评估结果、上线时间、回滚路径,都应该被记录。Ollama 的 Modelfile 有助于描述模型配置,但组织级治理仍要自己做。特别是业务嵌入场景,模型升级必须经过回归测试,而不是看到新模型就替换。 第七个问题是安全补丁和供应链。模型文件、Modelfile、adapter、镜像、依赖、宿主机、反向代理都属于攻击面。团队需要关注 Ollama 版本更新、安全公告、镜像来源、模型来源、文件权限和网络访问。把模型服务放进生产链路后,它就不再是一个“本地玩具”,而是基础设施的一部分。 四、个人试用:Ollama 几乎是最顺手的入口 个人使用 Ollama 的价值非常直接。你可以在 Mac、Windows 或 Linux 上本地运行模型,把它接到聊天工具、编辑器、脚本、知识库或自动化工作流里。资料不需要发到远程 API,网络断开时仍可使用,模型选择也更自由。对学习、写作、代码解释、资料摘要、离线翻译、轻量知识问答来说,这种体验很难被云 API 完全替代。 个人试用还有一个重要意义:建立模型直觉。不同量化版本、不同参数规模、不同上下文长度、不同系统提示,在本机上跑一跑,才能知道哪些任务本地模型能做,哪些明显不行。中文写作、严谨推理、代码修改、长文档总结、多轮对话和工具调用提示,各模型差异很大。Ollama 让这种试验成本变低。 个人试用也要有边界。第一,模型质量不等于隐私安全。资料在本机处理可以降低外发风险,但本机文件权限、聊天应用、插件、日志和备份仍然可能泄露数据。第二,本地模型不一定比云模型更可靠。小模型可能胡编,长上下文能力有限,中文细节可能不稳。第三,本机性能决定体验。没有足够内存或显存时,大模型会很慢,长上下文会更慢。 个人用户最适合的 Ollama 架构很简单:Ollama 只监听本机或可信内网,前端应用通过本地 API 调用,敏感资料不上传第三方,定期更新 Ollama 和模型,重要输出人工复核。不要为了远程访问方便而把端口直接暴露到公网。需要远程访问时,优先使用 VPN、SSH 隧道、Tailscale、NetBird、Cloudflare Access 或带认证的反向代理。 五、团队内网:能用,但必须补外层能力 小团队经常会把 Ollama 部署在一台工作站或服务器上,提供给内部应用调用。这个场景很现实,也很有价值。团队可以统一模型,不必每个人都在本机下载;可以把模型接到内部门户、知识库、工单系统或代码助手;可以在内网处理不适合外发的资料。 但团队内网不等于没有安全要求。内部服务也要有身份认证、访问控制、日志和资源限制。否则任何内网用户都能无限调用模型,占满显存,或者访问不该访问的能力。即使 Ollama 只提供模型生成,外层知识库也可能把敏感片段送进提示词。团队服务必须从第一天就明确:谁可以用,能用哪些模型,能处理哪些资料,日志保存什么,管理员如何停用访问。 团队内网还要处理并发预期。十个人偶尔问问题,和十个人同时上传长文档总结,资源压力完全不同。模型上下文越长,显存和延迟越高。keep_alive 可以减少频繁加载模型的开销,但常驻多个模型会占用更多内存。生产前要做容量测试:不同模型、不同上下文长度、不同并发下,首 token 延迟、总延迟、吞吐和失败率是多少。 一个务实做法是把 Ollama 放在后端服务后面,而不是让客户端直接访问。后端服务负责认证、配额、模型白名单、请求清洗、超时、重试、日志、审计和降级。Ollama 只做模型推理。这样即使将来把底层从 Ollama 换成 vLLM、云 API 或模型网关,应用层也不需要大改。 团队内网还要建立模型目录。不要让所有人随便选择所有模型。可以把模型按用途分组:快速问答、中文写作、代码、embedding、长文档、实验模型。每个模型说明适用场景、上下文长度、速度、质量和限制。这样用户不会把小模型用于严肃报告,也不会把慢模型用于轻量分类。 六、面向客户服务:裸 Ollama 不够 如果服务面向外部客户,要求就上了一个台阶。客户不会因为你用的是本地模型就接受长时间等待、随机失败、答非所问或数据串租户。此时 Ollama 的角色更像推理后端,而不是生产平台。你需要在它前面建设完整服务层。 客户服务首先要有强认证和租户隔离。每个请求都要知道来自哪个用户、哪个租户、哪个应用、哪个权限范围。知识库检索必须按权限过滤,缓存必须按租户和资料版本隔离,日志必须能审计但不能泄露敏感内容。Ollama 不负责这些,你的业务系统必须负责。 其次是稳定性。客户请求需要排队、限流、超时、重试、熔断和降级。如果模型节点不可用,要么切换到备用节点,要么返回清晰错误,要么降级到云模型或小模型。裸调用 Ollama 时,应用很容易在模型加载、长生成或资源耗尽时卡住。生产接口必须设置超时,并给用户可理解的状态。 第三是质量控制。面向客户的 AI 不是能生成文字就行。需要离线评估集、线上抽检、敏感内容过滤、引用校验、失败反馈、模型版本对比和回滚机制。Ollama 可以让你跑不同模型,但不会告诉你哪个模型对你的业务更可靠。这个答案必须通过评估获得。 第四是成本和容量。自建本地模型不等于免费。硬件折旧、电费、运维、闲置资源、模型调优、监控、备份和人力都是成本。若负载不稳定,云 API 可能更便宜;若数据敏感且负载稳定,自建可能更划算。生产选型不能只看“每 token 账单为零”,还要看总拥有成本。 第五是合规。客户数据、日志、模型输出、人工审查、删除请求、数据保留周期,都可能涉及合规要求。Ollama 本地运行可以帮助控制数据位置,但不会自动满足合规。合规来自制度、架构、权限、记录和审计。 七、性能边界:模型大小、硬件和并发决定体验 Ollama 的性能不是一个固定答案。它取决于模型参数量、量化格式、上下文长度、硬件类型、内存带宽、显存容量、并发请求和生成长度。同一个模型在高端 GPU、Apple Silicon、普通 CPU 上体验差异巨大。同一台机器上,短问答可能很快,长文档总结可能明显变慢。 模型大小决定质量和速度的基本张力。小模型响应快、资源占用低,适合分类、改写、简单问答和低成本并发;大模型质量更好,但显存和延迟压力更大。量化可以降低资源需求,但可能影响质量,尤其是复杂推理、代码、长上下文和细节准确性。生产选型不能只看模型名称,要在真实任务上测试。 上下文长度是常被低估的性能变量。num_ctx 设置越大,模型能处理的上下文越长,但推理成本也更高,内存占用增加,响应变慢。很多团队把上下文开得很大,以为能解决 RAG 和记忆问题,结果服务延迟不可接受。实际做法应该是:短任务用短上下文,长文档任务单独路由,知识库问答通过检索控制输入长度。 并发是另一个关键边界。个人使用时,一次只有一个请求,体验可能很好;团队服务时,多个用户同时请求,模型加载、生成和内存竞争会放大。需要测试不同并发下的 p50、p95、p99 延迟,而不是只看一次演示。生产用户感受到的是尾延迟,不是最佳情况。 keep_alive 可以让模型在请求后继续驻留,减少下次冷启动;但常驻模型会占资源。若团队有多个模型,全部常驻可能撑爆内存;若不常驻,频繁切换又会带来加载延迟。生产系统需要根据模型热度设置保留策略,并限制可同时运行模型数量。 embedding 模型也要单独评估。很多团队只关注聊天模型,却忽略知识库检索质量。若 embedding 模型不适合中文、专业术语或代码,RAG 答案会从源头出错。Ollama 可以运行 embedding 模型,但检索链路的解析、切分、向量库、重排序和引用仍然要自己建设。 八、安全边界:最忌直接暴露端口 Ollama 的安全讨论必须从网络边界开始。默认本地开发体验通常假设服务运行在可信环境,不应该把端口直接暴露给公网。互联网上已经出现过针对公开 Ollama 服务的扫描和滥用讨论,安全研究也关注过本地模型服务的未授权访问、模型管理接口和历史漏洞。即使具体漏洞会随版本修复,“不要裸露模型服务端口”仍然是长期有效的原则。 生产部署至少要做到四件事。第一,Ollama 只监听本机或私有网段,不直接开放公网。第二,外部访问必须经过带认证的反向代理或 API 网关。第三,管理类能力要隔离,不要让普通应用用户触达拉取、删除、创建模型等接口。第四,所有请求都要有超时、限流和日志,防止资源被打满。 反向代理不是只加一层转发。它应该处理 HTTPS、身份认证、访问策略、IP 限制、请求大小限制、速率限制、路径白名单、审计日志和错误响应。若团队使用 OAuth、OIDC、Authentik、Keycloak、Cloudflare Access、Tailscale、NetBird 或企业网关,应把 Ollama 放在这些访问控制之后。 还要注意提示词和资料安全。即使模型服务在内网,用户也可能提交敏感资料、恶意提示或超大输入。外层应用要限制输入长度、过滤明显恶意内容、保护系统提示、避免把无权限资料拼进上下文。RAG 系统尤其要防止跨租户检索和引用泄露。模型本身不会替你理解企业权限。 模型来源也要谨慎。不要随便运行不明来源模型、adapter 或 Modelfile。模型文件虽然不是传统可执行程序,但加载链路、模板、配置和依赖仍可能带来风险。生产环境应固定模型来源、校验版本、记录哈希、控制谁能更新模型,并在升级前做测试。 最后是日志。为了排查问题,很多团队会记录完整请求和响应,但这可能包含客户数据、隐私、源代码、合同条款和内部策略。日志需要脱敏、分级、加密、设置保留周期,并限制访问。不能因为本地部署就忽略数据治理。 九、和 vLLM、Triton、KServe 的区别 理解 Ollama 的生产边界,最简单的方法是把它和更偏生产推理的组件比较。vLLM 重点面向高吞吐 LLM serving,提供 OpenAI 兼容服务、PagedAttention、连续批处理等能力,适合需要吞吐优化和并发服务的场景。NVIDIA Triton Inference Server 是通用推理服务平台,覆盖多框架模型、动态批处理、模型仓库、指标和生产部署能力。KServe 是 Kubernetes 上的模型服务框架,关注推理服务声明、自动扩缩容、流量治理和平台化部署。它们解决的问题和 Ollama 不完全一样。 Ollama 的重点是易用和本地模型体验。它让个人和小团队快速跑模型,快速接 API,快速试模型。vLLM 的重点是服务效率和吞吐,适合把模型作为在线服务承载更多并发。Triton 的重点是通用生产推理基础设施,适合已有 NVIDIA 生态和多模型推理需求的团队。KServe 的重点是 Kubernetes 原生模型服务生命周期,适合已经有云原生平台和 MLOps 流程的组织。 这并不意味着小团队必须立刻上 vLLM 或 KServe。很多团队用 Ollama 就能满足内网低并发需求。问题在于,当你需要更多并发、更细调度、更强观测、更成熟扩缩容时,继续把 Ollama 裸服务越包越厚,可能不如换到更适合的平台。工程选型要看复杂度转移:是外层补几项能力就够,还是已经在重造模型服务平台。 一个常见路线是先用 Ollama 做原型和内测,验证任务价值、模型质量和用户流程;当请求量、稳定性和治理要求上升后,把应用层抽象成统一模型网关,底层可以接 Ollama、vLLM、云模型或其他服务。这样早期不被重平台拖慢,后期也不被单一后端锁死。 十、Ollama 可以在生产架构里扮演什么角色 第一种角色是开发环境模型后端。开发者在本机用 Ollama 模拟模型 API,调试提示词、工具调用、RAG 流程和前端体验。上线后同一应用可以切到云模型或生产推理集群。这个角色最稳,也最能发挥 Ollama 的低门槛优势。 第二种角色是内部工具后端。团队在内网部署 Ollama,服务少量用户,任务包括文档摘要、会议纪要、代码解释、测试数据生成、知识库问答。外层应用负责登录、权限、日志和配额。这个角色可行,但要接受资源有限和人工运维。 第三种角色是私有数据处理节点。有些资料不适合发到外部模型,Ollama 可以作为本地处理节点,完成脱敏、摘要、初筛、分类或 embedding。对敏感行业来说,这个角色很有价值。但输出质量仍要评估,不能因为本地就默认正确。 第四种角色是边缘 AI 节点。在门店、工厂、实验室、车间或离线环境中,Ollama 可以让本地设备具备语言模型能力。网络不稳定或数据不能外传时,这种部署很有意义。限制是硬件能力、模型更新和远程运维。 第五种角色是统一网关后的一个后端。业务只调用公司内部模型网关,由网关根据任务路由到 Ollama、vLLM、云模型或专用服务。这样 Ollama 既能承担低成本本地任务,也不会把整个系统绑死在单机服务上。 十一、如果坚持用 Ollama 做团队服务,至少补这些层 第一层是网络和鉴权。Ollama 不直接暴露给用户端,不开放公网端口。所有请求经过后端服务或反向代理,使用 HTTPS、登录态、API key、OIDC 或内网身份认证。普通用户不能访问模型管理接口。管理操作只能由受控后台执行。 第二层是请求治理。限制最大输入长度、最大输出长度、并发数、每用户频率、每租户配额和超时时间。对长文档任务单独排队,避免拖垮普通聊天。对异常请求快速失败,避免连接无限挂起。 第三层是模型治理。建立允许使用的模型清单,记录模型版本、量化方式、上下文长度、适用场景、上线时间和回滚方式。不要让业务代码直接写死任意模型名。模型更新前跑评估集,更新后保留回退路径。 第四层是日志和监控。记录请求时间、用户或租户、模型、输入输出长度、延迟、错误、超时、取消、资源占用和用户反馈。敏感内容要脱敏或按策略不记录。设置告警:服务不可用、延迟升高、错误率升高、磁盘不足、内存不足、GPU 不可用。 第五层是质量评估。准备业务评估集,覆盖常见问题、边界问题、无答案问题、敏感问题、长上下文问题和多轮问题。每个模型升级或提示词变化都跑回归。对 RAG 场景,评估检索命中、引用正确和答案忠实,而不是只看语言流畅。 第六层是安全策略。限制模型拉取和删除权限,固定模型来源,定期更新 Ollama,隔离运行用户,控制文件权限,保护日志和缓存。外层应用要做提示注入防护、权限过滤、内容安全和资料来源校验。 第七层是降级方案。模型不可用时怎么办?切换小模型、切换云模型、返回排队状态、要求稍后重试,还是转人工?生产系统不能只有成功路径。降级方案要提前设计,并在界面上给用户清晰反馈。 十二、什么时候该离开 Ollama 当并发和吞吐成为核心目标时,应考虑 vLLM 或其他高吞吐推理服务。若用户量增加后,主要问题是排队、显存利用率、长尾延迟和多请求并发,继续靠单机 Ollama 和简单代理很难优雅解决。vLLM 这类框架在服务效率上更有针对性。 当组织已经运行 Kubernetes 和 MLOps 平台时,应考虑 KServe、Ray Serve、Triton 或云厂商模型服务。它们更适合平台团队统一管理模型生命周期、扩缩容、流量切分、发布和监控。Ollama 可以继续用于开发和小型边缘节点,但不一定适合作为中心平台。 当需要强企业治理时,应考虑模型网关和统一访问层。企业往往同时使用 OpenAI、Anthropic、Gemini、国产模型、本地模型和专用模型。如果每个业务都直接连 Ollama 或某个模型 API,权限、成本和审计会失控。统一网关可以做密钥管理、路由、配额、日志、缓存、内容安全和成本统计。 当模型质量不能满足任务时,也应该离开单一 Ollama 路径。不是所有任务都适合本地小模型。复杂代码修复、严肃法律分析、高质量中文长文、复杂数学推理、多模态理解和高可靠工具使用,可能需要更强模型。生产系统应该按任务选择模型,而不是为了本地化牺牲结果。 当运维成本超过收益时,也要重新评估。自建模型服务需要硬件、更新、监控、安全和人员。若团队没有运维能力,使用托管模型或托管推理服务可能更稳。控制权有价值,但控制权不是免费午餐。 十三、适合 Ollama 的生产清单 适合继续用 Ollama 的场景通常有这些特征:用户少,访问范围受控,数据敏感但任务不要求极高模型质量,延迟可接受,失败可人工处理,模型更新不频繁,团队愿意维护机器和服务。比如内部文档摘要、研发辅助、离线资料处理、小规模知识库问答、边缘设备助手、模型评测平台。 不适合裸用 Ollama 的场景也很明确:公网客户服务,高并发聊天,强 SLA,多租户 SaaS,严格审计合规,大规模 RAG,复杂工具调用平台,模型商业化网关,按量计费服务。这里不是说完全不能用 Ollama,而是不能只用 Ollama。它必须被放在更完整的架构中,甚至可能被其他推理服务替代。 判断时可以问十个问题。服务是否会暴露给不可信网络?是否有不同用户和租户?是否需要认证和配额?是否需要审计日志?是否有并发和延迟指标?是否需要自动扩缩容?是否需要模型灰度和回滚?是否需要对外 SLA?是否需要知识库权限隔离?是否有运维人员负责更新和故障?如果多数答案是肯定,Ollama 只能做后端组件,不能裸奔。 十四、一个务实的落地方案 对小团队来说,较稳的路线是三层架构。第一层是用户入口,包括网页、聊天界面、插件或内部系统。第二层是 AI 应用服务,负责登录、权限、提示词组织、RAG、工具调用、日志、配额、超时和错误处理。第三层是模型后端,Ollama 只是其中一个实现。应用服务通过统一接口调用模型,不让前端直接接触 Ollama。 在这个架构里,Ollama 可以跑聊天模型和 embedding 模型。知识库由独立向量数据库或搜索引擎管理,文档解析和切分由应用服务处理。用户提问后,应用服务先做权限过滤和检索,再把必要上下文发送给 Ollama。回答生成后,应用服务做引用整理、敏感检查和日志记录。这样即使 Ollama 失败,也不会暴露内部端口或管理能力。 部署上,Ollama 运行在私有主机或容器中,只允许应用服务访问。反向代理不直接把所有路径转发出去,而是由应用服务提供受控 API。监控采集主机资源、服务健康和请求延迟。模型文件放在固定目录,更新由管理员执行。备份和恢复计划覆盖模型配置、应用配置、知识库索引和日志。 上线前,至少做三轮测试。第一轮是功能测试:常见问题是否能答,引用是否正确,错误是否清晰。第二轮是压力测试:并发、长上下文、模型冷启动、超时和资源耗尽表现如何。第三轮是安全测试:未登录是否能访问,普通用户是否能调用管理接口,跨租户资料是否会泄露,超大输入是否会拖垮服务。 上线后,持续观察用户问题和失败案例。把失败分成模型能力不足、检索失败、上下文过长、权限问题、性能问题和产品交互问题。不要把所有失败都归咎于“Ollama 不行”或“模型不聪明”。很多时候,真正需要修的是外层上下文工程和产品流程。 还有一个容易被忽略的验收点是用户预期。内部团队如果以为“本地模型”等于“公司版通用专家”,上线后很快会失望。更合适的发布方式,是明确第一版服务只覆盖哪些任务,哪些答案需要引用,哪些场景必须人工复核,哪些请求会被拒绝或转交其他模型。边界说清楚,用户会把它当工具使用;边界说不清,用户会把一次失败理解成整套系统不可靠。 十五、上线前应该怎样验收 判断一个 Ollama 团队服务能不能上线,不能只看“接口能不能返回”。最小验收应该从真实使用路径开始:用户登录,选择任务,上传或选择资料,系统检索必要上下文,模型生成回答,用户能看到来源或依据,错误时能得到可理解的提示,管理员能看到服务是否健康。只测一个 curl 请求,无法证明系统适合真实用户。 功能验收要覆盖常见任务和边界任务。常见任务包括普通问答、资料摘要、改写、翻译、代码解释和知识库问答;边界任务包括超长输入、空资料、无答案问题、过期资料、相互矛盾资料、用户取消请求、模型返回异常、服务重启和节点资源不足。每类任务都要看输出是否可用,而不是只看有没有文本。对知识库场景,答案没有引用或引用不能支持结论,就不算通过。 性能验收要接近实际使用。不能只在空闲机器上测一次短问题,而要模拟团队一天中的峰值:多人同时问问题,有人上传长文档,有人使用代码模型,有人请求 embedding,有人连续聊天。记录首 token 延迟、完整回答耗时、失败率、超时率、内存占用、显存占用、模型加载时间和队列长度。若 p95 延迟已经让用户无法接受,就不要用平均响应时间安慰自己。 安全验收要从越权角度看。未登录用户是否能访问接口?普通用户是否能调用模型管理路径?A 项目的用户是否能搜到 B 项目的资料?撤权后缓存是否仍然可用?日志里是否出现完整合同、客户资料或源代码?反向代理是否限制请求体大小?外网是否能扫到 Ollama 端口?这些问题比模型回答得是否优雅更重要。安全问题一旦进入生产,通常不是重新生成答案就能补救。 质量验收要建立小而硬的评估集。它不需要一开始很大,但必须来自真实业务。比如内部知识库可以准备五十个高频问题、二十个无答案问题、十个跨文档问题、十个数字或日期问题、十个容易误判的权限问题。每次换模型、换量化版本、改系统提示、改检索策略,都跑同一组问题。这样团队才能知道质量是提升还是退步,而不是凭一次演示判断。 运维验收要关注故障恢复。机器重启后服务是否自动恢复?模型文件损坏怎么办?磁盘满了是否告警?Ollama 升级失败如何回滚?知识库索引能不能重建?应用服务和模型服务是否分开重启?如果没有恢复路径,服务只能算试用,不适合承载团队工作流。 十六、从 Ollama 走向更完整平台 很多团队不是一开始就需要复杂模型平台。合理路线是先把业务价值跑出来,再逐步把容易失控的部分抽出来。第一步通常是把客户端和 Ollama 解耦。前端不要直接请求 Ollama,而是请求自己的 AI 服务。这个 AI 服务提供统一接口,隐藏底层模型来源。今天后端是 Ollama,明天可以是 vLLM、云 API 或多模型网关,用户入口不需要变化。 第二步是把模型选择从代码里拿出来。不要在业务逻辑中到处写死模型名和参数,而是维护一个模型配置表:用途、模型、上下文长度、温度、最大输出、是否支持工具、是否允许处理敏感资料、是否默认启用。这样运营者可以调整策略,开发者不用每次改代码。模型治理不是大公司专属,小团队只要有两个以上模型,就会遇到版本混乱。 第三步是把知识库和模型运行分开。Ollama 可以生成回答,也可以跑 embedding,但文档解析、索引、权限、重排序、引用和更新不应依赖模型服务本身。知识库应是独立组件。这样即使将来推理后端迁移,资料和索引策略仍然可以复用。很多团队迁移困难,不是因为模型接口难换,而是因为检索、提示词、权限和业务逻辑全部写在一起。 第四步是建设统一观测。无论底层是 Ollama 还是 vLLM,都应该用同一套请求日志、延迟指标、错误码、用户反馈和质量评估。这样迁移时才能比较真实差异:换后端是否更快,是否更贵,是否更稳定,是否降低了回答质量。没有统一观测,迁移只能靠感觉。 第五步是逐步引入专业推理服务。当团队发现瓶颈主要来自并发吞吐、显存利用率、多节点调度和长尾延迟时,再考虑 vLLM 或其他推理框架。若瓶颈主要是权限、知识库、产品体验和评估,先换推理框架未必解决问题。正确顺序是先识别瓶颈,再升级组件,而不是看到生产两个字就立刻重搭平台。 第六步是保留 Ollama 的位置。即使中心服务迁移到更完整的平台,Ollama 仍然可以继续用于本地开发、离线验证、边缘节点、私有资料预处理和模型试验。一个成熟团队不需要在工具之间二选一,而是让不同工具待在适合的位置。Ollama 做轻量入口和本地节点,模型网关做统一治理,高吞吐服务做在线承载,这样比把所有责任压到一个工具上更稳。 十七、最终判断 Ollama 适合生产吗?适合一部分生产,不适合替代完整生产平台。它是非常好的本地模型运行工具,也是很好的内部服务起点。它让团队低成本验证本地模型价值,让敏感资料有机会留在本地,让开发者快速构建 AI 原型。它的价值不该被低估。 但 Ollama 的强项不是鉴权、多租户、集群调度、自动扩缩容、模型治理、审计合规和高并发吞吐。把它直接暴露给用户,等于把模型运行时当成业务平台,这是风险。正确姿势是:个人用它,小团队用它,但在它前面补服务层;业务用它,但把它当推理后端;平台级生产用它前,先确认它是否仍是合适组件。 更务实的结论是:先用 Ollama 快速跑通价值,再用架构隔离未来变化。不要为了追求“生产级”一开始就搭过重平台,也不要因为原型跑通就把裸服务推向真实用户。生产不是某个工具的标签,而是一整套边界、责任和验证。Ollama 可以成为这套系统的一部分,但不能替你承担全部责任。 参考资料 Ollama Docs:API Reference,https://docs.ollama.com/api Ollama Docs:OpenAI compatibility,https://docs.ollama.com/openai Ollama Docs:Modelfile,https://docs.ollama.com/modelfile Ollama Docs:FAQ,https://docs.ollama.com/faq Ollama GitHub:README,https://github.com/ollama/ollama vLLM Docs:OpenAI-Compatible Server,https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html vLLM Docs:Production Stack,https://docs.vllm.ai/en/latest/serving/production_stack.html NVIDIA Triton Inference Server Documentation,https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/ KServe Documentation:LLM InferenceService,https://kserve.github.io/website/docs/model-serving/generative-inference/overview Wiz Research:Probllama: Ollama Vulnerability,https://www.wiz.io/blog/probllama-ollama-vulnerability-cve-2024-37032 Snyk:Ollama security vulnerabilities and deployment risks,https://snyk.io/blog/ollama-security-vulnerabilities-ai-applications/ OWASP:Top 10 for LLM Applications,https://owasp.org/www-project-top-10-for-large-language-model-applications/
  • 0 赞同
    1 帖子
    0 浏览
    A
    很多团队第一次部署大模型时,最容易问错问题。大家会问:“这个 70B 模型需要几张卡?”“H100 一小时多少钱?”“INT4 是不是就能省一半?”这些问题都重要,但它们不是完整问题。真正该问的是:在我的用户流量、上下文长度、输出长度、并发峰值、质量要求、可用性目标和运维能力下,一个可稳定交付的大模型服务每月到底要花多少钱,瓶颈在哪里,什么时候需要扩容,什么时候应该换小模型、做量化、做缓存、做路由,什么时候根本不该自部署。 这篇文章用 localaihub.com 社区经验帖的方式写,尽量讲人话,也尽量把账算实。这里不会给一个“所有人通用”的价格表,因为 2026 年 GPU 云价格变化快,供应也不稳定。更有价值的是学会拆账:显存账、吞吐账、延迟账、量化账、工程账、运维账、风险账。只看 GPU 小时单价,最后通常会低估成本;只看模型 benchmark,最后通常会高估线上体验。 本文资料检索截至 2026 年 5 月,参考了 AWS、Google Cloud、Azure、Lambda 等 GPU 资源文档或价格页,vLLM、TensorRT-LLM、TGI、SGLang、Triton、KServe、llama.cpp、Hugging Face bitsandbytes 等项目文档,以及 PagedAttention、QLoRA、Llama 3、DeepSeek-R1 等论文或技术报告。价格和规格请以上线时官方页面为准,本文重点是成本模型和决策方法。 一、先说结论:大模型部署成本不是显卡价格,而是“单位有效回答”的成本 如果一个服务每月租 GPU 花 3 万元,但只服务内部 20 个测试用户,单位有效回答成本就很高。如果同样 3 万元支撑 5 万个高价值业务请求,且减少了人工处理时间,它可能很划算。大模型部署不能只看“每小时多少钱”,要看“每个能被用户接受的结果多少钱”。 单位有效回答成本至少包含这些部分:GPU 计算成本、CPU 和内存成本、本地盘或对象存储成本、镜像和模型分发成本、公网流量成本、日志和监控成本、工程人力成本、值班和故障成本、评测和标注成本、安全合规成本、空闲冗余成本。自建机房还要加电力、制冷、机柜、网络、硬件折旧、备件、维修和采购周期。云上还要考虑可用区价格、容量抢占、保留实例、spot 中断、跨区流量和供应不足。 更实际的公式是: 月成本 = 固定资源成本 + 弹性资源成本 + 存储与网络成本 + 运维人力成本 + 质量治理成本 + 风险冗余成本 单位有效回答成本 = 月成本 / 通过质量标准且成功交付的回答数 “成功交付”这几个字很关键。模型超时、输出格式错、答非所问、引用错、用户重试三次才满意,都不能按一次完美回答算。很多部署账本看起来便宜,是因为只算了 tokens/s,没有算失败和重试。 二、显存账:权重、KV cache、并发和上下文一起算 大模型部署第一笔账是显存。显存里至少有权重、KV cache、运行时 buffer、CUDA graph 或 kernel workspace、临时张量、碎片和框架开销。权重大小容易估,KV cache 容易被忽略。 权重粗算方法很简单:参数量乘以每个参数字节数。FP16/BF16 大约 2 字节,INT8 大约 1 字节,INT4 大约 0.5 字节,FP8 大约 1 字节。一个 7B 模型 FP16 权重大约 14GB,一个 70B 模型 FP16 权重大约 140GB。实际加载还会有额外开销,所以不能把卡上标称显存全部当可用空间。 但是在线推理不是只放权重。生成式模型为了避免每生成一个 token 都重新计算整个上下文,会保存每层 attention 的 key 和 value,也就是 KV cache。KV cache 随着并发序列数和上下文长度线性增长。你把最大上下文从 8K 开到 32K,把并发从 16 开到 64,显存压力会明显放大。很多团队刚启动模型时没问题,一上真实并发就 OOM,原因往往不是权重放不下,而是 KV cache 被低估。 一个实用判断是:小模型高并发时,KV cache 可能比你想象中更早成为瓶颈;大模型长上下文时,权重和 KV cache 会一起压垮显存。部署参数里的 max_model_len、max_num_seqs、max_num_batched_tokens、gpu_memory_utilization 不是随便填的,它们决定服务端愿意为多少上下文和并发预留空间。 vLLM 的 PagedAttention、TensorRT-LLM 的 paged KV cache、SGLang 的 prefix caching 和 RadixAttention,都在解决 KV cache 管理问题。它们可以提高显存利用率,减少碎片,提升吞吐,但不能违反物理上限。如果业务真的需要 128K 上下文和高并发,就要准备更多 GPU、KV cache offload、上下文压缩、分层路由或异步处理,而不是期待一个参数开关解决。 社区里常见的错误是用“模型文件大小”估算部署成本。例如看到某个 70B INT4 文件只有 40GB 左右,就以为一张 48GB 卡能稳定支撑生产流量。单用户低并发也许能跑,但生产服务还要保留 KV cache、batch、runtime 开销和安全余量。显存占用长期超过 90% 时,线上风险会显著增加:小流量波动、长 prompt、异常重试、并发尖峰都可能触发 OOM。 三、吞吐账:tokens/s 要拆成输入、输出和请求分布 吞吐不是一个数字。大模型服务至少有两种吞吐:prefill 吞吐和 decode 吞吐。Prefill 处理输入 prompt,适合并行;decode 逐 token 生成,更受内存带宽、KV cache 和 batch 调度影响。一个服务“每秒 5000 tokens”到底是输入 token、输出 token,还是混合 token?是在离线固定 batch 下测的,还是在线随机请求下测的?这些差别很大。 真实业务请求分布通常长这样:大量短问答,少量长文档;大量输出 200 token 以内的请求,少量输出几千 token 的报告;白天有突发,夜间低峰;某些用户会连续追问,某些任务会同时触发检索和工具调用。平均值会掩盖问题。你要看 p50、p95、p99 的输入长度、输出长度、并发和延迟。 算吞吐账时,可以先做一个简单容量模型。 假设一天 100,000 次请求,平均输入 1,000 token,平均输出 500 token,那么每天处理 100,000,000 输入 token 和 50,000,000 输出 token。输出 token 通常更贵,因为 decode 是逐步生成。再假设流量集中在 10 小时内,峰值小时是平均小时的 3 倍,那么峰值小时可能要处理 30,000 次请求,也就是 30,000,000 输入 token 和 15,000,000 输出 token。再考虑 p95 延迟目标,你不能让所有请求排队慢慢处理,必须留冗余。 吞吐账不能只算“总 token 除以 tokens/s”。在线服务有排队,有 batch 组装等待,有长短请求互相影响,有用户取消,有网关超时,有模型实例重启。动态 batching 可以提高 GPU 利用率,但 batch 等待时间过长会伤害首 token 延迟。连续 batching 比静态 batch 更适合 LLM 在线服务,因为请求可以流式加入和退出,但参数仍要按真实流量调。 压测要模拟真实分布,而不是只用同一个 prompt 重复打。至少准备几类场景:短输入短输出、短输入长输出、长输入短输出、长输入长输出、多轮对话、RAG 拼接上下文、工具调用前后多次模型调用。每类都要测 TTFT、输出 token 间隔、端到端延迟、成功率、GPU 利用率、显存、KV cache 使用和错误类型。 四、延迟账:用户在乎的不是平均速度 用户感知延迟通常分三段。 第一段是排队时间。请求到达网关后,可能要等待推理实例有位置。高峰期排队是最常见的延迟来源之一。排队时间持续升高,说明容量不足或调度策略不合适。 第二段是首 token 延迟,也就是 TTFT。它包括请求转发、tokenization、prefill、batch 等待和第一次 decode。聊天、客服、代码助手对 TTFT 很敏感,因为用户看到第一个字就会觉得“系统开始工作了”。同样 10 秒完成回答,一个 0.8 秒出首 token、后续流式输出的服务,体验远好于 8 秒才开始吐字的服务。 第三段是输出速度。输出 token 间隔太慢,用户会觉得回答拖沓。报告生成类任务可以接受慢一点,代码补全和交互式问答不能。不同产品应该有不同 SLO:客服可能要求 p95 TTFT 小于 2 秒,长文档总结可以允许更高 TTFT,但要给进度和异步通知。 延迟账最怕平均值。平均 TTFT 1 秒不代表用户体验好,如果 p99 是 20 秒,高价值用户刚好在 p99,就会投诉。线上看 p95、p99 比看平均更有意义。还要按模型、租户、上下文长度、输出长度、时间段拆开看。很多系统不是整体慢,而是长 prompt 把短请求拖慢,或者某个大客户的批量任务挤占了交互池。 常见优化包括:分离交互池和批处理池;限制最大上下文和最大输出;给长任务走异步;启用 prefix cache;调小或调大 batch 等待窗口;按模型大小路由;用小模型处理简单任务;对固定系统提示词做缓存;为高优用户保留并发;对超长请求先压缩再生成。不要只想着换更贵 GPU,很多延迟问题来自调度和产品形态。 五、量化账:省显存不等于省总成本 量化很诱人,因为它能把模型权重从 BF16/FP16 压到 INT8、INT4、FP8、NF4 或 GGUF 的多种格式。Hugging Face bitsandbytes 支持 8-bit 和 4-bit,AWQ 和 GPTQ 常用于权重量化,vLLM 支持多种量化实现,llama.cpp 生态有大量 GGUF 量化模型。看起来只要把模型量化,显存就省了,成本就降了。 现实更复杂。 首先,量化主要省权重,不一定省 KV cache。一个长上下文高并发服务,KV cache 可能占掉大量显存。你把 70B 权重从 FP16 降到 INT4,确实腾出了空间,但如果 KV cache 仍用 FP16,长上下文并发仍会碰上限。部分引擎支持 KV cache 低精度,但要评测质量和稳定性。 其次,量化不一定更快。速度取决于硬件、内核、batch、模型结构和引擎支持。某些 INT4 权重量化在特定 GPU 上吞吐很好,换到另一张卡可能因为 kernel 不成熟而变慢。FP8 在 Hopper 或更新架构上有优势,但老卡未必适合。GGUF 在本地推理很方便,但大规模在线服务和 vLLM/TensorRT-LLM 路线的运维方式不同。 第三,量化会影响质量。影响不一定体现在闲聊上,常常体现在数学、代码、结构化输出、长上下文引用、少数语言、专业术语和边界安全上。一个量化模型在普通问答里看起来正常,在 JSON 严格输出、工具参数生成或财务数字总结里可能错误率上升。生产评测必须覆盖业务格式和关键指标。 第四,量化会增加版本管理成本。你可能同时维护 BF16、FP8、AWQ、GPTQ、GGUF 多个版本,每个版本都有不同引擎、启动参数和评测结果。如果没有模型 manifest 和自动评测,很快会不知道线上到底跑的是哪个版本。 比较稳的策略是:先用 BF16/FP16 或官方推荐精度建立质量基线,再尝试 FP8/INT8/INT4;每个量化版本必须跑同一套业务评测和压测;如果质量下降换来的成本节省低于用户损失,就不要上;如果量化后吞吐没有提升,只是能塞进更小显卡,也要计算稳定性风险和运维复杂度。 六、GPU 账:H100、A100、L4、4090、B200,不是越新越合适 选 GPU 要看模型大小、上下文长度、并发、精度、预算和供应。 H100/H200/B200 适合高吞吐、低延迟、大模型和高并发,NVLink/NVSwitch 对多卡张量并行很重要。A100 仍然适合不少中大型推理和训练任务。L4、L40S、A10 这类卡适合中小模型、embedding、rerank、轻量推理或成本敏感任务。消费级 4090/5090 对实验和内部低 SLA 服务很划算,但数据中心合规、稳定性、远程管理、ECC、供电散热和多卡互联都要考虑。 云厂商实例规格也不能只看 GPU 型号。AWS P5 p5.48xlarge 是 8 张 H100 80GB,官方规格页还列出 vCPU、内存、网络和本地存储。Azure ND H100 v5 系列面向高端 GPU 训练和推理。Google Cloud A3/A4 系列围绕 H100/H200/B200 等资源提供不同形态。Lambda 这类 GPU 云给出按 GPU 小时的价格和集群租用方式。不同地区、承诺期、按需或预留价格差别很大,容量可得性也差别很大。 对社区团队和创业项目来说,第一原则是别用最大卡掩盖架构问题。比如一个 7B 模型客服系统,如果平均输出 200 token,流量也不大,用 H100 可能长期闲置;一个 70B 长文档系统,如果需要 32K 上下文和多人并发,一张消费卡再便宜也不稳定;一个内部批处理总结任务,可能用 spot 或夜间低价资源更合适;一个实时代码助手,则要优先保证低 TTFT 和稳定流式输出。 多卡部署还有通信账。张量并行会把模型切到多张 GPU,推理时需要频繁通信。如果卡之间没有高速互联,性能可能不如预期。PCIe 多卡和 NVLink/NVSwitch 机器差距很大。跨机器张量并行更复杂,网络延迟和带宽会成为硬瓶颈。能单卡稳定跑的模型,运维复杂度通常低很多;必须多卡时,要确认引擎对 tensor parallel、pipeline parallel 和分布式 serving 的支持成熟。 七、云上、自建和混合部署:便宜不只是单价低 云上优点是启动快、弹性好、少管硬件,缺点是长期成本高、容量可能紧、数据出入和合规要处理。自建优点是长期摊销可能便宜、数据边界清楚、资源可控,缺点是采购周期长、硬件运维难、利用率不足时浪费大。混合部署适合很多团队:核心稳定流量放自有或长期租用资源,突发批处理放云上;敏感数据在内网,公开低风险任务走外部 API;大模型少量高价值调用走商业 API,小模型高频任务本地跑。 算自建账时,不要只用 GPU 采购价除以三年小时数。还要加服务器、CPU、内存、NVMe、网卡、交换机、机柜、电力、制冷、带宽、备件、保修、人工、机房空间和闲置率。GPU 利用率如果长期只有 20%,看似便宜的自建会变贵。云上虽然单价高,但如果你的流量波动大、项目还在验证阶段,按需租用可能更便宜。 算云上账时,也不要只看宣传价。按需、预留、spot、capacity block、集群承诺价完全不同。很多低价需要长期承诺或大规模集群,并不适合小团队。公网出流量、对象存储、快照、日志、跨区同步、负载均衡和 NAT 网关也会产生费用。高峰期抢不到卡,会让你多区域部署或保留冗余,成本继续上升。 一个务实建议:验证期优先云上或现成 API,确定任务价值和流量后再决定自部署;稳定高频、数据敏感、模型可控的任务适合本地或私有云;突发离线任务适合弹性资源;实时交互任务不要依赖不稳定 spot;高价值客户服务要保留冗余,不要把成本压到单点刚好够用。 八、运维账:真正花钱的是稳定运行 部署一个 demo 和运行一个生产服务是两回事。Demo 可以手动重启,生产服务要有人负责模型版本、镜像安全、驱动、CUDA、NCCL、推理引擎、容器、节点健康、日志、监控、告警、备份和回滚。 大模型服务的故障类型很多:模型加载失败、显存碎片、OOM、CUDA kernel 错误、NCCL 通信失败、tokenizer 不一致、请求超过上下文、流式响应断开、网关超时、节点磁盘满、模型文件下载慢、镜像拉取失败、驱动版本不兼容、量化 kernel 不支持、GPU 温度或功耗异常。每一种都需要可观测性和处理预案。 运维成本还包括升级成本。vLLM、SGLang、TensorRT-LLM、TGI、Triton、CUDA、NVIDIA 驱动都在快速更新。新版本可能带来性能提升,也可能改变默认参数或引入兼容问题。生产升级不能直接替换镜像,应该先在影子流量或压测环境验证:同一模型、同一请求集、同一采样参数下,质量是否一致,延迟是否改善,显存是否变化,错误率是否增加。 日志和监控也不是免费。高流量模型服务如果完整记录 prompt 和 response,存储成本很快上来,更重要的是隐私风险。实践上应记录元数据和抽样内容,敏感字段脱敏,按租户和权限控制访问。质量回放需要样本,但样本不能变成无法管理的数据湖。 值班成本同样要算。一个模型服务晚上 OOM,如果没有自动熔断和降级,可能影响所有上层应用。多模型平台要支持回退到小模型、切到备用实例、拒绝超长请求、暂停批处理任务、限制异常租户,而不是让所有请求一起失败。 九、质量账:便宜模型答错,最后最贵 成本优化不能只看硬件。一个便宜模型如果让用户多问三次,让人工客服介入,让开发者修错误代码,让运营人员重写文案,真实成本可能更高。大模型服务的成本账必须和质量账合并。 质量评测要覆盖真实业务。客服看一次解决率、事实准确性、拒答边界和转人工率;代码助手看采纳率、测试通过率、漏洞率和上下文理解;知识库问答看引用正确率、无答案拒答率和幻觉率;报告生成看结构、数字、来源和可编辑性;Agent 看工具调用成功率、恢复能力和操作安全。 量化、小模型路由、蒸馏、缓存都会影响质量。最好的成本策略通常不是“全站换小模型”,而是分层:简单任务小模型,复杂任务大模型;固定格式任务蒸馏模型,开放推理任务强模型;高频知识问答 RAG 加中等模型,关键决策强模型加人工确认;低价值长任务异步处理,高价值交互任务保低延迟。 还要算重试成本。模型失败后,用户会重试,应用也可能自动重试。一次失败不只是浪费一次 token,还可能造成流量放大。比如成功率从 99% 掉到 95%,看似只差 4 个百分点,但在高峰期可能意味着大量重试、排队增加、延迟变差,最后触发连锁故障。 十、RAG 和 Agent 的额外账 很多应用不是直接问模型,而是 RAG 或 Agent。RAG 会增加 embedding、向量库、检索、重排、上下文拼接和引用验证成本。Agent 会增加多轮模型调用、工具 API、状态存储、权限校验和执行日志成本。 RAG 的成本不只是向量库。文档入库要切分、清洗、去重、embedding、版本管理;查询时要召回、重排、压缩、拼接;回答后要验证引用。上下文拼太多会增加输入 token 成本和 TTFT,拼太少会降低准确率。很多 RAG 系统贵不是因为 embedding,而是每次把几十段长文档塞进大模型。 Agent 的成本更容易失控。一个用户请求可能触发 5 次模型调用、3 次检索、2 次外部 API、1 次代码执行。模型越“会思考”,如果没有预算控制,就越可能循环。生产 Agent 必须设置最大步骤数、最大 token、工具权限、失败退出条件、用户确认点和审计日志。否则一次复杂任务的成本可能是普通问答的几十倍。 因此部署大模型前,要按产品形态估算调用放大系数。普通聊天可能是 1 次模型调用;RAG 可能是 1 次 embedding 加 1 次 rerank 加 1 次生成;Agent 可能是 3 到 20 次模型调用。只按“每个用户问题一次生成”估成本,会严重低估。 十一、一个可落地的部署前测算表 部署前可以用下面这张文字版清单做测算。 第一,业务流量。每日请求数、峰值 QPS、峰值并发、输入 token 分布、输出 token 分布、长上下文比例、流式比例、重试比例。 第二,质量目标。必须使用哪个模型等级,是否允许小模型路由,是否允许量化,格式错误率上限,事实错误率上限,人工兜底成本。 第三,延迟目标。p50、p95、p99 TTFT,p95 端到端延迟,输出 token 速度,长任务是否可异步。 第四,显存需求。模型权重精度,最大上下文,最大并发序列,KV cache dtype,安全余量,多卡并行方式。 第五,吞吐压测。按真实请求分布压测,不只测固定 prompt;记录排队、prefill、decode、成功率、OOM 和 GPU 指标。 第六,资源方案。GPU 型号、单机还是多机、云上还是自建、按需还是预留、是否需要冗余、是否支持灰度和回滚。 第七,运维能力。谁负责驱动和引擎升级,谁处理夜间故障,日志保留多久,如何脱敏,如何告警,如何恢复。 第八,成本输出。月固定成本、峰值弹性成本、每千输入 token 成本、每千输出 token 成本、每次成功回答成本、失败重试成本、人工介入成本。 这个表第一次填可能很粗,但比直接租卡上线强很多。上线后用真实数据回填,成本模型会越来越准。 十二、什么时候不该自部署 不是所有团队都该自部署大模型。下面几种情况,优先考虑商业 API 或托管服务。 第一,流量很小且不稳定。GPU 空闲时间太长,自部署浪费。 第二,团队没有 GPU 运维经验。驱动、CUDA、推理引擎和监控会消耗大量时间。 第三,业务质量要求高但评测体系还没有。你不知道模型好坏,自部署只会放大不确定性。 第四,模型更新很快。你需要持续追最新强模型,而不是维护一个固定开源模型。 第五,合规允许外部 API,且数据脱敏后风险可控。此时商业 API 的总成本可能更低。 反过来,如果你有稳定高频流量、明确数据边界、可控模型质量、强运维能力和成本优化需求,自部署就值得认真算。尤其是 embedding、rerank、小模型分类、内部知识问答、批量文档处理、固定业务生成等任务,本地部署经常能拿到更好的成本和可控性。 十三、社区建议:从小闭环开始,不要一上来造大平台 很多团队部署失败,不是技术不够强,而是一开始目标太大。想同时支持十几个模型、自动伸缩、多租户计费、RAG、Agent、微调、评测、灰度和可视化,最后每个都半成品。 更稳的顺序是: 先选一个高价值场景,明确输入输出和质量标准。再选一个基座模型,跑通推理服务和应用调用。然后建立最小观测:token 数、TTFT、输出速度、错误率、显存和 GPU 利用率。接着做真实请求压测,确定瓶颈。之后再引入量化、小模型路由、缓存、RAG 或 Agent。每加一个优化,都要证明它让单位有效回答成本下降,而不是只让架构图更漂亮。 部署大模型最怕“感觉”。感觉这个模型够强,感觉这张卡够用,感觉 INT4 不影响质量,感觉用户不会同时来,感觉日志以后再补。生产系统会把这些感觉逐个打穿。社区里最值得复用的经验不是某个神奇参数,而是把每个假设变成可测指标。 十四、样例测算:一个中型知识库问答服务 下面用一个接近真实社区项目的例子算账。假设团队要给内部两百名员工提供知识库问答,工作日使用,主要问题来自产品、售后、实施和运营。每天三万次请求,平均输入一千二百 token,平均输出三百五十 token。因为接了 RAG,每次请求还会做一次 embedding 查询、一次重排,并把三到六段文档拼进 prompt。高峰集中在上午十点到十二点、下午三点到五点,峰值小时是平均小时的三倍。 先算 token。每天输入约三千六百万 token,输出约一千零五十万 token。高峰小时如果承载全天四分之一请求,就是七千五百次请求,输入九百万 token,输出二百六十多万 token。再考虑百分之八的用户重试、百分之五的系统二次改写、百分之二的超长文档请求,峰值容量至少要留出百分之二十到三十的余量。 如果用一个中等模型做主力,单卡可以稳定跑交互池,成本可能可控。但如果直接上 70B 模型,并要求所有请求同步返回,GPU 数量、TTFT 和排队都会上升。更合理的架构是三层:高频简单问答走 7B 或 14B 模型,复杂制度解释和跨文档总结走更强模型,长报告生成进入异步队列。这样不是降低质量,而是把强模型用在真正需要推理和综合的地方。 再看上下文。平均输入一千二百 token 听起来不大,但 RAG 拼接后可能变成四千到八千 token。若某些用户上传长文档,输入会轻易超过三万 token。把所有实例都开到 32K 上下文,会降低可承载并发,因为 KV cache 预留变大。更稳的做法是交互池限制 8K 或 16K,长文档池单独配置 32K 或 64K,并用队列控制并发。用户体验上,短问答保持快,长任务允许等待或通知。 质量成本也要进入测算。假设小模型一次回答成本低,但事实错误率高,导致百分之十五请求要追问;强模型单次成本高,但追问率降到百分之五。若人工每处理一次升级问题要五分钟,人工成本可能超过 GPU 节省。知识库问答尤其要看一次解决率、引用正确率和无答案拒答率,不能只看模型单价。 最终方案可以这样落地:一个交互池承载普通问答,严格限制最大输入和输出;一个高质量池承载复杂问题,由路由器按问题类型、检索置信度和用户等级选择;一个异步池承载长文档总结和批量生成。每个池单独看 TTFT、输出速度、成功率、显存和单位有效回答成本。这样扩容时不会盲目加卡,而是知道哪个池真的缺资源。 十五、样例测算:小团队自部署代码助手 代码助手和知识问答不一样。用户更在乎低延迟、上下文窗口、代码正确性和 IDE 中的流畅感。假设一个十人研发团队自部署代码助手,主要用于解释代码、生成单元测试、修复报错和写脚本。每天请求量不大,只有五千次,但上下文经常包含文件片段、错误栈、依赖信息和历史对话,平均输入可能达到三千 token,输出五百 token。 如果团队为了“效果好”直接部署大模型,GPU 长时间空闲,单位成本会很高。更合理的方案是本地或私有云部署一个中小代码模型处理高频补全和解释,把复杂重构、跨文件分析和疑难错误路由到商业 API 或更强自部署模型。低频强需求不一定要占用常驻大卡。对于十人团队,稳定、低维护成本通常比完全本地化更重要。 代码场景的量化评测要格外谨慎。聊天看起来正常,不代表代码可用。量化后要测编译通过率、单元测试通过率、静态扫描结果、依赖版本准确性和是否编造不存在的 API。很多代码模型在 INT4 下仍能写出像样代码,但细节错误增多,例如参数名错、导入路径错、边界条件漏掉。一次错误代码被复制进项目,后续排查成本远高于一次推理成本。 部署清单也不同。代码助手要限制仓库权限,避免把私有代码发到不该去的模型;要记录模型是否允许训练使用用户代码;要支持按项目配置上下文范围;要避免把 .env、密钥、证书、客户数据放进 prompt;要对生成命令和文件修改做确认。若接入 Agent 自动改代码,还要有 diff 预览、测试运行、回滚和审计。 这个案例说明:小团队未必需要大而全的平台。先把请求路由、权限、评测和成本记录做好,再决定哪些模型常驻、哪些模型按需调用。自部署不是信仰,而是成本、隐私、体验和控制权的平衡。 十六、部署清单:上线前逐项确认 上线前至少确认以下事项。 模型方面,确认模型许可证允许当前用途,权重来源可信,tokenizer 和聊天模板完整,量化版本有独立评测,最大上下文不是随意开大,推荐采样参数已固化。不要让应用层每次随意传 temperature、top_p、max_tokens,除非产品确实需要开放这些控制。 资源方面,确认每个模型实例的显存水位、KV cache 上限、最大并发序列、最大批处理 token、CPU 内存、本地磁盘、模型加载时间和重启时间。多卡部署要确认通信拓扑,别把需要高速互联的张量并行放在普通 PCIe 或跨机器弱网络上。 接口方面,确认网关支持鉴权、租户配额、按 token 限流、超时、取消请求、流式响应、错误码分类和请求追踪。大模型错误不能都返回同一个失败提示。用户输入超长、租户额度不足、模型繁忙、工具失败、内容被拒绝,应有不同处理。 观测方面,确认有 TTFT、输出 token 间隔、端到端延迟、输入 token、输出 token、排队时间、prefill 时间、decode 时间、GPU 利用率、显存、KV cache 使用率、OOM、取消请求、超时和按租户成本。只看 QPS 和平均延迟不够。 质量方面,确认有离线评测集、线上抽样回看、用户反馈入口、失败样本归因和版本对比。评测集要覆盖业务真实问题,而不是只放公开 benchmark。对 RAG,要单独评估召回、引用和无答案拒答;对 Agent,要评估工具调用、步骤数、失败恢复和权限边界。 安全方面,确认日志脱敏、密钥过滤、上传文件扫描、提示词注入防护、工具权限、敏感操作确认、模型输出审核和数据保留期限。内部服务也不能默认安全,很多事故恰恰发生在“只有内网用户会用”的系统里。 发布方面,确认灰度比例、回滚模型、旧版本保留时间、配置变更记录、镜像版本、驱动和 CUDA 版本、推理引擎版本。不要在同一次发布里同时换模型、换引擎、换 prompt、换检索索引,否则出问题无法归因。 十七、压测方法:别用假流量骗自己 压测应该模拟真实请求,而不是拿一个短 prompt 循环打满。至少要准备四类请求:短问答、长上下文问答、长输出生成、RAG 或 Agent 多步骤请求。每类按实际比例混合,并加入用户取消、超时、重试和突发峰值。压测持续时间也要足够长,短时间跑通不能代表显存碎片、日志堆积和队列积压不会出现。 压测结果要分段看。排队时间高,说明容量或调度有问题;prefill 慢,说明输入太长、batch 策略不合适或 tokenizer/上下文处理有瓶颈;decode 慢,说明输出并发、KV cache、量化 kernel 或 GPU 带宽可能是瓶颈。端到端延迟只是结果,分段指标才能指导优化。 还要做降级压测。主动让一个模型实例下线,看网关是否把流量切走;主动制造超长请求,看系统是否拒绝或异步处理;主动提升某个租户流量,看限流是否生效;主动切换量化版本,看质量评测和回滚是否可用。生产事故不会按 demo 剧本发生,压测要提前暴露薄弱点。 压测后要输出容量结论。例如:当前配置在 p95 TTFT 小于两秒、p95 输出速度满足要求时,能支撑每分钟多少请求;超过这个点后,首先恶化的是排队还是 decode;扩一张卡能提高多少;把最大上下文从 32K 降到 16K 能释放多少并发;把长任务迁到异步池能降低多少 p99。没有这些结论,压测只是热闹。 十八、成本优化顺序:先砍浪费,再换硬件 很多团队一慢就想换 H100,一贵就想 INT4。更稳的优化顺序是先砍明显浪费。 第一,限制无意义上下文。RAG 不要把所有召回片段都塞给模型,先重排、去重、压缩,再拼接。多轮对话不要无限追加历史,应该摘要旧上下文或按任务保留关键信息。上下文越长,TTFT 和 KV cache 成本越高。 第二,限制无意义输出。很多应用默认 max_tokens 给得过大,模型会越写越长。按场景设置输出上限,报告类可以长,分类、抽取、客服建议不需要长篇大论。输出 token 是持续成本,啰嗦也是钱。 第三,做模型路由。简单问题、小任务、格式化抽取、分类和改写不必都走最大模型。路由规则可以先从保守启发式开始,再逐步引入置信度、历史反馈和成本预算。关键是失败要能升级到强模型,而不是让小模型硬答所有问题。 第四,做缓存。系统提示词、企业规范、常见文档前缀、热门问题、检索结果和部分确定性任务都可能缓存。缓存不是只缓存最终答案,也可以缓存 prefix、embedding、rerank 结果和工具查询结果。 第五,评估量化和蒸馏。当浪费已经减少,再看量化是否能在质量可接受的前提下降低显存或提高吞吐。对高频固定任务,蒸馏小模型往往比直接压大模型更稳。 第六,最后再扩硬件。硬件扩容应该基于容量模型:增加 GPU 后瓶颈是否还在 GPU,还是已经转移到检索、网关、数据库、网络或外部工具。盲目加卡有时只会让成本上升,延迟不变。 十九、预算审批怎么写:让老板看懂这笔钱买了什么 很多大模型项目卡在预算,不是因为方案一定贵,而是因为申请材料只写了“需要几张显卡”。业务负责人看不懂显卡和模型参数之间的关系,也看不出这笔钱能换来什么结果。更好的预算说明应该从业务价值开始,再落到容量和资源。 一份可读的预算说明可以分四段。第一段写业务目标,例如减少客服转人工、提升研发问题处理速度、缩短报告生成时间、保障内部知识问答可用。第二段写需求规模,例如日请求量、峰值并发、平均上下文、长任务比例、目标响应时间和可用性要求。第三段写资源方案,例如交互池、长任务池、备用实例、存储、监控和人力投入。第四段写验收指标,例如一次解决率、引用正确率、平均处理时长、单位有效回答成本和故障恢复时间。 预算里还要明确“不买什么”。比如第一期不训练基础模型,不建设复杂多租户计费,不支持无限长上下文,不承诺所有任务实时完成。把边界写清楚,反而更容易获得信任。否则团队会被期待用一套小预算完成所有大模型平台能力,最后质量和稳定性都不达标。 采购时也要避免一次买满。开发期可以先租云上资源或使用少量本地卡,拿到真实流量和压测数据后再决定长期资源。稳定负载适合长期租用或自建,突发负载适合弹性资源,低频强模型需求适合外部 API 或共享强模型池。预算不是一次性拍脑袋,而是随着用量、质量和成本数据滚动修正。 如果要向管理层解释为什么不能只买最便宜方案,可以用风险语言:显存没有余量会导致高峰失败,缺少备用实例会导致单点故障,没有评测会导致质量退化不可见,没有监控会导致故障定位慢,没有日志脱敏会带来合规风险。这些不是技术洁癖,而是生产服务的基本保险。 二十、结语:算清楚,才有资格谈规模化 大模型部署的真实成本由显存、吞吐、延迟、质量和运维共同决定。权重能不能放进显卡只是入门题;能不能在真实流量下稳定、快速、可回滚、可观测、可解释地交付结果,才是生产题。 如果你正在准备部署第一个大模型服务,建议先做三件事:第一,用真实业务样本建立评测集;第二,用真实请求分布做压测;第三,把成本按“有效回答”而不是“GPU 小时”计算。这样你会更早发现:该换模型时换模型,该量化时量化,该做缓存时做缓存,该买卡时买卡,该用外部 API 时就用外部 API。 真正成熟的大模型团队,不是最会堆 GPU 的团队,而是最清楚每一块 GPU 在为哪个用户价值服务的团队。 参考资料 AWS EC2 加速计算实例规格:包含 P5 等 GPU 实例的官方规格说明。 AWS EC2 Capacity Blocks for ML Pricing:AWS 机器学习容量块价格页面,可参考 H100 容量预订价格形态。 Google Cloud GPU pricing:Google Cloud GPU 官方价格入口,用于核对 A3/A4 等资源费用。 Azure ND H100 v5 系列:Azure H100 GPU 虚拟机规格说明。 Lambda GPU Cloud Pricing:Lambda GPU 云价格页面,展示 H100、B200 等资源价格形态。 vLLM 文档:PagedAttention、continuous batching、量化和 OpenAI 兼容 serving 资料。 Efficient Memory Management for Large Language Model Serving with PagedAttention:PagedAttention 论文,解释 KV cache 分页管理对吞吐的影响。 NVIDIA TensorRT-LLM 文档:NVIDIA GPU 上 LLM 推理优化、in-flight batching、paged KV cache 和量化资料。 Hugging Face Text Generation Inference 文档:TGI 部署和服务化资料。 SGLang 文档:SGLang serving、prefix caching、RadixAttention 和多 GPU 相关资料。 NVIDIA Triton Inference Server 文档:模型仓库、动态 batching、指标和生产推理服务资料。 KServe Generative Inference 文档:Kubernetes 上生成式推理服务、OpenAI 兼容接口和扩缩容资料。 Hugging Face bitsandbytes 文档:8-bit、4-bit 量化和低显存推理/训练资料。 vLLM Quantization 文档:vLLM 不同量化实现及硬件兼容说明。 llama.cpp 项目:GGUF、本地推理、多后端和低比特量化资料。 QLoRA: Efficient Finetuning of Quantized LLMs:QLoRA 论文,解释 4-bit 量化微调的工程意义。 The Llama 3 Herd of Models:Llama 3 技术报告,可参考预训练、后训练和部署前评测思路。 DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning:DeepSeek-R1 论文,可参考推理模型、蒸馏和成本质量权衡。
  • 0 赞同
    1 帖子
    4 浏览
    A
    面向 localaihub.com 的社区实践帖:目标不是炫技,而是搭出第一套能长期演进的本地 AI 生产栈。它可以先小,但边界要清楚;可以先单机,但接口要能升级;可以先内部使用,但安全和可观测不能缺席。 1. 先定义“本地 AI 第一套生产栈” 很多人说要搭本地 AI,第一反应是下载一个模型,启动一个聊天界面,能回答问题就算完成。这个阶段适合体验,不适合叫生产栈。生产栈至少意味着三件事:有稳定服务边界,有真实数据链路,有可追溯运行证据。 本地 AI 第一套生产栈,不一定要一开始就做 Kubernetes、不一定要多机推理、不一定要训练自己的模型,也不一定要完全离线。更合理的定义是:关键数据和关键推理尽量在自己控制的设备或内网中完成;应用通过统一接口访问模型、向量库和工具;权限、日志、监控、升级和回滚都有基本方案。 这套栈要解决的不是“我能不能和本地模型聊天”,而是“团队能不能把本地模型接进业务流程”。例如:上传内部文档后能问答;查询知识时能带来源;调用工具时不会越权;模型失误时能查到输入、检索片段和工具结果;换模型时应用不需要大改;敏感文档不会随手发到外部 API。 一个务实的第一版可以由六块组成:模型与模型网关、推理服务、嵌入与向量库、检索增强生成、工具调用服务、权限与审计。再加上前端或业务入口、观测和评测,就能形成可迭代底座。 2. 本地优先,不是本地迷信 本地优先的意思是:优先把敏感数据、核心知识库、常用推理和可控工具放在自己边界内。但它不是拒绝云模型,也不是所有任务都必须用本地小模型硬扛。 生产系统可以采用分层策略。低敏任务、日常问答、内部知识检索、批量摘要、离线处理走本地模型。高难推理、复杂代码、长文深度写作、关键多模态分析,可以经过脱敏后调用云模型。嵌入和向量库尽量本地化,因为它们会长期保存知识资产。写操作工具一定要本地受控,因为真正改变业务系统状态的是工具,不是模型文字。 本地优先的价值主要有五个。第一,数据可控,内部文档、日志、客户资料不必默认离开组织边界。第二,低边际成本,高频任务不用每次按 Token 付费。第三,低延迟,局域网推理和检索可以做到很快。第四,可定制,可以按业务知识、语言、权限和审计方式设计系统。第五,抗供应商锁定,模型和推理后端可以替换。 但本地优先也有成本。你要管理模型文件、显存、并发、版本、量化质量、日志、安全补丁和服务稳定性。不要把“本地”理解成天然安全、天然便宜、天然可靠。它只是把控制权拿回来,同时把责任也拿回来。 3. 第一套架构:从单机能跑到团队能用 建议第一套架构不要太散。可以按下面的服务边界搭。 入口层:一个 Web 应用、企业 IM 机器人、命令行工具或内部 API。它负责用户登录、任务提交、结果展示、引用展示和确认操作。 编排层:AI 后端服务。它负责会话、上下文构造、模型路由、RAG 流程、工具调用、状态管理、错误处理和审计日志。应用不要直接从前端访问模型服务,也不要让模型直接访问业务数据库。 模型网关层:对上提供 OpenAI 兼容或自定义统一接口,对下接 Ollama、llama.cpp、vLLM、LM Studio、LocalAI 或云模型。它负责模型选择、超时、重试、限流、流式返回和调用统计。 知识层:文档解析、切块、嵌入、向量库、全文索引、重排和引用管理。它负责把内部资料变成可检索、可权限过滤、可追溯的知识片段。 工具层:封装真实业务能力,例如查订单、查库存、创建工单、发邮件、执行脚本、读取文件。工具层自己做认证、授权、参数校验和审计,不把危险能力裸露给模型。 观测层:记录请求、模型版本、Token、检索片段、工具调用、耗时、错误、用户反馈。没有观测,就没有生产调试。 这个架构即使用一台 Mac mini、一个工作站或一台内网服务器也能起步。关键不是硬件规模,而是边界清楚。 4. 模型选择:别只看参数量 第一套本地 AI 栈通常至少需要三类模型:生成模型、嵌入模型、可选重排模型。 生成模型负责对话、总结、写作、规划和工具参数生成。选择时看中文能力、上下文长度、工具调用稳定性、结构化输出能力、许可证、显存占用和推理速度。7B 到 14B 模型适合轻量任务和低成本常驻;30B 级别模型在复杂理解和写作上更稳;70B 级别质量更好,但硬件门槛明显更高。量化模型可以降低资源占用,但要实测业务任务,不能只看榜单。 嵌入模型负责把文档和问题转成向量。它不需要会聊天,但要在你的语言和领域上检索准确。中文知识库不要随便用只在英文上表现好的嵌入模型。嵌入维度、最大输入长度、吞吐、许可证、是否支持多语言都要看。生成模型和嵌入模型可以来自不同系列,没有必要强行统一。 重排模型负责在初步召回后重新排序候选片段。第一版可以先不用,但一旦知识库规模变大、问题复杂、召回噪音多,重排会明显提升 RAG 质量。重排模型通常比大生成模型便宜,适合作为检索链路中的质量门。 模型选择不要迷信“最新”。应该建立自己的小评测集:二十个内部问答、十个长文摘要、十个工具调用、十个格式输出、十个拒答和权限样本。每次换模型都跑一遍,记录准确率、引用命中、格式合规、延迟和资源占用。 5. 推理后端:Ollama、llama.cpp、vLLM、LM Studio、LocalAI 怎么取舍 如果目标是最快跑起来,Ollama 很合适。它的模型拉取、运行和 API 调用简单,适合开发机、个人工作站和小团队试点。它支持聊天、嵌入、流式输出、结构化输出和工具调用等能力,足够做第一版内部应用。 如果你想深入控制模型文件、量化和底层推理,llama.cpp 是绕不开的项目。GGUF、CPU 推理、Metal、CUDA、多平台构建、server 模式、上下文参数、批处理参数,都能帮助你理解本地模型到底怎样消耗资源。很多桌面和边缘部署都站在 llama.cpp 生态上。 如果你要做多人并发服务,vLLM 更值得关注。它面向高吞吐服务端推理,提供 OpenAI 兼容接口,支持连续批处理、PagedAttention 等优化。它更适合有 GPU 服务器、有并发需求、有统一服务入口的团队。 LM Studio 对桌面用户友好,适合模型试用、人工对比和本地 OpenAI 兼容服务。它可以作为早期验证工具,但团队生产服务最好还是有可脚本化、可监控、可部署的后端。 LocalAI 的价值在于把多种本地推理能力包装成 OpenAI 兼容接口。对已有 OpenAI SDK 或上层应用来说,兼容接口能降低迁移成本。 实践建议是:个人开发用 Ollama 或 LM Studio 快速验证;需要精细优化时用 llama.cpp;需要生产并发时评估 vLLM;需要多后端统一时引入模型网关或 LocalAI。不要把应用代码绑死在某一个后端的特殊参数上。 6. 硬件与容量:从一台机器开始算账 本地 AI 的第一笔账是内存和显存。模型权重占用、KV Cache、并发请求、上下文长度、批处理大小都会消耗资源。一个 7B 4-bit 量化模型可能在普通消费级机器上运行;更大模型、更长上下文、更高并发就需要更强 GPU 或多机方案。 容量规划不要只问“这个模型能不能加载”。还要问:目标上下文长度是多少?同时有几个人使用?平均输出多长?是否需要流式返回?高峰时是否允许排队?一个请求最多跑多久?失败是否重试?如果 RAG 每次还要跑嵌入、向量检索和重排,这些也要算入延迟。 第一版可以给自己定一个明确目标:例如 5 个内部用户,单请求 8K 到 16K 上下文,首 Token 延迟 3 秒内,普通问答 20 秒内结束,每分钟 20 次请求以内。这个目标比“我要搭一个生产级平台”更容易落地。之后再根据日志扩容。 CPU 也不是完全不能用。小模型、嵌入、离线批处理、低频任务可以跑 CPU。Apple Silicon 的统一内存和 Metal 支持让 Mac 也适合很多本地 AI 试点。但如果要多人同时用大模型,GPU 服务器仍然更稳。 7. 统一模型网关:第一天就该有 很多团队早期让业务代码直接调用 Ollama、vLLM 或某个云模型。这样开发快,但后期会很痛:换模型要改业务,统计成本很难,超时重试散落各处,安全策略也不统一。 建议第一天就加一层模型网关。它可以很薄,但要承担几个职责。 第一,统一接口。上层只知道 chat、embeddings、rerank、structured、vision 等能力,不关心底层是 Ollama 还是 vLLM。 第二,统一模型路由。普通问答走本地小模型,复杂任务走本地大模型或云模型,嵌入走专用嵌入模型。路由策略可以从配置开始,不需要一开始就智能化。 第三,统一安全。模型网关不要接收前端直接传来的任意系统提示。系统规则、工具清单、输出 schema 应由后端构造。 第四,统一观测。每次调用记录模型名、版本、输入 Token、输出 Token、耗时、错误、重试次数。没有这些数据,就无法判断哪个模型真正好用。 第五,统一降级。模型不可用时,可以切备用模型、返回排队状态、提示人工处理,而不是整个应用崩掉。 模型网关不必复杂。一个后端模块、一组配置和几个适配器就能起步。关键是把模型后端从业务逻辑中解耦出来。 8. 知识库:文档不是直接扔给模型 本地 AI 最常见的生产场景是内部知识问答。很多失败案例都从“把文档直接塞给模型”开始。文档要进入知识库,至少经过解析、清洗、切块、嵌入、索引、权限标注和更新管理。 解析要保留结构。标题、章节、段落、表格、列表、代码块、图片说明、页码都可能影响答案。如果把 PDF 解析成一团乱文本,后面的向量检索很难补救。 切块要按语义,而不是固定每 500 字硬切。政策文档适合按条款切,技术文档适合按标题和代码块切,会议纪要适合按议题切,表格适合转成行级或主题级片段。每个片段要带来源信息:文件名、章节、页码、更新时间、文档版本、权限标签。 清洗不是删得越多越好。页眉页脚、重复版权声明、导航菜单、无意义空白可以去掉;但编号、单位、限制条件、例外条款不能丢。很多业务问答错在把“例外情况”清洗掉了。 更新也要设计。文档被替换后,旧向量要删除或标记失效;同一文档多版本要能区分;知识库要支持增量索引;失败任务要能重跑。否则模型会引用过期政策。 9. 向量库怎么选 第一套本地栈可以从四类向量存储中选。 pgvector 适合已经使用 PostgreSQL 的团队。它把向量检索放进熟悉的关系数据库里,权限、备份、事务、业务表关联都方便。规模不大时,pgvector 很务实。它支持 HNSW、IVFFlat 等索引方式,也能配合 SQL 做 metadata 过滤。 Qdrant 是专门的向量数据库,过滤能力、集合管理、payload 设计、相似度搜索体验都比较好。它适合希望把向量检索作为独立服务管理的团队。 Milvus 面向更大规模向量检索和复杂索引场景,生态完整,适合数据量更大、检索吞吐更高的团队。但第一版引入时要考虑运维复杂度。 Chroma 更适合快速原型和轻量应用,开发体验简单。对个人项目或早期试验很方便,但生产使用要关注持久化、并发、权限和运维方式。 选型时不要只看“哪个最强”。看你的现状:团队会不会运维 PostgreSQL?数据量是十万片段还是上亿片段?是否需要复杂过滤?是否要多租户?备份恢复怎样做?权限标签能不能进入检索过滤?第一套系统最怕为了未来规模引入当前运维不了的复杂度。 10. 检索链路:向量召回只是开始 一个生产 RAG 链路通常包含:查询改写、召回、过滤、重排、去重、上下文组装、答案生成、引用校验。 查询改写用于把用户口语问题变成更适合检索的查询。例如用户问“上次那个报销规则还算吗”,系统可能需要结合会话状态改写成“公司差旅报销规则 最新版本 生效日期”。但查询改写不能改变用户真实意图,改写结果也要记录。 召回可以多路并行。向量召回找语义相近内容;全文检索找精确关键词、编号、人名、产品名;metadata 过滤按部门、权限、时间、版本筛选;图谱或关系表可以处理组织结构、产品层级和流程依赖。 重排用于在候选片段中选出最相关的材料。它能缓解向量召回“看起来像但不回答问题”的问题。很多时候,召回 30 个、重排取 5 个,比直接向量取 5 个稳定。 上下文组装要控制顺序和密度。可以按相关性、来源权威性、时间新旧和章节结构排序。相邻片段来自同一文档时,可以合并。互相冲突的片段要同时呈现给模型,并要求说明冲突和依据。 引用校验是生产 RAG 的底线。答案中说出的关键事实,应当能对应到检索片段。做不到时,宁可回答“资料中没有找到明确依据”,也不要编。 11. 工具调用:把业务能力包装成可控工具 本地 AI 栈一旦接入工具,就从“问答系统”进入“行动系统”。这时风险也会放大。 工具应当由后端服务包装,不要让模型直接拼 SQL、直接访问文件系统、直接请求内网 URL 或直接运行 shell。模型只负责选择工具和生成参数,工具服务负责权限、参数校验、执行和审计。 工具可以按风险分级。0 级是纯计算工具,例如格式转换、日期计算。1 级是只读查询,例如查知识库、查订单状态。2 级是低风险写入,例如创建草稿、生成待办。3 级是有业务影响的写入,例如发送邮件、修改订单、提交审批。4 级是高风险操作,例如删除数据、执行部署、付款、变更权限。 不同级别要有不同策略。0 到 1 级可以自动执行,但要记录日志。2 级可以自动执行或弱确认。3 级必须给用户展示将要执行的内容并确认。4 级需要更严格的审批、权限和回滚方案。不要把“请确认”只写在提示词里,确认必须由产品和后端流程实现。 工具 schema 要短而清晰。参数类型、枚举、必填项、默认值都要明确。不要让模型传入自由文本再由工具猜。工具返回值也要干净:给模型业务需要的信息,不要返回密钥、内部堆栈、数据库字段全集和无关日志。 12. 权限边界:模型不是用户,也不是管理员 生产 AI 系统里最容易混乱的问题是权限主体。模型不是用户,模型也不是管理员。模型只是代表当前用户在当前会话中提出建议或请求工具执行。真正的权限判断必须基于用户身份、组织策略、资源标签和工具风险等级。 至少要有三层权限。 第一层是用户访问权限。用户能看哪些文档、哪些项目、哪些客户、哪些系统。RAG 检索必须在召回前或召回时过滤权限,不能先检索全部再指望模型不说。 第二层是工具执行权限。用户能调用哪些工具、能对哪些资源执行什么动作。即使模型生成了正确参数,如果用户没有权限,工具也必须拒绝。 第三层是模型上下文权限。哪些信息可以进入模型输入,哪些信息只能在工具层判断,哪些信息要脱敏。系统提示、密钥、内部策略不应随便进入可被模型复述的上下文。 还要注意代理链路。用户让 AI “帮我把这个文件发给同事”,AI 调用邮件工具时,发件人是谁?审批记录是谁确认的?失败重试会不会重复发送?这些都不是模型能独自负责的事情。 13. MCP 与工具生态:标准化有价值,但别裸奔 Model Context Protocol 把模型应用与工具、资源、提示之间的连接标准化。它的价值在于让不同客户端和服务端通过统一协议交换能力,减少每个应用单独集成工具的成本。对本地 AI 来说,MCP 很适合把文件、数据库、内部系统、浏览器、开发工具等能力接入智能体。 但标准化不等于自动安全。MCP server 暴露了什么工具,工具有没有认证,资源有没有权限过滤,客户端如何确认危险操作,日志怎样记录,这些仍然需要你设计。不要把随便下载的工具服务接入生产环境,更不要让它拥有超出任务所需的文件或网络权限。 一个稳妥做法是按环境分组:开发环境可以接入代码搜索、测试运行、本地文件读写;办公环境可以接入日历、邮件草稿、知识库;生产环境只接入经过审计的只读工具和有限写工具。每个 MCP server 都应有最小权限、版本记录和启停控制。 14. 上下文工程:生产栈里的中枢 模型、向量库、工具都准备好了,并不代表系统会聪明。真正把它们组织起来的是上下文工程。 一个本地 AI 请求的上下文可以包括:系统边界、用户目标、用户身份摘要、会话状态、检索证据、工具清单、工具结果、输出格式、风险提示。每一块都要有来源和优先级。 系统边界要短而硬,说明这个应用服务什么场景、不能做什么、遇到高风险操作怎样处理。用户目标要来自当前请求,不要让模型从很长历史里猜。检索证据要带来源,不可信文档中的内容不能当指令。工具结果要和用户输入分开,避免外部系统返回的文本诱导模型越权。输出格式要面向最终用户,不要露出内部字段、调试名和工具堆栈。 上下文还要预算。不要把全部历史、全部工具、全部检索片段都塞进去。第一版可以建立规则:保留最近几轮对话;远期历史摘要;检索片段最多 5 到 8 个;工具说明按任务动态选择;输出预留足够 Token。随着日志积累,再调整预算。 15. 安全:从提示注入开始,但不能停在那里 本地 AI 也会遭遇提示注入。攻击内容可以来自网页、PDF、邮件、聊天记录、知识库文档、代码注释、工具返回值。攻击者会让模型忽略系统规则、泄露隐藏提示、调用危险工具或输出敏感数据。 防护要分层。首先,外部内容都标记为不可信数据,而不是指令。其次,系统指令、用户请求、检索材料、工具结果在上下文中分区。再次,工具执行层强制权限,不因为模型“认为可以”就执行。最后,对高风险输出和动作设置人工确认。 除了提示注入,还要关注敏感信息泄露、过度代理、供应链风险、模型文件来源、向量库越权、日志泄露和不安全插件。下载模型要看来源和许可证;运行第三方工具要限制文件和网络权限;日志里不要保存明文密钥和过多个人信息;向量库备份也要按敏感数据管理。 OWASP LLM Top 10 对这些风险有系统分类,NIST AI RMF 提供治理框架。不要把它们当合规文档束之高阁,第一套本地栈至少应落实四个动作:最小权限、危险操作确认、敏感日志脱敏、运行链路可追溯。 16. 可观测性:没有 trace 就没有生产 AI 应用的 bug 很多不是传统异常,而是“回答不对”“引用错了”“没按权限拒绝”“工具调错了”“同样问题今天变差了”。没有 trace 很难定位。 建议每次请求记录以下信息:请求 ID、用户 ID 或脱敏主体、模型名、模型版本、输入 Token、输出 Token、延迟、检索查询、命中文档 ID、进入上下文的片段、工具调用名称、工具参数摘要、工具结果摘要、错误码、最终回答、用户反馈。 智能体任务还要记录步骤:计划、行动、观察、状态更新、停止原因。这样当用户问“它到底有没有查最新文档”时,你能回答;当工具误操作时,你能知道谁确认、传了什么参数、执行结果是什么。 日志要分级。调试环境可以保留更多上下文;生产环境要脱敏和限期保留;高敏工具要单独审计。观测不是把所有隐私倒进日志,而是留下足以追责和改进的证据。 17. 评测:用自己的任务压模型 本地 AI 栈搭起来后,最容易犯的错是用几句闲聊判断效果。生产评测应该来自真实任务。 可以先建一个小评测集:内部制度问答 20 条,技术文档问答 20 条,长文摘要 10 条,工具调用 10 条,结构化输出 10 条,权限拒绝 10 条,提示注入 10 条。每条样本记录期望答案、可接受来源、必须拒绝的行为、格式要求和风险等级。 评测要拆链路。RAG 错了,先看正确文档有没有召回;召回了再看重排是否排序靠前;进了上下文再看模型是否引用;模型答错再看提示和模型能力。工具调用错了,先看工具选择,再看参数,再看权限校验,再看执行结果。 不要只比较模型分数,也要比较成本和延迟。一个模型答案略好但慢三倍,可能不适合高频客服;一个小模型能稳定做分类和路由,就不必让大模型处理所有请求。 18. 部署方式:开发机、内网服务器、容器和队列 第一套本地 AI 栈可以从开发机起步,但要尽快迁移到稳定运行环境。开发机适合试验,内网服务器适合团队共享,容器适合部署一致性,任务队列适合长任务和批处理。 模型服务建议独立进程运行。不要把大模型加载在普通 Web 后端进程里,否则重启、内存泄露、并发阻塞都会互相影响。AI 后端通过 HTTP 或本地网络访问模型服务。 长任务要队列化。文档入库、批量嵌入、长报告生成、多步智能体执行,都不适合同步阻塞请求。队列任务要有状态:等待中、处理中、需要确认、失败、完成。用户界面展示进度,而不是让浏览器一直等。 配置要版本化。模型名、上下文长度、温度、检索 topK、重排开关、工具权限、系统提示版本,都应该可记录、可回滚。否则一次“顺手调参”就可能让线上效果变差却找不到原因。 备份要覆盖知识库和向量库。原始文档、解析结果、向量索引、metadata、工具审计日志都可能需要恢复。不要只备份代码。 19. 一条可落地的搭建顺序 第一步,确定场景。不要泛泛地做“企业 AI 助手”。选一个可验收场景,例如“内部制度问答带引用”“客服知识库助手”“研发文档问答”“本地日志诊断助手”。 第二步,选模型后端。个人或小团队先用 Ollama;需要更底层控制用 llama.cpp;需要并发推理用 vLLM。先保证 API 能稳定返回、能流式输出、能记录耗时。 第三步,做模型网关。统一聊天和嵌入接口,记录模型版本、Token、错误。即使只有一个模型,也先走网关。 第四步,搭知识库。解析十到五十份真实文档,按结构切块,写入 pgvector 或 Qdrant,保留来源和权限标签。 第五步,做 RAG 问答。查询、召回、重排、组装上下文、生成答案、显示引用。先把引用准确做稳,再追求回答漂亮。 第六步,接一个只读工具。比如查询工单、查订单、查本地配置。工具返回值要精简,调用要留日志。 第七步,接一个需要确认的写工具。比如创建草稿或待办。前端展示模型准备执行的内容,用户确认后后端执行。 第八步,加评测和观测。固定评测集、请求 trace、错误面板、人工反馈入口。此时才算从演示走向生产雏形。 20. 一个社区版最小配置建议 如果只是给小团队搭第一版,可以考虑这样开始。 硬件:一台内存较大的 Mac、Linux 工作站或带消费级 GPU 的服务器。先服务 3 到 10 个内部用户,不承诺大规模并发。 模型:一个中文能力较好的 7B 到 14B 指令模型作为常驻助手;一个嵌入模型做知识库;必要时加一个重排模型。复杂任务暂时允许手动切换更大模型或云模型。 推理:Ollama 起步,保留切换到 vLLM 的接口空间。模型网关用后端代码封装,不让业务直接依赖 Ollama 特有响应。 向量库:已有 PostgreSQL 就用 pgvector;没有数据库负担且想独立管理,就用 Qdrant。原始文档和切块结果都要保存,不要只保存向量。 后端:一个负责认证、会话、RAG、工具和日志的服务。工具调用必须从这里走。 前端:简洁聊天界面,但必须显示引用、工具确认、任务状态和失败原因。不要把内部字段、调试日志、模型原始 JSON 暴露给最终用户。 安全:默认只读;写操作确认;工具参数白名单;日志脱敏;知识库按用户权限过滤。 验收:至少 50 条真实评测样本;RAG 答案可追溯;工具调用可审计;模型服务重启后应用能恢复;知识库可重新索引。 21. 常见坑和修法 坑一:只搭聊天,不搭知识库。结果模型会凭训练知识回答内部问题。修法是先做 RAG,并要求答案带来源。 坑二:只做向量检索,不做权限过滤。结果用户可能检到不该看的文档。修法是权限标签进入 metadata,并在召回阶段过滤。 坑三:工具太强,确认太弱。结果模型误判就可能真实改数据。修法是工具分级、后端授权、前端确认和审计。 坑四:模型直接返回给用户内部错误。结果界面出现堆栈、字段名、服务名。修法是错误分层,对用户只显示可理解的失败状态,对工程日志保留细节。 坑五:没有固定评测集。结果每次换模型都靠感觉。修法是维护小而真实的样本集,持续跑。 坑六:上下文塞满历史。结果慢、贵、还容易偏题。修法是保留近期关键轮次,远期摘要,检索材料去重。 坑七:只备份向量库。结果重建困难。修法是同时保存原始文件、解析文本、切块 metadata、嵌入模型版本和索引配置。 坑八:把本地服务暴露到公网。很多本地推理服务默认没有强认证或面向内网使用,公网暴露会带来严重风险。修法是只走内网、VPN、反向代理认证或零信任访问,并限制来源。 22. 从第一套栈到长期平台 第一套生产栈稳定后,可以逐步升级。 模型层可以增加多模型路由:小模型做意图识别和分类,大模型做复杂推理,嵌入模型专门服务检索,多模态模型处理图片和 PDF 截图。推理层可以从单机 Ollama 升级到 vLLM 集群,加入队列、缓存和自动扩缩。 知识层可以增加混合检索、重排、权限继承、文档版本对比、知识过期提醒和引用可信度。工具层可以从几个只读 API 扩展到审批流、工单流、开发工具和运营工具,但每增加一个工具都要评估风险等级。 智能体层可以加入计划器、任务状态机、人类确认、长期记忆和多代理协作。这里要格外克制:智能体越复杂,越需要观测和测试。不要为了“像智能体”而牺牲可控性。 治理层可以增加模型评测面板、成本面板、质量反馈、红队测试、权限审计和数据保留策略。到这个阶段,本地 AI 就不只是一个项目,而是组织内部的 AI 基础设施。 23. 最后:先把链路做真 本地 AI 第一套生产栈的标准,不是页面多酷,也不是模型参数多大,而是链路是否真实。 用户问内部问题时,系统有没有真的检索有权限的文档?答案有没有引用?模型不知道时会不会承认不知道?工具调用前有没有检查权限?写操作有没有确认?失败有没有可理解状态?工程团队能不能根据 trace 找到问题?换模型后有没有评测对比? 这些问题都回答得上,哪怕第一版只服务十个人,也已经比一个漂亮聊天壳更接近生产。相反,如果只是把本地模型接到输入框,不能证明资料来源、不能控制工具、不能追踪错误,就还只是演示。 本地 AI 的长期价值来自可控和可演进。第一套栈要小而完整:模型能换,知识可查,工具受控,权限清晰,日志可追,评测能跑。先把这条链路做真,再谈更大的模型、更长的上下文和更复杂的智能体。 24. 权限矩阵:第一版也要写清楚 很多本地 AI 项目一开始只给内部同事使用,于是觉得权限可以以后再补。实际风险正好相反:内部系统往往接了更多文档、文件夹、数据库和脚本,一旦模型工具没有边界,误操作和越权读取更容易发生。 第一版可以先做一张简单权限矩阵。角色分成普通成员、项目管理员、知识库维护者、系统管理员。资源分成公开知识、部门知识、项目知识、个人文件、业务记录、系统配置。动作分成读取、索引、修改、删除、导出、调用工具、批准写操作。每个格子写清楚是否允许、是否需要确认、是否记录审计。 例如普通成员可以读取公开知识和自己所在项目的知识,但不能索引新文档;知识库维护者可以上传和更新文档,但不能调用业务写工具;项目管理员可以批准项目内的低风险写操作;系统管理员可以管理模型和工具配置,但不默认拥有查看所有业务内容的权限。这样设计能避免“管理员就是全知全能用户”的粗糙做法。 权限矩阵要落到检索和工具两条链路里。检索时,用户身份和资源标签必须参与过滤,不能先召回全部片段再让模型自觉隐藏。工具执行时,后端根据用户身份、工具风险等级和资源范围判断是否允许。模型生成的理由不能替代权限判断。用户说“我老板同意了”也不能替代系统里的审批记录。 25. 实操验收:怎么判断这套栈能交给团队用 交付第一版前,建议做一次端到端验收,而不是只看服务是否启动。 第一组验收是知识问答。选十个只有内部文档能回答的问题,要求答案带来源;选五个资料里没有答案的问题,要求系统明确说没有依据;选五个旧版和新版冲突的问题,要求引用新版;选五个跨部门权限问题,确认无权限用户检索不到受限资料。 第二组验收是工具调用。用只读工具查询一条真实记录,检查回答是否来自工具结果;让模型尝试查询无权限记录,检查是否被拒绝;创建一个草稿类写操作,检查确认前不会执行;确认后检查外部系统是否真的出现记录;重复提交同一请求,检查是否有幂等保护。 第三组验收是故障场景。停掉模型服务,看前端是否显示可理解失败;让向量库返回空结果,看模型是否停止编造;让工具超时,看任务状态是否可恢复;把一段提示注入文本放进知识库,检查系统是否仍按工具权限执行;重启后端,检查未完成任务是否能继续或明确失败。 第四组验收是观测。随机抽一条请求,看能否找到模型版本、检索片段、工具调用、耗时和最终回答;随机抽一个失败,看能否定位是模型失败、检索失败、工具失败还是权限拒绝。如果这些证据找不到,就说明还不能算生产栈。 26. 排障手册:回答错了先查哪一层 本地 AI 系统出错时,不要第一反应换模型。先按链路排查。 如果答案缺少关键事实,先看检索有没有召回正确片段。没有召回,就查文档是否入库、切块是否完整、嵌入模型是否适合中文、查询是否需要改写、metadata 是否把正确文档过滤掉。召回了但排序靠后,就加重排或调整混合检索。片段进了上下文但模型没用,再改提示和模型。 如果答案引用错误,先看引用 ID 是否在上下文组装时丢失,是否把多个片段合并后来源混乱,是否允许模型自由编造引用。引用应该由系统基于片段 ID 渲染,模型只选择或说明依据,不应凭空生成链接。 如果工具调错,先看工具描述是否重叠、参数 schema 是否太宽、工具数量是否一次暴露太多。再看后端是否做了权限和参数校验。工具层必须能拒绝危险调用,而不是把错误调用执行完再解释。 如果响应慢,先拆延迟:模型首 Token、生成总时长、嵌入耗时、向量检索、重排、工具接口、网络传输。长上下文和长输出通常是大头,重排和工具超时也常见。不要盲目加机器,先看是否塞入了过多历史和重复片段。 如果用户说“同样问题昨天能答今天不能”,要查模型版本、提示版本、知识库版本、索引时间、检索 topK、工具返回和权限标签有没有变化。生产栈的配置必须可追踪,否则问题会变成玄学。 27. 一套可执行的首月迭代节奏 第一周只做链路,不追求完美。跑通模型网关、一个生成模型、一个嵌入模型、一个向量库、十份真实文档和基础问答页面。验收标准是能回答、能引用、能记录日志。 第二周做质量。优化文档解析和切块,加入权限标签,建立五十条评测样本,引入混合检索或重排。验收标准是核心问题引用命中明显提升,错误问题能承认不知道。 第三周做工具。接入一个只读业务工具和一个草稿类写工具,完成工具分级、确认页、审计记录和失败处理。验收标准是工具结果可追溯,写操作确认前不会发生真实变化。 第四周做运营。补齐监控、备份、模型版本记录、知识库重建流程、用户反馈入口和排障手册。验收标准是服务重启不丢关键数据,模型或知识库升级后能通过评测比较效果。 这个节奏的重点是每周都留下可运行系统,而不是堆一堆未来架构图。第一套本地 AI 生产栈最怕目标过大、链路不真。按月推进,先让小团队每天用,再从真实反馈里扩展。 参考资料 Ollama Documentation - 本地模型运行、API、结构化输出、嵌入和工具调用相关文档。 llama.cpp GitHub Repository - GGUF、量化、本地推理和 server 模式的核心项目文档。 vLLM Documentation - 高吞吐推理、OpenAI 兼容服务、PagedAttention 和服务端部署资料。 LM Studio Docs - 桌面本地模型管理和 OpenAI 兼容本地服务文档。 LocalAI Documentation - OpenAI 兼容本地推理网关和多后端部署资料。 Qdrant Documentation - 向量数据库、payload 过滤、混合检索和部署文档。 Milvus Documentation - 大规模向量数据库、索引、混合检索和重排相关文档。 pgvector GitHub Repository - PostgreSQL 向量扩展,包含 HNSW、IVFFlat 和相似度查询说明。 Chroma Documentation - 轻量向量数据库和嵌入应用开发文档。 OpenAI Platform Docs:Function calling - 工具调用和参数 schema 的官方说明。 OpenAI Platform Docs:Embeddings - 嵌入模型和语义搜索的官方说明。 OpenAI Platform Docs:Structured Outputs - 使用 JSON schema 等方式约束模型输出的资料。 Model Context Protocol Specification - MCP 工具、资源、提示和授权相关规范。 OWASP Top 10 for LLM Applications 2025 - LLM 应用提示注入、数据泄露、供应链和工具风险分类。 NIST AI Risk Management Framework - AI 风险管理和生成式 AI 治理资料。 Hugging Face Transformers Documentation - 模型、分词器、推理和开源生态文档。 Hugging Face Text Embeddings Inference - 嵌入模型服务化和高性能推理资料。 OpenTelemetry Documentation - 分布式追踪、指标和日志的通用可观测性文档。 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks - RAG 代表论文,说明检索与生成结合的基本思路。 ReAct: Synergizing Reasoning and Acting in Language Models - 结合推理和行动的智能体方法论文。
  • 0 赞同
    16 帖子
    1 浏览
    明白,生态强归生态强,中文业务另算。
  • MoE 模型是不是天然更适合企业部署

    AI 工程讨论 moe model deployment
    15
    0 赞同
    15 帖子
    1 浏览
    明白。MoE 是候选,不是答案。