当前位置:
openEuler 24.03 部署 SGLang 实测:Benchmark 数据出炉

openEuler 24.03 部署 SGLang 实测:Benchmark 数据出炉

昇腾 NPU + 容器化 + 源码编译,完整性能验证

2026-08-26 21:00
二维码
8
openEuler 24.03 部署 SGLang 实测 | 卡片版
🔗 来源:openEuler 社区 · AI 北向框架适配专项  |  实测手札

openEuler 24.03 部署 SGLang 实测:Benchmark 数据出炉

昇腾 NPU + 容器化 + 源码编译,完整性能验证
🔑 关键词:openEuler 24.03, SGLang, 昇腾NPU, CANN 9.0, vLLM, Benchmark, TTFT, TPOT, 推理吞吐
📄 描述:手把手实测openEuler 24.03 LTS SP4 部署 SGLang 推理框架,基于 Docker + CANN 9.0 容器,完成源码编译、依赖锁版本、Benchmark 测试,输出 TTFT/TPOT/Throughput 关键指标,验证昇腾 NPU 稳定性。
📌 摘要:本文在 openEuler 24.03 上搭建 SGLang 推理环境,通过 constraints 锁版本防止 CUDA 污染,手动安装 sgl-kernel-npu,并利用 random 数据集执行 benchmark,获得完整性能数据,为 AI 推理框架适配提供参考。

🧠 整体内容思维导图 (动态概览)

🖥️ 环境openEuler 24.03 SP4 / 内核 6.6.0 / Docker 18.09 / CANN 9.0.1 / NPU 910B
📦 部署Docker 容器 + CANN 镜像 / 挂载 NPU 设备 / 虚拟环境 Python 3.11
🔧 编译源码安装 SGLang v0.5.16 / constraints 锁 torch CPU / sgl-kernel-npu 预编译 zip
⚡ Benchmarkrandom 数据集 / 并发 64 / 200 prompts / 输出 TTFT / TPOT / Throughput
📊 指标TTFT 首token延迟 / TPOT 每token耗时 / 吞吐量 (req/s)
🧩 对比与 vLLM 差异:sgl-kernel-npu 独立安装, constraints 锁版本, dataset-name random 语义

一、环境准备

本次实测的宿主机环境为:

OSopenEuler release 24.03 (LTS-SP4)
内核6.6.0
Docker18.09.0
NPU 驱动26.0.rc1
NPU 固件7.7.0.10.220
CANN9.0.1

▏1.确保宿主机使用 openEuler 国内加速 yum 源

🖥️ 宿主机执行:
运行 cat /etc/yum.repos.d/openEuler.repo 检查,如果文件不存在或者使用的源不是 openEuler 国内镜像,可以按如下修改,提升 yum install 下载速度。

以下是 openEuler 24.03 LTS SP4 镜像源配置:

[OS]
name=OS
baseurl=https://mirrors.huaweicloud.com/openeuler/openEuler-24.03-LTS-SP4/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-24.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler
...(完整配置见原文)

▏2. 安装 Docker

🖥️ 宿主机执行:
sudo dnf install -y docker
sudo systemctl enable --now docker
docker --version

▏3. 配置免 sudo 运行(可选)

🖥️ 宿主机执行:
sudo usermod -aG docker $USER
newgrp docker

▏4. 拉取 openEuler 24.03与CANN 基础镜像

🖥️ 宿主机执行:
docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/cann:9.0.0-910b-openeuler24.03-py3.11-devel

▏5. 硬件与驱动

🖥️ 宿主机执行:
ls /dev/davinci* 预期 /dev/davinci0 ...
npu-smi info 确认 NPU 状态正常。

npu-smi

▏6. 模型权重准备

🖥️ 宿主机执行:
以 Qwen3-0.6B 为例 ls /home/models/Qwen3-0.6B/ 包含 config.json, tokenizer.json, model*.safetensors。

▏7. 国内镜像加速

在容器内操作前,先规划好镜像配置。

镜像加速

二、SGLang 推理环境搭建

SGLang 的 NPU 支持由官方源码内置,需要通过源码安装。与 vLLM 相比,额外需要:sgl-kernel-npu(不在 PyPI,需从 GitHub Releases 下载预编译 zip),constraints 文件锁版本,仅支持 Python 3.11。

Python3.11
PyTorch2.10.0 (CPU)
torch_npu2.10.0
triton-ascend3.2.1.dev20260530
sgl-kernel-npu2026.05.01.post3
SGLangv0.5.16

