Přeskočit na obsah
Infrastruktura 3 min čtení

Hlavní větev Transformers přestala vydávat starý soubor z cache za aktuální

Knihovna Transformers mohla na souborovém systému jen pro čtení předat aplikaci starší soubor z cache, i když na Hugging Face Hubu našla novější revizi. Oprava sloučená 9. srpna 2026 chybu EROFS nově neskrývá; zatím jde o změnu v hlavní větvi, ne o oznámení nové verze balíčku.

Diskové úložiště IBM se zásuvkami pro pevné disky
Souborová cache Hugging Face ukládá stažené soubory a odkazy na jednotlivé revize modelu. Foto: j_cadmus, Wikimedia Commons (CC BY 2.0)

Když program načítá model přes knihovnu Transformers, nemusí pokaždé stahovat všechny soubory z Hugging Face Hubu. Společná cache uchovává stažené objekty a vedle nich odkazy na konkrétní revize. Pokud se větev modelu změní, má přibýt nový záznam a starý zůstane k dispozici pro případ, že si o něj aplikace výslovně řekne.

Na systému souborů připojeném jen pro čtení se však tato posloupnost rozbila způsobem, který nebyl na první pohled vidět. Funkce hf_hub_download zjistila, že na Hubu existuje novější revize, ale nový objekt nebo ukazatel na revizi už nedokázala zapsat. Místo jasné chyby pak nadřazená funkce cached_files mohla vrátit dříve uložený soubor.

Novější revize existovala, aplikace dostala starší

Návrh opravy 47852 popisuje konkrétní průběh. Stažení nejprve spojilo jméno větve s novým identifikátorem commitu. Pokus o zápis do adresáře cache potom skončil chybou OSError s číslem 30, tedy EROFS. Ta znamená, že je celý souborový systém jen pro čtení.

Transformers mělo pro chyby při stahování společnou obsluhu. Některé výjimky posílalo dál, jiné vedly k nouzovému použití souboru, který už v cache ležel. EROFS nepatřilo do první skupiny, a proto propadlo až k obnově ze staré cache. Volající program nedostal informaci, že aktualizace selhala.

Problém se v průběžné integraci projektu projevil na souboru chat_template. Bez opravy test podle autorů načetl starou šablonu, s opravou už prošel s novou. To zároveň vymezuje doložený rozsah: návrh mluví o vzácném nastavení, používaném hlavně ve vlastní průběžné integraci projektu. Netvrdí, že se chyba běžně projevovala u všech uživatelů Transformers.

Python rozlišuje zákaz zápisu dvěma výjimkami

Příčinou nebyla samotná cache, ale rozdíl mezi dvěma podobnými zákazy zápisu. Když uživatel nemá k zapisovatelnému adresáři oprávnění, operační systém vrátí EACCES s číslem 13. Python tuto chybu mapuje na zvláštní třídu PermissionError a původní podmínka v Transformers ji zachytila.

Souborový systém připojený celý jen pro čtení vrací EROFS s číslem 30. Dokumentace Pythonu ho vede jako samostatný systémový symbol, ne jako chybu mapovanou na PermissionError. V programu proto zůstane obecným OSError. Kontrola isinstance(e, PermissionError) tak pokryla zákaz podle práv k adresáři, ale ne zákaz daný režimem celého připojeného systému.

Režim jen pro čtení je běžné bezpečnostní opatření

Nejde přitom o nesmyslné nastavení. Bezpečnostní checklist Kubernetes doporučuje u kontejneru nastavit readOnlyRootFilesystem: true. Aplikace pak nemůže zapisovat do kořenového systému kontejneru; zapisovatelná data musí správce umístit do samostatného svazku.

Cache Hugging Face má podle dokumentace huggingface_hub výchozí adresář ~/.cache/huggingface/hub. Umístění lze změnit parametrem cache_dir nebo proměnnými HF_HOMEHF_HUB_CACHE. Samotný kořenový systém jen pro čtení tedy nemusí znamenat cache jen pro čtení; záleží na tom, kam je cache nasměrovaná a jaké svazky kontejner dostal.

Oprava chybu ukáže, cestu sama nepřepne

Commit sloučený 9. srpna přidává přesnou kontrolu isinstance(e, OSError) and e.errno == errno.EROFS. Když sedí, výjimku znovu vyvolá dřív, než se kód dostane k nouzovému použití starého souboru. Aplikace tak může selhání přiznat nebo opakovat stažení do zapisovatelného adresáře.

Změna sama žádnou náhradní cestu nevybírá. V průběžné integraci Transformers ji obstarává zvláštní obal, který po chybě zkusí dočasnou cache. Pro ostatní volající je výsledkem především jiná smlouva: místo souboru, který vypadá aktuálně, dostanou chybu a musí rozhodnout, co s ní.

Oprava je zatím v hlavní větvi repozitáře. Z commitu neplyne číslo balíčku, ve kterém se dostane k uživatelům, a proto ho nelze vydávat za nové stabilní vydání. Provozovatel může do té doby ověřit dvě věci bez odhadu: zda jeho cache opravdu leží na systému jen pro čtení a zda načítá pevně určenou revizi, nebo pokaždé žádá nejnovější stav větve.

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

    Načítání vah z disku spolklo ve SGLangu čtyři pětiny startu Qwen3-235B

    Vývojáři obslužné vrstvy SGLang si rozebrali po krocích, co server dělá, než přijme první požadavek. Ze 390 sekund startu modelu Qwen3-235B na čtyřech kartách připadlo…

  2. Infrastruktura

    AMD se dohodlo na koupi Taalasu, který zapisuje model přímo do křemíku

    AMD se dohodlo na převzetí torontského Taalasu. Jeho demonstrační HC1 drží váhy modelu Llama 3.1 8B přímo v křemíku a podle měření výrobce generuje 17 000 tokenů za…

  3. Infrastruktura

    Nová datová centra v Texasu se nepřipojí k síti, dokud neprojdou auditem

    Guvernér Greg Abbott nařídil 3. srpna texaské komisi pro veřejné služby a provozovateli sítě ERCOT prověřit všechna datová centra ve frontě na připojení. Projekt, který…

  4. Infrastruktura

    Nové úložiště ani rejstříky se v Milvusu 3.0 ve výchozím nastavení nezapnou

    Vektorová databáze Milvus dostala 29. července 2026 značku 3.0.0. Umí nově postavit rejstřík nad daty, která zůstanou ležet v objektovém úložišti, a má přepsaný řídký…