import{S as la,i as aa,s as ra,e as o,k as c,w as _,t as r,M as sa,c as l,d as t,m as d,a,x as E,h as s,b as u,N as ut,G as i,g as p,y,q as U,o as M,B as $,v as na}from"../chunks/vendor-hf-doc-builder.js";import{T as pa}from"../chunks/Tip-hf-doc-builder.js";import{I as he}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as ct}from"../chunks/CodeBlock-hf-doc-builder.js";function ua(Ui){let m,j;return{c(){m=o("p"),j=r("Nota che questa funzione pu\xF2 essere utilizzata anche nelle configurazioni multi GPU.")},l(h){m=l(h,"P",{});var v=a(m);j=s(v,"Nota che questa funzione pu\xF2 essere utilizzata anche nelle configurazioni multi GPU."),v.forEach(t)},m(h,v){p(h,m,v),i(m,j)},d(h){h&&t(m)}}}function ca(Ui){let m,j,h,v,Fe,L,dt,Ve,mt,Mi,w,ft,be,ht,bt,ve,vt,gt,$i,x,N,Se,Q,zt,ge,Xe,_t,Et,wi,G,yt,Be,Ut,Mt,H,$t,wt,Gi,C,Z,Oe,K,Gt,ee,Pt,De,Tt,It,Pi,F,Ti,f,xt,ie,Ye,Ct,Jt,Le,kt,qt,Qe,At,Rt,He,Wt,jt,Ke,Nt,Zt,Ii,ze,_e,Oo,xi,P,Ft,te,Vt,St,oe,Xt,Bt,Ci,Ee,ye,Do,Ji,V,Ot,Ue,Dt,Yt,ki,J,S,ei,le,Lt,ii,Qt,qi,T,k,Ht,ti,Kt,eo,oi,io,to,oo,q,lo,li,ao,ro,ai,so,no,po,X,uo,ri,co,mo,si,fo,Ai,A,B,ni,ae,ho,pi,bo,Ri,Me,vo,Wi,re,ji,$e,go,Ni,O,b,zo,ui,_o,Eo,ci,yo,Uo,di,Mo,$o,mi,wo,Go,fi,Po,To,Io,hi,xo,Zi,we,Co,Fi,se,Vi,R,D,bi,ne,Jo,vi,ko,Si,Ge,qo,Xi,pe,Bi,I,Ao,gi,Ro,Wo,zi,jo,No,Oi,ue,Di,Pe,Zo,Yi,W,Y,_i,ce,Fo,Ei,Vo,Li,Te,So,Qi,Ie,de,xe,Yo,Hi,Ce,Xo,Ki,Je,me,ke,Lo,et;return L=new he({}),Q=new he({}),K=new he({}),F=new pa({props:{$$slots:{default:[ua]},$$scope:{ctx:Ui}}}),le=new he({}),ae=new he({}),re=new ct({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNJTBBJTBBbW9kZWxfbmFtZSUyMCUzRCUyMCUyMmJpZ3NjaWVuY2UlMkZibG9vbS0yYjUlMjIlMEFtb2RlbF84Yml0JTIwJTNEJTIwQXV0b01vZGVsRm9yQ2F1c2FsTE0uZnJvbV9wcmV0cmFpbmVkKG1vZGVsX25hbWUlMkMlMjBkZXZpY2VfbWFwJTNEJTIyYXV0byUyMiUyQyUyMGxvYWRfaW5fOGJpdCUzRFRydWUp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForCausalLM

model_name = <span class="hljs-string">&quot;bigscience/bloom-2b5&quot;</span>
model_8bit = AutoModelForCausalLM.from_pretrained(model_name, device_map=<span class="hljs-string">&quot;auto&quot;</span>, load_in_8bit=<span class="hljs-literal">True</span>)`}}),se=new ct({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNJTJDJTIwQXV0b1Rva2VuaXplciUwQSUwQW1vZGVsX25hbWUlMjAlM0QlMjAlMjJiaWdzY2llbmNlJTJGYmxvb20tMmI1JTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfbmFtZSklMEFtb2RlbF84Yml0JTIwJTNEJTIwQXV0b01vZGVsRm9yQ2F1c2FsTE0uZnJvbV9wcmV0cmFpbmVkKG1vZGVsX25hbWUlMkMlMjBkZXZpY2VfbWFwJTNEJTIyYXV0byUyMiUyQyUyMGxvYWRfaW5fOGJpdCUzRFRydWUpJTBBJTBBdGV4dCUyMCUzRCUyMCUyMkhlbGxvJTJDJTIwbXklMjBsbGFtYSUyMGlzJTIwY3V0ZSUyMiUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplcihwcm9tcHQlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKS50byglMjJjdWRhJTIyKSUwQWdlbmVyYXRlZF9pZHMlMjAlM0QlMjBtb2RlbC5nZW5lcmF0ZSgqKmlucHV0cyklMEFvdXRwdXRzJTIwJTNEJTIwdG9rZW5pemVyLmJhdGNoX2RlY29kZShnZW5lcmF0ZWRfaWRzJTJDJTIwc2tpcF9zcGVjaWFsX3Rva2VucyUzRFRydWUp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForCausalLM, AutoTokenizer

model_name = <span class="hljs-string">&quot;bigscience/bloom-2b5&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_name)
model_8bit = AutoModelForCausalLM.from_pretrained(model_name, device_map=<span class="hljs-string">&quot;auto&quot;</span>, load_in_8bit=<span class="hljs-literal">True</span>)

text = <span class="hljs-string">&quot;Hello, my llama is cute&quot;</span>
inputs = tokenizer(prompt, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>).to(<span class="hljs-string">&quot;cuda&quot;</span>)
generated_ids = model.generate(**inputs)
outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=<span class="hljs-literal">True</span>)`}}),ne=new he({}),pe=new ct({props:{code:"bW9kZWxfbmFtZSUyMCUzRCUyMCUyMmJpZ3NjaWVuY2UlMkZibG9vbS0yYjUlMjIlMEFtb2RlbF84Yml0JTIwJTNEJTIwQXV0b01vZGVsRm9yQ2F1c2FsTE0uZnJvbV9wcmV0cmFpbmVkKG1vZGVsX25hbWUlMkMlMjBkZXZpY2VfbWFwJTNEJTIyYXV0byUyMiUyQyUyMGxvYWRfaW5fOGJpdCUzRFRydWUp",highlighted:`model_name = <span class="hljs-string">&quot;bigscience/bloom-2b5&quot;</span>
model_8bit = AutoModelForCausalLM.from_pretrained(model_name, device_map=<span class="hljs-string">&quot;auto&quot;</span>, load_in_8bit=<span class="hljs-literal">True</span>)`}}),ue=new ct({props:{code:"bWF4X21lbW9yeV9tYXBwaW5nJTIwJTNEJTIwJTdCMCUzQSUyMCUyMjFHQiUyMiUyQyUyMDElM0ElMjAlMjIyR0IlMjIlN0QlMEFtb2RlbF9uYW1lJTIwJTNEJTIwJTIyYmlnc2NpZW5jZSUyRmJsb29tLTNiJTIyJTBBbW9kZWxfOGJpdCUyMCUzRCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjBtb2RlbF9uYW1lJTJDJTIwZGV2aWNlX21hcCUzRCUyMmF1dG8lMjIlMkMlMjBsb2FkX2luXzhiaXQlM0RUcnVlJTJDJTIwbWF4X21lbW9yeSUzRG1heF9tZW1vcnlfbWFwcGluZyUwQSk=",highlighted:`max_memory_mapping = {<span class="hljs-number">0</span>: <span class="hljs-string">&quot;1GB&quot;</span>, <span class="hljs-number">1</span>: <span class="hljs-string">&quot;2GB&quot;</span>}
model_name = <span class="hljs-string">&quot;bigscience/bloom-3b&quot;</span>
model_8bit = AutoModelForCausalLM.from_pretrained(
    model_name, device_map=<span class="hljs-string">&quot;auto&quot;</span>, load_in_8bit=<span class="hljs-literal">True</span>, max_memory=max_memory_mapping
)`}}),ce=new he({}),{c(){m=o("meta"),j=c(),h=o("h1"),v=o("a"),Fe=o("span"),_(L.$$.fragment),dt=c(),Ve=o("span"),mt=r("Inferenza efficiente su GPU singola"),Mi=c(),w=o("p"),ft=r("Questo documento sar\xE0 presto completato con informazioni su come effetture l\u2019inferenza su una singola GPU. Nel frattempo \xE8 possibile consultare "),be=o("a"),ht=r("la guida per l\u2019addestramento su una singola GPU"),bt=r(" e "),ve=o("a"),vt=r("la guida per l\u2019inferenza su CPU"),gt=r("."),$i=c(),x=o("h2"),N=o("a"),Se=o("span"),_(Q.$$.fragment),zt=c(),ge=o("span"),Xe=o("code"),_t=r("BetterTransformer"),Et=r(" per l'inferenza pi\xF9 veloce"),wi=c(),G=o("p"),yt=r("Abbiamo recentemente integrato "),Be=o("code"),Ut=r("BetterTransformer"),Mt=r(" per velocizzare l\u2019inferenza su GPU per modelli di testo, immagini e audio. Per maggiori dettagli, consultare la documentazione su questa integrazione "),H=o("a"),$t=r("qui"),wt=r("."),Gi=c(),C=o("h2"),Z=o("a"),Oe=o("span"),_(K.$$.fragment),Gt=c(),ee=o("span"),Pt=r("Integrazione di "),De=o("code"),Tt=r("bitsandbytes"),It=r(" per Int8 mixed-precision matrix decomposition"),Pi=c(),_(F.$$.fragment),Ti=c(),f=o("p"),xt=r("Dal paper "),ie=o("a"),Ye=o("code"),Ct=r("LLM.int8() : 8-bit Matrix Multiplication for Transformers at Scale"),Jt=r(`, noi supportiamo l\u2019integrazione di Hugging Face per tutti i modelli dell\u2019Hub con poche righe di codice.
Il metodo `),Le=o("code"),kt=r("nn.Linear"),qt=r(" riduce la dimensione di 2 per i pesi "),Qe=o("code"),At=r("float16"),Rt=r(" e "),He=o("code"),Wt=r("bfloat16"),jt=r(" e di 4 per i pesi "),Ke=o("code"),Nt=r("float32"),Zt=r(", con un impatto quasi nullo sulla qualit\xE0, operando sugli outlier in half-precision."),Ii=c(),ze=o("p"),_e=o("img"),xi=c(),P=o("p"),Ft=r(`Il metodo Int8 mixed-precision matrix decomposition funziona separando la moltiplicazione tra matrici in due flussi: (1) una matrice di flusso di outlier di caratteristiche sistematiche moltiplicata in fp16, (2) in flusso regolare di moltiplicazione di matrici int8 (99,9%). Con questo metodo, \xE8 possibile effettutare inferenza int8 per modelli molto grandi senza degrado predittivo.
Per maggiori dettagli sul metodo, consultare il `),te=o("a"),Vt=r("paper"),St=r(" o il nostro "),oe=o("a"),Xt=r("blogpost sull\u2019integrazione"),Bt=r("."),Ci=c(),Ee=o("p"),ye=o("img"),Ji=c(),V=o("p"),Ot=r(`Nota che \xE8 necessaria una GPU per eseguire modelli di tipo mixed-8bit, poich\xE9 i kernel sono stati compilati solo per le GPU. Prima di utilizzare questa funzione, assicurarsi di disporre di memoria sufficiente sulla GPU per memorizzare un quarto del modello (o la met\xE0 se i pesi del modello sono in mezza precisione).
Di seguito sono riportate alcune note per aiutarvi a utilizzare questo modulo, oppure seguite le dimostrazioni su `),Ue=o("a"),Dt=r("Google colab"),Yt=r("."),ki=c(),J=o("h3"),S=o("a"),ei=o("span"),_(le.$$.fragment),Lt=c(),ii=o("span"),Qt=r("Requisiti"),qi=c(),T=o("ul"),k=o("li"),Ht=r("Se si dispone di "),ti=o("code"),Kt=r("bitsandbytes<0.37.0"),eo=r(", assicurarsi di eseguire su GPU NVIDIA che supportano tensor cores a 8 bit (Turing, Ampere o architetture pi\xF9 recenti - ad esempio T4, RTX20s RTX30s, A40-A100). Per "),oi=o("code"),io=r("bitsandbytes>=0.37.0"),to=r(", tutte le GPU dovrebbero essere supportate."),oo=c(),q=o("li"),lo=r("Installare la versione corretta di "),li=o("code"),ao=r("bitsandbytes"),ro=r(` eseguendo:
`),ai=o("code"),so=r("pip install bitsandbytes>=0.31.5"),no=r("."),po=c(),X=o("li"),uo=r("Installare "),ri=o("code"),co=r("accelerate"),mo=c(),si=o("code"),fo=r("pip install accelerate>=0.12.0"),Ai=c(),A=o("h3"),B=o("a"),ni=o("span"),_(ae.$$.fragment),ho=c(),pi=o("span"),bo=r("Esecuzione di modelli mixed-Int8 - configurazione per singola GPU"),Ri=c(),Me=o("p"),vo=r("Dopo aver installato le librerie necessarie, per caricare il tuo modello mixed 8-bit \xE8 il seguente:"),Wi=c(),_(re.$$.fragment),ji=c(),$e=o("p"),go=r("Per la generazione di testo, si consiglia di:"),Ni=c(),O=o("ul"),b=o("li"),zo=r("utilizzare il metodo "),ui=o("code"),_o=r("generate()"),Eo=r(" del modello invece della funzione "),ci=o("code"),yo=r("pipeline()"),Uo=r(". Sebbene l\u2019inferenza sia possibile con la funzione "),di=o("code"),Mo=r("pipeline()"),$o=r(", essa non \xE8 ottimizzata per i modelli mixed-8bit e sar\xE0 pi\xF9 lenta rispetto all\u2019uso del metodo "),mi=o("code"),wo=r("generate()"),Go=r(". Inoltre, alcune strategie di campionamento, come il campionamento nucleaus, non sono supportate dalla funzione "),fi=o("code"),Po=r("pipeline()"),To=r(" per i modelli mixed-8bit."),Io=c(),hi=o("li"),xo=r("collocare tutti gli ingressi sullo stesso dispositivo del modello."),Zi=c(),we=o("p"),Co=r("Ecco un semplice esempio:"),Fi=c(),_(se.$$.fragment),Vi=c(),R=o("h3"),D=o("a"),bi=o("span"),_(ne.$$.fragment),Jo=c(),vi=o("span"),ko=r("Esecuzione di modelli mixed-8bit - configurazione multi GPU"),Si=c(),Ge=o("p"),qo=r("Usare il seguente modo caricare il modello mixed-8bit su pi\xF9 GPU (stesso comando della configurazione a GPU singola):"),Xi=c(),_(pe.$$.fragment),Bi=c(),I=o("p"),Ao=r("Puoi controllare la RAM della GPU che si vuole allocare su ogni GPU usando "),gi=o("code"),Ro=r("accelerate"),Wo=r(". Utilizzare l\u2019argomento "),zi=o("code"),jo=r("max_memory"),No=r(" come segue:"),Oi=c(),_(ue.$$.fragment),Di=c(),Pe=o("p"),Zo=r("In questo esempio, la prima GPU utilizzer\xE0 1 GB di memoria e la seconda 2 GB."),Yi=c(),W=o("h3"),Y=o("a"),_i=o("span"),_(ce.$$.fragment),Fo=c(),Ei=o("span"),Vo=r("Colab demos"),Li=c(),Te=o("p"),So=r(`Con questo metodo \xE8 possibile inferire modelli che prima non era possibile inferire su Google Colab.
Guardate la demo per l\u2019esecuzione di T5-11b (42GB in fp32)! Utilizzo la quantizzazione a 8 bit su Google Colab:`),Qi=c(),Ie=o("p"),de=o("a"),xe=o("img"),Hi=c(),Ce=o("p"),Xo=r("Oppure questa demo di BLOOM-3B:"),Ki=c(),Je=o("p"),me=o("a"),ke=o("img"),this.h()},l(e){const n=sa('[data-svelte="svelte-1phssyn"]',document.head);m=l(n,"META",{name:!0,content:!0}),n.forEach(t),j=d(e),h=l(e,"H1",{class:!0});var fe=a(h);v=l(fe,"A",{id:!0,class:!0,href:!0});var Qo=a(v);Fe=l(Qo,"SPAN",{});var Ho=a(Fe);E(L.$$.fragment,Ho),Ho.forEach(t),Qo.forEach(t),dt=d(fe),Ve=l(fe,"SPAN",{});var Ko=a(Ve);mt=s(Ko,"Inferenza efficiente su GPU singola"),Ko.forEach(t),fe.forEach(t),Mi=d(e),w=l(e,"P",{});var qe=a(w);ft=s(qe,"Questo documento sar\xE0 presto completato con informazioni su come effetture l\u2019inferenza su una singola GPU. Nel frattempo \xE8 possibile consultare "),be=l(qe,"A",{href:!0});var el=a(be);ht=s(el,"la guida per l\u2019addestramento su una singola GPU"),el.forEach(t),bt=s(qe," e "),ve=l(qe,"A",{href:!0});var il=a(ve);vt=s(il,"la guida per l\u2019inferenza su CPU"),il.forEach(t),gt=s(qe,"."),qe.forEach(t),$i=d(e),x=l(e,"H2",{class:!0});var it=a(x);N=l(it,"A",{id:!0,class:!0,href:!0});var tl=a(N);Se=l(tl,"SPAN",{});var ol=a(Se);E(Q.$$.fragment,ol),ol.forEach(t),tl.forEach(t),zt=d(it),ge=l(it,"SPAN",{});var Bo=a(ge);Xe=l(Bo,"CODE",{});var ll=a(Xe);_t=s(ll,"BetterTransformer"),ll.forEach(t),Et=s(Bo," per l'inferenza pi\xF9 veloce"),Bo.forEach(t),it.forEach(t),wi=d(e),G=l(e,"P",{});var Ae=a(G);yt=s(Ae,"Abbiamo recentemente integrato "),Be=l(Ae,"CODE",{});var al=a(Be);Ut=s(al,"BetterTransformer"),al.forEach(t),Mt=s(Ae," per velocizzare l\u2019inferenza su GPU per modelli di testo, immagini e audio. Per maggiori dettagli, consultare la documentazione su questa integrazione "),H=l(Ae,"A",{href:!0,rel:!0});var rl=a(H);$t=s(rl,"qui"),rl.forEach(t),wt=s(Ae,"."),Ae.forEach(t),Gi=d(e),C=l(e,"H2",{class:!0});var tt=a(C);Z=l(tt,"A",{id:!0,class:!0,href:!0});var sl=a(Z);Oe=l(sl,"SPAN",{});var nl=a(Oe);E(K.$$.fragment,nl),nl.forEach(t),sl.forEach(t),Gt=d(tt),ee=l(tt,"SPAN",{});var ot=a(ee);Pt=s(ot,"Integrazione di "),De=l(ot,"CODE",{});var pl=a(De);Tt=s(pl,"bitsandbytes"),pl.forEach(t),It=s(ot," per Int8 mixed-precision matrix decomposition"),ot.forEach(t),tt.forEach(t),Pi=d(e),E(F.$$.fragment,e),Ti=d(e),f=l(e,"P",{});var g=a(f);xt=s(g,"Dal paper "),ie=l(g,"A",{href:!0,rel:!0});var ul=a(ie);Ye=l(ul,"CODE",{});var cl=a(Ye);Ct=s(cl,"LLM.int8() : 8-bit Matrix Multiplication for Transformers at Scale"),cl.forEach(t),ul.forEach(t),Jt=s(g,`, noi supportiamo l\u2019integrazione di Hugging Face per tutti i modelli dell\u2019Hub con poche righe di codice.
Il metodo `),Le=l(g,"CODE",{});var dl=a(Le);kt=s(dl,"nn.Linear"),dl.forEach(t),qt=s(g," riduce la dimensione di 2 per i pesi "),Qe=l(g,"CODE",{});var ml=a(Qe);At=s(ml,"float16"),ml.forEach(t),Rt=s(g," e "),He=l(g,"CODE",{});var fl=a(He);Wt=s(fl,"bfloat16"),fl.forEach(t),jt=s(g," e di 4 per i pesi "),Ke=l(g,"CODE",{});var hl=a(Ke);Nt=s(hl,"float32"),hl.forEach(t),Zt=s(g,", con un impatto quasi nullo sulla qualit\xE0, operando sugli outlier in half-precision."),g.forEach(t),Ii=d(e),ze=l(e,"P",{});var bl=a(ze);_e=l(bl,"IMG",{src:!0,alt:!0}),bl.forEach(t),xi=d(e),P=l(e,"P",{});var Re=a(P);Ft=s(Re,`Il metodo Int8 mixed-precision matrix decomposition funziona separando la moltiplicazione tra matrici in due flussi: (1) una matrice di flusso di outlier di caratteristiche sistematiche moltiplicata in fp16, (2) in flusso regolare di moltiplicazione di matrici int8 (99,9%). Con questo metodo, \xE8 possibile effettutare inferenza int8 per modelli molto grandi senza degrado predittivo.
Per maggiori dettagli sul metodo, consultare il `),te=l(Re,"A",{href:!0,rel:!0});var vl=a(te);Vt=s(vl,"paper"),vl.forEach(t),St=s(Re," o il nostro "),oe=l(Re,"A",{href:!0,rel:!0});var gl=a(oe);Xt=s(gl,"blogpost sull\u2019integrazione"),gl.forEach(t),Bt=s(Re,"."),Re.forEach(t),Ci=d(e),Ee=l(e,"P",{});var zl=a(Ee);ye=l(zl,"IMG",{src:!0,alt:!0}),zl.forEach(t),Ji=d(e),V=l(e,"P",{});var lt=a(V);Ot=s(lt,`Nota che \xE8 necessaria una GPU per eseguire modelli di tipo mixed-8bit, poich\xE9 i kernel sono stati compilati solo per le GPU. Prima di utilizzare questa funzione, assicurarsi di disporre di memoria sufficiente sulla GPU per memorizzare un quarto del modello (o la met\xE0 se i pesi del modello sono in mezza precisione).
Di seguito sono riportate alcune note per aiutarvi a utilizzare questo modulo, oppure seguite le dimostrazioni su `),Ue=l(lt,"A",{href:!0});var _l=a(Ue);Dt=s(_l,"Google colab"),_l.forEach(t),Yt=s(lt,"."),lt.forEach(t),ki=d(e),J=l(e,"H3",{class:!0});var at=a(J);S=l(at,"A",{id:!0,class:!0,href:!0});var El=a(S);ei=l(El,"SPAN",{});var yl=a(ei);E(le.$$.fragment,yl),yl.forEach(t),El.forEach(t),Lt=d(at),ii=l(at,"SPAN",{});var Ul=a(ii);Qt=s(Ul,"Requisiti"),Ul.forEach(t),at.forEach(t),qi=d(e),T=l(e,"UL",{});var We=a(T);k=l(We,"LI",{});var je=a(k);Ht=s(je,"Se si dispone di "),ti=l(je,"CODE",{});var Ml=a(ti);Kt=s(Ml,"bitsandbytes<0.37.0"),Ml.forEach(t),eo=s(je,", assicurarsi di eseguire su GPU NVIDIA che supportano tensor cores a 8 bit (Turing, Ampere o architetture pi\xF9 recenti - ad esempio T4, RTX20s RTX30s, A40-A100). Per "),oi=l(je,"CODE",{});var $l=a(oi);io=s($l,"bitsandbytes>=0.37.0"),$l.forEach(t),to=s(je,", tutte le GPU dovrebbero essere supportate."),je.forEach(t),oo=d(We),q=l(We,"LI",{});var Ne=a(q);lo=s(Ne,"Installare la versione corretta di "),li=l(Ne,"CODE",{});var wl=a(li);ao=s(wl,"bitsandbytes"),wl.forEach(t),ro=s(Ne,` eseguendo:
`),ai=l(Ne,"CODE",{});var Gl=a(ai);so=s(Gl,"pip install bitsandbytes>=0.31.5"),Gl.forEach(t),no=s(Ne,"."),Ne.forEach(t),po=d(We),X=l(We,"LI",{});var yi=a(X);uo=s(yi,"Installare "),ri=l(yi,"CODE",{});var Pl=a(ri);co=s(Pl,"accelerate"),Pl.forEach(t),mo=d(yi),si=l(yi,"CODE",{});var Tl=a(si);fo=s(Tl,"pip install accelerate>=0.12.0"),Tl.forEach(t),yi.forEach(t),We.forEach(t),Ai=d(e),A=l(e,"H3",{class:!0});var rt=a(A);B=l(rt,"A",{id:!0,class:!0,href:!0});var Il=a(B);ni=l(Il,"SPAN",{});var xl=a(ni);E(ae.$$.fragment,xl),xl.forEach(t),Il.forEach(t),ho=d(rt),pi=l(rt,"SPAN",{});var Cl=a(pi);bo=s(Cl,"Esecuzione di modelli mixed-Int8 - configurazione per singola GPU"),Cl.forEach(t),rt.forEach(t),Ri=d(e),Me=l(e,"P",{});var Jl=a(Me);vo=s(Jl,"Dopo aver installato le librerie necessarie, per caricare il tuo modello mixed 8-bit \xE8 il seguente:"),Jl.forEach(t),Wi=d(e),E(re.$$.fragment,e),ji=d(e),$e=l(e,"P",{});var kl=a($e);go=s(kl,"Per la generazione di testo, si consiglia di:"),kl.forEach(t),Ni=d(e),O=l(e,"UL",{});var st=a(O);b=l(st,"LI",{});var z=a(b);zo=s(z,"utilizzare il metodo "),ui=l(z,"CODE",{});var ql=a(ui);_o=s(ql,"generate()"),ql.forEach(t),Eo=s(z," del modello invece della funzione "),ci=l(z,"CODE",{});var Al=a(ci);yo=s(Al,"pipeline()"),Al.forEach(t),Uo=s(z,". Sebbene l\u2019inferenza sia possibile con la funzione "),di=l(z,"CODE",{});var Rl=a(di);Mo=s(Rl,"pipeline()"),Rl.forEach(t),$o=s(z,", essa non \xE8 ottimizzata per i modelli mixed-8bit e sar\xE0 pi\xF9 lenta rispetto all\u2019uso del metodo "),mi=l(z,"CODE",{});var Wl=a(mi);wo=s(Wl,"generate()"),Wl.forEach(t),Go=s(z,". Inoltre, alcune strategie di campionamento, come il campionamento nucleaus, non sono supportate dalla funzione "),fi=l(z,"CODE",{});var jl=a(fi);Po=s(jl,"pipeline()"),jl.forEach(t),To=s(z," per i modelli mixed-8bit."),z.forEach(t),Io=d(st),hi=l(st,"LI",{});var Nl=a(hi);xo=s(Nl,"collocare tutti gli ingressi sullo stesso dispositivo del modello."),Nl.forEach(t),st.forEach(t),Zi=d(e),we=l(e,"P",{});var Zl=a(we);Co=s(Zl,"Ecco un semplice esempio:"),Zl.forEach(t),Fi=d(e),E(se.$$.fragment,e),Vi=d(e),R=l(e,"H3",{class:!0});var nt=a(R);D=l(nt,"A",{id:!0,class:!0,href:!0});var Fl=a(D);bi=l(Fl,"SPAN",{});var Vl=a(bi);E(ne.$$.fragment,Vl),Vl.forEach(t),Fl.forEach(t),Jo=d(nt),vi=l(nt,"SPAN",{});var Sl=a(vi);ko=s(Sl,"Esecuzione di modelli mixed-8bit - configurazione multi GPU"),Sl.forEach(t),nt.forEach(t),Si=d(e),Ge=l(e,"P",{});var Xl=a(Ge);qo=s(Xl,"Usare il seguente modo caricare il modello mixed-8bit su pi\xF9 GPU (stesso comando della configurazione a GPU singola):"),Xl.forEach(t),Xi=d(e),E(pe.$$.fragment,e),Bi=d(e),I=l(e,"P",{});var Ze=a(I);Ao=s(Ze,"Puoi controllare la RAM della GPU che si vuole allocare su ogni GPU usando "),gi=l(Ze,"CODE",{});var Bl=a(gi);Ro=s(Bl,"accelerate"),Bl.forEach(t),Wo=s(Ze,". Utilizzare l\u2019argomento "),zi=l(Ze,"CODE",{});var Ol=a(zi);jo=s(Ol,"max_memory"),Ol.forEach(t),No=s(Ze," come segue:"),Ze.forEach(t),Oi=d(e),E(ue.$$.fragment,e),Di=d(e),Pe=l(e,"P",{});var Dl=a(Pe);Zo=s(Dl,"In questo esempio, la prima GPU utilizzer\xE0 1 GB di memoria e la seconda 2 GB."),Dl.forEach(t),Yi=d(e),W=l(e,"H3",{class:!0});var pt=a(W);Y=l(pt,"A",{id:!0,class:!0,href:!0});var Yl=a(Y);_i=l(Yl,"SPAN",{});var Ll=a(_i);E(ce.$$.fragment,Ll),Ll.forEach(t),Yl.forEach(t),Fo=d(pt),Ei=l(pt,"SPAN",{});var Ql=a(Ei);Vo=s(Ql,"Colab demos"),Ql.forEach(t),pt.forEach(t),Li=d(e),Te=l(e,"P",{});var Hl=a(Te);So=s(Hl,`Con questo metodo \xE8 possibile inferire modelli che prima non era possibile inferire su Google Colab.
Guardate la demo per l\u2019esecuzione di T5-11b (42GB in fp32)! Utilizzo la quantizzazione a 8 bit su Google Colab:`),Hl.forEach(t),Qi=d(e),Ie=l(e,"P",{});var Kl=a(Ie);de=l(Kl,"A",{href:!0,rel:!0});var ea=a(de);xe=l(ea,"IMG",{src:!0,alt:!0}),ea.forEach(t),Kl.forEach(t),Hi=d(e),Ce=l(e,"P",{});var ia=a(Ce);Xo=s(ia,"Oppure questa demo di BLOOM-3B:"),ia.forEach(t),Ki=d(e),Je=l(e,"P",{});var ta=a(Je);me=l(ta,"A",{href:!0,rel:!0});var oa=a(me);ke=l(oa,"IMG",{src:!0,alt:!0}),oa.forEach(t),ta.forEach(t),this.h()},h(){u(m,"name","hf:doc:metadata"),u(m,"content",JSON.stringify(da)),u(v,"id","inferenza-efficiente-su-gpu-singola"),u(v,"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"),u(v,"href","#inferenza-efficiente-su-gpu-singola"),u(h,"class","relative group"),u(be,"href","perf_train_gpu_one"),u(ve,"href","perf_infer_cpu"),u(N,"id","bettertransformer-per-linferenza-pi-veloce"),u(N,"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"),u(N,"href","#bettertransformer-per-linferenza-pi-veloce"),u(x,"class","relative group"),u(H,"href","https://huggingface.co/docs/optimum/bettertransformer/overview"),u(H,"rel","nofollow"),u(Z,"id","integrazione-di-bitsandbytes-per-int8-mixedprecision-matrix-decomposition"),u(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"),u(Z,"href","#integrazione-di-bitsandbytes-per-int8-mixedprecision-matrix-decomposition"),u(C,"class","relative group"),u(ie,"href","https://arxiv.org/abs/2208.07339"),u(ie,"rel","nofollow"),ut(_e.src,Oo="https://cdn-uploads.huggingface.co/production/uploads/1659861207959-62441d1d9fdefb55a0b7d12c.png")||u(_e,"src",Oo),u(_e,"alt","HFxbitsandbytes.png"),u(te,"href","https://arxiv.org/abs/2208.07339"),u(te,"rel","nofollow"),u(oe,"href","https://huggingface.co/blog/hf-bitsandbytes-integration"),u(oe,"rel","nofollow"),ut(ye.src,Do="https://cdn-uploads.huggingface.co/production/uploads/1660567469965-62441d1d9fdefb55a0b7d12c.gif")||u(ye,"src",Do),u(ye,"alt","MixedInt8.gif"),u(Ue,"href","#colab-demos"),u(S,"id","requisiti"),u(S,"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"),u(S,"href","#requisiti"),u(J,"class","relative group"),u(B,"id","esecuzione-di-modelli-mixedint8-configurazione-per-singola-gpu"),u(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"),u(B,"href","#esecuzione-di-modelli-mixedint8-configurazione-per-singola-gpu"),u(A,"class","relative group"),u(D,"id","esecuzione-di-modelli-mixed8bit-configurazione-multi-gpu"),u(D,"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"),u(D,"href","#esecuzione-di-modelli-mixed8bit-configurazione-multi-gpu"),u(R,"class","relative group"),u(Y,"id","colab-demos"),u(Y,"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"),u(Y,"href","#colab-demos"),u(W,"class","relative group"),ut(xe.src,Yo="https://colab.research.google.com/assets/colab-badge.svg")||u(xe,"src",Yo),u(xe,"alt","Open In Colab: T5-11b demo"),u(de,"href","https://colab.research.google.com/drive/1YORPWx4okIHXnjW7MSAidXN29mPVNT7F?usp=sharing"),u(de,"rel","nofollow"),ut(ke.src,Lo="https://colab.research.google.com/assets/colab-badge.svg")||u(ke,"src",Lo),u(ke,"alt","Open In Colab: BLOOM-3b demo"),u(me,"href","https://colab.research.google.com/drive/1qOjXfQIAULfKvZqwCen8-MoWKGdSatZ4?usp=sharing"),u(me,"rel","nofollow")},m(e,n){i(document.head,m),p(e,j,n),p(e,h,n),i(h,v),i(v,Fe),y(L,Fe,null),i(h,dt),i(h,Ve),i(Ve,mt),p(e,Mi,n),p(e,w,n),i(w,ft),i(w,be),i(be,ht),i(w,bt),i(w,ve),i(ve,vt),i(w,gt),p(e,$i,n),p(e,x,n),i(x,N),i(N,Se),y(Q,Se,null),i(x,zt),i(x,ge),i(ge,Xe),i(Xe,_t),i(ge,Et),p(e,wi,n),p(e,G,n),i(G,yt),i(G,Be),i(Be,Ut),i(G,Mt),i(G,H),i(H,$t),i(G,wt),p(e,Gi,n),p(e,C,n),i(C,Z),i(Z,Oe),y(K,Oe,null),i(C,Gt),i(C,ee),i(ee,Pt),i(ee,De),i(De,Tt),i(ee,It),p(e,Pi,n),y(F,e,n),p(e,Ti,n),p(e,f,n),i(f,xt),i(f,ie),i(ie,Ye),i(Ye,Ct),i(f,Jt),i(f,Le),i(Le,kt),i(f,qt),i(f,Qe),i(Qe,At),i(f,Rt),i(f,He),i(He,Wt),i(f,jt),i(f,Ke),i(Ke,Nt),i(f,Zt),p(e,Ii,n),p(e,ze,n),i(ze,_e),p(e,xi,n),p(e,P,n),i(P,Ft),i(P,te),i(te,Vt),i(P,St),i(P,oe),i(oe,Xt),i(P,Bt),p(e,Ci,n),p(e,Ee,n),i(Ee,ye),p(e,Ji,n),p(e,V,n),i(V,Ot),i(V,Ue),i(Ue,Dt),i(V,Yt),p(e,ki,n),p(e,J,n),i(J,S),i(S,ei),y(le,ei,null),i(J,Lt),i(J,ii),i(ii,Qt),p(e,qi,n),p(e,T,n),i(T,k),i(k,Ht),i(k,ti),i(ti,Kt),i(k,eo),i(k,oi),i(oi,io),i(k,to),i(T,oo),i(T,q),i(q,lo),i(q,li),i(li,ao),i(q,ro),i(q,ai),i(ai,so),i(q,no),i(T,po),i(T,X),i(X,uo),i(X,ri),i(ri,co),i(X,mo),i(X,si),i(si,fo),p(e,Ai,n),p(e,A,n),i(A,B),i(B,ni),y(ae,ni,null),i(A,ho),i(A,pi),i(pi,bo),p(e,Ri,n),p(e,Me,n),i(Me,vo),p(e,Wi,n),y(re,e,n),p(e,ji,n),p(e,$e,n),i($e,go),p(e,Ni,n),p(e,O,n),i(O,b),i(b,zo),i(b,ui),i(ui,_o),i(b,Eo),i(b,ci),i(ci,yo),i(b,Uo),i(b,di),i(di,Mo),i(b,$o),i(b,mi),i(mi,wo),i(b,Go),i(b,fi),i(fi,Po),i(b,To),i(O,Io),i(O,hi),i(hi,xo),p(e,Zi,n),p(e,we,n),i(we,Co),p(e,Fi,n),y(se,e,n),p(e,Vi,n),p(e,R,n),i(R,D),i(D,bi),y(ne,bi,null),i(R,Jo),i(R,vi),i(vi,ko),p(e,Si,n),p(e,Ge,n),i(Ge,qo),p(e,Xi,n),y(pe,e,n),p(e,Bi,n),p(e,I,n),i(I,Ao),i(I,gi),i(gi,Ro),i(I,Wo),i(I,zi),i(zi,jo),i(I,No),p(e,Oi,n),y(ue,e,n),p(e,Di,n),p(e,Pe,n),i(Pe,Zo),p(e,Yi,n),p(e,W,n),i(W,Y),i(Y,_i),y(ce,_i,null),i(W,Fo),i(W,Ei),i(Ei,Vo),p(e,Li,n),p(e,Te,n),i(Te,So),p(e,Qi,n),p(e,Ie,n),i(Ie,de),i(de,xe),p(e,Hi,n),p(e,Ce,n),i(Ce,Xo),p(e,Ki,n),p(e,Je,n),i(Je,me),i(me,ke),et=!0},p(e,[n]){const fe={};n&2&&(fe.$$scope={dirty:n,ctx:e}),F.$set(fe)},i(e){et||(U(L.$$.fragment,e),U(Q.$$.fragment,e),U(K.$$.fragment,e),U(F.$$.fragment,e),U(le.$$.fragment,e),U(ae.$$.fragment,e),U(re.$$.fragment,e),U(se.$$.fragment,e),U(ne.$$.fragment,e),U(pe.$$.fragment,e),U(ue.$$.fragment,e),U(ce.$$.fragment,e),et=!0)},o(e){M(L.$$.fragment,e),M(Q.$$.fragment,e),M(K.$$.fragment,e),M(F.$$.fragment,e),M(le.$$.fragment,e),M(ae.$$.fragment,e),M(re.$$.fragment,e),M(se.$$.fragment,e),M(ne.$$.fragment,e),M(pe.$$.fragment,e),M(ue.$$.fragment,e),M(ce.$$.fragment,e),et=!1},d(e){t(m),e&&t(j),e&&t(h),$(L),e&&t(Mi),e&&t(w),e&&t($i),e&&t(x),$(Q),e&&t(wi),e&&t(G),e&&t(Gi),e&&t(C),$(K),e&&t(Pi),$(F,e),e&&t(Ti),e&&t(f),e&&t(Ii),e&&t(ze),e&&t(xi),e&&t(P),e&&t(Ci),e&&t(Ee),e&&t(Ji),e&&t(V),e&&t(ki),e&&t(J),$(le),e&&t(qi),e&&t(T),e&&t(Ai),e&&t(A),$(ae),e&&t(Ri),e&&t(Me),e&&t(Wi),$(re,e),e&&t(ji),e&&t($e),e&&t(Ni),e&&t(O),e&&t(Zi),e&&t(we),e&&t(Fi),$(se,e),e&&t(Vi),e&&t(R),$(ne),e&&t(Si),e&&t(Ge),e&&t(Xi),$(pe,e),e&&t(Bi),e&&t(I),e&&t(Oi),$(ue,e),e&&t(Di),e&&t(Pe),e&&t(Yi),e&&t(W),$(ce),e&&t(Li),e&&t(Te),e&&t(Qi),e&&t(Ie),e&&t(Hi),e&&t(Ce),e&&t(Ki),e&&t(Je)}}}const da={local:"inferenza-efficiente-su-gpu-singola",sections:[{local:"bettertransformer-per-linferenza-pi-veloce",title:"`BetterTransformer` per l'inferenza pi\xF9 veloce"},{local:"integrazione-di-bitsandbytes-per-int8-mixedprecision-matrix-decomposition",sections:[{local:"requisiti",title:"Requisiti"},{local:"esecuzione-di-modelli-mixedint8-configurazione-per-singola-gpu",title:"Esecuzione di modelli mixed-Int8 - configurazione per singola GPU"},{local:"esecuzione-di-modelli-mixed8bit-configurazione-multi-gpu",title:"Esecuzione di modelli mixed-8bit - configurazione multi GPU"},{local:"colab-demos",title:"Colab demos"}],title:"Integrazione di `bitsandbytes` per Int8 mixed-precision matrix decomposition"}],title:"Inferenza efficiente su GPU singola"};function ma(Ui){return na(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ga extends la{constructor(m){super();aa(this,m,ma,ca,ra,{})}}export{ga as default,da as metadata};
