Safetensors, CKPT, ONNX, GGUF ir kiti pagrindiniai dirbtinio intelekto modelių formatai [2025 m.]

Kategorijos AI/ML, Open Source Pažymėta , , , , ,
Save and Share:

Dirbtinio intelekto ir mašininio mokymosi plėtra sukūrė didelį poreikį rasti efektyvių, saugių ir su skirtingomis sistemomis suderinamų modelių saugojimo ir platinimo būdų. Kadangi modeliai tampa vis sudėtingesni ir naudojami įvairesnėse srityse, serializavimo formato pasirinkimas yra vienas svarbiausių sprendimų. Šis pasirinkimas daro įtaką našumui, išteklių naudojimui ir DI sistemų saugumui.

Šioje ataskaitoje nagrinėjami pagrindiniai modelių serializavimo formatai, įskaitant „Safetensors“, CKPT, ONNX ir GGUF. Joje pabrėžiamos jų unikalios savybės, įprasti naudojimo būdai ir pateikiamas jų tarpusavio palyginimas.

1. Įvadas į modelių serializavimą DI ir mašininio mokymosi srityje

Modelio serializavimas – tai apmokyto mašininio mokymosi modelio išsaugojimo į failą procesas. Šį failą vėliau galima saugoti, bendrinti ar įkelti pakartotinai, pavyzdžiui, norint atlikti prognozes, tęsti mokymą ar atlikti analizę. Ši galimybė yra būtina visame DI ir mašininio mokymosi gyvavimo cikle – nuo tyrimų ir kūrimo iki didelio masto diegimo.

Modelių formatų svarba DI ir mašininio mokymosi gyvavimo cikle

Modelių išsaugojimas standartiniu formatu yra labai svarbus dėl kelių priežasčių:

  • Atkuriamumas: leidžia tiksliai atkartoti ir patvirtinti mokslinių tyrimų eksperimentus.
  • Bendradarbiavimas: standartiniai formatai leidžia komandoms lengvai dalytis modeliais, dirbti kartu ir integruoti modelius į didesnes sistemas.
  • Diegimas: serializavimas paverčia apmokytą modelį nešiojamuoju failu, kurį galima įkelti ir paleisti įvairiose aplinkose – nuo debesijos serverių iki krašto įrenginių.
  • Perkeltinis mokymasis: leidžia naudoti iš anksto apmokytus modelius kaip pagrindą naujoms užduotims, taip sutaupant daug mokymo laiko ir duomenų.

Šiuolaikinių formatų sprendžiamų iššūkių apžvalga

Tobulėjant mašininiam mokymuisi, šiuolaikiniai serializavimo formatai buvo sukurti siekiant išspręsti keletą pagrindinių iššūkių:

  • Saugumas: didelį susirūpinimą kelia saugumo rizika, susijusi su tradiciniais metodais, ypač tais, kurie naudoja „Python“ modulį „pickle“. Šie metodai gali leisti vykdyti kenkėjišką kodą įkeliant modelį, o tai sukelia didelę saugumo grėsmę, jei modelis gaunamas iš nepatikimo šaltinio.
  • Našumas: šiandieniniams dideliems ir sudėtingiems modeliams reikalingas labai greitas įkėlimas ir efektyvus atminties valdymas. Tai ypač svarbu įrenginiams su ribotais ištekliais, pavyzdžiui, mobiliesiems telefonams, ir programoms, kurioms reikalingas momentinis atsakas.
  • Nešiojamumas ir sąveikumas: mašininio mokymosi pasaulyje naudojama daug skirtingų sistemų (angl. frameworks), pavyzdžiui, „PyTorch“, „TensorFlow“ ir JAX. Reikalingi tokie formatai, kurie leistų modeliams lengvai judėti tarp šių sistemų ir veikti su skirtinga aparatine įranga (GPU, TPU) be didelių pakeitimų.

Pastaraisiais metais DI bendruomenė perėjo prie efektyvesnių ir saugesnių formatų, tokių kaip GGUF ir „Safetensors“, o tai atspindi bendras pastangas spręsti šias problemas.

Ankstyvieji ML modelių išsaugojimo metodai, pavyzdžiui, „PyTorch“ naudojamas „Python pickle“ modulis .pt ir .pth failams, buvo pasirinkti dėl paprasto naudojimo. Jie galėjo lengvai išsaugoti sudėtingus „Python“ objektus, įskaitant tiek modelio architektūrą, tiek jo mokymo būseną (pvz., optimizavimo priemonę). Nors tai buvo patogu atliekant tyrimus „Python“ aplinkoje, tai sukūrė didelę saugumo spragą. „Pickle“ modulis sukurtas taip, kad įkėlimo proceso metu galėtų vykdyti bet kokį faile įdėtą kodą. Tai reiškia, kad įkėlus iš pažiūros nekenksmingą modelį iš nepatikimo šaltinio, galima pažeisti visą sistemą.

