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

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 jménem penalty_repeat, které nastavení modelů z Hugging Face nezná, takže se do souborů GGUF nedostal.

Vytažená zásuvka lístkového katalogu plná katalogových lístků
Kdo hledá pod heslem, které v katalogu není, odejde s prázdnou. Foto: יעל י, Wikimedia Commons (CC BY-SA 3.0)

Do llama.cpp přibyla 24. srpna 2026 oprava o jednom řádku. Převodník ze safetensorů do GGUF od té chvíle bere doporučený postih za opakování i z klíče repetition_penalty, ne jen z penalty_repeat. Rozdíl mezi těmi dvěma jmény je celý ten problém: první z nich je standardní jméno z knihovny Transformers, druhé je vlastní jméno llama.cpp a v nastavení stažených modelů se prakticky nevyskytuje.

Co ten postih vlastně dělá

Postih za opakování snižuje pravděpodobnost slov, která už v odpovědi padla. Hodnota 1,0 znamená vypnuto, vyšší číslo tlačí model od opisování sebe sama. Tvůrci modelů si ji ladí spolu s teplotou a prahy top_ktop_p a zapisují ji do souboru generation_config.json, který leží v repozitáři vedle vah.

Právě odtud si ta čísla od listopadu 2025 bere i llama.cpp. Převodník je zapíše do hlavičky souboru GGUF pod klíče general.sampling.* a server je pak použije jako výchozí nastavení. Pořadí je dané: přednost má přepínač na příkazové řádce, po něm doporučení uložené v modelu a teprve nakonec zabudovaná výchozí hodnota. Ta je u postihu za opakování 1,00, tedy vypnuto; výjimkou je jediný nástroj na syntézu řeči, kde je 1,05.

Klíč, který v nastavení modelů nikdo nepíše

Převodník takhle přebírá dvanáct hodnot. Čtyři z nich se jmenují stejně jako v knihovně Transformers, takže sedí bez další práce: temperature, top_k, top_pmin_p. Několik dalších jsou samplery, které existují jen v llama.cpp a jinde protějšek nemají, takže na vlastním jménu nic divného není. Postih za opakování ale protějšek má. Ve zdrojovém kódu Transformers se to pole jmenuje repetition_penalty a řetězec penalty_repeat v něm nestojí ani jednou.

Kolik modelů se to týká, jsme si změřili sami. Vzali jsme sto dvacet nejstahovanějších modelů pro generování textu na Hugging Face a stáhli jim generation_config.json; k 24. srpnu 2026 ho má devadesát tři z nich. Klíč repetition_penalty je ve dvaceti, u devatenácti s jinou hodnotou než 1,0 – čtrnáctkrát 1,05 a pětkrát 1,1. Klíč penalty_repeat, tedy ten, který převodník až dosud hledal, nemá ani jeden z nich.

Všech devatenáct jsou modely řady Qwen, hlavně Qwen2.5 a Qwen3-Coder; část z nich jsou cizí kvantizace téhož modelu. Nejnovější Qwen3.8 už postih za opakování nenastavuje vůbec, takže na něj oprava nedopadne.

Na hotovém souboru je to vidět

Že to není teorie, se dá ověřit bez stahování stovek gigabajtů: hlavička GGUF leží na začátku souboru, takže si stačí vyžádat prvních pár desítek megabajtů a přečíst z nich seznam klíčů. Vzali jsme převod modelu Qwen3-Coder-30B-A3B-Instruct z července 2026 ve variantě Q4_K_M. V hlavičce jsou tři klíče ze jmenované čtveřice: general.sampling.top_k 20, general.sampling.top_p 0,8 a general.sampling.temp 0,7. Přesně ta čísla stojí v nastavení původního modelu. Ve stejném souboru je ale i repetition_penalty 1,05 – a klíč general.sampling.penalty_repeat v GGUF chybí.

Kdo tenhle soubor spustí a nic si nenastaví, dostane teplotu i prahy podle přání autorů modelu a postih za opakování vypnutý. Ne proto, že by ho autoři vypnout chtěli, ale proto, že se jejich hodnota po cestě ztratila. Ručně se dá dosadit přepínačem --repeat-penalty.

Vydaná sestavení opravu zatím nemají

Změna je v hlavní větvi, ne v hotovém programu. Slučovací commit vznikl 24. srpna ve 14:01 UTC, kdežto poslední zveřejněné sestavení b10612 je z 13:41 UTC téhož dne, tedy o dvacet minut starší. Kdo si k večeru toho dne stáhl nejnovější binárku, opravu v ní nemá; do některého z dalších sestavení se dostane sama.

Druhá věc je horší a čas ji nevyřeší: oprava se týká jen převodu. Soubory GGUF, které už na Hugging Face visí, se tím nezmění – doporučenou hodnotu v sobě prostě nemají a dostane se do nich, teprve až je někdo převede znovu. U populárních modelů to obvykle netrvá dlouho, protože kvantizované varianty se sázejí po každé větší změně. U starších převodů, ke kterým se nikdo nevrátí, tam ta hodnota nebude nikdy.

Postih za opakování se řeší i jinde

Ta hodnota není maličkost, se kterou by si nikdo nelámal hlavu. Před dvěma týdny změnila Ollama svoje výchozí nastavení z 1,1 na 1,0 s odůvodněním, že nikdo z tvůrců modelů v její knihovně hodnotu 1,1 nedoporučuje a že postih navíc bere výkon spekulativnímu dekódování. Obě rozhodnutí míří stejným směrem: přestat hádat za autory modelu. Rozdíl je v tom, že llama.cpp k tomu potřebovala hodnotu, kterou si autoři modelu opravdu napsali, a devět měsíců si ji četla ze špatné kolonky.

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