import{S as gz,i as zz,s as Ez,e as o,k as p,w as y,t as n,M as wz,c as a,d as l,m as d,a as i,x as b,h as s,b as u,G as t,g as c,y as g,q as z,o as E,B as w,v as _z,L as yz}from"../chunks/vendor-hf-doc-builder.js";import{T as oa}from"../chunks/Tip-hf-doc-builder.js";import{I as G}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as B}from"../chunks/CodeBlock-hf-doc-builder.js";import{F as jz,M as bz}from"../chunks/Markdown-hf-doc-builder.js";import"../chunks/IconTensorflow-hf-doc-builder.js";function Tz(R){let m,j,f,_,U,T,A,N,C,$,k,I,Z;return m=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTBBJTBBJTIzJTIwTG9hZCUyMHRva2VuaXplciUyMGFuZCUyMFB5VG9yY2glMjB3ZWlnaHRzJTIwZm9ybSUyMHRoZSUyMEh1YiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyKSUwQXB0X21vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIpJTBBJTIzJTIwU2F2ZSUyMHRvJTIwZGlzayUwQXRva2VuaXplci5zYXZlX3ByZXRyYWluZWQoJTIybG9jYWwtcHQtY2hlY2twb2ludCUyMiklMEFwdF9tb2RlbC5zYXZlX3ByZXRyYWluZWQoJTIybG9jYWwtcHQtY2hlY2twb2ludCUyMik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForSequenceClassification

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># Load tokenizer and PyTorch weights form the Hub</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>pt_model = AutoModelForSequenceClassification.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># Save to disk</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer.save_pretrained(<span class="hljs-string">&quot;local-pt-checkpoint&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>pt_model.save_pretrained(<span class="hljs-string">&quot;local-pt-checkpoint&quot;</span>)`}}),I=new B({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0Rsb2NhbC1wdC1jaGVja3BvaW50JTIwb25ueCUyRg==",highlighted:"python -m transformers.onnx --model=local-pt-checkpoint onnx/"}}),{c(){y(m.$$.fragment),j=p(),f=o("p"),_=n("Una volta salvato il checkpoint, possiamo esportarlo su ONNX puntando l\u2019argomento "),U=o("code"),T=n("--model"),A=n(`
del pacchetto `),N=o("code"),C=n("transformers.onnx"),$=n(" nella directory desiderata:"),k=p(),y(I.$$.fragment)},l(v){b(m.$$.fragment,v),j=d(v),f=a(v,"P",{});var J=i(f);_=s(J,"Una volta salvato il checkpoint, possiamo esportarlo su ONNX puntando l\u2019argomento "),U=a(J,"CODE",{});var X=i(U);T=s(X,"--model"),X.forEach(l),A=s(J,`
del pacchetto `),N=a(J,"CODE",{});var P=i(N);C=s(P,"transformers.onnx"),P.forEach(l),$=s(J," nella directory desiderata:"),J.forEach(l),k=d(v),b(I.$$.fragment,v)},m(v,J){g(m,v,J),c(v,j,J),c(v,f,J),t(f,_),t(f,U),t(U,T),t(f,A),t(f,N),t(N,C),t(f,$),c(v,k,J),g(I,v,J),Z=!0},p:yz,i(v){Z||(z(m.$$.fragment,v),z(I.$$.fragment,v),Z=!0)},o(v){E(m.$$.fragment,v),E(I.$$.fragment,v),Z=!1},d(v){w(m,v),v&&l(j),v&&l(f),v&&l(k),w(I,v)}}}function Uz(R){let m,j;return m=new bz({props:{$$slots:{default:[Tz]},$$scope:{ctx:R}}}),{c(){y(m.$$.fragment)},l(f){b(m.$$.fragment,f)},m(f,_){g(m,f,_),j=!0},p(f,_){const U={};_&2&&(U.$$scope={dirty:_,ctx:f}),m.$set(U)},i(f){j||(z(m.$$.fragment,f),j=!0)},o(f){E(m.$$.fragment,f),j=!1},d(f){w(m,f)}}}function $z(R){let m,j,f,_,U,T,A,N,C,$,k,I,Z;return m=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEElMjMlMjBMb2FkJTIwdG9rZW5pemVyJTIwYW5kJTIwVGVuc29yRmxvdyUyMHdlaWdodHMlMjBmcm9tJTIwdGhlJTIwSHViJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIpJTBBdGZfbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyKSUwQSUyMyUyMFNhdmUlMjB0byUyMGRpc2slMEF0b2tlbml6ZXIuc2F2ZV9wcmV0cmFpbmVkKCUyMmxvY2FsLXRmLWNoZWNrcG9pbnQlMjIpJTBBdGZfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmxvY2FsLXRmLWNoZWNrcG9pbnQlMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForSequenceClassification

<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># Load tokenizer and TensorFlow weights from the Hub</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model = TFAutoModelForSequenceClassification.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># Save to disk</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer.save_pretrained(<span class="hljs-string">&quot;local-tf-checkpoint&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model.save_pretrained(<span class="hljs-string">&quot;local-tf-checkpoint&quot;</span>)`}}),I=new B({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0Rsb2NhbC10Zi1jaGVja3BvaW50JTIwb25ueCUyRg==",highlighted:"python -m transformers.onnx --model=local-tf-checkpoint onnx/"}}),{c(){y(m.$$.fragment),j=p(),f=o("p"),_=n("Once the checkpoint is saved, we can export it to ONNX by pointing the "),U=o("code"),T=n("--model"),A=n(`
argument of the `),N=o("code"),C=n("transformers.onnx"),$=n(" package to the desired directory:"),k=p(),y(I.$$.fragment)},l(v){b(m.$$.fragment,v),j=d(v),f=a(v,"P",{});var J=i(f);_=s(J,"Once the checkpoint is saved, we can export it to ONNX by pointing the "),U=a(J,"CODE",{});var X=i(U);T=s(X,"--model"),X.forEach(l),A=s(J,`
argument of the `),N=a(J,"CODE",{});var P=i(N);C=s(P,"transformers.onnx"),P.forEach(l),$=s(J," package to the desired directory:"),J.forEach(l),k=d(v),b(I.$$.fragment,v)},m(v,J){g(m,v,J),c(v,j,J),c(v,f,J),t(f,_),t(f,U),t(U,T),t(f,A),t(f,N),t(N,C),t(f,$),c(v,k,J),g(I,v,J),Z=!0},p:yz,i(v){Z||(z(m.$$.fragment,v),z(I.$$.fragment,v),Z=!0)},o(v){E(m.$$.fragment,v),E(I.$$.fragment,v),Z=!1},d(v){w(m,v),v&&l(j),v&&l(f),v&&l(k),w(I,v)}}}function Jz(R){let m,j;return m=new bz({props:{$$slots:{default:[$z]},$$scope:{ctx:R}}}),{c(){y(m.$$.fragment)},l(f){b(m.$$.fragment,f)},m(f,_){g(m,f,_),j=!0},p(f,_){const U={};_&2&&(U.$$scope={dirty:_,ctx:f}),m.$set(U)},i(f){j||(z(m.$$.fragment,f),j=!0)},o(f){E(m.$$.fragment,f),j=!1},d(f){w(m,f)}}}function Cz(R){let m,j,f,_,U,T,A,N;return{c(){m=o("p"),j=n("Le caratteristiche che hanno un suffisso "),f=o("code"),_=n("wtih-past"),U=n(" (ad es. "),T=o("code"),A=n("causal-lm-with-past"),N=n(`)
corrispondono a topologie di modello con stati nascosti precalcolati (chiave e valori
nei blocchi di attenzione) che possono essere utilizzati per la decodifica autoregressiva veloce.`)},l(C){m=a(C,"P",{});var $=i(m);j=s($,"Le caratteristiche che hanno un suffisso "),f=a($,"CODE",{});var k=i(f);_=s(k,"wtih-past"),k.forEach(l),U=s($," (ad es. "),T=a($,"CODE",{});var I=i(T);A=s(I,"causal-lm-with-past"),I.forEach(l),N=s($,`)
corrispondono a topologie di modello con stati nascosti precalcolati (chiave e valori
nei blocchi di attenzione) che possono essere utilizzati per la decodifica autoregressiva veloce.`),$.forEach(l)},m(C,$){c(C,m,$),t(m,j),t(m,f),t(f,_),t(m,U),t(m,T),t(T,A),t(m,N)},d(C){C&&l(m)}}}function Iz(R){let m,j,f,_,U;return{c(){m=o("p"),j=n(`Un buon modo per implementare una configurazione ONNX personalizzata \xE8 guardare l\u2019implementazione
esistente nel file `),f=o("code"),_=n("configuration_<model_name>.py"),U=n(" di un\u2019architettura simile.")},l(T){m=a(T,"P",{});var A=i(m);j=s(A,`Un buon modo per implementare una configurazione ONNX personalizzata \xE8 guardare l\u2019implementazione
esistente nel file `),f=a(A,"CODE",{});var N=i(f);_=s(N,"configuration_<model_name>.py"),N.forEach(l),U=s(A," di un\u2019architettura simile."),A.forEach(l)},m(T,A){c(T,m,A),t(m,j),t(m,f),t(f,_),t(m,U)},d(T){T&&l(m)}}}function Nz(R){let m,j,f,_,U,T,A,N,C,$,k,I,Z,v,J,X,P,ve,Ge,q,O,ye,ae;return{c(){m=o("p"),j=n("Puoi notare che la propriet\xE0 "),f=o("code"),_=n("inputs"),U=n(" per "),T=o("code"),A=n("DistilBertOnnxConfig"),N=n(` restituisce un
`),C=o("code"),$=n("OrdinatoDict"),k=n(`. Ci\xF2 garantisce che gli input corrispondano alla loro posizione
relativa all\u2019interno del metodo `),I=o("code"),Z=n("PreTrainedModel.forward()"),v=n(` durante il tracciamento del grafico.
Raccomandiamo di usare un `),J=o("code"),X=n("OrderedDict"),P=n(" per le propriet\xE0 "),ve=o("code"),Ge=n("inputs"),q=n(" e "),O=o("code"),ye=n("outputs"),ae=n(`
quando si implementano configurazioni ONNX personalizzate.`)},l(be){m=a(be,"P",{});var W=i(m);j=s(W,"Puoi notare che la propriet\xE0 "),f=a(W,"CODE",{});var eo=i(f);_=s(eo,"inputs"),eo.forEach(l),U=s(W," per "),T=a(W,"CODE",{});var Nt=i(T);A=s(Nt,"DistilBertOnnxConfig"),Nt.forEach(l),N=s(W,` restituisce un
`),C=a(W,"CODE",{});var F=i(C);$=s(F,"OrdinatoDict"),F.forEach(l),k=s(W,`. Ci\xF2 garantisce che gli input corrispondano alla loro posizione
relativa all\u2019interno del metodo `),I=a(W,"CODE",{});var to=i(I);Z=s(to,"PreTrainedModel.forward()"),to.forEach(l),v=s(W,` durante il tracciamento del grafico.
Raccomandiamo di usare un `),J=a(W,"CODE",{});var ie=i(J);X=s(ie,"OrderedDict"),ie.forEach(l),P=s(W," per le propriet\xE0 "),ve=a(W,"CODE",{});var lo=i(ve);Ge=s(lo,"inputs"),lo.forEach(l),q=s(W," e "),O=a(W,"CODE",{});var oo=i(O);ye=s(oo,"outputs"),oo.forEach(l),ae=s(W,`
quando si implementano configurazioni ONNX personalizzate.`),W.forEach(l)},m(be,W){c(be,m,W),t(m,j),t(m,f),t(f,_),t(m,U),t(m,T),t(T,A),t(m,N),t(m,C),t(C,$),t(m,k),t(m,I),t(I,Z),t(m,v),t(m,J),t(J,X),t(m,P),t(m,ve),t(ve,Ge),t(m,q),t(m,O),t(O,ye),t(m,ae)},d(be){be&&l(m)}}}function Az(R){let m,j,f,_,U,T,A,N;return{c(){m=o("p"),j=n("Tutte le propriet\xE0 e i metodi di base associati a "),f=o("code"),_=n("OnnxConfig"),U=n(` e le
altre classi di configurazione possono essere sovrascritte se necessario. Guarda
`),T=o("code"),A=n("BartOnnxConfig"),N=n(" per un esempio avanzato.")},l(C){m=a(C,"P",{});var $=i(m);j=s($,"Tutte le propriet\xE0 e i metodi di base associati a "),f=a($,"CODE",{});var k=i(f);_=s(k,"OnnxConfig"),k.forEach(l),U=s($,` e le
altre classi di configurazione possono essere sovrascritte se necessario. Guarda
`),T=a($,"CODE",{});var I=i(T);A=s(I,"BartOnnxConfig"),I.forEach(l),N=s($," per un esempio avanzato."),$.forEach(l)},m(C,$){c(C,m,$),t(m,j),t(m,f),t(f,_),t(m,U),t(m,T),t(T,A),t(m,N)},d(C){C&&l(m)}}}function kz(R){let m,j,f,_,U,T,A,N,C,$,k;return{c(){m=o("p"),j=n(`Se il tuo modello \xE8 pi\xF9 largo di 2 GB, vedrai che molti file aggiuntivi sono
creati durante l\u2019esportazione. Questo \xE8 `),f=o("em"),_=n("previsto"),U=n(" perch\xE9 ONNX utilizza "),T=o("a"),A=n(`Protocol
Buffer`),N=n(` per memorizzare il modello e
questi hanno un limite di dimensione 2 GB. Vedi la `),C=o("a"),$=n(`Documentazione
ONNX`),k=n(`
per istruzioni su come caricare modelli con dati esterni.`),this.h()},l(I){m=a(I,"P",{});var Z=i(m);j=s(Z,`Se il tuo modello \xE8 pi\xF9 largo di 2 GB, vedrai che molti file aggiuntivi sono
creati durante l\u2019esportazione. Questo \xE8 `),f=a(Z,"EM",{});var v=i(f);_=s(v,"previsto"),v.forEach(l),U=s(Z," perch\xE9 ONNX utilizza "),T=a(Z,"A",{href:!0,rel:!0});var J=i(T);A=s(J,`Protocol
Buffer`),J.forEach(l),N=s(Z,` per memorizzare il modello e
questi hanno un limite di dimensione 2 GB. Vedi la `),C=a(Z,"A",{href:!0,rel:!0});var X=i(C);$=s(X,`Documentazione
ONNX`),X.forEach(l),k=s(Z,`
per istruzioni su come caricare modelli con dati esterni.`),Z.forEach(l),this.h()},h(){u(T,"href","https://developers.google.com/protocol-buffers/"),u(T,"rel","nofollow"),u(C,"href","https://github.com/onnx/onnx/blob/master/docs/ExternalData.md"),u(C,"rel","nofollow")},m(I,Z){c(I,m,Z),t(m,j),t(m,f),t(f,_),t(m,U),t(m,T),t(T,A),t(m,N),t(m,C),t(C,$),t(m,k)},d(I){I&&l(m)}}}function Zz(R){let m,j;return{c(){m=o("p"),j=n(`Questo \xE8 l\u2019inizio dei nostri esperimenti con TorchScript e stiamo ancora esplorando le sue capacit\xE0 con
modelli con variable-input-size. \xC8 una nostra priorit\xE0 e approfondiremo le nostre analisi nelle prossime versioni,
con pi\xF9 esempi di codici, un\u2019implementazione pi\xF9 flessibile e benchmark che confrontano i codici basati su Python con quelli compilati con
TorchScript.`)},l(f){m=a(f,"P",{});var _=i(m);j=s(_,`Questo \xE8 l\u2019inizio dei nostri esperimenti con TorchScript e stiamo ancora esplorando le sue capacit\xE0 con
modelli con variable-input-size. \xC8 una nostra priorit\xE0 e approfondiremo le nostre analisi nelle prossime versioni,
con pi\xF9 esempi di codici, un\u2019implementazione pi\xF9 flessibile e benchmark che confrontano i codici basati su Python con quelli compilati con
TorchScript.`),_.forEach(l)},m(f,_){c(f,m,_),t(m,j)},d(f){f&&l(m)}}}function Bz(R){let m,j,f,_,U,T,A,N,C,$,k,I,Z,v,J,X,P,ve,Ge,q,O,ye,ae,be,W,eo,Nt,F,to,ie,lo,oo,aa,pp,dp,rs,ao,up,cs,Se,mp,ia,fp,hp,ps,io,Mp,ds,h,na,vp,yp,sa,bp,gp,ra,zp,Ep,ca,wp,_p,pa,jp,Tp,da,Up,$p,ua,Jp,Cp,ma,Ip,Np,fa,Ap,kp,ha,Zp,Bp,Ma,Wp,Rp,va,Xp,Gp,ya,Sp,Vp,ba,Qp,Op,ga,Dp,xp,za,Pp,qp,Ea,Fp,Lp,wa,Hp,Yp,_a,Kp,ed,ja,td,ld,Ta,od,ad,Ua,id,nd,$a,sd,rd,Ja,cd,pd,Ca,dd,ud,Ia,md,fd,Na,hd,Md,Aa,vd,yd,ka,bd,gd,Za,zd,Ed,Ba,wd,_d,Wa,jd,Td,Ra,Ud,$d,Xa,Jd,Cd,Ga,Id,us,no,Nd,ms,Ve,At,Ad,Sa,kd,Zd,Bd,Va,Wd,fs,ge,Qe,Qa,kt,Rd,Oa,Xd,hs,so,Gd,Ms,Zt,vs,Oe,Sd,Da,Vd,Qd,ys,Bt,bs,ro,Od,gs,Wt,zs,co,Dd,Es,Rt,ws,ne,xd,xa,Pd,qd,Pa,Fd,Ld,_s,H,Hd,qa,Yd,Kd,Xt,eu,tu,Gt,lu,ou,js,St,Ts,De,au,Fa,iu,nu,Us,Vt,$s,xe,su,Qt,ru,cu,Js,Ot,Cs,po,pu,Is,Pe,Ns,ze,qe,La,Dt,du,Ha,uu,As,Fe,mu,Ya,fu,hu,ks,Le,Ka,xt,ei,Mu,vu,ti,yu,bu,S,Pt,qt,li,gu,zu,oi,Eu,wu,ai,ii,_u,ju,Ft,Lt,ni,Tu,Uu,si,$u,Ju,ri,ci,Cu,Iu,Ht,pi,di,Nu,Au,ui,mi,ku,Zu,Yt,fi,hi,Bu,Wu,Mi,vi,Ru,Xu,Kt,el,yi,Gu,Su,bi,Vu,Qu,gi,zi,Ou,Du,tl,Ei,wi,xu,Pu,_i,ji,qu,Fu,ll,Ti,Ui,Lu,Hu,$i,Ji,Yu,Zs,He,Ku,Ci,em,tm,Bs,ol,Ws,se,lm,Ii,om,am,Ni,im,nm,Rs,al,Xs,uo,sm,Gs,il,Ss,Y,rm,Ai,cm,pm,ki,dm,um,Zi,mm,fm,Vs,Ye,Qs,Ee,Ke,Bi,nl,hm,Wi,Mm,Os,mo,vm,Ds,re,Ri,ym,bm,Xi,gm,zm,Gi,Em,xs,fo,wm,Ps,we,et,Si,sl,_m,Vi,jm,qs,ho,Tm,Fs,ce,Mo,Um,Qi,$m,Jm,vo,Cm,Oi,Im,Nm,yo,Am,Di,km,Ls,tt,Hs,lt,Zm,xi,Bm,Wm,Ys,rl,Ks,D,Rm,Pi,Xm,Gm,qi,Sm,Vm,Fi,Qm,Om,Li,Dm,xm,er,ot,tr,bo,Pm,lr,cl,or,go,qm,ar,pl,ir,zo,Fm,nr,dl,sr,K,Lm,Hi,Hm,Ym,Yi,Km,ef,Ki,tf,lf,rr,ul,cr,at,pr,_e,it,en,ml,of,tn,af,dr,pe,nf,ln,sf,rf,on,cf,pf,ur,fl,mr,V,df,an,uf,mf,nn,ff,hf,sn,Mf,vf,rn,yf,bf,cn,gf,zf,fr,hl,hr,nt,Mr,je,st,pn,Ml,Ef,dn,wf,vr,de,_f,un,jf,Tf,mn,Uf,$f,yr,vl,br,rt,Jf,fn,Cf,If,gr,Te,ct,hn,yl,Nf,Mn,Af,zr,Eo,kf,Er,ue,wo,Zf,vn,Bf,Wf,_o,Rf,yn,Xf,Gf,jo,Sf,bn,Vf,wr,pt,Qf,bl,Of,Df,_r,Ue,dt,gn,gl,xf,zn,Pf,jr,ut,Tr,mt,qf,zl,Ff,Lf,Ur,To,Hf,$r,Uo,Yf,Jr,ft,En,Kf,eh,El,th,wn,lh,oh,Cr,$o,ah,Ir,$e,ht,_n,wl,ih,jn,nh,Nr,Jo,sh,Ar,ee,rh,Tn,ch,ph,Un,dh,uh,$n,mh,fh,kr,Mt,hh,Jn,Mh,vh,Zr,Je,vt,Cn,_l,yh,In,bh,Br,Co,gh,Wr,Io,zh,Rr,No,Nn,Eh,Xr,Ao,wh,Gr,ko,_h,Sr,Ce,yt,An,jl,jh,kn,Th,Vr,Zo,Uh,Qr,Ie,bt,Zn,Tl,$h,Bn,Jh,Or,L,Ch,Wn,Ih,Nh,Rn,Ah,kh,Xn,Zh,Bh,Gn,Wh,Dr,Ul,xr,Ne,gt,Sn,$l,Rh,Vn,Xh,Pr,te,Gh,Qn,Sh,Vh,On,Qh,Oh,Dn,Dh,xh,qr,Jl,Fr,Ae,zt,xn,Cl,Ph,Pn,qh,Lr,Et,Fh,qn,Lh,Hh,Hr,Il,Yr,Bo,Yh,Kr,me,Kh,Nl,eM,tM,Al,lM,oM,ec,fe,Fn,aM,iM,Wo,nM,kl,sM,rM,ke,cM,Zl,pM,dM,Bl,uM,mM,tc,Ze,wt,Ln,Wl,fM,Hn,hM,lc,Q,MM,Rl,vM,yM,Xl,bM,gM,Gl,zM,EM,Sl,wM,_M,Vl,jM,TM,oc,Be,_t,Yn,Ql,UM,Kn,$M,ac,Ro,JM,ic,Xo,We,CM,Ol,IM,NM,Dl,AM,kM,nc,Re,jt,es,xl,ZM,ts,BM,sc,he,WM,Pl,RM,XM,ls,GM,SM,rc,ql,cc,Go,VM,pc,So,QM,dc,Fl,uc,Vo,OM,mc,Ll,fc,Qo,DM,hc,Tt,xM,Hl,PM,qM,Mc;return T=new G({}),ae=new G({}),kt=new G({}),Zt=new B({props:{code:"cGlwJTIwaW5zdGFsbCUyMHRyYW5zZm9ybWVycyU1Qm9ubnglNUQ=",highlighted:"pip install transformers[onnx]"}}),Bt=new B({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0taGVscCUwQSUwQXVzYWdlJTNBJTIwSHVnZ2luZyUyMEZhY2UlMjBUcmFuc2Zvcm1lcnMlMjBPTk5YJTIwZXhwb3J0ZXIlMjAlNUItaCU1RCUyMC1tJTIwTU9ERUwlMjAlNUItLWZlYXR1cmUlMjAlN0JjYXVzYWwtbG0lMkMlMjAuLi4lN0QlNUQlMjAlNUItLW9wc2V0JTIwT1BTRVQlNUQlMjAlNUItLWF0b2wlMjBBVE9MJTVEJTIwb3V0cHV0JTBBJTBBcG9zaXRpb25hbCUyMGFyZ3VtZW50cyUzQSUwQSUyMCUyMG91dHB1dCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFBhdGglMjBpbmRpY2F0aW5nJTIwd2hlcmUlMjB0byUyMHN0b3JlJTIwZ2VuZXJhdGVkJTIwT05OWCUyMG1vZGVsLiUwQSUwQW9wdGlvbmFsJTIwYXJndW1lbnRzJTNBJTBBJTIwJTIwLWglMkMlMjAtLWhlbHAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaG93JTIwdGhpcyUyMGhlbHAlMjBtZXNzYWdlJTIwYW5kJTIwZXhpdCUwQSUyMCUyMC1tJTIwTU9ERUwlMkMlMjAtLW1vZGVsJTIwTU9ERUwlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNb2RlbCUyMElEJTIwb24lMjBodWdnaW5nZmFjZS5jbyUyMG9yJTIwcGF0aCUyMG9uJTIwZGlzayUyMHRvJTIwbG9hZCUyMG1vZGVsJTIwZnJvbS4lMEElMjAlMjAtLWZlYXR1cmUlMjAlN0JjYXVzYWwtbG0lMkMlMjAuLi4lN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBUaGUlMjB0eXBlJTIwb2YlMjBmZWF0dXJlcyUyMHRvJTIwZXhwb3J0JTIwdGhlJTIwbW9kZWwlMjB3aXRoLiUwQSUyMCUyMC0tb3BzZXQlMjBPUFNFVCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME9OTlglMjBvcHNldCUyMHZlcnNpb24lMjB0byUyMGV4cG9ydCUyMHRoZSUyMG1vZGVsJTIwd2l0aC4lMEElMjAlMjAtLWF0b2wlMjBBVE9MJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwQWJzb2x1dGUlMjBkaWZmZXJlbmNlJTIwdG9sZXJhbmNlJTIwd2hlbiUyMHZhbGlkYXRpbmclMjB0aGUlMjBtb2RlbC4=",highlighted:`python -m transformers.onnx --<span class="hljs-built_in">help</span>

