如何用模拟器预估在 8×A100 下最大并发请求数?
解读
面试官想知道的不是“8 张卡能跑多少 QPS”这个绝对值,而是考察候选人能否把大模型推理性能建模拆成可量化、可复现、可迭代的工程步骤,并用国产主流工具链快速给出可信区间。核心考点:
- 是否理解GPU 内存墙与计算墙双瓶颈
- 能否把模型结构、并行策略、批处理策略、框架开销量化成模拟器参数
- 是否熟悉国内落地常用模拟器(含阿里、华为、清华开源版本)
- 能否把模拟结果转成线上 LLMOps 容量规划
知识点
-
推理成本模型:
- 内存占用 = 参数 + KV-cache + 激活 + 框架冗余
- 计算量 = 2 × 参数量 × token 数(FLOP)
- 延迟 = 计算延迟 + 通信延迟 + 调度延迟
-
并行维度:
- TP(tensor parallel) 切权重,降低单卡显存,增加通信
- PP(pipeline parallel) 切层,降低单卡显存,增加气泡
- DP(data parallel) 复制实例,提升并发,显存线性增加
-
批处理策略:
- 静态批(continuous batching 前)吞吐低
- continuous batching(国内 vLLM、FastServe、MindIE 均支持)可把首 token 延迟压到 200 ms 内,吞吐提升 3~7×
-
国产模拟器:
- AlpaSim(清华)支持 TP+PP+DP 组合,已适配 80 GB A100
- MindStudio Profiler(华为)内置 Ascend 版本,可切换 A100 参数
- PASim(阿里 PAI)直接读 ONNX/PTH,输出 QPS-P99 曲线
-
关键指标:
- GPU 内存利用率 ≤ 85 %(留 15 % 给 CUDA kernel 动态分配)
- SM 利用率 ≥ 70 % 才算吃满算力
- P99 首 token 延迟 ≤ 800 ms(国内金融/政务 SLA 红线)
答案
步骤一:建立“单卡-单实例”基线
- 用 ModelScope 下载与业务同尺寸的百亿模型(如 13B、30B、70B),精度选 FP16(国内监管允许,无需 INT8 量化即可上线)。
- 单卡 A100 80 GB 跑 nvidia-smi dmon 记录峰值显存,得到权重 + 最大 KV-cache 基线值;同时跑 nsys 拿到每 token 耗时 t0。
步骤二:把基线喂给国产模拟器
以 AlpaSim 为例:
- 硬件拓扑:8 × A100-NVLink-80 GB,300 GB/s
- 并行策略:先固定 TP=4,PP=2(国内 8 卡机常见拓扑),DP 自然为 1
- 批处理:打开 continuous batching,max_batch_size 先设 64,max_seq_len 设 4 k(国内客服场景 95 % 请求 ≤ 2 k)
- 输入分布:用线上 7 天真实日志构造 Poisson 到达率 λ=10~200 req/s,输入 400 token,输出 200 token
运行 AlpaSim 10 k 步,输出 QPS-P99 延迟曲线。
步骤三:读曲线找拐点
当 P99 首 token 延迟 = 800 ms 时,对应 λ=132 req/s 即为理论最大并发;此时 GPU 内存利用率 82 %,SM 利用率 74 %,通信占比 18 %,符合国内机房 SLA。
步骤四:留冗余
上线前按模拟值 × 0.7 做容量规划,即 132 × 0.7 ≈ 92 req/s 作为单组 8×A100 的限速阈值,留 30 % 突发缓冲。
步骤五:持续验证
灰度阶段用 Prometheus + MindIE-exporter 实时采集 GPU 显存、SM、NVLink 带宽,与模拟器误差 > 10 % 即回滚调参。
拓展思考
- 国产卡替换:若后续改用 Ascend 910B 32 GB,模拟器需把显存带宽 900 GB/s、HCCL 通信开销重新建模,TP 上限从 4 降到 2,否则通信占比 > 30 %,QPS 直接腰斩。
- 长文本场景:当 max_seq_len 从 4 k 扩到 32 k 时,KV-cache 呈平方级增长,必须提前在模拟器里打开 GQA/FlashAttention-2 开关,否则预估并发会虚高 3× 导致线上 OOM。
- 多轮对话:引入 KV-cache 复用后,首 token 延迟下降 40 %,但显存常驻增加,需要把复用命中率作为新的模拟器输入参数,否则容量模型失真。
- LLMOps 闭环:把模拟器接入 KubeDL 的 CronJob,每晚自动拉取最新模型与日志,T+1 更新容量基线,实现预算-模拟-上线-监控全链路可追溯,满足国内信通院可信 AI 工程化评估要求。