Pre-Release / Continuous-Build: dies ist ein experimenteller Build, keine stabile Veröffentlichung.
metal : behebe mul_mat_id mit doppelten IDs (#30373) * metal : behebe mul_mat_id Limits und Kernelnamen * metal : behebe mul_mat_id mit doppelten IDs kernel_mul_mm_id_map0 ging von höchstens einem Treffer pro Token und einer festen Kapazität von ne21 Einträgen pro Experten aus, was falsche oder verworfene Ausgabezeilen erzeugte und bei doppelten IDs in die Slice des nächsten Experten übertreten konnte. Baue stattdessen eine kompakte Liste der (Token, Slot)-Einträge pro Experten: - Durchlauf 1 zählt die Einträge jedes Experten, Thread 0 berechnet die Offsets der Experten-Slices (tpe enthält nun [base, count]) - Durchlauf 2 schreibt die Einträge mit einem unbedingten Store pro Token (bedingte Stores divergierender Lanes sind sehr langsam), der Dummy-Wert der Token ohne Treffer landet auf einem Padding-Slot der Slice, der nie gelesen wird - Duplikate werden durch einen seltenen Zweig behandelt - kernel_mul_mm_id liest base/count seines Experten und iteriert über die Eintrags-Tiles, die nicht ins Grid passen Der ids-Buffer ist mit ne20*ne21 + ne02 dimensioniert (Einträge + Padding). 883/883 test-backend-ops MUL_MAT_ID Tests bestehen, llama-bench liegt innerhalb der Lauf-zu-Lauf-Varianz des vorherigen Verhaltens. Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD * metal : mache mul_mat_id map0 ne02 zu einer Funktionskonstante verwende FOR_UNROLL für die id-Schleifen von kernel_mul_mm_id_map0 und mache ne02 zur Funktionskonstante FC_mul_mm_id_map0_ne02 (FC_MUL_MM + 7), sodass sich die Threadgroup-Offsets von cnt/bas/sids und die Prefix-Sum- Grenze zur Kompilierzeit falten lassen. Der Pipeline-Name kodiert nun ne02 (gleiche Konvention wie die ssm_conv nc/silu-Konstanten) und die map0-Pipeline wird mit dem gesetzten konstanten Wert kompiliert. ne02 ist nicht mehr Teil von ggml_metal_kargs_mul_mm_id_map0 - das Dispatch-Grid kommt weiterhin vom Tensor ne[2] auf dem Host. keine messbare Leistungsänderung: 883/883 test-backend-ops MUL_MAT_ID Tests bestehen, Op-Level- und llama-bench-Ergebnisse liegen innerhalb der Laufvarianz. Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD * cont : Aufräumen + TODO * metal : Dispatche mul_mat_id Eintrags-Tiles aus dem Prepass folge dem Ansatz der Vulkan-Implementierung (#29998): statt ein Grid über Experten x ne21 Eintrags-Tiles zu starten und die meisten Threadgroups früh aussteigen zu lassen, erzeugt kernel_mul_mm_id_map0 nun auch eine Row Map - die Gesamtanzahl der Tiles plus ein (Experte, erster Eintrag, gültige Zeilen)-Deskriptor pro 32-Eintrags-Tile, das Arbeit hat. kernel_mul_mm_id wird mit einer statischen oberen Grenze für die Anzahl der Tiles gestartet (volle Tiles über alle Einträge plus höchstens ein teilweise gefülltes Tile pro Experte), liest seinen Deskriptor und verarbeitet ein einzelnes Tile - der Schwanz steigt früh aus. Dies entfernt die Rundenschleife, die nötig war, um doppelte IDs hinter dem Grid abzudecken (Registerdruck: th_max 768 -> zurück auf das einfache mul_mm Niveau), und Duplikate werden nun implizit behandelt, da sie nur mehr Deskriptoren innerhalb der Grenze erzeugen. Das Grid schrumpft um ~8-16x bei typischen Formen (z. B. 128 Experten, 8 genutzt, 512 Token: 128 Tiles statt 2048 Eintrags-Tiles, von denen 94% nur zum Aussteigen gestartet wurden) und ne21 wird von den mm Kernel-Kargs nicht mehr benötigt. 883/883 test-backend-ops MUL_MAT_ID Tests bestehen. llama-bench (Qwen3.6-35B-A3B Q8_0) ist nun bei allen pp-Größen schneller als master (pp2048/4096/8192 +2%, pp512 +0.5%), tg32 unverändert. Assisted-by: pi:llama.cpp/MiMo-V2.6-Flash-MOPD * cont : smem-Assertion hinzufügenWebseite: - https://llama.app
Attestierungen: - https://github.com/ggml-org/llama.cpp/attestations/55057952
macOS/iOS: - macOS Apple Silicon (arm64) - macOS Apple Silicon (arm64, KleidiAI aktiviert) DEAKTIVIERT - macOS Intel (x64) - iOS XCFramework
Linux: - Ubuntu x64 (CPU) - Ubuntu arm64 (CPU) - Ubuntu s390x (CPU) - Ubuntu x64 (Vulkan) - Ubuntu arm64 (Vulkan) - Ubuntu x64 (CUDA 12) - CUDA 12.8 Bibliotheken - Ubuntu x64 (CUDA 13) - CUDA 13.4 Bibliotheken - Ubuntu arm64 (CUDA 13) - CUDA 13.4 Bibliotheken - Ubuntu x64 (ROCm 10.0) - Ubuntu x64 (OpenVINO) - Ubuntu x64 (SYCL FP32) - Ubuntu x64 (SYCL FP16) - Linux arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - Einrichtungsanleitung
Android: - Android arm64 (CPU) - Android arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - Einrichtungsanleitung
Windows: - Windows x64 (CPU) - Windows arm64 (CPU) - Windows arm64 (OpenCL Adreno) - Windows x64 (CUDA 12) - CUDA 12.4 DLLs - Windows x64 (CUDA 13) - CUDA 13.4 DLLs - Windows arm64 (CUDA 13) - CUDA 13.4 DLLs - Windows x64 (Vulkan) - Windows arm64 (Vulkan) - Windows x64 (OpenVINO) - Windows x64 (SYCL) - Windows x64 (ROCm 10.0)
openEuler: - DEAKTIVIERT - openEuler x86 (310p) - openEuler x86 (910b, ACL Graph) - openEuler aarch64 (310p) - openEuler aarch64 (910b, ACL Graph)
Benutzeroberfläche: - Benutzeroberfläche