2、大模型部署基础:常见部署架构与推理服务框架
大模型从训练完成到真正对外提供服务,中间隔着一条名为“部署”的鸿沟。模型权重文件只是静态资产,而部署则是将模型权重、推理引擎、硬件资源、调度策略与业务接口有机整合的系统工程。本章聚焦于大模型部署的两大基石:一是部署架构的选型逻辑(单机、分布式、微服务),二是主流推理服务框架(vLLM、TGI、TensorRT-LLM)的定位与适用边界。理解这些基础,后续的日志采集、链路追踪与故障调试才有明确的落点。
2.1 部署架构的核心原理与选型逻辑
部署架构的本质是在资源成本、服务性能、运维复杂度三者之间寻找平衡点。单机部署将所有组件压缩在一台物理机内,依赖单机GPU显存与计算能力;分布式部署将模型切分到多节点,通过高速互联(如NVLink、InfiniBand)协同计算;微服务部署则进一步将推理服务、预处理、后处理、API网关等拆分为独立进程,通过容器化与编排系统(如Kubernetes)管理生命周期。
选型时需回答三个关键问题:模型能否装入单卡显存?(决定是否需要张量并行);单机吞吐能否满足业务峰值?(决定是否需要水平扩展);团队是否有能力运维分布式系统?(决定微服务化深度)。下表对比了三种架构的核心差异:
| 维度 | 单机部署 | 分布式部署 | 微服务部署 |
|---|---|---|---|
| 硬件规模 | 1~8卡单机 | 多节点多卡 | 多节点+CPU/GPU混合 |
| 典型延迟 | 低(<100ms) | 中(100~300ms) | 中高(含网络开销) |
| 吞吐扩展 | 受限于单机总线 | 通过并行策略扩展 | 通过副本数水平扩展 |
| 故障域 | 单点故障 | 节点故障影响面大 | 故障隔离性好 |
| 运维复杂度 | 低 | 高(需并行策略配置) | 中高(需容器编排) |
| 适用场景 | 开发调试、内部工具 | 超大模型(>100B) | 生产环境、多租户 |
实际生产环境常采用混合架构:前端通过微服务网关路由请求,后端将推理服务以分布式方式部署,再通过水平扩展多个推理副本支撑高并发。这种分层设计既保证了弹性,又兼顾了性能。
2.2 推理服务框架:vLLM、TGI、TensorRT-LLM
推理框架负责将模型权重加载到显存、执行前向计算、管理KV Cache、调度请求并返回结果。不同框架在显存管理、批处理策略、算子优化上各有侧重,直接影响吞吐与延迟。
2.2.1 vLLM:PagedAttention驱动的吞吐利器
vLLM的核心创新是PagedAttention,它将KV Cache划分为固定大小的块(Page),按需分配,类似操作系统虚拟内存管理。传统框架需为每个请求预分配最大长度显存,导致大量浪费;vLLM通过块级管理将显存利用率提升至90%以上,并支持连续批处理(Continuous Batching)——当一个请求的生成结束时,立即插入新请求,无需等待整个批次完成。
vLLM的日志输出包含详细的调度信息,例如:
INFO 06-10 14:23:45 scheduler.py:312] Added request req-001, prompt_len=128, max_tokens=512
INFO 06-10 14:23:45 scheduler.py:356] Running batch #1 with 8 requests, total_tokens=2048
INFO 06-10 14:23:46 model_runner.py:210] Generated 64 tokens in 0.82s, throughput=78.0 tok/s
这些日志是排查吞吐瓶颈的第一手资料——若total_tokens远低于显存容量,说明批大小未打满;若throughput波动剧烈,需检查是否出现显存碎片或CPU Offload。
2.2.2 Hugging Face TGI:生态集成与快速部署
TGI(Text Generation Inference)由Hugging Face维护,原生支持HF生态的模型格式与分词器,内置模型并行(Model Parallelism)、动态批处理、量化(GPTQ/AWQ)等功能。TGI的定位是“开箱即用”,通过Docker镜像即可拉起服务,并提供RESTful API与gRPC接口。
TGI的日志结构清晰,包含请求级追踪信息:
2025-06-10T14:23:45.123Z INFO generate: request_id=abc123, model=gpt2, prompt_tokens=64, generated_tokens=128
2025-06-10T14:23:45.456Z INFO batch: batch_size=16, max_tokens=2048, queued_requests=3
TGI适合快速原型验证和中小规模生产,但极致性能优化不如TensorRT-LLM。若团队已深度使用HF生态,TGI是降低集成成本的首选。
2.2.3 TensorRT-LLM:NVIDIA生态的极致性能
TensorRT-LLM是NVIDIA官方推出的推理框架,它将模型编译为TensorRT引擎,针对Ampere、Hopper、Blackwell架构GPU做深度算子融合与内核调优。支持FP8/INT4量化、KV Cache量化、Inflight Batching(请求级调度),在相同硬件上吞吐可比vLLM提升30%~50%。
但代价是编译时间长(大模型需数小时)、灵活性低(模型结构需符合TRT支持范围)、调试困难(引擎内部黑盒)。TensorRT-LLM的日志以引擎加载和推理统计为主:
[TensorRT-LLM][INFO] Loaded engine from /models/llama2-7b-trt.engine, max_batch_size=64
[TensorRT-LLM][INFO] Inference batch: 16 requests, total_input_tokens=1024, total_output_tokens=2048
[TensorRT-LLM][INFO] GPU memory usage: 12.4GB / 24.0GB, KV cache: 4.2GB
选择TensorRT-LLM的前提是:硬件为NVIDIA GPU、模型结构稳定、追求极致性能且有专门的性能优化工程师。
2.3 框架选型对比与决策矩阵
三个框架并非互斥,实际项目中常组合使用。下表从多个维度给出选型建议:
| 评估维度 | vLLM | TGI | TensorRT-LLM |
|---|---|---|---|
| 吞吐性能 | 高 | 中高 | 极高 |
| 显存效率 | 极高(PagedAttention) | 高(动态批处理) | 高(量化+KV Cache优化) |
| 模型兼容性 | HF模型直接加载 | HF模型直接加载 | 需转换为TRT引擎 |
| 部署复杂度 | 低(pip install) | 低(Docker) | 高(编译+调优) |
| 日志/追踪 | 结构化日志,易集成 | JSON日志,含请求ID | 引擎级日志,需二次解析 |
| 社区活跃度 | 极高 | 高 | 中高(NVIDIA主导) |
| 最佳场景 | 在线高并发、长文本 | 快速集成、HF生态 | 固定模型、极致性能 |
2.4 实战场景:从单机到微服务的演进路径
某智能客服团队部署一个7B对话模型,初始阶段使用单机单卡(A100 80G)运行vLLM,日请求量约5万次。随着业务增长,日请求量攀升至50万次,单机吞吐达到瓶颈(峰值时请求排队超过3秒)。团队决定演进为微服务架构:
- 拆分服务:将请求预处理(意图识别、敏感词过滤)与推理服务分离,前者部署在CPU节点,后者保留GPU节点。
- 水平扩展:将vLLM推理服务容器化,通过Kubernetes部署3个副本,前端使用Nginx做负载均衡。
- 引入TGI作为备用:保留一个TGI服务作为降级方案,当vLLM节点故障时自动切换。
- 监控与日志:在网关层记录请求耗时、排队长度、GPU利用率,在推理层记录每次请求的prompt_tokens与generated_tokens。
演进后,系统峰值吞吐从80 QPS提升至350 QPS,P95延迟从2.1秒降至0.8秒。复盘发现,日志中“排队请求数”是扩容的关键指标——当该值持续超过10时,应触发自动扩容。
2.5 常见误区与总结复盘
在部署架构与框架选型中,团队常陷入以下误区:
- 盲目追求分布式:7B模型单卡即可部署,强行使用张量并行反而增加通信开销,吞吐下降20%以上。
- 忽略框架日志差异:vLLM的
scheduler.py日志与TensorRT-LLM的引擎日志格式完全不同,统一日志采集需在框架层做适配。 - 只关注吞吐不关注延迟分布:平均延迟低不代表P99延迟可接受,需在日志中记录分位数指标。
- 将框架与架构混为一谈:vLLM可以部署在单机,也可以部署在分布式集群;微服务架构同样可以使用TensorRT-LLM作为推理引擎。架构解决资源组织问题,框架解决计算效率问题。