AI Infra、GPU、并行训练与推理引擎底层图谱
从 GPU、HBM、互联、显存账本、分布式训练到 vLLM / TensorRT-LLM / llama.cpp,理解大模型为什么需要专门的基础设施
Accelerator
GPU / NPU / TPU
→
Memory
HBM / 显存 / KV
→
Interconnect
NVLink / RDMA
→
Runtime
CUDA / Kernel
→
Engine
训练 / 推理引擎
→
Service
API / 网关 / SLA
| 层级 | 核心问题 | 常见组件 | 决定什么 |
| 硬件加速器 | 矩阵乘法和张量计算跑在哪里 | GPU、TPU、NPU、Tensor Core、CUDA Core | 峰值算力、支持精度、生态成熟度 |
| 显存与带宽 | 模型权重、激活、梯度、优化器状态和 KV Cache 放不放得下 | HBM、显存池、Paged KV、CPU Offload | 能跑多大模型、能承载多大 batch 和上下文 |
| 互联与通信 | 多卡多机之间数据怎样同步 | NVLink、PCIe、InfiniBand、RoCE、NCCL | 分布式训练效率、模型并行开销、扩展性 |
| 框架与运行时 | 模型计算图怎样变成高效内核 | PyTorch、CUDA、Triton、cuDNN、FlashAttention | 开发效率、内核性能、硬件兼容 |
| 训练 / 推理引擎 | 如何调度 batch、显存、KV Cache 和多模型服务 | DeepSpeed、FSDP、Megatron、vLLM、TensorRT-LLM、TGI、SGLang、llama.cpp | 吞吐、延迟、成本、稳定性 |
GPU 擅长什么
- 大规模并行矩阵乘法、卷积和张量计算
- 同一类计算在大量数据上重复执行
- FP16 / BF16 / FP8 / INT8 / INT4 等低精度加速
- 通过 Tensor Core 把大模型核心算子吃满
为什么 HBM 很关键
- 大模型不是只缺算力,也常常缺显存容量和带宽
- 权重、激活、梯度、优化器状态和 KV Cache 都会吃显存
- Decode 阶段常常受内存带宽限制,而不是纯计算限制
- 显存放不下时,性能会被 offload 和通信迅速拉垮
互联为什么贵
- 单卡放不下或跑不快时,就必须多卡多机协同
- 训练要同步梯度,模型并行要频繁交换中间结果
- 通信慢会让 GPU 等数据,峰值算力变成纸面数字
- 集群效率往往由最慢的通信链路决定
一个直觉
AI Infra 的核心不是“买很多卡”,而是让计算、显存、带宽和通信匹配。某些任务算力是瓶颈,某些任务显存是瓶颈,某些任务通信是瓶颈;优化前先判断瓶颈在哪。
| 显存对象 | 训练时 | 推理时 | 治理动作 |
| 模型权重 | 必须常驻,参数越大占用越高 | 必须常驻,量化可显著降低占用 | 低精度、量化、模型并行、权重共享 |
| 激活值 | 前向中间结果要给反向传播使用,占用很大 | 通常不需要保存完整反向激活 | Activation Checkpointing、重计算、序列并行 |
| 梯度 | 每个参数通常对应梯度,占用接近权重量级 | 没有训练梯度 | 梯度累积、ZeRO / FSDP 分片 |
| 优化器状态 | Adam 等优化器状态可能是权重的数倍 | 没有优化器状态 | ZeRO、CPU Offload、低精度优化器 |
| KV Cache | 训练中不是在线服务的主要账本项 | 长上下文和高并发下很可能成为主瓶颈 | PagedAttention、上下文控制、长短请求分池 |
关键判断:
训练显存主要被权重、激活、梯度和优化器状态吃掉;推理显存主要被权重和 KV Cache 吃掉。很多人把训练和推理混在一起谈,容易把优化方向弄反。
Data Parallel
- 每张卡放一份模型,处理不同数据切片
- 反向传播后同步梯度
- 实现直观,适合模型能放进单卡或单节点的场景
- 瓶颈是梯度同步和冗余显存
Tensor Parallel
- 把单层矩阵或张量切到多张卡上
- 解决单层参数太大放不下或算不快的问题
- 层内通信频繁,依赖高速互联
- 常见于超大模型训练和推理
Pipeline Parallel
- 把不同 Transformer 层放到不同设备
- 像流水线一样让 micro-batch 穿过各阶段
- 能容纳更深更大的模型
- 风险是流水线气泡和调度复杂度
ZeRO / FSDP
- 把参数、梯度和优化器状态分片到多卡
- 减少每张卡的显存冗余
- 适合大模型微调和训练
- 代价是通信和实现复杂度增加
| 问题 | 优先考虑 | 要小心 |
| 模型能放进单卡,但训练太慢 | Data Parallel、梯度累积、更大 batch | batch 过大导致泛化或收敛问题 |
| 模型单卡放不下 | FSDP / ZeRO、Tensor Parallel、Pipeline Parallel | 通信开销吃掉扩展收益 |
| 激活占用太高 | Activation Checkpointing、序列长度控制 | 重计算会增加训练时间 |
| 多机扩展效率差 | 检查通信、数据加载、负载均衡和 checkpoint | 只加机器可能让浪费更大 |
| 引擎 / 方向 | 核心优势 | 适合场景 | 关注点 |
| vLLM | PagedAttention、连续批处理、OpenAI 兼容服务生态 | 服务器端高吞吐 LLM 服务 | KV Cache 水位、batch 调度、模型兼容 |
| TensorRT-LLM | NVIDIA 生态内深度优化,内核融合和低精度优化强 | NVIDIA GPU 上追求极致性能的生产推理 | 构建复杂度、版本兼容、调优成本 |
| TGI | 面向文本生成服务的成熟部署形态 | 通用开源模型服务、团队标准化部署 | 吞吐、显存、监控和模型支持范围 |
| SGLang | 面向复杂生成程序、结构化推理和高性能 serving | Agent、结构化输出、复杂调用模式 | 程序化编排、缓存复用、服务稳定性 |
| llama.cpp / GGUF | CPU / 本地 / 端侧友好,量化生态强 | 本地助手、边缘设备、开发调试、轻量部署 | 吞吐上限、硬件差异、模型尺寸限制 |
推理引擎优化的不是“模型聪明程度”
推理引擎主要优化显存管理、batch 调度、内核执行、低精度、并发和服务接口。同一个模型换引擎,可能更快、更稳、更便宜,但不会自动解决幻觉、业务正确性和任务质量问题。
| 维度 | 训练集群 | 推理集群 |
| 目标 | 在可接受时间内稳定完成训练或微调 | 以低延迟、低成本、高可用服务在线请求 |
| 负载形态 | 长时间大批量、同步计算、容错和 checkpoint 重要 | 请求长度不均、峰谷明显、P95 / P99 和队列重要 |
| 显存重点 | 权重、激活、梯度、优化器状态 | 权重、KV Cache、batch 和上下文长度 |
| 通信重点 | 梯度同步、模型并行、checkpoint 和数据加载 | 多副本路由、模型分片、流式返回、网关调度 |
| 治理指标 | MFU、loss 曲线、吞吐 tokens/s、失败恢复时间 | TTFT、tokens/s、P95 / P99、GPU 利用率、单位请求成本 |
| 决策 | 优先选它的信号 | 不要忽略 |
| 闭源 API | 业务还在验证、质量要求高、团队不想运维 GPU、合规允许数据出域 | 供应商锁定、价格变化、限流、数据边界、可观测性不足 |
| 自部署开源模型 | 数据不能出域、调用量足够大、需要定制模型或控制推理栈 | GPU 运维、模型评测、容量规划、版本升级和安全补丁 |
| 量化 | 显存不够、decode 带宽瓶颈、成本压力大、任务对精度退化不敏感 | 代码、数学、长文本和专业任务必须做回归评测 |
| 模型分片 | 模型单卡放不下,或需要更大模型支撑核心任务 | 通信开销、部署复杂度、故障面扩大 |
| 小模型路由 | 大量请求是分类、提取、改写、简单问答 | 任务识别错误会带来质量退化,必须配 fallback |
比较稳的路线:
先用 API 或托管服务验证产品价值和任务评测,再根据调用量、数据边界、成本曲线和质量回归决定是否自部署。不要因为“开源免费”忽略 GPU、运维、监控、评测和故障处理成本。
| 症状 | 先看指标 | 可能瓶颈 | 常见动作 |
| 首 token 慢 | TTFT、输入 token、prefill 时间、队列长度 | 上下文太长、prefill 拥塞、batch 等待 | 上下文压缩、Prompt Cache、分池、调度策略 |
| 流式输出慢 | decode tokens/s、输出 token、GPU 带宽、KV Cache 水位 | decode 受带宽限制、batch 过重、长输出 | 量化、输出约束、推测解码、模型降级 |
| 吞吐上不去 | GPU 利用率、batch size、显存占用、请求长度分布 | 调度低效、显存碎片、长短请求混跑 | 连续批处理、Paged KV、长短分流、扩副本 |
| 成本失控 | 单位请求 token、模型命中比例、GPU 空闲率、失败重试 | 模型过大、上下文过长、缓存不足、路由粗糙 | 小模型路由、缓存、Prompt 瘦身、预算告警 |
| 多机效率差 | 通信时间、NCCL 错误、网络带宽、straggler | 互联不足、负载不均、数据加载慢 | 拓扑优化、并行策略调整、数据管线优化 |
Infra Trace 证据包
模型服务的慢、贵、不稳要能落到集群、引擎、调度、缓存、队列和容量计划上,否则只能在模型和硬件之间来回猜。
| 证据节点 | 必须记录字段 | 用来排查什么 |
| cluster_snapshot | cluster_id、gpu_type、driver_cuda_version、engine_version、image_digest | 同一模型在不同集群或镜像上表现不一致的原因 |
| scheduling_trace | batch_policy、queue_time、request_length_bucket、priority_class、timeout_policy | TTFT、P95 和长短请求混跑造成的尾延迟 |
| memory_cache | kv_cache_policy、cache_hit_rate、peak_memory、oom_event_id、fragmentation_signal | KV Cache、显存碎片和 OOM 是否拖垮服务 |
| capacity_plan | gpu_util、tokens_per_second、cost_per_1k_tokens、capacity_plan_id、scale_trigger | 扩容、降级、路由和预算策略是否有数据依据 |
误区:GPU 利用率高就一定好
高利用率可能牺牲 TTFT 和 P95。离线任务更看吞吐,交互式产品更看首 token、流式平滑和尾延迟。
误区:自部署一定更便宜
只有调用量、团队能力、模型质量和资源利用率都匹配时,自部署才可能便宜。否则 GPU 空闲和运维成本会吞掉优势。
误区:显存够了就能跑得快
显存容量只回答“放不放得下”,性能还要看带宽、内核、batch、通信和调度。
误区:训练方案可以直接套到推理
训练关心梯度、优化器和 checkpoint;推理关心 KV Cache、队列、尾延迟和服务可用性。两套账本不同。
误区:量化只影响速度不影响质量
量化可能改变长文本、代码、数学和工具参数质量。没有任务级评测,就不知道省下的钱买来了什么退化。
误区:换推理引擎能解决所有问题
引擎解决执行效率,解决不了错误上下文、坏 Prompt、低质量 RAG、缺失评测和产品流程问题。