AI Infra 高频问题¶
回答技术问题时用“定义 → 为什么 → 关键路径 → 权衡 → 验证”的结构,通常比堆术语更有说服力。
训练¶
DDP 和 DataParallel 有什么区别?¶
DDP 通常是一进程一设备,通过 process group 做梯度同步,可跨节点;DataParallel 是单进程多线程/多设备的封装。PyTorch 官方推荐 GPU 训练优先使用 DDP。回答时补充:DDP 不负责自动切分输入,用户通常配合 DistributedSampler。
DDP 为什么要做 all-reduce?¶
每个 rank 在不同 mini-batch 上得到局部梯度。all-reduce 聚合梯度并让所有 rank 获得一致结果,随后各 rank 独立执行同样的 optimizer step,模型副本保持一致。bucket 允许梯度计算与通信重叠。
FSDP 解决什么问题?代价是什么?¶
它分片参数、梯度和优化器状态,降低单 rank 常驻显存;计算前后通过 all-gather/reduce-scatter 取回和重新分片。代价是通信、wrap/checkpoint/恢复复杂度和潜在 CPU 内存峰值。
TP、PP、DP 怎么选?¶
模型单卡能放下先考虑 DP;状态放不下用 FSDP;单层或整体仍太大时引入 TP/PP。把通信敏感的 TP 放在节点内快互连域,跨节点做 DP 是常见起点,但最终由拓扑与 profile 决定。
为什么 GPU 多了扩展效率会下降?¶
计算分摊变小而通信/同步相对变大;straggler、网络拓扑、数据供给和 global batch/算子形状也会改变。用 step breakdown、per-rank timeline、collective 带宽和 scaling efficiency 验证。
GPU 与通信¶
GPU utilization 95% 是否表示性能很好?¶
不一定。它可能只表示采样窗口内 kernel 经常活跃。还要看 SM/Tensor 活跃、显存带宽、kernel 效率、功耗、通信等待,以及端到端 tokens/s 或 step time。
PCIe、NVLink、RDMA 分别是什么角色?¶
PCIe 是通用设备互连;NVLink/NVSwitch 提供 GPU 间更高带宽的专用互连;RDMA 让网络设备以低 CPU 参与访问远端内存,GPUDirect RDMA 可在满足条件时直接连接 NIC 与 GPU 内存路径。回答要落到拓扑和数据路径,不只比较标称带宽。
NCCL hang 怎么查?¶
先找首个异常 rank,确认 collective 序列与 tensor shape 一致;再查进程/GPU/NIC 健康和网络。用单机/跨机 nccl-tests 将底层通信与模型代码隔离,避免只调大 timeout。
推理¶
TTFT 和 TPOT 的区别?¶
TTFT 是到首 token,主要包含接入、排队和 prefill;TPOT/ITL 描述首 token 后生成速度,主要受 decode 调度与资源影响。两者需要独立 SLO。
KV Cache 为什么会限制并发?¶
自回归解码为每层保存历史 token 的 Key/Value,容量随层数、KV heads、head dim、token 数、并发和数据类型增长。显存还要容纳权重与 workspace;达到上限后请求会排队、抢占/重算或 OOM。
Continuous batching 为什么提升吞吐?¶
不同请求输出长度不一,静态 batch 要等最慢请求。Continuous batching 在每个调度步加入新请求、移除完成请求,提高活跃槽位利用率;代价是调度复杂性以及吞吐与单请求延迟权衡。
为什么不能只按 GPU 利用率自动扩容?¶
利用率可能高但队列稳定,也可能利用率不高却因长 prompt 或显存/KV 限制导致延迟。LLM 扩容还存在模型加载滞后;应结合 queue time/depth、running/waiting sequences、token rate、TTFT/TPOT 与预测余量。
Kubernetes 与稳定性¶
Kubernetes 如何调度 GPU?¶
厂商 Device Plugin 向 kubelet 注册并上报扩展资源,例如 nvidia.com/gpu;scheduler 根据 Pod 的 limits 与节点 allocatable 放置。GPU 扩展资源是整数、默认不可超卖,request/limit 有特定规则。
Readiness、liveness 和 startup probe 如何分工?¶
startup 防止慢启动期间被过早判死;readiness 决定是否接流量;liveness 检测无法自愈的卡死并重启。模型“进程起来”不代表权重已加载和 warmup 完成,readiness 应覆盖真正可服务状态。
如何为 LLM 服务定义 SLO?¶
按输入/输出长度或请求类别限定工作负载,分别定义 TTFT、TPOT、E2E、错误与可用性;用 goodput 表示满足 SLO 的有效产出。只给总体平均延迟会掩盖长尾和混合流量。
如何控制 Prometheus 指标基数?¶
label 只放有界、可枚举且确实用于聚合的维度,例如 model/revision/status。request ID、user ID 和 prompt 放在 trace/log,并做采样和敏感数据治理。
设计题回答骨架¶
遇到“设计一个多租户 LLM 平台”时:
- 澄清模型规模、流量、SLO、租户、安全与预算。
- 画请求数据面:gateway、admission、router、scheduler、worker、cache。
- 画控制面:模型 registry、发布、扩缩、配额、调度、回滚。
- 做显存、token 与故障余量的容量账。
- 定义隔离、权限、限流和供应链安全。
- 定义 SLI、告警、trace、故障演练和降级。
- 说明从简单方案演进的触发条件,避免一次性过度设计。
易混淆术语¶
| 术语 | 不等于 |
|---|---|
| GPU utilization | 峰值 FLOPS 利用率 / MFU |
| throughput | 满足延迟 SLO 的 goodput |
| quantization | 一定无损或一定更快 |
| replica autoscaling | 瞬时获得可服务 GPU 容量 |
| Private Git repo | 已经保护部署后的公开 URL |
| readiness passed | 模型质量、容量与所有依赖都健康 |