]> git.djapps.eu Git - pkg/ggml/sources/ggml/commitdiff
SYCL: fix rms_norm_mul_add for tensor dim not a multiple of sg_size (llama/15592)
authorAkarshan Biswas <redacted>
Tue, 26 Aug 2025 18:57:49 +0000 (00:27 +0530)
committerGeorgi Gerganov <redacted>
Fri, 5 Sep 2025 09:54:05 +0000 (12:54 +0300)
The original implementation unconditionally returned true for this operation, leading to a failure when the tensor's first dimension (ne[0]) was not a multiple of WARP_SIZE. This caused an GGML_ASSERT(ncols % WARP_SIZE == 0) failure in ggml-sycl/norm.cpp.

This change updates the ggml_backend_sycl_device_supports_op check to correctly return true for GGML_OP_RMS_NORM only when the first dimension of the tensor is a multiple of WARP_SIZE, ensuring the operation can be performed without error.

src/ggml-sycl/ggml-sycl.cpp

index 12dd5dd2e6287a045bee3b68b4749fa65c8ddecc..18ff4e0b0c7cf1792057ce6c8bcce659cd99b425 100644 (file)
@@ -4364,11 +4364,12 @@ static bool ggml_backend_sycl_device_supports_op(ggml_backend_dev_t dev, const g
             return (op->type == GGML_TYPE_F32 && op->src[0]->type == GGML_TYPE_F32) && (op->type == op->src[0]->type);
 #endif
         case GGML_OP_NORM:
-        case GGML_OP_RMS_NORM:
             return true;
         case GGML_OP_L2_NORM:
         case GGML_OP_GROUP_NORM:
             return ggml_is_contiguous(op->src[0]);
+        case GGML_OP_RMS_NORM:
+            return ((op->src[0]->ne[0] % WARP_SIZE) == 0);
         case GGML_OP_SCALE:
             return true;
         case GGML_OP_CONT: