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 构建。
以下步骤展示了如何构建和使用镜像。
构建 Docker 镜像。 如果您使用预构建的镜像,可以跳过此步骤,并在下面的步骤中将
sglang_image替换为预构建的镜像名称。docker build -t sglang_image -f rocm.Dockerfile .
创建一个便捷别名。
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。
启动服务器。
注意: 将下面的
<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
要验证实用程序,您可以在另一个终端中运行基准测试,或参考其他文档向引擎发送请求。
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! 时,表示启动成功。