Tokių formatų kaip „Safetensors“ sukūrimas, kartu su augančiu ONNX ir GGUF naudojimu, yra tiesioginis atsakas į šią saugumo riziką, taip pat į poreikį didesniam našumui ir nešiojamumui. Pavyzdžiui, „Safetensors“ buvo sukurtas specialiai tam, kad būtų išvengta kenkėjiško kodo vykdymo. Tai rodo, kad mašininio mokymosi sričiai bręstant ir DI pereinant nuo tyrimų prie realių pritaikymų, saugumas ir efektyvumas nebėra antraeiliai dalykai, o tampa pagrindiniais principais kuriant naujus formatus. Šis pokytis reiškia būtiną perėjimą nuo į tyrimus orientuoto lankstumo prie gamybai skirto saugumo ir patikimumo, ištaisant senesnių, labiau atlaidžių metodų „techninę skolą“.

Konkrečiai sistemai pritaikyti formatai, tokie kaip .pt/.pth „PyTorch“ ir .ckpt/.h5 „TensorFlow“/„Keras“, yra glaudžiai integruoti su savo sistemomis. Nors tai daro juos efektyvius vienoje ekosistemoje, tai sukelia didelių sąveikumo problemų. Vienoje sistemoje apmokytas modelis negali būti lengvai naudojamas kitoje be sudėtingų konvertavimo procesų ar atskirų sistemų palaikymo kiekvienai iš jų. Tai lemia nesusijusias kūrimo ir diegimo eigas.

„Open Neural Network Exchange“ (ONNX) formatas buvo sukurtas siekiant panaikinti šiuos barjerus. Jis suteikia „tarp platforminį“ ir „nuo tiekėjo nepriklausomą“ standartą modeliams. Tai pasiekiama apibrėžiant modelio struktūrą (jo skaičiavimo grafiką) abstrakčiu būdu, nepriklausomu nuo jokios konkrečios sistemos. Panašiai ir GGUF, nors iš pradžių sukurtas „llama.cpp“ projektui, taip pat siekia pagerinti didžiųjų kalbos modelių (LLM) suderinamumą tarp skirtingų platformų.

Šiandieninė formatų įvairovė atspindi pagrindinę įtampą ML pramonėje: norą turėti konkrečiai sistemai būdingas funkcijas kūrimo metu (pvz., „PyTorch“ dinaminis grafikas tyrimų lankstumui) ir poreikį universalaus, efektyvaus bei saugaus diegimo. Ši įtampa reiškia, kad ir toliau egzistuos keli formatai, todėl konvertavimo įrankiai ir pažangūs MLOps procesai taps vis svarbesni siekiant sujungti modelių kūrimą su diegimu. Skirtingi formatai ir toliau bus naudojami konkretiems ML gyvavimo ciklo etapams, atsižvelgiant į jų unikalias stiprybes.

2. „Safetensors“ formato supratimas

„Safetensors“ yra didelis žingsnis į priekį modelių serializavimo srityje, sukurtas specialiai siekiant išspręsti tradicinių modelių saugojimo metodų saugumo ir efektyvumo problemas.

Apibrėžimas ir pagrindiniai projektavimo principai

„Safetensors“ yra modernus, saugus ir greitas giluminio mokymosi modelių serializavimo formatas, sukurtas „Hugging Face“. Jo pagrindinis tikslas – suteikti saugų būdą saugoti ir dalytis tensoriais – daugiamačiais masyvais, kurie yra pagrindiniai mašininio mokymosi duomenų elementai. Formatas sukurtas taip, kad būtų saugesnis ir greitesnis už senesnius formatus, tokius kaip „pickle“.

Pagrindinis „Safetensors“ principas yra griežtas modelio svorių (tensorių) atskyrimas nuo bet kokio vykdomojo kodo. Ši konstrukcija tiesiogiai sprendžia saugumo spragas, aptinkamas senesniuose serializavimo metoduose.

Pagrindinės savybės

  • Įkėlimas be kopijavimo ir atidėtasis įkėlimas: pagrindinis „Safetensors“ našumo veiksnys yra jo „įkėlimo be kopijavimo“ (zero-copy) galimybė. Tai leidžia modelio duomenis susieti tiesiogiai iš disko į atmintį, nekuriant papildomų kopijų, o tai taupo atmintį ir pagreitina įkėlimą. Jis taip pat palaiko „atidėtąjį įkėlimą“ (lazy loading), o tai reiškia, kad į RAM įkeliamos tik būtinos didelio modelio dalys, kai jų prireikia. Tai labai naudinga dirbant su itin dideliais modeliais ar sistemomis, turinčiomis ribotus atminties išteklius.
  • Struktūrizuotas metaduomenų valdymas: kiekviename „Safetensors“ faile yra atskira metaduomenų sekcija JSON formatu. Šioje sekcijoje pateikiamas visų modelyje esančių tensorių sąrašas su tokia informacija kaip jų forma, duomenų tipas ir pavadinimas. Metaduomenys nurodo, kur faile saugomi patys tensorių duomenys, o tai pagerina ir skaitomumą, ir saugumą.
  • Išskirtinai tensorių duomenų saugojimas: svarbiausia „Safetensors“ saugumo savybė yra ta, kad jis sukurtas saugoti „tik neapdorotus tensorių duomenis ir susijusius metaduomenis“. Dėl savo architektūros jis „neleidžia serializuoti savavališko „Python“ kodo“. Šis esminis projektavimo sprendimas pašalina riziką, kad įkeliant modelį bus įvykdytas kenkėjiškas kodas.
  • Kvantavimo palaikymas: „Safetensors“ gali dirbti su kvantuotais tensoriais, kas padeda sumažinti modelių dydį ir atminties naudojimą. Tačiau jo kvantavimo palaikymas „nėra toks lankstus kaip GGUF“, nes priklauso nuo „PyTorch“ sistemos teikiamų galimybių.

