import{S as Da,i as Ia,s as Ba,e as t,k as m,w as v,t as r,M as Ta,c as l,d as i,m as d,a as n,x as g,h as p,b as f,G as a,g as o,y as z,q as $,o as w,B as j,v as La}from"../chunks/vendor-hf-doc-builder.js";import{T as Sa}from"../chunks/Tip-hf-doc-builder.js";import{I as aa}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as L}from"../chunks/CodeBlock-hf-doc-builder.js";function Oa(xe){let c,q;return{c(){c=t("p"),q=r("Nota che il modello creato casualmente \xE8 inizializzato con tensori \u201Cvuoti\u201D, che occupano spazio in memoria ma senza riempirlo (quindi i valori casuali sono quelli che si trovavano in questa porzione di memoria in un determinato momento). L\u2019inizializzazione casuale che segue la distribuzione appropriata per il tipo di modello/parametri istanziato (come la distribuzione normale per le istanze) \xE8 eseguito solo dopo il passaggio 3 sui pesi non inizializzati, per essere pi\xF9 rapido possibile!")},l(u){c=l(u,"P",{});var h=n(c);q=p(h,"Nota che il modello creato casualmente \xE8 inizializzato con tensori \u201Cvuoti\u201D, che occupano spazio in memoria ma senza riempirlo (quindi i valori casuali sono quelli che si trovavano in questa porzione di memoria in un determinato momento). L\u2019inizializzazione casuale che segue la distribuzione appropriata per il tipo di modello/parametri istanziato (come la distribuzione normale per le istanze) \xE8 eseguito solo dopo il passaggio 3 sui pesi non inizializzati, per essere pi\xF9 rapido possibile!"),h.forEach(i)},m(u,h){o(u,c,h),a(c,q)},d(u){u&&i(c)}}}function Na(xe){let c,q,u,h,re,S,ni,ne,pi,qe,X,mi,Ee,y,pe,di,ci,me,ui,fi,de,hi,Pe,E,_i,ce,vi,gi,Ae,P,Me,Y,zi,Ce,b,A,ue,O,$i,fe,wi,De,M,ji,he,yi,ki,Ie,C,bi,_e,xi,qi,Be,N,Te,D,Ei,ve,Pi,Ai,Le,R,Se,Z,Mi,Oe,G,Ne,k,Ci,ge,Di,Ii,ze,Bi,Ti,Re,H,Ge,ee,Li,He,ie,Si,Ue,U,Fe,ae,Oi,Qe,F,Je,I,Ni,$e,Ri,Gi,Ke,Q,Ve,_,Hi,we,Ui,Fi,je,Qi,Ji,ye,Ki,Vi,We,J,Xe,x,B,ke,K,Wi,be,Xi,Ye,se,Yi,Ze,V,Zi,oe,ea,ei;return S=new aa({}),P=new Sa({props:{$$slots:{default:[Oa]},$$scope:{ctx:xe}}}),O=new aa({}),N=new L({props:{code:`from transformers import AutoModel

model = AutoModel.from_pretrained("bert-base-cased")`,highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModel

model = AutoModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`}}),R=new L({props:{code:`import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    model.save_pretrained(tmp_dir)
    print(sorted(os.listdir(tmp_dir)))`,highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> os
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> tempfile

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> tempfile.TemporaryDirectory() <span class="hljs-keyword">as</span> tmp_dir:
<span class="hljs-meta">... </span>    model.save_pretrained(tmp_dir)
<span class="hljs-meta">... </span>    <span class="hljs-built_in">print</span>(<span class="hljs-built_in">sorted</span>(os.listdir(tmp_dir)))
[<span class="hljs-string">&#x27;config.json&#x27;</span>, <span class="hljs-string">&#x27;pytorch_model.bin&#x27;</span>]`}}),G=new L({props:{code:`with tempfile.TemporaryDirectory() as tmp_dir:
    model.save_pretrained(tmp_dir, max_shard_size="200MB")
    print(sorted(os.listdir(tmp_dir)))`,highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> tempfile.TemporaryDirectory() <span class="hljs-keyword">as</span> tmp_dir:
<span class="hljs-meta">... </span>    model.save_pretrained(tmp_dir, max_shard_size=<span class="hljs-string">&quot;200MB&quot;</span>)
<span class="hljs-meta">... </span>    <span class="hljs-built_in">print</span>(<span class="hljs-built_in">sorted</span>(os.listdir(tmp_dir)))
[<span class="hljs-string">&#x27;config.json&#x27;</span>, <span class="hljs-string">&#x27;pytorch_model-00001-of-00003.bin&#x27;</span>, <span class="hljs-string">&#x27;pytorch_model-00002-of-00003.bin&#x27;</span>, <span class="hljs-string">&#x27;pytorch_model-00003-of-00003.bin&#x27;</span>, <span class="hljs-string">&#x27;pytorch_model.bin.index.json&#x27;</span>]`}}),H=new L({props:{code:`with tempfile.TemporaryDirectory() as tmp_dir:
    model.save_pretrained(tmp_dir, max_shard_size="200MB")
    new_model = AutoModel.from_pretrained(tmp_dir)`,highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> tempfile.TemporaryDirectory() <span class="hljs-keyword">as</span> tmp_dir:
<span class="hljs-meta">... </span>    model.save_pretrained(tmp_dir, max_shard_size=<span class="hljs-string">&quot;200MB&quot;</span>)
<span class="hljs-meta">... </span>    new_model = AutoModel.from_pretrained(tmp_dir)`}}),U=new L({props:{code:`import json

with tempfile.TemporaryDirectory() as tmp_dir:
    model.save_pretrained(tmp_dir, max_shard_size="200MB")
    with open(os.path.join(tmp_dir, "pytorch_model.bin.index.json"), "r") as f:
        index = json.load(f)

print(index.keys())`,highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> json

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> tempfile.TemporaryDirectory() <span class="hljs-keyword">as</span> tmp_dir:
<span class="hljs-meta">... </span>    model.save_pretrained(tmp_dir, max_shard_size=<span class="hljs-string">&quot;200MB&quot;</span>)
<span class="hljs-meta">... </span>    <span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(os.path.join(tmp_dir, <span class="hljs-string">&quot;pytorch_model.bin.index.json&quot;</span>), <span class="hljs-string">&quot;r&quot;</span>) <span class="hljs-keyword">as</span> f:
<span class="hljs-meta">... </span>        index = json.load(f)

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(index.keys())
dict_keys([<span class="hljs-string">&#x27;metadata&#x27;</span>, <span class="hljs-string">&#x27;weight_map&#x27;</span>])`}}),F=new L({props:{code:'index["metadata"]',highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>index[<span class="hljs-string">&quot;metadata&quot;</span>]
{<span class="hljs-string">&#x27;total_size&#x27;</span>: <span class="hljs-number">433245184</span>}`}}),Q=new L({props:{code:'index["weight_map"]',highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>index[<span class="hljs-string">&quot;weight_map&quot;</span>]
{<span class="hljs-string">&#x27;embeddings.LayerNorm.bias&#x27;</span>: <span class="hljs-string">&#x27;pytorch_model-00001-of-00003.bin&#x27;</span>,
 <span class="hljs-string">&#x27;embeddings.LayerNorm.weight&#x27;</span>: <span class="hljs-string">&#x27;pytorch_model-00001-of-00003.bin&#x27;</span>,
 ...`}}),J=new L({props:{code:`from transformers.modeling_utils import load_sharded_checkpoint

with tempfile.TemporaryDirectory() as tmp_dir:
    model.save_pretrained(tmp_dir, max_shard_size="200MB")
    load_sharded_checkpoint(model, tmp_dir)`,highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers.modeling_utils <span class="hljs-keyword">import</span> load_sharded_checkpoint

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> tempfile.TemporaryDirectory() <span class="hljs-keyword">as</span> tmp_dir:
<span class="hljs-meta">... </span>    model.save_pretrained(tmp_dir, max_shard_size=<span class="hljs-string">&quot;200MB&quot;</span>)
<span class="hljs-meta">... </span>    load_sharded_checkpoint(model, tmp_dir)`}}),K=new aa({}),{c(){c=t("meta"),q=m(),u=t("h1"),h=t("a"),re=t("span"),v(S.$$.fragment),ni=m(),ne=t("span"),pi=r("Istanziare un big model"),qe=m(),X=t("p"),mi=r(`Quando vuoi utilizzare un modello preaddestrato (pretrained) molto grande, una sfida \xE8 minimizzare l\u2019uso della RAM. Il workflow classico
in PyTorch \xE8:`),Ee=m(),y=t("ol"),pe=t("li"),di=r("Crea il tuo modello con pesi casuali (random weights)."),ci=m(),me=t("li"),ui=r("Carica i tuoi pesi preaddestrati."),fi=m(),de=t("li"),hi=r("Inserisci i pesi preaddestrati nel tuo modello casuale."),Pe=m(),E=t("p"),_i=r("I passi 1 e 2 una versione completa del modello in memoria, in molti casi non \xE8 un problema, ma se il modello inizia a pesare diversi GigaBytes, queste due copie possono sturare la nostra RAM. Ancora peggio, se stai usando "),ce=t("code"),vi=r("torch.distributed"),gi=r(" per seguire l\u2019addestramento (training) in distribuito, ogni processo caricher\xE0 il modello preaddestrato e memorizzer\xE0 queste due copie nella RAM."),Ae=m(),v(P.$$.fragment),Me=m(),Y=t("p"),zi=r("In questa guida, esploreremo le soluzioni che Transformers offre per affrontare questo problema. C\u2019\xE8 da tenere in conto che questa \xE8 un\u2019area in cui si sta attualmente sviluppando, quindi le API spiegate qui possono variare velocemente in futuro."),Ce=m(),b=t("h2"),A=t("a"),ue=t("span"),v(O.$$.fragment),$i=m(),fe=t("span"),wi=r("Checkpoints condivisi"),De=m(),M=t("p"),ji=r("Dalla versione 4.18.0, i checkpoints dei modelli che occupano pi\xF9 di 10GB di spazio vengono automaticamente frammentati in pi\xF9 parti. Per quanto riguarda la possibilit\xE0 di avere un unico checkpoint quando si utilizza "),he=t("code"),yi=r("model.save_pretrained(save_dir)"),ki=r(", si hanno diversi checkpoint parziali (ognuno con dimensione < 10GB) e un  indice che mappa i nomi dei parametri ai file in cui sono memorizzati."),Ie=m(),C=t("p"),bi=r("Puoi controllare la dimensione massima dopo la frammentazione con il parametro "),_e=t("code"),xi=r("max_shard_size"),qi=r(", nel prossimo esempio, useremo modelli di dimensioni normali con frammenti di piccoli dimensioni: prendiamo un modello BERT classico."),Be=m(),v(N.$$.fragment),Te=m(),D=t("p"),Ei=r("Se tu salvi usando "),ve=t("code"),Pi=r("save_pretrained()"),Ai=r(", avrai una nuova cartella con due file: il config del modello e i suoi pesi:"),Le=m(),v(R.$$.fragment),Se=m(),Z=t("p"),Mi=r("Adesso usiamo una dimensione massima di frammentazione di 200MB:"),Oe=m(),v(G.$$.fragment),Ne=m(),k=t("p"),Ci=r("In aggiunta alla configurazione del modello, vediamo tre differenti file dei pesi, e un file "),ge=t("code"),Di=r("index.json"),Ii=r(" che \xE8 il nostro indice. Un checkpoint pu\xF2 essere ricaricato totalmente usando il metodo "),ze=t("code"),Bi=r("from_pretrained()"),Ti=r(":"),Re=m(),v(H.$$.fragment),Ge=m(),ee=t("p"),Li=r("Il vantaggio principale di applicare questo metodo per modelli grandi \xE8 che durante il passo 2 del workflow illustrato in precedenza, ogni frammento del checkpoint viene caricato dopo il precedente, limitando l\u2019utilizzo della RAM alla dimensione del modello pi\xF9 la dimensione del frammento pi\xF9 grande."),He=m(),ie=t("p"),Si=r("Dietro le quinte, il file indice \xE8 utilizzato per determinare quali chiavi sono nel checkpoint, e dove i corrispondenti pesi sono memorizzati. Possiamo caricare l\u2019indice come un qualsiasi json e ottenere un dizionario:"),Ue=m(),v(U.$$.fragment),Fe=m(),ae=t("p"),Oi=r("I metadati consistono solo nella dimensione totale del modello per ora. Abbiamo in programma di aggiungere altre informazioni in futuro:"),Qe=m(),v(F.$$.fragment),Je=m(),I=t("p"),Ni=r("La mappa dei pesi \xE8 la parte principale di questo indice, che mappa ogni nome dei parametri (si trova solitamente nei modelli PyTorch come "),$e=t("code"),Ri=r("state_dict"),Gi=r(") al file in cui \xE8 memorizzato:"),Ke=m(),v(Q.$$.fragment),Ve=m(),_=t("p"),Hi=r("Se vuoi caricare direttamente un checkpoint frammentato in un modello senza usare "),we=t("code"),Ui=r("from_pretrained()"),Fi=r(" (come si farebbe con "),je=t("code"),Qi=r("model.load_state_dict()"),Ji=r(" per un checkpoint completo) devi usare "),ye=t("code"),Ki=r("load_sharded_checkpoint()"),Vi=r(":"),We=m(),v(J.$$.fragment),Xe=m(),x=t("h2"),B=t("a"),ke=t("span"),v(K.$$.fragment),Wi=m(),be=t("span"),Xi=r("Caricamento low memory"),Ye=m(),se=t("p"),Yi=r("Frammentare i checkpoint l\u2019utilizzo di memoria al passo 2 del workflow citato in precedenza, ma per utilizzare questo modello in un ambiente con poca memoria, consigliamo di utilizzare i nostri strumenti basati sulla libreria Accelerate."),Ze=m(),V=t("p"),Zi=r("Per ulteriori informazioni, leggere la seguente guida: "),oe=t("a"),ea=r("Large model loading using Accelerate"),this.h()},l(e){const s=Ta('[data-svelte="svelte-1phssyn"]',document.head);c=l(s,"META",{name:!0,content:!0}),s.forEach(i),q=d(e),u=l(e,"H1",{class:!0});var W=n(u);h=l(W,"A",{id:!0,class:!0,href:!0});var sa=n(h);re=l(sa,"SPAN",{});var oa=n(re);g(S.$$.fragment,oa),oa.forEach(i),sa.forEach(i),ni=d(W),ne=l(W,"SPAN",{});var ta=n(ne);pi=p(ta,"Istanziare un big model"),ta.forEach(i),W.forEach(i),qe=d(e),X=l(e,"P",{});var la=n(X);mi=p(la,`Quando vuoi utilizzare un modello preaddestrato (pretrained) molto grande, una sfida \xE8 minimizzare l\u2019uso della RAM. Il workflow classico
in PyTorch \xE8:`),la.forEach(i),Ee=d(e),y=l(e,"OL",{});var te=n(y);pe=l(te,"LI",{});var ra=n(pe);di=p(ra,"Crea il tuo modello con pesi casuali (random weights)."),ra.forEach(i),ci=d(te),me=l(te,"LI",{});var na=n(me);ui=p(na,"Carica i tuoi pesi preaddestrati."),na.forEach(i),fi=d(te),de=l(te,"LI",{});var pa=n(de);hi=p(pa,"Inserisci i pesi preaddestrati nel tuo modello casuale."),pa.forEach(i),te.forEach(i),Pe=d(e),E=l(e,"P",{});var ii=n(E);_i=p(ii,"I passi 1 e 2 una versione completa del modello in memoria, in molti casi non \xE8 un problema, ma se il modello inizia a pesare diversi GigaBytes, queste due copie possono sturare la nostra RAM. Ancora peggio, se stai usando "),ce=l(ii,"CODE",{});var ma=n(ce);vi=p(ma,"torch.distributed"),ma.forEach(i),gi=p(ii," per seguire l\u2019addestramento (training) in distribuito, ogni processo caricher\xE0 il modello preaddestrato e memorizzer\xE0 queste due copie nella RAM."),ii.forEach(i),Ae=d(e),g(P.$$.fragment,e),Me=d(e),Y=l(e,"P",{});var da=n(Y);zi=p(da,"In questa guida, esploreremo le soluzioni che Transformers offre per affrontare questo problema. C\u2019\xE8 da tenere in conto che questa \xE8 un\u2019area in cui si sta attualmente sviluppando, quindi le API spiegate qui possono variare velocemente in futuro."),da.forEach(i),Ce=d(e),b=l(e,"H2",{class:!0});var ai=n(b);A=l(ai,"A",{id:!0,class:!0,href:!0});var ca=n(A);ue=l(ca,"SPAN",{});var ua=n(ue);g(O.$$.fragment,ua),ua.forEach(i),ca.forEach(i),$i=d(ai),fe=l(ai,"SPAN",{});var fa=n(fe);wi=p(fa,"Checkpoints condivisi"),fa.forEach(i),ai.forEach(i),De=d(e),M=l(e,"P",{});var si=n(M);ji=p(si,"Dalla versione 4.18.0, i checkpoints dei modelli che occupano pi\xF9 di 10GB di spazio vengono automaticamente frammentati in pi\xF9 parti. Per quanto riguarda la possibilit\xE0 di avere un unico checkpoint quando si utilizza "),he=l(si,"CODE",{});var ha=n(he);yi=p(ha,"model.save_pretrained(save_dir)"),ha.forEach(i),ki=p(si,", si hanno diversi checkpoint parziali (ognuno con dimensione < 10GB) e un  indice che mappa i nomi dei parametri ai file in cui sono memorizzati."),si.forEach(i),Ie=d(e),C=l(e,"P",{});var oi=n(C);bi=p(oi,"Puoi controllare la dimensione massima dopo la frammentazione con il parametro "),_e=l(oi,"CODE",{});var _a=n(_e);xi=p(_a,"max_shard_size"),_a.forEach(i),qi=p(oi,", nel prossimo esempio, useremo modelli di dimensioni normali con frammenti di piccoli dimensioni: prendiamo un modello BERT classico."),oi.forEach(i),Be=d(e),g(N.$$.fragment,e),Te=d(e),D=l(e,"P",{});var ti=n(D);Ei=p(ti,"Se tu salvi usando "),ve=l(ti,"CODE",{});var va=n(ve);Pi=p(va,"save_pretrained()"),va.forEach(i),Ai=p(ti,", avrai una nuova cartella con due file: il config del modello e i suoi pesi:"),ti.forEach(i),Le=d(e),g(R.$$.fragment,e),Se=d(e),Z=l(e,"P",{});var ga=n(Z);Mi=p(ga,"Adesso usiamo una dimensione massima di frammentazione di 200MB:"),ga.forEach(i),Oe=d(e),g(G.$$.fragment,e),Ne=d(e),k=l(e,"P",{});var le=n(k);Ci=p(le,"In aggiunta alla configurazione del modello, vediamo tre differenti file dei pesi, e un file "),ge=l(le,"CODE",{});var za=n(ge);Di=p(za,"index.json"),za.forEach(i),Ii=p(le," che \xE8 il nostro indice. Un checkpoint pu\xF2 essere ricaricato totalmente usando il metodo "),ze=l(le,"CODE",{});var $a=n(ze);Bi=p($a,"from_pretrained()"),$a.forEach(i),Ti=p(le,":"),le.forEach(i),Re=d(e),g(H.$$.fragment,e),Ge=d(e),ee=l(e,"P",{});var wa=n(ee);Li=p(wa,"Il vantaggio principale di applicare questo metodo per modelli grandi \xE8 che durante il passo 2 del workflow illustrato in precedenza, ogni frammento del checkpoint viene caricato dopo il precedente, limitando l\u2019utilizzo della RAM alla dimensione del modello pi\xF9 la dimensione del frammento pi\xF9 grande."),wa.forEach(i),He=d(e),ie=l(e,"P",{});var ja=n(ie);Si=p(ja,"Dietro le quinte, il file indice \xE8 utilizzato per determinare quali chiavi sono nel checkpoint, e dove i corrispondenti pesi sono memorizzati. Possiamo caricare l\u2019indice come un qualsiasi json e ottenere un dizionario:"),ja.forEach(i),Ue=d(e),g(U.$$.fragment,e),Fe=d(e),ae=l(e,"P",{});var ya=n(ae);Oi=p(ya,"I metadati consistono solo nella dimensione totale del modello per ora. Abbiamo in programma di aggiungere altre informazioni in futuro:"),ya.forEach(i),Qe=d(e),g(F.$$.fragment,e),Je=d(e),I=l(e,"P",{});var li=n(I);Ni=p(li,"La mappa dei pesi \xE8 la parte principale di questo indice, che mappa ogni nome dei parametri (si trova solitamente nei modelli PyTorch come "),$e=l(li,"CODE",{});var ka=n($e);Ri=p(ka,"state_dict"),ka.forEach(i),Gi=p(li,") al file in cui \xE8 memorizzato:"),li.forEach(i),Ke=d(e),g(Q.$$.fragment,e),Ve=d(e),_=l(e,"P",{});var T=n(_);Hi=p(T,"Se vuoi caricare direttamente un checkpoint frammentato in un modello senza usare "),we=l(T,"CODE",{});var ba=n(we);Ui=p(ba,"from_pretrained()"),ba.forEach(i),Fi=p(T," (come si farebbe con "),je=l(T,"CODE",{});var xa=n(je);Qi=p(xa,"model.load_state_dict()"),xa.forEach(i),Ji=p(T," per un checkpoint completo) devi usare "),ye=l(T,"CODE",{});var qa=n(ye);Ki=p(qa,"load_sharded_checkpoint()"),qa.forEach(i),Vi=p(T,":"),T.forEach(i),We=d(e),g(J.$$.fragment,e),Xe=d(e),x=l(e,"H2",{class:!0});var ri=n(x);B=l(ri,"A",{id:!0,class:!0,href:!0});var Ea=n(B);ke=l(Ea,"SPAN",{});var Pa=n(ke);g(K.$$.fragment,Pa),Pa.forEach(i),Ea.forEach(i),Wi=d(ri),be=l(ri,"SPAN",{});var Aa=n(be);Xi=p(Aa,"Caricamento low memory"),Aa.forEach(i),ri.forEach(i),Ye=d(e),se=l(e,"P",{});var Ma=n(se);Yi=p(Ma,"Frammentare i checkpoint l\u2019utilizzo di memoria al passo 2 del workflow citato in precedenza, ma per utilizzare questo modello in un ambiente con poca memoria, consigliamo di utilizzare i nostri strumenti basati sulla libreria Accelerate."),Ma.forEach(i),Ze=d(e),V=l(e,"P",{});var ia=n(V);Zi=p(ia,"Per ulteriori informazioni, leggere la seguente guida: "),oe=l(ia,"A",{href:!0});var Ca=n(oe);ea=p(Ca,"Large model loading using Accelerate"),Ca.forEach(i),ia.forEach(i),this.h()},h(){f(c,"name","hf:doc:metadata"),f(c,"content",JSON.stringify(Ra)),f(h,"id","istanziare-un-big-model"),f(h,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(h,"href","#istanziare-un-big-model"),f(u,"class","relative group"),f(A,"id","checkpoints-condivisi"),f(A,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(A,"href","#checkpoints-condivisi"),f(b,"class","relative group"),f(B,"id","caricamento-low-memory"),f(B,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),f(B,"href","#caricamento-low-memory"),f(x,"class","relative group"),f(oe,"href","./main_classes/model#large-model-loading")},m(e,s){a(document.head,c),o(e,q,s),o(e,u,s),a(u,h),a(h,re),z(S,re,null),a(u,ni),a(u,ne),a(ne,pi),o(e,qe,s),o(e,X,s),a(X,mi),o(e,Ee,s),o(e,y,s),a(y,pe),a(pe,di),a(y,ci),a(y,me),a(me,ui),a(y,fi),a(y,de),a(de,hi),o(e,Pe,s),o(e,E,s),a(E,_i),a(E,ce),a(ce,vi),a(E,gi),o(e,Ae,s),z(P,e,s),o(e,Me,s),o(e,Y,s),a(Y,zi),o(e,Ce,s),o(e,b,s),a(b,A),a(A,ue),z(O,ue,null),a(b,$i),a(b,fe),a(fe,wi),o(e,De,s),o(e,M,s),a(M,ji),a(M,he),a(he,yi),a(M,ki),o(e,Ie,s),o(e,C,s),a(C,bi),a(C,_e),a(_e,xi),a(C,qi),o(e,Be,s),z(N,e,s),o(e,Te,s),o(e,D,s),a(D,Ei),a(D,ve),a(ve,Pi),a(D,Ai),o(e,Le,s),z(R,e,s),o(e,Se,s),o(e,Z,s),a(Z,Mi),o(e,Oe,s),z(G,e,s),o(e,Ne,s),o(e,k,s),a(k,Ci),a(k,ge),a(ge,Di),a(k,Ii),a(k,ze),a(ze,Bi),a(k,Ti),o(e,Re,s),z(H,e,s),o(e,Ge,s),o(e,ee,s),a(ee,Li),o(e,He,s),o(e,ie,s),a(ie,Si),o(e,Ue,s),z(U,e,s),o(e,Fe,s),o(e,ae,s),a(ae,Oi),o(e,Qe,s),z(F,e,s),o(e,Je,s),o(e,I,s),a(I,Ni),a(I,$e),a($e,Ri),a(I,Gi),o(e,Ke,s),z(Q,e,s),o(e,Ve,s),o(e,_,s),a(_,Hi),a(_,we),a(we,Ui),a(_,Fi),a(_,je),a(je,Qi),a(_,Ji),a(_,ye),a(ye,Ki),a(_,Vi),o(e,We,s),z(J,e,s),o(e,Xe,s),o(e,x,s),a(x,B),a(B,ke),z(K,ke,null),a(x,Wi),a(x,be),a(be,Xi),o(e,Ye,s),o(e,se,s),a(se,Yi),o(e,Ze,s),o(e,V,s),a(V,Zi),a(V,oe),a(oe,ea),ei=!0},p(e,[s]){const W={};s&2&&(W.$$scope={dirty:s,ctx:e}),P.$set(W)},i(e){ei||($(S.$$.fragment,e),$(P.$$.fragment,e),$(O.$$.fragment,e),$(N.$$.fragment,e),$(R.$$.fragment,e),$(G.$$.fragment,e),$(H.$$.fragment,e),$(U.$$.fragment,e),$(F.$$.fragment,e),$(Q.$$.fragment,e),$(J.$$.fragment,e),$(K.$$.fragment,e),ei=!0)},o(e){w(S.$$.fragment,e),w(P.$$.fragment,e),w(O.$$.fragment,e),w(N.$$.fragment,e),w(R.$$.fragment,e),w(G.$$.fragment,e),w(H.$$.fragment,e),w(U.$$.fragment,e),w(F.$$.fragment,e),w(Q.$$.fragment,e),w(J.$$.fragment,e),w(K.$$.fragment,e),ei=!1},d(e){i(c),e&&i(q),e&&i(u),j(S),e&&i(qe),e&&i(X),e&&i(Ee),e&&i(y),e&&i(Pe),e&&i(E),e&&i(Ae),j(P,e),e&&i(Me),e&&i(Y),e&&i(Ce),e&&i(b),j(O),e&&i(De),e&&i(M),e&&i(Ie),e&&i(C),e&&i(Be),j(N,e),e&&i(Te),e&&i(D),e&&i(Le),j(R,e),e&&i(Se),e&&i(Z),e&&i(Oe),j(G,e),e&&i(Ne),e&&i(k),e&&i(Re),j(H,e),e&&i(Ge),e&&i(ee),e&&i(He),e&&i(ie),e&&i(Ue),j(U,e),e&&i(Fe),e&&i(ae),e&&i(Qe),j(F,e),e&&i(Je),e&&i(I),e&&i(Ke),j(Q,e),e&&i(Ve),e&&i(_),e&&i(We),j(J,e),e&&i(Xe),e&&i(x),j(K),e&&i(Ye),e&&i(se),e&&i(Ze),e&&i(V)}}}const Ra={local:"istanziare-un-big-model",sections:[{local:"checkpoints-condivisi",title:"Checkpoints condivisi"},{local:"caricamento-low-memory",title:"Caricamento low memory"}],title:"Istanziare un big model"};function Ga(xe){return La(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ja extends Da{constructor(c){super();Ia(this,c,Ga,Na,Ba,{})}}export{Ja as default,Ra as metadata};
