48
vllm_ascend/patch/platform/patch_mla_prefill_backend.py
Normal file
48
vllm_ascend/patch/platform/patch_mla_prefill_backend.py
Normal file
@@ -0,0 +1,48 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
||||
|
||||
# PR vllm-project/vllm#32623 introduced a new MLAPrefillBackend abstraction.
|
||||
# When MLAAttention.__init__ calls get_mla_prefill_backend(), the upstream
|
||||
# selector sees that Ascend NPU returns None for get_device_capability() and
|
||||
# falls back to FlashAttnPrefillBackend, which asserts flash_attn_varlen_func
|
||||
# is available — crashing on Ascend.
|
||||
#
|
||||
# Ascend's AscendSFAImpl/AscendMLAImpl handles the full forward pass (including
|
||||
# prefill) via impl.forward(), so prefill_backend.run_prefill_* is never called.
|
||||
# We register a no-op AscendMLAPrefillBackend and patch get_mla_prefill_backend
|
||||
# so that MLAAttention.__init__ completes without error.
|
||||
|
||||
import torch
|
||||
import vllm.model_executor.layers.attention.mla_attention
|
||||
from vllm.v1.attention.backends.mla.prefill.base import MLAPrefillBackend
|
||||
|
||||
|
||||
class AscendMLAPrefillBackend(MLAPrefillBackend):
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
return "ASCEND"
|
||||
|
||||
@classmethod
|
||||
def is_available(cls) -> bool:
|
||||
return True
|
||||
|
||||
def run_prefill_new_tokens(
|
||||
self,
|
||||
q: torch.Tensor,
|
||||
k: torch.Tensor,
|
||||
v: torch.Tensor,
|
||||
return_softmax_lse: bool,
|
||||
) -> torch.Tensor:
|
||||
raise NotImplementedError("Ascend MLA prefill is handled by AscendSFAImpl/AscendMLAImpl")
|
||||
|
||||
def run_prefill_context_chunk(
|
||||
self,
|
||||
chunk_idx: int,
|
||||
q: torch.Tensor,
|
||||
k: torch.Tensor,
|
||||
v: torch.Tensor,
|
||||
) -> tuple[torch.Tensor, torch.Tensor]:
|
||||
raise NotImplementedError("Ascend MLA prefill is handled by AscendSFAImpl/AscendMLAImpl")
|
||||
|
||||
|
||||
vllm.model_executor.layers.attention.mla_attention.get_mla_prefill_backend = lambda vllm_config: AscendMLAPrefillBackend
|
||||
Reference in New Issue
Block a user