Pagrindiniai privalumai

  • Padidintas saugumas (savavališko kodo vykdymo rizikos mažinimas): tai didžiausias „Safetensors“ privalumas. Dėl savo konstrukcijos jis visiškai neleidžia faile išsaugoti „Python“ kodo. Tai pašalina didžiausią saugumo riziką, esančią „pickle“ pagrįstuose formatuose: kenkėjiško kodo vykdymą įkeliant modelį. Dėl to „Safetensors“ yra geriausias pasirinkimas dalytis ir naudoti modelius iš viešų ar nepatikimų šaltinių. Formatas taip pat apima kitas saugumo funkcijas, tokias kaip „pažangūs šifravimo metodai“ ir prieigos kontrolė, siekiant išvengti duomenų klastojimo.
  • Našumo optimizavimas: įkėlimas be kopijavimo ir atidėtasis įkėlimas lemia „greitesnį įkėlimo laiką ir mažesnį atminties naudojimą“. Palyginamieji testai rodo, kad jis yra daug „greitesnis“ už „pickle“ ir gali būti „76,6 karto greitesnis naudojant CPU ir 2 kartus greitesnis naudojant GPU, palyginti su tradiciniu „PyTorch“ saugojimo metodu“.
  • Nešiojamumas: formatas sukurtas taip, kad būtų nešiojamas, t. y. veiktų skirtingose programavimo kalbose. Tai palengvina modelių bendrinimą ir naudojimą įvairiose programinės įrangos sistemose.
  • Sklandi integracija: „Safetensors“ pasižymi „sklandžia integracija su esamomis mašininio mokymosi sistemomis ir bibliotekomis“. Tai leidžia kūrėjams lengvai pritaikyti šį saugesnį formatą, neatliekant didelių pakeitimų savo dabartinėse darbo eigose.

Palyginimas su tradiciniu serializavimu (pvz., „pickle“)

„Python“ modulis „pickle“, naudojamas „PyTorch“ .pt ir .pth failams, iš prigimties yra nesaugus. Jis leidžia bet kokį kodą paslėpti serializuotame faile ir automatiškai jį įvykdyti, kai failas įkeliamas. Tai gerai žinoma ir rimta saugumo spraga, ypač naudojant modelius, atsisiųstus iš viešų svetainių. Nors įrankiai, tokie kaip picklescan, gali aptikti kai kuriuos kenkėjiškus šablonus, jie nėra patikimi ir negali garantuoti saugumo.

„Safetensors“ buvo sukurtas specialiai šiai saugumo problemai išspręsti. Leidžiant faile saugoti tik neapdorotus tensorių duomenis ir struktūrizuotus metaduomenis, pašalinama galimybė vykdyti kenkėjišką kodą. Be saugumo, „Safetensors“ taip pat siūlo daug geresnį našumą. Jo architektūra, pritaikyta atminties susiejimui ir atidėtajam įkėlimui, lemia žymiai greitesnį įkėlimą ir efektyvesnį atminties naudojimą, palyginti su „pickle“, kuris paprastai įkelia visą modelį į atmintį iš karto.

„Python pickle“ saugumo spraga reiškia, kad atsisiunčiant .pt ar .pth failą iš nepatikimo šaltinio, atsisiunčiami ne tik duomenys; tai prilygsta potencialiai kenksmingos programos paleidimui. Yra žinoma, kad „nėra 100 % patikimo sprendimo, kaip patikrinti „pickle“ failo saugumą jo nevykdant“. Tai perkelia failo saugumo patikrinimo naštą vartotojui, o tai yra sudėtinga ir nepatikima.

„Safetensors“ keičia šią dinamiką, perprojektuodamas patį formatą taip, kad užkirstų kelią kenksmingo kodo įtraukimui iš pat pradžių. Jis perkelia saugumo atsakomybę nuo sudėtingo vartotojo patikrinimo proceso prie formatui būdingo saugumo. Tai žymi didelį posūkį atvirojo kodo DI bendruomenėje nuo „patikrink, tada pasitikėk“ požiūrio prie „pasitikėjimo dėl pačios architektūros“ modelio. Šis pokytis pripažįsta, kad beveik neįmanoma nuskaityti ir aptikti visų įmanomų grėsmių sudėtinguose failuose. Blokuodamas atakos vektorių (savavališko kodo vykdymą), „Safetensors“ leidžia saugiau plačiai dalytis modeliais, skatina bendradarbiavimą ir palengvina iš anksto apmokytų modelių naudojimą daugiau žmonių. Šis „pasitikėjimo dėl pačios architektūros“ principas yra būtinas visos DI ekosistemos augimui ir saugumui.

Nors „Safetensors“ buvo sukurtas daugiausia dėl saugumo priežasčių (siekiant ištaisyti „pickle“ pažeidžiamumus), jis taip pat suteikia didelių našumo privalumų, tokių kaip greitesnis įkėlimas, mažesnis atminties naudojimas ir operacijos be kopijavimo. Šie našumo pranašumai nėra tik šalutinis poveikis; jie yra tiesioginis optimizuotos „Safetensors“ konstrukcijos, kuri naudoja atminties susiejimą ir atidėtąjį įkėlimą efektyviam duomenų valdymui, rezultatas. Dėl to jis natūraliai yra efektyvesnis dideliems modeliams.

