import{S as Ra,i as Ta,s as Za,e as l,k as m,w as y,t as n,M as qa,c as t,d as i,m as c,a as r,x as w,h as p,b as f,G as a,g as o,y as _,q as z,o as g,B as j,v as xa}from"../chunks/vendor-hf-doc-builder.js";import{T as Ga}from"../chunks/Tip-hf-doc-builder.js";import{I as aa}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as x}from"../chunks/CodeBlock-hf-doc-builder.js";function Sa(ke){let d,U;return{c(){d=l("p"),U=n("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){d=t(u,"P",{});var h=r(d);U=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,d,h),a(d,U)},d(u){u&&i(d)}}}function Xa(ke){let d,U,u,h,ne,G,ri,re,pi,Ue,Y,mi,Ee,b,pe,ci,di,me,ui,fi,ce,hi,Ce,E,vi,de,yi,wi,Ie,C,Je,K,_i,Be,$,I,ue,S,zi,fe,gi,Re,J,ji,he,bi,Mi,Te,B,$i,ve,ki,Ui,Ze,X,qe,R,Ei,ye,Ci,Ii,xe,A,Ge,O,Ji,Se,W,Xe,M,Bi,we,Ri,Ti,_e,Zi,qi,Ae,P,We,ee,xi,Pe,ie,Gi,Ne,N,Fe,ae,Si,Ve,F,Le,T,Xi,ze,Ai,Wi,Qe,V,He,v,Pi,ge,Ni,Fi,je,Vi,Li,be,Qi,Hi,De,L,Ye,k,Z,Me,Q,Di,$e,Yi,Ke,se,Ki,Oe,H,Oi,oe,ea,ei;return G=new aa({}),C=new Ga({props:{$$slots:{default:[Sa]},$$scope:{ctx:ke}}}),S=new aa({}),X=new x({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",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>)`}}),A=new x({props:{code:"aW1wb3J0JTIwb3MlMEFpbXBvcnQlMjB0ZW1wZmlsZSUwQSUwQXdpdGglMjB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSUyMGFzJTIwdG1wX2RpciUzQSUwQSUyMCUyMCUyMCUyMG1vZGVsLnNhdmVfcHJldHJhaW5lZCh0bXBfZGlyKSUwQSUyMCUyMCUyMCUyMHByaW50KHNvcnRlZChvcy5saXN0ZGlyKHRtcF9kaXIpKSk=",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>]`}}),W=new x({props:{code:"d2l0aCUyMHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpJTIwYXMlMjB0bXBfZGlyJTNBJTBBJTIwJTIwJTIwJTIwbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKHRtcF9kaXIlMkMlMjBtYXhfc2hhcmRfc2l6ZSUzRCUyMjIwME1CJTIyKSUwQSUyMCUyMCUyMCUyMHByaW50KHNvcnRlZChvcy5saXN0ZGlyKHRtcF9kaXIpKSk=",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>]`}}),P=new x({props:{code:"d2l0aCUyMHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpJTIwYXMlMjB0bXBfZGlyJTNBJTBBJTIwJTIwJTIwJTIwbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKHRtcF9kaXIlMkMlMjBtYXhfc2hhcmRfc2l6ZSUzRCUyMjIwME1CJTIyKSUwQSUyMCUyMCUyMCUyMG5ld19tb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbC5mcm9tX3ByZXRyYWluZWQodG1wX2Rpcik=",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)`}}),N=new x({props:{code:"aW1wb3J0JTIwanNvbiUwQSUwQXdpdGglMjB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSUyMGFzJTIwdG1wX2RpciUzQSUwQSUyMCUyMCUyMCUyMG1vZGVsLnNhdmVfcHJldHJhaW5lZCh0bXBfZGlyJTJDJTIwbWF4X3NoYXJkX3NpemUlM0QlMjIyMDBNQiUyMiklMEElMjAlMjAlMjAlMjB3aXRoJTIwb3Blbihvcy5wYXRoLmpvaW4odG1wX2RpciUyQyUyMCUyMnB5dG9yY2hfbW9kZWwuYmluLmluZGV4Lmpzb24lMjIpJTJDJTIwJTIyciUyMiklMjBhcyUyMGYlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbmRleCUyMCUzRCUyMGpzb24ubG9hZChmKSUwQSUwQXByaW50KGluZGV4LmtleXMoKSk=",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 x({props:{code:"aW5kZXglNUIlMjJtZXRhZGF0YSUyMiU1RA==",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>}`}}),V=new x({props:{code:"aW5kZXglNUIlMjJ3ZWlnaHRfbWFwJTIyJTVE",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>,
 ...`}}),L=new x({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5tb2RlbGluZ191dGlscyUyMGltcG9ydCUyMGxvYWRfc2hhcmRlZF9jaGVja3BvaW50JTBBJTBBd2l0aCUyMHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpJTIwYXMlMjB0bXBfZGlyJTNBJTBBJTIwJTIwJTIwJTIwbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKHRtcF9kaXIlMkMlMjBtYXhfc2hhcmRfc2l6ZSUzRCUyMjIwME1CJTIyKSUwQSUyMCUyMCUyMCUyMGxvYWRfc2hhcmRlZF9jaGVja3BvaW50KG1vZGVsJTJDJTIwdG1wX2Rpcik=",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)`}}),Q=new aa({}),{c(){d=l("meta"),U=m(),u=l("h1"),h=l("a"),ne=l("span"),y(G.$$.fragment),ri=m(),re=l("span"),pi=n("Istanziare un big model"),Ue=m(),Y=l("p"),mi=n(`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(),b=l("ol"),pe=l("li"),ci=n("Crea il tuo modello con pesi casuali (random weights)."),di=m(),me=l("li"),ui=n("Carica i tuoi pesi preaddestrati."),fi=m(),ce=l("li"),hi=n("Inserisci i pesi preaddestrati nel tuo modello casuale."),Ce=m(),E=l("p"),vi=n("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 "),de=l("code"),yi=n("torch.distributed"),wi=n(" per seguire l\u2019addestramento (training) in distribuito, ogni processo caricher\xE0 il modello preaddestrato e memorizzer\xE0 queste due copie nella RAM."),Ie=m(),y(C.$$.fragment),Je=m(),K=l("p"),_i=n("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."),Be=m(),$=l("h2"),I=l("a"),ue=l("span"),y(S.$$.fragment),zi=m(),fe=l("span"),gi=n("Checkpoints condivisi"),Re=m(),J=l("p"),ji=n("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("code"),bi=n("model.save_pretrained(save_dir)"),Mi=n(", si hanno diversi checkpoint parziali (ognuno con dimensione < 10GB) e un  indice che mappa i nomi dei parametri ai file in cui sono memorizzati."),Te=m(),B=l("p"),$i=n("Puoi controllare la dimensione massima dopo la frammentazione con il parametro "),ve=l("code"),ki=n("max_shard_size"),Ui=n(", nel prossimo esempio, useremo modelli di dimensioni normali con frammenti di piccoli dimensioni: prendiamo un modello BERT classico."),Ze=m(),y(X.$$.fragment),qe=m(),R=l("p"),Ei=n("Se tu salvi usando "),ye=l("code"),Ci=n("save_pretrained()"),Ii=n(", avrai una nuova cartella con due file: il config del modello e i suoi pesi:"),xe=m(),y(A.$$.fragment),Ge=m(),O=l("p"),Ji=n("Adesso usiamo una dimensione massima di frammentazione di 200MB:"),Se=m(),y(W.$$.fragment),Xe=m(),M=l("p"),Bi=n("In aggiunta alla configurazione del modello, vediamo tre differenti file dei pesi, e un file "),we=l("code"),Ri=n("index.json"),Ti=n(" che \xE8 il nostro indice. Un checkpoint pu\xF2 essere ricaricato totalmente usando il metodo "),_e=l("code"),Zi=n("from_pretrained()"),qi=n(":"),Ae=m(),y(P.$$.fragment),We=m(),ee=l("p"),xi=n("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."),Pe=m(),ie=l("p"),Gi=n("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:"),Ne=m(),y(N.$$.fragment),Fe=m(),ae=l("p"),Si=n("I metadati consistono solo nella dimensione totale del modello per ora. Abbiamo in programma di aggiungere altre informazioni in futuro:"),Ve=m(),y(F.$$.fragment),Le=m(),T=l("p"),Xi=n("La mappa dei pesi \xE8 la parte principale di questo indice, che mappa ogni nome dei parametri (si trova solitamente nei modelli PyTorch come "),ze=l("code"),Ai=n("state_dict"),Wi=n(") al file in cui \xE8 memorizzato:"),Qe=m(),y(V.$$.fragment),He=m(),v=l("p"),Pi=n("Se vuoi caricare direttamente un checkpoint frammentato in un modello senza usare "),ge=l("code"),Ni=n("from_pretrained()"),Fi=n(" (come si farebbe con "),je=l("code"),Vi=n("model.load_state_dict()"),Li=n(" per un checkpoint completo) devi usare "),be=l("code"),Qi=n("load_sharded_checkpoint()"),Hi=n(":"),De=m(),y(L.$$.fragment),Ye=m(),k=l("h2"),Z=l("a"),Me=l("span"),y(Q.$$.fragment),Di=m(),$e=l("span"),Yi=n("Caricamento low memory"),Ke=m(),se=l("p"),Ki=n("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."),Oe=m(),H=l("p"),Oi=n("Per ulteriori informazioni, leggere la seguente guida: "),oe=l("a"),ea=n("Large model loading using Accelerate"),this.h()},l(e){const s=qa('[data-svelte="svelte-1phssyn"]',document.head);d=t(s,"META",{name:!0,content:!0}),s.forEach(i),U=c(e),u=t(e,"H1",{class:!0});var D=r(u);h=t(D,"A",{id:!0,class:!0,href:!0});var sa=r(h);ne=t(sa,"SPAN",{});var oa=r(ne);w(G.$$.fragment,oa),oa.forEach(i),sa.forEach(i),ri=c(D),re=t(D,"SPAN",{});var la=r(re);pi=p(la,"Istanziare un big model"),la.forEach(i),D.forEach(i),Ue=c(e),Y=t(e,"P",{});var ta=r(Y);mi=p(ta,`Quando vuoi utilizzare un modello preaddestrato (pretrained) molto grande, una sfida \xE8 minimizzare l\u2019uso della RAM. Il workflow classico
in PyTorch \xE8:`),ta.forEach(i),Ee=c(e),b=t(e,"OL",{});var le=r(b);pe=t(le,"LI",{});var na=r(pe);ci=p(na,"Crea il tuo modello con pesi casuali (random weights)."),na.forEach(i),di=c(le),me=t(le,"LI",{});var ra=r(me);ui=p(ra,"Carica i tuoi pesi preaddestrati."),ra.forEach(i),fi=c(le),ce=t(le,"LI",{});var pa=r(ce);hi=p(pa,"Inserisci i pesi preaddestrati nel tuo modello casuale."),pa.forEach(i),le.forEach(i),Ce=c(e),E=t(e,"P",{});var ii=r(E);vi=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 "),de=t(ii,"CODE",{});var ma=r(de);yi=p(ma,"torch.distributed"),ma.forEach(i),wi=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),Ie=c(e),w(C.$$.fragment,e),Je=c(e),K=t(e,"P",{});var ca=r(K);_i=p(ca,"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."),ca.forEach(i),Be=c(e),$=t(e,"H2",{class:!0});var ai=r($);I=t(ai,"A",{id:!0,class:!0,href:!0});var da=r(I);ue=t(da,"SPAN",{});var ua=r(ue);w(S.$$.fragment,ua),ua.forEach(i),da.forEach(i),zi=c(ai),fe=t(ai,"SPAN",{});var fa=r(fe);gi=p(fa,"Checkpoints condivisi"),fa.forEach(i),ai.forEach(i),Re=c(e),J=t(e,"P",{});var si=r(J);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=t(si,"CODE",{});var ha=r(he);bi=p(ha,"model.save_pretrained(save_dir)"),ha.forEach(i),Mi=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),Te=c(e),B=t(e,"P",{});var oi=r(B);$i=p(oi,"Puoi controllare la dimensione massima dopo la frammentazione con il parametro "),ve=t(oi,"CODE",{});var va=r(ve);ki=p(va,"max_shard_size"),va.forEach(i),Ui=p(oi,", nel prossimo esempio, useremo modelli di dimensioni normali con frammenti di piccoli dimensioni: prendiamo un modello BERT classico."),oi.forEach(i),Ze=c(e),w(X.$$.fragment,e),qe=c(e),R=t(e,"P",{});var li=r(R);Ei=p(li,"Se tu salvi usando "),ye=t(li,"CODE",{});var ya=r(ye);Ci=p(ya,"save_pretrained()"),ya.forEach(i),Ii=p(li,", avrai una nuova cartella con due file: il config del modello e i suoi pesi:"),li.forEach(i),xe=c(e),w(A.$$.fragment,e),Ge=c(e),O=t(e,"P",{});var wa=r(O);Ji=p(wa,"Adesso usiamo una dimensione massima di frammentazione di 200MB:"),wa.forEach(i),Se=c(e),w(W.$$.fragment,e),Xe=c(e),M=t(e,"P",{});var te=r(M);Bi=p(te,"In aggiunta alla configurazione del modello, vediamo tre differenti file dei pesi, e un file "),we=t(te,"CODE",{});var _a=r(we);Ri=p(_a,"index.json"),_a.forEach(i),Ti=p(te," che \xE8 il nostro indice. Un checkpoint pu\xF2 essere ricaricato totalmente usando il metodo "),_e=t(te,"CODE",{});var za=r(_e);Zi=p(za,"from_pretrained()"),za.forEach(i),qi=p(te,":"),te.forEach(i),Ae=c(e),w(P.$$.fragment,e),We=c(e),ee=t(e,"P",{});var ga=r(ee);xi=p(ga,"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."),ga.forEach(i),Pe=c(e),ie=t(e,"P",{});var ja=r(ie);Gi=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),Ne=c(e),w(N.$$.fragment,e),Fe=c(e),ae=t(e,"P",{});var ba=r(ae);Si=p(ba,"I metadati consistono solo nella dimensione totale del modello per ora. Abbiamo in programma di aggiungere altre informazioni in futuro:"),ba.forEach(i),Ve=c(e),w(F.$$.fragment,e),Le=c(e),T=t(e,"P",{});var ti=r(T);Xi=p(ti,"La mappa dei pesi \xE8 la parte principale di questo indice, che mappa ogni nome dei parametri (si trova solitamente nei modelli PyTorch come "),ze=t(ti,"CODE",{});var Ma=r(ze);Ai=p(Ma,"state_dict"),Ma.forEach(i),Wi=p(ti,") al file in cui \xE8 memorizzato:"),ti.forEach(i),Qe=c(e),w(V.$$.fragment,e),He=c(e),v=t(e,"P",{});var q=r(v);Pi=p(q,"Se vuoi caricare direttamente un checkpoint frammentato in un modello senza usare "),ge=t(q,"CODE",{});var $a=r(ge);Ni=p($a,"from_pretrained()"),$a.forEach(i),Fi=p(q," (come si farebbe con "),je=t(q,"CODE",{});var ka=r(je);Vi=p(ka,"model.load_state_dict()"),ka.forEach(i),Li=p(q," per un checkpoint completo) devi usare "),be=t(q,"CODE",{});var Ua=r(be);Qi=p(Ua,"load_sharded_checkpoint()"),Ua.forEach(i),Hi=p(q,":"),q.forEach(i),De=c(e),w(L.$$.fragment,e),Ye=c(e),k=t(e,"H2",{class:!0});var ni=r(k);Z=t(ni,"A",{id:!0,class:!0,href:!0});var Ea=r(Z);Me=t(Ea,"SPAN",{});var Ca=r(Me);w(Q.$$.fragment,Ca),Ca.forEach(i),Ea.forEach(i),Di=c(ni),$e=t(ni,"SPAN",{});var Ia=r($e);Yi=p(Ia,"Caricamento low memory"),Ia.forEach(i),ni.forEach(i),Ke=c(e),se=t(e,"P",{});var Ja=r(se);Ki=p(Ja,"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."),Ja.forEach(i),Oe=c(e),H=t(e,"P",{});var ia=r(H);Oi=p(ia,"Per ulteriori informazioni, leggere la seguente guida: "),oe=t(ia,"A",{href:!0});var Ba=r(oe);ea=p(Ba,"Large model loading using Accelerate"),Ba.forEach(i),ia.forEach(i),this.h()},h(){f(d,"name","hf:doc:metadata"),f(d,"content",JSON.stringify(Aa)),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(I,"id","checkpoints-condivisi"),f(I,"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(I,"href","#checkpoints-condivisi"),f($,"class","relative group"),f(Z,"id","caricamento-low-memory"),f(Z,"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(Z,"href","#caricamento-low-memory"),f(k,"class","relative group"),f(oe,"href","./main_classes/model#large-model-loading")},m(e,s){a(document.head,d),o(e,U,s),o(e,u,s),a(u,h),a(h,ne),_(G,ne,null),a(u,ri),a(u,re),a(re,pi),o(e,Ue,s),o(e,Y,s),a(Y,mi),o(e,Ee,s),o(e,b,s),a(b,pe),a(pe,ci),a(b,di),a(b,me),a(me,ui),a(b,fi),a(b,ce),a(ce,hi),o(e,Ce,s),o(e,E,s),a(E,vi),a(E,de),a(de,yi),a(E,wi),o(e,Ie,s),_(C,e,s),o(e,Je,s),o(e,K,s),a(K,_i),o(e,Be,s),o(e,$,s),a($,I),a(I,ue),_(S,ue,null),a($,zi),a($,fe),a(fe,gi),o(e,Re,s),o(e,J,s),a(J,ji),a(J,he),a(he,bi),a(J,Mi),o(e,Te,s),o(e,B,s),a(B,$i),a(B,ve),a(ve,ki),a(B,Ui),o(e,Ze,s),_(X,e,s),o(e,qe,s),o(e,R,s),a(R,Ei),a(R,ye),a(ye,Ci),a(R,Ii),o(e,xe,s),_(A,e,s),o(e,Ge,s),o(e,O,s),a(O,Ji),o(e,Se,s),_(W,e,s),o(e,Xe,s),o(e,M,s),a(M,Bi),a(M,we),a(we,Ri),a(M,Ti),a(M,_e),a(_e,Zi),a(M,qi),o(e,Ae,s),_(P,e,s),o(e,We,s),o(e,ee,s),a(ee,xi),o(e,Pe,s),o(e,ie,s),a(ie,Gi),o(e,Ne,s),_(N,e,s),o(e,Fe,s),o(e,ae,s),a(ae,Si),o(e,Ve,s),_(F,e,s),o(e,Le,s),o(e,T,s),a(T,Xi),a(T,ze),a(ze,Ai),a(T,Wi),o(e,Qe,s),_(V,e,s),o(e,He,s),o(e,v,s),a(v,Pi),a(v,ge),a(ge,Ni),a(v,Fi),a(v,je),a(je,Vi),a(v,Li),a(v,be),a(be,Qi),a(v,Hi),o(e,De,s),_(L,e,s),o(e,Ye,s),o(e,k,s),a(k,Z),a(Z,Me),_(Q,Me,null),a(k,Di),a(k,$e),a($e,Yi),o(e,Ke,s),o(e,se,s),a(se,Ki),o(e,Oe,s),o(e,H,s),a(H,Oi),a(H,oe),a(oe,ea),ei=!0},p(e,[s]){const D={};s&2&&(D.$$scope={dirty:s,ctx:e}),C.$set(D)},i(e){ei||(z(G.$$.fragment,e),z(C.$$.fragment,e),z(S.$$.fragment,e),z(X.$$.fragment,e),z(A.$$.fragment,e),z(W.$$.fragment,e),z(P.$$.fragment,e),z(N.$$.fragment,e),z(F.$$.fragment,e),z(V.$$.fragment,e),z(L.$$.fragment,e),z(Q.$$.fragment,e),ei=!0)},o(e){g(G.$$.fragment,e),g(C.$$.fragment,e),g(S.$$.fragment,e),g(X.$$.fragment,e),g(A.$$.fragment,e),g(W.$$.fragment,e),g(P.$$.fragment,e),g(N.$$.fragment,e),g(F.$$.fragment,e),g(V.$$.fragment,e),g(L.$$.fragment,e),g(Q.$$.fragment,e),ei=!1},d(e){i(d),e&&i(U),e&&i(u),j(G),e&&i(Ue),e&&i(Y),e&&i(Ee),e&&i(b),e&&i(Ce),e&&i(E),e&&i(Ie),j(C,e),e&&i(Je),e&&i(K),e&&i(Be),e&&i($),j(S),e&&i(Re),e&&i(J),e&&i(Te),e&&i(B),e&&i(Ze),j(X,e),e&&i(qe),e&&i(R),e&&i(xe),j(A,e),e&&i(Ge),e&&i(O),e&&i(Se),j(W,e),e&&i(Xe),e&&i(M),e&&i(Ae),j(P,e),e&&i(We),e&&i(ee),e&&i(Pe),e&&i(ie),e&&i(Ne),j(N,e),e&&i(Fe),e&&i(ae),e&&i(Ve),j(F,e),e&&i(Le),e&&i(T),e&&i(Qe),j(V,e),e&&i(He),e&&i(v),e&&i(De),j(L,e),e&&i(Ye),e&&i(k),j(Q),e&&i(Ke),e&&i(se),e&&i(Oe),e&&i(H)}}}const Aa={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 Wa(ke){return xa(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class La extends Ra{constructor(d){super();Ta(this,d,Wa,Xa,Za,{})}}export{La as default,Aa as metadata};
