CANN Qwen3-next SGLang优化实践样例
Qwen3-next SGLang优化实践样例【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer概述Qwen3-next模型是2025.9推出的混合注意力开源大语言模型本样例针对Qwen3-next模型基于SGLang开源框架完成模型推理部署的优化适配。本项目基于NPU主要完成了以下优化特性具体内容介绍可参见基于SGLangA3集群的Qwen3-next模型推理部署优化实践。支持MTP1部署支持AscendC recurrent_gated_delta_rule大融合算子、mambav2_rmsnormgated融合算子支持PTO 融合算子支持线性Attention/GatedAttention的SPSequence Parallel序列并行部署策略支持W8A8C8量化硬件要求产品型号Atlas A3 系列基于Docker构建环境创建SGLang镜像。# 镜像下载 docker pull quay.io/ascend/sglang:main-cann8.3.rc2-a3 # 执行以下脚本创建容器请传入容器名称如 your_docker_name docker run -u root -itd --name your_docker_name --ulimit nproc65535:65535 --ipchost --device/dev/davinci0 --device/dev/davinci1 --device/dev/davinci2 --device/dev/davinci3 --device/dev/davinci4 --device/dev/davinci5 --device/dev/davinci6 --device/dev/davinci7 --device/dev/davinci8 --device/dev/davinci9 --device/dev/davinci10 --device/dev/davinci11 --device/dev/davinci12 --device/dev/davinci13 --device/dev/davinci14 --device/dev/davinci15 --device/dev/davinci_manager --device/dev/devmm_svm --device/dev/hisi_hdc -v /etc/localtime:/etc/localtime -v /home/:/home/ -v /data/:/data/ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver -v /etc/ascend_install.info:/etc/ascend_install.info -v /var/log/npu:/usr/slog -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /usr/local/dcmi:/usr/local/dcmi -v /etc/hccn.conf:/etc/hccn.conf -v /root/.pip/pip.conf:/root/.pip/pip.conf -v /etc/hosts:/etc/hosts --nethost --shm-size128g --privileged quay.io/ascend/sglang:main-cann8.3.rc2-a3 /bin/bash # 执行docker exec命令进入容器 docker exec -it -u root your_docker_name bash在容器中安装CANN软件包与Ascend Extension for PyTorch软件包。为使能GDN融合算子需要先将镜像中的CANN版本更新到8.5.0。清理旧版CANNcd /usr/local/Ascend rm -rf 8.5.0/ ascend-toolkit/ latest/ nnal/安装CANN8.5.0请从软件包下载地址下载如下软件包并参考CANN安装文档进行安装。开发套件包Ascend-cann-toolkit_${version}_linux-${arch}.run二进制算子包Ascend-cann-A3-ops_${version}_linux-${arch}.runNNAL加速包Ascend-cann-nnal_${version}_linux-${arch}.run软件包文件名中${version}表示CANN包版本号${arch}表示CPU架构如aarch64、x86_64。请参考版本兼容性说明确认HDK版本。为兼容pd分离特性推荐版本为25.2.x。创建latest软连接ln -s /usr/local/Ascend/cann /usr/local/Ascend/latest安装Ascend Extension for PyTorch7.3.0Ascend Extension for PyTorchtorch_npu为支撑PyTorch框架运行在NPU上的适配插件本样例支持的Ascend Extension for PyTorch版本为7.3.0PyTorch版本为2.6.0。请参考Ascend Extension for PyTorch安装文档安装相应版本的torch_npu插件。下载项目源码并安装依赖的python库。# 下载项目源码以master分支为例 git clone https://gitcode.com/cann/cann-recipes-infer.git下载依赖的开源框架代码加载patch。为了让使用者和开发者直观了解我们基于开源代码做的修改本样例中只包含patch代码其他框架代码需要拉取。返回cann-recipes-infer项目代码上级目录即执行git clone命令时所在目录并执行如下命令需注意请确保环境能够正常连通网络。# 返回cann-recipes-infer项目代码上级目录 # 下载sglang源码 git clone https://github.com/sgl-project/sglang.git -b v0.5.6patches目录下有五个对应不同特性更改的patch组对应关系如下stage1包含基础功能适配和MoE多流优化。stage2包含W8A8C8动态量化。stage3包含GDN和MTP适配。stage4包含CP并行。stage5rmsnormgated、GDN大融合算子适配以及问题修复。按顺序加载patches目录下的五个patch组cd sglang bash ../cann-recipes-infer/models/qwen3-next/apply_patches.sh安装sglangpip install -e python --no-deps --no-build-isolation编译安装sgl-kernel-npu# 下载sgl-kernel-npu源码 git clone https://github.com/sgl-project/sgl-kernel-npu -b 2026.03.01请参考安装文档编译安装sgl-kernel-npu。安装最新Triton-AscendTriton-Ascend是CANN生态对Triton的支持库请参考Triton-Ascend安装指南安装最新Triton-Ascendpip install triton-ascend --force-reinstall安装其他依赖pip install torchvision0.21.0 pip install torchao0.9.0编译安装自定义算子# 进入算子编译目录 cd ../cann-recipes-infer/models/qwen3-next/ops/npu_ops_transformer_ext请参考编译文档编译安装自定义算子。模型权重准备本样例使用的Qwen3-next模型权重准备方法如下# 从魔搭社区下载Qwen3-Next完整BF16权重至指定目录例如 your_bf16_weights pip install modelscope modelscope download --model Qwen/Qwen3-Next-80B-A3B-Instruct --local_dir your_bf16_weights # 将BF16权重转换为W8A8权重可选 python python/sglang/srt/utils/convert_model_qwen3_next.py \ --input_bf16_hf_path your_bf16_weights \ --output_hf_path your_w8a8_weights \ # 将BF16权重转换为W8A8C8权重可选 # 下载quant_param到指定路径比如 your_param_path wget --no-check-certificate -P your_param_path https://cann-ai.obs.cn-north-4.myhuaweicloud.com/cann-quantization/Qwen3-next/attn_c8_scale.zip # 解压quant_param到指定路径比如 your_param_path apt update apt install unzip unzip -o your_param_path/attn_c8_scale.zip -d your_param_path # 转换权重 python python/sglang/srt/utils/convert_model_qwen3_next.py \ --input_bf16_hf_path your_bf16_weights \ --output_hf_path your_w8a8c8_weights \ --c8 --quant_param_path your_param_path/attn_c8_scale \推理执行在本样例代码根目录下启动Qwen3-next的推理执行。前置环境配置修改set_env.sh中推理执行需要相关配置。修改点修改描述SOCKET_IFNAME各部署节点网卡MODEL_PATH模型权重存储路径PYTHONPATHPYTHONPATH中增加打完patch后的sglang路径IP_NODE_P0Prefill主节点ipIP_NODE_D0Decode主节点ipPD混部命令使用infer.sh启动SGLang服务以下是对相关服务拉起参数的说明配置项说明--tp 16TP并行数若开启DP实际TP并行数为此配置参数/DP配置参数--enable-dp-attention --dp-size 8DP并行数配置若需禁用DP请删除这两项配置--moe-a2a-backend deepep --deepep-mode auto启用deepep若需禁用deepep请删除这两项配置--cuda-graph-bs 16计算图batch size使用单算子模式请替换为--disable-cuda-graphPD分离命令PD分离部署需要分别启动PrefillDecodeRouter节点修改各个节点set_env.sh中的参数#修改prefill节点和decode节点的主节点ip IP_NODE_P0x.x.x.x # 修改为prefill主节点ip IP_NODE_D0y.y.y.y # 修改为decode主节点ip # prefill节点和decode节点分别设置各自的nnodes和node_rank,比如 2prefill 2decode # p0 export nnodes2 export node_rank0 # p1 export nnodes2 export node_rank1 # d0 export nnodes2 export node_rank0 # d1 export nnodes2 export node_rank1在Prefill节点运行infer_prefill.sh在Decode节点运行infer_decode.sh在Prefill节点启动Routersource set_env.sh python3 -m sglang_router.launch_router --decode http://${d0}:30001 --prefill http://${p0}:30001 --pd-disaggregation --mini-lb --host 0.0.0.0 --port 30002新增特性使能特性使能方式说明ACLGraph服务拉起参数中配置--cuda-graph-bsMoE多流set_env.sh中增加以下环境变量配置export ENABLE_NPU_DEEPEP_MOE_MULTI_STREAM1GDNGated Delta Net融合算子set_env.sh中增加以下环境变量配置export ENABLE_ASCENDC_FUSION_GDNtruermsnormgated融合算子1.set_env.sh中增加以下环境变量配置export USE_CUSTOM_NORM_KERNELtrue2. 指定核心数默认1建议默认export RMSNORMGATED_BLOCK_DIMS2MTP(多Token预测)1.set_env.sh中增加以下环境变量配置export SGLANG_ENABLE_OVERLAP_PLAN_STREAM1export SGLANG_ENABLE_SPEC_V212. 增加以下服务拉起的配置项--speculative-algorithm NEXTN --speculative-num-steps 1 --speculative-eagle-topk 1 --speculative-num-draft-tokens 2 \3. 确保set_env.sh中使能GDN融合算子export ENABLE_ASCENDC_FUSION_GDNtrueA8W8量化1.set_env.sh中修改deepep环境变量配置将export SGLANG_DEEPEP_BF16_DISPATCH1替换为export DEEP_NORMAL_MODE_USE_INT8_QUANT12. 增加以下服务拉起的配置项--quantization w8a8_int83.set_env.sh中配置A8W8权重路径A8W8C8量化1.set_env.sh中修改deepep环境变量配置将export SGLANG_DEEPEP_BF16_DISPATCH1替换为export DEEP_NORMAL_MODE_USE_INT8_QUANT12.set_env.sh中增加以下环境变量配置export ASCEND_USE_C813. 增加以下服务拉起的配置项--quantization w8a8_int84.set_env.sh中配置A8W8C8权重路径序列并行1. 本样例支持PD分离场景下Prefill节点Gated Attention的CP和TP混合并行与CP的负载均衡启用方式在infer_prefill.sh中将DP配置--enable-dp-attention --dp-size 8替换为--cp-size 82.set_env.sh中增加以下环境变量配置开启CP负载均衡export CP_USE_ZIGZAG1负载均衡的优化面向长序列单batch场景。规格约束说明PD分离场景P和D部署策略需相同SGLang框架暂未支持MHA(Multi-Head Attention)PD不同策略部署MTP暂不支持和图模式同时开启MTP暂不支持和C8同时开启暂不支持PD分离下开启MTPCP仅支持PD分离场景开启启用时P和D部署策略可不同P可增加cp_size配置需cp_sizetp_size需要PD卡数相同SGLang框架kv传输逻辑限制CP不支持与DP同时开启CP复用了DP通信域请确保chunk prefill size 71680triton算子的规格约束GDN切分头数存在限制tp_size需不大于32当前框架存在精度问题当内部索引 mamba_cache_indices0 时会产生错误结果该索引会在 Mamba cache 容量范围内循环使用。max-mamba-cache-size 用于控制 Mamba cache 容量默认值较小通常为2索引循环时会频繁回到0从而导致精度下降。将 max-mamba-cache-size调大可设置为512有效平衡精度与性能可显著降低该问题触发概率但会带来一定性能开销。测试方法单请求精度验证普通长度的序列可以通过curl的方式直接发送验证curl --location http://127.0.0.1:30002/generate -H Content-Type: application/json --data {text: [1 1 ?], sampling_params: { temperature: 0, max_new_tokens: 15}}若服务拉起配置了--skip-server-warmup请在验证精度前发送dp_size个请求保证每个dp_rank都预热到。长序列可以通过以下send_long_text.py构造发送请将脚本内的TXT_PATH配置为要发送的文本。基于数据集的精度验证通过以下命令可以执行few_shot_gsm8k进行精度验证结果大于0.9即为精度正常cd python/sglang/test python3 few_shot_gsm8k.py --parallel 16 --num-questions 100 --num-shots 5 --port 30002 --temperature 0指定B/S的随机请求验证通过bench_serving.sh脚本可以通过bench_serving指定B/S发送请求。可先通过 https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json?downloadtrue 下载数据集并在脚本里指定DatasetJsonPath为对应json文件路径。Benchmark基于Atlas A3本实践使用下述部署方式使能优化点ACLGraph、A8W8C8量化、MoE多流、GDN融合算子对Qwen3Next本进行了性能Benchmark测试。基础模型机器型号graph_bsdp_sizetp_sizeep_sizemax_prompt_lengthnum_prompts纯模型decode时延msQwen3-Next-80B-A3B-Instruct-A8W8C8Atlas A3 16die168216256k1620.6性能采集可通过以下方式加载profiling相关的patch修改使用torch_npu.profiler采集性能数据。加载patch在sglang目录下加载PROFILE.patch:git apply ../cann-recipes-infer/models/qwen3-next/patches/PROFILE.patchprofiler配置通过设置环境变量PROFILER_MODE为[all, decode, prefill]中的指定值选择profiler的范围。以decode为例export PROFILER_MODEdecode配置SGLANG_TORCH_PROFILER_DIR指定profiler的保存路径export SGLANG_TORCH_PROFILER_DIR/home/sglang/prof/修改python/sglang/srt/model_executor/model_runner.py中的schedule控制采集范围。torch_npu.profiler的接口与torch原生profiler类似具体使用方法可参考昇腾社区。 默认配置下采集step4-step14的profiling数据。运行采集使用要采集的配置拉起服务若需精准控制采集的step请确保配置了--skip-server-warmup参数跳过服务启动时的warmup。可使用指定B/S的随机请求验证发送指定请求若需精准控制采集的step在使用bench_serving时添加--warmup-requests 0可跳过warmup请求。采集结束后profiling数据保存在SGLANG_TORCH_PROFILER_DIR指定的目录下。查看Trace图可以通过ASCEND_PROFILER_OUTPUT目录下的trace_view.json文件查看算子运行的trace图。推荐使用昇腾官方可视化工具MindStudio Insight查看trace图具体下载和使用方式请参考MindStudio Insight工具。【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考