人工智能大模型模型推理服务AscendCANN【免费下载链接】vllm-ascendCommunity maintained hardware plugin for vLLM on Huawei Ascend项目地址https://gitcode.com/gh_mirrors/vl/vllm-ascend点击查看免费下载本文基于 vllm-ascend 仓库的官方 Quick Start 文档quick_start.md讲解如何在已就绪的 Ascend 主机上使用预构建的 vLLM Ascend Docker 镜像跑通第一个离线推理任务、部署第一个vllm serve在线服务。读完本文你将掌握五类硬件A2、A3、950DT Products、Atlas 300I DUO、Atlas 200I Pro各自的镜像拉取与容器启动方式、容器环境验证方法以及两条硬件路径标准路径与 310p 路径的离线/在线推理配置差异并能理解这些配置背后的源码实现。一、开始之前环境要求与硬件支持矩阵快速上手的前置条件很明确操作系统LinuxPython 3.10, 3.13这是宿主机/源码安装口径预构建镜像内实际使用 Python 3.12见 mkdocs.yml 中release_python_version与release_image_python_version两个变量的区分Docker用于容器方式支持硬件官方矩阵如下TypeCommon productsAtlas A2 ProductsAtlas 800T A2, Atlas 900 A2 PoD, Atlas 200T A2 Box16, Atlas 300T A2, Atlas 800I A2, and othersAtlas A3 ProductsAtlas 800T A3, Atlas 900 A3 SuperPoD, Atlas 9000 A3 SuperPoD, Atlas 800I A3, and othersAtlas inference series productsAtlas 300I DUO and Atlas 200I Pro950DT Products950DT预构建镜像内已经包含一套经过整体验证的 Python 与 Ascend 用户态软件栈包括 CANN、NNAL、PyTorch、TorchNPU、vLLM 和 vLLM Ascend。按 mkdocs.yml 记录的当前发布文档栈验证组合为Ascend HDK26.0.RC1、CANN Toolkit Ops9.1.0、NNAL9.1.0、PyTorch2.10.0、TorchNPU2.10.0.post4、Triton Ascend3.2.2、vLLM Ascendv0.23.0。需要特别注意A2、A3 和 950DT Products 的镜像还包含对应版本的 Triton Ascend 运行时而 Atlas 300I DUO 和 Atlas 200I Pro 不使用 Triton Ascend——这一差异会直接影响后文的镜像 tag 与运行时配置。各镜像对应的版本组合是作为一个整体验证的不要自行混用不同发布的版本如需其他发布版本可参考 Installation Guide 中“Hardware and software stack”一节的完整兼容性表格。镜像 tag 规则与下载加速镜像统一发布在quay.io四类硬件对应不同 tag 后缀以{{ vllm_ascend_version }}v0.23.0为例硬件Ubuntu 镜像 tagopenEuler 镜像 tagA2quay.io/ascend/vllm-ascend:v0.23.0quay.io/ascend/vllm-ascend:v0.23.0-openeulerA3quay.io/ascend/vllm-ascend:v0.23.0-a3quay.io/ascend/vllm-ascend:v0.23.0-a3-openeulerAtlas 300I DUO / Atlas 200I Proquay.io/ascend/vllm-ascend:v0.23.0-310pquay.io/ascend/vllm-ascend:v0.23.0-310p-openeuler950DT Productsquay.io/ascend/vllm-ascend:v0.23.0-a5quay.io/ascend/vllm-ascend:v0.23.0-a5-openeuler如果直接访问quay.io下载缓慢可以只替换注册中心前缀、完整保留原镜像 tag 的后缀如-a3、-310p、-openeuler来加速拉取。例如原始地址为quay.io/ascend/vllm-ascend:TAG时文档给出了两个替代前缀m.daocloud.io/quay.io/ascend/vllm-ascend:$TAG或quay.nju.edu.cn/ascend/vllm-ascend:$TAG。二、拉取镜像并启动容器不同硬件的docker run参数差异主要在三处挂载的 NPU 设备节点数量、网络模式、以及宿主机配置文件的挂载清单。以下命令均需在宿主机执行进入容器后再做后续验证。A2单设备节点export IMAGEquay.io/ascend/vllm-ascend:v0.23.0 # openEuler 使用 -openeuler 后缀 docker pull $IMAGE export DEVICE/dev/davinci0 export MODEL_CACHE${HOME}/.cache mkdir -p $MODEL_CACHE docker run --rm \ --name vllm-ascend \ --shm-size1g \ --device $DEVICE \ --device /dev/davinci_manager \ --device /dev/devmm_svm \ --device /dev/hisi_hdc \ -v /usr/local/dcmi:/usr/local/dcmi \ -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 $MODEL_CACHE:/root/.cache \ -p 8000:8000 \ -it $IMAGE bash参数要点--shm-size1g提供共享内存--device逐项放行 NPU 设备节点/dev/davinci0与管理节点davinci_manager、devmm_svm、hisi_hdc-v挂载驱动库、npu-smi与安装信息文件保证容器内能识别 NPU$MODEL_CACHE挂到容器内/root/.cache使模型权重缓存在宿主机上、跨容器复用-p 8000:8000为后文在线服务预留端口。A3双 DIE需要两个设备节点A3 采用双 DIE 设计启动前需要确认/dev/davinci0和/dev/davinci1两个设备节点都存在并在docker run中同时放行export IMAGEquay.io/ascend/vllm-ascend:v0.23.0-a3 # openEuler 使用 -a3-openeuler 后缀 docker pull $IMAGE export DEVICE0/dev/davinci0 export DEVICE1/dev/davinci1 export MODEL_CACHE${HOME}/.cache mkdir -p $MODEL_CACHE docker run --rm \ --name vllm-ascend \ --shm-size1g \ --device $DEVICE0 \ --device $DEVICE1 \ --device /dev/davinci_manager \ --device /dev/devmm_svm \ --device /dev/hisi_hdc \ -v /usr/local/dcmi:/usr/local/dcmi \ -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 $MODEL_CACHE:/root/.cache \ -p 8000:8000 \ -it $IMAGE bashAtlas 300I DUO单设备节点镜像使用-310p后缀启动命令与 A2 基本一致同样只放行/dev/davinci0等单个设备节点此处不再重复完整命令可对照 atlas-300i-duo.inc.md 与 A2 小节逐参数比对。Atlas 200I Pro需要额外设备节点与宿主机文件Atlas 200I Pro 要求更多--privileged权限、--shm-size10g的共享内存以及一批额外的驱动库和宿主机配置文件。启动前必须确认命令中挂载的所有宿主机路径真实存在export IMAGEquay.io/ascend/vllm-ascend:v0.23.0-310p # openEuler 使用 -310p-openeuler 后缀 docker pull $IMAGE export MODEL_CACHE${HOME}/.cache mkdir -p $MODEL_CACHE docker run --rm \ --privileged \ --name vllm-ascend \ --shm-size10g \ --device/dev/davinci0:/dev/davinci0 \ --device/dev/davinci_manager \ --device/dev/ascend_manager \ --device/dev/user_config \ -v /etc/sys_version.conf:/etc/sys_version.conf \ -v /etc/ld.so.conf.d/mind_so.conf:/etc/ld.so.conf.d/mind_so.conf \ -v /etc/hdcBasic.cfg:/etc/hdcBasic.cfg \ -v /var/dmp_daemon:/var/dmp_daemon \ -v /usr/lib64/libmmpa.so:/usr/lib64/libmmpa.so \ -v /usr/lib64/libcrypto.so.1.1:/usr/lib64/libcrypto.so.1.1 \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/lib64/libstackcore.so:/usr/lib64/libstackcore.so \ -v /usr/lib/aarch64-linux-gnu/libyaml-0.so.2:/usr/lib64/libyaml-0.so.2 \ -v /etc/slog.conf:/etc/slog.conf \ -v /var/slogd:/var/slogd \ -v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \ -v /usr/lib64/libtensorflow.so:/usr/lib64/libtensorflow.so \ -v $MODEL_CACHE:/root/.cache \ -p 8000:8000 \ -it $IMAGE bash注意 Ubuntu 与 openEuler 的挂载清单略有差异openEuler 版本额外挂载libsemanage.so.2并且 yaml 库的实际文件名是libyaml-0.so.2.0.9映射到容器内的libyaml-0.so.2npu-smi位于/usr/local/sbin/而非/usr/local/bin/。950DT Productshost 网络 hccn_tool950DT 使用-a5后缀镜像。与其他硬件最大的区别是不映射 8000 端口改用--nethost并且额外挂载hccn_tool工具目录export IMAGEquay.io/ascend/vllm-ascend:v0.23.0-a5 # openEuler 使用 -a5-openeuler 后缀 docker pull $IMAGE export MODEL_CACHE${HOME}/.cache mkdir -p $MODEL_CACHE docker run --rm \ --name vllm-ascend \ --nethost \ --shm-size1g \ --device /dev/davinci0 \ --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 $MODEL_CACHE:/root/.cache \ -it $IMAGE bash三、验证容器环境进入容器后执行以下命令验证环境是否就绪。当输出包含vLLM Ascend environment: OK时即表示容器可用npu-smi info python3 - PY import torch import vllm import vllm_ascend assert torch.npu.is_available(), No available Ascend NPU detected in the container print(vLLM Ascend environment: OK) PY这条验证逻辑是两段式的npu-smi info确认驱动层面能看到 NPU 设备Python 断言则确认 TorchNPU 设备后端真正可用torch.npu.is_available()同时确认vllm与vllm_ascend两个包都能被导入——这也是仓库 CI 中 doctest 的验证点之一见下文“第七节”。四、模型来源Hugging Face 与 ModelScope如果运行环境无法稳定访问 Hugging Face模型下载可能因连接超时、DNS 错误等网络问题失败可以切换到 ModelScopeexport VLLM_USE_MODELSCOPETrue pip install modelscope1.18.1,1.38如果模型已经下载到本地则无需设置该环境变量只需把下文示例中的模型 IDQwen/Qwen3-0.6B替换为本地目录路径即可。仓库中同样保留了 offline_inference_npu.py 这类示例脚本其开头就设置了VLLM_USE_MODELSCOPETrue可直接参考。五、离线推理离线推理分两条硬件路径两条路径的 Qwen3-0.6B 示例均经过官方验证validated。路径一A2 / A3 / 950DT Products默认加载配置在容器内创建example.pyfrom vllm import LLM, SamplingParams prompts [ Hello, my name is, The future of AI is, ] sampling_params SamplingParams( temperature0.0, max_tokens32, ) llm LLM(modelQwen/Qwen3-0.6B) outputs llm.generate(prompts, sampling_params) assert len(outputs) len(prompts) for output in outputs: generated_text output.outputs[0].text assert generated_text.strip() print(fPrompt: {output.prompt!r}, Generated text: {generated_text!r})运行python3 example.py成功时日志中会出现 vLLM 检测到 Ascend 平台插件的输出INFO 05-27 11:40:38 [__init__.py:44] Available plugins for group vllm.platform_plugins: INFO 05-27 11:40:38 [__init__.py:46] - ascend - vllm_ascend:register INFO 05-27 11:40:38 [__init__.py:49] All plugins in this group will be loaded. Set VLLM_PLUGINS to control which plugins to load. INFO 05-27 11:40:38 [__init__.py:238] Platform plugin ascend is activated生成的结果形如Prompt: Hello, my name is, Generated text: Lucy and I am an 8 year old who loves to draw and write stories Prompt: The future of AI is, Generated text: a topic that is being discussed in various contexts. In the business world, AI推理结束后进程退出时可能出现如下日志属于正常收尾过程不影响推理结果(EngineCore pid970) INFO 05-12 11:36:00 [core.py:1201] Shutdown initiated (timeout0) (EngineCore pid970) INFO 05-12 11:36:00 [core.py:1224] Shutdown complete ERROR 05-12 11:36:01 [core_client.py:704] Engine core proc EngineCore died unexpectedly, shutting down client. sys:1: DeprecationWarning: builtin type swigvarlink has no __module__ attribute路径二Atlas 300I DUO / Atlas 200I Pro310p 运行时要求310p 路径有三个硬性运行时要求使用float16使用FULL_DECODE_ONLY图模式并限制图捕获尺寸enable_npugraph_ex不受支持需显式关闭。对应的example.py如下相比标准路径多传了dtype、max_num_seqs、compilation_config和additional_config四组参数from vllm import LLM, SamplingParams MODEL Qwen/Qwen3-0.6B prompts [ Hello, my name is, The future of AI is, ] llm LLM( modelMODEL, dtypefloat16, max_num_seqs8, compilation_config{ cudagraph_mode: FULL_DECODE_ONLY, cudagraph_capture_sizes: [1, 2, 4, 8], }, additional_config{ ascend_compilation_config: { enable_npugraph_ex: False, }, }, ) sampling_params SamplingParams( temperature0.0, max_tokens32, ) outputs llm.generate(prompts, sampling_params) assert len(outputs) len(prompts) for output in outputs: generated_text output.outputs[0].text assert generated_text.strip() print(fPrompt: {output.prompt!r}, Generated text: {generated_text!r})python3 example.py运行成功后的平台检测日志、生成结果与无害退出日志与标准路径完全相同此处不再重复。源码视角这些 310p 配置项是如何生效的enable_npugraph_ex是 vLLM Ascend 编译配置的字段定义在 ascend_config.py 的AscendCompilationConfig中默认值为True。该数据类的after校验器会调用get_current_hardware_profile()检查硬件能力当当前硬件 profile 不支持HardwareCapability.NPUGRAPH_EX时npugraph_ex、static_kernel、super_kernel会被级联禁用并打印 warning。能力枚举本身定义在 hardware_profile.py。另外platform.py 中有一段与cudagraph_mode相关的处理逻辑当模式为NONE或走 piecewise 编译分段编译时会把ascend_compilation_config中的enable_npugraph_ex、enable_static_kernel、enable_super_kernel一并置为False对于不支持的 cudagraph 模式则回退到NONE。从源码结构看310p 路径要求FULL_DECODE_ONLY且关闭enable_npugraph_ex正是为了让图捕获只覆盖 decode 阶段、并绕开该硬件上不支持的 npugraph 扩展优化这也解释了为什么cudagraph_capture_sizes要显式限定为[1, 2, 4, 8]这样的小尺寸集合。六、在线服务vllm serve路径一A2 / A3 / 950DT Productsvllm serve Qwen/Qwen3-0.6B 看到以下日志即表示服务启动成功INFO: Started server process [3594] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit)查询模型列表curl --fail http://localhost:8000/v1/models发送一条补全请求curl --fail http://localhost:8000/v1/completions \ -H Content-Type: application/json \ -d { model: Qwen/Qwen3-0.6B, prompt: Beijing is a, max_tokens: 5, temperature: 0 }判断成功的关键标准响应中choices[0].text包含非空的生成文本错误响应或空补全都不算推理成功。路径二Atlas 300I DUO / Atlas 200I Pro310p 路径把离线示例中的参数映射到了命令行参数上与第五节的一一对应关系是dtypefloat16→--dtype float16max_num_seqs8→--max-num-seqs 8compilation_config→--compilation-configJSONadditional_config→--additional-configJSONvllm serve Qwen/Qwen3-0.6B \ --dtype float16 \ --max-num-seqs 8 \ --compilation-config {cudagraph_mode:FULL_DECODE_ONLY,cudagraph_capture_sizes:[1,2,4,8]} \ --additional-config {ascend_compilation_config:{enable_npugraph_ex:false}} 启动成功日志、模型列表查询与补全请求的验证方式与标准路径相同。优雅停止服务vLLM 以后台进程方式运行时可以用kill -2即 SIGINT优雅停止效果等价于前台进程按CtrlCVLLM_PID$(pgrep -f vllm serve) kill -2 $VLLM_PID⚠️ 如果当前环境还有其他vllm serve进程pgrep -f vllm serve可能匹配到那些服务执行kill前务必确认VLLM_PID是本示例启动的服务避免误杀。正常停止会输出INFO: Shutting down FastAPI HTTP server. INFO: Shutting down INFO: Waiting for application shutdown. INFO: Application shutdown complete.最后按CtrlD退出容器。七、这些步骤如何被自动验证快速上手文档并不是“写完即止”的静态文本仓库的 doctest 框架会把文档中带!-- doctest: ... --标记的代码块提取出来在真实硬件上逐块执行。001-quickstart-test.sh 的run_quickstart函数按硬件选择标记前缀a2→quickstart-standard310p→quickstart-300i-duo依次执行模型源配置quickstart-modelscope、容器环境验证quickstart-container-verify、离线示例*-offline/*-offline-run与在线示例*-online-serve→ 轮询localhost:8000/v1/models就绪 →*-online-model-list→*-online-completion→*-online-stop最后等待进程退出。这意味着本文引用的每一条命令、每段 Python 代码在对应硬件上都是被 CI 反复跑通的可复制性有测试背书。八、下一步Supported Models选择其他受支持模型Model Tutorials具体模型的部署教程Installation Guidepip、CANN 环境与源码安装三种路径的软件环境搭建Feature Tutorials分布式部署与高级特性FAQ常见部署问题的排查。赞分享人工智能大模型模型推理服务AscendCANN【免费下载链接】vllm-ascendCommunity maintained hardware plugin for vLLM on Huawei Ascend项目地址https://gitcode.com/gh_mirrors/vl/vllm-ascend点击查看免费下载相关推荐vLLM 快速上手从离线批量推理到 OpenAI 兼容在线服务vLLM 快速上手从离线批量推理到 OpenAI 兼容在线服务 本指南基于 vLLM 官方 Quickstart 文档整理而成帮助你在最短时间内跑通两种最核人工智能大模型模型推理服务推理引擎本地部署昇腾 Ascend NPU 上基于 vllm-ascend 部署 Qwen3.6-35B-A3B 推理服务全指南昇腾 Ascend NPU 上基于 vllm ascend 部署 Qwen3.6 35B A3B 推理服务全指南 Qwen3.6 35B A3B 是通义实验室发大模型人工智能教程本地部署微调Qwen3.6-35B-A3B 昇腾 NPU 部署实战基于 vllm-ascend 的离线推理与 OpenAI API 服务化Qwen3.6 35B A3B 昇腾 NPU 部署实战基于 vllm ascend 的离线推理与 OpenAI API 服务化 Qwen3.6 35B A3B教程大模型本地部署微调创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?