[AMD] Add fused GemmaRMSNorm forward_hip to use aiter/vllm kernels for qwen3.5 (#21188)

This commit is contained in:
jacky.cheng
2026-03-23 10:21:36 -07:00
committed by GitHub
parent 6d2e1156a0
commit b4d3fb001d
+41 -3
View File
@@ -451,9 +451,6 @@ class GemmaRMSNorm(MultiPlatformOp):
super().__init__()
self.weight = nn.Parameter(torch.zeros(hidden_size))
self.variance_epsilon = eps
# Re-dispatch
if _is_hip:
self._forward_method = self.forward_native
def _forward_impl(
self,
@@ -499,6 +496,47 @@ class GemmaRMSNorm(MultiPlatformOp):
) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]:
return self._forward_impl(x, residual, post_residual_addition)
def forward_hip(
self,
x: torch.Tensor,
residual: Optional[torch.Tensor] = None,
post_residual_addition: Optional[torch.Tensor] = None,
) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]:
if not _has_vllm_rms_norm:
return self.forward_native(x, residual, post_residual_addition)
w = self.weight.data + 1.0
if _use_aiter:
# aiter API: rms_norm(input, weight, eps) -> output
# fused_add_rms_norm(output, input, residual, residual_out, weight, eps)
if residual is not None:
output = torch.empty_like(x)
residual_out = torch.empty_like(x)
if post_residual_addition is not None:
residual = residual + post_residual_addition
fused_add_rms_norm(
output, x, residual, residual_out, w, self.variance_epsilon
)
return output, residual_out
return rms_norm(x, w, self.variance_epsilon)
else:
# vllm API: rms_norm(out, input, weight, eps) -> None (in-place)
# fused_add_rms_norm(out, input, residual_out, residual, weight, eps)
if not x.is_contiguous():
x = x.contiguous()
if residual is not None:
out = torch.empty_like(x)
residual_out = torch.empty_like(x)
if post_residual_addition is not None:
residual = residual + post_residual_addition
fused_add_rms_norm(
out, x, residual_out, residual, w, self.variance_epsilon
)
return out, residual_out
out = torch.empty_like(x)
rms_norm(out, x, w, self.variance_epsilon)
return out
def forward_cpu(
self,
x: torch.Tensor,