Přeskočit na obsah
U sebe doma aktualizováno 21. 8. 2026 4 min čtení

Llama.cpp umí dvoubitový Q2_0 i na kartách NVIDIA a ternární model 8B má 2,15 GiB.

Do hlavní větve llama.cpp přibyla 30. července 2026 podpora formátu Q2_0 pro karty NVIDIA, o den později i pro rozhraní SYCL. Formát ukládá váhu do dvou bitů a s jedním měřítkem na každých 64 vah vychází na 2,25 bitu. Ternární model s 8,19 miliardy vah v něm zabere 2,15 GiB místo 15,26 GiB.

Bonsaj borovice černé v tokijské zahradě
Bonsaj borovice černé v tokijské zahradě Happo-en. Modely, kvůli kterým formát Q2_0 vznikl, se jmenují Ternary Bonsai. Foto: Reinhold Möller, Wikimedia Commons (CC BY-SA 4.0)

Program llama.cpp pouští jazykové modely na běžném počítači, bez cloudu. Váhy čte z vlastního formátu GGUF a skoro vždycky zmenšené: místo šestnácti bitů na jednu váhu jich zabírají osm, pět nebo čtyři. Tomu zmenšení se říká kvantizace. Od 30. července 2026 zvládne llama.cpp i variantu, kde na váhu vycházejí dva bity a kousek.

Ten den se do hlavní větve slil návrh číslo 25707 s podporou formátu Q2_0 pro karty NVIDIA. První sestavení, které ji obsahuje, je b10192 z téhož dne; ověřili jsme to porovnáním obou značek v repozitáři, protože sestavení tu vznikají po hodinách a podle času vydání se to určit nedá. O den později přibylo násobení matic pro SYCL, které je podle dokumentace projektu mířené hlavně na karty Intelu.

Osmnáct bajtů na čtyřiašedesát vah

Formát je popsaný v hlavičkovém souboru ggml-common.h a je jednoduchý. Váhy se berou po skupinách po 64. Každá skupina má jedno společné měřítko v šestnáctibitovém desetinném čísle, tedy dva bajty, a za ním následuje 64 dvoubitových kódů, tedy šestnáct bajtů. Blok je dohromady 18 bajtů na 64 vah, což je 2,25 bitu na váhu. Nástroj llama-quantize to v nápovědě uvádí sám: „2.25 bpw quantization (group 64)“.

Kód nabývá hodnot 0 až 3. Při čtení se od něj odečte jednička a výsledek se vynásobí měřítkem, takže z něj vyjde minus jednou, nula, jednou nebo dvakrát měřítko. Model, jehož váhy nabývají jen tří hodnot, potřebuje první tři; čtvrtou karta modelu označuje za rezervovanou pro pozdější použití.

Šest procent, o která se vedl spor

Autoři formátu chtěli skupinu po 128 vahách, protože tak mají zabalené vlastní modely. V rozpravě číslo 22019 jim to správce projektu Georgi Gerganov rozmluvil: skupina po 64 podle něj stojí méně než šest procent paměti navíc, zato je praktičtější, protože sedne na víc tvarů tenzorů, a dá lepší výsledek. Autor souhlasil a oficiální Q2_0 má skupinu 64.

Přepočítali jsme si to. Skupina po 128 vahách vyjde na 34 bajtů, tedy 2,125 bitu na váhu, skupina po 64 na 2,25 – rozdíl je 5,9 %. Sedí to i na hotových souborech: osmimiliardový model má v balení po 128 vahách 2,03 GiB, v balení po 64 pak 2,15 GiB, což je přesně o 5,9 % víc.

Sedmkrát menší soubor

Modely, kvůli kterým formát vznikl, se jmenují Ternary Bonsai a vydala je firma Prism ML. Ternární tady znamená, že váha nabývá jen tří hodnot: minus jedna, nula, plus jedna. Takový model se do dvou bitů vejde beze zbytku, protože víc hodnot ani nemá.

