2、大模型部署基础:大模型推理架构、常用部署框架(如vLLM、TGI)、GPU资源管理基础

大模型部署并非简单地将模型权重加载到GPU上运行,而是一个涉及推理引擎选型、显存规划、请求调度、并发控制与硬件资源管理的系统工程。在生产环境中,多租户隔离的挑战往往不是模型本身,而是底层推理架构的资源共享与隔离边界如何划定。本章从推理架构的宏观视图出发,剖析主流部署框架(vLLM、TGI)的调度机制与显存管理策略,并深入GPU资源管理的基础概念,为后续章节的多租户隔离设计奠定技术认知基础。

大模型推理部署架构与资源管理全景 客户端请求入口 REST/gRPC API · 多租户请求汇聚 推理框架核心层(vLLM / TGI / TensorRT-LLM) 请求调度器 连续批处理 优先级队列 KV Cache管理器 PagedAttention 显存池化 张量并行引擎 TP/PP 切分 AllReduce通信 GPU 资源池与隔离域 GPU 0(租户A) 显存 40GB · SM 108 MIG 实例 / 时间片 独占或共享模式 GPU 1(租户B) 显存 80GB · SM 132 多实例 GPU 分区 算力/显存隔离 GPU N(租户N) 显存池化共享 cgroup + MPS 控制 QoS 保障与限额 核心链路:请求 → 调度 → KV Cache 管理 → GPU 算力/显存分配 → 推理输出

2.1 大模型推理架构的核心原理

大模型推理架构与传统深度学习推理有本质差异。传统CNN模型(如ResNet)前向传播一次即可得到结果,而大模型(Decoder-only架构)采用自回归生成方式:每生成一个token,需要将已生成的全部token作为输入重新计算。这种机制导致两个关键问题:一是计算量随序列长度线性增长,二是需要缓存历史token的Key-Value向量(即KV Cache)以避免重复计算。

从部署视角看,推理架构可拆解为四个核心模块:请求预处理(Tokenization、Padding、长度校验)、模型推理引擎(Transformer层计算、Attention机制、采样策略)、KV Cache管理(显存分配、复用、淘汰)、输出后处理(Detokenization、过滤、流式返回)。在多租户场景下,这四个模块都需要考虑资源隔离与公平调度。

关键认知:大模型推理的瓶颈通常不在算力(FLOPS),而在显存带宽和KV Cache容量。一个7B模型FP16权重约14GB,但处理32个并发请求、上下文长度2048时,KV Cache可能额外消耗20-40GB显存。因此,显存管理策略直接决定了部署的经济性和多租户隔离的可行性。

2.2 主流部署框架对比:vLLM、TGI与TensorRT-LLM

当前生产环境最常用的开源推理框架包括vLLM、Hugging Face TGI(Text Generation Inference)和NVIDIA TensorRT-LLM。三者各有侧重,理解其差异是选择多租户隔离方案的前提。

维度 vLLM TGI TensorRT-LLM
核心机制 PagedAttention(分页显存管理) Continuous Batching(连续批处理) TensorRT图优化 + 多精度量化
显存效率 极高(KV Cache按页分配,碎片率低) 高(动态批大小调整) 极高(编译期显存规划)
多租户支持 原生支持多LoRA适配器,可做租户级隔离 支持多模型加载,但租户级隔离需二次开发 底层优化好,但需自行封装调度逻辑
量化支持 GPTQ、AWQ、FP8 GPTQ、AWQ、EETQ INT4/INT8/FP8,权重量化最成熟
适用场景 高并发、多租户、动态长度请求 Hugging Face生态集成、快速部署 极致性能、固定shape、生产级优化

2.2.1 vLLM的PagedAttention机制

vLLM的核心创新在于将操作系统虚拟内存的分页思想引入KV Cache管理。传统推理框架为每个请求预分配最大长度的连续显存,导致大量浪费。PagedAttention将KV Cache划分为固定大小的块(通常16个token),按需分配,块与块之间通过索引表连接。这种设计带来三个直接收益:显存利用率提升至90%以上、支持请求级抢占与恢复、天然支持多租户的显存配额管理。

# vLLM 多租户部署示例(伪代码)
from vllm import LLM, SamplingParams

# 租户A:低延迟配置
tenant_a_params = SamplingParams(max_tokens=512, temperature=0.1)
llm_a = LLM(model="Qwen2.5-7B", gpu_memory_utilization=0.4, 
            max_num_seqs=16, enable_prefix_caching=True)

# 租户B:高吞吐配置
tenant_b_params = SamplingParams(max_tokens=2048, temperature=0.8)
llm_b = LLM(model="Qwen2.5-7B", gpu_memory_utilization=0.4,
            max_num_seqs=32, enable_prefix_caching=False)

2.2.2 TGI的连续批处理与Token流式返回

