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

llama-quantize si na velký tenzor bere nejvýš osm gigabajtů operační paměti

Kvantizační nástroj z llama.cpp si na každý tenzor alokoval dva pomocné bloky po čtyřech bajtech na parametr, takže u opravdu velké vkládací tabulky šly nároky do stovek gigabajtů. Od 27. srpna 2026 zpracovává tenzor po dávkách řádků a pracovní paměť drží pod 8 GiB. Nový přepínač ten strop posune nahoru i dolů.

Hromada starších paměťových modulů SIMM a DIMM
Hromada starších paměťových modulů. Foto: Blake Patterson, Wikimedia Commons (CC BY 2.0)

Nástroj llama-quantize z projektu llama.cpp převádí váhy modelu do úspornějšího formátu, aby se model vešel na kartu nebo aspoň do paměti. Do 27. srpna 2026 si přitom na každý tenzor, který kvantizoval, alokoval dva pomocné bloky, každý o velikosti čtyř bajtů na jeden parametr. U běžné vrstvy jsou to megabajty. U jedné vyhledávací tabulky z čerstvého modelu Qwenu z toho vyšly stovky gigabajtů, a právě ta oprava vyvolala.

Čtyři bajty na parametr, a to dvakrát

Staré znění souboru src/llama-quant.cpp mělo dvě místa, na kterých se to lámalo. První si připravilo výstupní blok příkazem work.resize(nelements * 4), tedy čtyři bajty na každé číslo tenzoru; komentář vedle něj to označuje za horní odhad. Druhé poslalo tenzor rozbalit do desetinných čísel a převodní funkce si na to zvětšila pole typu float na počet prvků tenzoru, tedy znovu čtyři bajty na číslo. Oba bloky žily vedle sebe, dokud nebyl celý tenzor hotový.

Zdrojová data se do paměti nahrávat nemusela. Když je zapnuté mapování souboru do paměti, ukazuje se rovnou do mapy a stránky si uklízí systém sám; bez mapování se ale načetl celý tenzor do třetího bloku. Nároky na paměť tedy neurčovala velikost modelu, ale velikost jeho největšího tenzoru.

Tenzor, který to vyvolal

Popis opravy jmenuje spouštěč přímo: vyhledávací tabulku n-gramů z modelu Qwen3.8-Flash-Next, o jejímž obsahu jsme psali samostatně. Ve zveřejněných vahách je rozsekaná na 128 dílů, převodní skript llama.cpp z nich ale skládá jeden tenzor a komentář nad tím kusem kódu o něm mluví jako o tenzoru „dobře přes 100 GB“. Z hlaviček vah vychází 51 200 245 760 parametrů.

Na takovém tenzoru si stará cesta musela vzít 204,8 GB na jeden pomocný blok, a bloky byly dva. To číslo je náš výpočet z kódu, nikoli údaj ze zdroje: čtyři bajty krát 51,2 miliardy parametrů.

Nově se jede po dávkách řádků

Změna, kterou návrh 27795 zavedl 27. srpna 2026, tenhle postup rozseká na dávky celých řádků. Na jeden řádek připadne místo ve zdrojovém formátu, místo v cílovém formátu a čtyři bajty na každé číslo pro mezikrok s desetinnými čísly; kolik řádků se vejde do jedné dávky, vyjde z podílu stropu a téhle hodnoty. Hotová dávka jde rovnou do výstupního souboru. Tenzory, které se nekvantizují, se opisují po celých řádcích taky – podle komentáře v kódu proto, aby se dala každá dávka ověřit.

Strop je nový přepínač --max-buffer-size, zadává se v mebibajtech a bez něj platí 8 192, tedy 8 GiB. Autor změny Xuan-Son Nguyen v popisu uvádí, že s nižším stropem vyšel výstup bajt po bajtu shodný. Do sestavení se změna dostala týž den: první, které ji obsahuje, je b10656, vydané v 17.40 UTC.

Co z toho má počítač doma

Strop se týká pomocných bloků, ne celého převodu. Vstupní soubor se dál mapuje do paměti a výstupní se dál zapisuje na disk, takže na místo v úložišti to nároky nesnižuje ani o bajt. Podle našeho propočtu se dávkování projeví teprve u tenzoru zhruba nad miliardu čísel; menší modely se kvantizovaly stejně jako dřív a po opravě to tak zůstane.

A jestli se dá Qwen3.8-Flash-Next po kvantizaci provozovat doma, je jiná otázka. Rozhraní Hugging Face hlásí u jedné z veřejných sad GGUF velikost 354 GB pro BF16, 188,2 GB pro Q8_0 a 72,5 GB i u nejmenšího balíku, který je označený jako jednobitový. Za to může právě ta tabulka: llama-quantize ji řadí mezi vkládací tabulky, takže se řídí přepínačem --token-embedding-type, a kdo jí chce dát vlastní formát, musí ji pojmenovat přes --tensor-type.

Ubyla tedy jedna překážka ze dvou. Kvantizovat velký model jde nově i na stroji s běžnou pamětí; vejít se s tím výsledkem někam je pořád na čtenáři.

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 podporuje od sestavení b10665 DSpark pro Nemotron 3.5

    Sestavení llama.cpp b10665 z 28. srpna umí vedle hlavního Nemotronu 3.5 načíst samostatný draft model DSpark od Nvidie. Ten přidá 1,35 GB dat k 21,58 GB cílového…

  2. U sebe doma

    vLLM 0.28.0 přesunul podporu bitsandbytes z hlavního stromu do zásuvného modulu

    Obsluha jazykových modelů vLLM vydala 26. srpna 2026 verzi 0.28.0 s 584 commity od 270 přispěvatelů. Podpora kvantizace bitsandbytes odešla z hlavního stromu do…

  3. U sebe doma

    SGLang odstranil přepínač pro kvantizaci, který v devíti vydáních jen hlásil chybu

    Přepínač --torchao-config končil v SGLangu chybou ImportError, ať mu uživatel předal kteroukoli z povolených hodnot. Rozbil ho skok verze knihovny torchao, který se…

  4. U sebe doma

    Převodník llama.cpp devět měsíců přehlížel doporučený postih za opakování

    Oprava z 24. srpna 2026 mění v převodníku llama.cpp jediný řádek: doporučený postih za opakování se nově čte i pod jménem repetition_penalty. Dosud se hledal jen pod…