[ROCm] Bump AITER to v0.1.23 (#58867)

Signed-off-by: fai <fangzhouai@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Andreas Karatzas <akaratza@amd.com>

Fangzhou Ai committed Sep 27, 2026 at 19:04 UTC 31afa4f1bb1118b7cd83ad8041777cd4dff92a34
4 files changed +14 -15
docker/Dockerfile.rock_base
+1 -1
@@ -8,7 +8,7 @@ ARG TRITON_VERSION=3.8.0+gitc0a142ff
8 ARG TRITON_REPO="https://github.com/ROCm/triton.git"
9 ARG FA_BRANCH="0e60e394"
10 ARG FA_REPO="https://github.com/Dao-AILab/flash-attention.git"
11 -ARG AITER_BRANCH="v0.1.22.post1"
11 +ARG AITER_BRANCH="v0.1.23"
12 ARG AITER_REPO="https://github.com/ROCm/aiter.git"
13 ARG MORI_BRANCH="f95cd5e0ca7b730f92f9ffdfb358484d6965d9f7" # TheRock compatible v1.1.0
14 ARG MORI_REPO="https://github.com/ROCm/mori.git"
docker/Dockerfile.rocm_base
+1 -1
@@ -9,7 +9,7 @@ ARG PYTORCH_AUDIO_BRANCH="v2.11.0"
9 ARG PYTORCH_AUDIO_REPO="https://github.com/pytorch/audio.git"
10 ARG FA_BRANCH="0e60e394"
11 ARG FA_REPO="https://github.com/Dao-AILab/flash-attention.git"
12 -ARG AITER_BRANCH="v0.1.22.post1"
12 +ARG AITER_BRANCH="v0.1.23"
13 ARG AITER_REPO="https://github.com/ROCm/aiter.git"
14 ARG MORI_BRANCH="v1.1.0"
15 ARG MORI_REPO="https://github.com/ROCm/mori.git"
tests/kernels/moe/test_ocp_mx_moe.py
+3 -12
@@ -47,7 +47,6 @@ if ROCM_AVAILABLE:
47 ROCM_GFX950 = on_gfx950()
48
49 if ROCM_AITER_AVAILABLE:
50 - from aiter.ops.triton.moe.quant_moe import upcast_from_mxfp
50 from aiter.ops.triton.quant import dynamic_mxfp4_quant
51
52 if TRTLLM_GEN_MXFP4_AVAILABLE:
@@ -191,11 +190,7 @@ def mxfp8_dequantize(x, scale):
190 def mxfp4_quant_dequant(x: torch.Tensor) -> torch.Tensor:
191 shape = x.shape
192 quantized, scale = dynamic_mxfp4_quant(x.to(torch.bfloat16).flatten(0, -2))
194 - return (
195 - upcast_from_mxfp(quantized.view(torch.uint8), scale, torch.bfloat16, axis=-1)
196 - .reshape(shape)
197 - .float()
198 - )
193 + return mxfp4_dequantize(quantized.view(torch.uint8), scale).reshape(shape)
194
195
196 def reference_moe(
@@ -1809,12 +1804,8 @@ def test_rocm_mxfp4_moe_oracle(
1804 assert out.abs().max() > 0.01, "Output is effectively zero"
1805
1806 # Dequantize weights for reference computation
1812 - w13_dq = upcast_from_mxfp(
1813 - w13_quant_ref.view(torch.uint8), w13_scale_ref, torch.bfloat16, axis=-1
1814 - )
1815 - w2_dq = upcast_from_mxfp(
1816 - w2_quant_ref.view(torch.uint8), w2_scale_ref, torch.bfloat16, axis=-1
1817 - )
1807 + w13_dq = mxfp4_dequantize(w13_quant_ref.view(torch.uint8), w13_scale_ref)
1808 + w2_dq = mxfp4_dequantize(w2_quant_ref.view(torch.uint8), w2_scale_ref)
1809
1810 # Determine activation type and layout
1811 # SWIGLUOAI uses interleaved layout (gate/up alternating)
vllm/model_executor/layers/fused_moe/experts/aiter_mxfp4_w4a16_moe.py
+9 -1
@@ -139,7 +139,7 @@ def aiter_triton_kernel_w4a16_moe_forward(
139 from vllm.model_executor.layers.quantization.utils.mxfp4_utils import (
140 should_use_cdna4_mx_scale_swizzle,
141 )
142 - from vllm.platforms.rocm import on_gfx1250
142 + from vllm.platforms.rocm import on_gfx950, on_gfx1250
143
144 try:
145 from aiter.ops.triton.moe.moe_op_gemm_a16w4 import moe_gemm_a16w4
@@ -236,6 +236,12 @@ def aiter_triton_kernel_w4a16_moe_forward(
236 # kernel indexes a swizzled buffer as if it were linear.
237 swz = "CDNA4_SCALE" if should_use_cdna4_mx_scale_swizzle() else None
238
239 + # AITER's gfx950 Gluon a16w4 kernel (default backend="None"/auto-detect
240 + # picks it) calls a Triton-Gluon AMD API that isn't available in vLLM's
241 + # pinned Triton, so force the Triton backend on gfx950. gfx1250 already
242 + # used Gluon before this and is unaffected, so leave it on auto-detect.
243 + a16w4_backend = "triton" if on_gfx950() else None
244 +
245 intermediate = moe_gemm_a16w4(
246 hidden_states,
247 w1_data,
@@ -254,6 +260,7 @@ def aiter_triton_kernel_w4a16_moe_forward(
260 swiglu_add_residual=swiglu_add_residual,
261 unpadded_N=unpadded_N_w1,
262 unpadded_K=unpadded_K_w1,
263 + backend=a16w4_backend,
264 )
265
266 out = moe_gemm_a16w4(
@@ -270,6 +277,7 @@ def aiter_triton_kernel_w4a16_moe_forward(
277 swizzle_mx_scale=swz,
278 unpadded_N=unpadded_N_w2,
279 unpadded_K=unpadded_K_w2,
280 + backend=a16w4_backend,
281 )
282
283 return out