Register aten::rms_norm and aten::mm.dtype in batch invariant mode (#24459)

This commit is contained in:
Lianmin Zheng
2026-05-05 17:21:34 -07:00
committed by GitHub
parent 46bde1f426
commit 64f80eabbe
@@ -3,7 +3,7 @@
import contextlib import contextlib
from collections import namedtuple from collections import namedtuple
from collections.abc import Callable from collections.abc import Callable
from typing import Any, Dict from typing import Any, Dict, Tuple
import torch import torch
import triton import triton
@@ -934,6 +934,35 @@ def rms_norm_batch_invariant(
return rms_norm(input, weight, eps=eps) return rms_norm(input, weight, eps=eps)
_ONES_CACHE: dict[Tuple, torch.Tensor] = {}
def _get_or_make_ones(shape, device, dtype) -> torch.Tensor:
key = (tuple(shape), device, dtype)
t = _ONES_CACHE.get(key)
if t is None:
t = torch.ones(shape, device=device, dtype=dtype)
_ONES_CACHE[key] = t
return t
def _rms_norm_aten_compat(input, normalized_shape, weight=None, eps=None):
if eps is None:
eps = torch.finfo(input.dtype).eps
if weight is None:
weight = _get_or_make_ones(normalized_shape, input.device, input.dtype)
assert tuple(normalized_shape) == (input.shape[-1],), (
"rms_norm_batch_invariant only supports last-dim normalization "
f"(got normalized_shape={tuple(normalized_shape)}, "
f"input.shape={tuple(input.shape)})"
)
return rms_norm_batch_invariant(input, weight, eps=eps)
def _mm_dtype_compat(self, mat2, out_dtype):
return matmul_persistent(self.contiguous(), mat2.contiguous()).to(out_dtype)
_batch_invariant_MODE = False _batch_invariant_MODE = False
_batch_invariant_LIB = None _batch_invariant_LIB = None
_original_torch_bmm = None _original_torch_bmm = None
@@ -960,6 +989,8 @@ def enable_batch_invariant_mode(enable_bmm: bool = True):
"aten::_log_softmax", _log_softmax_batch_invariant, dispatch_key "aten::_log_softmax", _log_softmax_batch_invariant, dispatch_key
) )
_batch_invariant_LIB.impl("aten::mean.dim", mean_batch_invariant, dispatch_key) _batch_invariant_LIB.impl("aten::mean.dim", mean_batch_invariant, dispatch_key)
_batch_invariant_LIB.impl("aten::rms_norm", _rms_norm_aten_compat, dispatch_key)
_batch_invariant_LIB.impl("aten::mm.dtype", _mm_dtype_compat, dispatch_key)
if enable_bmm: if enable_bmm:
_batch_invariant_LIB.impl("aten::bmm", bmm_batch_invariant, dispatch_key) _batch_invariant_LIB.impl("aten::bmm", bmm_batch_invariant, dispatch_key)