AMD GPU#

本文档介绍如何在 AMD GPU 上运行 SGLang。如果您遇到问题或有疑问,请提交问题

系统配置#

在使用 AMD GPU(如 MI300X)时,某些系统级优化有助于确保稳定的性能。这里以 MI300X 为例。AMD 为 MI300X 优化和系统调优提供了官方文档:

注意: 我们强烈建议您完整阅读这些文档和指南,以充分利用您的系统。

以下是 SGLang 需要确认或启用的几个关键设置:

更新 GRUB 设置#

/etc/default/grub 中,将以下内容追加到 GRUB_CMDLINE_LINUX

pci=realloc=off iommu=pt

之后,运行 sudo update-grub(或您发行版的等效命令)并重启。

禁用 NUMA 自动平衡#

sudo sh -c 'echo 0 > /proc/sys/kernel/numa_balancing'

您可以使用这个有用的脚本自动化或验证此更改。

同样,请通读整个文档以确认您的系统是否使用推荐配置。

安装 SGLang#

您可以通过以下方法之一安装 SGLang。

从源代码安装#

# 使用最新的发布分支
git clone -b v0.5.5.post3 https://github.com/sgl-project/sglang.git
cd sglang

# 编译 sgl-kernel
pip install --upgrade pip
cd sgl-kernel
python setup_rocm.py install

# 安装 sglang python 包
cd ..
rm -rf python/pyproject.toml && mv python/pyproject_other.toml python/pyproject.toml
pip install -e "python[all_hip]"

使用 Docker 安装(推荐)#

Docker 镜像可在 Docker Hub 的 lmsysorg/sglang 获取,该镜像基于 rocm.Dockerfile 构建。

以下步骤展示了如何构建和使用镜像。

  1. 构建 Docker 镜像。 如果您使用预构建的镜像,可以跳过此步骤,并在下面的步骤中将 sglang_image 替换为预构建的镜像名称。

    docker build -t sglang_image -f rocm.Dockerfile .
    
  2. 创建一个便捷别名。

    alias drun='docker run -it --rm --network=host --privileged --device=/dev/kfd --device=/dev/dri \
        --ipc=host --shm-size 16G --group-add video --cap-add=SYS_PTRACE \
        --security-opt seccomp=unconfined \
        -v $HOME/dockerx:/dockerx \
        -v /data:/data'
    

    如果您使用 RDMA,请注意:

    • RDMA 需要 --network host--privileged。如果您不需要 RDMA,可以移除它们。

    • 如果您使用 RoCE,可能需要设置 NCCL_IB_GID_INDEX,例如:export NCCL_IB_GID_INDEX=3

  3. 启动服务器。

    注意: 将下面的 <secret> 替换为您的 huggingface hub token

    drun -p 30000:30000 \
        -v ~/.cache/huggingface:/root/.cache/huggingface \
        --env "HF_TOKEN=<secret>" \
        sglang_image \
        python3 -m sglang.launch_server \
        --model-path NousResearch/Meta-Llama-3.1-8B \
        --host 0.0.0.0 \
        --port 30000
    
  4. 要验证实用程序,您可以在另一个终端中运行基准测试,或参考其他文档向引擎发送请求。

    drun sglang_image \
        python3 -m sglang.bench_serving \
        --backend sglang \
        --dataset-name random \
        --num-prompts 4000 \
        --random-input 128 \
        --random-output 128
    

通过正确配置您的 AMD 系统并安装 SGLang,您现在可以充分利用 AMD 硬件来发挥 SGLang 的机器学习功能。

示例#

运行 DeepSeek-V3#

运行 DeepSeek-V3 的唯一区别在于启动服务器的方式。以下是一个示例命令:

drun -p 30000:30000 \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --ipc=host \
    --env "HF_TOKEN=<secret>" \
    sglang_image \
    python3 -m sglang.launch_server \
    --model-path deepseek-ai/DeepSeek-V3 \ # <- 这里
    --tp 8 \
    --trust-remote-code \
    --host 0.0.0.0 \
    --port 30000

在单个 NDv5 MI300X VM 上运行 DeepSeek-R1也可以作为很好的参考。

运行 Llama3.1#

运行 Llama3.1 与运行 DeepSeek-V3 几乎完全相同。唯一区别在于启动服务器时指定的模型,如下例所示:

drun -p 30000:30000 \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --ipc=host \
    --env "HF_TOKEN=<secret>" \
    sglang_image \
    python3 -m sglang.launch_server \
    --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ # <- 这里
    --tp 8 \
    --trust-remote-code \
    --host 0.0.0.0 \
    --port 30000

预热步骤#

当服务器显示 The server is fired up and ready to roll! 时,表示启动成功。