做部署这块这几年,我最大的感触是:跑通一个大模型 demo 只是把门推开一条缝,真正让人掉头发的,是从一个人在笔记本上玩,变成一群用户在线上用。2026 年了,推理框架、云 GPU 方案多得眼花缭乱,可我依然看到很多团队卡在同一个路口——模型下载下来确实能出结果,一接生产流量就崩,或者月底一看账单直接怀疑人生。这篇指南我想把这几年实际趟过的路一次性说明白,从框架选型、云服务对比,到一套真正能扛住线上流量的大模型服务器部署流程,全部按我亲手验证过的方式写,不是拿官方文档拼凑的那种。
适合看这篇的人很明确:准备把开源大模型接到自己业务里的后端工程师、算法工程师,以及替公司做技术选型但预算和运维人手都有限的技术负责人。文章不会堆一堆无脑命令,而是把每个选择背后的原因讲透,让你看完能自己决策,而不是只会复制粘贴。
1. 部署前先想清楚:你的大模型到底为谁服务
1.1 三种典型部署形态,决定后面所有选择
很多人一上来就问“用什么框架部署”,这个顺序其实反了。先问一个问题:这个模型部署好之后,服务对象和流量形态是什么样?
第一种是在线交互服务。典型场景是智能客服、AI 助手、Copilot 这类需要用户实时等待回答的产品。这种形态最在意两件事:首字延迟(用户问完问题到看见第一个字的时间)和并发能力(同时能扛住多少个会话)。它对显存、推理引擎的要求最高,也是本文讨论的核心形态。
第二种是批量离线推理。典型场景是历史数据清洗、文档批量理解、定时跑一批日报总结。这种任务不要求秒级响应,跑几十分钟甚至几小时都行。对用量的优先级是吞吐量(每秒生成多少 token)和算力成本,可以容忍排队,甚至可以晚上再用便宜算力跑。
第三种是企业私有化交付。典型场景是银行、医疗、政企项目,核心诉求是数据和模型权重不出环境,交付物通常是一套包含模型文件、推理服务、管理界面的完整系统。这种形态要把精力花在离线部署包制作、权限隔离、一键升级这些交付细节上,而不是单纯追求单机性能。
这三种形态对框架、云资源、流程的要求完全不同。在线服务要把 vLLM、SGLang 这类高性能推理引擎聊透;批量离线可能只需要简单的批量脚本加定时任务;私有化交付则要额外做好模型加密、离线安装包、版本管理。想清楚自己是哪种,再看下面的内容才不会跑偏。
1.2 从需求倒推硬件预算:显存怎么算
很多团队栽的第一个跟头,是买完卡发现显存不够跑想要的模型。显存需求有一个大致的估算公式:
显存 ≈ 模型参数占用量 + KV Cache 占用量 + 推理过程临时开销
模型参数占用量很好算:权重文件多大,加载进显存基本就要多大。一个 7B 模型,fp16 精度下大约 14GB,用 4bit 量化后 4GB 左右就能跑;70B 模型 fp16 要 140GB,4bit 量化也需要 35-40GB。KV Cache 是推理过程中缓存历史 token 的中间结果,通常要额外留出 30% 左右余量。
举个真实例子。我帮一个团队规划过 32B 模型的服务,打算用 4bit 量化,那参数本身约占 18GB,再加 8k 上下文长度的 KV Cache,单卡至少要有 24GB 显存才跑得动推理,如果还要并发高一点,直接建议上双卡。很多人在 24GB 卡上跑 32B 模型遭遇 OOM,多半就是没算 KV Cache 的余量。
提示:模型推理的显存计算有个经验法则——先看量化后的权重大小,再乘以 1.3 到 1.5 作为运行期总需求。7B 4bit 模型用这个法则算出来约 6-8GB,正好低配个人电脑的显存预算。
1.3 部署资源从哪来:自购、云 GPU 还是 API 托管
硬件来源决定你的试错成本。自购服务器听起来资产化很诱人,但从下单到上架用上,到机器折旧、散热、故障维修,全都要自己扛。对于绝大多数没有专属机房运维团队的团队,我强烈建议从云 GPU 起步。
云资源里又分两种:一种是租裸的 GPU 云主机,自己在里面装驱动、部署推理框架,灵活度最高,也是本文主要讲的路径;另一种是直接用云厂商的托管推理服务,把模型传上去平台帮你拉起来,省事很多,但要接受平台限定框架和一定的黑盒。对需要快速验证业务的团队,托管服务是个好起点;对已经有工程能力的团队,自己掌控整套部署链路能获得更大的优化空间。
还有一种常被忽略的形态是 Serverless 方式发布推理服务,类似把模型封装成一个函数,按调用次数收费,零流量时不花显卡钱。实测下来这个形态很适合 demo 和原型验证,初期参数调优阶段非常划算,但流量稳定之后单价往往比长期租卡高,生产主力还是别指望它。
2. 推理框架选型:2026 年主流方案横向对比
2.1 第一梯队:vLLM、SGLang、TensorRT-LLM
2026 年这个时间点,生产环境在线推理的三巨头基本还是这三家,但各自的定位差异很大。
vLLM 是大多数团队应该默认选的框架。它有两个核心创新:Paged Attention 把显存管理做得像操作系统内存分页一样高效,Continuous Batching 让不同请求的动态生成过程拼车处理。这两个技术组合起来的效果是,GPU 利用率相比朴素的逐个推理提升了数倍。我从 vLLM 0.6 版本用到现在的 0.8、0.9,稳定性一年比一年好,社区生态也最成熟,新模型出来后通常最早就是它适配。
SGLang 更适合复杂推理场景。它的 RadixAttention 会自动复用请求之间相同的前缀部分。比如做多轮对话,用户前面说过的话不用重新算一遍;做思维链或复杂 Agent 场景,多个请求共享大段 system prompt 时,这套机制带来的提速非常明显。另外它对结构化输出、多模态输入的支持做得很细致。如果你的业务有大量长文档问答、复杂工具调用,SGLang 值得认真评估。
TensorRT-LLM 是为极致性能而生的。这是英伟达自家生态里的框架,通过 TensorRT 引擎把模型编译成高度优化的推理图,同硬件下延迟和吞吐往往能压得更低。但它把易用性牺牲得比较多:模型编译时间长,PyTorch 生态里的新特性支持滞后,调试问题也更痛苦。除非你的硬件规模大、团队有专门的推理优化工程师,或者业务对 P99 延迟极其苛刻,否则不建议第一步就选它。
2.2 轻量场景别杀鸡用牛刀:Ollama 和 llama.cpp
Ollama 这两年的流行程度有点被过度抬高了。它最大的价值是开箱即用——一条命令下载模型、一条命令起一个兼容 OpenAI 的 HTTP 接口,开发调试体验极好,个人电脑上玩大模型基本首选。我自己的开发环境就常驻一个 Ollama,用来快速验证提示词效果。但它的瓶颈在于:并发能力弱、缺少精细的调度控制、量化管理也比较黑盒,线上多用户并发一上来就明显吃力。
llama.cpp 则主打一个奇:纯 CPU 也能跑,ARM 设备也能跑,内存占用极低。边缘设备、树莓派、内网小工具这类场景它几乎是唯一解。但同样,它不适合作为高并发服务的底座。这里得给个明确建议:开发调试用 Ollama 没问题,线上在线服务至少要从 vLLM 或 SGLang 开始考虑。
有一个常见误区是“用 Ollama 部署好了就直接当生产”。一次我问一个团队线上服务用什么,他说 Ollama,再问压测结果,发现 5 个并发就把响应时间拖到了十几秒。所以:轻量框架可以作为生产的前置验证工具,但真要面对真实用户,把这个环节替换成高性能框架几乎是必经之路。
2.3 多模型规模化管理:Triton 与统一网关
当你的业务不是只有一个模型,而是同时有 Embedding 模型、对话模型、小分类模型、大生成模型,每个框架各起一套服务后,相互之间的管理就很混乱。NVIDIA Triton Inference Server 的价值就在于此:它可以作为统一的模型托管入口,同时挂载多个后端,不同的模型用不同框架加载,统一对外暴露一个服务端口。
配合 Triton 的模型版本管理,可以实现新模型和旧模型并行运行,灰度流量切到新版本,发现问题立即回滚。如果你面向企业客户做交付,Triton 这种“一个入口管所有模型”的方式也更容易讲清楚架构。
但 Triton 的使用门槛并不低,它的配置体系复杂,很多团队部署完 vLLM 就已经能满足需求,不一定非要再叠一层 Triton。我一般建议:单模型单场景直接上 vLLM,多模型多租户场景再加 Triton 或自建网关。工具没有绝对的好坏,匹配复杂度才是关键。
2.4 选型决策速查表
| 部署场景 | 推荐方案 | 核心理由 |
|---|---|---|
| 在线单模型聊天/客服 | vLLM | 生态成熟、并发吞吐出色、上手成本低 |
| 复杂推理链/多轮长对话 | SGLang | 前缀复用、结构化能力更强 |
| 极致性能/超低延迟需求 | TensorRT-LLM | 引擎优化最深,适合投入工程师调优 |
| 个人开发/本地验证 | Ollama | 一条命令起服务,模型管理最省心 |
| 边缘设备/纯 CPU 环境 | llama.cpp | 资源占用少,不受显卡限制 |
| 多模型统一托管 | Triton + 网关 | 统一入口、模型版本管理、灰度方便 |
另外要说明的是微调链路:LLaMA-Factory 是目前微调实操最顺手的工具之一,微调完导出权重之后,同样可以喂给 vLLM 起生产服务。很多人误以为微调和推理是两套分裂的系统,实际上它们是同一个链路的两头。
3. 云服务对比:GPU 从哪来,钱怎么花
3.1 主流云厂商 GPU 机型与计费方式对比
2026 年的云 GPU 市场选择非常丰富。国内主流的阿里云、腾讯云、华为云都有成熟的 GPU 云主机产品线,机型覆盖从入门级到顶配互联集群;另外还有一些以 GPU 资源为核心业务的云服务商,性价比往往突出,适合算法开发和中小业务。
计费方式大体分三种:按量付费、包年包月、竞价实例。按量付费灵活但单价高,适合短时测试;包年包月能获得较大折扣,适合长期在线服务;竞价实例是拿未被占用的闲置资源,价格可能降到按量的两三折,但随时可能被回收,只能用于可中断的批量任务,千万别把在线服务压在竞价实例上。
以 2026 年初的大致行情来说:一张 24GB 显存的 A10 或 L20,按量大概每小时 8-15 元;80GB 显存的 A100 或 H20,每小时 20-35 元区间浮动。这些价格可能随市场波动,实际以控制台报价为准。下面用这些数字做成本推导。
3.2 成本测算实例:一个 70B 模型跑满一个月要用多少钱
我们来算一笔具体账。部署一个 70B 模型做在线服务,fp16 精度要 140GB 显存,至少 4 张 80GB 卡;如果做 4bit 量化,两张 80GB 卡也能跑,但并发和上下文长度会受限。
支撑一个真实业务,我按 4 张 A100 规格估算:单卡按量约 25 元/时,4 卡就是 100 元/时。如果全天跑满 30 天,按量总价是 100 × 24 × 30 = 72000 元,实际业务负载很少全天满载,打五折也要 3 万多。如果选包年包月,单卡月租一般在 1.3-1.8 万元,4 卡一个月的成本在 5-7 万元区间,但这是敞开了用的额度。
把这笔账换算一下:如果按月成本 5 万,而这个服务每月只能带来几万元收入,那这个项目就该重新思考模型规模或部署方式了。我见过不少团队在 70B 模型上大动干戈,最后发现用户真实场景用 32B 甚至 14B 就够,月成本直接降了个量级。成本测算应该反过来驱动模型选型,而不是先选模型再硬扛成本。
3.3 云上部署的资源购买经验细节
买完实例不是直接就能用,几个细节很容易埋坑。
地域选择上,实例要和你的用户体验目标匹配。业务用户主要在哪个区域,服务器就尽量选离得近可用区,首字延迟能差出几十毫秒。跨地域调用虽然请求也能通,但每次都要走公网,延迟和故障概率都上来了。
存储方面,模型文件体积动辄几十 GB 到上百 GB,数据盘一定要选高性能云盘,并且闭店注意 IOPS。启动推理服务时加载模型需要大量读盘,磁盘吞吐不够会直接拖慢冷启动。我见过有人把模型放在默认的 40GB 系统盘上,结果磁盘写满了不说,加载模型都要半小时。
另外,镜像和快照是防呆关键。在完成一套环境配置后,立刻做一个自定义镜像或数据盘快照。这样即使实例被误删、被回收,也能快速还原。用竞价实例跑批量任务时,快照更是保命工具——实例随时可能消失,但数据和环境都在快照里。
3.4 云上托管推理服务与自建怎么取舍
各云厂商现在都在推托管模型推理平台,把模型文件传上去,平台负责拉框架、分配显存、暴露 API。这确实省心,适合以下情况:团队没有运维能力、流量波动剧烈需要自动扩缩容、上线的模型是常见开源型号无需深度定制。
但托管的代价也是实打实的:定价通常比自己租卡部署贵一截,框架更新依赖平台,想要调量化参数、做特殊的并发优化往往受限。我的经验是:原型和 MVP 阶段可以用托管服务快速跑通,用户量和调用量增长到一定程度后,迁到自己掌控的 GPU 云主机上,成本会明显下降。这个迁移动作本身不复杂,因为部署流程就是本文这套流程。
4. 生产级部署全流程:从一台空机器到稳定服务
4.1 环境准备:驱动、CUDA 与容器化
拿到一台 GPU 云主机,第一步先确认显卡驱动能正常识别。执行nvidia-smi能看到显卡型号、驱动版本和显存信息,说明驱动层面没问题。
接下来的关键决策是用容器承载一切。推理服务依赖的 CUDA、Python、框架版本多且相互约束,直接在宿主机上搞,一个月后大概率遇到环境地狱。容器化后,环境可以镜像化分发和回滚,生产环境的可复现性会好很多。
# 安装 nvidia-container-toolkit,让 Docker 能调用 GPU sudo apt-get update sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker # 验证容器内能否看到 GPU docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi注意:容器启动推理服务时,建议加上
--shm-size=16g或更大的共享内存设置,否则高并发下数据交换容易卡死。这个参数不加,单机并发稍高就可能出问题。
4.2 模型下载与本地验证
模型从哪来?常见的开源模型托管平台有 Hugging Face 和国内的 ModelScope。考虑到国内网络环境,ModelScope 下载速度通常有明显优势,而且很多主流模型都在上面同步了权重。我一般用 ModelScope 官方命令行工具或 Python SDK 下载。
下载后,模型文件会是一个目录,里面包含权重文件、配置文件、tokenizer 文件。先别急着上生产,在本地或开发机用一段小脚本加载模型试跑一次,确认权重复现正常、回复质量达标,再往服务器上放。这个验证步骤能省去很多部署后的排障时间——模型本身的问题就别带到服务层去排查。
4.3 用 vLLM 启动一个生产级推理服务
下面是一条经过生产验证的 vLLM 启动命令,我以 72B 模型 4 卡部署为例子:
docker run -d \ --gpus all \ --shm-size=16g \ -p 8000:8000 \ -v /data/models:/models \ -v /data/cache:/root/.cache \ vllm/vllm-openai:latest \ --model /models/Qwen2.5-72B-Instruct \ --tensor-parallel-size 4 \ --max-model-len 32768 \ --gpu-memory-utilization 0.9 \ --served-model-name demo-chat \ --api-key sk-demo-xxxx逐个解释关键参数,这些参数背后都是真实教训:
--tensor-parallel-size指定张量并行度。4 卡设成 4,让单层权重切到 4 张卡上并行计算。如果设置与卡数不匹配,要么显存不够,要么性能浪费,就是个必须对齐的参数。
--max-model-len是模型支持的最大上下文长度。设太大会让 KV Cache 预留空间过大,显存压力陡增;设太小会导致长文本对话截断报错。一般按业务真实需求设,不是越大越好。
--gpu-memory-utilization控制推理进程最多吃多少显存,0.9 表示预留 10% 显存给临时开销和模型加载过程。不要设 1.0,实测定满容易触发不可预期的 OOM。
--served-model-name是对外暴露的模型名。这个设计挺实用,相当于给内部模型起一个对外别名,后续换模型版本只要改内部映射,不必让调用方感知。
启动后先用 curl 验证一下服务是否正常返回:
curl http://localhost:8000/v1/chat/completions \ -H "Authorization: Bearer sk-demo-xxxx" \ -H "Content-Type: application/json" \ -d '{"model":"demo-chat","messages":[{"role":"user","content":"你好"}],"max_tokens":100}'如果返回结构里的choices字段正常输出内容,说明服务已经跑起来了。
4.4 统一 API 网关:鉴权、限流与路由
vLLM 自带一个 OpenAI 兼容的 API 端口,但它本身不解决鉴权、限流、多服务路由这些问题。对外提供服务前,建议在前面加一层统一网关。
网关层主要做三件事:第一,API Key 鉴权,防止服务被裸奔调用,尤其在大模型按 token 计费的业务里,没有鉴权的服务等于在给别人免费烧钱;第二,限流,按用户维度限制每分钟请求数,防止个别调用方打满显卡;第三,路由,把/v1/chat/completions的请求路由到 vLLM,把向量查询路由到 Embedding 服务,把图像生成路由到另外的模型,实现统一入口。
Nginx 足够应对大多数场景,更复杂的流量治理可以上 APISIX 这类专业网关。这个过程我踩过的坑是:网关层一定要配上请求体和响应体的超时时间,大模型生成长文本可能耗时几十秒到几分钟,默认的 60 秒超时会把正常的长输出也干掉。
4.5 监控与日志:没有可观测性就别谈生产
部署完成后最重要的一件事不是功能测试,而是把监控体系搭起来。推理服务不比普通 Web 服务,瞬时 GPU 状态变化对服务质量影响极大。
必须监控的指标有这么几类:
- 延迟分位数:重点关注首字延迟 P50/P95/P99,还有单 token 生成速度。P99 飙升通常意味着资源存在瓶颈或请求排队加剧。
- GPU 利用率与显存水位:利用率长期低于 20% 说明并发配置不足或请求量不够;显存长期高于 95% 则有 OOM 风险。
- 排队长度与拒绝数:并发请求超出框架处理能力时,请求会排队甚至超时,这两个指标直接反映容量是否够用。
- 错误码分布:5xx、429、上下文超长报错,分类统计能快速定位问题方向。
实现上,vLLM 原生暴露 Prometheus 指标端口,配合 nvidia-exporter 采集 GPU 指标,用 Prometheus 存储、Grafana 画盘。日志方面,每个请求至少要记录模型、输入 token 数、输出 token 数、耗时,这些数据既是排障依据,也是月底算成本的凭据。
4.6 高可用与交付扩展:多副本、升级、私有化
单实例部署永远存在单点风险。生产环境要有最基本的冗余:至少两个实例副本,前面加负载均衡。一个实例故障时,流量可以切到另一个,业务不受影响。vLLM 官方也支持多实例部署配合 k8s 的扩缩容,但复杂度高,团队规模不大时建议先用两台云主机加简单负载均衡的方式跑起来。
版本升级同样要注意平滑。模型更新或框架升级时,先在新实例启动最新版本并验证通过,再切换流量,切换后保留旧实例一段时间观察。不要直接在生产实例上原地升级,一旦失败现场完全没有回滚余地。
私有化交付场景,模型权重文件通常要拷到隔离环境内部。做法一般是:准备好离线模型文件、推理服务镜像、一键部署脚本,组成交付包;配合离线安装和校验流程,让客户环境内独立完成部署。整个过程不依赖外部网络,这也是私有化部署的核心合规要求。
5. 生产环境高频问题排查实录
5.1 GPU 利用率低,响应却还是慢
一个很常见又矛盾的场景:看监控 GPU 利用率只有 10%,但用户反馈响应慢。出现这种情况先别急着加卡,大概率是并发配置有问题。vLLM 的max_num_seqs参数控制每个 batch 能同时处理的序列数量,默认值往往偏低。在显存允许的情况下适当调大,把并发请求真正拼进同一个 batch,GPU 利用率才能拉起来。
另一个容易被忽略的原因是请求生成很短。大模型推理是增量式的,如果业务大量请求只问 7 个字要 50 个字的回答,GPU 每次只算一小段就结束,算力自然用不满。这种情况要优化的是业务侧的 prompt 设计和响应长度设定,而不是硬件。
5.2 显存 OOM 与 KV Cache 的博弈
OOM 排查时,优先确认两件事:gpu-memory-utilization是否设得过高,max-model-len是否虚大。这两个参数决定显存分配上限。如果实际业务平均上下文只有 4k,却把max-model-len设成 128k,KV Cache 的预留空间会白白吃掉大量显存。
vLLM 也有显存交换(swap 到 CPU 内存)的能力,理论上能缓解 OOM,但代价是速度骤降。生产环境尽量不要依赖 swap,宁可把模型量化级别调高一点,或者减少并发数,保持服务响应质量。
5.3 推理结果质量不稳定,不是服务故障
有段时间团队反馈线上回答“时好时坏”,我们排查了网关、网络、超时,最后发现是采样参数导致的。模型的 temperature、top_p 设置直接影响输出的随机性,默认值在创意对话场景或许合适,但在客服、知识问答场景会让答案飘忽不定。把 temperature 调到 0 到 0.3 区间,top_p 调低一些,回答的一致性和可预测性会好很多。
这里要区分一个概念:推理服务故障和模型效果问题是两个层面。服务故障表现为超时、报错、崩溃;模型效果问题表现为有输出但内容不对。排查思路完全不同,前者查框架和基础设施,后者要回到数据、微调、提示词优化。我在很多团队身上看到它们被混为一谈,浪费了大量时间。
5.4 微调与部署的衔接:从训练权重到新服务
用 LLaMA-Factory 微调完模型后,导出的是合并好的权重。要把它推向生产,流程是:推送到模型仓库或直接传到 GPU 服务器的模型目录 → 用新目录启动一个新的推理实例并验证效果 → 确认没问题后切换网关路由 → 保留旧实例作为回滚。整个过程在同一天内可以完成。
如果只是微调版本迭代,不需要动基础设施,改模型路径和重启服务就行。如果换了模型架构或 tokenizer,注意前端传参的上下文对齐方式可能变化,需要重新验证提示词格式。
写在最后的一点个人体会
部署这块做得越久,我越觉得上线前的充分验证比什么都重要。如果只让我给一条最朴素的建议,那就是:先用小模型把整套流程跑通,再换大模型。7B 模型都跑不稳的服务,直接换 70B 只会把问题放大十倍。另外多说一个小技巧:部署完成后,拿一个包含超长上下文、多轮对话、并发请求的测试集,每天定时跑一遍做健康检查,看起来笨,但效果比花里胡哨的告警规则都实在。大模型服务器部署不是一个一次性的体力活,而是一个需要持续维护的长期系统,把基础打牢,后面才有余力去优化体验和成本。