[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