[Vulkan] LLM decode ~12% slower than XNNPACK on Adreno
Los mantenedores suelen responder en 1 día
@digantdesai ya está trabajando en esto.
Desde el 21/9/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Vulkan LLM decode is ~11-13% slower than XNNPACK on Adreno 840 (Galaxy S26 Ultra), while prefill is ~2x faster. Qwen3, llama_main, cold-device medians, arms interleaved.
| Vulkan (4w) | XNNPACK (8da4w) | |
|---|---|---|
| 0.6B decode | 98.0 tok/s | 109.0 tok/s |
| 1.7B decode | 41.3 tok/s | 47.6 tok/s |
| 0.6B prefill, 41-token prompt | 1568 tok/s | 818 tok/s |
At 0.6B, decode reads 335 MB of weights per token. The q4gsw GEMV is ~74% of GPU time at ~44.5 GB/s, and the GPU is ~100% busy.
#22941 (fused QK+softmax on the SDPA decode path) is the one change that helped: +2.5-3.9% decode.
Tried, no gain:
- 8da4w (
linear_dq8ca_q4gsw): 22% slower than 4w - one command buffer per token: no change
- fusing SwiGLU (sigmoid + 2 muls): 0.998x
- tin GEMM at M=1 instead of the coop GEMV: 5.3x slower
- int3 weights: would beat XNNPACK, but +40% perplexity even with HQQ+AWQ
Possible directions: cut the non-GEMV work (SDPA ~12%, rms_norm ~5%, no-op view copies ~5%), or a sub-4-bit linear kernel paired with a quantizer that holds accuracy.
cc @SS-JIA @manuelcandales @digantdesai @cbilgin
- Lenguaje dominante
- Python
- Estrellas
- 5k
- Forks
- 1.2k
- Merge medio
- 2 d 9 h
- PR fusionados (30 d)
- 555
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pytorch/executorch
-
enhancement triaged
Dificultad 2/5 Medio día Aptitud para principiantes 68/100
pytorch/executorch#21640 ·
Los mantenedores suelen responder en 1 día
-
enhancement module: examples
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
pytorch/executorch#23164 · 7 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Qualcomm: 8-bit per-channel weight scales are floored at the 16-bit eps, and the HTP miscomputes near-zero channelsPosiblemente ocupada @psiddh la tomó hace 1 día. Abiertomodule: qnn partner: qualcomm
pytorch/executorch#23160 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
[cpu kernels] native_layer_norm: layer_norm_scalar returns NaN on large-mean rows; Half/BF16 at N>=256 slow after #23153Posiblemente ocupada @JakeStevens la tomó hace 1 día. Abiertomodule: kernels
pytorch/executorch#23159 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
module: vulkan
Dificultad 3/5 1-2 días Aptitud para principiantes 66/100
pytorch/executorch#23158 ·
Los mantenedores suelen responder en 1 día
Todos los issues de pytorch/executorch
Issues similares
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
openvinotoolkit/openvino_notebooks#3665 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
benchmark-gap
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día