llama.cpp sloučil pro DeepSeek V4 zhruba 137 uzlů do jednoho spuštění
Backend Vulkan v llama.cpp dostal tři sloučené operace pro hyperpropojení DeepSeeku V4. Při dekódování na Strix Halo naměřil autor změny 16,77 místo 11,16 tokenu za sekundu, ale každé rameno zkusil jen dvakrát a rozprava k návrhu neobsahuje nezávislé opakování.

DeepSeek V4 rozděluje zbytkový proud mezi několik paralelních cest a v každé vrstvě je znovu míchá. V backendu Vulkan nástroje llama.cpp se dosud tohle míchání skládalo z dlouhé řady drobných výpočetních uzlů. Návrh číslo 26578, sloučený 7. září 2026 ve 13.24 UTC, nahradil tři části řetězce samostatnými shadery. První vydané sestavení s touto změnou je b10844 z téhož dne.
Čtyři proudy se míchají maticí 4 × 4
Výrobce modelu označuje techniku jako Manifold-Constrained Hyper-Connections, zkráceně mHC. V technické zprávě DeepSeeku V4 stojí, že rozšiřuje běžná zbytková propojení a má zlepšit stabilitu přenosu signálu mezi vrstvami. Konkrétní nastavení vydaných vah je čitelné v jejich souboru config.json: položka hc_mult má hodnotu 4 a Sinkhornův výpočet se opakuje dvacetkrát.
Čtyřka znamená čtyři proudy. Mezi nimi leží matice 4 × 4, která určuje, v jakém poměru se mají spojit. Sinkhornův postup střídavě normalizuje její řádky a sloupce. Nový shader dsv4_hc_comb uloží šestnáct prvků matice jednoho tokenu do šestnácti sousedních vláken podskupiny a všech dvacet kol provede v registrech. Při podskupině široké 64 vláken tak zpracuje čtyři tokeny vedle sebe.
Zbylé dva shadery obstarávají okolí tohoto výpočtu. dsv4_hc_pre složí čtyři vstupní proudy do jednoho podle jejich vah. dsv4_hc_post výsledek znovu rozvětví a přičte k němu namíchané zbytky. CUDA tyto sloučené operace dostala už s původní podporou DeepSeeku V4 a Metal v návrhu 26459. Vulkan byl podle autora posledním ze tří hlavních backendů, který stále pouštěl rozložený řetězec.
Jedno spuštění místo 137 uzlů
Autor změny napočítal pro jednu matici přibližně 137 přísně seřazených uzlů výpočetního grafu. Uzly čekaly jeden na druhý a dohromady znamenaly mnoho samostatných odeslání práce na grafický čip. U DeepSeeku V4 Flash mu samotná nesloučená část se Sinkhornovým výpočtem vyšla na zhruba 16 000 spuštění shaderu na jeden vygenerovaný token a na 32 % času, který během dekódování zabraly jednotlivé operace.
Sloučení nemění počet dvaceti iterací ani matematický vztah mezi proudy. Mění způsob, jakým se stejný výpočet předá hardwaru. Kód navíc novou cestu zapne jen pro hodnoty F32, čtyři proudy a zařízení s podporou základních podskupin a operací shuffle. Podskupina musí mít nejméně šestnáct vláken. Když podmínky nesedí, llama.cpp nechá graf rozložený a použije starou cestu.
Testy v návrhu zahrnují dávky od jednoho do 2 048 tokenů, a to s dvaceti iteracemi jako v modelu. Při kontrole skutečného zadání dlouhého devět tisíc tokenů autor zaznamenal 2 322 provedení uzlu pro míchání. Nejvyšší průměrná chyba proti kontrolnímu výpočtu byla 5,1 · 10−8 a žádný uzel se nerozešel nad nastavenou mez. Porovnání se vzorcem z oficiální implementace a s výpočtem v přesnosti float64 skončilo největší odchylkou kolem 6 · 10−7. Jsou to výsledky autora návrhu, ne nezávislé měření.
Dekódování vyšlo o polovinu rychlejší
Benchmark běžel na integrovaném grafickém čipu gfx1151, tedy na Strix Halo, s modelem DeepSeek-V4-Flash v kvantizaci IQ3_XXS a se zadáním dlouhým devět tisíc tokenů. Autor střídal obě varianty v pořadí ABBA a každou změřil dvakrát; rozptyl uvnitř ramene zůstal pod jedním procentem. Zpracování zadání stouplo ze 103,1 na 115,9 tokenu za sekundu. Samotné dekódování se posunulo z 11,16 na 16,77 tokenu za sekundu, tedy na 1,50násobek.
Dvě opakování na rameno nestačí na závěr o všech kartách s Vulkanem. Měření používá jediný čip, jednu kvantizaci a jedno zadání. Ve veřejné rozpravě k návrhu není nezávislé opakování. Také nelze převzít údaj o 32 % jako obecný podíl hyperpropojení na běhu modelu: vztahuje se k času operací při dekódování v této konkrétní sestavě.
Zaokrouhlení změnilo jednu chamtivou odpověď
Při ověřování se ukázala nepříjemná vlastnost tříbitové kvantizace. Na jednom zkušebním zadání dlouhém devět tisíc tokenů začal model při chamtivém dekódování, které vždy vybírá nejpravděpodobnější další token, opakovat totéž slovo. Stará nesloučená cesta Vulkanu na stejném zadání odpověděla čistě. Stejné opakování však vytvořil také procesorový backend s vypnutými sloučenými operacemi.
Podle měření autora se rozdíl mezi jednotlivými cestami zvětšoval plynule z přibližně 10−9 v první vrstvě na 10−3 po 43 vrstvách. Při náhodném vzorkování s teplotami 0,3 a 0,7, vždy v osmi bězích na variantu, nedokázal kvalitu výstupů rozlišit a nejhorší opakování padlo na starou cestu. Produkční rozhraní DeepSeeku na týž prompt odpovědělo bez smyčky. Z jednoho promptu proto nejde udělat regresi ani důkaz rovnocennosti; návrh ho správně ponechává jako známé chování citlivé kvantizace.
Pro majitele Strix Halo je změna dostupná od sestavení b10844 bez dalšího přepínače. Na jiném zařízení se přínos musí teprve změřit. Přesné omezení je užitečnější než slib: nový shader odstraňuje režii tam, kde Vulkan umí potřebné podskupinové operace, ale číslo 1,50 platí zatím pro jedinou popsanou sestavu.
Zdroje
- llama.cpp #26578 – kód, testy, metodika a výsledky měření
- llama.cpp b10844 – první vydané sestavení, jehož značka ukazuje na sloučený commit
- Karta modelu DeepSeek-V4-Flash a config.json – parametry modelu a hyperpropojení
- Technická zpráva DeepSeek-V4 – popis architektury mHC