usage: Hugging Face Transformers ONNX exporter [-h] -m MODEL [--feature {causal-lm, ...}] [--opset OPSET] [--atol ATOL] output

positional arguments:
  output                Path indicating <span class="hljs-built_in">where</span> to store generated ONNX model.

optional arguments:
  -h, --<span class="hljs-built_in">help</span>            show this <span class="hljs-built_in">help</span> message and <span class="hljs-built_in">exit</span>
  -m MODEL, --model MODEL
                        Model ID on huggingface.co or path on disk to load model from.
  --feature {causal-lm, ...}
                        The <span class="hljs-built_in">type</span> of features to <span class="hljs-built_in">export</span> the model with.
  --opset OPSET         ONNX opset version to <span class="hljs-built_in">export</span> the model with.
  --atol ATOL           Absolute difference tolerance when validating the model.`}}),Wt=new B({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMG9ubnglMkY=",highlighted:"python -m transformers.onnx --model=distilbert-base-uncased onnx/"}}),Rt=new B({props:{code:"VmFsaWRhdGluZyUyME9OTlglMjBtb2RlbC4uLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0lNUIlRTIlOUMlOTMlNUQlMjBPTk5YJTIwbW9kZWwlMjBvdXRwdXQlMjBuYW1lcyUyMG1hdGNoJTIwcmVmZXJlbmNlJTIwbW9kZWwlMjAoJTdCJ2xhc3RfaGlkZGVuX3N0YXRlJyU3RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTIwVmFsaWRhdGluZyUyME9OTlglMjBNb2RlbCUyMG91dHB1dCUyMCUyMmxhc3RfaGlkZGVuX3N0YXRlJTIyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLSU1QiVFMiU5QyU5MyU1RCUyMCgyJTJDJTIwOCUyQyUyMDc2OCklMjBtYXRjaGVzJTIwKDIlMkMlMjA4JTJDJTIwNzY4KSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0lNUIlRTIlOUMlOTMlNUQlMjBhbGwlMjB2YWx1ZXMlMjBjbG9zZSUyMChhdG9sJTNBJTIwMWUtMDUpJTBBQWxsJTIwZ29vZCUyQyUyMG1vZGVsJTIwc2F2ZWQlMjBhdCUzQSUyMG9ubnglMkZtb2RlbC5vbm54",highlighted:`Validating ONNX model...
        -[\u2713] ONNX model output names match reference model ({<span class="hljs-string">&#x27;last_hidden_state&#x27;</span>})
        - Validating ONNX Model output <span class="hljs-string">&quot;last_hidden_state&quot;</span>:
                -[\u2713] (2, 8, 768) matches (2, 8, 768)
                -[\u2713] all values close (atol: 1e-05)
All good, model saved at: onnx/model.onnx`}}),St=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEFmcm9tJTIwb25ueHJ1bnRpbWUlMjBpbXBvcnQlMjBJbmZlcmVuY2VTZXNzaW9uJTBBJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIpJTBBc2Vzc2lvbiUyMCUzRCUyMEluZmVyZW5jZVNlc3Npb24oJTIyb25ueCUyRm1vZGVsLm9ubnglMjIpJTBBJTIzJTIwT05OWCUyMFJ1bnRpbWUlMjBleHBlY3RzJTIwTnVtUHklMjBhcnJheXMlMjBhcyUyMGlucHV0JTBBaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUyMlVzaW5nJTIwRGlzdGlsQkVSVCUyMHdpdGglMjBPTk5YJTIwUnVudGltZSElMjIlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMm5wJTIyKSUwQW91dHB1dHMlMjAlM0QlMjBzZXNzaW9uLnJ1bihvdXRwdXRfbmFtZXMlM0QlNUIlMjJsYXN0X2hpZGRlbl9zdGF0ZSUyMiU1RCUyQyUyMGlucHV0X2ZlZWQlM0RkaWN0KGlucHV0cykp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> onnxruntime <span class="hljs-keyword">import</span> InferenceSession

<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>session = InferenceSession(<span class="hljs-string">&quot;onnx/model.onnx&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># ONNX Runtime expects NumPy arrays as input</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>inputs = tokenizer(<span class="hljs-string">&quot;Using DistilBERT with ONNX Runtime!&quot;</span>, return_tensors=<span class="hljs-string">&quot;np&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>outputs = session.run(output_names=[<span class="hljs-string">&quot;last_hidden_state&quot;</span>], input_feed=<span class="hljs-built_in">dict</span>(inputs))`}}),Vt=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5tb2RlbHMuZGlzdGlsYmVydCUyMGltcG9ydCUyMERpc3RpbEJlcnRDb25maWclMkMlMjBEaXN0aWxCZXJ0T25ueENvbmZpZyUwQSUwQWNvbmZpZyUyMCUzRCUyMERpc3RpbEJlcnRDb25maWcoKSUwQW9ubnhfY29uZmlnJTIwJTNEJTIwRGlzdGlsQmVydE9ubnhDb25maWcoY29uZmlnKSUwQXByaW50KGxpc3Qob25ueF9jb25maWcub3V0cHV0cy5rZXlzKCkpKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers.models.distilbert <span class="hljs-keyword">import</span> DistilBertConfig, DistilBertOnnxConfig

