Přeskočit na obsah
U sebe doma 4 min čtení

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í.

Odkrytý grafický čip AMD Radeon a paměťové čipy na červené desce
Grafický čip AMD Radeon HD 6850. Měření popsané v článku proběhlo na novějším integrovaném čipu gfx1151, snímek je ilustrační. Foto: Song Yanbo, Wikimedia Commons (CC BY-SA 3.0)

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

Diskuse

Zatím tu nikdo nediskutuje. Můžete být první.

Napsat příspěvek

Diskutovat můžete i bez účtu. S registrací se ale příspěvek zveřejní hned a nemusíte pokaždé vyplňovat jméno. Účet už máte? Přihlaste se.

Nezveřejňujeme ho, slouží jen redakci.

Podporuje zápis Texy: **tučně**, *kurzíva*, odrážky, odkazy.

Dál k tématu

  1. U sebe doma

    llama.cpp počítal u sedmi architektur normalizaci jinak než jejich referenční kód

    Vektory dotazů a klíčů v hybridní vrstvě Gated DeltaNet dělil llama.cpp odmocninou ořezanou zdola, kdežto knihovna, ke které se jejich referenční kód hlásí, k té…

  2. U sebe doma

    llama.cpp nechá některé velké vkládací tabulky na disku místo v operační paměti

    Projekt llama.cpp vydal 4. září 2026 verzi 0.4.0 s volbou --lazy-mode: vybraná vkládací tabulka zůstane v souboru na disku a program z ní čte řádky až ve chvíli, kdy je…

  3. U sebe doma

    Ollama 0.33.3 čte doporučené hodnoty vzorkování přímo ze souboru modelu

    Ollama do teď používala vlastní výchozí teplotu a top_p vždycky, když je nepřepsal Modelfile nebo požadavek. Verze 0.33.3 z 2. září 2026 se nejdřív podívá, co si o sobě…

  4. U sebe doma

    Hugging Face zveřejnil 207 WebGPU kernelů pro prohlížeč, loader k nim vyšel jako náhled

    Organizace webgpu-kernels na Hubu nese 207 výpočetních programů pro grafický čip pod licencí Apache 2.0 a balíček @huggingface/kernels je z prohlížeče stáhne a spustí.…