SGLang 在 AMD 上#
本文档介绍了如何为 SGLang 设置基于 AMD 的环境。如果您遇到问题或有疑问,请在 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 安装文档。以下为方便起见,总结了针对 AMD 的特定步骤。
从源码安装#
git clone https://github.com/sgl-project/sglang.git
cd sglang
pip install --upgrade pip
pip install sgl-kernel --force-reinstall --no-deps
pip install -e "python[all_hip]"
使用 Docker 安装(推荐)#
构建 Docker 镜像。
docker build -t sglang_image -f Dockerfile.rocm .
创建一个方便的别名。
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,请注意
--network host
和--privileged
是 RDMA 所必需的。如果您不需要 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 \ # <- here
--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 \ # <- here
--tp 8 \
--trust-remote-code \
--host 0.0.0.0 \
--port 30000
预热步骤#
当服务器显示 The server is fired up and ready to roll!
时,这意味着启动成功。