简介:部署大模型推理服务是AI Infra工作的核心落地环节。本文从Transformer推理的计算与访存特性出发,给出显存与算力的通用估算方法,再按资源规划、环境准备、服务配置、部署流程、上线验证、问题排查与运维优化的完整顺序展开,帮助开发与运维团队把大模型稳定、高效地交付到生产环境。
本文的目标很明确:帮助你把一个基于Transformer架构的大语言模型,从“放在磁盘上的权重文件”,变成“可对外稳定提供推理API的生产服务”。
部署完成后应达到的效果:
本文适合的读者:负责大模型上线的后端与算法工程师、基础设施与运维人员,以及做技术选型的架构师。
需要提前说明一个背景:大模型推理服务与传统Web服务部署最大的差异在于资源形态。它是“重资产、强状态”的服务——权重一次性占满显存,请求还携带随长度线性增长的KV Cache状态。因此资源规划必须前置到部署之前,而不是上线后再补。这也正是AI Infra工作的核心思维方式:站在模型与硬件的交界面上思考问题。理解了这一点,下文每一步才不会变成“照抄参数”。
不同场景对资源与配置的取舍差别很大,动手前先对号入座:
这一节是整篇的地基,对应AI Infra领域最核心的能力要求:把模型的每一步操作翻译成具体的计算量和访存量,再映射到硬件瓶颈上。
大模型生成分两步走,性能特征完全不同:
这个差异决定了优化方向完全不同:预填充慢,要补算力或控制并发;解码慢,要提高显存带宽利用率,典型手段是通过批处理让多个请求共享同一次权重读取。
前向传播中,每处理一个token的计算量约为“2×参数量”次浮点运算。以70亿参数模型为例,单个token前向约需1.4×10^10次运算;生成1000个token,仅解码阶段的计算量就约1.4×10^13次。用“目标生成速度×序列长度”反推算力需求,就是选型“几卡、什么档位”的直接依据。
推理服务的显存主要由四部分构成:
总显存 ≈ 模型权重 + KV Cache + 激活与中间缓冲 + 框架运行时开销
(1)权重显存 ≈ 参数量 × 每参数字节数:
| 精度 | 每参数字节 | 7B模型 | 13B模型 | 70B模型 |
|---|---|---|---|---|
| FP16/BF16 | 2字节 | 约14GB | 约26GB | 约140GB |
| INT8量化 | 1字节 | 约7GB | 约13GB | 约70GB |
| INT4量化 | 0.5字节 | 约3.5GB | 约6.5GB | 约35GB |
(2)KV Cache显存 ≈ 2(对应K与V) × 层数L × KV总维度d × 序列长度s × 并发批大小b × 每元素字节数
举一个假设性例子:某模型32层、KV总维度4096、FP16精度,则每token的KV Cache约为2×32×4096×2字节≈0.5MB;一条4096长度的请求约2GB,若同时服务8条这样的长请求,仅KV Cache就需16GB。这解释了为什么“把上下文长度默认拉满”经常导致线上OOM——KV Cache不是固定成本,而是随并发与长度线性膨胀的动态成本。
建议:部署前按“最大并发 × 峰值上下文长度”套用公式预估显存峰值,并预留15%~20%的余量。
解码阶段每生成一个token都要完整读一遍权重。7B模型的FP16权重约14GB,若部署实例显存带宽为1TB/s量级,单条请求的解码速度理论上限约为1000/14≈70 token/s。这解释了一个常见现象:GPU“看起来很闲”但生成速度就是上不去——瓶颈在带宽而非算力。提高批处理规模摊薄权重读取,是提升解码吞吐性价比最高的手段。
一套生产可用的推理服务,典型包含以下模块:
以下部署清单,缺一项都可能在后面返工:
| 类别 | 准备项 | 说明 |
|---|---|---|
| 资源 | GPU实例规格与数量 | 按第三节的公式确定显存容量与带宽档位 |
| 环境 | GPU驱动、容器运行时 | 驱动版本需与推理框架兼容,建议容器化保证环境一致 |
| 模型 | 权重文件与校验信息 | 下载后校验哈希,避免半截文件导致加载失败 |
| 框架 | 推理引擎镜像或安装包 | 优先选用经过验证的稳定版本 |
| 配置 | 服务配置文件 | 端口、批处理、上下文上限、超时参数 |
| 网络 | 负载均衡、域名与证书 | 内部调用走内网,对外暴露必须配证书与鉴权 |
| 安全 | API密钥、访问策略 | 密钥不落明文,从密钥管理服务读取 |
| 运维 | 监控接入、告警通道、回滚预案 | 上线前先演练一次“快速回滚” |
如果使用百度智能云等云平台,上述大部分组件(GPU云服务器、负载均衡、对象存储、日志与监控服务)都有对应的标准产品类别,按清单逐项开通即可,无需自行搭建全套基础设施。
按以下顺序执行,每一步都有明确的完成标志。
步骤1:资源评估与实例创建。 依据业务指标(目标QPS、平均与峰值输入输出长度、可接受的TTFT与生成速度)套用第三节的公式,得出显存与算力需求,创建对应规格实例。完成标志:实例可登录,GPU设备可被系统识别。
步骤2:运行环境初始化。 安装并确认GPU驱动与容器运行时,拉取或构建推理框架镜像。建议所有依赖固化在镜像内,避免“某台机器碰巧装了某个包才跑得通”的环境漂移。完成标志:容器内能正确识别到GPU设备。
步骤3:模型文件准备。 从对象存储下载权重到本地高性能盘(加载更快),校验完整性并固定目录路径。完成标志:文件数量与大小和发布说明一致,哈希校验通过。
步骤4:编写服务配置。 参考如下通用结构(字段命名以实际所用框架文档为准):
service:port: 8080api_key_ref: "从密钥管理服务读取的引用"model:path: "/data/models/example-7b"dtype: "bfloat16" # 或 int8 / int4 量化tensor_parallel_size: 1 # 单卡部署;多卡按卡数调整inference:max_batch_size: 32max_sequence_length: 4096max_queue_size: 64gpu_memory_utilization: 0.90timeout:request_timeout_s: 60
步骤5:启动服务与健康检查。 以常驻进程或容器方式启动,观察模型加载日志。完成标志:健康检查接口正常,模型加载完毕,显存占用符合预估。
步骤6:接入流量。 配置负载均衡与后端探活,绑定域名与证书;仅放行必要端口与来源白名单。完成标志:通过域名能拿到正常模型响应。
步骤7:压测与灰度。 用真实分布的请求做压测,再逐步放量。完成标志:性能指标达标、错误率为零、监控曲线平稳。
上线不是“能返回文字”就算成功,要从四个维度验收:
上线初期绝大多数问题集中在下表几类:
| 现象 | 根因分析 | 解决思路 |
|---|---|---|
| 启动即OOM | 权重加KV预留超过物理显存 | 换更大显存规格、启用量化、降低批处理或上下文上限 |
| 运行中OOM | 长请求增多导致KV Cache膨胀 | 限制单请求最大长度、降低并发、调低显存预留比例 |
| 首token延迟高 | 预填充计算量大且并发争抢 | 限制单卡并发、启用分块预填充、扩容算力 |
| 生成速度慢 | 解码阶段带宽瓶颈、批处理过小 | 提高批利用率、量化减少权重读取、选更高带宽规格 |
| 吞吐上不去 | 动态批处理未生效、负载不均 | 检查批处理配置、检查负载均衡是否把长短请求打匀 |
| 请求大量超时 | 容量不足或超时配置不合理 | 先看排队指标再决定扩容;校准队列与超时参数 |
通用排查方法:先看监控,把瓶颈归类到算力、带宽、显存三者之一;再看日志确认是否为配置问题;最后用压测复现并验证修复效果。
大模型推理服务的部署,本质上是一次“把模型特性翻译成硬件需求”的工程实践:先算清计算量、显存构成与带宽特征,再按“资源规划→环境准备→配置编写→服务启动→流量接入→压测验证”的顺序落地。最容易翻车的三个点是显存估算不足、验证只看功能不看性能、上线后缺少监控;收益最大的三个手段是批处理调优、量化与弹性伸缩。把这套流程完整跑通一遍,你也就掌握了AI Infra工作最核心的思维方式——在模型与硬件的交界面上解决问题。