Šis padidinto saugumo ir reikšmingų našumo patobulinimų derinys buvo pagrindinis veiksnys, lėmęs jo platų pritaikymą. Jei „Safetensors“ būtų siūlęs tik geresnį saugumą, jo pritaikymas galėjo būti lėtesnis, ypač tarp vartotojų, kurie nėra tiesiogiai susikoncentravę į saugumą. Tačiau aiškūs ir išmatuojami našumo privalumai suteikia tvirtą priežastį visiems pereiti, pagreitinant jo integraciją į pagrindines platformas, tokias kaip „Hugging Face“. Tai rodo, kad DI inžinerijoje technologija dažnai turi pasiūlyti tiek saugumo, tiek našumo pranašumų, kad būtų greitai ir plačiai priimta pramonėje.

3. Pagrindinių modelių formatų apžvalga

Be „Safetensors“, mašininio mokymosi pasaulyje yra svarbūs ir keli kiti formatai, kiekvienas turintis savo ypatybes ir naudojimo atvejus.

3.1. CKPT (tarpiniai išsaugojimai)

DI tarpinis išsaugojimas (angl. checkpoint) nėra vieno tipo failas, o veikiau modelio būsenos momentinė kopija, išsaugota tam tikru mokymo etapu. Tarpiniai išsaugojimai yra būtini norint išsaugoti pažangą ilgų mokymo procesų metu.

Charakteristikos ir tipiniai naudojimo atvejai

Tarpiniame išsaugojime paprastai saugomi išmokti modelio parametrai, pavyzdžiui, jo svoriai ir poslinkiai. Jame taip pat gali būti saugoma kita svarbi informacija, reikalinga mokymui atnaujinti, pavyzdžiui, optimizavimo priemonės būsena, dabartinis epochos numeris ir mokymosi greičio grafikas. Tarpinių išsaugojimų failų plėtiniai skiriasi priklausomai nuo sistemos. „PyTorch“ atveju tai dažniausiai yra .pt arba .pth, o „TensorFlow“/„Keras“ atveju – .ckpt arba .h5.

Pagrindiniai CKPT failų privalumai:

  • Atkuriamumas: jie užtikrina, kad modelis veiks nuosekliai, kai bus įkeltas iš naujo, o tai yra gyvybiškai svarbu norint patvirtinti tyrimus ir palaikyti patikimą našumą.
  • Bendradarbiavimas: jais lengva dalytis, leidžiant kūrėjams atkartoti rezultatus ar remtis esamu darbu.
  • Lankstumas: „PyTorch“ .pt/.pth formatai yra ypač lankstūs, todėl paprasta išsaugoti ir įkelti modelius tyrimų tikslais.

Įprasti CKPT failų naudojimo atvejai:

  • Mokymo atnaujinimas: nutraukto mokymo seanso tęsimas, kas sutaupo daug laiko ir skaičiavimo išteklių.
  • Tikslusis derinimas: iš anksto apmokyto modelio naudojimas kaip atspirties taškas mokymui su nauju, konkretesniu duomenų rinkiniu.
  • Modelio vertinimas: modelio našumo tikrinimas skirtinguose mokymo etapuose, nereikalaujant jo pertrainuoti.
  • Išvadų darymas: visiškai apmokyto modelio įkėlimas į gamybinę sistemą prognozėms atlikti.
  • Tyrimai ir eksperimentavimas: modelio evoliucijos analizė laikui bėgant ir sistemingas jo parametrų derinimas.
  • Perkeltinis mokymasis: tarnauja kaip galingas atspirties taškas susijusioms užduotims, kas sumažina mokymo laiką ir duomenų poreikį.
  • Atsarginė kopija: veikia kaip atsarginė kopija, leidžianti atnaujinti darbą po gedimo ilgo mokymo proceso metu.

Saugumo aspektai

Didžiausia saugumo rizika, susijusi su CKPT failais, ypač „PyTorch“ .pt ir .pth formatais, kyla dėl jų priklausomybės nuo „Python“ modulio „pickle“. Tai reiškia, kad šie failai gali būti sukurti taip, kad juose būtų kenkėjiško „Python“ kodo, kuris įvykdomas juos įkeliant (jei naudojama torch.load funkcija be weights_only=True nustatymo). Šis pažeidžiamumas (CWE-502: nepatikimų duomenų deserializavimas) gali turėti rimtų pasekmių, tokių kaip duomenų vagystė, pakeistas modelio elgesys ar net visiškas sistemos perėmimas.

Pramonė pripažino šią riziką, ir „Safetensors“ tapo saugesne alternatyva. Kaip pažymėta, „dauguma „Stable Diffusion“ DI tarpinių išsaugojimų yra saugomi tokiais formatais kaip .ckpt ar .safetensors... .safetensors yra saugesnė alternatyva, sukurta siekiant išvengti kenkėjiško kodo vykdymo“. Tai rodo aiškią tendenciją pereiti prie saugesnių formatų dalijantis modeliais.

