Commit 0eebb6edd for llama.cpp
commit 0eebb6eddcd5dc70e5bd3ee440a47f36f6fb1ba8
Author: losewayy <1134285612@qq.com>
Date: Mon Nov 9 21:03:00 2026 +0800
ggml : implement the backward pass for TRI (#30712)
* ggml: implement the backward pass for TRI
GGML_OP_TRI had no case in the backward switch, so a trainable graph containing it aborted with "unsupported ggml op for backward pass: TRI". The op is linear, so its gradient is masked the same way. The incoming gradient is not necessarily contiguous (the backward of a transpose hands over a view) and ggml_tri requires contiguity, so it is made contiguous first.
test_tri gains a post_transpose variant (out = transpose(tri(a))) that aborts as above without this change.
* ggml : simplify the TRI backward pass
Pass the gradient directly to ggml_tri and drop the transpose test. The existing TRI cases cover the backward pass for contiguous F32 gradients.
diff --git a/ggml/src/ggml.c b/ggml/src/ggml.c
index f8cf75b3a..c6a080d22 100644
--- a/ggml/src/ggml.c
+++ b/ggml/src/ggml.c
@@ -7237,6 +7237,11 @@ static void ggml_compute_backward(
ggml_add_or_set(ctx, cgraph, isrc0, ggml_diag_mask_zero_impl(ctx, grad, n_past, false));
}
} break;
+ case GGML_OP_TRI: {
+ if (src0_needs_grads) {
+ ggml_add_or_set(ctx, cgraph, isrc0, ggml_tri(ctx, grad, (enum ggml_tri_type) ggml_get_op_params_i32(tensor, 0)));
+ }
+ } break;
case GGML_OP_SOFT_MAX: {
if (src0_needs_grads) {
float scale = 1.0f;