TGI由Hugging Face维护,其核心优势在于Continuous Batching:不再等待一个batch全部生成完毕才释放资源,而是每完成一个序列就立即插入新请求。TGI还内置了Token流式返回(Server-Sent Events),对交互式应用友好。在多租户场景中,TGI的max_batch_prefill_tokens和max_batch_total_tokens参数可用于控制不同租户的资源占用上限。

2.3 GPU资源管理基础

GPU资源管理是多租户隔离的物理基础。需要从显存、算力、带宽三个维度理解资源边界。现代数据中心GPU(如A100、H100、L40S)均支持多种虚拟化与分区技术,为租户隔离提供硬件级支持。

2.3.1 显存管理:从静态分配到池化

传统部署中,每个模型实例独占整张GPU显存,资源利用率低。生产级方案通常采用显存池化策略:将多张GPU的显存统一管理,按需分配给不同租户的推理实例。vLLM的gpu_memory_utilization参数控制KV Cache可用的显存比例,剩余部分留给模型权重和激活值。在多租户场景,建议为每个租户设置独立的显存上限,并预留10-15%的冗余应对峰值。

2.3.2 算力隔离:MIG、时间片与MPS

  • MIG(Multi-Instance GPU):A100/H100专属,将GPU划分为多个硬件隔离实例,每个实例拥有独立的SM、显存带宽和L2缓存。隔离强度最高,适合对安全性和稳定性要求极高的租户。
  • 时间片切分:多个租户共享同一GPU的SM,通过调度器轮转。实现简单但隔离性弱,一个租户的异常可能影响其他租户。
  • MPS(Multi-Process Service):NVIDIA提供的用户态进程调度,可限制每个进程的算力占比(通过CUDA_MPS_PINNED_DEVICE_MEM_LIMIT等环境变量)。适合中等隔离需求。
风险提示:MIG虽然隔离性好,但实例数量有限(A100最多7个实例),且无法动态调整大小。时间片切分虽然灵活,但存在上下文切换开销,实测在LLM推理场景下性能损失可达15-25%。选择隔离方案时需权衡隔离强度与资源利用率。

2.4 实战场景:基于vLLM的多租户GPU资源规划

某互联网公司需要为内部三个业务部门(客服、代码助手、内容生成)部署大模型服务,使用4张A100-80GB GPU。客服部门对延迟敏感(P95 < 500ms),代码助手需要长上下文(8K),内容生成追求吞吐量。初始方案是为每个部门独立部署一套vLLM实例,各占1张GPU,剩余1张作为冗余。

实际运行一周后发现:客服部门GPU利用率仅35%,内容生成部门在高峰期出现显存溢出(OOM),而代码助手部门因上下文长度波动大,KV Cache分配不均导致部分请求排队超时。分析根因:静态分配导致资源无法共享,且未考虑不同租户的负载特征差异。

优化方案调整为:

  1. 使用vLLM的--multi-lora模式,在2张GPU上部署一个共享基础模型实例,通过LoRA适配器区分三个租户,显存利用率提升至75%。
  2. 为客服租户设置max_num_seqs=8和max_tokens=256,保证低延迟;为代码助手租户开启enable_prefix_caching,利用前缀缓存加速重复代码片段;为内容生成租户设置max_num_seqs=64,最大化吞吐。
  3. 剩余2张GPU使用MIG切分为4个2实例+2个3实例,分别承载其他非核心业务和弹性扩容。

优化后,整体GPU利用率从52%提升至81%,客服P95延迟稳定在420ms,内容生成吞吐量提升2.3倍,且未再出现OOM。复盘经验:多租户部署的核心不是“分卡”,而是“分时、分显存、分优先级”,需要结合业务特征动态调整。

2.5 常见误区与总结复盘

  • 误区一:认为模型越大越好。7B模型在A100上可支持高并发,70B模型则需多卡张量并行,显存占用和通信开销剧增。多租户场景应优先选择满足业务需求的最小模型。
  • 误区二:忽略KV Cache的显存占用。仅按模型权重大小规划显存是常见错误。经验公式:KV Cache显存 ≈ 2 × 层数 × 注意力头数 × 头维度 × 序列长度 × 并发数 × 字节数(FP16为2字节)。
  • 误区三:所有租户使用相同配置。不同业务的延迟要求、上下文长度、并发模式差异巨大,应通过框架参数(如max_num_seqs、gpu_memory_utilization)做差异化配置。
  • 误区四:忽略CPU内存与GPU显存的数据传输。当请求预处理(Tokenization)或后处理(Detokenization)成为瓶颈时,应使用CPU预取和异步流水线。
经验总结:大模型部署的底层逻辑是“显存换算力、调度换效率”。多租户隔离的本质是在共享物理资源的前提下,通过框架级调度和硬件级分区,为每个租户提供可预期的服务质量(QoS)。建议在部署前先做负载压测,获取不同并发下的显存曲线和延迟分布,再制定隔离策略。