CKPT, ypač „PyTorch“ .pt/.pth formate, yra žinomi kaip „labai lankstūs“. Šis lankstumas leidžia jiems išsaugoti ne tik modelio svorius, bet ir optimizavimo priemonės būseną ir netgi nestandartines „Python“ klases, kas yra labai naudinga norint tiksliai atnaujinti mokymą.

Tačiau būtent šis lankstumas ir sukuria saugumo spragą. Kadangi formatas gali išsaugoti bet kokį „Python“ objektą, užpuolikas gali paslėpti kenkėjišką kodą modelio faile. Kai failas įkeliamas be tinkamų atsargumo priemonių, tas kodas įvykdomas. Tai iliustruoja fundamentalų kompromisą sistemų projektavime: didesnis lankstumas dažnai lemia didesnį atakos paviršių ir didesnes saugumo rizikas.

Pramonės sprendimas yra pritaikyti tokius formatus kaip „Safetensors“ modelių platinimui, net jei lankstesni .pt/.pth formatai vis dar naudojami mokymui kontroliuojamose aplinkose. Tai rodo augantį supratimą, kad skirtingiems ML gyvavimo ciklo etapams reikalingi skirtingi saugumo lygiai. Galimybė išsaugoti visą mokymo būseną geriausiai tinka patikimoje kūrimo aplinkoje, o dalijimuisi ir diegimui reikalingi formatai su įmontuotomis saugumo garantijomis.

3.2. ONNX („Open Neural Network Exchange“)

ONNX, reiškiantis „Open Neural Network Exchange“, yra atviro standarto formatas mašininio mokymosi modeliams. Jis sukurtas tam, kad modeliai galėtų veikti su skirtingomis giluminio mokymosi sistemomis.

Charakteristikos ir pagrindiniai naudojimo atvejai

ONNX faile yra visa modelio struktūra, įskaitant jo operacijų seką (skaičiavimo grafiką), išmoktus svorius ir kitus metaduomenis. Didžiausia ONNX stiprybė yra ta, kad jis veikia kaip universalus vertėjas. Modeliai, apmokyti tokiose sistemose kaip „PyTorch“, „TensorFlow“ ar „scikit-learn“, gali būti konvertuoti į ONNX formatą, taip įgyvendinant „apmokyk vieną kartą, diek bet kur“ požiūrį.

Skirtingai nuo formatų, kurie saugo tik modelio svorius (pvz., „Safetensors“ ar GGUF), ONNX apima modelio skaičiavimo grafiką. Ši grafiku pagrįsta struktūra suteikia „daugiau lankstumo konvertuojant modelius tarp skirtingų sistemų“. ONNX siūlo puikų nešiojamumą tarp daugelio platformų, įrenginių ir aparatinės įrangos greitintuvų (CPU, GPU, DI lustų). Modeliai saugomi „Protobuf“ formatu, kuris yra efektyvus, nuo platformos nepriklausomas būdas saugoti struktūrizuotus duomenis.

Pagrindiniai ONNX naudojimo atvejai:

  • Diegimas tarp skirtingų sistemų: modelio paleidimas kitoje sistemoje ar aplinkoje, nei jis buvo apmokytas.
  • Didelio našumo išvadų darymas: „ONNX Runtime“ yra išvadų darymo variklis, kuris automatiškai optimizuoja modelius konkrečiai aparatinei įrangai, dažnai pasiekdamas didesnį našumą.
  • Diegimas krašto ir mobiliuosiuose įrenginiuose: dėl mažo pėdsako ir optimizuoto vykdymo laiko ONNX yra geras pasirinkimas modeliams paleisti įrenginiuose su ribotais ištekliais.
  • Gamybinės sistemos: dėl savo patikimumo ir nešiojamumo jis yra populiarus diegiant modelius reikliose gamybinėse aplinkose.

Saugumo aspektai

Subtili, bet rimta saugumo rizika, susijusi su ONNX modeliais, yra galimybė įdiegti architektūrines „užpakalines duris“ (angl. backdoors). Užpuolikas gali pakeisti modelio skaičiavimo grafiką, įtraukdamas paslėptą kelią, kuris suaktyvinamas tik esant specifinėms įvestims. Suaktyvinus šias „užpakalines duris“, modelis gali generuoti kenkėjiškas ar netikėtas išvestis, tuo pačiu normaliai veikdamas su standartinėmis įvestimis, todėl tai sunku aptikti. Kitos rizikos apima modelio inversijos atakas (jautrių mokymo duomenų išgavimas) ir priešiškas atakas (kenkėjiškų įvesčių naudojimas modeliui apgauti).

Siekiant sumažinti šias grėsmes, rekomenduojama laikytis kelių praktikų:

  • Skaitmeniniu būdu pasirašyti ONNX modelius, siekiant užtikrinti, kad jie nebuvo pakeisti.
  • Diegti modelius izoliuotose aplinkose, pavyzdžiui, „Docker“ konteineriuose, su stipria tinklo apsauga.
  • Naudoti stebėjimo įrankius modelio elgesiui sekti ir anomalijoms aptikti.
  • Laikytis bendrųjų saugumo geriausių praktikų, tokių kaip įvesčių valymas ir programinės įrangos atnaujinimas.

