专栏名称: 企业存储技术
企业存储、服务器、SSD、灾备等领域技术分享,交流 | @唐僧_huangliang (新浪微博 )
目录
相关文章推荐
51好读  ›  专栏  ›  企业存储技术

在AMD MI300X上增强DeepSeek-R1推理能力:调优至7,318 Token/s

企业存储技术  · 公众号  ·  · 2025-03-25 08:33

正文

本文编译自 https://rocm.blogs.amd.com/artificial-intelligence/DeepSeekR1-Part2/README.html
接前文《 解锁DeepSeek-R1 671B FP8推理性能:5,921 token/s @ AMD MI300X

我们之前 关于这个主题的博客文章 讨论了 DeepSeek-R1 如何在 AMD Instinct™ MI300X GPU 上实现具有竞争力的性能。我们还提供了与 Nvidia H200 GPU 的性能比较和一个简短的演示应用程序来说明实际使用情况。在本博客中,我们将深入探讨如何使用 SGLang 框架、关键内核优化(如 ROCm™ 的 AI Tensor Engine)和超参数调整来帮助实现性能提升。

概览

  • 通过使用最新的 SGLang 框架,与 Nvidia H200 相比,MI300X 实现了 - 在相同延迟下吞吐量提高 2 到 5 倍 [ 1 ] - 在相同并发性下吞吐量提高 75% 且延迟降低 60% [ 1 ]

  • 针对 ROCm软件 (AITER)内核 的 AI Tensor Engine 经过优化,可提供 +2X GEMM [ 2 ] 、+3X MoE [ 3 ] 、+17x MLA 解码 [ 4 ] 、+14X MHA 预填充 [ 5 ]

  • SGLang 服务 超参数调优 ,得益于 MI300X 更大的内存容量,提升了大并发下的吞吐量

DeepSeek-R1 服务基准测试的关键要点

MI300X GPU 通过使用各种优化技术,在总吞吐量与端到端延迟方面全面展示了使用 SGLang 的卓越性能。下图 1 显示,使用 SGLang 框架和关键优化技术,MI300X 在延迟相似的情况下实现了比 NVIDIA H200 高达 5 倍的吞吐量。

扩展性能

图 1. DeepSeek R1 总吞吐量 (tks) 与延迟 (ms) [ 1 ]

如图 2 所示,H200 GPU 可以在单个节点中处理多达 16 个并发请求,令牌间延迟 (ITL) 低于 50 毫秒。我们使用 SGLang 0.4.4.post1 和 flashinfer MLA 库对 Nvidia H200 GPU 上的 SGLang 性能进行了基准测试。由 8 个 GPU 组成的单个 MI300X 节点可以处理多达 128 个并发请求,同时将令牌间延迟 (ITL) 保持在 50 毫秒以下,这表明 MI300X 具有更高的用户容量来完成响应,而不会影响用户体验。

注意:将分块预填充大小参数设置为 131,072 可启用输入序列的单批处理,但这可能会导致非常大的输入序列出现内存不足 (OOM) 错误。减少分块预填充大小可实现分批预填充缓存计算,从而更好地利用模型的总上下文长度预算。然而,这会增加解码延迟,因为必须以较小的批次处理输入并在解码期间检索。鼓励读者针对其特定用例优化此参数。

扩展性能

图 2. DeepSeek R1 在 50 毫秒内实现更高的并发性 Token 间延迟限制 [ 1 ]

关键优化

优化技术使开发人员能够显著提高在 GPU 上运行的应用程序的性能,充分利用并行处理的潜力并消除内存瓶颈。AMD AI Tensor Engine for ROCm (AITER) 是一个集中式存储库,其中充满了高性能 AI 运算符,旨在加速各种 AI 工作负载。

  • ROCm 人工智能张量引擎 (AITER)

    AITER 是一个全新的高性能开源 AI 算子库。它提供 Python 和 C++ API,可轻松集成到 SGlang、vLLM 和其他自定义框架中。AITER 优化了以下 DeepSeek V3/R1 内核,以在 MI300X GPU 上实现显著提升,以便用户使用该库体验到显著的性能提升。- AITER 块级 GEMM(最高提升 2 倍)- AITER 块级融合 MoE(最高提升 3 倍)- AITER MLA 用于解码(最高提升 17 倍)- AITER MHA 用于预填充(最高提升 14 倍)

  • 超参数调整

    当运行具有大量线程(例如 128 个或更多)的程序时,系统会因预填充吞吐量缓慢而面临瓶颈。我们发现使用更高的 chunked_prefill_size 值 可以加速预填充阶段,但代价是消耗更多的 VRAM,如图 3 所示。

扩展性能

图 3. DeepSeek R1 在 SGLang 上进行超参数调整后总吞吐量 (tks) 更高 [ 1 ]

如何重现基准

现在让我们在您的系统上重现相同的性能提升,并将相同的技术应用到您的应用程序中,以在 MI300X GPU 上获得最佳性能。

以下说明假设用户已经下载了模型。

注意:用于复制 MI300X 基准的图像是上游预演版本。此版本中的优化和性能增强预计将包含在即将发布的 lmsysorg 上游生产版本中。

带有 SGLang 的 AMD Instinct MI300X GPU

  1. 设置相关环境变量并启动 AMD SGLang 容器。

docker pull rocm/sgl-dev:upstream_20250312_v1
export




    
 MODEL_DIR= saved_path> 
docker run -it \
    --ipc=host \
    --network=host \
    --privileged \
    --shm-size 32G \
    --cap-add=CAP_SYS_ADMIN \
    --device=/dev/kfd \
    --device=/dev/dri \
    --group-add video \
    --group-add render \
    --cap-add=SYS_PTRACE \
    --security-opt seccomp=unconfined \
    --security-opt apparmor=unconfined \
    -v $MODEL_DIR:/model \    rocm/sgl-dev:upstream_20250312_v1

2. 启动 SGLang 服务器。

python3 -m sglang.launch_server \
    --model \model \
    --tp 8 \
    --trust-remote-code \
    --chunked-prefill-size 131072 \
    --enable-torch-compile \
    




    
--torch-compile-max-bs 256 &

3. 针对用户定义的并发值和所需参数运行 SGLang 基准服务脚本。

# Run after “The server is fired up and ready to roll!”
concurrency_values=(128 64 32 16 8 4 2 1)
for concurrency in "${concurrency_values[@]}"; do
python3 -m sglang.bench_serving \
    --dataset-name random \
    --random-range-ratio 1 \
    --num-prompt 500 \
    --random-input 3200 \
    --random-output 800 \    --max-concurrency "${concurrency}"done

注意:使用 torch 编译标志将导致服务器启动时间更长

带有 SGLang 的 NVIDIA H200 GPU

  1. 设置相关环境变量并启动NVIDIA SGLang容器。

docker pull lmsysorg/sglang:v0.4.4.post1-cu125
export MODEL_DIR= saved_path> 
docker run -it \
    --ipc=host \
    --network=host \
    --privileged \
    --shm-size 32G \
    --gpus all \
    -v $MODEL_DIR:/model \
    






请到「今天看啥」查看全文


推荐文章
最搞笑笑话王  ·  6个笑话,笑了7天7夜!不笑你揍我!
7 年前
华夏影像诊断中心  ·  影像科不得不知道的危急值
7 年前
营养师顾中一  ·  如何通过饮食调理甲状腺结节?
7 年前