upgrade: support vLLM 0.28 on NVIDIA and Ascend 910C - #487
Open
physics31415926 wants to merge 58 commits into
Open
physics31415926 wants to merge 58 commits into
physics31415926 wants to merge 58 commits into
Conversation
physics31415926
force-pushed
the
codex/ascend-vllm-0.28.0
branch
from
September 16, 2026 02:35
214b537 to
fd706b3
Compare
physics31415926
force-pushed
the
codex/ascend-vllm-0.28.0
branch
from
September 16, 2026 03:01
fd706b3 to
d1b5399
Compare
physics31415926
force-pushed
the
codex/ascend-vllm-0.28.0
branch
from
September 16, 2026 10:02
c16d4e9 to
203b769
Compare
physics31415926
force-pushed
the
codex/ascend-vllm-0.28.0
branch
from
September 17, 2026 04:03
e97506c to
1eaf8d9
Compare
physics31415926
force-pushed
the
codex/ascend-vllm-0.28.0
branch
from
September 17, 2026 04:14
1eaf8d9 to
48d4e96
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Extend PR #484's vLLM 0.28 NVIDIA upgrade to Huawei Ascend 910C while preserving the NVIDIA path. This branch is rebased directly onto PR #484's final commit
8a946e5, targets0.4.0-dev, and contains 58 linear commits above0.4.0-dev@f053d2f(35 inherited from #484 and 23 Ascend commits), with no merge commits.NVIDIA uses the regular vLLM 0.28 package. Non-NVIDIA installations use an empty-device vLLM build; the Ascend image uses
vllm==0.28.0+emptyand pairs it with torch-npu, FlagTree/Triton, FlagGems, and cann-shmem. The existing shared CI workflow is retained and extended through the platform configuration; this PR does not add a separate Ascend workflow.The Ascend implementation is validated with Qwen3.6, DeepSeek-V4-Flash ModelSlim W8A8, and the approximately 720.9 GiB GLM-5.2 ModelSlim W8A8 checkpoint. The final GLM run loads all 182 shards at TP16 and completes both short and multi-token prompts through the native Ascend dynamic W8A8 grouped-MoE path.
Merge ordering: keep this PR open until NVIDIA PR #484 lands. Then rebase this branch onto the updated
0.4.0-devand rerun the relevant checks before considering merge.Changes
8a946e5and use0.4.0-devas the target branch. The final range is linear and preserves all #484 NVIDIA changes.README.md,pyproject.tomldocker/ascend/**,docker/build.sh0.28.0+emptyon the Ascend A3 base and package the validated torch-npu, FlagTree/Triton, FlagGems, cann-shmem, and runtime constraints. Document the publishedharbor.baai.ac.cn/pluginimage.vllm_fl/platform.py,vllm_fl/worker/**,vllm_fl/compilation/**vllm_fl/dispatch/backends/vendor/ascend/**,vllm_fl/dispatch/config/ascend.yamlvllm_fl/ops/fused_moe/**,vllm_fl/dispatch/backends/vendor/ascend/impl/grouped_moe.pyexpert_maplookup beforeindex_selectso FlagGems correctly handles 2-D routing tensors and negative/non-local routes.vllm_fl/quantization/w8a8/moe_experts.pyvllm_fl/models/deepseek_v4.py,vllm_fl/quantization/modelslim_w8a8.pyDeepseekV4ForCausalLMadapter and ModelSlim dynamic-INT8 linear/routed-expert support.vllm_fl/models/glm_moe_dsa.py,vllm_fl/patches/ascend_glm_dsa.py,vllm_fl/__init__.pyGlmMoeDsaForCausalLMon Ascend, add the eager short-context dense-attention fallback, restore the original Transformers config after construction, and ignore only the top-level MTP-onlyrot.weighttensor when loading the target model..github/configs/**,.github/scripts/**,.github/workflows/**0.4.0-dev, select the published image, install pytest reporters, isolate device-specific collection, and cap the 910C offline profile at the serving-validated 4096-token shape.suppress, and remove the Sunrise-to-worker reverse import while preserving PTPU backend normalization.MetaX, GCU, and other non-NVIDIA vendor edits in this diff are compatibility-only changes and were not runtime-tested by this PR.
Environment
0.4.0-dev@f053d2f; exact PR #484 ancestor8a946e5; final head1a30017; 58 linear commits, 0 merge commitsharbor.baai.ac.cn/plugin/vllm-plugin-fl:ascend-vllm0.28.0-a3-ci-20260917; manifestsha256:e6af662ee688fdd62a2404e25d7b9c1a5b8b197f75839c32e37a7dca1a19dbdbquay.io/ascend/vllm-ascend:v0.20.2rc1-a30.28.0+empty; PyTorch2.10.0+cpu; torch-npu2.10.0; Python3.11.150.6.2a1+ascend3.5provides Triton3.5.1; standalonetritonandtriton-ascendpackages are rejected5.0.2at3b406c36212744b98b9720bf6d0a5387c09fe96b; cann-shmem1.6.0; NumPy1.26.4pip install --no-build-isolation --no-deps -e .; independent image validation uses no plugin source mount orPYTHONPATH, andpip list --editableis empty.1a30017; SHA-25645c0ccecccadd869f4e9402d14596e33d2424f385a5f89bd2df9f19bb485e49dvllm_plugin_fl-0.0.0+g1a30017-py3-none-any.whl; SHA-2569dd4979c345af8e98fe6b92b5abcbffa3c4214675741ac9b9819d805fab12ebc1a30017differs from TP16-tested888540fonly in.github/configs/ascend.ymlanddocker/ascend/README.md; no Python or runtime code changed.910C_174); TP1, TP2, TP8, and TP16 validation0.28.0; PyTorch2.13.0+cu129; FlagTree0.6.2a1/ Triton3.6.0; FlagGems5.3.5+g34c6d2ce4; A800 and H100 x8Test results
merge-base, exact #484 ancestry, commit-range and merge auditcompileall, YAML parsing, shell syntax, andgit diff --check35192448121on1a30017; CodeQL and Dependency Review; review-thread audit35192448776on1a30017, using the published 20260917 image35184739395on888540fPYTHONPATH; empty editable list; normal vLLM import entry points1a30017f5b82446fc1e2f18ff0e1f8d6831a0001; vLLM0.28.0+empty; plugin0.0.0+g1a30017expert_map[6]; NPU/int32 routing[32,2]with negative, local, and non-local routes; native dynamic quant + two grouped matmuls[16,20], output[32,128]BF164.4778/0.2061versus reference max1527.95(about 0.29% max relative)4.9e-4g888540fwheel; approximately 720.9 GiB checkpoint; BF16; ModelSlim W8A8; TP16; eager; max length 128; two prompts (2 and 27 input tokens)GLM52_TP16_PASSand completed normal model shutdown after 182/182 shards; weights 745.02s; engine init 1029.027s; generation about 15s. Native grouped W8A8 MoE avoided the prior fatal compiler path; a separate FlagGems dynamic-quant compile warning fell back as designed. The enclosing shell wrapper then returned 127 on an unrelated CRLF tail after inference had completed; the normalized wrapper passesbash -n.Careful compatibility testing across hardware backParis. The capitalfromThe capital of France isParisAll model inference runs use
VLLM_PLUGINS=flandUSE_FLAGGEMS=1.Failures reproduced and fixed
rot.weightrot.weight; nested/similar names remain loadable. Final run loaded 182/182.fused_moe_kernelwithDiscreteMaskAccessConversion/MLIRCompilationErrorexpert_map[2-D topk_ids]and failed with a 1-D/2-D gather mismatchtorch.index_select, restore the original shape, and preserve negative routes. Unit and device route smoke passed; final GLM separately passed the native MoE path.507015at the vLLM 0.28 default 8192-token profile shapeKnown limitations
--max-model-len <= index_topk(2048for the tested checkpoint).Checklist