ONNX yra apskritai saugesnis už „pickle“ pagrįstus formatus, nes jis nevykdo savavališko kodo įkeliant. Tačiau, jei ONNX modelis naudoja išoriškai įdiegtus nestandartinius sluoksnius, tie sluoksniai gali potencialiai turėti kenkėjiško „Python“ kodo, jei nebus valdomi atsargiai.

Trūkumai

Nors ONNX palaiko kvantuotus modelius, jis „nepalaiko kvantuotų tensorių taip sklandžiai kaip GGUF“. Jis suskaido juos į atskirus sveikųjų skaičių ir mastelio koeficiento tensorius, kas „gali lemti kokybės sumažėjimą“. Konvertuoti modelius su sudėtingais ar nestandartiniais sluoksniais, kurie nėra standartiniai ONNX, taip pat gali būti sudėtinga ir gali reikalauti specializuoto darbo, kuris galėtų sulėtinti našumą.

Tradiciniai formatai, pagrįsti „Python pickle“ (pvz., .pt failai), išsaugo „Python“ objektus, kurie gali apimti vykdomąjį kodą. Tai traktuoja modelį kaip programą. Priešingai, ONNX sutelkia dėmesį į modelio „skaičiavimo grafiko“ išsaugojimą – tai yra abstraktesnis jo operacijų ir duomenų srauto vaizdavimas, o ne konkreti kodo implementacija.

Būtent šis į grafiką orientuotas požiūris suteikia ONNX puikų nešiojamumą tarp sistemų ir leidžia jį optimizuoti skirtingai aparatinei įrangai. Apibrėžiant modelio logiką aukštesniu lygmeniu, jis tampa nepriklausomas nuo sistemos, kurioje buvo apmokytas. Tai yra reikšmingas konceptualus poslinkis, pereinant nuo konkrečiai sistemai būdingos implementacijos prie nešiojamo skaičiavimo vaizdavimo. Nors tai labai pagerina diegimo lankstumą, tai taip pat sukuria naujų saugumo problemų, tokių kaip architektūrinės „užpakalinės durys“, kurioms reikalingos kitokios saugumo strategijos nei tos, kurios naudojamos „pickle“ pagrįstiems formatams.

3.3. GGUF („GPT-Generated Unified Format“)

GGUF („GPT-Generated Unified Format“) yra failų formatas, sukurtas specialiai efektyviam didžiųjų kalbos modelių (LLM) saugojimui ir paleidimui. Tai yra patobulinta jo pirmtako, GGML, versija, kurios tikslas – palengvinti LLM naudojimą, ypač asmeniniuose kompiuteriuose.

Charakteristikos ir pagrindiniai naudojimo atvejai

GGUF yra sukurtas taip, kad LLM būtų mažesni ir daug greičiau įkeliami. Tai yra labai svarbu norint paleisti modelius vietoje, kur saugyklos vieta ir RAM dažnai yra ribotos. Formatas naudoja „pažangius glaudinimo metodus“, kad tai pasiektų. Jis taip pat suteikia standartinį būdą supakuoti modelio svorius, architektūrą ir metaduomenis, užtikrinant, kad jis veiktų nuosekliai su skirtinga programine įranga, ypač su išvadų darymo varikliais, pagrįstais „llama.cpp“.

Pagrindinė GGUF savybė yra puikus kvantavimo palaikymas. Kvantavimas sumažina modelio svorių skaitmeninį tikslumą (pvz., nuo 16 bitų iki 4 bitų skaičių), kas drastiškai sumažina failo dydį ir skaičiavimus, reikalingus jam paleisti. GGUF modeliai yra prieinami įvairiais kvantavimo lygiais (nuo Q2 iki Q8), siūlantys įvairius kompromisus tarp dydžio ir kokybės.

  • Žemesni kvantavimo lygiai (pvz., Q2 ar Q3) sukuria labai mažus failus, kurie gali veikti su mažiau RAM turinčia aparatine įranga, tačiau modelio kokybė gali šiek tiek sumažėti.
  • Aukštesni kvantavimo lygiai (pvz., Q6 ar Q8) išlaiko geresnę kokybę, bet reikalauja daugiau saugyklos ir RAM.

Pagrindiniai GGUF naudojimo atvejai:

  • Vietinis LLM diegimas: įrankiai, tokie kaip „Ollama“, naudoja GGUF, kad vartotojams būtų lengva paleisti galingus LLM savo kompiuteriuose.
  • Atsijungus veikiantys DI asistentai: daugelis programų naudoja GGUF modelius, kad pasiūlytų vietines, privačias alternatyvas debesijos pagrindu veikiantiems DI įrankiams.
  • Pagalba rašant kodą: IDE ir kodo redaktoriai pradeda naudoti GGUF modelius išmaniam kodo užbaigimui.
  • Vietiniai pokalbių robotai: GGUF modeliai dažnai naudojami privačioms ir greitai reaguojančioms pokalbių DI sistemoms.
  • DI tyrimai: dėl savo lankstumo ir kvantavimo palaikymo jis yra populiarus tarp tyrėjų, eksperimentuojančių su LLM prieinamoje aparatinėje įrangoje.

Saugumo aspektai

