[AMD] Support triton backend decode context parallel for Qwen3.5 (#25090)

Co-authored-by: Baizhou Zhang <sobereddiezhang@gmail.com>
Co-authored-by: Kangyan-Zhou <zky314343421@gmail.com>
Co-authored-by: Khoa Pham <khoa.pham@radixark.ai>
Co-authored-by: Hubert Lu <55214931+hubertlu-tw@users.noreply.github.com>
Co-authored-by: zhengyao <zayao@amd.com>
This commit is contained in:
Wang, FangYuan
2026-06-23 17:35:56 -07:00
committed by GitHub
co-authored by Baizhou Zhang Kangyan-Zhou Khoa Pham Hubert Lu zhengyao
parent 9ef1830701
commit b2c8f7a22e
15 changed files with 821 additions and 66 deletions
@@ -503,6 +503,9 @@ class ForwardBatch(ForwardBatchDeepSeekMHAMixin):
attn_cp_metadata: Optional[ContextParallelMetadata] = None
# Decode context parallel KV write mask.
dcp_kv_mask: Optional[torch.Tensor] = None
# For ngram embedding
ngram_embedding_info: Optional[NgramEmbeddingInfo] = None
@@ -857,6 +860,11 @@ class ForwardBatch(ForwardBatchDeepSeekMHAMixin):
model_runner.lora_manager.prepare_lora_batch(ret)
if getattr(model_runner, "dcp_size", 1) > 1 and ret.out_cache_loc is not None:
ret.dcp_kv_mask = (
ret.positions % model_runner.dcp_size == model_runner.dcp_rank
)
return ret
def _maybe_init_non_generation_fields(self, batch: ScheduleBatch):
@@ -374,6 +374,8 @@ class ModelRunner(ModelRunnerKVCacheMixin):
self.gpu_id = gpu_id
self.tp_rank = tp_rank
self.tp_size = tp_size
self.dcp_size = server_args.dcp_size
self.dcp_rank = self.tp_rank % self.dcp_size
self.moe_ep_rank = moe_ep_rank
self.moe_ep_size = moe_ep_size
self.dp_rank = dp_rank
@@ -1234,6 +1236,7 @@ class ModelRunner(ModelRunnerKVCacheMixin):
expert_model_parallel_size=self.moe_ep_size,
attention_context_model_parallel_size=self.attn_cp_size,
moe_data_model_parallel_size=self.moe_dp_size,
decode_context_parallel_size=self.dcp_size,
duplicate_tp_group=self.server_args.enable_pdmux,
enable_symm_mem=self.server_args.enable_symm_mem,
recovered_rank=self.server_args.elastic_ep_rejoin,
@@ -885,7 +885,7 @@ class ModelRunnerKVCacheMixin:
host_to_device_ratio=hisparse_cfg.host_to_device_ratio,
)
)
elif self.page_size == 1:
elif self.page_size == 1 and self.dcp_size == 1:
self.token_to_kv_pool_allocator = TokenToKVPoolAllocator(
self.max_total_num_tokens,
dtype=self.kv_cache_dtype,
@@ -895,8 +895,8 @@ class ModelRunnerKVCacheMixin:
)
else:
self.token_to_kv_pool_allocator = PagedTokenToKVPoolAllocator(
self.max_total_num_tokens,
page_size=self.page_size,
self.max_total_num_tokens * self.dcp_size,
page_size=self.page_size * self.dcp_size,
dtype=self.kv_cache_dtype,
device=self.device,
kvcache=self.token_to_kv_pool,