Update qutlass cmake for stable abi (#47879)

Signed-off-by: Chris Leonard <chleonar@redhat.com>

Chris Leonard committed Jul 20, 2026 at 21:31 UTC 97a98006b0895bc3d488ec19e898f56c777150b6
2 files changed +11 -9
cmake/external_projects/qutlass.cmake
+5 -5
@@ -22,7 +22,7 @@ if(QUTLASS_SRC_DIR)
22 set(qutlass_BINARY_DIR "${CMAKE_BINARY_DIR}/qutlass-binary-dir-unused")
23 else()
24 set(_QUTLASS_UPSTREAM_REPO "https://github.com/IST-DASLab/qutlass.git")
25 - set(_QUTLASS_UPSTREAM_TAG "830d2c4537c7396e14a02a46fbddd18b5d107c65")
25 + set(_QUTLASS_UPSTREAM_TAG "e74319e3405ce6d71965732880f5dc1f52371f64")
26
27 set(_qutlass_fc_root "${FETCHCONTENT_BASE_DIR}")
28 if(NOT _qutlass_fc_root)
@@ -125,8 +125,6 @@ if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.8 AND QUTLASS_ARCHS)
125 CUDA_ARCHS "${QUTLASS_ARCHS}"
126 )
127
128 - # QuTLASS uses legacy ATen headers and cannot be built with TORCH_TARGET_VERSION.
129 - # Keep it as its own extension (registers torch.ops._qutlass_C).
128 define_extension_target(
129 _qutlass_C
130 DESTINATION vllm
@@ -139,9 +137,11 @@ if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.8 AND QUTLASS_ARCHS)
137 WITH_SOABI)
138
139 target_compile_definitions(_qutlass_C PRIVATE
142 - QUTLASS_DISABLE_PYBIND=1
140 + QUTLASS_MINIMAL_BUILD=1
141 TARGET_CUDA_ARCH=${QUTLASS_TARGET_CC}
144 - CUTLASS_ENABLE_DIRECT_CUDA_DRIVER_CALL=1)
142 + CUTLASS_ENABLE_DIRECT_CUDA_DRIVER_CALL=1
143 + TORCH_TARGET_VERSION=0x020B000000000000ULL
144 + USE_CUDA)
145
146 set_property(SOURCE ${QUTLASS_SOURCES} APPEND PROPERTY COMPILE_OPTIONS
147 $<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr --use_fast_math -O3>
vllm/_custom_ops.py
+6 -4
@@ -3863,10 +3863,10 @@ def fusedQuantizeMx(
3863 raise ValueError(f"invalid method {method!r}, must be 'quest' or 'abs_max'")
3864
3865
3866 -if hasattr(torch.ops._qutlass_C, "fusedQuantizeNv"):
3866 +if hasattr(torch.ops._qutlass_C, "fusedQuantizeNvAbsMax"):
3867
3868 - @register_fake("_qutlass_C::fusedQuantizeNv")
3869 - def _fake_fused_quantize_nv(
3868 + @register_fake("_qutlass_C::fusedQuantizeNvAbsMax")
3869 + def _fake_fused_quantize_nv_absmax(
3870 a: torch.Tensor,
3871 b: torch.Tensor,
3872 xh_e2m1: torch.Tensor,
@@ -3892,7 +3892,9 @@ def fusedQuantizeNv(
3892 padded_rows, padded_cols, dtype=torch.float8_e4m3fn, device=a.device
3893 )
3894
3895 - return torch.ops._qutlass_C.fusedQuantizeNv(a, b, xh_e2m1, xh_e4m3, global_scale)
3895 + return torch.ops._qutlass_C.fusedQuantizeNvAbsMax(
3896 + a, b, xh_e2m1, xh_e4m3, global_scale
3897 + )
3898
3899
3900 def hadacore_transform(x: torch.Tensor, inplace: bool = True) -> torch.Tensor: