ggml: add SWIGLU_CLAMP (#27930)

* ggml: add SWIGLU_CLAMP

* add vulkan shader
This commit is contained in:
Aman Gupta
2026-08-30 23:00:02 +08:00
committed by GitHub
parent 2578138397
commit 0190529ec4
40 changed files with 768 additions and 35 deletions
@@ -3101,6 +3101,10 @@ class ggml_webgpu_shader_lib {
defines.push_back("OP_GEGLU_QUICK");
variant += "_geglu_quick";
break;
case GGML_GLU_OP_SWIGLU_CLAMP:
defines.push_back("OP_SWIGLU_CLAMP");
variant += "_swiglu_clamp";
break;
default:
GGML_ABORT("Unsupported GLU op");
}
+2 -1
View File
@@ -2835,7 +2835,7 @@ static webgpu_encoded_op ggml_webgpu_glu(webgpu_context & ctx,
(uint32_t) dst->ne[2],
(uint32_t) ((int32_t *) dst->op_params)[1], // swapped
ggml_webgpu_u32_from_f32(ggml_get_op_params_f32(dst, 2)), // alpha, for swiglu_oai
ggml_webgpu_u32_from_f32(ggml_get_op_params_f32(dst, 3)), // limit, for swiglu_oai
ggml_webgpu_u32_from_f32(ggml_get_op_params_f32(dst, 3)), // limit
};
std::vector<wgpu::BindGroupEntry> entries;
@@ -4483,6 +4483,7 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const
case GGML_GLU_OP_SWIGLU:
case GGML_GLU_OP_GEGLU_ERF:
case GGML_GLU_OP_GEGLU_QUICK:
case GGML_GLU_OP_SWIGLU_CLAMP:
supports_op = op->type == GGML_TYPE_F32 || op->type == GGML_TYPE_F16;
break;
case GGML_GLU_OP_SWIGLU_OAI:
@@ -37,6 +37,14 @@ fn op(a: f32, b: f32) -> f32 {
return out_glu;
}
#endif
#ifdef OP_SWIGLU_CLAMP
fn op(a: DataType, b: DataType) -> DataType {
let limit = DataType(params.limit);
let gate = min(a, limit);
let up = clamp(b, -limit, limit);
return gate / (1.0 + exp(-gate)) * up;
}
#endif
#ifdef OP_GEGLU_ERF
const p_erf: DataType = 0.3275911;
const a1_erf: DataType = 0.254829592;