]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commit
vulkan: Fuse rope+set_rows (#16769)
authorJeff Bolz <redacted>
Wed, 29 Oct 2025 20:13:10 +0000 (15:13 -0500)
committerGitHub <redacted>
Wed, 29 Oct 2025 20:13:10 +0000 (15:13 -0500)
commitb9ce94017729465895402cbcfffb51fa926c15e3
tree01090d786667c130a3fd94bd862a68bbc48e4131
parent3464bdac37027c5e9661621fc75ffcef3c19c6ef
vulkan: Fuse rope+set_rows (#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.
ggml/src/ggml-vulkan/ggml-vulkan.cpp
ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl
ggml/src/ggml-vulkan/vulkan-shaders/rope_neox.comp
ggml/src/ggml-vulkan/vulkan-shaders/rope_norm.comp
ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp
tests/test-backend-ops.cpp