1、产品形态:Atlas 800T A2 2、NPU驱动固件: 25.2.0 3、CANN软件:CANN 8.2.RC1 4、推理框架:vLLM
vllm 0.11.0rc3+empty /vllm-workspace/vllm
vllm_ascend 0.11.0rc0 /vllm-workspace/vllm-ascend
transformers 4.56.2
torch 2.7.1+cpu
torch_npu 2.7.1.dev20250724
torchvision 0.22.1git lfs install
git clone https://gitcode.com/Ascend-SACT/Qwen3-VL-235B-A22B-Thinking_vllm-ascend.gitdocker load -i qwen3-vl-vllm-ascend-image.tar
docker images(1)运行容器脚本:docker_run.sh
#!/bin/sh
NAME=$1 # 执行脚本输入容器名称,例:docker_run.sh qwen3-vl
PORT=8000
DEVICES="0,1,2,3,4,5,6,7" # 默认Atlas 800I A2 8卡环境,基于实际情况修改
IMAGE="qwen3-vl-vllm-ascend-image:latest-0925" # 加载镜像
docker run -itd -u 0 --ipc=host --privileged \
-e VLLM_USE_MODELSCOPE=True -e PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256 \
-e ASCEND_RT_VISIBLE_DEVICES=$DEVICES \
--name $NAME \
--net=host \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /opt/data/verification/models:/root/.cache \
-p $PORT:8000 \
-it $IMAGE bash(2)执行脚本
ash docker_run.sh qwen3-vl # 脚本已上传至魔乐,下载时可一并下载,使用前检查+适配,其中参数qwen3-vl为容器名称,请适配修改
docker exec -it qwen3-vl /bin/bash(1)部署脚本: --Node0:qwen3_vl_infer_node0.sh
#!/bin/sh
# this obtained through ifconfig
# nic_name is the network interface name corresponding to local_ip
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
nic_name="xxx" # 使用ifconfig 查看node0业务面IP对应的网卡名称
local_ip="xx.xx.xx.xx" # 使用ifconfig 查看node0业务面IP
cd /workspace/vllm
export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=64
export VLLM_USE_V1=1
export HCCL_BUFFSIZE=1024
# If you want to the quantization manually, please refer to https://vllm-ascend.readthedocs.io/en/latest/user_guide/feature_guide/quantization.html
vllm serve /root/.cache/Qwen3-VL-235B-A22B-Thinking \ # 基于实际情况修改模型权重文件所在路径
--host 0.0.0.0 \
--port 8015 \ # 推理服务端口,注意避免端口占用
--data-parallel-size 2 \
--api-server-count 2 \
--data-parallel-size-local 1 \
--data-parallel-address $local_ip \
--data-parallel-rpc-port 13400 \
--seed 1024 \
--served-model-name qwen3-vl \
--tensor-parallel-size 8 \
--enable-expert-parallel \
--max-num-seqs 8 \
--max-model-len 32768 \
--max-num-batched-tokens 4096 \
--trust-remote-code \
--no-enable-prefix-caching \
--gpu-memory-utilization 0.9 \
--enforce-eager--Node1:qwen3_vl_infer_node1.sh
#!/bin/sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
nic_name="xxx" # 使用ifconfig 查看node0业务面IP对应的网卡名称
local_ip="xx.xx.xx.xx" # 使用ifconfig 查看node1业务面IP
node0_ip="xx.xx.xx.xx" # 使用ifconfig 查看node0业务面IP
cd /workspace/vllm
export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=64
export VLLM_USE_V1=1
export HCCL_BUFFSIZE=1024
vllm serve /root/.cache/Qwen3-VL-235B-A22B-Thinking \ # 基于实际情况修改模型权重文件所在路径
--host 0.0.0.0 \
--port 8015 \ # 推理服务端口,注意避免端口占用
--headless \
--data-parallel-size 2 \
--data-parallel-size-local 1 \
--data-parallel-start-rank 1 \
--data-parallel-address $node0_ip \
--data-parallel-rpc-port 13400 \
--seed 1024 \
--tensor-parallel-size 8 \
--served-model-name qwen3-vl \
--max-num-seqs 8 \
--max-model-len 32768 \
--max-num-batched-tokens 4096 \
--enable-expert-parallel \
--trust-remote-code \
--no-enable-prefix-caching \
--gpu-memory-utilization 0.9 \
--enforce-eager(2)执行脚本 注:参考 https://vllm-ascend.readthedocs.io/zh-cn/latest/tutorials/multi_node_kimi.html 中的 referring to multi_node.md 完成双机环境检查
#节点0,参考注释与环境情况适配修改
bash qwen3_vl_infer_node0.sh
#节点1,参考注释与环境情况适配修改
bash qwen3_vl_infer_node1.sh(1)请求指令
curl http://localhost:8015/v1/chat/completions \
-H "Content-Type: application/json" \
-d \
'{
"model": "qwen3-vl",
"max_tokens":256,
"messages": [
{
"role": "user",
"content": "请做一下自我介绍"
}
]
}'(2)响应示例
{"id":"chatcmpl-0a8af2b1cb1b4150bdf96e70f9946f89","object":"chat.completion","created":1758803014,"model":"qwen3-vl","choices":[{"index":0,"message":{"role":"assistant","content":"好的,用户让我做一下自我介绍。首先,我需要明确用户的需求是什么。可能他们刚接触这个平台,想了解我的功能和背景。作为通义千问,我应该先介绍自己的名字,然后说明我是通义实验室研发的,强调我的中文名和英文名。\n\n接下来,用户可能想知道我能做什么。需要列出主要功能,比如回答问题、创作文字、编程、表达观点等。要具体一点,比如写故事、写公文、写邮件、写剧本这些例子,这样用户更容易理解。\n\n然后,可能还要提到我的多语言支持,虽然用户现在用中文提问,但说明我能处理多种语言会更好。另外,用户可能关心我的训练数据,需要说明数据截止时间,但要注意避免敏感信息,比如不提及具体时间点,只说“训练数据截止到2024年10月”。\n\n还要考虑用户可能有深层需求,比如是否免费、是否需要注册,但自我介绍可能不需要涉及这些,除非用户特别问。所以暂时不提,保持简洁。\n\n另外,用户可能希望自我介绍友好且专业,所以语气要亲切,用一些表情符号或者友好的措辞。比如开头用“你好!”,结尾邀请用户","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning_content":null},"logprobs":null,"finish_reason":"length","stop_reason":null,"token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":15,"total_tokens":271,"completion_tokens":256,"prompt_tokens_details":null},"prompt_logprobs":null,"prompt_token_ids":null,"kv_transfer_params":null}1、非商用发布产品,请勿直接用于生产环境。 2、使用约束: --序列长度:初步验证64k可以正常运行,暂未向上摸测边界; --并发数:初步验证最高并发至64,暂未向上摸测边界