Podle výpisu souborů v repozitáři osmimiliardové verze má model v šestnáctibitovém formátu F16 15,26 GiB a v Q2_0 se skupinou 64 pak 2,15 GiB, tedy 7,1krát méně. U verze s 27 miliardami parametrů je to 50,1 GiB proti 7,06 GiB, tedy stejný poměr. Váhy osmimiliardové verze jsou pod licencí Apache 2.0 v plném znění, bez prahů na tržby nebo počet uživatelů; přiložený soubor NOTICE dodává, že model je postavený z Qwen3-8B.

Velikost souboru ovšem není celá spotřeba paměti. K vahám se za běhu přičítá vyrovnávací paměť na kontext, která roste s délkou zpracovávaného textu. Kolik zabere, závisí na nastavení a na délce kontextu; osmimiliardový model jich podle své karty zvládne 65 536.

Čí jsou čísla o kvalitě

V návrhu s podporou karet NVIDIA je i tabulka přesnosti. Autor v ní porovnal výstupy modelu v Q2_0 s týmž modelem v F16, a to na dvaceti úsecích po 512 tokenech z datové sady wikitext-2. U osmimiliardové verze mu vyšla průměrná divergence 0,000446, shoda v nejpravděpodobnějším tokenu v 98,53 % případů a poměr perplexity 1,0001. Měřil to člověk, který formát navrhl, a porovnával model sám se sebou. Vypovídá to o tom, že zabalení do dvou bitů z ternárních vah nic neubere – ne o tom, jak je model dobrý.

Srovnání s jinými modely je na kartě modelu a měřila ho rovněž Prism ML: nástrojem EvalScope 1.4.2 nad vLLM 0.15.1 na kartě H100 jí Ternary Bonsai 8B vyšel v průměru šesti testů na 75,5 bodu proti 79,3 u modelu Qwen 3 8B, ze kterého je odvozený. Veřejně to zatím nikdo nezopakoval.

Nezávisle ověřený je kód, ne model. Výpočetní funkce pro Vulkan psal a ladil někdo jiný než autor formátu a ve stále otevřeném návrhu na zrychlení pro procesory x86 jeho autor porovnal 14 000 náhodných vstupů s obecnou implementací a shodly se bit po bitu.

Na běžný model to není

Nástroj llama-quantize nabízí Q2_0 jako cíl pro jakýkoli model. Referenční kvantizér v ggml-quants.c vezme největší absolutní hodnotu v bloku jako měřítko a každou váhu zaokrouhlí na nejbližší ze čtyř úrovní. Co z běžného modelu po takovém zaokrouhlení zbude, žádný ze sloučených návrhů neměří – Q2_0 vznikl pro modely, které jsou ternární už z trénování. Na ostatní má llama.cpp jiné formáty včetně jednobitových, jenže u těch největších modelů zbude i po nich 594 GB.

Ternární formáty v llama.cpp mimochodem už byly: TQ1_0 se 1,69 a TQ2_0 se 2,06 bitu na váhu. Autoři je nepoužili proto, že mají skupinu po 256 vahách, kdežto jejich modely jsou dělané po 128, a že podle nich míří hlavně na procesor.

Zbývá dodělávka, která se čtenáře týká přímo. V repozitářích na Hugging Face leží obě balení vedle sebe a odlišuje je jen název: soubory s _g64 odpovídají tomu, co je v hlavní větvi, kdežto Q2_0.gguf bez přípony je starší balení po 128 vahách z vlastní odnože llama.cpp – píše to autor přímo v návrhu a přejmenování slíbil, až se sloučí podpora pro všechny druhy hardwaru. Karta osmimiliardového modelu má poslední úpravu z 10. června 2026 a pořád tvrdí, že Q2_0 v hlavní větvi llama.cpp není a že je na něj potřeba odnož.

Zdroje: zdrojový kód a návrhy změn v repozitáři ggml-org/llama.cpp (čísla 24448, 25419, 25430, 25707, 26231 a 26348, rozprava 22019), karty modelů a výpisy souborů u prism-ml/Ternary-Bonsai-8B-gguf27B. Přepočty bitů na váhu a poměrů velikostí jsou naše.

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