@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 094b7d9496
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 15, 22:15 UTC

[Kernel][Build/CI] Bump CUTLASS to 3.8 and add initializers for cutlass epilogues (#13797)

Henry Tsang committed Feb 25, 2025 at 18:52 UTC 094b7d9496ccbdcb15bafbdab0083e54734da2d6
3 files changed +33 -29
CMakeLists.txt
+4 -4
@@ -266,7 +266,7 @@ if(VLLM_GPU_LANG STREQUAL "CUDA")
266 cutlass
267 GIT_REPOSITORY https://github.com/nvidia/cutlass.git
268 # Please keep this in sync with CUTLASS_REVISION line above.
269 - GIT_TAG v3.7.0
269 + GIT_TAG v3.8.0
270 GIT_PROGRESS TRUE
271
272 # Speed up CUTLASS download by retrieving only the specified GIT_TAG instead of the history.
@@ -321,7 +321,7 @@ if(VLLM_GPU_LANG STREQUAL "CUDA")
321 # CUDA 12.0 or later (and only work on Hopper, 9.0a for now).
322 cuda_archs_loose_intersection(SCALED_MM_3X_ARCHS "9.0a" "${CUDA_ARCHS}")
323 if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.0 AND SCALED_MM_3X_ARCHS)
324 - set(SRCS
324 + set(SRCS
325 "csrc/quantization/cutlass_w8a8/scaled_mm_c3x.cu"
326 "csrc/quantization/cutlass_w8a8/c3x/scaled_mm_sm90_fp8.cu"
327 "csrc/quantization/cutlass_w8a8/c3x/scaled_mm_sm90_int8.cu"
@@ -401,7 +401,7 @@ if(VLLM_GPU_LANG STREQUAL "CUDA")
401 # FP4 Archs and flags
402 cuda_archs_loose_intersection(FP4_ARCHS "10.0a" "${CUDA_ARCHS}")
403 if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.8 AND FP4_ARCHS)
404 - set(SRCS
404 + set(SRCS
405 "csrc/quantization/fp4/nvfp4_quant_kernels.cu"
406 "csrc/quantization/fp4/nvfp4_scaled_mm_kernels.cu"
407 )
@@ -612,7 +612,7 @@ endif()
612
613 if(VLLM_FLASH_ATTN_SRC_DIR)
614 FetchContent_Declare(
615 - vllm-flash-attn SOURCE_DIR
615 + vllm-flash-attn SOURCE_DIR
616 ${VLLM_FLASH_ATTN_SRC_DIR}
617 BINARY_DIR ${CMAKE_BINARY_DIR}/vllm-flash-attn
618 )
csrc/cutlass_extensions/epilogue/scaled_mm_epilogues_c2x.hpp
+14 -12
@@ -122,8 +122,8 @@ struct ScaledEpilogue
122 auto a_args = SUPER::template args_from_tensor<ScaleA, float>(a_scales);
123 auto b_args = SUPER::template args_from_tensor<ScaleB, float>(b_scales);
124
125 - typename EVTCompute0::Arguments evt0_args{b_args};
126 - return ArgumentType{a_args, evt0_args};
125 + typename EVTCompute0::Arguments evt0_args{b_args, {}, {}};
126 + return ArgumentType{a_args, evt0_args, {}};
127 }
128 };
129
@@ -167,8 +167,8 @@ struct ScaledEpilogueBias
167 auto b_args = SUPER::template args_from_tensor<ScaleB, float>(b_scales);
168 auto bias_args = SUPER::template args_from_tensor<Bias, ElementD>(bias);
169
170 - typename EVTCompute0::Arguments evt0_args{b_args};
171 - return ArgumentType{a_args, evt0_args, bias_args};
170 + typename EVTCompute0::Arguments evt0_args{b_args, {}, {}};
171 + return ArgumentType{a_args, evt0_args, bias_args, {}};
172 }
173 };
174
@@ -230,9 +230,10 @@ struct ScaledEpilogueBiasAzp
230 auto azp_adj_args =
231 SUPER::template args_from_tensor<AzpWithAdj, int32_t>(azp_adj);
232
233 - typename EVTComputeAzp::Arguments evt_azp_args{{}, azp_adj_args};
234 - typename EVTComputeScaleB::Arguments evt_scale_b_args{b_args, evt_azp_args};
235 - return ArgumentType{a_args, evt_scale_b_args, bias_args};
233 + typename EVTComputeAzp::Arguments evt_azp_args{{}, azp_adj_args, {}};
234 + typename EVTComputeScaleB::Arguments evt_scale_b_args{
235 + b_args, evt_azp_args, {}};
236 + return ArgumentType{a_args, evt_scale_b_args, bias_args, {}};
237 }
238 };
239
@@ -309,11 +310,12 @@ struct ScaledEpilogueBiasAzpToken
310 auto azp_adj_args =
311 SUPER::template args_from_tensor<AzpAdj, int32_t>(azp_adj);
312
312 - typename EVTComputeAzp::Arguments evt_azp_args{azp_args, azp_adj_args};
313 - typename EVTComputeAcc::Arguments evt_acc_args{{}, evt_azp_args};
314 - typename EVTComputeScaleB::Arguments evt_scale_b_args{b_args, evt_acc_args};
315 - return ArgumentType{a_args, evt_scale_b_args, bias_args};
313 + typename EVTComputeAzp::Arguments evt_azp_args{azp_args, azp_adj_args, {}};
314 + typename EVTComputeAcc::Arguments evt_acc_args{{}, evt_azp_args, {}};
315 + typename EVTComputeScaleB::Arguments evt_scale_b_args{
316 + b_args, evt_acc_args, {}};
317 + return ArgumentType{a_args, evt_scale_b_args, bias_args, {}};
318 }
319 };
320
319 -}; // namespace vllm::c2x
\ No newline at end of file
321 +}; // namespace vllm::c2x
csrc/cutlass_extensions/epilogue/scaled_mm_epilogues_c3x.hpp
+15 -13
@@ -146,8 +146,8 @@ struct ScaledEpilogue
146 auto a_args = SUPER::template args_from_tensor<ScaleA, float>(a_scales);
147 auto b_args = SUPER::template args_from_tensor<ScaleB, float>(b_scales);
148
149 - typename EVTCompute0::Arguments evt0_args{b_args};
150 - return ArgumentType{a_args, evt0_args};
149 + typename EVTCompute0::Arguments evt0_args{b_args, {}, {}};
150 + return ArgumentType{a_args, evt0_args, {}};
151 }
152 };
153
@@ -193,8 +193,8 @@ struct ScaledEpilogueBias
193 auto b_args = SUPER::template args_from_tensor<ScaleB, float>(b_scales);
194 auto bias_args = SUPER::template args_from_tensor<Bias, ElementD>(bias);
195
196 - typename EVTCompute0::Arguments evt0_args{b_args};
197 - return ArgumentType{a_args, evt0_args, bias_args};
196 + typename EVTCompute0::Arguments evt0_args{b_args, {}, {}};
197 + return ArgumentType{a_args, evt0_args, bias_args, {}};
198 }
199 };
200
@@ -236,8 +236,8 @@ struct ScaledEpilogueColumnBias
236 auto b_args = SUPER::template args_from_tensor<ScaleB, float>(b_scales);
237 auto bias_args = SUPER::template args_from_tensor<Bias, ElementD>(bias);
238
239 - typename EVTCompute0::Arguments evt0_args{b_args};
240 - return ArgumentType{a_args, evt0_args, bias_args};
239 + typename EVTCompute0::Arguments evt0_args{b_args, {}, {}};
240 + return ArgumentType{a_args, evt0_args, bias_args, {}};
241 }
242 };
243
@@ -297,9 +297,10 @@ struct ScaledEpilogueBiasAzp
297 auto azp_adj_args =
298 SUPER::template args_from_tensor<AzpWithAdj, int32_t>(azp_adj);
299
300 - typename EVTComputeAzp::Arguments evt_azp_args{{}, azp_adj_args};
301 - typename EVTComputeScaleB::Arguments evt_scale_b_args{b_args, evt_azp_args};
302 - return ArgumentType{a_args, evt_scale_b_args, bias_args};
300 + typename EVTComputeAzp::Arguments evt_azp_args{{}, azp_adj_args, {}};
301 + typename EVTComputeScaleB::Arguments evt_scale_b_args{
302 + b_args, evt_azp_args, {}};
303 + return ArgumentType{a_args, evt_scale_b_args, bias_args, {}};
304 }
305 };
306
@@ -374,10 +375,11 @@ struct ScaledEpilogueBiasAzpToken
375 auto azp_adj_args =
376 SUPER::template args_from_tensor<AzpAdj, int32_t>(azp_adj);
377
377 - typename EVTComputeAzp::Arguments evt_azp_args{azp_args, azp_adj_args};
378 - typename EVTComputeAcc::Arguments evt_acc_args{{}, evt_azp_args};
379 - typename EVTComputeScaleB::Arguments evt_scale_b_args{b_args, evt_acc_args};
380 - return ArgumentType{a_args, evt_scale_b_args, bias_args};
378 + typename EVTComputeAzp::Arguments evt_azp_args{azp_args, azp_adj_args, {}};
379 + typename EVTComputeAcc::Arguments evt_acc_args{{}, evt_azp_args, {}};
380 + typename EVTComputeScaleB::Arguments evt_scale_b_args{
381 + b_args, evt_acc_args, {}};
382 + return ArgumentType{a_args, evt_scale_b_args, bias_args, {}};
383 }
384 };
385