12. MacaRT-SGLang
12.1. MacaRT-SGLang介绍
MacaRT-SGLang是在曦云系列GPU上适配官方SGLang的推理工具,基于MXMACA后端对SGLang方法进行了兼容适配和Kernel优化。 使用MacaRT-SGLang在曦云系列GPU上进行大模型推理,其方法和功能与官方SGLang兼容。当前兼容版本为SGLang 0.4.3,PyTorch 要求为2.4。
12.2. MacaRT-SGLang功能
支持的模型包括:DeepSeek-R1-BF16、DeepSeek-R1-W8A8和DeepSeek-R1-Distill-Qwen-1.5B。DeepSeek-R1-W8A8模型是采用 compress-tensor 的 W8A8-INT8 量化方式量化而来。
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 GLOO_SOCKET_IFNAME=网口名
对于 GLOO_SOCKET_IFNAME 环境变量,需在宿主机上执行 ifconfig-a 指令获取与该宿主机IP地址对应的网口。
12.3.1.3. 启动Server
对于DeepSeek-R1-BF16全量模型,以4机32卡为例:
当前运行建议按照张量并行(tp)方式切分为32份。
python3 -m sglang.launch_server --model-path XXX --tp 32 --dist-init-addr 100.79.153.153:5000 --nnodes 4 --node-rank 0 --disable-cuda-graph
--tp 32表示tp并行的切分数量为32--model-path XXX指定模型存放路径--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份。
python3 -m sglang.launch_server --model-path XXX --tp 16 --dist-init-addr 100.79.153.153:5000 --nnodes 2 --node-rank 0 --disable-cuda-graph
对于DeepSeek-R1-Distil-Qwen-1.5B模型,使用单卡即可运行。以单卡为例:
python3 -m sglang.launch_server --model-path ${Model_path} --tp 1 --trust-remote-code --disable-cuda-graph
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