Priešingai populiariam įsitikinimui, pagrindinė GGML biblioteka (kuria remiasi GGUF) turėjo dokumentuotų pažeidžiamumų, susijusių su „nepakankamu įvesties failo patikrinimu“. Šie trūkumai gali sukelti „potencialiai išnaudojamus atminties pažeidimo pažeidžiamumus nagrinėjimo metu“. Buvo nustatytos konkrečios saugumo problemos, kai nepatikrinta vartotojo įvestis galėjo sukelti krūvos perpildymą (angl. heap overflow), potencialiai leisdama užpuolikui vykdyti kenkėjišką kodą.

Egzistuoja paplitusi klaidinga nuomonė, kad GGUF failas „negali turėti kodo“ ir yra „tik modelio failas“. Tačiau „Databricks“ saugumo ataskaita parodė, kad nors pačiame GGUF faile nėra vykdomojo Python kodo, specialiai sukurtas failas gali išnaudoti nagrinėtojo (programinės įrangos, kuri skaito failą) trūkumus, sukelti atminties pažeidimą ir pasiekti kodo vykdymą.

Siekiant sumažinti šias rizikas, geriausia:

  • Naudoti modelius ir įrankius iš gerai žinomų, patikimų šaltinių (pvz., „Koboldcpp“).
  • Paleisti LLM izoliuotose aplinkose (pvz., „Docker“ konteineriuose).
  • Labai jautrioms užduotims apsvarstyti galimybę naudoti dedikuotą mašiną be interneto prieigos.

Trūkumai

Didelis GGUF trūkumas yra tai, kad dauguma modelių pirmiausia kuriami kitose sistemose (pvz., „PyTorch“) ir turi būti konvertuojami į GGUF formatą. Šis konvertavimo procesas ne visada yra lengvas, o kai kurie modeliai gali būti nevisiškai palaikomi su GGUF suderinamais įrankiais. Be to, modifikuoti ar tiksliai derinti modelį, kai jis jau yra GGUF formate, paprastai „nėra paprasta“.

Nors GGUF yra sukurtas greitam įkėlimui ir efektyviam VRAM naudojimui, faktinis išvadų darymo greitis (kaip greitai modelis generuoja atsakymus) kartais gali būti lėtesnis nei nekvantuotų modelių. Tai gali nutikti su žemesniais kvantavimo lygiais dėl papildomo darbo, reikalingo dekvantuoti svorius išvadų darymo metu. Pagrindinis GGUF našumo privalumas yra tai, kad jis leidžia dideliems modeliams veikti vartotojų aparatinėje įrangoje, taupant VRAM, o ne tai, kad jis būtinai juos pagreitina.

Išskirtinė GGUF savybė yra jo gili integracija su kvantavimu, leidžianti galingiems LLM veikti su „vartotojų klasės aparatine įranga“, turinčia ribotą VRAM. Tai padeda demokratizuoti prieigą prie DI. Tačiau šis efektyvumas reikalauja kompromisų. Nors kvantavimas sumažina modelių dydį, žemesni lygiai gali šiek tiek sumažinti modelio kokybę. Taip pat išvadų darymo greitis kartais gali būti lėtesnis nei su nekvantuotais modeliais, ypač jei nekvantuota versija telpa į VRAM.

„Greičio“ privalumas GGUF dažniausiai reiškia greitesnį įkėlimą ir galimybę paleisti didesnį modelį su ribota aparatine įranga, o ne gryną našumą. GGUF puikiai atspindi „DI demokratizavimo“ tendenciją, padarydamas pažangius modelius prieinamus daugiau žmonių. Tai reikalauja, kad vartotojai subalansuotų modelio kokybę su savo aparatinės įrangos galimybėmis. Kelių kvantavimo lygių prieinamumas leidžia vartotojams pritaikyti modelius prie savo konkrečių poreikių, kas yra pagrindinė formato populiarumo vietinėje DI bendruomenėje priežastis.

4. Formatų palyginamoji analizė

Tinkamo modelio serializavimo formato pasirinkimas yra strateginis sprendimas, priklausantis nuo įvairių veiksnių, tokių kaip saugumas, našumas, išteklių efektyvumas, sąveikumas ir konkretus taikymo kontekstas, pusiausvyros. Toliau pateiktoje lentelėje pateikiamas „Safetensors“, CKPT, ONNX ir GGUF palyginimas pagal šiuos svarbiausius aspektus.

