12. MacaRT-SGLang
12.1. MacaRT-SGLang介绍
MacaRT-SGLang是在曦云系列GPU上适配官方SGLang的推理工具,基于MXMACA后端对SGLang方法进行了兼容适配和Kernel优化。 使用MacaRT-SGLang在曦云系列GPU上进行大模型推理,其方法和功能与官方SGLang兼容。当前兼容版本为SGLang 0.4.5,PyTorch 要求为2.6。
12.2. MacaRT-SGLang功能
支持的模型包括:DeepSeek-R1-BF16、DeepSeek-R1-W8A8、DeepSeek-R1-AWQ和DeepSeek-R1-Distill-Qwen-1.5B。 DeepSeek-R1-W8A8模型是采用 compress-tensor 的 INT8 量化方式将DeepSeek-R1-BF16量化而来。
12.3. MacaRT-SGLang使用流程
本章节介绍MacaRT-SGLang的使用步骤,主要分为在线推理、吞吐测试和精度测试。
12.3.1. 环境准备
使用MacaRT-SGLang进行推理需要准备好环境。目前仅提供镜像方式。
12.3.1.1. 使用SGLang镜像
从发布的软件包中获取SGLang镜像并启动,参见《曦云® 系列通用计算GPU用户指南》中“容器相关场景支持”章节。
12.3.1.2. 设置环境变量
单机场景下,仅需在一台机器的容器内执行操作;多机场景时,需在所有容器中分别执行一次。
export MACA_SMALL_PAGESIZE_ENABLE=1
export PYTORCH_ENABLE_PG_HIGH_PRIORITY_STREAM=1
export CUDA_GRAPH_DP_USE_SUM_BS=False
多机场景下,还需设置以下环境变量:
export GLOO_SOCKET_IFNAME=网口名
对于 GLOO_SOCKET_IFNAME 环境变量,需在宿主机上执行 ifconfig-a 指令获取与该宿主机IP地址对应的网口。
通过 mx-smi topo -m 查看GPU拓扑,不同机器互联的顺序可能不一样。
如果没有按照 0,1,2,3 | 4,5,6,7 顺序排列,那就需要设置环境变量指定GPU的顺序,具体根据 mx-smi topo -m 给出的互联顺序设置,例如:
export MACA_VISIBLE_DEVICE=7,5,1,3,4,0,6,2
12.3.1.3. 启动Server
对于DeepSeek-R1-BF16模型,以4机32卡为例:
当前运行建议按照 tp 32 dp 8 的切分方式。
python3 -m sglang.launch_server --model-path XXX --tp 32 --dp 8 --dist-init-addr 100.79.153.153:5000 --nnodes 4 --node-rank 0 --trust-remote-code --attention-backend flashinfer --enable-dp-attention python3 -m sglang.launch_server --model-path XXX --tp 32 --dp 8 --dist-init-addr 100.79.153.153:5000 --nnodes 4 --node-rank 1 --trust-remote-code --attention-backend flashinfer --enable-dp-attention python3 -m sglang.launch_server --model-path XXX --tp 32 --dp 8 --dist-init-addr 100.79.153.153:5000 --nnodes 4 --node-rank 2 --trust-remote-code --attention-backend flashinfer --enable-dp-attention python3 -m sglang.launch_server --model-path XXX --tp 32 --dp 8 --dist-init-addr 100.79.153.153:5000 --nnodes 4 --node-rank 3 --trust-remote-code --attention-backend flashinfer --enable-dp-attention
--tp 32表示tp并行的切分数量为32--enable-dp-attention表示开启dp并行--dp 8表示dp并行的切分数量为8--model-path XXX指定模型存放路径--attention-backend flashinfer指定attention后端使用flashinfer--dist-init-addr 100.79.153.153:5000指定主节点的IP和端口号(可默认为5000),其他三个节点和主节点保持一致--nnodes 4表示节点数量--node-rank 0表示当前机器所属的节点索引0。需要注意的是必须先启动主节点,然后才能启动其他节点
对于DeepSeek-R1-W8A8量化模型,使用16卡即可运行。以2机16卡为例:
该模型需要根据沐曦发布的文档自行量化,可参考相关推理部署手册中“W8A8模型转换”章节。
当前运行建议按照 tp 16 dp 4 的切分方式。
python3 -m sglang.launch_server --model-path XXX --tp 16 --dp 4 --dist-init-addr 100.79.153.153:5000 --nnodes 2 --node-rank 0 --trust-remote-code --attention-backend flashinfer --enable-dp-attention python3 -m sglang.launch_server --model-path XXX --tp 16 --dp 4 --dist-init-addr 100.79.153.153:5000 --nnodes 2 --node-rank 1 --trust-remote-code --attention-backend flashinfer --enable-dp-attention
对于DeepSeek-R1-AWQ模型,使用8卡可运行,建议按照 tp 8 dp 4 的切分方式:
python3 -m sglang.launch_server --model-path ${Model_path} --tp 8 --dp 4 --trust-remote-code --dist-init-addr 192.168.3.2:5000 --nnodes 1 --node-rank 0 --attention-backend flashinfer --enable-dp-attention --dtype bfloat16 --quantization moe_wna16对于DeepSeek-R1-Distil-Qwen-1.5B模型,使用单卡即可运行。以单卡为例:
python3 -m sglang.launch_server --model-path ${Model_path} --tp 1 --trust-remote-code --attention-backend flashinfer --enable-flashinfer-mla
12.3.2. 在线推理
待端口顺利启动后,向 Sever 发送请求即可(另起终端)。以下示例简单验证推理服务。
import requests
url = "http://localhost:30000/generate"
data = {"text": "What is the capital of France?"}
response = requests.post(url, json=data)
print(response.json())
12.3.3. 吞吐测试
python3 -m sglang.bench_serving --backend sglang --dataset-name random m --random-input-len ${input-len} --random-output-len ${output-len} --random-range-ratio 1.0 --dataset-path ./dataset/ShareGPT_V3_unfiltered_cleaned_split.json --num-prompt ${batch_size}
${input-len}表示输入长度${output-len}表示输出长度${batch_size}指定输入批次数量
12.3.4. 精度测试
12.3.4.1. MMLU精度测试
如果使用MMLU数据集进行精度测试,需要准备data数据。下载 data.tar 文件,解压并拷贝至 dataset 路径。
此外,如果机器无法访问外网,还需要下载 cl100k_base.tiktoken 文件,放入容器内任意位置。
安装依赖。
pip install blobfile export TIKTOKEN_CACHE_DIR=${path}${path}表示 cl100k_base.tiktoken 文件所在的路径,不需要包含文件名。执行 bench_sglang.py 进行精度测试,使用的测试命令行如下:
python code/bench_sglang.py --nsub 10 --data_dir ./dataset/data
--nsub指定测试问题的数量,最多为60。如不指定,默认是60。
12.3.4.2. C-Eval精度测试
安装依赖。
pip install eval-type-backport
执行 run_ceval_client.py 进行精度测试,使用的测试命令行如下:
python code/run_ceval_client.py --model ${Model_path} --test_jsonl ./dataset/ceval_val_cmcc.jsonl --batch_size 64-model ${Model_path}为model所在的路径。--test_jsonl ./dataset/ceval_val_cmcc.json1为C-Eval数据集的路径。
该脚本对接的 Server 端口号为 8000,所以需要在启动 SGLang Server 时加上 --port 8000,示例如下:
python -m sglang.launch_server --model ${Model_path} --tp 32 --dist-init-addr 100.79.153.153:5000 --nnodes 4 --node-rank 0 --trust-remote-code --isable-cuda-graph --port 8000