| 4007 | // ggml_rms_norm_back |
| 4008 | |
| 4009 | struct ggml_tensor * ggml_rms_norm_back( |
| 4010 | struct ggml_context * ctx, |
| 4011 | struct ggml_tensor * a, |
| 4012 | struct ggml_tensor * b, |
| 4013 | float eps) { |
| 4014 | bool is_node = false; |
| 4015 | |
| 4016 | if (a->grad) { |
| 4017 | // TODO: implement backward |
| 4018 | is_node = true; |
| 4019 | } |
| 4020 | |
| 4021 | struct ggml_tensor * result = ggml_dup_tensor(ctx, a); |
| 4022 | |
| 4023 | ggml_set_op_params(result, &eps, sizeof(eps)); |
| 4024 | |
| 4025 | result->op = GGML_OP_RMS_NORM_BACK; |
| 4026 | result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; |
| 4027 | result->src[0] = a; |
| 4028 | result->src[1] = b; |
| 4029 | |
| 4030 | return result; |
| 4031 | } |
| 4032 | |
| 4033 | // ggml_group_norm |
| 4034 |
no test coverage detected