Savybė / Formatas Safetensors CKPT (.pt/.pth) ONNX GGUF
Pagrindinė paskirtis Saugus, greitas tensorių saugojimas giluminio mokymosi modeliams Mokymo tarpiniai išsaugojimai, modelio parametrai, būsenos išsaugojimas Sąveikumas tarp sistemų, diegimas įvairioje aparatinėje įrangoje Efektyvus LLM saugojimas, optimizuotas vietinis išvadų darymas vartotojų aparatinėje įrangoje
Saugumo profilis Aukštas (nėra savavališko kodo vykdymo dėl pačios architektūros) Žemas (savavališko kodo vykdymas per „Pickle“ deserializavimą) Vidutinis (nėra savavališko kodo vykdymo, bet galimos architektūrinės „užpakalinės durys“) Vidutinis (pagrindinės bibliotekos pažeidžiamumai, bet pats failas nėra vykdomasis „Python“ kodas)
Įkėlimo greitis Labai greitas (įkėlimas be kopijavimo, atidėtasis įkėlimas) Įvairus (gali būti lėtesnis nei „Safetensors“ dėl pilno įkėlimo) Greitas (optimizuotas vykdymo laikas, grafiko optimizavimas) Greitas (mmap, efektyvus LLM)
Atminties naudojimas Efektyvus (atidėtasis įkėlimas, dalinis įkėlimas) Gali būti didelis (įkelia visą objektų grafiką) Efektyvus (vykdymo laiko optimizavimas) Labai efektyvus (kvantavimas, VRAM taupymas)
Vietos diske naudojimas Efektyvus (glaudinimas, tik tensoriai) Įvairus (gali būti didelis, apima visą būseną) Efektyvus („Protobuf“ formatas) Labai efektyvus (kvantavimas, pažangus glaudinimas)
Kvantavimo palaikymas Taip, bet mažiau lankstus nei GGUF (priklauso nuo „PyTorch“) Taip (priklauso nuo sistemos) Ribotas natyvus palaikymas (skaido tensorius) Tvirtas (keli lygiai, Q2-Q8, specializuoti variantai)
Nešiojamumas Aukštas (tarp skirtingų programavimo kalbų) Žemas (glaudžiai susietas su konkrečiomis sistemomis) Labai aukštas (tarp sistemų, tarp platformų, įvairi aparatinė įranga) Aukštas (ypač „llama.cpp“ ekosistemoje)
Pagrindinės taikymo sritys Saugus dalijimasis modeliais, numatytasis „Hugging Face“ formatas Mokymas, tikslusis derinimas, tyrimai, modelių išsaugojimas Gamybinis diegimas, mobilieji įrenginiai/krašto įrenginiai, sąveikumas Vietinis LLM išvadų darymas, vartotojų aparatinė įranga, pokalbių programos
Pagrindinis privalumas Saugumas dėl pačios architektūros, greitas įkėlimas, mažas atminties pėdsakas Mokymo būsenos išsaugojimas, detalus atkuriamumas Universalus diegimas, vykdymo laiko optimizavimas, nepriklausomybė nuo sistemos LLM efektyvumas vartotojų aparatinėje įrangoje, lankstus kvantavimas
Pagrindinis trūkumas Reikalingas JSON nagrinėtojas metaduomenims C++ Savavališko kodo vykdymo rizika, dideli failų dydžiai Sudėtingumas su nestandartiniais sluoksniais, ribotas natyvus kvantavimas Dažnai reikalingas konvertavimas, galimas išvadų darymo sulėtėjimas su žemesniais kvantavimo lygiais

5. Išvada

Mašininio mokymosi modelių formatų pasaulis nuolat keičiasi, skatinamas poreikio didesniam saugumui, našumui ir sąveikumui. Tradiciniai formatai, tokie kaip „pickle“ pagrįsti CKPT failai, buvo lankstūs tyrimams, tačiau kėlė rimtų saugumo rizikų, leisdami vykdyti savavališką kodą. Tai paskatino naujesnių, saugesnių formatų kūrimą ir pritaikymą.

„Safetensors“ yra pagrindinis šio pokyčio pavyzdys. Atskyrus duomenis nuo kodo ir naudojant efektyvius įkėlimo metodus, jis siūlo saugią ir didelio našumo alternatyvą dalytis giluminio mokymosi modeliais, ypač „Hugging Face“ ekosistemoje. Dvigubi privalumai – saugumas ir greitis – pavertė jį populiariu pasirinkimu šiuolaikinėse DI darbo eigose.

ONNX sprendžia didelę sistemų nesuderinamumo problemą. Pateikdamas modelius kaip abstrakčius skaičiavimo grafikus, jis leidžia juos diegti įvairioje aparatinėje ir programinėje įrangoje. Nors ONNX apsaugo nuo savavališko kodo vykdymo, matomo „pickle“ formate, jis turi savo saugumo problemų, tokių kaip architektūrinės „užpakalinės durys“, kurioms reikalingos kitokios apsaugos priemonės.

GGUF yra specializuotas sprendimas, skirtas dideliems kalbos modeliams paleisti vartotojų aparatinėje įrangoje. Jo galingos kvantavimo funkcijos dramatiškai sumažina modelio dydį ir atminties naudojimą, padarydamos galingus LLM prieinamus daugiau žmonių. Tačiau šis efektyvumas kartais gali lemti lėtesnį išvadų darymo greitį, o jo pagrindinės bibliotekos parodė pažeidžiamumų, dėl kurių vartotojai turi būti atsargūs.

Galų gale, geriausias formatas priklauso nuo konkretaus konteksto.

  • „Safetensors“ yra geriausias pasirinkimas saugiai ir efektyviai dalytis giluminio mokymosi modeliais.
  • ONNX idealiai tinka diegti modelius skirtingose sistemose ir aparatinėje įrangoje.
  • GGUF siūlo neprilygstamą efektyvumą paleidžiant didelius kalbos modelius vietiniuose, ribotų išteklių įrenginiuose.

Nors tradiciniai CKPT formatai vis dar naudingi saugant mokymo pažangą kontroliuojamose aplinkose, juos keičia saugesnės alternatyvos viešam platinimui. DI sričiai bręstant, tolesnis šių specializuotų formatų kūrimas bus būtinas siekiant didinti mašininio mokymosi galią ir pasiekiamumą.

Įrašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *