|
62 | 62 | is_rocm_aiter_fusion_shared_expert_enabled, |
63 | 63 | is_rocm_aiter_fuse_routed_scaling_factor, |
64 | 64 | ) |
| 65 | +from vllm.platforms import current_platform |
65 | 66 |
|
66 | | -from aiter.ops.triton.fused_fp8_quant import fused_rms_fp8_group_quant |
67 | | -import aiter as rocm_aiter |
68 | | -rocm_aiter_fp8_dtype = rocm_aiter.dtypes.fp8 |
69 | | -rocm_aiter_fp8_quant_group_size = 128 |
| 67 | +import vllm.envs as envs |
| 68 | + |
| 69 | +if current_platform.is_rocm(): |
| 70 | + VLLM_ROCM_USE_AITER_TRITON_FUSED_RMSNORM_FP8_QUANT=envs.VLLM_ROCM_USE_AITER_TRITON_FUSED_RMSNORM_FP8_QUANT |
| 71 | +else: |
| 72 | + VLLM_ROCM_USE_AITER_TRITON_FUSED_RMSNORM_FP8_QUANT=False |
70 | 73 |
|
71 | 74 | class DeepseekV2MLP(nn.Module): |
72 | 75 |
|
@@ -97,7 +100,10 @@ def __init__( |
97 | 100 | self.act_fn = SiluAndMul() |
98 | 101 |
|
99 | 102 | def forward(self, x): |
100 | | - gate_up, _ = self.gate_up_proj(x) |
| 103 | + x_quant_scales = None |
| 104 | + if isinstance(x, tuple): |
| 105 | + x, x_quant_scales = x |
| 106 | + gate_up, _ = self.gate_up_proj(x, x_quant_scales=x_quant_scales) |
101 | 107 | x = self.act_fn(gate_up) |
102 | 108 | x, _ = self.down_proj(x) |
103 | 109 | return x |
@@ -160,11 +166,16 @@ def __init__( |
160 | 166 | ) |
161 | 167 |
|
162 | 168 | def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: |
| 169 | + if isinstance(hidden_states, tuple): |
| 170 | + hidden_states_shared, hidden_states = hidden_states |
| 171 | + else: |
| 172 | + hidden_states_shared = hidden_states |
| 173 | + |
163 | 174 | num_tokens, hidden_dim = hidden_states.shape |
164 | 175 | hidden_states = hidden_states.view(-1, hidden_dim) |
165 | 176 | shared_output = None |
166 | 177 | if self.n_shared_experts is not None and not is_rocm_aiter_fusion_shared_expert_enabled(): |
167 | | - shared_output = self.shared_experts(hidden_states) |
| 178 | + shared_output = self.shared_experts(hidden_states_shared) |
168 | 179 | # router_logits: (num_tokens, n_experts) |
169 | 180 | router_logits, _ = self.gate(hidden_states) |
170 | 181 | if hidden_states.dtype != torch.float16: |
@@ -501,13 +512,30 @@ def forward( |
501 | 512 | [self.q_lora_rank, self.kv_lora_rank + self.qk_rope_head_dim], |
502 | 513 | dim=-1, |
503 | 514 | ) |
504 | | - hidden_states_or_q_c = self.q_a_layernorm(q_c) |
| 515 | + if VLLM_ROCM_USE_AITER_TRITON_FUSED_RMSNORM_FP8_QUANT: |
| 516 | + from aiter.ops.triton.fused_fp8_quant import fused_rms_fp8_per_token_quant |
| 517 | + fp8_dtype = current_platform.fp8_dtype() |
| 518 | + weight = self.q_a_layernorm.weight |
| 519 | + eps = self.q_a_layernorm.variance_epsilon |
| 520 | + weight2 = self.kv_a_layernorm.weight |
| 521 | + eps2 = self.kv_a_layernorm.variance_epsilon |
| 522 | + kv_c, k_pe = kv_lora.split( |
| 523 | + [self.kv_lora_rank, self.qk_rope_head_dim], dim=-1) |
| 524 | + (_, _), hidden_states_or_q_c, kv_c_normed, _ = fused_rms_fp8_per_token_quant(q_c, weight, eps, |
| 525 | + kv_c, weight2, eps2, |
| 526 | + dtype_quant=fp8_dtype, |
| 527 | + res1=None, |
| 528 | + output_unquantized_inp1=True, |
| 529 | + output_quantiezed_inp1=False) |
| 530 | + else: |
| 531 | + hidden_states_or_q_c = self.q_a_layernorm(q_c) |
505 | 532 | else: |
506 | 533 | hidden_states_or_q_c = hidden_states |
507 | 534 | kv_lora = self.kv_a_proj_with_mqa(hidden_states)[0] |
508 | | - kv_c, k_pe = kv_lora.split( |
509 | | - [self.kv_lora_rank, self.qk_rope_head_dim], dim=-1) |
510 | | - kv_c_normed = self.kv_a_layernorm(kv_c) |
| 535 | + if not VLLM_ROCM_USE_AITER_TRITON_FUSED_RMSNORM_FP8_QUANT: |
| 536 | + kv_c, k_pe = kv_lora.split( |
| 537 | + [self.kv_lora_rank, self.qk_rope_head_dim], dim=-1) |
| 538 | + kv_c_normed = self.kv_a_layernorm(kv_c) |
511 | 539 | return self.mla_attn(hidden_states_or_q_c, |
512 | 540 | kv_c_normed, |
513 | 541 | k_pe, |
@@ -585,28 +613,30 @@ def forward( |
585 | 613 | residual: Optional[torch.Tensor], |
586 | 614 | ) -> torch.Tensor: |
587 | 615 | # Self Attention |
588 | | - weight = self.input_layernorm.weight |
589 | | - eps = self.input_layernorm.variance_epsilon |
590 | | - if residual is None: |
591 | | - residual = hidden_states |
592 | | - hidden_states, hidden_states_quant = fused_rms_fp8_group_quant(hidden_states, weight, eps, |
593 | | - None, None, eps, |
594 | | - group_size = rocm_aiter_fp8_quant_group_size, |
595 | | - dtype_quant=rocm_aiter_fp8_dtype, |
596 | | - res1=None) |
| 616 | + if VLLM_ROCM_USE_AITER_TRITON_FUSED_RMSNORM_FP8_QUANT: |
| 617 | + weight = self.input_layernorm.weight |
| 618 | + eps = self.input_layernorm.variance_epsilon |
| 619 | + from aiter.ops.triton.fused_fp8_quant import fused_rms_fp8_per_token_quant |
| 620 | + fp8_dtype = current_platform.fp8_dtype() |
| 621 | + if residual is None: |
| 622 | + residual = hidden_states |
| 623 | + (hidden_states, hidden_states_quant), _, _, _ = fused_rms_fp8_per_token_quant(hidden_states, weight, eps, |
| 624 | + None, None, eps, |
| 625 | + dtype_quant=fp8_dtype, |
| 626 | + res1=None) |
| 627 | + else: |
| 628 | + (hidden_states, hidden_states_quant), _, _, residual = fused_rms_fp8_per_token_quant(hidden_states, weight, eps, |
| 629 | + None, None, eps, |
| 630 | + dtype_quant=fp8_dtype, |
| 631 | + res1=residual) |
| 632 | + hidden_states = (hidden_states, hidden_states_quant) |
597 | 633 | else: |
598 | | - (hidden_states, hidden_states_quant), residual = fused_rms_fp8_group_quant(hidden_states, weight, eps, |
599 | | - None, None, eps, |
600 | | - group_size = rocm_aiter_fp8_quant_group_size, |
601 | | - dtype_quant=rocm_aiter_fp8_dtype, |
602 | | - res1=residual) |
603 | | - hidden_states = (hidden_states, hidden_states_quant) |
604 | | - # if residual is None: |
605 | | - # residual = hidden_states |
606 | | - # hidden_states = self.input_layernorm(hidden_states) |
607 | | - # else: |
608 | | - # hidden_states, residual = self.input_layernorm( |
609 | | - # hidden_states, residual) |
| 634 | + if residual is None: |
| 635 | + residual = hidden_states |
| 636 | + hidden_states = self.input_layernorm(hidden_states) |
| 637 | + else: |
| 638 | + hidden_states, residual = self.input_layernorm( |
| 639 | + hidden_states, residual) |
610 | 640 | hidden_states = self.self_attn( |
611 | 641 | positions=positions, |
612 | 642 | hidden_states=hidden_states, |
|
0 commit comments