<span class="hljs-meta">&gt;&gt;&gt; </span>config = DistilBertConfig()
<span class="hljs-meta">&gt;&gt;&gt; </span>onnx_config = DistilBertOnnxConfig(config)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-built_in">list</span>(onnx_config.outputs.keys()))
[<span class="hljs-string">&quot;last_hidden_state&quot;</span>]`}}),Ot=new B({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RrZXJhcy1pbyUyRnRyYW5zZm9ybWVycy1xYSUyMG9ubnglMkY=",highlighted:"python -m transformers.onnx --model=keras-io/transformers-qa onnx/"}}),Pe=new jz({props:{pytorch:!0,tensorflow:!0,jax:!1,$$slots:{tensorflow:[Jz],pytorch:[Uz]},$$scope:{ctx:R}}}),Dt=new G({}),ol=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5vbm54LmZlYXR1cmVzJTIwaW1wb3J0JTIwRmVhdHVyZXNNYW5hZ2VyJTBBJTBBZGlzdGlsYmVydF9mZWF0dXJlcyUyMCUzRCUyMGxpc3QoRmVhdHVyZXNNYW5hZ2VyLmdldF9zdXBwb3J0ZWRfZmVhdHVyZXNfZm9yX21vZGVsX3R5cGUoJTIyZGlzdGlsYmVydCUyMikua2V5cygpKSUwQXByaW50KGRpc3RpbGJlcnRfZmVhdHVyZXMp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers.onnx.features <span class="hljs-keyword">import</span> FeaturesManager

<span class="hljs-meta">&gt;&gt;&gt; </span>distilbert_features = <span class="hljs-built_in">list</span>(FeaturesManager.get_supported_features_for_model_type(<span class="hljs-string">&quot;distilbert&quot;</span>).keys())
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(distilbert_features)
[<span class="hljs-string">&quot;default&quot;</span>, <span class="hljs-string">&quot;masked-lm&quot;</span>, <span class="hljs-string">&quot;causal-lm&quot;</span>, <span class="hljs-string">&quot;sequence-classification&quot;</span>, <span class="hljs-string">&quot;token-classification&quot;</span>, <span class="hljs-string">&quot;question-answering&quot;</span>]`}}),al=new B({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMCU1QyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0tZmVhdHVyZSUzRHNlcXVlbmNlLWNsYXNzaWZpY2F0aW9uJTIwb25ueCUyRg==",highlighted:`python -m transformers.onnx --model=distilbert-base-uncased-finetuned-sst-2-english \\
                            --feature=sequence-classification onnx/`}}),il=new B({props:{code:"VmFsaWRhdGluZyUyME9OTlglMjBtb2RlbC4uLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0lNUIlRTIlOUMlOTMlNUQlMjBPTk5YJTIwbW9kZWwlMjBvdXRwdXQlMjBuYW1lcyUyMG1hdGNoJTIwcmVmZXJlbmNlJTIwbW9kZWwlMjAoJTdCJ2xvZ2l0cyclN0QpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLSUyMFZhbGlkYXRpbmclMjBPTk5YJTIwTW9kZWwlMjBvdXRwdXQlMjAlMjJsb2dpdHMlMjIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTVCJUUyJTlDJTkzJTVEJTIwKDIlMkMlMjAyKSUyMG1hdGNoZXMlMjAoMiUyQyUyMDIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLSU1QiVFMiU5QyU5MyU1RCUyMGFsbCUyMHZhbHVlcyUyMGNsb3NlJTIwKGF0b2wlM0ElMjAxZS0wNSklMEFBbGwlMjBnb29kJTJDJTIwbW9kZWwlMjBzYXZlZCUyMGF0JTNBJTIwb25ueCUyRm1vZGVsLm9ubng=",highlighted:`Validating ONNX model...
        -[\u2713] ONNX model output names match reference model ({<span class="hljs-string">&#x27;logits&#x27;</span>})
        - Validating ONNX Model output <span class="hljs-string">&quot;logits&quot;</span>:
                -[\u2713] (2, 2) matches (2, 2)
                -[\u2713] all values close (atol: 1e-05)
All good, model saved at: onnx/model.onnx`}}),Ye=new oa({props:{$$slots:{default:[Cz]},$$scope:{ctx:R}}}),nl=new G({}),sl=new G({}),tt=new oa({props:{$$slots:{default:[Iz]},$$scope:{ctx:R}}}),rl=new B({props:{code:"ZnJvbSUyMHR5cGluZyUyMGltcG9ydCUyME1hcHBpbmclMkMlMjBPcmRlcmVkRGljdCUwQWZyb20lMjB0cmFuc2Zvcm1lcnMub25ueCUyMGltcG9ydCUyME9ubnhDb25maWclMEElMEElMEFjbGFzcyUyMERpc3RpbEJlcnRPbm54Q29uZmlnKE9ubnhDb25maWcpJTNBJTBBJTIwJTIwJTIwJTIwJTQwcHJvcGVydHklMEElMjAlMjAlMjAlMjBkZWYlMjBpbnB1dHMoc2VsZiklMjAtJTNFJTIwTWFwcGluZyU1QnN0ciUyQyUyME1hcHBpbmclNUJpbnQlMkMlMjBzdHIlNUQlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBPcmRlcmVkRGljdCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAoJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTdCMCUzQSUyMCUyMmJhdGNoJTIyJTJDJTIwMSUzQSUyMCUyMnNlcXVlbmNlJTIyJTdEKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCglMjJhdHRlbnRpb25fbWFzayUyMiUyQyUyMCU3QjAlM0ElMjAlMjJiYXRjaCUyMiUyQyUyMDElM0ElMjAlMjJzZXF1ZW5jZSUyMiU3RCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> typing <span class="hljs-keyword">import</span> Mapping, OrderedDict
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers.onnx <span class="hljs-keyword">import</span> OnnxConfig


<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">class</span> <span class="hljs-title class_">DistilBertOnnxConfig</span>(<span class="hljs-title class_ inherited__">OnnxConfig</span>):
<span class="hljs-meta">... </span>    @<span class="hljs-built_in">property</span>
<span class="hljs-meta">... </span>    <span class="hljs-keyword">def</span> <span class="hljs-title function_">inputs</span>(<span class="hljs-params">self</span>) -&gt; Mapping[<span class="hljs-built_in">str</span>, Mapping[<span class="hljs-built_in">int</span>, <span class="hljs-built_in">str</span>]]:
<span class="hljs-meta">... </span>        <span class="hljs-keyword">return</span> OrderedDict(
<span class="hljs-meta">... </span>            [
<span class="hljs-meta">... </span>                (<span class="hljs-string">&quot;input_ids&quot;</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">&quot;batch&quot;</span>, <span class="hljs-number">1</span>: <span class="hljs-string">&quot;sequence&quot;</span>}),
<span class="hljs-meta">... </span>                (<span class="hljs-string">&quot;attention_mask&quot;</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">&quot;batch&quot;</span>, <span class="hljs-number">1</span>: <span class="hljs-string">&quot;sequence&quot;</span>}),
<span class="hljs-meta">... </span>            ]
<span class="hljs-meta">... </span>        )`}}),ot=new oa({props:{$$slots:{default:[Nz]},$$scope:{ctx:R}}}),cl=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Db25maWclMEElMEFjb25maWclMjAlM0QlMjBBdXRvQ29uZmlnLmZyb21fcHJldHJhaW5lZCglMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEFvbm54X2NvbmZpZyUyMCUzRCUyMERpc3RpbEJlcnRPbm54Q29uZmlnKGNvbmZpZyk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoConfig

<span class="hljs-meta">&gt;&gt;&gt; </span>config = AutoConfig.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>onnx_config = DistilBertOnnxConfig(config)`}}),pl=new B({props:{code:"cHJpbnQob25ueF9jb25maWcuZGVmYXVsdF9vbm54X29wc2V0KQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(onnx_config.default_onnx_opset)
<span class="hljs-number">11</span>`}}),dl=new B({props:{code:"cHJpbnQob25ueF9jb25maWcub3V0cHV0cyk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(onnx_config.outputs)
OrderedDict([(<span class="hljs-string">&quot;last_hidden_state&quot;</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">&quot;batch&quot;</span>, <span class="hljs-number">1</span>: <span class="hljs-string">&quot;sequence&quot;</span>})])`}}),ul=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Db25maWclMEElMEFjb25maWclMjAlM0QlMjBBdXRvQ29uZmlnLmZyb21fcHJldHJhaW5lZCglMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEFvbm54X2NvbmZpZ19mb3Jfc2VxX2NsZiUyMCUzRCUyMERpc3RpbEJlcnRPbm54Q29uZmlnKGNvbmZpZyUyQyUyMHRhc2slM0QlMjJzZXF1ZW5jZS1jbGFzc2lmaWNhdGlvbiUyMiklMEFwcmludChvbm54X2NvbmZpZ19mb3Jfc2VxX2NsZi5vdXRwdXRzKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoConfig

<span class="hljs-meta">&gt;&gt;&gt; </span>config = AutoConfig.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>onnx_config_for_seq_clf = DistilBertOnnxConfig(config, task=<span class="hljs-string">&quot;sequence-classification&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(onnx_config_for_seq_clf.outputs)
OrderedDict([(<span class="hljs-string">&#x27;logits&#x27;</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">&#x27;batch&#x27;</span>})])`}}),at=new oa({props:{$$slots:{default:[Az]},$$scope:{ctx:R}}}),ml=new G({}),fl=new B({props:{code:"ZnJvbSUyMHBhdGhsaWIlMjBpbXBvcnQlMjBQYXRoJTBBZnJvbSUyMHRyYW5zZm9ybWVycy5vbm54JTIwaW1wb3J0JTIwZXhwb3J0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEFvbm54X3BhdGglMjAlM0QlMjBQYXRoKCUyMm1vZGVsLm9ubnglMjIpJTBBbW9kZWxfY2twdCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyJTBBYmFzZV9tb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbC5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2twdCklMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbF9ja3B0KSUwQSUwQW9ubnhfaW5wdXRzJTJDJTIwb25ueF9vdXRwdXRzJTIwJTNEJTIwZXhwb3J0KHRva2VuaXplciUyQyUyMGJhc2VfbW9kZWwlMkMlMjBvbm54X2NvbmZpZyUyQyUyMG9ubnhfY29uZmlnLmRlZmF1bHRfb25ueF9vcHNldCUyQyUyMG9ubnhfcGF0aCk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> pathlib <span class="hljs-keyword">import</span> Path
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers.onnx <span class="hljs-keyword">import</span> export
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel

<span class="hljs-meta">&gt;&gt;&gt; </span>onnx_path = Path(<span class="hljs-string">&quot;model.onnx&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>model_ckpt = <span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>base_model = AutoModel.from_pretrained(model_ckpt)
<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer = AutoTokenizer.from_pretrained(model_ckpt)

<span class="hljs-meta">&gt;&gt;&gt; </span>onnx_inputs, onnx_outputs = export(tokenizer, base_model, onnx_config, onnx_config.default_onnx_opset, onnx_path)`}}),hl=new B({props:{code:"aW1wb3J0JTIwb25ueCUwQSUwQW9ubnhfbW9kZWwlMjAlM0QlMjBvbm54LmxvYWQoJTIybW9kZWwub25ueCUyMiklMEFvbm54LmNoZWNrZXIuY2hlY2tfbW9kZWwob25ueF9tb2RlbCk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> onnx

<span class="hljs-meta">&gt;&gt;&gt; </span>onnx_model = onnx.load(<span class="hljs-string">&quot;model.onnx&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>onnx.checker.check_model(onnx_model)`}}),nt=new oa({props:{$$slots:{default:[kz]},$$scope:{ctx:R}}}),Ml=new G({}),vl=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5vbm54JTIwaW1wb3J0JTIwdmFsaWRhdGVfbW9kZWxfb3V0cHV0cyUwQSUwQXZhbGlkYXRlX21vZGVsX291dHB1dHMoJTBBJTIwJTIwJTIwJTIwb25ueF9jb25maWclMkMlMjB0b2tlbml6ZXIlMkMlMjBiYXNlX21vZGVsJTJDJTIwb25ueF9wYXRoJTJDJTIwb25ueF9vdXRwdXRzJTJDJTIwb25ueF9jb25maWcuYXRvbF9mb3JfdmFsaWRhdGlvbiUwQSk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers.onnx <span class="hljs-keyword">import</span> validate_model_outputs

<span class="hljs-meta">&gt;&gt;&gt; </span>validate_model_outputs(
<span class="hljs-meta">... </span>    onnx_config, tokenizer, base_model, onnx_path, onnx_outputs, onnx_config.atol_for_validation
<span class="hljs-meta">... </span>)`}}),yl=new G({}),gl=new G({}),ut=new oa({props:{$$slots:{default:[Zz]},$$scope:{ctx:R}}}),wl=new G({}),_l=new G({}),jl=new G({}),Tl=new G({}),Ul=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUyQyUyMEJlcnRUb2tlbml6ZXIlMkMlMjBCZXJ0Q29uZmlnJTBBaW1wb3J0JTIwdG9yY2glMEElMEFlbmMlMjAlM0QlMjBCZXJ0VG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEElMEElMjMlMjBUb2tlbml6aW5nJTIwaW5wdXQlMjB0ZXh0JTBBdGV4dCUyMCUzRCUyMCUyMiU1QkNMUyU1RCUyMFdobyUyMHdhcyUyMEppbSUyMEhlbnNvbiUyMCUzRiUyMCU1QlNFUCU1RCUyMEppbSUyMEhlbnNvbiUyMHdhcyUyMGElMjBwdXBwZXRlZXIlMjAlNUJTRVAlNUQlMjIlMEF0b2tlbml6ZWRfdGV4dCUyMCUzRCUyMGVuYy50b2tlbml6ZSh0ZXh0KSUwQSUwQSUyMyUyME1hc2tpbmclMjBvbmUlMjBvZiUyMHRoZSUyMGlucHV0JTIwdG9rZW5zJTBBbWFza2VkX2luZGV4JTIwJTNEJTIwOCUwQXRva2VuaXplZF90ZXh0JTVCbWFza2VkX2luZGV4JTVEJTIwJTNEJTIwJTIyJTVCTUFTSyU1RCUyMiUwQWluZGV4ZWRfdG9rZW5zJTIwJTNEJTIwZW5jLmNvbnZlcnRfdG9rZW5zX3RvX2lkcyh0b2tlbml6ZWRfdGV4dCklMEFzZWdtZW50c19pZHMlMjAlM0QlMjAlNUIwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSU1RCUwQSUwQSUyMyUyMENyZWF0aW5nJTIwYSUyMGR1bW15JTIwaW5wdXQlMEF0b2tlbnNfdGVuc29yJTIwJTNEJTIwdG9yY2gudGVuc29yKCU1QmluZGV4ZWRfdG9rZW5zJTVEKSUwQXNlZ21lbnRzX3RlbnNvcnMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoJTVCc2VnbWVudHNfaWRzJTVEKSUwQWR1bW15X2lucHV0JTIwJTNEJTIwJTVCdG9rZW5zX3RlbnNvciUyQyUyMHNlZ21lbnRzX3RlbnNvcnMlNUQlMEElMEElMjMlMjBJbml0aWFsaXppbmclMjB0aGUlMjBtb2RlbCUyMHdpdGglMjB0aGUlMjB0b3JjaHNjcmlwdCUyMGZsYWclMEElMjMlMjBGbGFnJTIwc2V0JTIwdG8lMjBUcnVlJTIwZXZlbiUyMHRob3VnaCUyMGl0JTIwaXMlMjBub3QlMjBuZWNlc3NhcnklMjBhcyUyMHRoaXMlMjBtb2RlbCUyMGRvZXMlMjBub3QlMjBoYXZlJTIwYW4lMjBMTSUyMEhlYWQuJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZyglMEElMjAlMjAlMjAlMjB2b2NhYl9zaXplX29yX2NvbmZpZ19qc29uX2ZpbGUlM0QzMjAwMCUyQyUwQSUyMCUyMCUyMCUyMGhpZGRlbl9zaXplJTNENzY4JTJDJTBBJTIwJTIwJTIwJTIwbnVtX2hpZGRlbl9sYXllcnMlM0QxMiUyQyUwQSUyMCUyMCUyMCUyMG51bV9hdHRlbnRpb25faGVhZHMlM0QxMiUyQyUwQSUyMCUyMCUyMCUyMGludGVybWVkaWF0ZV9zaXplJTNEMzA3MiUyQyUwQSUyMCUyMCUyMCUyMHRvcmNoc2NyaXB0JTNEVHJ1ZSUyQyUwQSklMEElMEElMjMlMjBJbnN0YW50aWF0aW5nJTIwdGhlJTIwbW9kZWwlMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwVGhlJTIwbW9kZWwlMjBuZWVkcyUyMHRvJTIwYmUlMjBpbiUyMGV2YWx1YXRpb24lMjBtb2RlJTBBbW9kZWwuZXZhbCgpJTBBJTBBJTIzJTIwSWYlMjB5b3UlMjBhcmUlMjBpbnN0YW50aWF0aW5nJTIwdGhlJTIwbW9kZWwlMjB3aXRoJTIwKmZyb21fcHJldHJhaW5lZColMjB5b3UlMjBjYW4lMjBhbHNvJTIwZWFzaWx5JTIwc2V0JTIwdGhlJTIwVG9yY2hTY3JpcHQlMjBmbGFnJTBBbW9kZWwlMjAlM0QlMjBCZXJ0TW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmJlcnQtYmFzZS11bmNhc2VkJTIyJTJDJTIwdG9yY2hzY3JpcHQlM0RUcnVlKSUwQSUwQSUyMyUyMENyZWF0aW5nJTIwdGhlJTIwdHJhY2UlMEF0cmFjZWRfbW9kZWwlMjAlM0QlMjB0b3JjaC5qaXQudHJhY2UobW9kZWwlMkMlMjAlNUJ0b2tlbnNfdGVuc29yJTJDJTIwc2VnbWVudHNfdGVuc29ycyU1RCklMEF0b3JjaC5qaXQuc2F2ZSh0cmFjZWRfbW9kZWwlMkMlMjAlMjJ0cmFjZWRfYmVydC5wdCUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel, BertTokenizer, BertConfig
<span class="hljs-keyword">import</span> torch

enc = BertTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-uncased&quot;</span>)

<span class="hljs-comment"># Tokenizing input text</span>
text = <span class="hljs-string">&quot;[CLS] Who was Jim Henson ? [SEP] Jim Henson was a puppeteer [SEP]&quot;</span>
tokenized_text = enc.tokenize(text)

<span class="hljs-comment"># Masking one of the input tokens</span>
masked_index = <span class="hljs-number">8</span>
tokenized_text[masked_index] = <span class="hljs-string">&quot;[MASK]&quot;</span>
indexed_tokens = enc.convert_tokens_to_ids(tokenized_text)
segments_ids = [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>]

<span class="hljs-comment"># Creating a dummy input</span>
tokens_tensor = torch.tensor([indexed_tokens])
segments_tensors = torch.tensor([segments_ids])
dummy_input = [tokens_tensor, segments_tensors]

<span class="hljs-comment"># Initializing the model with the torchscript flag</span>
<span class="hljs-comment"># Flag set to True even though it is not necessary as this model does not have an LM Head.</span>
config = BertConfig(
    vocab_size_or_config_json_file=<span class="hljs-number">32000</span>,
    hidden_size=<span class="hljs-number">768</span>,
    num_hidden_layers=<span class="hljs-number">12</span>,
    num_attention_heads=<span class="hljs-number">12</span>,
    intermediate_size=<span class="hljs-number">3072</span>,
    torchscript=<span class="hljs-literal">True</span>,
)

<span class="hljs-comment"># Instantiating the model</span>
model = BertModel(config)

<span class="hljs-comment"># The model needs to be in evaluation mode</span>
model.<span class="hljs-built_in">eval</span>()

<span class="hljs-comment"># If you are instantiating the model with *from_pretrained* you can also easily set the TorchScript flag</span>
model = BertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-uncased&quot;</span>, torchscript=<span class="hljs-literal">True</span>)

<span class="hljs-comment"># Creating the trace</span>
traced_model = torch.jit.trace(model, [tokens_tensor, segments_tensors])
torch.jit.save(traced_model, <span class="hljs-string">&quot;traced_bert.pt&quot;</span>)`}}),$l=new G({}),Jl=new B({props:{code:"bG9hZGVkX21vZGVsJTIwJTNEJTIwdG9yY2guaml0LmxvYWQoJTIydHJhY2VkX2JlcnQucHQlMjIpJTBBbG9hZGVkX21vZGVsLmV2YWwoKSUwQSUwQWFsbF9lbmNvZGVyX2xheWVycyUyQyUyMHBvb2xlZF9vdXRwdXQlMjAlM0QlMjBsb2FkZWRfbW9kZWwoKmR1bW15X2lucHV0KQ==",highlighted:`loaded_model = torch.jit.load(<span class="hljs-string">&quot;traced_bert.pt&quot;</span>)
loaded_model.<span class="hljs-built_in">eval</span>()

all_encoder_layers, pooled_output = loaded_model(*dummy_input)`}}),Cl=new G({}),Il=new B({props:{code:"dHJhY2VkX21vZGVsKHRva2Vuc190ZW5zb3IlMkMlMjBzZWdtZW50c190ZW5zb3JzKQ==",highlighted:"traced_model(tokens_tensor, segments_tensors)"}}),Wl=new G({}),Ql=new G({}),xl=new G({}),ql=new B({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUyQyUyMEJlcnRUb2tlbml6ZXIlMkMlMjBCZXJ0Q29uZmlnJTBBaW1wb3J0JTIwdG9yY2glMEFpbXBvcnQlMjB0b3JjaC5uZXVyb24=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel, BertTokenizer, BertConfig
<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">import</span> torch.neuron`}}),Fl=new B({props:{code:"dG9yY2guaml0LnRyYWNlKG1vZGVsJTJDJTIwJTVCdG9rZW5zX3RlbnNvciUyQyUyMHNlZ21lbnRzX3RlbnNvcnMlNUQp",highlighted:"torch.jit.trace(model, [tokens_tensor, segments_tensors])"}}),Ll=new B({props:{code:"dG9yY2gubmV1cm9uLnRyYWNlKG1vZGVsJTJDJTIwJTVCdG9rZW5fdGVuc29yJTJDJTIwc2VnbWVudHNfdGVuc29ycyU1RCk=",highlighted:"torch.neuron.trace(model, [token_tensor, segments_tensors])"}}),{c(){m=o("meta"),j=p(),f=o("h1"),_=o("a"),U=o("span"),y(T.$$.fragment),A=p(),N=o("span"),C=n("Esporta modelli \u{1F917} Transformers"),$=p(),k=o("p"),I=n(`Se devi implementare \u{1F917} modelli Transformers in ambienti di produzione, noi
consigliamo di esportarli in un formato serializzato che pu\xF2 essere caricato ed eseguito
su runtime e hardware specializzati. In questa guida ti mostreremo come farlo
esporta \u{1F917} Modelli Transformers in due formati ampiamente utilizzati: ONNX e TorchScript.`),Z=p(),v=o("p"),J=n(`Una volta esportato, un modello pu\xF2 essere ottimizato per l\u2019inferenza tramite tecniche come
la quantizzazione e soppressione. Se sei interessato a ottimizzare i tuoi modelli per l\u2019esecuzione
con la massima efficienza, dai un\u2019occhiata a `),X=o("a"),P=n(`\u{1F917} Optimum
library`),ve=n("."),Ge=p(),q=o("h2"),O=o("a"),ye=o("span"),y(ae.$$.fragment),be=p(),W=o("span"),eo=n("ONNX"),Nt=p(),F=o("p"),to=n("Il progetto "),ie=o("a"),lo=n("ONNX (Open Neural Network eXchange)"),oo=n(` Il progetto onnx \xE8 un open
standard che definisce un insieme comune di operatori e un formato di file comune a
rappresentano modelli di deep learning in un\u2019ampia variet\xE0 di framework, tra cui
PyTorch e TensorFlow. Quando un modello viene esportato nel formato ONNX, questi
operatori sono usati per costruire un grafico computazionale (often called an
`),aa=o("em"),pp=n("intermediate representation"),dp=n(`) che rappresenta il flusso di dati attraverso la
rete neurale.`),rs=p(),ao=o("p"),up=n(`Esponendo un grafico con operatori e tipi di dati standardizzati, ONNX rende
pi\xF9 facile passare da un framework all\u2019altro. Ad esempio, un modello allenato in PyTorch pu\xF2
essere esportato in formato ONNX e quindi importato in TensorFlow (e viceversa).`),cs=p(),Se=o("p"),mp=n("\u{1F917} Transformers fornisce un pacchetto "),ia=o("code"),fp=n("transformers.onnx"),hp=n(` che ti consente di
convertire i checkpoint del modello in un grafico ONNX sfruttando gli oggetti di configurazione.
Questi oggetti di configurazione sono gi\xE0 pronti per una serie di architetture di modelli,
e sono progettati per essere facilmente estensibili ad altre architetture.`),ps=p(),io=o("p"),Mp=n("Le configurazioni pronte includono le seguenti architetture:"),ds=p(),h=o("ul"),na=o("li"),vp=n("ALBERT"),yp=p(),sa=o("li"),bp=n("BART"),gp=p(),ra=o("li"),zp=n("BEiT"),Ep=p(),ca=o("li"),wp=n("BERT"),_p=p(),pa=o("li"),jp=n("BigBird"),Tp=p(),da=o("li"),Up=n("BigBird-Pegasus"),$p=p(),ua=o("li"),Jp=n("Blenderbot"),Cp=p(),ma=o("li"),Ip=n("BlenderbotSmall"),Np=p(),fa=o("li"),Ap=n("CamemBERT"),kp=p(),ha=o("li"),Zp=n("ConvBERT"),Bp=p(),Ma=o("li"),Wp=n("Data2VecText"),Rp=p(),va=o("li"),Xp=n("Data2VecVision"),Gp=p(),ya=o("li"),Sp=n("DeiT"),Vp=p(),ba=o("li"),Qp=n("DistilBERT"),Op=p(),ga=o("li"),Dp=n("ELECTRA"),xp=p(),za=o("li"),Pp=n("FlauBERT"),qp=p(),Ea=o("li"),Fp=n("GPT Neo"),Lp=p(),wa=o("li"),Hp=n("GPT-J"),Yp=p(),_a=o("li"),Kp=n("I-BERT"),ed=p(),ja=o("li"),td=n("LayoutLM"),ld=p(),Ta=o("li"),od=n("M2M100"),ad=p(),Ua=o("li"),id=n("Marian"),nd=p(),$a=o("li"),sd=n("mBART"),rd=p(),Ja=o("li"),cd=n("MobileBERT"),pd=p(),Ca=o("li"),dd=n("OpenAI GPT-2"),ud=p(),Ia=o("li"),md=n("Perceiver"),fd=p(),Na=o("li"),hd=n("PLBart"),Md=p(),Aa=o("li"),vd=n("RoBERTa"),yd=p(),ka=o("li"),bd=n("RoFormer"),gd=p(),Za=o("li"),zd=n("SqueezeBERT"),Ed=p(),Ba=o("li"),wd=n("T5"),_d=p(),Wa=o("li"),jd=n("ViT"),Td=p(),Ra=o("li"),Ud=n("XLM"),$d=p(),Xa=o("li"),Jd=n("XLM-RoBERTa"),Cd=p(),Ga=o("li"),Id=n("XLM-RoBERTa-XL"),us=p(),no=o("p"),Nd=n("Nelle prossime due sezioni, ti mostreremo come:"),ms=p(),Ve=o("ul"),At=o("li"),Ad=n("Esporta un modello supportato usando il pacchetto "),Sa=o("code"),kd=n("transformers.onnx"),Zd=n("."),Bd=p(),Va=o("li"),Wd=n("Esporta un modello personalizzato per un\u2019architettura non supportata."),fs=p(),ge=o("h3"),Qe=o("a"),Qa=o("span"),y(kt.$$.fragment),Rd=p(),Oa=o("span"),Xd=n("Esportazione di un modello in ONNX"),hs=p(),so=o("p"),Gd=n(`Per esportare un modello \u{1F917} Transformers in ONNX, dovrai prima installarne alcune
dipendenze extra:`),Ms=p(),y(Zt.$$.fragment),vs=p(),Oe=o("p"),Sd=n("Il pacchetto "),Da=o("code"),Vd=n("transformers.onnx"),Qd=n(" pu\xF2 essere usato come modulo Python:"),ys=p(),y(Bt.$$.fragment),bs=p(),ro=o("p"),Od=n("L\u2019esportazione di un checkpoint utilizzando una configurazione gi\xE0 pronta pu\xF2 essere eseguita come segue:"),gs=p(),y(Wt.$$.fragment),zs=p(),co=o("p"),Dd=n("che dovrebbe mostrare i seguenti log:"),Es=p(),y(Rt.$$.fragment),ws=p(),ne=o("p"),xd=n("Questo esporta un grafico ONNX del checkpoint definito dall\u2019argomento "),xa=o("code"),Pd=n("--model"),qd=n(`.
In questo esempio \xE8 `),Pa=o("code"),Fd=n("distilbert-base-uncased"),Ld=n(`, ma pu\xF2 essere qualsiasi checkpoint
Hugging Face Hub o uno memorizzato localmente.`),_s=p(),H=o("p"),Hd=n("Il file risultante "),qa=o("code"),Yd=n("model.onnx"),Kd=n(" pu\xF2 quindi essere eseguito su uno dei "),Xt=o("a"),eu=n(`tanti
acceleratori`),tu=n(` che supportano il
lo standard ONNX. Ad esempio, possiamo caricare ed eseguire il modello con `),Gt=o("a"),lu=n(`ONNX
Runtime`),ou=n(" come segue:"),js=p(),y(St.$$.fragment),Ts=p(),De=o("p"),au=n("I nomi di output richiesti (cio\xE8 "),Fa=o("code"),iu=n('["last_hidden_state"]'),nu=n(`) possono essere ottenuti
dando un\u2019occhiata alla configurazione ONNX di ogni modello. Ad esempio, per
DistilBERT abbiamo:`),Us=p(),y(Vt.$$.fragment),$s=p(),xe=o("p"),su=n(`Il processo \xE8 identico per i checkpoint TensorFlow sull\u2019hub. Ad esempio, noi
possiamo esportare un checkpoint TensorFlow puro da `),Qt=o("a"),ru=n(`Keras
organizzazione`),cu=n(" come segue:"),Js=p(),y(Ot.$$.fragment),Cs=p(),po=o("p"),pu=n(`Per esportare un modello memorizzato localmente, devi disporre dei pesi del modello
e file tokenizer memorizzati in una directory. Ad esempio, possiamo caricare e salvare un
checkpoint come segue:`),Is=p(),y(Pe.$$.fragment),Ns=p(),ze=o("h3"),qe=o("a"),La=o("span"),y(Dt.$$.fragment),du=p(),Ha=o("span"),uu=n("Selezione delle caratteristiche per diverse topologie di modello"),As=p(),Fe=o("p"),mu=n("Ogni configurazione gi\xE0 pronta viene fornita con una serie di "),Ya=o("em"),fu=n("caratteristiche"),hu=n(` che ti consentono di
esportare modelli per diversi tipi di topologie o attivit\xE0. Come mostrato nella tabella
di seguito, ogni caratteristica \xE8 associata a una diversa Auto Class:`),ks=p(),Le=o("table"),Ka=o("thead"),xt=o("tr"),ei=o("th"),Mu=n("Caratteristica"),vu=p(),ti=o("th"),yu=n("Auto Class"),bu=p(),S=o("tbody"),Pt=o("tr"),qt=o("td"),li=o("code"),gu=n("causal-lm"),zu=n(", "),oi=o("code"),Eu=n("causal-lm-with-past"),wu=p(),ai=o("td"),ii=o("code"),_u=n("AutoModelForCausalLM"),ju=p(),Ft=o("tr"),Lt=o("td"),ni=o("code"),Tu=n("default"),Uu=n(", "),si=o("code"),$u=n("default-with-past"),Ju=p(),ri=o("td"),ci=o("code"),Cu=n("AutoModel"),Iu=p(),Ht=o("tr"),pi=o("td"),di=o("code"),Nu=n("masked-lm"),Au=p(),ui=o("td"),mi=o("code"),ku=n("AutoModelForMaskedLM"),Zu=p(),Yt=o("tr"),fi=o("td"),hi=o("code"),Bu=n("question-answering"),Wu=p(),Mi=o("td"),vi=o("code"),Ru=n("AutoModelForQuestionAnswering"),Xu=p(),Kt=o("tr"),el=o("td"),yi=o("code"),Gu=n("seq2seq-lm"),Su=n(", "),bi=o("code"),Vu=n("seq2seq-lm-with-past"),Qu=p(),gi=o("td"),zi=o("code"),Ou=n("AutoModelForSeq2SeqLM"),Du=p(),tl=o("tr"),Ei=o("td"),wi=o("code"),xu=n("sequence-classification"),Pu=p(),_i=o("td"),ji=o("code"),qu=n("AutoModelForSequenceClassification"),Fu=p(),ll=o("tr"),Ti=o("td"),Ui=o("code"),Lu=n("token-classification"),Hu=p(),$i=o("td"),Ji=o("code"),Yu=n("AutoModelForTokenClassification"),Zs=p(),He=o("p"),Ku=n(`Per ciascuna configurazione, puoi trovare l\u2019elenco delle funzionalit\xE0 supportate tramite il
`),Ci=o("code"),em=n("FeaturesManager"),tm=n(". Ad esempio, per DistilBERT abbiamo:"),Bs=p(),y(ol.$$.fragment),Ws=p(),se=o("p"),lm=n("Puoi quindi passare una di queste funzionalit\xE0 all\u2019argomento "),Ii=o("code"),om=n("--feature"),am=n(` nel
pacchetto `),Ni=o("code"),im=n("transformers.onnx"),nm=n(`. Ad esempio, per esportare un modello di classificazione del testo
possiamo scegliere un modello ottimizzato dall\u2019Hub ed eseguire:`),Rs=p(),y(al.$$.fragment),Xs=p(),uo=o("p"),sm=n("che visualizzer\xE0 i seguenti registri:"),Gs=p(),y(il.$$.fragment),Ss=p(),Y=o("p"),rm=n(`Puoi notare che in questo caso, i nomi di output del modello ottimizzato sono
`),Ai=o("code"),cm=n("logits"),pm=n(" invece di "),ki=o("code"),dm=n("last_hidden_state"),um=n(` che abbiamo visto con il
checkpoint `),Zi=o("code"),mm=n("distilbert-base-uncased"),fm=n(` precedente. Questo \xE8 previsto dal
modello ottimizato visto che ha una testa di e.`),Vs=p(),y(Ye.$$.fragment),Qs=p(),Ee=o("h3"),Ke=o("a"),Bi=o("span"),y(nl.$$.fragment),hm=p(),Wi=o("span"),Mm=n("Esportazione di un modello per un'architettura non supportata"),Os=p(),mo=o("p"),vm=n(`Se desideri esportare un modello la cui architettura non \xE8 nativamente supportata dalla
libreria, ci sono tre passaggi principali da seguire:`),Ds=p(),re=o("ol"),Ri=o("li"),ym=n("Implementare una configurazione ONNX personalizzata."),bm=p(),Xi=o("li"),gm=n("Esportare il modello in ONNX."),zm=p(),Gi=o("li"),Em=n("Convalidare gli output di PyTorch e dei modelli esportati."),xs=p(),fo=o("p"),wm=n(`In questa sezione, vedremo come DistilBERT \xE8 stato implementato per mostrare cosa \xE8
coinvolto in ogni passaggio.`),Ps=p(),we=o("h4"),et=o("a"),Si=o("span"),y(sl.$$.fragment),_m=p(),Vi=o("span"),jm=n("Implementazione di una configurazione ONNX personalizzata"),qs=p(),ho=o("p"),Tm=n(`Iniziamo con l\u2019oggetto di configurazione ONNX. Forniamo tre classi
astratte da cui ereditare, a seconda del tipo di archittettura
del modello che desideri esportare:`),Fs=p(),ce=o("ul"),Mo=o("li"),Um=n("I modelli basati su encoder ereditano da "),Qi=o("code"),$m=n("OnnxConfig"),Jm=p(),vo=o("li"),Cm=n("I modelli basati su decoder ereditano da "),Oi=o("code"),Im=n("OnnxConfigWithPast"),Nm=p(),yo=o("li"),Am=n("I modelli encoder-decoder ereditano da"),Di=o("code"),km=n("OnnxSeq2SeqConfigWithPast"),Ls=p(),y(tt.$$.fragment),Hs=p(),lt=o("p"),Zm=n(`Poich\xE9 DistilBERT \xE8 un modello basato su encoder, la sua configurazione eredita da
`),xi=o("code"),Bm=n("OnnxConfig"),Wm=n(":"),Ys=p(),y(rl.$$.fragment),Ks=p(),D=o("p"),Rm=n("Ogni oggetto di configurazione deve implementare la propriet\xE0 "),Pi=o("code"),Xm=n("inputs"),Gm=n(` e restituire una
mappatura, dove ogni chiave corrisponde a un input previsto e ogni valore
indica l\u2019asse di quell\u2019input. Per DistilBERT, possiamo vedere che sono richiesti
due input: `),qi=o("code"),Sm=n("input_ids"),Vm=n(" e "),Fi=o("code"),Qm=n("attention_mask"),Om=n(`. Questi inputs hanno la stessa forma di
`),Li=o("code"),Dm=n("(batch_size, sequence_length)"),xm=n(` per questo motivo vediamo gli stessi assi usati nella
configurazione.`),er=p(),y(ot.$$.fragment),tr=p(),bo=o("p"),Pm=n(`Dopo aver implementato una configurazione ONNX, \xE8 possibile istanziarla
fornendo alla configurazione del modello base come segue:`),lr=p(),y(cl.$$.fragment),or=p(),go=o("p"),qm=n(`L\u2019oggetto risultante ha diverse propriet\xE0 utili. Ad esempio \xE8 possibile visualizzare il
Set operatore ONNX che verr\xE0 utilizzato durante l\u2019esportazione:`),ar=p(),y(pl.$$.fragment),ir=p(),zo=o("p"),Fm=n("\xC8 inoltre possibile visualizzare gli output associati al modello come segue:"),nr=p(),y(dl.$$.fragment),sr=p(),K=o("p"),Lm=n(`Puoi notare che la propriet\xE0 degli output segue la stessa struttura degli input; esso
restituisce un `),Hi=o("code"),Hm=n("OrderedDict"),Ym=n(` di output con nome e le loro forme. La struttura di output
\xE8 legato alla scelta della funzione con cui viene inizializzata la configurazione.
Per impostazione predefinita, la configurazione ONNX viene inizializzata con la funzione \u2018predefinita\u2019
che corrisponde all\u2019esportazione di un modello caricato con la classe `),Yi=o("code"),Km=n("AutoModel"),ef=n(`. Se tu
desideri esportare una topologia di modello diversa, \xE8 sufficiente fornire una funzionalit\xE0 diversa a
l\u2019argomento `),Ki=o("code"),tf=n("task"),lf=n(` quando inizializzi la configurazione ONNX. Ad esempio, se
volevamo esportare DistilBERT con una testa di classificazione per sequenze, potremmo
usare:`),rr=p(),y(ul.$$.fragment),cr=p(),y(at.$$.fragment),pr=p(),_e=o("h4"),it=o("a"),en=o("span"),y(ml.$$.fragment),of=p(),tn=o("span"),af=n("Esportazione del modello"),dr=p(),pe=o("p"),nf=n(`Una volta implementata la configurazione ONNX, il passaggio successivo consiste nell\u2019esportare il
modello. Qui possiamo usare la funzione `),ln=o("code"),sf=n("export()"),rf=n(` fornita dal
pacchetto `),on=o("code"),cf=n("transformers.onnx"),pf=n(`. Questa funzione prevede la configurazione ONNX, insieme
con il modello base e il tokenizer e il percorso per salvare il file esportato:`),ur=p(),y(fl.$$.fragment),mr=p(),V=o("p"),df=n("Gli "),an=o("code"),uf=n("onnx_inputs"),mf=n(" e "),nn=o("code"),ff=n("onnx_outputs"),hf=n(" restituiti dalla funzione "),sn=o("code"),Mf=n("export()"),vf=n(` sono
liste di chiavi definite nelle propriet\xE0 di `),rn=o("code"),yf=n("input"),bf=n(" e "),cn=o("code"),gf=n("output"),zf=n(` della
configurazione. Una volta esportato il modello, puoi verificare che il modello sia ben
formato come segue:`),fr=p(),y(hl.$$.fragment),hr=p(),y(nt.$$.fragment),Mr=p(),je=o("h4"),st=o("a"),pn=o("span"),y(Ml.$$.fragment),Ef=p(),dn=o("span"),wf=n("Convalida degli output del modello"),vr=p(),de=o("p"),_f=n(`Il passaggio finale consiste nel convalidare gli output dal modello di base e quello esportato
corrispondere entro una soglia di tolleranza assoluta. Qui possiamo usare la
Funzione `),un=o("code"),jf=n("validate_model_outputs()"),Tf=n(" fornita dal pacchetto "),mn=o("code"),Uf=n("transformers.onnx"),$f=n(`
come segue:`),yr=p(),y(vl.$$.fragment),br=p(),rt=o("p"),Jf=n("Questa funzione usa il metodo "),fn=o("code"),Cf=n("OnnxConfig.generate_dummy_inputs()"),If=n(` per generare
input per il modello di base e quello esportato e la tolleranza assoluta pu\xF2 essere
definita nella configurazione. Generalmente troviamo una corrispondenza numerica nell\u2019intervallo da 1e-6
a 1e-4, anche se \xE8 probabile che qualsiasi cosa inferiore a 1e-3 vada bene.`),gr=p(),Te=o("h3"),ct=o("a"),hn=o("span"),y(yl.$$.fragment),Nf=p(),Mn=o("span"),Af=n("Contribuire con una nuova configurazione a \u{1F917} Transformers"),zr=p(),Eo=o("p"),kf=n(`Stiamo cercando di espandere l\u2019insieme di configurazioni gi\xE0 pronte e di accettare
contributi della community! Se vuoi contribuire con la tua aggiunta
nella libreria, dovrai:`),Er=p(),ue=o("ul"),wo=o("li"),Zf=n("Implementare la configurazione ONNX nella corrispondente "),vn=o("code"),Bf=n("configuration file _<model_name>.py"),Wf=p(),_o=o("li"),Rf=n("Includere l\u2019architettura del modello e le funzioni corrispondenti in "),yn=o("code"),Xf=n("~onnx.features.FeatureManager"),Gf=p(),jo=o("li"),Sf=n("Aggiungere la tua architettura del modello ai test in "),bn=o("code"),Vf=n("test_onnx_v2.py"),wr=p(),pt=o("p"),Qf=n(`Scopri come stato contribuito la configurazione per [IBERT]
(`),bl=o("a"),Of=n("https://github.com/huggingface/transformers/pull/14868/files"),Df=n(`) per
avere un\u2019idea di cosa \xE8 coinvolto.`),_r=p(),Ue=o("h2"),dt=o("a"),gn=o("span"),y(gl.$$.fragment),xf=p(),zn=o("span"),Pf=n("TorchScript"),jr=p(),y(ut.$$.fragment),Tr=p(),mt=o("p"),qf=n(`Secondo la documentazione di Pytorch: \u201CTorchScript \xE8 un modo per creare modelli serializzabili e ottimizzabili da codice
Pytorch\u201D. I due moduli di Pytorch `),zl=o("a"),Ff=n("JIT e TRACE"),Lf=n(` consentono allo sviluppatore di esportare
il loro modello da riutilizzare in altri programmi, come i programmi C++ orientati all\u2019efficienza.`),Ur=p(),To=o("p"),Hf=n(`Abbiamo fornito un\u2019interfaccia che consente l\u2019esportazione di modelli \u{1F917} Transformers in TorchScript in modo che possano essere riutilizzati
in un ambiente diverso rispetto a un programma Python basato su Pytorch. Qui spieghiamo come esportare e utilizzare i nostri modelli utilizzando
TorchScript.`),$r=p(),Uo=o("p"),Yf=n("Esportare un modello richiede due cose:"),Jr=p(),ft=o("ul"),En=o("li"),Kf=n("Un passaggio in avanti con input fittizzi."),eh=p(),El=o("li"),th=n("Istanziazione del modello con flag "),wn=o("code"),lh=n("torchscript"),oh=n("."),Cr=p(),$o=o("p"),ah=n("Queste necessit\xE0 implicano diverse cose a cui gli sviluppatori dovrebbero prestare attenzione. Questi dettagli mostrati sotto."),Ir=p(),$e=o("h3"),ht=o("a"),_n=o("span"),y(wl.$$.fragment),ih=p(),jn=o("span"),nh=n("Flag TorchScript e pesi legati"),Nr=p(),Jo=o("p"),sh=n(`Questo flag \xE8 necessario perch\xE9 la maggior parte dei modelli linguistici in questo repository hanno pesi legati tra il loro
strato \u201CEmbedding\u201D e lo strato \u201CDecoding\u201D. TorchScript non consente l\u2019esportazione di modelli che hanno pesi
legati, quindi \xE8 necessario prima slegare e clonare i pesi.`),Ar=p(),ee=o("p"),rh=n("Ci\xF2 implica che i modelli istanziati con il flag "),Tn=o("code"),ch=n("torchscript"),ph=n(" hanno il loro strato "),Un=o("code"),dh=n("Embedding"),uh=n(" e strato "),$n=o("code"),mh=n("Decoding"),fh=n(`
separato, il che significa che non dovrebbero essere addestrati in futuro. L\u2019allenamento de-sincronizza i due
strati, portando a risultati inaspettati.`),kr=p(),Mt=o("p"),hh=n(`Questo non \xE8 il caso per i modelli che non hanno una testa del modello linguistico, poich\xE9 quelli non hanno pesi legati. Questi modelli
pu\xF2 essere esportato in sicurezza senza il flag `),Jn=o("code"),Mh=n("torchscript"),vh=n("."),Zr=p(),Je=o("h3"),vt=o("a"),Cn=o("span"),y(_l.$$.fragment),yh=p(),In=o("span"),bh=n("Input fittizi e standard lengths"),Br=p(),Co=o("p"),gh=n(`Gli input fittizzi sono usati per fare un modello passaggio in avanti . Mentre i valori degli input si propagano attraverso i strati,
Pytorch tiene traccia delle diverse operazioni eseguite su ciascun tensore. Queste operazioni registrate vengono quindi utilizzate per
creare la \u201Ctraccia\u201D del modello.`),Wr=p(),Io=o("p"),zh=n(`La traccia viene creata relativamente alle dimensioni degli input. \xC8 quindi vincolato dalle dimensioni dell\u2019input
fittizio e non funzioner\xE0 per altre lunghezze di sequenza o dimensioni batch. Quando si prover\xE0 con una dimensione diversa, ci sar\xE0 errore
come:`),Rr=p(),No=o("p"),Nn=o("code"),Eh=n("La dimensione espansa del tensore (3) deve corrispondere alla dimensione esistente (7) nella dimensione non singleton 2"),Xr=p(),Ao=o("p"),wh=n(`will be raised. Si consiglia pertanto di tracciare il modello con una dimensione di input fittizia grande almeno quanto il pi\xF9 grande
input che verr\xE0 fornito al modello durante l\u2019inferenza. \xC8 possibile eseguire il padding per riempire i valori mancanti. Il modello
sar\xE0 tracciato con una grande dimensione di input, tuttavia, anche le dimensioni della diverse matrici saranno grandi,
risultando in pi\xF9 calcoli.`),Gr=p(),ko=o("p"),_h=n(`Si raccomanda di prestare attenzione al numero totale di operazioni eseguite su ciascun input e di seguire da vicino le prestazioni
durante l\u2019esportazione di modelli di sequenza-lunghezza variabili.`),Sr=p(),Ce=o("h3"),yt=o("a"),An=o("span"),y(jl.$$.fragment),jh=p(),kn=o("span"),Th=n("Usare TorchSscript in Python"),Vr=p(),Zo=o("p"),Uh=n("Di seguito \xE8 riportato un esempio, che mostra come salvare, caricare modelli e come utilizzare la traccia per l\u2019inferenza."),Qr=p(),Ie=o("h4"),bt=o("a"),Zn=o("span"),y(Tl.$$.fragment),$h=p(),Bn=o("span"),Jh=n("Salvare un modello"),Or=p(),L=o("p"),Ch=n("Questo frammento di codice mostra come usare TorchScript per esportare un "),Wn=o("code"),Ih=n("BertModel"),Nh=n(". Qui il "),Rn=o("code"),Ah=n("BertModel"),kh=n(` \xE8 istanziato secondo
una classe `),Xn=o("code"),Zh=n("BertConfig"),Bh=n(" e quindi salvato su disco con il nome del file "),Gn=o("code"),Wh=n("traced_bert.pt"),Dr=p(),y(Ul.$$.fragment),xr=p(),Ne=o("h4"),gt=o("a"),Sn=o("span"),y($l.$$.fragment),Rh=p(),Vn=o("span"),Xh=n("Caricare un modello"),Pr=p(),te=o("p"),Gh=n("Questo frammento di codice mostra come caricare il "),Qn=o("code"),Sh=n("BertModel"),Vh=n(" che era stato precedentemente salvato su disco con il nome "),On=o("code"),Qh=n("traced_bert.pt"),Oh=n(`.
Stiamo riutilizzando il `),Dn=o("code"),Dh=n("dummy_input"),xh=n(" precedentemente inizializzato."),qr=p(),y(Jl.$$.fragment),Fr=p(),Ae=o("h4"),zt=o("a"),xn=o("span"),y(Cl.$$.fragment),Ph=p(),Pn=o("span"),qh=n("Utilizzare un modello tracciato per l'inferenza"),Lr=p(),Et=o("p"),Fh=n("Usare il modello tracciato per l\u2019inferenza \xE8 semplice come usare il suo metodo dunder "),qn=o("code"),Lh=n("__call__"),Hh=n(":"),Hr=p(),y(Il.$$.fragment),Yr=p(),Bo=o("p"),Yh=n("###Implementare modelli HuggingFace TorchScript su AWS utilizzando Neuron SDK"),Kr=p(),me=o("p"),Kh=n("AWS ha introdotto "),Nl=o("a"),eM=n("Amazon EC2 Inf1"),tM=n(`
famiglia di istanze per l\u2019inferenza di machine learning a basso costo e ad alte prestazioni nel cloud.
Le istanze Inf1 sono alimentate dal chip AWS Inferentia, un acceleratore hardware personalizzato,
specializzato in carichi di lavoro di inferenza di deep learning.
`),Al=o("a"),lM=n("AWS Neuron"),oM=n(`
\xE8 l\u2019SDK per Inferentia che supporta il tracciamento e l\u2019ottimizzazione dei modelli transformers per
distribuzione su Inf1. L\u2019SDK Neuron fornisce:`),ec=p(),fe=o("ol"),Fn=o("li"),aM=n("API di facile utilizzo con una riga di modifica del codice per tracciare e ottimizzare un modello TorchScript per l\u2019inferenza nel cloud."),iM=p(),Wo=o("li"),nM=n("Ottimizzazioni delle prestazioni pronte all\u2019uso per "),kl=o("a"),sM=n("miglioramento dei costi-prestazioni"),rM=p(),ke=o("li"),cM=n("Supporto per i modelli di trasformatori HuggingFace costruiti con "),Zl=o("a"),pM=n("PyTorch"),dM=n(`
o `),Bl=o("a"),uM=n("TensorFlow"),mM=n("."),tc=p(),Ze=o("h4"),wt=o("a"),Ln=o("span"),y(Wl.$$.fragment),fM=p(),Hn=o("span"),hM=n("Implicazioni"),lc=p(),Q=o("p"),MM=n("Modelli Transformers basati su architettura "),Rl=o("a"),vM=n("BERT (Bidirectional Encoder Representations from Transformers)"),yM=n(`,
o sue varianti come `),Xl=o("a"),bM=n("distilBERT"),gM=n(`
e `),Gl=o("a"),zM=n("roBERTa"),EM=n(`
funzioneranno meglio su Inf1 per attivit\xE0 non generative come la question answering estrattive,
Classificazione della sequenza, Classificazione dei token. In alternativa, generazione di testo
le attivit\xE0 possono essere adattate per essere eseguite su Inf1, secondo questo `),Sl=o("a"),wM=n("tutorial AWS Neuron MarianMT"),_M=n(`.
Ulteriori informazioni sui modelli che possono essere convertiti fuori dagli schemi su Inferentia possono essere
trovati nella `),Vl=o("a"),jM=n("sezione Model Architecture Fit della documentazione Neuron"),TM=n("."),oc=p(),Be=o("h4"),_t=o("a"),Yn=o("span"),y(Ql.$$.fragment),UM=p(),Kn=o("span"),$M=n("Dipendenze"),ac=p(),Ro=o("p"),JM=n("L\u2019utilizzo di AWS Neuron per convertire i modelli richiede le seguenti dipendenze e l\u2019ambiente:"),ic=p(),Xo=o("ul"),We=o("li"),CM=n("A "),Ol=o("a"),IM=n("Neuron SDK environment"),NM=n(`,
which comes pre-configured on `),Dl=o("a"),AM=n("AWS Deep Learning AMI"),kM=n("."),nc=p(),Re=o("h4"),jt=o("a"),es=o("span"),y(xl.$$.fragment),ZM=p(),ts=o("span"),BM=n("Convertire un modello per AWS Neuron"),sc=p(),he=o("p"),WM=n("Usando lo stesso script come in "),Pl=o("a"),RM=n("Usando TorchScipt in Python"),XM=n(`
per tracciare un \u201CBertModel\u201D, importi l\u2019estensione del framework `),ls=o("code"),GM=n("torch.neuron"),SM=n(` per accedere
i componenti di Neuron SDK tramite un\u2019API Python.`),rc=p(),y(ql.$$.fragment),cc=p(),Go=o("p"),VM=n("E modificare solo la riga di codice di traccia"),pc=p(),So=o("p"),QM=n("Da:"),dc=p(),y(Fl.$$.fragment),uc=p(),Vo=o("p"),OM=n("A:"),mc=p(),y(Ll.$$.fragment),fc=p(),Qo=o("p"),DM=n("Questa modifica consente a Neuron SDK di tracciare il modello e ottimizzarlo per l\u2019esecuzione nelle istanze Inf1."),hc=p(),Tt=o("p"),xM=n(`Per ulteriori informazioni sulle funzionalit\xE0, gli strumenti, i tutorial di esempi e gli ultimi aggiornamenti di AWS Neuron SDK,
consultare la `),Hl=o("a"),PM=n("documentazione AWS NeuronSDK"),qM=n("."),this.h()},l(e){const r=wz('[data-svelte="svelte-1phssyn"]',document.head);m=a(r,"META",{name:!0,content:!0}),r.forEach(l),j=d(e),f=a(e,"H1",{class:!0});var Yl=i(f);_=a(Yl,"A",{id:!0,class:!0,href:!0});var os=i(_);U=a(os,"SPAN",{});var as=i(U);b(T.$$.fragment,as),as.forEach(l),os.forEach(l),A=d(Yl),N=a(Yl,"SPAN",{});var is=i(N);C=s(is,"Esporta modelli \u{1F917} Transformers"),is.forEach(l),Yl.forEach(l),$=d(e),k=a(e,"P",{});var ns=i(k);I=s(ns,`Se devi implementare \u{1F917} modelli Transformers in ambienti di produzione, noi
consigliamo di esportarli in un formato serializzato che pu\xF2 essere caricato ed eseguito
su runtime e hardware specializzati. In questa guida ti mostreremo come farlo
esporta \u{1F917} Modelli Transformers in due formati ampiamente utilizzati: ONNX e TorchScript.`),ns.forEach(l),Z=d(e),v=a(e,"P",{});var Kl=i(v);J=s(Kl,`Una volta esportato, un modello pu\xF2 essere ottimizato per l\u2019inferenza tramite tecniche come
la quantizzazione e soppressione. Se sei interessato a ottimizzare i tuoi modelli per l\u2019esecuzione
con la massima efficienza, dai un\u2019occhiata a `),X=a(Kl,"A",{href:!0,rel:!0});var ss=i(X);P=s(ss,`\u{1F917} Optimum
library`),ss.forEach(l),ve=s(Kl,"."),Kl.forEach(l),Ge=d(e),q=a(e,"H2",{class:!0});var vc=i(q);O=a(vc,"A",{id:!0,class:!0,href:!0});var lv=i(O);ye=a(lv,"SPAN",{});var ov=i(ye);b(ae.$$.fragment,ov),ov.forEach(l),lv.forEach(l),be=d(vc),W=a(vc,"SPAN",{});var av=i(W);eo=s(av,"ONNX"),av.forEach(l),vc.forEach(l),Nt=d(e),F=a(e,"P",{});var Oo=i(F);to=s(Oo,"Il progetto "),ie=a(Oo,"A",{href:!0,rel:!0});var iv=i(ie);lo=s(iv,"ONNX (Open Neural Network eXchange)"),iv.forEach(l),oo=s(Oo,` Il progetto onnx \xE8 un open
standard che definisce un insieme comune di operatori e un formato di file comune a
rappresentano modelli di deep learning in un\u2019ampia variet\xE0 di framework, tra cui
PyTorch e TensorFlow. Quando un modello viene esportato nel formato ONNX, questi
operatori sono usati per costruire un grafico computazionale (often called an
`),aa=a(Oo,"EM",{});var nv=i(aa);pp=s(nv,"intermediate representation"),nv.forEach(l),dp=s(Oo,`) che rappresenta il flusso di dati attraverso la
rete neurale.`),Oo.forEach(l),rs=d(e),ao=a(e,"P",{});var sv=i(ao);up=s(sv,`Esponendo un grafico con operatori e tipi di dati standardizzati, ONNX rende
pi\xF9 facile passare da un framework all\u2019altro. Ad esempio, un modello allenato in PyTorch pu\xF2
essere esportato in formato ONNX e quindi importato in TensorFlow (e viceversa).`),sv.forEach(l),cs=d(e),Se=a(e,"P",{});var yc=i(Se);mp=s(yc,"\u{1F917} Transformers fornisce un pacchetto "),ia=a(yc,"CODE",{});var rv=i(ia);fp=s(rv,"transformers.onnx"),rv.forEach(l),hp=s(yc,` che ti consente di
convertire i checkpoint del modello in un grafico ONNX sfruttando gli oggetti di configurazione.
Questi oggetti di configurazione sono gi\xE0 pronti per una serie di architetture di modelli,
e sono progettati per essere facilmente estensibili ad altre architetture.`),yc.forEach(l),ps=d(e),io=a(e,"P",{});var cv=i(io);Mp=s(cv,"Le configurazioni pronte includono le seguenti architetture:"),cv.forEach(l),ds=d(e),h=a(e,"UL",{});var M=i(h);na=a(M,"LI",{});var pv=i(na);vp=s(pv,"ALBERT"),pv.forEach(l),yp=d(M),sa=a(M,"LI",{});var dv=i(sa);bp=s(dv,"BART"),dv.forEach(l),gp=d(M),ra=a(M,"LI",{});var uv=i(ra);zp=s(uv,"BEiT"),uv.forEach(l),Ep=d(M),ca=a(M,"LI",{});var mv=i(ca);wp=s(mv,"BERT"),mv.forEach(l),_p=d(M),pa=a(M,"LI",{});var fv=i(pa);jp=s(fv,"BigBird"),fv.forEach(l),Tp=d(M),da=a(M,"LI",{});var hv=i(da);Up=s(hv,"BigBird-Pegasus"),hv.forEach(l),$p=d(M),ua=a(M,"LI",{});var Mv=i(ua);Jp=s(Mv,"Blenderbot"),Mv.forEach(l),Cp=d(M),ma=a(M,"LI",{});var vv=i(ma);Ip=s(vv,"BlenderbotSmall"),vv.forEach(l),Np=d(M),fa=a(M,"LI",{});var yv=i(fa);Ap=s(yv,"CamemBERT"),yv.forEach(l),kp=d(M),ha=a(M,"LI",{});var bv=i(ha);Zp=s(bv,"ConvBERT"),bv.forEach(l),Bp=d(M),Ma=a(M,"LI",{});var gv=i(Ma);Wp=s(gv,"Data2VecText"),gv.forEach(l),Rp=d(M),va=a(M,"LI",{});var zv=i(va);Xp=s(zv,"Data2VecVision"),zv.forEach(l),Gp=d(M),ya=a(M,"LI",{});var Ev=i(ya);Sp=s(Ev,"DeiT"),Ev.forEach(l),Vp=d(M),ba=a(M,"LI",{});var wv=i(ba);Qp=s(wv,"DistilBERT"),wv.forEach(l),Op=d(M),ga=a(M,"LI",{});var _v=i(ga);Dp=s(_v,"ELECTRA"),_v.forEach(l),xp=d(M),za=a(M,"LI",{});var jv=i(za);Pp=s(jv,"FlauBERT"),jv.forEach(l),qp=d(M),Ea=a(M,"LI",{});var Tv=i(Ea);Fp=s(Tv,"GPT Neo"),Tv.forEach(l),Lp=d(M),wa=a(M,"LI",{});var Uv=i(wa);Hp=s(Uv,"GPT-J"),Uv.forEach(l),Yp=d(M),_a=a(M,"LI",{});var $v=i(_a);Kp=s($v,"I-BERT"),$v.forEach(l),ed=d(M),ja=a(M,"LI",{});var Jv=i(ja);td=s(Jv,"LayoutLM"),Jv.forEach(l),ld=d(M),Ta=a(M,"LI",{});var Cv=i(Ta);od=s(Cv,"M2M100"),Cv.forEach(l),ad=d(M),Ua=a(M,"LI",{});var Iv=i(Ua);id=s(Iv,"Marian"),Iv.forEach(l),nd=d(M),$a=a(M,"LI",{});var Nv=i($a);sd=s(Nv,"mBART"),Nv.forEach(l),rd=d(M),Ja=a(M,"LI",{});var Av=i(Ja);cd=s(Av,"MobileBERT"),Av.forEach(l),pd=d(M),Ca=a(M,"LI",{});var kv=i(Ca);dd=s(kv,"OpenAI GPT-2"),kv.forEach(l),ud=d(M),Ia=a(M,"LI",{});var Zv=i(Ia);md=s(Zv,"Perceiver"),Zv.forEach(l),fd=d(M),Na=a(M,"LI",{});var Bv=i(Na);hd=s(Bv,"PLBart"),Bv.forEach(l),Md=d(M),Aa=a(M,"LI",{});var Wv=i(Aa);vd=s(Wv,"RoBERTa"),Wv.forEach(l),yd=d(M),ka=a(M,"LI",{});var Rv=i(ka);bd=s(Rv,"RoFormer"),Rv.forEach(l),gd=d(M),Za=a(M,"LI",{});var Xv=i(Za);zd=s(Xv,"SqueezeBERT"),Xv.forEach(l),Ed=d(M),Ba=a(M,"LI",{});var Gv=i(Ba);wd=s(Gv,"T5"),Gv.forEach(l),_d=d(M),Wa=a(M,"LI",{});var Sv=i(Wa);jd=s(Sv,"ViT"),Sv.forEach(l),Td=d(M),Ra=a(M,"LI",{});var Vv=i(Ra);Ud=s(Vv,"XLM"),Vv.forEach(l),$d=d(M),Xa=a(M,"LI",{});var Qv=i(Xa);Jd=s(Qv,"XLM-RoBERTa"),Qv.forEach(l),Cd=d(M),Ga=a(M,"LI",{});var Ov=i(Ga);Id=s(Ov,"XLM-RoBERTa-XL"),Ov.forEach(l),M.forEach(l),us=d(e),no=a(e,"P",{});var Dv=i(no);Nd=s(Dv,"Nelle prossime due sezioni, ti mostreremo come:"),Dv.forEach(l),ms=d(e),Ve=a(e,"UL",{});var bc=i(Ve);At=a(bc,"LI",{});var gc=i(At);Ad=s(gc,"Esporta un modello supportato usando il pacchetto "),Sa=a(gc,"CODE",{});var xv=i(Sa);kd=s(xv,"transformers.onnx"),xv.forEach(l),Zd=s(gc,"."),gc.forEach(l),Bd=d(bc),Va=a(bc,"LI",{});var Pv=i(Va);Wd=s(Pv,"Esporta un modello personalizzato per un\u2019architettura non supportata."),Pv.forEach(l),bc.forEach(l),fs=d(e),ge=a(e,"H3",{class:!0});var zc=i(ge);Qe=a(zc,"A",{id:!0,class:!0,href:!0});var qv=i(Qe);Qa=a(qv,"SPAN",{});var Fv=i(Qa);b(kt.$$.fragment,Fv),Fv.forEach(l),qv.forEach(l),Rd=d(zc),Oa=a(zc,"SPAN",{});var Lv=i(Oa);Xd=s(Lv,"Esportazione di un modello in ONNX"),Lv.forEach(l),zc.forEach(l),hs=d(e),so=a(e,"P",{});var Hv=i(so);Gd=s(Hv,`Per esportare un modello \u{1F917} Transformers in ONNX, dovrai prima installarne alcune
dipendenze extra:`),Hv.forEach(l),Ms=d(e),b(Zt.$$.fragment,e),vs=d(e),Oe=a(e,"P",{});var Ec=i(Oe);Sd=s(Ec,"Il pacchetto "),Da=a(Ec,"CODE",{});var Yv=i(Da);Vd=s(Yv,"transformers.onnx"),Yv.forEach(l),Qd=s(Ec," pu\xF2 essere usato come modulo Python:"),Ec.forEach(l),ys=d(e),b(Bt.$$.fragment,e),bs=d(e),ro=a(e,"P",{});var Kv=i(ro);Od=s(Kv,"L\u2019esportazione di un checkpoint utilizzando una configurazione gi\xE0 pronta pu\xF2 essere eseguita come segue:"),Kv.forEach(l),gs=d(e),b(Wt.$$.fragment,e),zs=d(e),co=a(e,"P",{});var ey=i(co);Dd=s(ey,"che dovrebbe mostrare i seguenti log:"),ey.forEach(l),Es=d(e),b(Rt.$$.fragment,e),ws=d(e),ne=a(e,"P",{});var Do=i(ne);xd=s(Do,"Questo esporta un grafico ONNX del checkpoint definito dall\u2019argomento "),xa=a(Do,"CODE",{});var ty=i(xa);Pd=s(ty,"--model"),ty.forEach(l),qd=s(Do,`.
In questo esempio \xE8 `),Pa=a(Do,"CODE",{});var ly=i(Pa);Fd=s(ly,"distilbert-base-uncased"),ly.forEach(l),Ld=s(Do,`, ma pu\xF2 essere qualsiasi checkpoint
Hugging Face Hub o uno memorizzato localmente.`),Do.forEach(l),_s=d(e),H=a(e,"P",{});var Ut=i(H);Hd=s(Ut,"Il file risultante "),qa=a(Ut,"CODE",{});var oy=i(qa);Yd=s(oy,"model.onnx"),oy.forEach(l),Kd=s(Ut," pu\xF2 quindi essere eseguito su uno dei "),Xt=a(Ut,"A",{href:!0,rel:!0});var ay=i(Xt);eu=s(ay,`tanti
acceleratori`),ay.forEach(l),tu=s(Ut,` che supportano il
lo standard ONNX. Ad esempio, possiamo caricare ed eseguire il modello con `),Gt=a(Ut,"A",{href:!0,rel:!0});var iy=i(Gt);lu=s(iy,`ONNX
Runtime`),iy.forEach(l),ou=s(Ut," come segue:"),Ut.forEach(l),js=d(e),b(St.$$.fragment,e),Ts=d(e),De=a(e,"P",{});var wc=i(De);au=s(wc,"I nomi di output richiesti (cio\xE8 "),Fa=a(wc,"CODE",{});var ny=i(Fa);iu=s(ny,'["last_hidden_state"]'),ny.forEach(l),nu=s(wc,`) possono essere ottenuti
dando un\u2019occhiata alla configurazione ONNX di ogni modello. Ad esempio, per
DistilBERT abbiamo:`),wc.forEach(l),Us=d(e),b(Vt.$$.fragment,e),$s=d(e),xe=a(e,"P",{});var _c=i(xe);su=s(_c,`Il processo \xE8 identico per i checkpoint TensorFlow sull\u2019hub. Ad esempio, noi
possiamo esportare un checkpoint TensorFlow puro da `),Qt=a(_c,"A",{href:!0,rel:!0});var sy=i(Qt);ru=s(sy,`Keras
organizzazione`),sy.forEach(l),cu=s(_c," come segue:"),_c.forEach(l),Js=d(e),b(Ot.$$.fragment,e),Cs=d(e),po=a(e,"P",{});var ry=i(po);pu=s(ry,`Per esportare un modello memorizzato localmente, devi disporre dei pesi del modello
e file tokenizer memorizzati in una directory. Ad esempio, possiamo caricare e salvare un
checkpoint come segue:`),ry.forEach(l),Is=d(e),b(Pe.$$.fragment,e),Ns=d(e),ze=a(e,"H3",{class:!0});var jc=i(ze);qe=a(jc,"A",{id:!0,class:!0,href:!0});var cy=i(qe);La=a(cy,"SPAN",{});var py=i(La);b(Dt.$$.fragment,py),py.forEach(l),cy.forEach(l),du=d(jc),Ha=a(jc,"SPAN",{});var dy=i(Ha);uu=s(dy,"Selezione delle caratteristiche per diverse topologie di modello"),dy.forEach(l),jc.forEach(l),As=d(e),Fe=a(e,"P",{});var Tc=i(Fe);mu=s(Tc,"Ogni configurazione gi\xE0 pronta viene fornita con una serie di "),Ya=a(Tc,"EM",{});var uy=i(Ya);fu=s(uy,"caratteristiche"),uy.forEach(l),hu=s(Tc,` che ti consentono di
esportare modelli per diversi tipi di topologie o attivit\xE0. Come mostrato nella tabella
di seguito, ogni caratteristica \xE8 associata a una diversa Auto Class:`),Tc.forEach(l),ks=d(e),Le=a(e,"TABLE",{});var Uc=i(Le);Ka=a(Uc,"THEAD",{});var my=i(Ka);xt=a(my,"TR",{});var $c=i(xt);ei=a($c,"TH",{});var fy=i(ei);Mu=s(fy,"Caratteristica"),fy.forEach(l),vu=d($c),ti=a($c,"TH",{});var hy=i(ti);yu=s(hy,"Auto Class"),hy.forEach(l),$c.forEach(l),my.forEach(l),bu=d(Uc),S=a(Uc,"TBODY",{});var x=i(S);Pt=a(x,"TR",{});var Jc=i(Pt);qt=a(Jc,"TD",{});var Cc=i(qt);li=a(Cc,"CODE",{});var My=i(li);gu=s(My,"causal-lm"),My.forEach(l),zu=s(Cc,", "),oi=a(Cc,"CODE",{});var vy=i(oi);Eu=s(vy,"causal-lm-with-past"),vy.forEach(l),Cc.forEach(l),wu=d(Jc),ai=a(Jc,"TD",{});var yy=i(ai);ii=a(yy,"CODE",{});var by=i(ii);_u=s(by,"AutoModelForCausalLM"),by.forEach(l),yy.forEach(l),Jc.forEach(l),ju=d(x),Ft=a(x,"TR",{});var Ic=i(Ft);Lt=a(Ic,"TD",{});var Nc=i(Lt);ni=a(Nc,"CODE",{});var gy=i(ni);Tu=s(gy,"default"),gy.forEach(l),Uu=s(Nc,", "),si=a(Nc,"CODE",{});var zy=i(si);$u=s(zy,"default-with-past"),zy.forEach(l),Nc.forEach(l),Ju=d(Ic),ri=a(Ic,"TD",{});var Ey=i(ri);ci=a(Ey,"CODE",{});var wy=i(ci);Cu=s(wy,"AutoModel"),wy.forEach(l),Ey.forEach(l),Ic.forEach(l),Iu=d(x),Ht=a(x,"TR",{});var Ac=i(Ht);pi=a(Ac,"TD",{});var _y=i(pi);di=a(_y,"CODE",{});var jy=i(di);Nu=s(jy,"masked-lm"),jy.forEach(l),_y.forEach(l),Au=d(Ac),ui=a(Ac,"TD",{});var Ty=i(ui);mi=a(Ty,"CODE",{});var Uy=i(mi);ku=s(Uy,"AutoModelForMaskedLM"),Uy.forEach(l),Ty.forEach(l),Ac.forEach(l),Zu=d(x),Yt=a(x,"TR",{});var kc=i(Yt);fi=a(kc,"TD",{});var $y=i(fi);hi=a($y,"CODE",{});var Jy=i(hi);Bu=s(Jy,"question-answering"),Jy.forEach(l),$y.forEach(l),Wu=d(kc),Mi=a(kc,"TD",{});var Cy=i(Mi);vi=a(Cy,"CODE",{});var Iy=i(vi);Ru=s(Iy,"AutoModelForQuestionAnswering"),Iy.forEach(l),Cy.forEach(l),kc.forEach(l),Xu=d(x),Kt=a(x,"TR",{});var Zc=i(Kt);el=a(Zc,"TD",{});var Bc=i(el);yi=a(Bc,"CODE",{});var Ny=i(yi);Gu=s(Ny,"seq2seq-lm"),Ny.forEach(l),Su=s(Bc,", "),bi=a(Bc,"CODE",{});var Ay=i(bi);Vu=s(Ay,"seq2seq-lm-with-past"),Ay.forEach(l),Bc.forEach(l),Qu=d(Zc),gi=a(Zc,"TD",{});var ky=i(gi);zi=a(ky,"CODE",{});var Zy=i(zi);Ou=s(Zy,"AutoModelForSeq2SeqLM"),Zy.forEach(l),ky.forEach(l),Zc.forEach(l),Du=d(x),tl=a(x,"TR",{});var Wc=i(tl);Ei=a(Wc,"TD",{});var By=i(Ei);wi=a(By,"CODE",{});var Wy=i(wi);xu=s(Wy,"sequence-classification"),Wy.forEach(l),By.forEach(l),Pu=d(Wc),_i=a(Wc,"TD",{});var Ry=i(_i);ji=a(Ry,"CODE",{});var Xy=i(ji);qu=s(Xy,"AutoModelForSequenceClassification"),Xy.forEach(l),Ry.forEach(l),Wc.forEach(l),Fu=d(x),ll=a(x,"TR",{});var Rc=i(ll);Ti=a(Rc,"TD",{});var Gy=i(Ti);Ui=a(Gy,"CODE",{});var Sy=i(Ui);Lu=s(Sy,"token-classification"),Sy.forEach(l),Gy.forEach(l),Hu=d(Rc),$i=a(Rc,"TD",{});var Vy=i($i);Ji=a(Vy,"CODE",{});var Qy=i(Ji);Yu=s(Qy,"AutoModelForTokenClassification"),Qy.forEach(l),Vy.forEach(l),Rc.forEach(l),x.forEach(l),Uc.forEach(l),Zs=d(e),He=a(e,"P",{});var Xc=i(He);Ku=s(Xc,`Per ciascuna configurazione, puoi trovare l\u2019elenco delle funzionalit\xE0 supportate tramite il
`),Ci=a(Xc,"CODE",{});var Oy=i(Ci);em=s(Oy,"FeaturesManager"),Oy.forEach(l),tm=s(Xc,". Ad esempio, per DistilBERT abbiamo:"),Xc.forEach(l),Bs=d(e),b(ol.$$.fragment,e),Ws=d(e),se=a(e,"P",{});var xo=i(se);lm=s(xo,"Puoi quindi passare una di queste funzionalit\xE0 all\u2019argomento "),Ii=a(xo,"CODE",{});var Dy=i(Ii);om=s(Dy,"--feature"),Dy.forEach(l),am=s(xo,` nel
pacchetto `),Ni=a(xo,"CODE",{});var xy=i(Ni);im=s(xy,"transformers.onnx"),xy.forEach(l),nm=s(xo,`. Ad esempio, per esportare un modello di classificazione del testo
possiamo scegliere un modello ottimizzato dall\u2019Hub ed eseguire:`),xo.forEach(l),Rs=d(e),b(al.$$.fragment,e),Xs=d(e),uo=a(e,"P",{});var Py=i(uo);sm=s(Py,"che visualizzer\xE0 i seguenti registri:"),Py.forEach(l),Gs=d(e),b(il.$$.fragment,e),Ss=d(e),Y=a(e,"P",{});var $t=i(Y);rm=s($t,`Puoi notare che in questo caso, i nomi di output del modello ottimizzato sono
`),Ai=a($t,"CODE",{});var qy=i(Ai);cm=s(qy,"logits"),qy.forEach(l),pm=s($t," invece di "),ki=a($t,"CODE",{});var Fy=i(ki);dm=s(Fy,"last_hidden_state"),Fy.forEach(l),um=s($t,` che abbiamo visto con il
checkpoint `),Zi=a($t,"CODE",{});var Ly=i(Zi);mm=s(Ly,"distilbert-base-uncased"),Ly.forEach(l),fm=s($t,` precedente. Questo \xE8 previsto dal
modello ottimizato visto che ha una testa di e.`),$t.forEach(l),Vs=d(e),b(Ye.$$.fragment,e),Qs=d(e),Ee=a(e,"H3",{class:!0});var Gc=i(Ee);Ke=a(Gc,"A",{id:!0,class:!0,href:!0});var Hy=i(Ke);Bi=a(Hy,"SPAN",{});var Yy=i(Bi);b(nl.$$.fragment,Yy),Yy.forEach(l),Hy.forEach(l),hm=d(Gc),Wi=a(Gc,"SPAN",{});var Ky=i(Wi);Mm=s(Ky,"Esportazione di un modello per un'architettura non supportata"),Ky.forEach(l),Gc.forEach(l),Os=d(e),mo=a(e,"P",{});var eb=i(mo);vm=s(eb,`Se desideri esportare un modello la cui architettura non \xE8 nativamente supportata dalla
libreria, ci sono tre passaggi principali da seguire:`),eb.forEach(l),Ds=d(e),re=a(e,"OL",{});var Po=i(re);Ri=a(Po,"LI",{});var tb=i(Ri);ym=s(tb,"Implementare una configurazione ONNX personalizzata."),tb.forEach(l),bm=d(Po),Xi=a(Po,"LI",{});var lb=i(Xi);gm=s(lb,"Esportare il modello in ONNX."),lb.forEach(l),zm=d(Po),Gi=a(Po,"LI",{});var ob=i(Gi);Em=s(ob,"Convalidare gli output di PyTorch e dei modelli esportati."),ob.forEach(l),Po.forEach(l),xs=d(e),fo=a(e,"P",{});var ab=i(fo);wm=s(ab,`In questa sezione, vedremo come DistilBERT \xE8 stato implementato per mostrare cosa \xE8
coinvolto in ogni passaggio.`),ab.forEach(l),Ps=d(e),we=a(e,"H4",{class:!0});var Sc=i(we);et=a(Sc,"A",{id:!0,class:!0,href:!0});var ib=i(et);Si=a(ib,"SPAN",{});var nb=i(Si);b(sl.$$.fragment,nb),nb.forEach(l),ib.forEach(l),_m=d(Sc),Vi=a(Sc,"SPAN",{});var sb=i(Vi);jm=s(sb,"Implementazione di una configurazione ONNX personalizzata"),sb.forEach(l),Sc.forEach(l),qs=d(e),ho=a(e,"P",{});var rb=i(ho);Tm=s(rb,`Iniziamo con l\u2019oggetto di configurazione ONNX. Forniamo tre classi
astratte da cui ereditare, a seconda del tipo di archittettura
del modello che desideri esportare:`),rb.forEach(l),Fs=d(e),ce=a(e,"UL",{});var qo=i(ce);Mo=a(qo,"LI",{});var FM=i(Mo);Um=s(FM,"I modelli basati su encoder ereditano da "),Qi=a(FM,"CODE",{});var cb=i(Qi);$m=s(cb,"OnnxConfig"),cb.forEach(l),FM.forEach(l),Jm=d(qo),vo=a(qo,"LI",{});var LM=i(vo);Cm=s(LM,"I modelli basati su decoder ereditano da "),Oi=a(LM,"CODE",{});var pb=i(Oi);Im=s(pb,"OnnxConfigWithPast"),pb.forEach(l),LM.forEach(l),Nm=d(qo),yo=a(qo,"LI",{});var HM=i(yo);Am=s(HM,"I modelli encoder-decoder ereditano da"),Di=a(HM,"CODE",{});var db=i(Di);km=s(db,"OnnxSeq2SeqConfigWithPast"),db.forEach(l),HM.forEach(l),qo.forEach(l),Ls=d(e),b(tt.$$.fragment,e),Hs=d(e),lt=a(e,"P",{});var Vc=i(lt);Zm=s(Vc,`Poich\xE9 DistilBERT \xE8 un modello basato su encoder, la sua configurazione eredita da
`),xi=a(Vc,"CODE",{});var ub=i(xi);Bm=s(ub,"OnnxConfig"),ub.forEach(l),Wm=s(Vc,":"),Vc.forEach(l),Ys=d(e),b(rl.$$.fragment,e),Ks=d(e),D=a(e,"P",{});var Me=i(D);Rm=s(Me,"Ogni oggetto di configurazione deve implementare la propriet\xE0 "),Pi=a(Me,"CODE",{});var mb=i(Pi);Xm=s(mb,"inputs"),mb.forEach(l),Gm=s(Me,` e restituire una
mappatura, dove ogni chiave corrisponde a un input previsto e ogni valore
indica l\u2019asse di quell\u2019input. Per DistilBERT, possiamo vedere che sono richiesti
due input: `),qi=a(Me,"CODE",{});var fb=i(qi);Sm=s(fb,"input_ids"),fb.forEach(l),Vm=s(Me," e "),Fi=a(Me,"CODE",{});var hb=i(Fi);Qm=s(hb,"attention_mask"),hb.forEach(l),Om=s(Me,`. Questi inputs hanno la stessa forma di
`),Li=a(Me,"CODE",{});var Mb=i(Li);Dm=s(Mb,"(batch_size, sequence_length)"),Mb.forEach(l),xm=s(Me,` per questo motivo vediamo gli stessi assi usati nella
configurazione.`),Me.forEach(l),er=d(e),b(ot.$$.fragment,e),tr=d(e),bo=a(e,"P",{});var vb=i(bo);Pm=s(vb,`Dopo aver implementato una configurazione ONNX, \xE8 possibile istanziarla
fornendo alla configurazione del modello base come segue:`),vb.forEach(l),lr=d(e),b(cl.$$.fragment,e),or=d(e),go=a(e,"P",{});var yb=i(go);qm=s(yb,`L\u2019oggetto risultante ha diverse propriet\xE0 utili. Ad esempio \xE8 possibile visualizzare il
Set operatore ONNX che verr\xE0 utilizzato durante l\u2019esportazione:`),yb.forEach(l),ar=d(e),b(pl.$$.fragment,e),ir=d(e),zo=a(e,"P",{});var bb=i(zo);Fm=s(bb,"\xC8 inoltre possibile visualizzare gli output associati al modello come segue:"),bb.forEach(l),nr=d(e),b(dl.$$.fragment,e),sr=d(e),K=a(e,"P",{});var Jt=i(K);Lm=s(Jt,`Puoi notare che la propriet\xE0 degli output segue la stessa struttura degli input; esso
restituisce un `),Hi=a(Jt,"CODE",{});var gb=i(Hi);Hm=s(gb,"OrderedDict"),gb.forEach(l),Ym=s(Jt,` di output con nome e le loro forme. La struttura di output
\xE8 legato alla scelta della funzione con cui viene inizializzata la configurazione.
Per impostazione predefinita, la configurazione ONNX viene inizializzata con la funzione \u2018predefinita\u2019
che corrisponde all\u2019esportazione di un modello caricato con la classe `),Yi=a(Jt,"CODE",{});var zb=i(Yi);Km=s(zb,"AutoModel"),zb.forEach(l),ef=s(Jt,`. Se tu
desideri esportare una topologia di modello diversa, \xE8 sufficiente fornire una funzionalit\xE0 diversa a
l\u2019argomento `),Ki=a(Jt,"CODE",{});var Eb=i(Ki);tf=s(Eb,"task"),Eb.forEach(l),lf=s(Jt,` quando inizializzi la configurazione ONNX. Ad esempio, se
volevamo esportare DistilBERT con una testa di classificazione per sequenze, potremmo
usare:`),Jt.forEach(l),rr=d(e),b(ul.$$.fragment,e),cr=d(e),b(at.$$.fragment,e),pr=d(e),_e=a(e,"H4",{class:!0});var Qc=i(_e);it=a(Qc,"A",{id:!0,class:!0,href:!0});var wb=i(it);en=a(wb,"SPAN",{});var _b=i(en);b(ml.$$.fragment,_b),_b.forEach(l),wb.forEach(l),of=d(Qc),tn=a(Qc,"SPAN",{});var jb=i(tn);af=s(jb,"Esportazione del modello"),jb.forEach(l),Qc.forEach(l),dr=d(e),pe=a(e,"P",{});var Fo=i(pe);nf=s(Fo,`Una volta implementata la configurazione ONNX, il passaggio successivo consiste nell\u2019esportare il
modello. Qui possiamo usare la funzione `),ln=a(Fo,"CODE",{});var Tb=i(ln);sf=s(Tb,"export()"),Tb.forEach(l),rf=s(Fo,` fornita dal
pacchetto `),on=a(Fo,"CODE",{});var Ub=i(on);cf=s(Ub,"transformers.onnx"),Ub.forEach(l),pf=s(Fo,`. Questa funzione prevede la configurazione ONNX, insieme
con il modello base e il tokenizer e il percorso per salvare il file esportato:`),Fo.forEach(l),ur=d(e),b(fl.$$.fragment,e),mr=d(e),V=a(e,"P",{});var le=i(V);df=s(le,"Gli "),an=a(le,"CODE",{});var $b=i(an);uf=s($b,"onnx_inputs"),$b.forEach(l),mf=s(le," e "),nn=a(le,"CODE",{});var Jb=i(nn);ff=s(Jb,"onnx_outputs"),Jb.forEach(l),hf=s(le," restituiti dalla funzione "),sn=a(le,"CODE",{});var Cb=i(sn);Mf=s(Cb,"export()"),Cb.forEach(l),vf=s(le,` sono
liste di chiavi definite nelle propriet\xE0 di `),rn=a(le,"CODE",{});var Ib=i(rn);yf=s(Ib,"input"),Ib.forEach(l),bf=s(le," e "),cn=a(le,"CODE",{});var Nb=i(cn);gf=s(Nb,"output"),Nb.forEach(l),zf=s(le,` della
configurazione. Una volta esportato il modello, puoi verificare che il modello sia ben
formato come segue:`),le.forEach(l),fr=d(e),b(hl.$$.fragment,e),hr=d(e),b(nt.$$.fragment,e),Mr=d(e),je=a(e,"H4",{class:!0});var Oc=i(je);st=a(Oc,"A",{id:!0,class:!0,href:!0});var Ab=i(st);pn=a(Ab,"SPAN",{});var kb=i(pn);b(Ml.$$.fragment,kb),kb.forEach(l),Ab.forEach(l),Ef=d(Oc),dn=a(Oc,"SPAN",{});var Zb=i(dn);wf=s(Zb,"Convalida degli output del modello"),Zb.forEach(l),Oc.forEach(l),vr=d(e),de=a(e,"P",{});var Lo=i(de);_f=s(Lo,`Il passaggio finale consiste nel convalidare gli output dal modello di base e quello esportato
corrispondere entro una soglia di tolleranza assoluta. Qui possiamo usare la
Funzione `),un=a(Lo,"CODE",{});var Bb=i(un);jf=s(Bb,"validate_model_outputs()"),Bb.forEach(l),Tf=s(Lo," fornita dal pacchetto "),mn=a(Lo,"CODE",{});var Wb=i(mn);Uf=s(Wb,"transformers.onnx"),Wb.forEach(l),$f=s(Lo,`
come segue:`),Lo.forEach(l),yr=d(e),b(vl.$$.fragment,e),br=d(e),rt=a(e,"P",{});var Dc=i(rt);Jf=s(Dc,"Questa funzione usa il metodo "),fn=a(Dc,"CODE",{});var Rb=i(fn);Cf=s(Rb,"OnnxConfig.generate_dummy_inputs()"),Rb.forEach(l),If=s(Dc,` per generare
input per il modello di base e quello esportato e la tolleranza assoluta pu\xF2 essere
definita nella configurazione. Generalmente troviamo una corrispondenza numerica nell\u2019intervallo da 1e-6
a 1e-4, anche se \xE8 probabile che qualsiasi cosa inferiore a 1e-3 vada bene.`),Dc.forEach(l),gr=d(e),Te=a(e,"H3",{class:!0});var xc=i(Te);ct=a(xc,"A",{id:!0,class:!0,href:!0});var Xb=i(ct);hn=a(Xb,"SPAN",{});var Gb=i(hn);b(yl.$$.fragment,Gb),Gb.forEach(l),Xb.forEach(l),Nf=d(xc),Mn=a(xc,"SPAN",{});var Sb=i(Mn);Af=s(Sb,"Contribuire con una nuova configurazione a \u{1F917} Transformers"),Sb.forEach(l),xc.forEach(l),zr=d(e),Eo=a(e,"P",{});var Vb=i(Eo);kf=s(Vb,`Stiamo cercando di espandere l\u2019insieme di configurazioni gi\xE0 pronte e di accettare
contributi della community! Se vuoi contribuire con la tua aggiunta
nella libreria, dovrai:`),Vb.forEach(l),Er=d(e),ue=a(e,"UL",{});var Ho=i(ue);wo=a(Ho,"LI",{});var YM=i(wo);Zf=s(YM,"Implementare la configurazione ONNX nella corrispondente "),vn=a(YM,"CODE",{});var Qb=i(vn);Bf=s(Qb,"configuration file _<model_name>.py"),Qb.forEach(l),YM.forEach(l),Wf=d(Ho),_o=a(Ho,"LI",{});var KM=i(_o);Rf=s(KM,"Includere l\u2019architettura del modello e le funzioni corrispondenti in "),yn=a(KM,"CODE",{});var Ob=i(yn);Xf=s(Ob,"~onnx.features.FeatureManager"),Ob.forEach(l),KM.forEach(l),Gf=d(Ho),jo=a(Ho,"LI",{});var ev=i(jo);Sf=s(ev,"Aggiungere la tua architettura del modello ai test in "),bn=a(ev,"CODE",{});var Db=i(bn);Vf=s(Db,"test_onnx_v2.py"),Db.forEach(l),ev.forEach(l),Ho.forEach(l),wr=d(e),pt=a(e,"P",{});var Pc=i(pt);Qf=s(Pc,`Scopri come stato contribuito la configurazione per [IBERT]
(`),bl=a(Pc,"A",{href:!0,rel:!0});var xb=i(bl);Of=s(xb,"https://github.com/huggingface/transformers/pull/14868/files"),xb.forEach(l),Df=s(Pc,`) per
avere un\u2019idea di cosa \xE8 coinvolto.`),Pc.forEach(l),_r=d(e),Ue=a(e,"H2",{class:!0});var qc=i(Ue);dt=a(qc,"A",{id:!0,class:!0,href:!0});var Pb=i(dt);gn=a(Pb,"SPAN",{});var qb=i(gn);b(gl.$$.fragment,qb),qb.forEach(l),Pb.forEach(l),xf=d(qc),zn=a(qc,"SPAN",{});var Fb=i(zn);Pf=s(Fb,"TorchScript"),Fb.forEach(l),qc.forEach(l),jr=d(e),b(ut.$$.fragment,e),Tr=d(e),mt=a(e,"P",{});var Fc=i(mt);qf=s(Fc,`Secondo la documentazione di Pytorch: \u201CTorchScript \xE8 un modo per creare modelli serializzabili e ottimizzabili da codice
Pytorch\u201D. I due moduli di Pytorch `),zl=a(Fc,"A",{href:!0,rel:!0});var Lb=i(zl);Ff=s(Lb,"JIT e TRACE"),Lb.forEach(l),Lf=s(Fc,` consentono allo sviluppatore di esportare
il loro modello da riutilizzare in altri programmi, come i programmi C++ orientati all\u2019efficienza.`),Fc.forEach(l),Ur=d(e),To=a(e,"P",{});var Hb=i(To);Hf=s(Hb,`Abbiamo fornito un\u2019interfaccia che consente l\u2019esportazione di modelli \u{1F917} Transformers in TorchScript in modo che possano essere riutilizzati
in un ambiente diverso rispetto a un programma Python basato su Pytorch. Qui spieghiamo come esportare e utilizzare i nostri modelli utilizzando
TorchScript.`),Hb.forEach(l),$r=d(e),Uo=a(e,"P",{});var Yb=i(Uo);Yf=s(Yb,"Esportare un modello richiede due cose:"),Yb.forEach(l),Jr=d(e),ft=a(e,"UL",{});var Lc=i(ft);En=a(Lc,"LI",{});var Kb=i(En);Kf=s(Kb,"Un passaggio in avanti con input fittizzi."),Kb.forEach(l),eh=d(Lc),El=a(Lc,"LI",{});var Hc=i(El);th=s(Hc,"Istanziazione del modello con flag "),wn=a(Hc,"CODE",{});var eg=i(wn);lh=s(eg,"torchscript"),eg.forEach(l),oh=s(Hc,"."),Hc.forEach(l),Lc.forEach(l),Cr=d(e),$o=a(e,"P",{});var tg=i($o);ah=s(tg,"Queste necessit\xE0 implicano diverse cose a cui gli sviluppatori dovrebbero prestare attenzione. Questi dettagli mostrati sotto."),tg.forEach(l),Ir=d(e),$e=a(e,"H3",{class:!0});var Yc=i($e);ht=a(Yc,"A",{id:!0,class:!0,href:!0});var lg=i(ht);_n=a(lg,"SPAN",{});var og=i(_n);b(wl.$$.fragment,og),og.forEach(l),lg.forEach(l),ih=d(Yc),jn=a(Yc,"SPAN",{});var ag=i(jn);nh=s(ag,"Flag TorchScript e pesi legati"),ag.forEach(l),Yc.forEach(l),Nr=d(e),Jo=a(e,"P",{});var ig=i(Jo);sh=s(ig,`Questo flag \xE8 necessario perch\xE9 la maggior parte dei modelli linguistici in questo repository hanno pesi legati tra il loro
strato \u201CEmbedding\u201D e lo strato \u201CDecoding\u201D. TorchScript non consente l\u2019esportazione di modelli che hanno pesi
legati, quindi \xE8 necessario prima slegare e clonare i pesi.`),ig.forEach(l),Ar=d(e),ee=a(e,"P",{});var Ct=i(ee);rh=s(Ct,"Ci\xF2 implica che i modelli istanziati con il flag "),Tn=a(Ct,"CODE",{});var ng=i(Tn);ch=s(ng,"torchscript"),ng.forEach(l),ph=s(Ct," hanno il loro strato "),Un=a(Ct,"CODE",{});var sg=i(Un);dh=s(sg,"Embedding"),sg.forEach(l),uh=s(Ct," e strato "),$n=a(Ct,"CODE",{});var rg=i($n);mh=s(rg,"Decoding"),rg.forEach(l),fh=s(Ct,`
separato, il che significa che non dovrebbero essere addestrati in futuro. L\u2019allenamento de-sincronizza i due
strati, portando a risultati inaspettati.`),Ct.forEach(l),kr=d(e),Mt=a(e,"P",{});var Kc=i(Mt);hh=s(Kc,`Questo non \xE8 il caso per i modelli che non hanno una testa del modello linguistico, poich\xE9 quelli non hanno pesi legati. Questi modelli
pu\xF2 essere esportato in sicurezza senza il flag `),Jn=a(Kc,"CODE",{});var cg=i(Jn);Mh=s(cg,"torchscript"),cg.forEach(l),vh=s(Kc,"."),Kc.forEach(l),Zr=d(e),Je=a(e,"H3",{class:!0});var ep=i(Je);vt=a(ep,"A",{id:!0,class:!0,href:!0});var pg=i(vt);Cn=a(pg,"SPAN",{});var dg=i(Cn);b(_l.$$.fragment,dg),dg.forEach(l),pg.forEach(l),yh=d(ep),In=a(ep,"SPAN",{});var ug=i(In);bh=s(ug,"Input fittizi e standard lengths"),ug.forEach(l),ep.forEach(l),Br=d(e),Co=a(e,"P",{});var mg=i(Co);gh=s(mg,`Gli input fittizzi sono usati per fare un modello passaggio in avanti . Mentre i valori degli input si propagano attraverso i strati,
Pytorch tiene traccia delle diverse operazioni eseguite su ciascun tensore. Queste operazioni registrate vengono quindi utilizzate per
creare la \u201Ctraccia\u201D del modello.`),mg.forEach(l),Wr=d(e),Io=a(e,"P",{});var fg=i(Io);zh=s(fg,`La traccia viene creata relativamente alle dimensioni degli input. \xC8 quindi vincolato dalle dimensioni dell\u2019input
fittizio e non funzioner\xE0 per altre lunghezze di sequenza o dimensioni batch. Quando si prover\xE0 con una dimensione diversa, ci sar\xE0 errore
come:`),fg.forEach(l),Rr=d(e),No=a(e,"P",{});var hg=i(No);Nn=a(hg,"CODE",{});var Mg=i(Nn);Eh=s(Mg,"La dimensione espansa del tensore (3) deve corrispondere alla dimensione esistente (7) nella dimensione non singleton 2"),Mg.forEach(l),hg.forEach(l),Xr=d(e),Ao=a(e,"P",{});var vg=i(Ao);wh=s(vg,`will be raised. Si consiglia pertanto di tracciare il modello con una dimensione di input fittizia grande almeno quanto il pi\xF9 grande
input che verr\xE0 fornito al modello durante l\u2019inferenza. \xC8 possibile eseguire il padding per riempire i valori mancanti. Il modello
sar\xE0 tracciato con una grande dimensione di input, tuttavia, anche le dimensioni della diverse matrici saranno grandi,
risultando in pi\xF9 calcoli.`),vg.forEach(l),Gr=d(e),ko=a(e,"P",{});var yg=i(ko);_h=s(yg,`Si raccomanda di prestare attenzione al numero totale di operazioni eseguite su ciascun input e di seguire da vicino le prestazioni
durante l\u2019esportazione di modelli di sequenza-lunghezza variabili.`),yg.forEach(l),Sr=d(e),Ce=a(e,"H3",{class:!0});var tp=i(Ce);yt=a(tp,"A",{id:!0,class:!0,href:!0});var bg=i(yt);An=a(bg,"SPAN",{});var gg=i(An);b(jl.$$.fragment,gg),gg.forEach(l),bg.forEach(l),jh=d(tp),kn=a(tp,"SPAN",{});var zg=i(kn);Th=s(zg,"Usare TorchSscript in Python"),zg.forEach(l),tp.forEach(l),Vr=d(e),Zo=a(e,"P",{});var Eg=i(Zo);Uh=s(Eg,"Di seguito \xE8 riportato un esempio, che mostra come salvare, caricare modelli e come utilizzare la traccia per l\u2019inferenza."),Eg.forEach(l),Qr=d(e),Ie=a(e,"H4",{class:!0});var lp=i(Ie);bt=a(lp,"A",{id:!0,class:!0,href:!0});var wg=i(bt);Zn=a(wg,"SPAN",{});var _g=i(Zn);b(Tl.$$.fragment,_g),_g.forEach(l),wg.forEach(l),$h=d(lp),Bn=a(lp,"SPAN",{});var jg=i(Bn);Jh=s(jg,"Salvare un modello"),jg.forEach(l),lp.forEach(l),Or=d(e),L=a(e,"P",{});var Xe=i(L);Ch=s(Xe,"Questo frammento di codice mostra come usare TorchScript per esportare un "),Wn=a(Xe,"CODE",{});var Tg=i(Wn);Ih=s(Tg,"BertModel"),Tg.forEach(l),Nh=s(Xe,". Qui il "),Rn=a(Xe,"CODE",{});var Ug=i(Rn);Ah=s(Ug,"BertModel"),Ug.forEach(l),kh=s(Xe,` \xE8 istanziato secondo
una classe `),Xn=a(Xe,"CODE",{});var $g=i(Xn);Zh=s($g,"BertConfig"),$g.forEach(l),Bh=s(Xe," e quindi salvato su disco con il nome del file "),Gn=a(Xe,"CODE",{});var Jg=i(Gn);Wh=s(Jg,"traced_bert.pt"),Jg.forEach(l),Xe.forEach(l),Dr=d(e),b(Ul.$$.fragment,e),xr=d(e),Ne=a(e,"H4",{class:!0});var op=i(Ne);gt=a(op,"A",{id:!0,class:!0,href:!0});var Cg=i(gt);Sn=a(Cg,"SPAN",{});var Ig=i(Sn);b($l.$$.fragment,Ig),Ig.forEach(l),Cg.forEach(l),Rh=d(op),Vn=a(op,"SPAN",{});var Ng=i(Vn);Xh=s(Ng,"Caricare un modello"),Ng.forEach(l),op.forEach(l),Pr=d(e),te=a(e,"P",{});var It=i(te);Gh=s(It,"Questo frammento di codice mostra come caricare il "),Qn=a(It,"CODE",{});var Ag=i(Qn);Sh=s(Ag,"BertModel"),Ag.forEach(l),Vh=s(It," che era stato precedentemente salvato su disco con il nome "),On=a(It,"CODE",{});var kg=i(On);Qh=s(kg,"traced_bert.pt"),kg.forEach(l),Oh=s(It,`.
Stiamo riutilizzando il `),Dn=a(It,"CODE",{});var Zg=i(Dn);Dh=s(Zg,"dummy_input"),Zg.forEach(l),xh=s(It," precedentemente inizializzato."),It.forEach(l),qr=d(e),b(Jl.$$.fragment,e),Fr=d(e),Ae=a(e,"H4",{class:!0});var ap=i(Ae);zt=a(ap,"A",{id:!0,class:!0,href:!0});var Bg=i(zt);xn=a(Bg,"SPAN",{});var Wg=i(xn);b(Cl.$$.fragment,Wg),Wg.forEach(l),Bg.forEach(l),Ph=d(ap),Pn=a(ap,"SPAN",{});var Rg=i(Pn);qh=s(Rg,"Utilizzare un modello tracciato per l'inferenza"),Rg.forEach(l),ap.forEach(l),Lr=d(e),Et=a(e,"P",{});var ip=i(Et);Fh=s(ip,"Usare il modello tracciato per l\u2019inferenza \xE8 semplice come usare il suo metodo dunder "),qn=a(ip,"CODE",{});var Xg=i(qn);Lh=s(Xg,"__call__"),Xg.forEach(l),Hh=s(ip,":"),ip.forEach(l),Hr=d(e),b(Il.$$.fragment,e),Yr=d(e),Bo=a(e,"P",{});var Gg=i(Bo);Yh=s(Gg,"###Implementare modelli HuggingFace TorchScript su AWS utilizzando Neuron SDK"),Gg.forEach(l),Kr=d(e),me=a(e,"P",{});var Yo=i(me);Kh=s(Yo,"AWS ha introdotto "),Nl=a(Yo,"A",{href:!0,rel:!0});var Sg=i(Nl);eM=s(Sg,"Amazon EC2 Inf1"),Sg.forEach(l),tM=s(Yo,`
famiglia di istanze per l\u2019inferenza di machine learning a basso costo e ad alte prestazioni nel cloud.
Le istanze Inf1 sono alimentate dal chip AWS Inferentia, un acceleratore hardware personalizzato,
specializzato in carichi di lavoro di inferenza di deep learning.
`),Al=a(Yo,"A",{href:!0,rel:!0});var Vg=i(Al);lM=s(Vg,"AWS Neuron"),Vg.forEach(l),oM=s(Yo,`
\xE8 l\u2019SDK per Inferentia che supporta il tracciamento e l\u2019ottimizzazione dei modelli transformers per
distribuzione su Inf1. L\u2019SDK Neuron fornisce:`),Yo.forEach(l),ec=d(e),fe=a(e,"OL",{});var Ko=i(fe);Fn=a(Ko,"LI",{});var Qg=i(Fn);aM=s(Qg,"API di facile utilizzo con una riga di modifica del codice per tracciare e ottimizzare un modello TorchScript per l\u2019inferenza nel cloud."),Qg.forEach(l),iM=d(Ko),Wo=a(Ko,"LI",{});var tv=i(Wo);nM=s(tv,"Ottimizzazioni delle prestazioni pronte all\u2019uso per "),kl=a(tv,"A",{href:!0,rel:!0});var Og=i(kl);sM=s(Og,"miglioramento dei costi-prestazioni"),Og.forEach(l),tv.forEach(l),rM=d(Ko),ke=a(Ko,"LI",{});var ea=i(ke);cM=s(ea,"Supporto per i modelli di trasformatori HuggingFace costruiti con "),Zl=a(ea,"A",{href:!0,rel:!0});var Dg=i(Zl);pM=s(Dg,"PyTorch"),Dg.forEach(l),dM=s(ea,`
o `),Bl=a(ea,"A",{href:!0,rel:!0});var xg=i(Bl);uM=s(xg,"TensorFlow"),xg.forEach(l),mM=s(ea,"."),ea.forEach(l),Ko.forEach(l),tc=d(e),Ze=a(e,"H4",{class:!0});var np=i(Ze);wt=a(np,"A",{id:!0,class:!0,href:!0});var Pg=i(wt);Ln=a(Pg,"SPAN",{});var qg=i(Ln);b(Wl.$$.fragment,qg),qg.forEach(l),Pg.forEach(l),fM=d(np),Hn=a(np,"SPAN",{});var Fg=i(Hn);hM=s(Fg,"Implicazioni"),Fg.forEach(l),np.forEach(l),lc=d(e),Q=a(e,"P",{});var oe=i(Q);MM=s(oe,"Modelli Transformers basati su architettura "),Rl=a(oe,"A",{href:!0,rel:!0});var Lg=i(Rl);vM=s(Lg,"BERT (Bidirectional Encoder Representations from Transformers)"),Lg.forEach(l),yM=s(oe,`,
o sue varianti come `),Xl=a(oe,"A",{href:!0,rel:!0});var Hg=i(Xl);bM=s(Hg,"distilBERT"),Hg.forEach(l),gM=s(oe,`
e `),Gl=a(oe,"A",{href:!0,rel:!0});var Yg=i(Gl);zM=s(Yg,"roBERTa"),Yg.forEach(l),EM=s(oe,`
funzioneranno meglio su Inf1 per attivit\xE0 non generative come la question answering estrattive,
Classificazione della sequenza, Classificazione dei token. In alternativa, generazione di testo
le attivit\xE0 possono essere adattate per essere eseguite su Inf1, secondo questo `),Sl=a(oe,"A",{href:!0,rel:!0});var Kg=i(Sl);wM=s(Kg,"tutorial AWS Neuron MarianMT"),Kg.forEach(l),_M=s(oe,`.
Ulteriori informazioni sui modelli che possono essere convertiti fuori dagli schemi su Inferentia possono essere
trovati nella `),Vl=a(oe,"A",{href:!0,rel:!0});var ez=i(Vl);jM=s(ez,"sezione Model Architecture Fit della documentazione Neuron"),ez.forEach(l),TM=s(oe,"."),oe.forEach(l),oc=d(e),Be=a(e,"H4",{class:!0});var sp=i(Be);_t=a(sp,"A",{id:!0,class:!0,href:!0});var tz=i(_t);Yn=a(tz,"SPAN",{});var lz=i(Yn);b(Ql.$$.fragment,lz),lz.forEach(l),tz.forEach(l),UM=d(sp),Kn=a(sp,"SPAN",{});var oz=i(Kn);$M=s(oz,"Dipendenze"),oz.forEach(l),sp.forEach(l),ac=d(e),Ro=a(e,"P",{});var az=i(Ro);JM=s(az,"L\u2019utilizzo di AWS Neuron per convertire i modelli richiede le seguenti dipendenze e l\u2019ambiente:"),az.forEach(l),ic=d(e),Xo=a(e,"UL",{});var iz=i(Xo);We=a(iz,"LI",{});var ta=i(We);CM=s(ta,"A "),Ol=a(ta,"A",{href:!0,rel:!0});var nz=i(Ol);IM=s(nz,"Neuron SDK environment"),nz.forEach(l),NM=s(ta,`,
which comes pre-configured on `),Dl=a(ta,"A",{href:!0,rel:!0});var sz=i(Dl);AM=s(sz,"AWS Deep Learning AMI"),sz.forEach(l),kM=s(ta,"."),ta.forEach(l),iz.forEach(l),nc=d(e),Re=a(e,"H4",{class:!0});var rp=i(Re);jt=a(rp,"A",{id:!0,class:!0,href:!0});var rz=i(jt);es=a(rz,"SPAN",{});var cz=i(es);b(xl.$$.fragment,cz),cz.forEach(l),rz.forEach(l),ZM=d(rp),ts=a(rp,"SPAN",{});var pz=i(ts);BM=s(pz,"Convertire un modello per AWS Neuron"),pz.forEach(l),rp.forEach(l),sc=d(e),he=a(e,"P",{});var la=i(he);WM=s(la,"Usando lo stesso script come in "),Pl=a(la,"A",{href:!0,rel:!0});var dz=i(Pl);RM=s(dz,"Usando TorchScipt in Python"),dz.forEach(l),XM=s(la,`
per tracciare un \u201CBertModel\u201D, importi l\u2019estensione del framework `),ls=a(la,"CODE",{});var uz=i(ls);GM=s(uz,"torch.neuron"),uz.forEach(l),SM=s(la,` per accedere
i componenti di Neuron SDK tramite un\u2019API Python.`),la.forEach(l),rc=d(e),b(ql.$$.fragment,e),cc=d(e),Go=a(e,"P",{});var mz=i(Go);VM=s(mz,"E modificare solo la riga di codice di traccia"),mz.forEach(l),pc=d(e),So=a(e,"P",{});var fz=i(So);QM=s(fz,"Da:"),fz.forEach(l),dc=d(e),b(Fl.$$.fragment,e),uc=d(e),Vo=a(e,"P",{});var hz=i(Vo);OM=s(hz,"A:"),hz.forEach(l),mc=d(e),b(Ll.$$.fragment,e),fc=d(e),Qo=a(e,"P",{});var Mz=i(Qo);DM=s(Mz,"Questa modifica consente a Neuron SDK di tracciare il modello e ottimizzarlo per l\u2019esecuzione nelle istanze Inf1."),Mz.forEach(l),hc=d(e),Tt=a(e,"P",{});var cp=i(Tt);xM=s(cp,`Per ulteriori informazioni sulle funzionalit\xE0, gli strumenti, i tutorial di esempi e gli ultimi aggiornamenti di AWS Neuron SDK,
consultare la `),Hl=a(cp,"A",{href:!0,rel:!0});var vz=i(Hl);PM=s(vz,"documentazione AWS NeuronSDK"),vz.forEach(l),qM=s(cp,"."),cp.forEach(l),this.h()},h(){u(m,"name","hf:doc:metadata"),u(m,"content",JSON.stringify(Wz)),u(_,"id","esporta-modelli-transformers"),u(_,"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(_,"href","#esporta-modelli-transformers"),u(f,"class","relative group"),u(X,"href","https://github.com/huggingface/optimum"),u(X,"rel","nofollow"),u(O,"id","onnx"),u(O,"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(O,"href","#onnx"),u(q,"class","relative group"),u(ie,"href","http://onnx.ai"),u(ie,"rel","nofollow"),u(Qe,"id","esportazione-di-un-modello-in-onnx"),u(Qe,"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(Qe,"href","#esportazione-di-un-modello-in-onnx"),u(ge,"class","relative group"),u(Xt,"href","https://onnx.ai/supported-tools.html#deployModel"),u(Xt,"rel","nofollow"),u(Gt,"href","https://onnxruntime.ai/"),u(Gt,"rel","nofollow"),u(Qt,"href","https://huggingface.co/keras-io"),u(Qt,"rel","nofollow"),u(qe,"id","selezione-delle-caratteristiche-per-diverse-topologie-di-modello"),u(qe,"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(qe,"href","#selezione-delle-caratteristiche-per-diverse-topologie-di-modello"),u(ze,"class","relative group"),u(Ke,"id","esportazione-di-un-modello-per-unarchitettura-non-supportata"),u(Ke,"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(Ke,"href","#esportazione-di-un-modello-per-unarchitettura-non-supportata"),u(Ee,"class","relative group"),u(et,"id","implementazione-di-una-configurazione-onnx-personalizzata"),u(et,"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(et,"href","#implementazione-di-una-configurazione-onnx-personalizzata"),u(we,"class","relative group"),u(it,"id","esportazione-del-modello"),u(it,"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(it,"href","#esportazione-del-modello"),u(_e,"class","relative group"),u(st,"id","convalida-degli-output-del-modello"),u(st,"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(st,"href","#convalida-degli-output-del-modello"),u(je,"class","relative group"),u(ct,"id","contribuire-con-una-nuova-configurazione-a-transformers"),u(ct,"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(ct,"href","#contribuire-con-una-nuova-configurazione-a-transformers"),u(Te,"class","relative group"),u(bl,"href","https://github.com/huggingface/transformers/pull/14868/files"),u(bl,"rel","nofollow"),u(dt,"id","torchscript"),u(dt,"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(dt,"href","#torchscript"),u(Ue,"class","relative group"),u(zl,"href","https://pytorch.org/docs/stable/jit.html"),u(zl,"rel","nofollow"),u(ht,"id","flag-torchscript-e-pesi-legati"),u(ht,"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(ht,"href","#flag-torchscript-e-pesi-legati"),u($e,"class","relative group"),u(vt,"id","input-fittizi-e-standard-lengths"),u(vt,"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(vt,"href","#input-fittizi-e-standard-lengths"),u(Je,"class","relative group"),u(yt,"id","usare-torchsscript-in-python"),u(yt,"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(yt,"href","#usare-torchsscript-in-python"),u(Ce,"class","relative group"),u(bt,"id","salvare-un-modello"),u(bt,"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(bt,"href","#salvare-un-modello"),u(Ie,"class","relative group"),u(gt,"id","caricare-un-modello"),u(gt,"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(gt,"href","#caricare-un-modello"),u(Ne,"class","relative group"),u(zt,"id","utilizzare-un-modello-tracciato-per-linferenza"),u(zt,"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(zt,"href","#utilizzare-un-modello-tracciato-per-linferenza"),u(Ae,"class","relative group"),u(Nl,"href","https://aws.amazon.com/ec2/instance-types/inf1/"),u(Nl,"rel","nofollow"),u(Al,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/#"),u(Al,"rel","nofollow"),u(kl,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/benchmark/%3E"),u(kl,"rel","nofollow"),u(Zl,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/pytorch/bert_tutorial/tutorial_pretrained_bert.html"),u(Zl,"rel","nofollow"),u(Bl,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/tensorflow/huggingface_bert/huggingface_bert.html"),u(Bl,"rel","nofollow"),u(wt,"id","implicazioni"),u(wt,"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(wt,"href","#implicazioni"),u(Ze,"class","relative group"),u(Rl,"href","https://huggingface.co/docs/transformers/main/model_doc/bert"),u(Rl,"rel","nofollow"),u(Xl,"href","https://huggingface.co/docs/transformers/main/model_doc/distilbert"),u(Xl,"rel","nofollow"),u(Gl,"href","https://huggingface.co/docs/transformers/main/model_doc/roberta"),u(Gl,"rel","nofollow"),u(Sl,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/pytorch/transformers-marianmt.html"),u(Sl,"rel","nofollow"),u(Vl,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/models/models-inferentia.html#models-inferentia"),u(Vl,"rel","nofollow"),u(_t,"id","dipendenze"),u(_t,"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(_t,"href","#dipendenze"),u(Be,"class","relative group"),u(Ol,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/pytorch-neuron/index.html#installation-guide"),u(Ol,"rel","nofollow"),u(Dl,"href","https://docs.aws.amazon.com/dlami/latest/devguide/tutorial-inferentia-launching.html"),u(Dl,"rel","nofollow"),u(jt,"id","convertire-un-modello-per-aws-neuron"),u(jt,"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(jt,"href","#convertire-un-modello-per-aws-neuron"),u(Re,"class","relative group"),u(Pl,"href","https://huggingface.co/docs/transformers/main/en/serialization#using-torchscript-in-python"),u(Pl,"rel","nofollow"),u(Hl,"href","https://awsdocs-neuron.readthedocs-hosted.com/en/latest/index.html"),u(Hl,"rel","nofollow")},m(e,r){t(document.head,m),c(e,j,r),c(e,f,r),t(f,_),t(_,U),g(T,U,null),t(f,A),t(f,N),t(N,C),c(e,$,r),c(e,k,r),t(k,I),c(e,Z,r),c(e,v,r),t(v,J),t(v,X),t(X,P),t(v,ve),c(e,Ge,r),c(e,q,r),t(q,O),t(O,ye),g(ae,ye,null),t(q,be),t(q,W),t(W,eo),c(e,Nt,r),c(e,F,r),t(F,to),t(F,ie),t(ie,lo),t(F,oo),t(F,aa),t(aa,pp),t(F,dp),c(e,rs,r),c(e,ao,r),t(ao,up),c(e,cs,r),c(e,Se,r),t(Se,mp),t(Se,ia),t(ia,fp),t(Se,hp),c(e,ps,r),c(e,io,r),t(io,Mp),c(e,ds,r),c(e,h,r),t(h,na),t(na,vp),t(h,yp),t(h,sa),t(sa,bp),t(h,gp),t(h,ra),t(ra,zp),t(h,Ep),t(h,ca),t(ca,wp),t(h,_p),t(h,pa),t(pa,jp),t(h,Tp),t(h,da),t(da,Up),t(h,$p),t(h,ua),t(ua,Jp),t(h,Cp),t(h,ma),t(ma,Ip),t(h,Np),t(h,fa),t(fa,Ap),t(h,kp),t(h,ha),t(ha,Zp),t(h,Bp),t(h,Ma),t(Ma,Wp),t(h,Rp),t(h,va),t(va,Xp),t(h,Gp),t(h,ya),t(ya,Sp),t(h,Vp),t(h,ba),t(ba,Qp),t(h,Op),t(h,ga),t(ga,Dp),t(h,xp),t(h,za),t(za,Pp),t(h,qp),t(h,Ea),t(Ea,Fp),t(h,Lp),t(h,wa),t(wa,Hp),t(h,Yp),t(h,_a),t(_a,Kp),t(h,ed),t(h,ja),t(ja,td),t(h,ld),t(h,Ta),t(Ta,od),t(h,ad),t(h,Ua),t(Ua,id),t(h,nd),t(h,$a),t($a,sd),t(h,rd),t(h,Ja),t(Ja,cd),t(h,pd),t(h,Ca),t(Ca,dd),t(h,ud),t(h,Ia),t(Ia,md),t(h,fd),t(h,Na),t(Na,hd),t(h,Md),t(h,Aa),t(Aa,vd),t(h,yd),t(h,ka),t(ka,bd),t(h,gd),t(h,Za),t(Za,zd),t(h,Ed),t(h,Ba),t(Ba,wd),t(h,_d),t(h,Wa),t(Wa,jd),t(h,Td),t(h,Ra),t(Ra,Ud),t(h,$d),t(h,Xa),t(Xa,Jd),t(h,Cd),t(h,Ga),t(Ga,Id),c(e,us,r),c(e,no,r),t(no,Nd),c(e,ms,r),c(e,Ve,r),t(Ve,At),t(At,Ad),t(At,Sa),t(Sa,kd),t(At,Zd),t(Ve,Bd),t(Ve,Va),t(Va,Wd),c(e,fs,r),c(e,ge,r),t(ge,Qe),t(Qe,Qa),g(kt,Qa,null),t(ge,Rd),t(ge,Oa),t(Oa,Xd),c(e,hs,r),c(e,so,r),t(so,Gd),c(e,Ms,r),g(Zt,e,r),c(e,vs,r),c(e,Oe,r),t(Oe,Sd),t(Oe,Da),t(Da,Vd),t(Oe,Qd),c(e,ys,r),g(Bt,e,r),c(e,bs,r),c(e,ro,r),t(ro,Od),c(e,gs,r),g(Wt,e,r),c(e,zs,r),c(e,co,r),t(co,Dd),c(e,Es,r),g(Rt,e,r),c(e,ws,r),c(e,ne,r),t(ne,xd),t(ne,xa),t(xa,Pd),t(ne,qd),t(ne,Pa),t(Pa,Fd),t(ne,Ld),c(e,_s,r),c(e,H,r),t(H,Hd),t(H,qa),t(qa,Yd),t(H,Kd),t(H,Xt),t(Xt,eu),t(H,tu),t(H,Gt),t(Gt,lu),t(H,ou),c(e,js,r),g(St,e,r),c(e,Ts,r),c(e,De,r),t(De,au),t(De,Fa),t(Fa,iu),t(De,nu),c(e,Us,r),g(Vt,e,r),c(e,$s,r),c(e,xe,r),t(xe,su),t(xe,Qt),t(Qt,ru),t(xe,cu),c(e,Js,r),g(Ot,e,r),c(e,Cs,r),c(e,po,r),t(po,pu),c(e,Is,r),g(Pe,e,r),c(e,Ns,r),c(e,ze,r),t(ze,qe),t(qe,La),g(Dt,La,null),t(ze,du),t(ze,Ha),t(Ha,uu),c(e,As,r),c(e,Fe,r),t(Fe,mu),t(Fe,Ya),t(Ya,fu),t(Fe,hu),c(e,ks,r),c(e,Le,r),t(Le,Ka),t(Ka,xt),t(xt,ei),t(ei,Mu),t(xt,vu),t(xt,ti),t(ti,yu),t(Le,bu),t(Le,S),t(S,Pt),t(Pt,qt),t(qt,li),t(li,gu),t(qt,zu),t(qt,oi),t(oi,Eu),t(Pt,wu),t(Pt,ai),t(ai,ii),t(ii,_u),t(S,ju),t(S,Ft),t(Ft,Lt),t(Lt,ni),t(ni,Tu),t(Lt,Uu),t(Lt,si),t(si,$u),t(Ft,Ju),t(Ft,ri),t(ri,ci),t(ci,Cu),t(S,Iu),t(S,Ht),t(Ht,pi),t(pi,di),t(di,Nu),t(Ht,Au),t(Ht,ui),t(ui,mi),t(mi,ku),t(S,Zu),t(S,Yt),t(Yt,fi),t(fi,hi),t(hi,Bu),t(Yt,Wu),t(Yt,Mi),t(Mi,vi),t(vi,Ru),t(S,Xu),t(S,Kt),t(Kt,el),t(el,yi),t(yi,Gu),t(el,Su),t(el,bi),t(bi,Vu),t(Kt,Qu),t(Kt,gi),t(gi,zi),t(zi,Ou),t(S,Du),t(S,tl),t(tl,Ei),t(Ei,wi),t(wi,xu),t(tl,Pu),t(tl,_i),t(_i,ji),t(ji,qu),t(S,Fu),t(S,ll),t(ll,Ti),t(Ti,Ui),t(Ui,Lu),t(ll,Hu),t(ll,$i),t($i,Ji),t(Ji,Yu),c(e,Zs,r),c(e,He,r),t(He,Ku),t(He,Ci),t(Ci,em),t(He,tm),c(e,Bs,r),g(ol,e,r),c(e,Ws,r),c(e,se,r),t(se,lm),t(se,Ii),t(Ii,om),t(se,am),t(se,Ni),t(Ni,im),t(se,nm),c(e,Rs,r),g(al,e,r),c(e,Xs,r),c(e,uo,r),t(uo,sm),c(e,Gs,r),g(il,e,r),c(e,Ss,r),c(e,Y,r),t(Y,rm),t(Y,Ai),t(Ai,cm),t(Y,pm),t(Y,ki),t(ki,dm),t(Y,um),t(Y,Zi),t(Zi,mm),t(Y,fm),c(e,Vs,r),g(Ye,e,r),c(e,Qs,r),c(e,Ee,r),t(Ee,Ke),t(Ke,Bi),g(nl,Bi,null),t(Ee,hm),t(Ee,Wi),t(Wi,Mm),c(e,Os,r),c(e,mo,r),t(mo,vm),c(e,Ds,r),c(e,re,r),t(re,Ri),t(Ri,ym),t(re,bm),t(re,Xi),t(Xi,gm),t(re,zm),t(re,Gi),t(Gi,Em),c(e,xs,r),c(e,fo,r),t(fo,wm),c(e,Ps,r),c(e,we,r),t(we,et),t(et,Si),g(sl,Si,null),t(we,_m),t(we,Vi),t(Vi,jm),c(e,qs,r),c(e,ho,r),t(ho,Tm),c(e,Fs,r),c(e,ce,r),t(ce,Mo),t(Mo,Um),t(Mo,Qi),t(Qi,$m),t(ce,Jm),t(ce,vo),t(vo,Cm),t(vo,Oi),t(Oi,Im),t(ce,Nm),t(ce,yo),t(yo,Am),t(yo,Di),t(Di,km),c(e,Ls,r),g(tt,e,r),c(e,Hs,r),c(e,lt,r),t(lt,Zm),t(lt,xi),t(xi,Bm),t(lt,Wm),c(e,Ys,r),g(rl,e,r),c(e,Ks,r),c(e,D,r),t(D,Rm),t(D,Pi),t(Pi,Xm),t(D,Gm),t(D,qi),t(qi,Sm),t(D,Vm),t(D,Fi),t(Fi,Qm),t(D,Om),t(D,Li),t(Li,Dm),t(D,xm),c(e,er,r),g(ot,e,r),c(e,tr,r),c(e,bo,r),t(bo,Pm),c(e,lr,r),g(cl,e,r),c(e,or,r),c(e,go,r),t(go,qm),c(e,ar,r),g(pl,e,r),c(e,ir,r),c(e,zo,r),t(zo,Fm),c(e,nr,r),g(dl,e,r),c(e,sr,r),c(e,K,r),t(K,Lm),t(K,Hi),t(Hi,Hm),t(K,Ym),t(K,Yi),t(Yi,Km),t(K,ef),t(K,Ki),t(Ki,tf),t(K,lf),c(e,rr,r),g(ul,e,r),c(e,cr,r),g(at,e,r),c(e,pr,r),c(e,_e,r),t(_e,it),t(it,en),g(ml,en,null),t(_e,of),t(_e,tn),t(tn,af),c(e,dr,r),c(e,pe,r),t(pe,nf),t(pe,ln),t(ln,sf),t(pe,rf),t(pe,on),t(on,cf),t(pe,pf),c(e,ur,r),g(fl,e,r),c(e,mr,r),c(e,V,r),t(V,df),t(V,an),t(an,uf),t(V,mf),t(V,nn),t(nn,ff),t(V,hf),t(V,sn),t(sn,Mf),t(V,vf),t(V,rn),t(rn,yf),t(V,bf),t(V,cn),t(cn,gf),t(V,zf),c(e,fr,r),g(hl,e,r),c(e,hr,r),g(nt,e,r),c(e,Mr,r),c(e,je,r),t(je,st),t(st,pn),g(Ml,pn,null),t(je,Ef),t(je,dn),t(dn,wf),c(e,vr,r),c(e,de,r),t(de,_f),t(de,un),t(un,jf),t(de,Tf),t(de,mn),t(mn,Uf),t(de,$f),c(e,yr,r),g(vl,e,r),c(e,br,r),c(e,rt,r),t(rt,Jf),t(rt,fn),t(fn,Cf),t(rt,If),c(e,gr,r),c(e,Te,r),t(Te,ct),t(ct,hn),g(yl,hn,null),t(Te,Nf),t(Te,Mn),t(Mn,Af),c(e,zr,r),c(e,Eo,r),t(Eo,kf),c(e,Er,r),c(e,ue,r),t(ue,wo),t(wo,Zf),t(wo,vn),t(vn,Bf),t(ue,Wf),t(ue,_o),t(_o,Rf),t(_o,yn),t(yn,Xf),t(ue,Gf),t(ue,jo),t(jo,Sf),t(jo,bn),t(bn,Vf),c(e,wr,r),c(e,pt,r),t(pt,Qf),t(pt,bl),t(bl,Of),t(pt,Df),c(e,_r,r),c(e,Ue,r),t(Ue,dt),t(dt,gn),g(gl,gn,null),t(Ue,xf),t(Ue,zn),t(zn,Pf),c(e,jr,r),g(ut,e,r),c(e,Tr,r),c(e,mt,r),t(mt,qf),t(mt,zl),t(zl,Ff),t(mt,Lf),c(e,Ur,r),c(e,To,r),t(To,Hf),c(e,$r,r),c(e,Uo,r),t(Uo,Yf),c(e,Jr,r),c(e,ft,r),t(ft,En),t(En,Kf),t(ft,eh),t(ft,El),t(El,th),t(El,wn),t(wn,lh),t(El,oh),c(e,Cr,r),c(e,$o,r),t($o,ah),c(e,Ir,r),c(e,$e,r),t($e,ht),t(ht,_n),g(wl,_n,null),t($e,ih),t($e,jn),t(jn,nh),c(e,Nr,r),c(e,Jo,r),t(Jo,sh),c(e,Ar,r),c(e,ee,r),t(ee,rh),t(ee,Tn),t(Tn,ch),t(ee,ph),t(ee,Un),t(Un,dh),t(ee,uh),t(ee,$n),t($n,mh),t(ee,fh),c(e,kr,r),c(e,Mt,r),t(Mt,hh),t(Mt,Jn),t(Jn,Mh),t(Mt,vh),c(e,Zr,r),c(e,Je,r),t(Je,vt),t(vt,Cn),g(_l,Cn,null),t(Je,yh),t(Je,In),t(In,bh),c(e,Br,r),c(e,Co,r),t(Co,gh),c(e,Wr,r),c(e,Io,r),t(Io,zh),c(e,Rr,r),c(e,No,r),t(No,Nn),t(Nn,Eh),c(e,Xr,r),c(e,Ao,r),t(Ao,wh),c(e,Gr,r),c(e,ko,r),t(ko,_h),c(e,Sr,r),c(e,Ce,r),t(Ce,yt),t(yt,An),g(jl,An,null),t(Ce,jh),t(Ce,kn),t(kn,Th),c(e,Vr,r),c(e,Zo,r),t(Zo,Uh),c(e,Qr,r),c(e,Ie,r),t(Ie,bt),t(bt,Zn),g(Tl,Zn,null),t(Ie,$h),t(Ie,Bn),t(Bn,Jh),c(e,Or,r),c(e,L,r),t(L,Ch),t(L,Wn),t(Wn,Ih),t(L,Nh),t(L,Rn),t(Rn,Ah),t(L,kh),t(L,Xn),t(Xn,Zh),t(L,Bh),t(L,Gn),t(Gn,Wh),c(e,Dr,r),g(Ul,e,r),c(e,xr,r),c(e,Ne,r),t(Ne,gt),t(gt,Sn),g($l,Sn,null),t(Ne,Rh),t(Ne,Vn),t(Vn,Xh),c(e,Pr,r),c(e,te,r),t(te,Gh),t(te,Qn),t(Qn,Sh),t(te,Vh),t(te,On),t(On,Qh),t(te,Oh),t(te,Dn),t(Dn,Dh),t(te,xh),c(e,qr,r),g(Jl,e,r),c(e,Fr,r),c(e,Ae,r),t(Ae,zt),t(zt,xn),g(Cl,xn,null),t(Ae,Ph),t(Ae,Pn),t(Pn,qh),c(e,Lr,r),c(e,Et,r),t(Et,Fh),t(Et,qn),t(qn,Lh),t(Et,Hh),c(e,Hr,r),g(Il,e,r),c(e,Yr,r),c(e,Bo,r),t(Bo,Yh),c(e,Kr,r),c(e,me,r),t(me,Kh),t(me,Nl),t(Nl,eM),t(me,tM),t(me,Al),t(Al,lM),t(me,oM),c(e,ec,r),c(e,fe,r),t(fe,Fn),t(Fn,aM),t(fe,iM),t(fe,Wo),t(Wo,nM),t(Wo,kl),t(kl,sM),t(fe,rM),t(fe,ke),t(ke,cM),t(ke,Zl),t(Zl,pM),t(ke,dM),t(ke,Bl),t(Bl,uM),t(ke,mM),c(e,tc,r),c(e,Ze,r),t(Ze,wt),t(wt,Ln),g(Wl,Ln,null),t(Ze,fM),t(Ze,Hn),t(Hn,hM),c(e,lc,r),c(e,Q,r),t(Q,MM),t(Q,Rl),t(Rl,vM),t(Q,yM),t(Q,Xl),t(Xl,bM),t(Q,gM),t(Q,Gl),t(Gl,zM),t(Q,EM),t(Q,Sl),t(Sl,wM),t(Q,_M),t(Q,Vl),t(Vl,jM),t(Q,TM),c(e,oc,r),c(e,Be,r),t(Be,_t),t(_t,Yn),g(Ql,Yn,null),t(Be,UM),t(Be,Kn),t(Kn,$M),c(e,ac,r),c(e,Ro,r),t(Ro,JM),c(e,ic,r),c(e,Xo,r),t(Xo,We),t(We,CM),t(We,Ol),t(Ol,IM),t(We,NM),t(We,Dl),t(Dl,AM),t(We,kM),c(e,nc,r),c(e,Re,r),t(Re,jt),t(jt,es),g(xl,es,null),t(Re,ZM),t(Re,ts),t(ts,BM),c(e,sc,r),c(e,he,r),t(he,WM),t(he,Pl),t(Pl,RM),t(he,XM),t(he,ls),t(ls,GM),t(he,SM),c(e,rc,r),g(ql,e,r),c(e,cc,r),c(e,Go,r),t(Go,VM),c(e,pc,r),c(e,So,r),t(So,QM),c(e,dc,r),g(Fl,e,r),c(e,uc,r),c(e,Vo,r),t(Vo,OM),c(e,mc,r),g(Ll,e,r),c(e,fc,r),c(e,Qo,r),t(Qo,DM),c(e,hc,r),c(e,Tt,r),t(Tt,xM),t(Tt,Hl),t(Hl,PM),t(Tt,qM),Mc=!0},p(e,[r]){const Yl={};r&2&&(Yl.$$scope={dirty:r,ctx:e}),Pe.$set(Yl);const os={};r&2&&(os.$$scope={dirty:r,ctx:e}),Ye.$set(os);const as={};r&2&&(as.$$scope={dirty:r,ctx:e}),tt.$set(as);const is={};r&2&&(is.$$scope={dirty:r,ctx:e}),ot.$set(is);const ns={};r&2&&(ns.$$scope={dirty:r,ctx:e}),at.$set(ns);const Kl={};r&2&&(Kl.$$scope={dirty:r,ctx:e}),nt.$set(Kl);const ss={};r&2&&(ss.$$scope={dirty:r,ctx:e}),ut.$set(ss)},i(e){Mc||(z(T.$$.fragment,e),z(ae.$$.fragment,e),z(kt.$$.fragment,e),z(Zt.$$.fragment,e),z(Bt.$$.fragment,e),z(Wt.$$.fragment,e),z(Rt.$$.fragment,e),z(St.$$.fragment,e),z(Vt.$$.fragment,e),z(Ot.$$.fragment,e),z(Pe.$$.fragment,e),z(Dt.$$.fragment,e),z(ol.$$.fragment,e),z(al.$$.fragment,e),z(il.$$.fragment,e),z(Ye.$$.fragment,e),z(nl.$$.fragment,e),z(sl.$$.fragment,e),z(tt.$$.fragment,e),z(rl.$$.fragment,e),z(ot.$$.fragment,e),z(cl.$$.fragment,e),z(pl.$$.fragment,e),z(dl.$$.fragment,e),z(ul.$$.fragment,e),z(at.$$.fragment,e),z(ml.$$.fragment,e),z(fl.$$.fragment,e),z(hl.$$.fragment,e),z(nt.$$.fragment,e),z(Ml.$$.fragment,e),z(vl.$$.fragment,e),z(yl.$$.fragment,e),z(gl.$$.fragment,e),z(ut.$$.fragment,e),z(wl.$$.fragment,e),z(_l.$$.fragment,e),z(jl.$$.fragment,e),z(Tl.$$.fragment,e),z(Ul.$$.fragment,e),z($l.$$.fragment,e),z(Jl.$$.fragment,e),z(Cl.$$.fragment,e),z(Il.$$.fragment,e),z(Wl.$$.fragment,e),z(Ql.$$.fragment,e),z(xl.$$.fragment,e),z(ql.$$.fragment,e),z(Fl.$$.fragment,e),z(Ll.$$.fragment,e),Mc=!0)},o(e){E(T.$$.fragment,e),E(ae.$$.fragment,e),E(kt.$$.fragment,e),E(Zt.$$.fragment,e),E(Bt.$$.fragment,e),E(Wt.$$.fragment,e),E(Rt.$$.fragment,e),E(St.$$.fragment,e),E(Vt.$$.fragment,e),E(Ot.$$.fragment,e),E(Pe.$$.fragment,e),E(Dt.$$.fragment,e),E(ol.$$.fragment,e),E(al.$$.fragment,e),E(il.$$.fragment,e),E(Ye.$$.fragment,e),E(nl.$$.fragment,e),E(sl.$$.fragment,e),E(tt.$$.fragment,e),E(rl.$$.fragment,e),E(ot.$$.fragment,e),E(cl.$$.fragment,e),E(pl.$$.fragment,e),E(dl.$$.fragment,e),E(ul.$$.fragment,e),E(at.$$.fragment,e),E(ml.$$.fragment,e),E(fl.$$.fragment,e),E(hl.$$.fragment,e),E(nt.$$.fragment,e),E(Ml.$$.fragment,e),E(vl.$$.fragment,e),E(yl.$$.fragment,e),E(gl.$$.fragment,e),E(ut.$$.fragment,e),E(wl.$$.fragment,e),E(_l.$$.fragment,e),E(jl.$$.fragment,e),E(Tl.$$.fragment,e),E(Ul.$$.fragment,e),E($l.$$.fragment,e),E(Jl.$$.fragment,e),E(Cl.$$.fragment,e),E(Il.$$.fragment,e),E(Wl.$$.fragment,e),E(Ql.$$.fragment,e),E(xl.$$.fragment,e),E(ql.$$.fragment,e),E(Fl.$$.fragment,e),E(Ll.$$.fragment,e),Mc=!1},d(e){l(m),e&&l(j),e&&l(f),w(T),e&&l($),e&&l(k),e&&l(Z),e&&l(v),e&&l(Ge),e&&l(q),w(ae),e&&l(Nt),e&&l(F),e&&l(rs),e&&l(ao),e&&l(cs),e&&l(Se),e&&l(ps),e&&l(io),e&&l(ds),e&&l(h),e&&l(us),e&&l(no),e&&l(ms),e&&l(Ve),e&&l(fs),e&&l(ge),w(kt),e&&l(hs),e&&l(so),e&&l(Ms),w(Zt,e),e&&l(vs),e&&l(Oe),e&&l(ys),w(Bt,e),e&&l(bs),e&&l(ro),e&&l(gs),w(Wt,e),e&&l(zs),e&&l(co),e&&l(Es),w(Rt,e),e&&l(ws),e&&l(ne),e&&l(_s),e&&l(H),e&&l(js),w(St,e),e&&l(Ts),e&&l(De),e&&l(Us),w(Vt,e),e&&l($s),e&&l(xe),e&&l(Js),w(Ot,e),e&&l(Cs),e&&l(po),e&&l(Is),w(Pe,e),e&&l(Ns),e&&l(ze),w(Dt),e&&l(As),e&&l(Fe),e&&l(ks),e&&l(Le),e&&l(Zs),e&&l(He),e&&l(Bs),w(ol,e),e&&l(Ws),e&&l(se),e&&l(Rs),w(al,e),e&&l(Xs),e&&l(uo),e&&l(Gs),w(il,e),e&&l(Ss),e&&l(Y),e&&l(Vs),w(Ye,e),e&&l(Qs),e&&l(Ee),w(nl),e&&l(Os),e&&l(mo),e&&l(Ds),e&&l(re),e&&l(xs),e&&l(fo),e&&l(Ps),e&&l(we),w(sl),e&&l(qs),e&&l(ho),e&&l(Fs),e&&l(ce),e&&l(Ls),w(tt,e),e&&l(Hs),e&&l(lt),e&&l(Ys),w(rl,e),e&&l(Ks),e&&l(D),e&&l(er),w(ot,e),e&&l(tr),e&&l(bo),e&&l(lr),w(cl,e),e&&l(or),e&&l(go),e&&l(ar),w(pl,e),e&&l(ir),e&&l(zo),e&&l(nr),w(dl,e),e&&l(sr),e&&l(K),e&&l(rr),w(ul,e),e&&l(cr),w(at,e),e&&l(pr),e&&l(_e),w(ml),e&&l(dr),e&&l(pe),e&&l(ur),w(fl,e),e&&l(mr),e&&l(V),e&&l(fr),w(hl,e),e&&l(hr),w(nt,e),e&&l(Mr),e&&l(je),w(Ml),e&&l(vr),e&&l(de),e&&l(yr),w(vl,e),e&&l(br),e&&l(rt),e&&l(gr),e&&l(Te),w(yl),e&&l(zr),e&&l(Eo),e&&l(Er),e&&l(ue),e&&l(wr),e&&l(pt),e&&l(_r),e&&l(Ue),w(gl),e&&l(jr),w(ut,e),e&&l(Tr),e&&l(mt),e&&l(Ur),e&&l(To),e&&l($r),e&&l(Uo),e&&l(Jr),e&&l(ft),e&&l(Cr),e&&l($o),e&&l(Ir),e&&l($e),w(wl),e&&l(Nr),e&&l(Jo),e&&l(Ar),e&&l(ee),e&&l(kr),e&&l(Mt),e&&l(Zr),e&&l(Je),w(_l),e&&l(Br),e&&l(Co),e&&l(Wr),e&&l(Io),e&&l(Rr),e&&l(No),e&&l(Xr),e&&l(Ao),e&&l(Gr),e&&l(ko),e&&l(Sr),e&&l(Ce),w(jl),e&&l(Vr),e&&l(Zo),e&&l(Qr),e&&l(Ie),w(Tl),e&&l(Or),e&&l(L),e&&l(Dr),w(Ul,e),e&&l(xr),e&&l(Ne),w($l),e&&l(Pr),e&&l(te),e&&l(qr),w(Jl,e),e&&l(Fr),e&&l(Ae),w(Cl),e&&l(Lr),e&&l(Et),e&&l(Hr),w(Il,e),e&&l(Yr),e&&l(Bo),e&&l(Kr),e&&l(me),e&&l(ec),e&&l(fe),e&&l(tc),e&&l(Ze),w(Wl),e&&l(lc),e&&l(Q),e&&l(oc),e&&l(Be),w(Ql),e&&l(ac),e&&l(Ro),e&&l(ic),e&&l(Xo),e&&l(nc),e&&l(Re),w(xl),e&&l(sc),e&&l(he),e&&l(rc),w(ql,e),e&&l(cc),e&&l(Go),e&&l(pc),e&&l(So),e&&l(dc),w(Fl,e),e&&l(uc),e&&l(Vo),e&&l(mc),w(Ll,e),e&&l(fc),e&&l(Qo),e&&l(hc),e&&l(Tt)}}}const Wz={local:"esporta-modelli-transformers",sections:[{local:"onnx",sections:[{local:"esportazione-di-un-modello-in-onnx",title:"Esportazione di un modello in ONNX"},{local:"selezione-delle-caratteristiche-per-diverse-topologie-di-modello",title:"Selezione delle caratteristiche per diverse topologie di modello"},{local:"esportazione-di-un-modello-per-unarchitettura-non-supportata",sections:[{local:"implementazione-di-una-configurazione-onnx-personalizzata",title:"Implementazione di una configurazione ONNX personalizzata"},{local:"esportazione-del-modello",title:"Esportazione del modello"},{local:"convalida-degli-output-del-modello",title:"Convalida degli output del modello"}],title:"Esportazione di un modello per un'architettura non supportata"},{local:"contribuire-con-una-nuova-configurazione-a-transformers",title:"Contribuire con una nuova configurazione a \u{1F917} Transformers"}],title:"ONNX"},{local:"torchscript",sections:[{local:"flag-torchscript-e-pesi-legati",title:"Flag TorchScript e pesi legati"},{local:"input-fittizi-e-standard-lengths",title:"Input fittizi e standard lengths"},{local:"usare-torchsscript-in-python",sections:[{local:"salvare-un-modello",title:"Salvare un modello"},{local:"caricare-un-modello",title:"Caricare un modello"},{local:"utilizzare-un-modello-tracciato-per-linferenza",title:"Utilizzare un modello tracciato per l'inferenza"},{local:"implicazioni",title:"Implicazioni"},{local:"dipendenze",title:"Dipendenze"},{local:"convertire-un-modello-per-aws-neuron",title:"Convertire un modello per AWS Neuron"}],title:"Usare TorchSscript in Python"}],title:"TorchScript"}],title:"Esporta modelli \u{1F917} Transformers "};function Rz(R){return _z(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Dz extends gz{constructor(m){super();zz(this,m,Rz,Bz,Ez,{})}}export{Dz as default,Wz as metadata};