▏Step 1:启动并进入容器

🖥️ 宿主机执行:
docker run -d --name sglang-ascend-910b --privileged --ipc=host ... (完整命令见原文)

进入容器:
docker exec -it sglang-ascend-910b bash -l

▏Step 2:准备 Python 虚拟环境

📦 容器内执行:
python3.11 -m venv --upgrade /workspace/home/venv311
source /workspace/home/venv311/bin/activate
pip install -U pip -i https://mirrors.huaweicloud.com/repository/pypi/simple

python version

▏Step 3:安装依赖

3.1 替换 openEuler yum 源
sed -i -e 's|https://repo.openeuler.org/|https://mirrors.huaweicloud.com/openeuler/|' -e '/^metalink=/s/^/#/' /etc/yum.repos.d/openEuler.repo

3.2 创建 constraints 文件
printf 'torch==2.10.0+cpu\ntorch_npu==2.10.0\nnumpy==1.26.4\n' > /tmp/sglang_constraints.txt
CONSTRAINTS='-c /tmp/sglang_constraints.txt'

3.3 安装基础依赖
pip install 'setuptools<80' -i $PIP_INDEX
pip install torch==2.10.0 --index-url https://download.pytorch.org/whl/cpu
pip install torch_npu==2.10.0 -i $PIP_INDEX

3.4 安装 triton-ascend
pip install triton-ascend==3.2.1.dev20260530 --extra-index-url https://mirrors.huaweicloud.com/ascend/repos/pypi/nightly --trusted-host mirrors.huaweicloud.com -i $PIP_INDEX

3.5 安装 sgl-kernel-npu
下载 zip 并解压安装四个 wheel,验证 python -c 'import sgl_kernel_npu; print("OK")'

sgl-kernel

3.6 源码安装 SGLang
git clone --branch v0.5.16 --depth 1 https://ghfast.top/https://github.com/sgl-project/sglang.git /workspace/home/sglang
cp -f python/pyproject_npu.toml python/pyproject.toml
pip install $CONSTRAINTS -e 'python[all_npu]' -i $PIP_INDEX

3.7 替换 opencv-python 为 headless 版
避免 libGL 缺失。

3.8 预下载 benchmark 数据集
curl -fL --retry 3 -o /workspace/home/sglang_bench_data/ShareGPT_V3_unfiltered_cleaned_split.json https://hf-mirror.com/...

3.9 验证版本信息
python -c 'import torch, torch_npu, sglang, sgl_kernel_npu; print("torch:", torch.__version__); ...'

version check

▏Step 4:启动推理服务

📦 容器内执行:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export ASCEND_RT_VISIBLE_DEVICES=0
sglang serve /models/Qwen3-0.6B --host 0.0.0.0 --port 8002 --attention-backend ascend --device npu --tp-size 1 --mem-fraction-static 0.9 --trust-remote-code > /workspace/logs/sglang_server.log 2>&1 &

▏Step 5:验证服务

等待日志出现 "The server is fired up and ready to roll!"。
5.1 等待就绪:
while ! curl -fsS http://127.0.0.1:8002/health; do sleep 10; done
5.2 curl 推理验证:
curl -sS http://127.0.0.1:8002/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"/models/Qwen3-0.6B","messages":[{"role":"user","content":"请用一句话介绍华为昇腾。"}],"max_tokens":64,"temperature":0}'

curl result

▏Step 6:运行 Benchmark

📦 容器内执行:
python -m sglang.benchmark.serving --backend sglang --model /models/Qwen3.5-9B --dataset-name random --dataset-path /workspace/home/sglang_bench_data/ShareGPT_V3_unfiltered_cleaned_split.json --random-input-len 2048 --random-output-len 512 --num-prompts 200 --max-concurrency 64 --port 8002 --output-file /workspace/logs/sglang_benchmark.json

Benchmark 测试结果:

benchmark result

如果想做类似 vLLM 的随机 token Benchmark,用 random-ids 模式:
python -m sglang.benchmark.serving ... --dataset-name random-ids ...

benchmark random-ids

▏Step 7:清理

📦 容器内 + 🖥️ 宿主机:
kill -SIGINT $(pgrep -f 'sglang')
exit
docker stop sglang-ascend-910b && docker rm sglang-ascend-910b


三、关键指标解读

指标解读

四、常见问题与踩坑

5.1 yum install 慢

替换国内源。

5.2 sgl-kernel-npu 不在 PyPI

手动下载 zip 安装四个 wheel。

5.3 pip 拉取 CUDA 包

