主要观点总结
本文主要介绍了AMD在MLPerf Inference:Datacenter v5.0中的关键优化策略,及其在Llama 2 70B和Stable-diffusion-xl模型上的性能表现。
关键观点总结
关键观点1: AMD MI325X GPU的性能优势
AMD MI325X GPU具有业界领先的计算TFLOP、内存容量和带宽,为运行生成式AI、LLM和其他变革性技术的AI数据中心提供支持。
关键观点2: Llama 2 70B模型的关键优化
通过AMD Quark进行模型量化、GEMM优化、系统级调优等方法,提高了Llama 2 70B模型在AMD MI325X GPU上的性能。
关键观点3: SDXL文生图MLPerf推理基准测试
AMD在SDXL文生图MLPerf推理基准测试中也取得了显著的成绩,验证了AMD Instinct解决方案在AI工作负载中的可扩展性和性能。
关键观点4: 合作伙伴的提交和合作
与多家合作伙伴(Supermicro、Giga Computing和AsusTek等)合作,实现了基于MI325X的系统解决方案,并成功发布了高性能的提交结果。
正文
rocm/vllm-dev
(
https://hub.docker.com/r/rocm/vllm-dev)
上提供的 AMD 优化 vLLM Docker 上构建了我们的提交
。(我们的提交中使用的是
rocm/vllm-dev:nightly_main_20250203
)。这些 Docker 镜像经过高度优化,每周发布一次。它们与带有 BLAS 库的预调 GEMM 解决方案集成,支持 GEMM 形状以推理许多流行的 LLM 模型。
对vLLM改进
vLLM 现在支持解码操作的多步调度,以提高效率。调度会引入 CPU 开销,从而降低 GPU 利用率和吞吐量。通过
一次调度解码步骤,GPU 可以
连续执行前向步骤,而无需等待 CPU 指令,从而通过跨步骤分配开销来有效减少开销
。
为了最大限度地提高 vLLM 中的吞吐量,必须调整几个超参数,包括
如上所述的
num_scheduler_steps
。此外,
max_num_batched_tokens
确定预填充的最大批处理大小,而
max_num_seqs
控制解码的最大批处理大小。在服务器场景中,还必须仔细调整 QPS(每秒查询数)以平衡传入和完成的查询,同时满足 TTFT(第一个令牌时间)和 TPOT(每个输出令牌时间)的限制。
调度器变更
vLLM 调度程序是高效 LLM 服务的关键组件。它动态确定是否在任何给定时刻执行某个
prefill 或者一个
decode
操作
,同时管理可以批量处理的查询数量。这通过优化每秒浮点运算 (FLOPS) 和最大化内存效率直接影响 GPU 性能。
为了提高性能,我们尽可能多地批量处理查询,从而最大限度地减少端到端内核调用的开销并最大化 GPU 吞吐量。在离线场景中,我们始终将批量大小接近最大值 — 预填充为 65K,解码为 2048。在服务器场景中,在遵守 TTFT 约束的同时,当等待预填充的查询数量较少时,我们会避免预填充,从而确保 GPU 的有效利用。
框架优化 - 负载平衡
LLM 服务通常使用多个 GPU 和多个 vLLM 实例来处理用户查询。我们必须将负载均匀地分配到每个 GPU 上,因为负载不平衡会导致严重的排队延迟,并且执行管道比其他 GPU 慢得多,从而导致整体系统吞吐量降低。每个查询的输入序列长度 (ISL) 和输出序列长度 (OSL) 的变化使问题更加复杂。为了解决这个问题,我们采用了一种新颖的负载平衡算法,该算法根据每个 GPU 中的查询数量和查询大小,仔细选择负载最小的 GPU 来分配传入查询。
Llama 2 70B 的量化
在本节中,我们将研究如何使用
AMD Quark
(
https://quark.docs.amd.com/latest)
进行量化,以生成针对 AMD MLPerf 推理提交的优化模型。AMD Quark 是一个公开可用的模型优化库,附带全面的文档和示例。在当前 MLPerf 轮次中,我们以
之前的 MLPerf 提交
(
https://rocm.blogs.amd.com/artificial-intelligence/mlperf-inf-4-1/README.html)
为基础。新的量化使用开放计算项目