]> git.djapps.eu Git - pkg/ggml/sources/ggml/commit
vulkan: Fuse rope+set_rows (llama/16769)
authorJeff Bolz <redacted>
Wed, 29 Oct 2025 20:13:10 +0000 (15:13 -0500)
committerGeorgi Gerganov <redacted>
Sat, 1 Nov 2025 07:41:35 +0000 (09:41 +0200)
commit0f0fd00536b9d5d953ad132b0c6c6a0e014e7cee
tree18cd2a62a26bf080778247f831434fb2728e3ad6
parent54ab43b107aff151df65f60525383f01632f6483
vulkan: Fuse rope+set_rows (llama/16769)

This pattern appears in a lot of models, the rope operation is applied right
before storing into the KV cache (usually on the K tensor).

Add a path to some of the rope shaders that computes the destination address
based on the set_rows tensor. Compile variants of the shader with D_TYPE of
f16 (the usual KV cache type).

Add a src3 operand to ggml_vk_op_f32 - sometimes rope uses three srcs and needs
the fourth for the row indices.

Add fused_ops_write_mask to indicate which intermediate tensors need to write
their results to memory. Skipping writing the roped K value helps to allow more
nodes to run concurrently.

Add logic to ggml_vk_graph_optimize to make ROPE+VIEW+SET_ROWS consecutive. It
rarely starts out that way in the graph.

Add new backend tests.
src/ggml-vulkan/ggml-vulkan.cpp
src/ggml-vulkan/vulkan-shaders/rope_head.glsl
src/ggml-vulkan/vulkan-shaders/rope_neox.comp
src/ggml-vulkan/vulkan-shaders/rope_norm.comp
src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp
tests/test-backend-ops.cpp