使用 constraints 锁住 torch CPU 版本。

5.4 国内网络镜像配置汇总

mirror config

五、总结

本次实测从环境构建到性能验证,以 openEuler 24.03 LTS SP4 为底座,完成 Docker 部署及 SGLang 安装配置,并利用随机数据集跑通 Benchmark,输出 TTFT、TPOT 及 Throughput 关键指标,验证了整套环境的可用性与稳定性。本次本地编译总时长约 1 分钟,后续 openEuler 社区将引入 SGLang 一键安装,敬请关注。

>>预告
下一篇文章将继续基于 openEuler24.03,实测安装 llama.cpp 并运行 benchmark 验证性能。

供稿 | 欧阳庆   编辑 | 丘云   校审 | 赵家麒、郑振宇、刘彦飞

📊 整体分析(500字内)

本文系统性地完成了 openEuler 24.03 上 SGLang 推理框架的部署与性能验证,覆盖了从底层驱动、容器环境、依赖锁版本到源码编译、Benchmark 执行的全链路。重点解决了 NPU 环境下 SGLang 依赖链容易拉取 CUDA 包、sgl-kernel-npu 无 PyPI 源、随机数据集联网下载失败等核心痛点。通过 constraints 文件锁版本、手动下载预编译 wheel、预置 ShareGPT 数据集,实现了在无外网或弱网环境下的稳定部署。性能数据表明,在 910B NPU 上,并发 64、200 个 prompt 的场景下,TTFT 和 TPOT 均处于合理区间,吞吐量满足轻量级推理需求。与 vLLM 相比,SGLang 的 NPU 适配更依赖社区预编译包,但源码安装灵活度更高。文章还贴出了 benchmark 的 random 与 random-ids 两种模式差异,为开发者提供了明确的压测指南。整体来看,该方案为 openEuler + 昇腾 NPU 的 AI 推理落地提供了可复制的实践范本,也为后续社区将 SGLang 纳入系统包管理器奠定了基础。

🧩 核心问题解决方案 · 执行方式 · 验收模型

问题:在 openEuler 24.03 + 昇腾 NPU 环境下,SGLang 源码安装时依赖链易拉取 CUDA 版本、sgl-kernel-npu 无 PyPI 源、benchmark 数据集需预下载。

解决方案:① 使用 constraints 文件锁定 torch==2.10.0+cpu 及 torch_npu 版本;② 从 GitHub Releases 手动下载 sgl-kernel-npu zip 包,解压安装四个 wheel;③ 预下载 ShareGPT 数据集到本地,并设置 HF_ENDPOINT 镜像;④ 通过 Docker 挂载 NPU 设备及模型目录,隔离环境。

执行方式:按照 Step 1~7 顺序执行,关键步骤包括:启动 CANN 容器、创建 Python 3.11 虚拟环境、安装 triton-ascend nightly、覆盖 pyproject_npu.toml、替换 opencv-headless。

验收模型:① 服务启动成功,日志输出 "ready to roll";② curl 推理返回正确内容;③ benchmark 运行完成,输出 TTFT (首token延迟)、TPOT (每token耗时)、Throughput (吞吐量) 三项指标,且无 CUDA 相关报错;④ sgl_kernel_npu 可正常导入。

💬 评论区

实测很详细,照着做了一遍,910B 上成功跑通,感谢分享!
constraints 锁版本这个技巧太实用了,之前一直被 torch CUDA 困扰。
sgl-kernel-npu 的 zip 包下载速度慢,建议用 ghfast.top 代理,亲测有效。
random 数据集需要提前下载,否则会联网失败,文章提醒得很到位。
期待下一篇 llama.cpp 的实测,希望也能这么详细。
在鲲鹏服务器上部署,内存占用比预期低,0.6B 模型很流畅。
能不能出一个 dockerfile 一键构建?手动步骤有点多。
benchmark 的 random-ids 模式和 vLLM 的 random 模式对标,解读清晰。
建议增加多卡 tp 的测试数据,单卡已经够用,多卡更期待。
openEuler 社区生态越来越好了,AI 框架适配跟进很快,点赞!
基于 openEuler 24.03 实测 · SGLang v0.5.16 · 卡片式瀑布流 · 保留原文图片及文字
昵称:
内容:
验证码:
提交评论
评论一下
推荐文章 更多

共747页

到第 页

当前位置:
openEuler 24.03 部署 SGLang 实测:Benchmark 数据出炉
电话
13360508085
微信
微信
1336508085
在线
人工
在线客服系统