### What this PR does / why we need it?
This PR optimizes the Qwen3.5 and Qwen3Next GDN prefill path on Ascend
by reducing host/device synchronization overhead.
The current implementation of the `chunk_gated_delta_rule` path for
variable-length sequences prepares chunk metadata during the forward
pass. This approach triggers frequent CPU intervention and host/device
round-trips. When running prefill-heavy workloads with asynchronous
scheduling enabled, these synchronizations result in execution "bubbles"
and prefill stalling (stuttering). **Note that this does not cause
asynchronous scheduling to fail; rather, it prevents the system from
reaching its theoretical throughput due to these unnecessary stalls.**
To resolve this, the patch moves metadata preparation out of the hot
path:
- **Prebuilt Metadata:** All non-speculative varlen chunk metadata for
GDN is now prebuilt on the CPU.
- **Asynchronous Transfer:** Staging buffers are kept in pinned memory
and transferred to the NPU asynchronously.
- **Integration:** The prebuilt bundle is attached to GDN attention
metadata via `patch_gdn_attn.py` and passed into Triton wrappers.
- **Backward Compatibility:** Triton wrappers fall back to the legacy
preparation path if no prebuilt metadata is provided.
- vLLM version: v0.17.0
- vLLM main:
8b6325758c
---------
Signed-off-by: maoxx241 <maomaoyu870@gmail.com>
48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
#
|
|
# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved.
|
|
# This file is a part of the vllm-ascend project.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
from vllm.triton_utils import HAS_TRITON
|
|
|
|
if HAS_TRITON:
|
|
import vllm_ascend.patch.worker.patch_triton
|
|
|
|
|
|
# isort: off
|
|
import vllm_ascend.patch.worker.patch_weight_utils # noqa
|
|
import vllm_ascend.patch.platform.patch_sched_yield # noqa
|
|
import vllm_ascend.patch.worker.patch_unquantized_gemm # noqa
|
|
import vllm_ascend.patch.worker.patch_bert # noqa
|
|
import vllm_ascend.patch.worker.patch_distributed # noqa
|
|
import vllm_ascend.patch.worker.patch_minimax_m2 # noqa
|
|
import vllm_ascend.patch.worker.patch_minimax_m2_linear_attn # noqa
|
|
import vllm_ascend.patch.worker.patch_mamba_utils # noqa
|
|
import vllm_ascend.patch.worker.patch_multimodal_merge # noqa
|
|
import vllm_ascend.patch.worker.patch_gdn_attn # noqa
|
|
import vllm_ascend.patch.worker.patch_qwen3_next # noqa
|
|
import vllm_ascend.patch.worker.patch_qwen3_next_mtp # noqa
|
|
import vllm_ascend.patch.worker.patch_qwen3_5 # noqa
|
|
import vllm_ascend.patch.worker.patch_rejection_sampler # noqa
|
|
import vllm_ascend.patch.worker.patch_v2_eagle # noqa
|
|
import vllm_ascend.patch.worker.patch_v2_uva # noqa
|
|
import vllm_ascend.patch.worker.patch_huanyuan_vl # noqa
|
|
import vllm_ascend.patch.worker.patch_routed_experts_capturer # noqa
|
|
import vllm_ascend.patch.worker.patch_npugraph_ex_triton # noqa
|
|
import vllm_ascend.patch.worker.patch_kimi_k25 # noqa
|
|
import vllm_ascend.patch.worker.patch_draft_quarot # noqa
|
|
import vllm_ascend.patch.worker.patch_cudagraph # noqa
|
|
import vllm_ascend.patch.worker.patch_deepseek_mtp # noqa
|