import{S as gh,i as Uh,s as Ch,e as l,k as i,w as y,t,M as $h,c as r,d as a,m as p,a as n,x as b,h as s,b as v,G as e,g as c,y as j,q as _,o as T,B as w,v as Jh}from"../chunks/vendor-hf-doc-builder.js";import{T as ha}from"../chunks/Tip-hf-doc-builder.js";import{I as no}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as k}from"../chunks/CodeBlock-hf-doc-builder.js";function xh(q){let f,x,M,g,$;return{c(){f=l("p"),x=t(`Uma vez exportado, um modelo pode ser otimizado para infer\xEAncia por meio de t\xE9cnicas como
quantiza\xE7\xE3o e poda. Se voc\xEA estiver interessado em otimizar seus modelos para serem executados com
m\xE1xima efici\xEAncia, confira a biblioteca `),M=l("a"),g=t(`\u{1F917} Optimum
`),$=t("."),this.h()},l(h){f=r(h,"P",{});var E=n(f);x=s(E,`Uma vez exportado, um modelo pode ser otimizado para infer\xEAncia por meio de t\xE9cnicas como
quantiza\xE7\xE3o e poda. Se voc\xEA estiver interessado em otimizar seus modelos para serem executados com
m\xE1xima efici\xEAncia, confira a biblioteca `),M=r(E,"A",{href:!0,rel:!0});var N=n(M);g=s(N,`\u{1F917} Optimum
`),N.forEach(a),$=s(E,"."),E.forEach(a),this.h()},h(){v(M,"href","https://github.com/huggingface/optimum"),v(M,"rel","nofollow")},m(h,E){c(h,f,E),e(f,x),e(f,M),e(M,g),e(f,$)},d(h){h&&a(f)}}}function Nh(q){let f,x,M,g,$,h,E,N;return{c(){f=l("p"),x=t("Os recursos que t\xEAm um sufixo "),M=l("code"),g=t("with-pass"),$=t(" (como "),h=l("code"),E=t("causal-lm-with-pass"),N=t(`) correspondem a
classes de modelo com estados ocultos pr\xE9-computados (chave e valores nos blocos de aten\xE7\xE3o)
que pode ser usado para decodifica\xE7\xE3o autorregressiva r\xE1pida.`)},l(U){f=r(U,"P",{});var C=n(f);x=s(C,"Os recursos que t\xEAm um sufixo "),M=r(C,"CODE",{});var Z=n(M);g=s(Z,"with-pass"),Z.forEach(a),$=s(C," (como "),h=r(C,"CODE",{});var I=n(h);E=s(I,"causal-lm-with-pass"),I.forEach(a),N=s(C,`) correspondem a
classes de modelo com estados ocultos pr\xE9-computados (chave e valores nos blocos de aten\xE7\xE3o)
que pode ser usado para decodifica\xE7\xE3o autorregressiva r\xE1pida.`),C.forEach(a)},m(U,C){c(U,f,C),e(f,x),e(f,M),e(M,g),e(f,$),e(f,h),e(h,E),e(f,N)},d(U){U&&a(f)}}}function Ih(q){let f,x,M,g,$,h,E,N,U,C,Z;return{c(){f=l("p"),x=t("Para modelos do tipo "),M=l("code"),g=t("VisionEncoderDecoder"),$=t(`, as partes do codificador e do decodificador s\xE3o
exportados separadamente como dois arquivos ONNX chamados `),h=l("code"),E=t("encoder_model.onnx"),N=t(" e "),U=l("code"),C=t("decoder_model.onnx"),Z=t(" respectivamente.")},l(I){f=r(I,"P",{});var J=n(f);x=s(J,"Para modelos do tipo "),M=r(J,"CODE",{});var F=n(M);g=s(F,"VisionEncoderDecoder"),F.forEach(a),$=s(J,`, as partes do codificador e do decodificador s\xE3o
exportados separadamente como dois arquivos ONNX chamados `),h=r(J,"CODE",{});var G=n(h);E=s(G,"encoder_model.onnx"),G.forEach(a),N=s(J," e "),U=r(J,"CODE",{});var V=n(U);C=s(V,"decoder_model.onnx"),V.forEach(a),Z=s(J," respectivamente."),J.forEach(a)},m(I,J){c(I,f,J),e(f,x),e(f,M),e(M,g),e(f,$),e(f,h),e(h,E),e(f,N),e(f,U),e(U,C),e(f,Z)},d(I){I&&a(f)}}}function Ah(q){let f,x,M,g,$;return{c(){f=l("p"),x=t(`Uma boa maneira de implementar uma configura\xE7\xE3o ONNX personalizada \xE9 observar as
implementa\xE7\xE3o no arquivo `),M=l("code"),g=t("configuration_<model_name>.py"),$=t(" de uma arquitetura semelhante.")},l(h){f=r(h,"P",{});var E=n(f);x=s(E,`Uma boa maneira de implementar uma configura\xE7\xE3o ONNX personalizada \xE9 observar as
implementa\xE7\xE3o no arquivo `),M=r(E,"CODE",{});var N=n(M);g=s(N,"configuration_<model_name>.py"),N.forEach(a),$=s(E," de uma arquitetura semelhante."),E.forEach(a)},m(h,E){c(h,f,E),e(f,x),e(f,M),e(M,g),e(f,$)},d(h){h&&a(f)}}}function Zh(q){let f,x,M,g,$,h,E,N,U,C,Z,I,J,F,G,V,P,le,S,io,oe,po,co,be,A,mo,re,Q,uo,Y,je,fo,_e,Ne,ne,Te,Ie,m,ae,Mo,ho,te,vo,Eo,se,yo,bo;return{c(){f=l("p"),x=t("Notice that "),M=l("code"),g=t("inputs"),$=t(" property for "),h=l("code"),E=t("DistilBertOnnxConfig"),N=t(" returns an "),U=l("code"),C=t("OrderedDict"),Z=t(`. This
ensures that the inputs are matched with their relative position within the
`),I=l("code"),J=t("PreTrainedModel.forward()"),F=t(` method when tracing the graph. We recommend using an
`),G=l("code"),V=t("OrderedDict"),P=t(" for the "),le=l("code"),S=t("inputs"),io=t(" and "),oe=l("code"),po=t("outputs"),co=t(` properties when implementing custom ONNX
configurations.`),be=i(),A=l("p"),mo=t("Observe que a propriedade "),re=l("code"),Q=t("inputs"),uo=t(" para "),Y=l("code"),je=t("DistilBertOnnxConfig"),fo=t(" retorna um "),_e=l("code"),Ne=t("OrderedDict"),ne=t(`. Este
garante que as entradas sejam combinadas com sua posi\xE7\xE3o relativa dentro do
m\xE9todo `),Te=l("code"),Ie=t("PreTrainedModel.forward()"),m=t(` ao tra\xE7ar o grafo. Recomendamos o uso de um
`),ae=l("code"),Mo=t("OrderedDict"),ho=t(" para as propriedades "),te=l("code"),vo=t("inputs"),Eo=t(" e "),se=l("code"),yo=t("outputs"),bo=t(" ao implementar configura\xE7\xF5es personalizadas ONNX.")},l(X){f=r(X,"P",{});var B=n(f);x=s(B,"Notice that "),M=r(B,"CODE",{});var va=n(M);g=s(va,"inputs"),va.forEach(a),$=s(B," property for "),h=r(B,"CODE",{});var Ae=n(h);E=s(Ae,"DistilBertOnnxConfig"),Ae.forEach(a),N=s(B," returns an "),U=r(B,"CODE",{});var Ea=n(U);C=s(Ea,"OrderedDict"),Ea.forEach(a),Z=s(B,`. This
ensures that the inputs are matched with their relative position within the
`),I=r(B,"CODE",{});var ya=n(I);J=s(ya,"PreTrainedModel.forward()"),ya.forEach(a),F=s(B,` method when tracing the graph. We recommend using an
`),G=r(B,"CODE",{});var Ze=n(G);V=s(Ze,"OrderedDict"),Ze.forEach(a),P=s(B," for the "),le=r(B,"CODE",{});var ba=n(le);S=s(ba,"inputs"),ba.forEach(a),io=s(B," and "),oe=r(B,"CODE",{});var ja=n(oe);po=s(ja,"outputs"),ja.forEach(a),co=s(B,` properties when implementing custom ONNX
configurations.`),B.forEach(a),be=p(X),A=r(X,"P",{});var O=n(A);mo=s(O,"Observe que a propriedade "),re=r(O,"CODE",{});var _a=n(re);Q=s(_a,"inputs"),_a.forEach(a),uo=s(O," para "),Y=r(O,"CODE",{});var Ta=n(Y);je=s(Ta,"DistilBertOnnxConfig"),Ta.forEach(a),fo=s(O," retorna um "),_e=r(O,"CODE",{});var Be=n(_e);Ne=s(Be,"OrderedDict"),Be.forEach(a),ne=s(O,`. Este
garante que as entradas sejam combinadas com sua posi\xE7\xE3o relativa dentro do
m\xE9todo `),Te=r(O,"CODE",{});var wa=n(Te);Ie=s(wa,"PreTrainedModel.forward()"),wa.forEach(a),m=s(O,` ao tra\xE7ar o grafo. Recomendamos o uso de um
`),ae=r(O,"CODE",{});var ga=n(ae);Mo=s(ga,"OrderedDict"),ga.forEach(a),ho=s(O," para as propriedades "),te=r(O,"CODE",{});var Oe=n(te);vo=s(Oe,"inputs"),Oe.forEach(a),Eo=s(O," e "),se=r(O,"CODE",{});var Ua=n(se);yo=s(Ua,"outputs"),Ua.forEach(a),bo=s(O," ao implementar configura\xE7\xF5es personalizadas ONNX."),O.forEach(a)},m(X,B){c(X,f,B),e(f,x),e(f,M),e(M,g),e(f,$),e(f,h),e(h,E),e(f,N),e(f,U),e(U,C),e(f,Z),e(f,I),e(I,J),e(f,F),e(f,G),e(G,V),e(f,P),e(f,le),e(le,S),e(f,io),e(f,oe),e(oe,po),e(f,co),c(X,be,B),c(X,A,B),e(A,mo),e(A,re),e(re,Q),e(A,uo),e(A,Y),e(Y,je),e(A,fo),e(A,_e),e(_e,Ne),e(A,ne),e(A,Te),e(Te,Ie),e(A,m),e(A,ae),e(ae,Mo),e(A,ho),e(A,te),e(te,vo),e(A,Eo),e(A,se),e(se,yo),e(A,bo)},d(X){X&&a(f),X&&a(be),X&&a(A)}}}function Bh(q){let f,x,M,g,$,h,E,N;return{c(){f=l("p"),x=t("Todas as propriedades e m\xE9todos b\xE1sicos associados a "),M=l("code"),g=t("OnnxConfig"),$=t(` e
as outras classes de configura\xE7\xE3o podem ser substitu\xEDdas se necess\xE1rio. Confira `),h=l("code"),E=t("BartOnnxConfig"),N=t(`
para um exemplo avan\xE7ado.`)},l(U){f=r(U,"P",{});var C=n(f);x=s(C,"Todas as propriedades e m\xE9todos b\xE1sicos associados a "),M=r(C,"CODE",{});var Z=n(M);g=s(Z,"OnnxConfig"),Z.forEach(a),$=s(C,` e
as outras classes de configura\xE7\xE3o podem ser substitu\xEDdas se necess\xE1rio. Confira `),h=r(C,"CODE",{});var I=n(h);E=s(I,"BartOnnxConfig"),I.forEach(a),N=s(C,`
para um exemplo avan\xE7ado.`),C.forEach(a)},m(U,C){c(U,f,C),e(f,x),e(f,M),e(M,g),e(f,$),e(f,h),e(h,E),e(f,N)},d(U){U&&a(f)}}}function Oh(q){let f,x,M,g,$,h,E,N,U,C,Z;return{c(){f=l("p"),x=t(`Se o seu modelo for maior que 2GB, voc\xEA ver\xE1 que muitos arquivos adicionais s\xE3o criados
durante a exporta\xE7\xE3o. Isso \xE9 `),M=l("em"),g=t("esperado"),$=t(" porque o ONNX usa "),h=l("a"),E=t(`Protocol
Buffers`),N=t(` para armazenar o modelo e estes
t\xEAm um limite de tamanho de 2GB. Veja a `),U=l("a"),C=t(`ONNX
documenta\xE7\xE3o`),Z=t(` para
instru\xE7\xF5es sobre como carregar modelos com dados externos.`),this.h()},l(I){f=r(I,"P",{});var J=n(f);x=s(J,`Se o seu modelo for maior que 2GB, voc\xEA ver\xE1 que muitos arquivos adicionais s\xE3o criados
durante a exporta\xE7\xE3o. Isso \xE9 `),M=r(J,"EM",{});var F=n(M);g=s(F,"esperado"),F.forEach(a),$=s(J," porque o ONNX usa "),h=r(J,"A",{href:!0,rel:!0});var G=n(h);E=s(G,`Protocol
Buffers`),G.forEach(a),N=s(J,` para armazenar o modelo e estes
t\xEAm um limite de tamanho de 2GB. Veja a `),U=r(J,"A",{href:!0,rel:!0});var V=n(U);C=s(V,`ONNX
documenta\xE7\xE3o`),V.forEach(a),Z=s(J,` para
instru\xE7\xF5es sobre como carregar modelos com dados externos.`),J.forEach(a),this.h()},h(){v(h,"href","https://developers.google.com/protocol-buffers/"),v(h,"rel","nofollow"),v(U,"href","https://github.com/onnx/onnx/blob/master/docs/ExternalData.md"),v(U,"rel","nofollow")},m(I,J){c(I,f,J),e(f,x),e(f,M),e(M,g),e(f,$),e(f,h),e(h,E),e(f,N),e(f,U),e(U,C),e(f,Z)},d(I){I&&a(f)}}}function kh(q){let f,x,M,g,$,h,E,N,U,C,Z,I,J,F,G,V,P,le,S,io,oe,po,co,be,A,mo,re,Q,uo,Y,je,fo,_e,Ne,ne,Te,Ie,m,ae,Mo,ho,te,vo,Eo,se,yo,bo,X,B,va,Ae,Ea,ya,Ze,ba,ja,O,_a,Ta,Be,wa,ga,Oe,Ua,Bn,ot,On,kn,at,Xn,Rn,tt,qn,Wn,st,Gn,Vn,lt,Dn,Ln,rt,zn,Fn,nt,Pn,Sn,dt,Qn,Yn,it,Hn,Kn,pt,ed,od,ct,ad,td,mt,sd,ld,ut,rd,nd,ft,dd,id,Mt,pd,cd,ht,md,ud,vt,fd,Md,Et,hd,vd,yt,Ed,yd,bt,bd,jd,jt,_d,Td,_t,wd,gd,Tt,Ud,Cd,wt,$d,Jd,gt,xd,Nd,Ut,Id,Ad,Ct,Zd,Bd,$t,Od,kd,Jt,Xd,Rd,xt,qd,Wd,Nt,Gd,Vd,It,Dd,Ld,At,zd,Fd,Zt,Pd,Sd,Bt,Qd,Yd,Ot,Hd,Kd,kt,ei,oi,Xt,ai,ti,Rt,si,li,qt,ri,ni,Wt,di,ii,Gt,pi,ci,Vt,mi,ui,Dt,fi,Mi,Lt,hi,vi,zt,Ei,yi,Ft,bi,ji,Pt,_i,Ti,St,wi,gi,Qt,Ui,Rl,Ca,Ci,ql,ke,jo,$i,Yt,Ji,xi,Ni,Ht,Ii,Wl,we,Xe,Kt,_o,Ai,es,Zi,Gl,$a,Bi,Vl,To,Dl,Re,Oi,os,ki,Xi,Ll,wo,zl,Ja,Ri,Fl,go,Pl,xa,qi,Sl,Uo,Ql,de,Wi,as,Gi,Vi,ts,Di,Li,Yl,H,zi,ss,Fi,Pi,Co,Si,Qi,$o,Yi,Hi,Hl,Jo,Kl,qe,Ki,ls,ep,op,er,xo,or,We,ap,No,tp,sp,ar,Io,tr,Na,lp,sr,Ao,lr,ie,rp,rs,np,dp,ns,ip,pp,rr,Zo,nr,Bo,dr,pe,cp,ds,mp,up,is,fp,Mp,ir,Oo,pr,ge,Ge,ps,ko,hp,cs,vp,cr,ce,Ep,ms,yp,bp,us,jp,_p,mr,Ve,fs,Xo,Ms,Tp,wp,hs,gp,Up,R,Ro,qo,vs,Cp,$p,Es,Jp,xp,ys,bs,Np,Ip,Wo,Go,js,Ap,Zp,_s,Bp,Op,Ts,ws,kp,Xp,Vo,gs,Us,Rp,qp,Cs,$s,Wp,Gp,Do,Js,xs,Vp,Dp,Ns,Is,Lp,zp,Lo,zo,As,Fp,Pp,Zs,Sp,Qp,Bs,Os,Yp,Hp,Fo,ks,Xs,Kp,ec,Rs,qs,oc,ac,Po,Ws,Gs,tc,sc,Vs,Ds,lc,ur,De,rc,Ls,nc,dc,fr,So,Mr,me,ic,zs,pc,cc,Fs,mc,uc,hr,Qo,vr,Ia,fc,Er,Yo,yr,K,Mc,Ps,hc,vc,Ss,Ec,yc,Qs,bc,jc,br,Le,jr,ze,_r,Ue,Fe,Ys,Ho,_c,Hs,Tc,Tr,Aa,wc,wr,ue,Ks,gc,Uc,el,Cc,$c,ol,Jc,gr,Za,xc,Ur,Ce,Pe,al,Ko,Nc,tl,Ic,Cr,Ba,Ac,$r,fe,Oa,Zc,sl,Bc,Oc,ka,kc,ll,Xc,Rc,Xa,qc,rl,Wc,Jr,Se,xr,Qe,Gc,nl,Vc,Dc,Nr,ea,Ir,D,Lc,dl,zc,Fc,il,Pc,Sc,pl,Qc,Yc,cl,Hc,Kc,Ar,Ye,Zr,Ra,em,Br,oa,Or,qa,om,kr,aa,Xr,Wa,am,Rr,ta,qr,L,tm,ml,sm,lm,ul,rm,nm,fl,dm,im,Ml,pm,cm,Wr,sa,Gr,He,Vr,$e,Ke,hl,la,mm,vl,um,Dr,Me,fm,El,Mm,hm,yl,vm,Em,Lr,ra,zr,W,ym,bl,bm,jm,jl,_m,Tm,_l,wm,gm,Tl,Um,Cm,wl,$m,Jm,Fr,na,Pr,eo,Sr,Je,oo,gl,da,xm,Ul,Nm,Qr,he,Im,Cl,Am,Zm,$l,Bm,Om,Yr,ia,Hr,ao,km,Jl,Xm,Rm,Kr,xe,to,xl,pa,qm,Nl,Wm,en,Ga,Gm,on,ve,ca,Vm,Il,Dm,Lm,zm,Va,Fm,Al,Pm,Sm,Da,Qm,Zl,Ym,an,so,Hm,ma,Km,eu,tn;return h=new no({}),P=new ha({props:{$$slots:{default:[xh]},$$scope:{ctx:q}}}),_o=new no({}),To=new k({props:{code:"cGlwJTIwaW5zdGFsbCUyMHRyYW5zZm9ybWVycyU1Qm9ubnglNUQ=",highlighted:"pip install transformers[onnx]"}}),wo=new k({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.`}}),go=new k({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMG9ubnglMkY=",highlighted:"python -m transformers.onnx --model=distilbert-base-uncased onnx/"}}),Uo=new k({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`}}),Jo=new k({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))`}}),xo=new k({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>]`}}),Io=new k({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RrZXJhcy1pbyUyRnRyYW5zZm9ybWVycy1xYSUyMG9ubnglMkY=",highlighted:"python -m transformers.onnx --model=keras-io/transformers-qa onnx/"}}),Ao=new k({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>)`}}),Zo=new k({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0Rsb2NhbC1wdC1jaGVja3BvaW50JTIwb25ueCUyRg==",highlighted:"python -m transformers.onnx --model=local-pt-checkpoint onnx/"}}),Bo=new k({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>)`}}),Oo=new k({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0Rsb2NhbC10Zi1jaGVja3BvaW50JTIwb25ueCUyRg==",highlighted:"python -m transformers.onnx --model=local-tf-checkpoint onnx/"}}),ko=new no({}),So=new k({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>]`}}),Qo=new k({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMCU1QyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0tZmVhdHVyZSUzRHNlcXVlbmNlLWNsYXNzaWZpY2F0aW9uJTIwb25ueCUyRg==",highlighted:`python -m transformers.onnx --model=distilbert-base-uncased-finetuned-sst-2-english \\
                            --feature=sequence-classification onnx/`}}),Yo=new k({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`}}),Le=new ha({props:{$$slots:{default:[Nh]},$$scope:{ctx:q}}}),ze=new ha({props:{$$slots:{default:[Ih]},$$scope:{ctx:q}}}),Ho=new no({}),Ko=new no({}),Se=new ha({props:{$$slots:{default:[Ah]},$$scope:{ctx:q}}}),ea=new k({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>        )`}}),Ye=new ha({props:{$$slots:{default:[Zh]},$$scope:{ctx:q}}}),oa=new k({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)`}}),aa=new k({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>`}}),ta=new k({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>})])`}}),sa=new k({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>})])`}}),He=new ha({props:{$$slots:{default:[Bh]},$$scope:{ctx:q}}}),la=new no({}),ra=new k({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)`}}),na=new k({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)`}}),eo=new ha({props:{$$slots:{default:[Oh]},$$scope:{ctx:q}}}),da=new no({}),ia=new k({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>)`}}),pa=new no({}),{c(){f=l("meta"),x=i(),M=l("h1"),g=l("a"),$=l("span"),y(h.$$.fragment),E=i(),N=l("span"),U=t("Exportando modelos para ONNX"),C=i(),Z=l("p"),I=t(`Se voc\xEA precisar implantar modelos \u{1F917} Transformers em ambientes de produ\xE7\xE3o, recomendamos
exporta-los para um formato serializado que pode ser carregado e executado em
tempos de execu\xE7\xE3o e hardware. Neste guia, mostraremos como exportar modelos \u{1F917} Transformers
para `),J=l("a"),F=t("ONNX (Open Neural Network eXchange)"),G=t("."),V=i(),y(P.$$.fragment),le=i(),S=l("p"),io=t(`ONNX \xE9 um padr\xE3o aberto que define um conjunto comum de operadores e um formato de arquivo comum
para representar modelos de aprendizado profundo em uma ampla variedade de estruturas, incluindo PyTorch e
TensorFlow. Quando um modelo \xE9 exportado para o formato ONNX, esses operadores s\xE3o usados para
construir um grafo computacional (muitas vezes chamado de `),oe=l("em"),po=t("representa\xE7\xE3o intermedi\xE1ria"),co=t(`) que
representa o fluxo de dados atrav\xE9s da rede neural.`),be=i(),A=l("p"),mo=t(`Ao expor um grafo com operadores e tipos de dados padronizados, o ONNX facilita a
alternar entre os frameworks. Por exemplo, um modelo treinado em PyTorch pode ser exportado para
formato ONNX e depois importado no TensorFlow (e vice-versa).`),re=i(),Q=l("p"),uo=t("\u{1F917} Transformers fornece um pacote "),Y=l("a"),je=l("code"),fo=t("transformers.onnx"),_e=t(` que permite
que voc\xEA converta os checkpoints do modelo em um grafo ONNX aproveitando os objetos de configura\xE7\xE3o.
Esses objetos de configura\xE7\xE3o v\xEAm prontos para v\xE1rias arquiteturas de modelo e s\xE3o
projetado para ser facilmente extens\xEDvel a outras arquiteturas.`),Ne=i(),ne=l("p"),Te=t("As configura\xE7\xF5es prontas incluem as seguintes arquiteturas:"),Ie=i(),m=l("ul"),ae=l("li"),Mo=t("ALBERT"),ho=i(),te=l("li"),vo=t("BART"),Eo=i(),se=l("li"),yo=t("BEiT"),bo=i(),X=l("li"),B=t("BERT"),va=i(),Ae=l("li"),Ea=t("BigBird"),ya=i(),Ze=l("li"),ba=t("BigBird-Pegasus"),ja=i(),O=l("li"),_a=t("Blenderbot"),Ta=i(),Be=l("li"),wa=t("BlenderbotSmall"),ga=i(),Oe=l("li"),Ua=t("BLOOM"),Bn=i(),ot=l("li"),On=t("CamemBERT"),kn=i(),at=l("li"),Xn=t("CLIP"),Rn=i(),tt=l("li"),qn=t("CodeGen"),Wn=i(),st=l("li"),Gn=t("Conditional DETR"),Vn=i(),lt=l("li"),Dn=t("ConvBERT"),Ln=i(),rt=l("li"),zn=t("ConvNeXT"),Fn=i(),nt=l("li"),Pn=t("ConvNeXTV2"),Sn=i(),dt=l("li"),Qn=t("Data2VecText"),Yn=i(),it=l("li"),Hn=t("Data2VecVision"),Kn=i(),pt=l("li"),ed=t("DeBERTa"),od=i(),ct=l("li"),ad=t("DeBERTa-v2"),td=i(),mt=l("li"),sd=t("DeiT"),ld=i(),ut=l("li"),rd=t("DETR"),nd=i(),ft=l("li"),dd=t("DistilBERT"),id=i(),Mt=l("li"),pd=t("ELECTRA"),cd=i(),ht=l("li"),md=t("ERNIE"),ud=i(),vt=l("li"),fd=t("FlauBERT"),Md=i(),Et=l("li"),hd=t("GPT Neo"),vd=i(),yt=l("li"),Ed=t("GPT-J"),yd=i(),bt=l("li"),bd=t("GroupViT"),jd=i(),jt=l("li"),_d=t("I-BERT"),Td=i(),_t=l("li"),wd=t("LayoutLM"),gd=i(),Tt=l("li"),Ud=t("LayoutLMv3"),Cd=i(),wt=l("li"),$d=t("LeViT"),Jd=i(),gt=l("li"),xd=t("Longformer"),Nd=i(),Ut=l("li"),Id=t("LongT5"),Ad=i(),Ct=l("li"),Zd=t("M2M100"),Bd=i(),$t=l("li"),Od=t("Marian"),kd=i(),Jt=l("li"),Xd=t("mBART"),Rd=i(),xt=l("li"),qd=t("MobileBERT"),Wd=i(),Nt=l("li"),Gd=t("MobileViT"),Vd=i(),It=l("li"),Dd=t("MT5"),Ld=i(),At=l("li"),zd=t("OpenAI GPT-2"),Fd=i(),Zt=l("li"),Pd=t("OWL-ViT"),Sd=i(),Bt=l("li"),Qd=t("Perceiver"),Yd=i(),Ot=l("li"),Hd=t("PLBart"),Kd=i(),kt=l("li"),ei=t("ResNet"),oi=i(),Xt=l("li"),ai=t("RoBERTa"),ti=i(),Rt=l("li"),si=t("RoFormer"),li=i(),qt=l("li"),ri=t("SegFormer"),ni=i(),Wt=l("li"),di=t("SqueezeBERT"),ii=i(),Gt=l("li"),pi=t("Swin Transformer"),ci=i(),Vt=l("li"),mi=t("T5"),ui=i(),Dt=l("li"),fi=t("Table Transformer"),Mi=i(),Lt=l("li"),hi=t("Vision Encoder decoder"),vi=i(),zt=l("li"),Ei=t("ViT"),yi=i(),Ft=l("li"),bi=t("XLM"),ji=i(),Pt=l("li"),_i=t("XLM-RoBERTa"),Ti=i(),St=l("li"),wi=t("XLM-RoBERTa-XL"),gi=i(),Qt=l("li"),Ui=t("YOLOS"),Rl=i(),Ca=l("p"),Ci=t("Nas pr\xF3ximas duas se\xE7\xF5es, mostraremos como:"),ql=i(),ke=l("ul"),jo=l("li"),$i=t("Exportar um modelo suportado usando o pacote "),Yt=l("code"),Ji=t("transformers.onnx"),xi=t("."),Ni=i(),Ht=l("li"),Ii=t("Exportar um modelo personalizado para uma arquitetura sem suporte."),Wl=i(),we=l("h2"),Xe=l("a"),Kt=l("span"),y(_o.$$.fragment),Ai=i(),es=l("span"),Zi=t("Exportando um modelo para ONNX"),Gl=i(),$a=l("p"),Bi=t(`Para exportar um modelo \u{1F917} Transformers para o ONNX, primeiro voc\xEA precisa instalar algumas
depend\xEAncias extras:`),Vl=i(),y(To.$$.fragment),Dl=i(),Re=l("p"),Oi=t("O pacote "),os=l("code"),ki=t("transformers.onnx"),Xi=t(" pode ent\xE3o ser usado como um m\xF3dulo Python:"),Ll=i(),y(wo.$$.fragment),zl=i(),Ja=l("p"),Ri=t("A exporta\xE7\xE3o de um checkpoint usando uma configura\xE7\xE3o pronta pode ser feita da seguinte forma:"),Fl=i(),y(go.$$.fragment),Pl=i(),xa=l("p"),qi=t("Voc\xEA deve ver os seguintes logs:"),Sl=i(),y(Uo.$$.fragment),Ql=i(),de=l("p"),Wi=t("Isso exporta um grafo ONNX do ponto de verifica\xE7\xE3o definido pelo argumento "),as=l("code"),Gi=t("--model"),Vi=t(`. Nisso
Por exemplo, \xE9 `),ts=l("code"),Di=t("distilbert-base-uncased"),Li=t(`, mas pode ser qualquer checkpoint no Hugging
Face Hub ou um armazenado localmente.`),Yl=i(),H=l("p"),zi=t("O arquivo "),ss=l("code"),Fi=t("model.onnx"),Pi=t(" resultante pode ser executado em um dos "),Co=l("a"),Si=t(`muitos
aceleradores`),Qi=t(` que suportam o ONNX
padr\xE3o. Por exemplo, podemos carregar e executar o modelo com `),$o=l("a"),Yi=t(`ONNX
Tempo de execu\xE7\xE3o`),Hi=t(" da seguinte forma:"),Hl=i(),y(Jo.$$.fragment),Kl=i(),qe=l("p"),Ki=t("Os nomes de sa\xEDda necess\xE1rios (como "),ls=l("code"),ep=t('["last_hidden_state"]'),op=t(`) podem ser obtidos pegando uma
configura\xE7\xE3o ONNX de cada modelo. Por exemplo, para DistilBERT temos:`),er=i(),y(xo.$$.fragment),or=i(),We=l("p"),ap=t(`O processo \xE9 id\xEAntico para os checkpoints do TensorFlow no Hub. Por exemplo, podemos
exportar um checkpoint TensorFlow puro do `),No=l("a"),tp=t("Keras"),sp=t(" da seguinte forma:"),ar=i(),y(Io.$$.fragment),tr=i(),Na=l("p"),lp=t(`Para exportar um modelo armazenado localmente, voc\xEA precisar\xE1 ter os pesos e
arquivos tokenizer armazenados em um diret\xF3rio. Por exemplo, podemos carregar e salvar um checkpoint como:`),sr=i(),y(Ao.$$.fragment),lr=i(),ie=l("p"),rp=t("Uma vez que o checkpoint \xE9 salvo, podemos export\xE1-lo para o ONNX apontando o "),rs=l("code"),np=t("--model"),dp=t(`
argumento do pacote `),ns=l("code"),ip=t("transformers.onnx"),pp=t(" para o diret\xF3rio desejado:"),rr=i(),y(Zo.$$.fragment),nr=i(),y(Bo.$$.fragment),dr=i(),pe=l("p"),cp=t("Uma vez que o checkpoint \xE9 salvo, podemos export\xE1-lo para o ONNX apontando o "),ds=l("code"),mp=t("--model"),up=t(`
argumento do pacote `),is=l("code"),fp=t("transformers.onnx"),Mp=t(" para o diret\xF3rio desejado:"),ir=i(),y(Oo.$$.fragment),pr=i(),ge=l("h2"),Ge=l("a"),ps=l("span"),y(ko.$$.fragment),hp=i(),cs=l("span"),vp=t("Selecionando features para diferentes tarefas do modelo"),cr=i(),ce=l("p"),Ep=t("Cada configura\xE7\xE3o pronta vem com um conjunto de "),ms=l("em"),yp=t("features"),bp=t(` que permitem exportar
modelos para diferentes tipos de tarefas. Conforme mostrado na tabela abaixo, cada recurso \xE9
associado a uma `),us=l("code"),jp=t("AutoClass"),_p=t(" diferente:"),mr=i(),Ve=l("table"),fs=l("thead"),Xo=l("tr"),Ms=l("th"),Tp=t("Feature"),wp=i(),hs=l("th"),gp=t("Auto Class"),Up=i(),R=l("tbody"),Ro=l("tr"),qo=l("td"),vs=l("code"),Cp=t("causal-lm"),$p=t(", "),Es=l("code"),Jp=t("causal-lm-with-past"),xp=i(),ys=l("td"),bs=l("code"),Np=t("AutoModelForCausalLM"),Ip=i(),Wo=l("tr"),Go=l("td"),js=l("code"),Ap=t("default"),Zp=t(", "),_s=l("code"),Bp=t("default-with-past"),Op=i(),Ts=l("td"),ws=l("code"),kp=t("AutoModel"),Xp=i(),Vo=l("tr"),gs=l("td"),Us=l("code"),Rp=t("masked-lm"),qp=i(),Cs=l("td"),$s=l("code"),Wp=t("AutoModelForMaskedLM"),Gp=i(),Do=l("tr"),Js=l("td"),xs=l("code"),Vp=t("question-answering"),Dp=i(),Ns=l("td"),Is=l("code"),Lp=t("AutoModelForQuestionAnswering"),zp=i(),Lo=l("tr"),zo=l("td"),As=l("code"),Fp=t("seq2seq-lm"),Pp=t(", "),Zs=l("code"),Sp=t("seq2seq-lm-with-past"),Qp=i(),Bs=l("td"),Os=l("code"),Yp=t("AutoModelForSeq2SeqLM"),Hp=i(),Fo=l("tr"),ks=l("td"),Xs=l("code"),Kp=t("sequence-classification"),ec=i(),Rs=l("td"),qs=l("code"),oc=t("AutoModelForSequenceClassification"),ac=i(),Po=l("tr"),Ws=l("td"),Gs=l("code"),tc=t("token-classification"),sc=i(),Vs=l("td"),Ds=l("code"),lc=t("AutoModelForTokenClassification"),ur=i(),De=l("p"),rc=t(`Para cada configura\xE7\xE3o, voc\xEA pode encontrar a lista de recursos suportados por meio do
`),Ls=l("code"),nc=t("FeaturesManager"),dc=t(". Por exemplo, para DistilBERT temos:"),fr=i(),y(So.$$.fragment),Mr=i(),me=l("p"),ic=t("Voc\xEA pode ent\xE3o passar um desses recursos para o argumento "),zs=l("code"),pc=t("--feature"),cc=t(` no
pacote `),Fs=l("code"),mc=t("transformers.onnx"),uc=t(`. Por exemplo, para exportar um modelo de classifica\xE7\xE3o de texto, podemos
escolher um modelo ajustado no Hub e executar:`),hr=i(),y(Qo.$$.fragment),vr=i(),Ia=l("p"),fc=t("Isso exibe os seguintes logs:"),Er=i(),y(Yo.$$.fragment),yr=i(),K=l("p"),Mc=t("Observe que, neste caso, os nomes de sa\xEDda do modelo ajustado s\xE3o "),Ps=l("code"),hc=t("logits"),vc=t(`
em vez do `),Ss=l("code"),Ec=t("last_hidden_state"),yc=t(" que vimos com o checkpoint "),Qs=l("code"),bc=t("distilbert-base-uncased"),jc=t(`
mais cedo. Isso \xE9 esperado, pois o modelo ajustado (fine-tuned) possui uma cabe\xE7a de classifica\xE7\xE3o de sequ\xEAncia.`),br=i(),y(Le.$$.fragment),jr=i(),y(ze.$$.fragment),_r=i(),Ue=l("h2"),Fe=l("a"),Ys=l("span"),y(Ho.$$.fragment),_c=i(),Hs=l("span"),Tc=t("Exportando um modelo para uma arquitetura sem suporte"),Tr=i(),Aa=l("p"),wc=t(`Se voc\xEA deseja exportar um modelo cuja arquitetura n\xE3o \xE9 suportada nativamente pela
biblioteca, h\xE1 tr\xEAs etapas principais a seguir:`),wr=i(),ue=l("ol"),Ks=l("li"),gc=t("Implemente uma configura\xE7\xE3o ONNX personalizada."),Uc=i(),el=l("li"),Cc=t("Exporte o modelo para o ONNX."),$c=i(),ol=l("li"),Jc=t("Valide as sa\xEDdas do PyTorch e dos modelos exportados."),gr=i(),Za=l("p"),xc=t(`Nesta se\xE7\xE3o, veremos como o DistilBERT foi implementado para mostrar o que est\xE1 envolvido
em cada passo.`),Ur=i(),Ce=l("h3"),Pe=l("a"),al=l("span"),y(Ko.$$.fragment),Nc=i(),tl=l("span"),Ic=t("Implementando uma configura\xE7\xE3o ONNX personalizada"),Cr=i(),Ba=l("p"),Ac=t(`Vamos come\xE7ar com o objeto de configura\xE7\xE3o ONNX. Fornecemos tr\xEAs classes abstratas que
voc\xEA deve herdar, dependendo do tipo de arquitetura de modelo que deseja exportar:`),$r=i(),fe=l("ul"),Oa=l("li"),Zc=t("Modelos baseados em codificador herdam de "),sl=l("code"),Bc=t("OnnxConfig"),Oc=i(),ka=l("li"),kc=t("Modelos baseados em decodificador herdam de "),ll=l("code"),Xc=t("OnnxConfigWithPast"),Rc=i(),Xa=l("li"),qc=t("Os modelos codificador-decodificador herdam de "),rl=l("code"),Wc=t("OnnxSeq2SeqConfigWithPast"),Jr=i(),y(Se.$$.fragment),xr=i(),Qe=l("p"),Gc=t(`Como o DistilBERT \xE9 um modelo baseado em codificador, sua configura\xE7\xE3o \xE9 herdada de
`),nl=l("code"),Vc=t("OnnxConfig"),Dc=t(":"),Nr=i(),y(ea.$$.fragment),Ir=i(),D=l("p"),Lc=t("Todo objeto de configura\xE7\xE3o deve implementar a propriedade "),dl=l("code"),zc=t("inputs"),Fc=t(` e retornar um mapeamento,
onde cada chave corresponde a uma entrada esperada e cada valor indica o eixo
dessa entrada. Para o DistilBERT, podemos ver que duas entradas s\xE3o necess\xE1rias: `),il=l("code"),Pc=t("input_ids"),Sc=t(` e
`),pl=l("code"),Qc=t("attention_mask"),Yc=t(". Essas entradas t\xEAm a mesma forma de "),cl=l("code"),Hc=t("(batch_size, sequence_length)"),Kc=t(`
\xE9 por isso que vemos os mesmos eixos usados na configura\xE7\xE3o.`),Ar=i(),y(Ye.$$.fragment),Zr=i(),Ra=l("p"),em=t(`Depois de implementar uma configura\xE7\xE3o ONNX, voc\xEA pode instanci\xE1-la fornecendo a
configura\xE7\xE3o do modelo base da seguinte forma:`),Br=i(),y(oa.$$.fragment),Or=i(),qa=l("p"),om=t(`O objeto resultante tem v\xE1rias propriedades \xFAteis. Por exemplo, voc\xEA pode visualizar o conjunto de operadores ONNX
que ser\xE1 usado durante a exporta\xE7\xE3o:`),kr=i(),y(aa.$$.fragment),Xr=i(),Wa=l("p"),am=t("Voc\xEA tamb\xE9m pode visualizar as sa\xEDdas associadas ao modelo da seguinte forma:"),Rr=i(),y(ta.$$.fragment),qr=i(),L=l("p"),tm=t(`Observe que a propriedade outputs segue a mesma estrutura das entradas; ele retorna um
`),ml=l("code"),sm=t("OrderedDict"),lm=t(` de sa\xEDdas nomeadas e suas formas. A estrutura de sa\xEDda est\xE1 ligada a
escolha do recurso com o qual a configura\xE7\xE3o \xE9 inicializada. Por padr\xE3o, a configura\xE7\xE3o do ONNX
\xE9 inicializada com o recurso `),ul=l("code"),rm=t("default"),nm=t(` que corresponde \xE0 exporta\xE7\xE3o de um
modelo carregado com a classe `),fl=l("code"),dm=t("AutoModel"),im=t(`. Se voc\xEA deseja exportar um modelo para outra tarefa,
apenas forne\xE7a um recurso diferente para o argumento `),Ml=l("code"),pm=t("task"),cm=t(` quando voc\xEA inicializar a configura\xE7\xE3o ONNX
. Por exemplo, se quisermos exportar o DistilBERT com uma sequ\xEAncia
de classifica\xE7\xE3o, poder\xEDamos usar:`),Wr=i(),y(sa.$$.fragment),Gr=i(),y(He.$$.fragment),Vr=i(),$e=l("h3"),Ke=l("a"),hl=l("span"),y(la.$$.fragment),mm=i(),vl=l("span"),um=t("Exportando um modelo"),Dr=i(),Me=l("p"),fm=t(`Depois de ter implementado a configura\xE7\xE3o do ONNX, o pr\xF3ximo passo \xE9 exportar o modelo.
Aqui podemos usar a fun\xE7\xE3o `),El=l("code"),Mm=t("export()"),hm=t(" fornecida pelo pacote "),yl=l("code"),vm=t("transformers.onnx"),Em=t(`.
Esta fun\xE7\xE3o espera a configura\xE7\xE3o do ONNX, juntamente com o modelo base e o tokenizer,
e o caminho para salvar o arquivo exportado:`),Lr=i(),y(ra.$$.fragment),zr=i(),W=l("p"),ym=t("Os "),bl=l("code"),bm=t("onnx_inputs"),jm=t(" e "),jl=l("code"),_m=t("onnx_outputs"),Tm=t(" retornados pela fun\xE7\xE3o "),_l=l("code"),wm=t("export()"),gm=t(` s\xE3o listas de
chaves definidas nas propriedades `),Tl=l("code"),Um=t("inputs"),Cm=t(" e "),wl=l("code"),$m=t("outputs"),Jm=t(` da configura\xE7\xE3o. Uma vez que o
modelo \xE9 exportado, voc\xEA pode testar se o modelo est\xE1 bem formado da seguinte forma:`),Fr=i(),y(na.$$.fragment),Pr=i(),y(eo.$$.fragment),Sr=i(),Je=l("h3"),oo=l("a"),gl=l("span"),y(da.$$.fragment),xm=i(),Ul=l("span"),Nm=t("Validando a sa\xEDda dos modelos"),Qr=i(),he=l("p"),Im=t(`A etapa final \xE9 validar se as sa\xEDdas do modelo base e exportado concordam
dentro de alguma toler\xE2ncia absoluta. Aqui podemos usar a fun\xE7\xE3o `),Cl=l("code"),Am=t("validate_model_outputs()"),Zm=t(`
fornecida pelo pacote `),$l=l("code"),Bm=t("transformers.onnx"),Om=t(" da seguinte forma:"),Yr=i(),y(ia.$$.fragment),Hr=i(),ao=l("p"),km=t("Esta fun\xE7\xE3o usa o m\xE9todo "),Jl=l("code"),Xm=t("generate_dummy_inputs()"),Rm=t(` para
gerar entradas para o modelo base e o exportado, e a toler\xE2ncia absoluta pode ser
definida na configura\xE7\xE3o. Geralmente encontramos concord\xE2ncia num\xE9rica em 1e-6 a 1e-4
de alcance, embora qualquer coisa menor que 1e-3 provavelmente esteja OK.`),Kr=i(),xe=l("h2"),to=l("a"),xl=l("span"),y(pa.$$.fragment),qm=i(),Nl=l("span"),Wm=t("Contribuindo com uma nova configura\xE7\xE3o para \u{1F917} Transformers"),en=i(),Ga=l("p"),Gm=t(`Estamos procurando expandir o conjunto de configura\xE7\xF5es prontas e receber contribui\xE7\xF5es
da comunidade! Se voc\xEA gostaria de contribuir para a biblioteca, voc\xEA
precisar\xE1:`),on=i(),ve=l("ul"),ca=l("li"),Vm=t("Implemente a configura\xE7\xE3o do ONNX no arquivo "),Il=l("code"),Dm=t("configuration_<model_name>.py"),Lm=t(` correspondente
Arquivo`),zm=i(),Va=l("li"),Fm=t(`Incluir a arquitetura do modelo e recursos correspondentes em
`),Al=l("code"),Pm=t("~onnx.features.FeatureManager"),Sm=i(),Da=l("li"),Qm=t("Adicione sua arquitetura de modelo aos testes em "),Zl=l("code"),Ym=t("test_onnx_v2.py"),an=i(),so=l("p"),Hm=t("Confira como ficou a configura\xE7\xE3o do "),ma=l("a"),Km=t("IBERT"),eu=t(` para obter uma
id\xE9ia do que est\xE1 envolvido.`),this.h()},l(o){const d=$h('[data-svelte="svelte-1phssyn"]',document.head);f=r(d,"META",{name:!0,content:!0}),d.forEach(a),x=p(o),M=r(o,"H1",{class:!0});var ua=n(M);g=r(ua,"A",{id:!0,class:!0,href:!0});var Bl=n(g);$=r(Bl,"SPAN",{});var Ol=n($);b(h.$$.fragment,Ol),Ol.forEach(a),Bl.forEach(a),E=p(ua),N=r(ua,"SPAN",{});var kl=n(N);U=s(kl,"Exportando modelos para ONNX"),kl.forEach(a),ua.forEach(a),C=p(o),Z=r(o,"P",{});var fa=n(Z);I=s(fa,`Se voc\xEA precisar implantar modelos \u{1F917} Transformers em ambientes de produ\xE7\xE3o, recomendamos
exporta-los para um formato serializado que pode ser carregado e executado em
tempos de execu\xE7\xE3o e hardware. Neste guia, mostraremos como exportar modelos \u{1F917} Transformers
para `),J=r(fa,"A",{href:!0,rel:!0});var Xl=n(J);F=s(Xl,"ONNX (Open Neural Network eXchange)"),Xl.forEach(a),G=s(fa,"."),fa.forEach(a),V=p(o),b(P.$$.fragment,o),le=p(o),S=r(o,"P",{});var Ma=n(S);io=s(Ma,`ONNX \xE9 um padr\xE3o aberto que define um conjunto comum de operadores e um formato de arquivo comum
para representar modelos de aprendizado profundo em uma ampla variedade de estruturas, incluindo PyTorch e
TensorFlow. Quando um modelo \xE9 exportado para o formato ONNX, esses operadores s\xE3o usados para
construir um grafo computacional (muitas vezes chamado de `),oe=r(Ma,"EM",{});var ru=n(oe);po=s(ru,"representa\xE7\xE3o intermedi\xE1ria"),ru.forEach(a),co=s(Ma,`) que
representa o fluxo de dados atrav\xE9s da rede neural.`),Ma.forEach(a),be=p(o),A=r(o,"P",{});var nu=n(A);mo=s(nu,`Ao expor um grafo com operadores e tipos de dados padronizados, o ONNX facilita a
alternar entre os frameworks. Por exemplo, um modelo treinado em PyTorch pode ser exportado para
formato ONNX e depois importado no TensorFlow (e vice-versa).`),nu.forEach(a),re=p(o),Q=r(o,"P",{});var sn=n(Q);uo=s(sn,"\u{1F917} Transformers fornece um pacote "),Y=r(sn,"A",{href:!0});var du=n(Y);je=r(du,"CODE",{});var iu=n(je);fo=s(iu,"transformers.onnx"),iu.forEach(a),du.forEach(a),_e=s(sn,` que permite
que voc\xEA converta os checkpoints do modelo em um grafo ONNX aproveitando os objetos de configura\xE7\xE3o.
Esses objetos de configura\xE7\xE3o v\xEAm prontos para v\xE1rias arquiteturas de modelo e s\xE3o
projetado para ser facilmente extens\xEDvel a outras arquiteturas.`),sn.forEach(a),Ne=p(o),ne=r(o,"P",{});var pu=n(ne);Te=s(pu,"As configura\xE7\xF5es prontas incluem as seguintes arquiteturas:"),pu.forEach(a),Ie=p(o),m=r(o,"UL",{});var u=n(m);ae=r(u,"LI",{});var cu=n(ae);Mo=s(cu,"ALBERT"),cu.forEach(a),ho=p(u),te=r(u,"LI",{});var mu=n(te);vo=s(mu,"BART"),mu.forEach(a),Eo=p(u),se=r(u,"LI",{});var uu=n(se);yo=s(uu,"BEiT"),uu.forEach(a),bo=p(u),X=r(u,"LI",{});var fu=n(X);B=s(fu,"BERT"),fu.forEach(a),va=p(u),Ae=r(u,"LI",{});var Mu=n(Ae);Ea=s(Mu,"BigBird"),Mu.forEach(a),ya=p(u),Ze=r(u,"LI",{});var hu=n(Ze);ba=s(hu,"BigBird-Pegasus"),hu.forEach(a),ja=p(u),O=r(u,"LI",{});var vu=n(O);_a=s(vu,"Blenderbot"),vu.forEach(a),Ta=p(u),Be=r(u,"LI",{});var Eu=n(Be);wa=s(Eu,"BlenderbotSmall"),Eu.forEach(a),ga=p(u),Oe=r(u,"LI",{});var yu=n(Oe);Ua=s(yu,"BLOOM"),yu.forEach(a),Bn=p(u),ot=r(u,"LI",{});var bu=n(ot);On=s(bu,"CamemBERT"),bu.forEach(a),kn=p(u),at=r(u,"LI",{});var ju=n(at);Xn=s(ju,"CLIP"),ju.forEach(a),Rn=p(u),tt=r(u,"LI",{});var _u=n(tt);qn=s(_u,"CodeGen"),_u.forEach(a),Wn=p(u),st=r(u,"LI",{});var Tu=n(st);Gn=s(Tu,"Conditional DETR"),Tu.forEach(a),Vn=p(u),lt=r(u,"LI",{});var wu=n(lt);Dn=s(wu,"ConvBERT"),wu.forEach(a),Ln=p(u),rt=r(u,"LI",{});var gu=n(rt);zn=s(gu,"ConvNeXT"),gu.forEach(a),Fn=p(u),nt=r(u,"LI",{});var Uu=n(nt);Pn=s(Uu,"ConvNeXTV2"),Uu.forEach(a),Sn=p(u),dt=r(u,"LI",{});var Cu=n(dt);Qn=s(Cu,"Data2VecText"),Cu.forEach(a),Yn=p(u),it=r(u,"LI",{});var $u=n(it);Hn=s($u,"Data2VecVision"),$u.forEach(a),Kn=p(u),pt=r(u,"LI",{});var Ju=n(pt);ed=s(Ju,"DeBERTa"),Ju.forEach(a),od=p(u),ct=r(u,"LI",{});var xu=n(ct);ad=s(xu,"DeBERTa-v2"),xu.forEach(a),td=p(u),mt=r(u,"LI",{});var Nu=n(mt);sd=s(Nu,"DeiT"),Nu.forEach(a),ld=p(u),ut=r(u,"LI",{});var Iu=n(ut);rd=s(Iu,"DETR"),Iu.forEach(a),nd=p(u),ft=r(u,"LI",{});var Au=n(ft);dd=s(Au,"DistilBERT"),Au.forEach(a),id=p(u),Mt=r(u,"LI",{});var Zu=n(Mt);pd=s(Zu,"ELECTRA"),Zu.forEach(a),cd=p(u),ht=r(u,"LI",{});var Bu=n(ht);md=s(Bu,"ERNIE"),Bu.forEach(a),ud=p(u),vt=r(u,"LI",{});var Ou=n(vt);fd=s(Ou,"FlauBERT"),Ou.forEach(a),Md=p(u),Et=r(u,"LI",{});var ku=n(Et);hd=s(ku,"GPT Neo"),ku.forEach(a),vd=p(u),yt=r(u,"LI",{});var Xu=n(yt);Ed=s(Xu,"GPT-J"),Xu.forEach(a),yd=p(u),bt=r(u,"LI",{});var Ru=n(bt);bd=s(Ru,"GroupViT"),Ru.forEach(a),jd=p(u),jt=r(u,"LI",{});var qu=n(jt);_d=s(qu,"I-BERT"),qu.forEach(a),Td=p(u),_t=r(u,"LI",{});var Wu=n(_t);wd=s(Wu,"LayoutLM"),Wu.forEach(a),gd=p(u),Tt=r(u,"LI",{});var Gu=n(Tt);Ud=s(Gu,"LayoutLMv3"),Gu.forEach(a),Cd=p(u),wt=r(u,"LI",{});var Vu=n(wt);$d=s(Vu,"LeViT"),Vu.forEach(a),Jd=p(u),gt=r(u,"LI",{});var Du=n(gt);xd=s(Du,"Longformer"),Du.forEach(a),Nd=p(u),Ut=r(u,"LI",{});var Lu=n(Ut);Id=s(Lu,"LongT5"),Lu.forEach(a),Ad=p(u),Ct=r(u,"LI",{});var zu=n(Ct);Zd=s(zu,"M2M100"),zu.forEach(a),Bd=p(u),$t=r(u,"LI",{});var Fu=n($t);Od=s(Fu,"Marian"),Fu.forEach(a),kd=p(u),Jt=r(u,"LI",{});var Pu=n(Jt);Xd=s(Pu,"mBART"),Pu.forEach(a),Rd=p(u),xt=r(u,"LI",{});var Su=n(xt);qd=s(Su,"MobileBERT"),Su.forEach(a),Wd=p(u),Nt=r(u,"LI",{});var Qu=n(Nt);Gd=s(Qu,"MobileViT"),Qu.forEach(a),Vd=p(u),It=r(u,"LI",{});var Yu=n(It);Dd=s(Yu,"MT5"),Yu.forEach(a),Ld=p(u),At=r(u,"LI",{});var Hu=n(At);zd=s(Hu,"OpenAI GPT-2"),Hu.forEach(a),Fd=p(u),Zt=r(u,"LI",{});var Ku=n(Zt);Pd=s(Ku,"OWL-ViT"),Ku.forEach(a),Sd=p(u),Bt=r(u,"LI",{});var ef=n(Bt);Qd=s(ef,"Perceiver"),ef.forEach(a),Yd=p(u),Ot=r(u,"LI",{});var of=n(Ot);Hd=s(of,"PLBart"),of.forEach(a),Kd=p(u),kt=r(u,"LI",{});var af=n(kt);ei=s(af,"ResNet"),af.forEach(a),oi=p(u),Xt=r(u,"LI",{});var tf=n(Xt);ai=s(tf,"RoBERTa"),tf.forEach(a),ti=p(u),Rt=r(u,"LI",{});var sf=n(Rt);si=s(sf,"RoFormer"),sf.forEach(a),li=p(u),qt=r(u,"LI",{});var lf=n(qt);ri=s(lf,"SegFormer"),lf.forEach(a),ni=p(u),Wt=r(u,"LI",{});var rf=n(Wt);di=s(rf,"SqueezeBERT"),rf.forEach(a),ii=p(u),Gt=r(u,"LI",{});var nf=n(Gt);pi=s(nf,"Swin Transformer"),nf.forEach(a),ci=p(u),Vt=r(u,"LI",{});var df=n(Vt);mi=s(df,"T5"),df.forEach(a),ui=p(u),Dt=r(u,"LI",{});var pf=n(Dt);fi=s(pf,"Table Transformer"),pf.forEach(a),Mi=p(u),Lt=r(u,"LI",{});var cf=n(Lt);hi=s(cf,"Vision Encoder decoder"),cf.forEach(a),vi=p(u),zt=r(u,"LI",{});var mf=n(zt);Ei=s(mf,"ViT"),mf.forEach(a),yi=p(u),Ft=r(u,"LI",{});var uf=n(Ft);bi=s(uf,"XLM"),uf.forEach(a),ji=p(u),Pt=r(u,"LI",{});var ff=n(Pt);_i=s(ff,"XLM-RoBERTa"),ff.forEach(a),Ti=p(u),St=r(u,"LI",{});var Mf=n(St);wi=s(Mf,"XLM-RoBERTa-XL"),Mf.forEach(a),gi=p(u),Qt=r(u,"LI",{});var hf=n(Qt);Ui=s(hf,"YOLOS"),hf.forEach(a),u.forEach(a),Rl=p(o),Ca=r(o,"P",{});var vf=n(Ca);Ci=s(vf,"Nas pr\xF3ximas duas se\xE7\xF5es, mostraremos como:"),vf.forEach(a),ql=p(o),ke=r(o,"UL",{});var ln=n(ke);jo=r(ln,"LI",{});var rn=n(jo);$i=s(rn,"Exportar um modelo suportado usando o pacote "),Yt=r(rn,"CODE",{});var Ef=n(Yt);Ji=s(Ef,"transformers.onnx"),Ef.forEach(a),xi=s(rn,"."),rn.forEach(a),Ni=p(ln),Ht=r(ln,"LI",{});var yf=n(Ht);Ii=s(yf,"Exportar um modelo personalizado para uma arquitetura sem suporte."),yf.forEach(a),ln.forEach(a),Wl=p(o),we=r(o,"H2",{class:!0});var nn=n(we);Xe=r(nn,"A",{id:!0,class:!0,href:!0});var bf=n(Xe);Kt=r(bf,"SPAN",{});var jf=n(Kt);b(_o.$$.fragment,jf),jf.forEach(a),bf.forEach(a),Ai=p(nn),es=r(nn,"SPAN",{});var _f=n(es);Zi=s(_f,"Exportando um modelo para ONNX"),_f.forEach(a),nn.forEach(a),Gl=p(o),$a=r(o,"P",{});var Tf=n($a);Bi=s(Tf,`Para exportar um modelo \u{1F917} Transformers para o ONNX, primeiro voc\xEA precisa instalar algumas
depend\xEAncias extras:`),Tf.forEach(a),Vl=p(o),b(To.$$.fragment,o),Dl=p(o),Re=r(o,"P",{});var dn=n(Re);Oi=s(dn,"O pacote "),os=r(dn,"CODE",{});var wf=n(os);ki=s(wf,"transformers.onnx"),wf.forEach(a),Xi=s(dn," pode ent\xE3o ser usado como um m\xF3dulo Python:"),dn.forEach(a),Ll=p(o),b(wo.$$.fragment,o),zl=p(o),Ja=r(o,"P",{});var gf=n(Ja);Ri=s(gf,"A exporta\xE7\xE3o de um checkpoint usando uma configura\xE7\xE3o pronta pode ser feita da seguinte forma:"),gf.forEach(a),Fl=p(o),b(go.$$.fragment,o),Pl=p(o),xa=r(o,"P",{});var Uf=n(xa);qi=s(Uf,"Voc\xEA deve ver os seguintes logs:"),Uf.forEach(a),Sl=p(o),b(Uo.$$.fragment,o),Ql=p(o),de=r(o,"P",{});var La=n(de);Wi=s(La,"Isso exporta um grafo ONNX do ponto de verifica\xE7\xE3o definido pelo argumento "),as=r(La,"CODE",{});var Cf=n(as);Gi=s(Cf,"--model"),Cf.forEach(a),Vi=s(La,`. Nisso
Por exemplo, \xE9 `),ts=r(La,"CODE",{});var $f=n(ts);Di=s($f,"distilbert-base-uncased"),$f.forEach(a),Li=s(La,`, mas pode ser qualquer checkpoint no Hugging
Face Hub ou um armazenado localmente.`),La.forEach(a),Yl=p(o),H=r(o,"P",{});var lo=n(H);zi=s(lo,"O arquivo "),ss=r(lo,"CODE",{});var Jf=n(ss);Fi=s(Jf,"model.onnx"),Jf.forEach(a),Pi=s(lo," resultante pode ser executado em um dos "),Co=r(lo,"A",{href:!0,rel:!0});var xf=n(Co);Si=s(xf,`muitos
aceleradores`),xf.forEach(a),Qi=s(lo,` que suportam o ONNX
padr\xE3o. Por exemplo, podemos carregar e executar o modelo com `),$o=r(lo,"A",{href:!0,rel:!0});var Nf=n($o);Yi=s(Nf,`ONNX
Tempo de execu\xE7\xE3o`),Nf.forEach(a),Hi=s(lo," da seguinte forma:"),lo.forEach(a),Hl=p(o),b(Jo.$$.fragment,o),Kl=p(o),qe=r(o,"P",{});var pn=n(qe);Ki=s(pn,"Os nomes de sa\xEDda necess\xE1rios (como "),ls=r(pn,"CODE",{});var If=n(ls);ep=s(If,'["last_hidden_state"]'),If.forEach(a),op=s(pn,`) podem ser obtidos pegando uma
configura\xE7\xE3o ONNX de cada modelo. Por exemplo, para DistilBERT temos:`),pn.forEach(a),er=p(o),b(xo.$$.fragment,o),or=p(o),We=r(o,"P",{});var cn=n(We);ap=s(cn,`O processo \xE9 id\xEAntico para os checkpoints do TensorFlow no Hub. Por exemplo, podemos
exportar um checkpoint TensorFlow puro do `),No=r(cn,"A",{href:!0,rel:!0});var Af=n(No);tp=s(Af,"Keras"),Af.forEach(a),sp=s(cn," da seguinte forma:"),cn.forEach(a),ar=p(o),b(Io.$$.fragment,o),tr=p(o),Na=r(o,"P",{});var Zf=n(Na);lp=s(Zf,`Para exportar um modelo armazenado localmente, voc\xEA precisar\xE1 ter os pesos e
arquivos tokenizer armazenados em um diret\xF3rio. Por exemplo, podemos carregar e salvar um checkpoint como:`),Zf.forEach(a),sr=p(o),b(Ao.$$.fragment,o),lr=p(o),ie=r(o,"P",{});var za=n(ie);rp=s(za,"Uma vez que o checkpoint \xE9 salvo, podemos export\xE1-lo para o ONNX apontando o "),rs=r(za,"CODE",{});var Bf=n(rs);np=s(Bf,"--model"),Bf.forEach(a),dp=s(za,`
argumento do pacote `),ns=r(za,"CODE",{});var Of=n(ns);ip=s(Of,"transformers.onnx"),Of.forEach(a),pp=s(za," para o diret\xF3rio desejado:"),za.forEach(a),rr=p(o),b(Zo.$$.fragment,o),nr=p(o),b(Bo.$$.fragment,o),dr=p(o),pe=r(o,"P",{});var Fa=n(pe);cp=s(Fa,"Uma vez que o checkpoint \xE9 salvo, podemos export\xE1-lo para o ONNX apontando o "),ds=r(Fa,"CODE",{});var kf=n(ds);mp=s(kf,"--model"),kf.forEach(a),up=s(Fa,`
argumento do pacote `),is=r(Fa,"CODE",{});var Xf=n(is);fp=s(Xf,"transformers.onnx"),Xf.forEach(a),Mp=s(Fa," para o diret\xF3rio desejado:"),Fa.forEach(a),ir=p(o),b(Oo.$$.fragment,o),pr=p(o),ge=r(o,"H2",{class:!0});var mn=n(ge);Ge=r(mn,"A",{id:!0,class:!0,href:!0});var Rf=n(Ge);ps=r(Rf,"SPAN",{});var qf=n(ps);b(ko.$$.fragment,qf),qf.forEach(a),Rf.forEach(a),hp=p(mn),cs=r(mn,"SPAN",{});var Wf=n(cs);vp=s(Wf,"Selecionando features para diferentes tarefas do modelo"),Wf.forEach(a),mn.forEach(a),cr=p(o),ce=r(o,"P",{});var Pa=n(ce);Ep=s(Pa,"Cada configura\xE7\xE3o pronta vem com um conjunto de "),ms=r(Pa,"EM",{});var Gf=n(ms);yp=s(Gf,"features"),Gf.forEach(a),bp=s(Pa,` que permitem exportar
modelos para diferentes tipos de tarefas. Conforme mostrado na tabela abaixo, cada recurso \xE9
associado a uma `),us=r(Pa,"CODE",{});var Vf=n(us);jp=s(Vf,"AutoClass"),Vf.forEach(a),_p=s(Pa," diferente:"),Pa.forEach(a),mr=p(o),Ve=r(o,"TABLE",{});var un=n(Ve);fs=r(un,"THEAD",{});var Df=n(fs);Xo=r(Df,"TR",{});var fn=n(Xo);Ms=r(fn,"TH",{});var Lf=n(Ms);Tp=s(Lf,"Feature"),Lf.forEach(a),wp=p(fn),hs=r(fn,"TH",{});var zf=n(hs);gp=s(zf,"Auto Class"),zf.forEach(a),fn.forEach(a),Df.forEach(a),Up=p(un),R=r(un,"TBODY",{});var z=n(R);Ro=r(z,"TR",{});var Mn=n(Ro);qo=r(Mn,"TD",{});var hn=n(qo);vs=r(hn,"CODE",{});var Ff=n(vs);Cp=s(Ff,"causal-lm"),Ff.forEach(a),$p=s(hn,", "),Es=r(hn,"CODE",{});var Pf=n(Es);Jp=s(Pf,"causal-lm-with-past"),Pf.forEach(a),hn.forEach(a),xp=p(Mn),ys=r(Mn,"TD",{});var Sf=n(ys);bs=r(Sf,"CODE",{});var Qf=n(bs);Np=s(Qf,"AutoModelForCausalLM"),Qf.forEach(a),Sf.forEach(a),Mn.forEach(a),Ip=p(z),Wo=r(z,"TR",{});var vn=n(Wo);Go=r(vn,"TD",{});var En=n(Go);js=r(En,"CODE",{});var Yf=n(js);Ap=s(Yf,"default"),Yf.forEach(a),Zp=s(En,", "),_s=r(En,"CODE",{});var Hf=n(_s);Bp=s(Hf,"default-with-past"),Hf.forEach(a),En.forEach(a),Op=p(vn),Ts=r(vn,"TD",{});var Kf=n(Ts);ws=r(Kf,"CODE",{});var eM=n(ws);kp=s(eM,"AutoModel"),eM.forEach(a),Kf.forEach(a),vn.forEach(a),Xp=p(z),Vo=r(z,"TR",{});var yn=n(Vo);gs=r(yn,"TD",{});var oM=n(gs);Us=r(oM,"CODE",{});var aM=n(Us);Rp=s(aM,"masked-lm"),aM.forEach(a),oM.forEach(a),qp=p(yn),Cs=r(yn,"TD",{});var tM=n(Cs);$s=r(tM,"CODE",{});var sM=n($s);Wp=s(sM,"AutoModelForMaskedLM"),sM.forEach(a),tM.forEach(a),yn.forEach(a),Gp=p(z),Do=r(z,"TR",{});var bn=n(Do);Js=r(bn,"TD",{});var lM=n(Js);xs=r(lM,"CODE",{});var rM=n(xs);Vp=s(rM,"question-answering"),rM.forEach(a),lM.forEach(a),Dp=p(bn),Ns=r(bn,"TD",{});var nM=n(Ns);Is=r(nM,"CODE",{});var dM=n(Is);Lp=s(dM,"AutoModelForQuestionAnswering"),dM.forEach(a),nM.forEach(a),bn.forEach(a),zp=p(z),Lo=r(z,"TR",{});var jn=n(Lo);zo=r(jn,"TD",{});var _n=n(zo);As=r(_n,"CODE",{});var iM=n(As);Fp=s(iM,"seq2seq-lm"),iM.forEach(a),Pp=s(_n,", "),Zs=r(_n,"CODE",{});var pM=n(Zs);Sp=s(pM,"seq2seq-lm-with-past"),pM.forEach(a),_n.forEach(a),Qp=p(jn),Bs=r(jn,"TD",{});var cM=n(Bs);Os=r(cM,"CODE",{});var mM=n(Os);Yp=s(mM,"AutoModelForSeq2SeqLM"),mM.forEach(a),cM.forEach(a),jn.forEach(a),Hp=p(z),Fo=r(z,"TR",{});var Tn=n(Fo);ks=r(Tn,"TD",{});var uM=n(ks);Xs=r(uM,"CODE",{});var fM=n(Xs);Kp=s(fM,"sequence-classification"),fM.forEach(a),uM.forEach(a),ec=p(Tn),Rs=r(Tn,"TD",{});var MM=n(Rs);qs=r(MM,"CODE",{});var hM=n(qs);oc=s(hM,"AutoModelForSequenceClassification"),hM.forEach(a),MM.forEach(a),Tn.forEach(a),ac=p(z),Po=r(z,"TR",{});var wn=n(Po);Ws=r(wn,"TD",{});var vM=n(Ws);Gs=r(vM,"CODE",{});var EM=n(Gs);tc=s(EM,"token-classification"),EM.forEach(a),vM.forEach(a),sc=p(wn),Vs=r(wn,"TD",{});var yM=n(Vs);Ds=r(yM,"CODE",{});var bM=n(Ds);lc=s(bM,"AutoModelForTokenClassification"),bM.forEach(a),yM.forEach(a),wn.forEach(a),z.forEach(a),un.forEach(a),ur=p(o),De=r(o,"P",{});var gn=n(De);rc=s(gn,`Para cada configura\xE7\xE3o, voc\xEA pode encontrar a lista de recursos suportados por meio do
`),Ls=r(gn,"CODE",{});var jM=n(Ls);nc=s(jM,"FeaturesManager"),jM.forEach(a),dc=s(gn,". Por exemplo, para DistilBERT temos:"),gn.forEach(a),fr=p(o),b(So.$$.fragment,o),Mr=p(o),me=r(o,"P",{});var Sa=n(me);ic=s(Sa,"Voc\xEA pode ent\xE3o passar um desses recursos para o argumento "),zs=r(Sa,"CODE",{});var _M=n(zs);pc=s(_M,"--feature"),_M.forEach(a),cc=s(Sa,` no
pacote `),Fs=r(Sa,"CODE",{});var TM=n(Fs);mc=s(TM,"transformers.onnx"),TM.forEach(a),uc=s(Sa,`. Por exemplo, para exportar um modelo de classifica\xE7\xE3o de texto, podemos
escolher um modelo ajustado no Hub e executar:`),Sa.forEach(a),hr=p(o),b(Qo.$$.fragment,o),vr=p(o),Ia=r(o,"P",{});var wM=n(Ia);fc=s(wM,"Isso exibe os seguintes logs:"),wM.forEach(a),Er=p(o),b(Yo.$$.fragment,o),yr=p(o),K=r(o,"P",{});var ro=n(K);Mc=s(ro,"Observe que, neste caso, os nomes de sa\xEDda do modelo ajustado s\xE3o "),Ps=r(ro,"CODE",{});var gM=n(Ps);hc=s(gM,"logits"),gM.forEach(a),vc=s(ro,`
em vez do `),Ss=r(ro,"CODE",{});var UM=n(Ss);Ec=s(UM,"last_hidden_state"),UM.forEach(a),yc=s(ro," que vimos com o checkpoint "),Qs=r(ro,"CODE",{});var CM=n(Qs);bc=s(CM,"distilbert-base-uncased"),CM.forEach(a),jc=s(ro,`
mais cedo. Isso \xE9 esperado, pois o modelo ajustado (fine-tuned) possui uma cabe\xE7a de classifica\xE7\xE3o de sequ\xEAncia.`),ro.forEach(a),br=p(o),b(Le.$$.fragment,o),jr=p(o),b(ze.$$.fragment,o),_r=p(o),Ue=r(o,"H2",{class:!0});var Un=n(Ue);Fe=r(Un,"A",{id:!0,class:!0,href:!0});var $M=n(Fe);Ys=r($M,"SPAN",{});var JM=n(Ys);b(Ho.$$.fragment,JM),JM.forEach(a),$M.forEach(a),_c=p(Un),Hs=r(Un,"SPAN",{});var xM=n(Hs);Tc=s(xM,"Exportando um modelo para uma arquitetura sem suporte"),xM.forEach(a),Un.forEach(a),Tr=p(o),Aa=r(o,"P",{});var NM=n(Aa);wc=s(NM,`Se voc\xEA deseja exportar um modelo cuja arquitetura n\xE3o \xE9 suportada nativamente pela
biblioteca, h\xE1 tr\xEAs etapas principais a seguir:`),NM.forEach(a),wr=p(o),ue=r(o,"OL",{});var Qa=n(ue);Ks=r(Qa,"LI",{});var IM=n(Ks);gc=s(IM,"Implemente uma configura\xE7\xE3o ONNX personalizada."),IM.forEach(a),Uc=p(Qa),el=r(Qa,"LI",{});var AM=n(el);Cc=s(AM,"Exporte o modelo para o ONNX."),AM.forEach(a),$c=p(Qa),ol=r(Qa,"LI",{});var ZM=n(ol);Jc=s(ZM,"Valide as sa\xEDdas do PyTorch e dos modelos exportados."),ZM.forEach(a),Qa.forEach(a),gr=p(o),Za=r(o,"P",{});var BM=n(Za);xc=s(BM,`Nesta se\xE7\xE3o, veremos como o DistilBERT foi implementado para mostrar o que est\xE1 envolvido
em cada passo.`),BM.forEach(a),Ur=p(o),Ce=r(o,"H3",{class:!0});var Cn=n(Ce);Pe=r(Cn,"A",{id:!0,class:!0,href:!0});var OM=n(Pe);al=r(OM,"SPAN",{});var kM=n(al);b(Ko.$$.fragment,kM),kM.forEach(a),OM.forEach(a),Nc=p(Cn),tl=r(Cn,"SPAN",{});var XM=n(tl);Ic=s(XM,"Implementando uma configura\xE7\xE3o ONNX personalizada"),XM.forEach(a),Cn.forEach(a),Cr=p(o),Ba=r(o,"P",{});var RM=n(Ba);Ac=s(RM,`Vamos come\xE7ar com o objeto de configura\xE7\xE3o ONNX. Fornecemos tr\xEAs classes abstratas que
voc\xEA deve herdar, dependendo do tipo de arquitetura de modelo que deseja exportar:`),RM.forEach(a),$r=p(o),fe=r(o,"UL",{});var Ya=n(fe);Oa=r(Ya,"LI",{});var ou=n(Oa);Zc=s(ou,"Modelos baseados em codificador herdam de "),sl=r(ou,"CODE",{});var qM=n(sl);Bc=s(qM,"OnnxConfig"),qM.forEach(a),ou.forEach(a),Oc=p(Ya),ka=r(Ya,"LI",{});var au=n(ka);kc=s(au,"Modelos baseados em decodificador herdam de "),ll=r(au,"CODE",{});var WM=n(ll);Xc=s(WM,"OnnxConfigWithPast"),WM.forEach(a),au.forEach(a),Rc=p(Ya),Xa=r(Ya,"LI",{});var tu=n(Xa);qc=s(tu,"Os modelos codificador-decodificador herdam de "),rl=r(tu,"CODE",{});var GM=n(rl);Wc=s(GM,"OnnxSeq2SeqConfigWithPast"),GM.forEach(a),tu.forEach(a),Ya.forEach(a),Jr=p(o),b(Se.$$.fragment,o),xr=p(o),Qe=r(o,"P",{});var $n=n(Qe);Gc=s($n,`Como o DistilBERT \xE9 um modelo baseado em codificador, sua configura\xE7\xE3o \xE9 herdada de
`),nl=r($n,"CODE",{});var VM=n(nl);Vc=s(VM,"OnnxConfig"),VM.forEach(a),Dc=s($n,":"),$n.forEach(a),Nr=p(o),b(ea.$$.fragment,o),Ir=p(o),D=r(o,"P",{});var Ee=n(D);Lc=s(Ee,"Todo objeto de configura\xE7\xE3o deve implementar a propriedade "),dl=r(Ee,"CODE",{});var DM=n(dl);zc=s(DM,"inputs"),DM.forEach(a),Fc=s(Ee,` e retornar um mapeamento,
onde cada chave corresponde a uma entrada esperada e cada valor indica o eixo
dessa entrada. Para o DistilBERT, podemos ver que duas entradas s\xE3o necess\xE1rias: `),il=r(Ee,"CODE",{});var LM=n(il);Pc=s(LM,"input_ids"),LM.forEach(a),Sc=s(Ee,` e
`),pl=r(Ee,"CODE",{});var zM=n(pl);Qc=s(zM,"attention_mask"),zM.forEach(a),Yc=s(Ee,". Essas entradas t\xEAm a mesma forma de "),cl=r(Ee,"CODE",{});var FM=n(cl);Hc=s(FM,"(batch_size, sequence_length)"),FM.forEach(a),Kc=s(Ee,`
\xE9 por isso que vemos os mesmos eixos usados na configura\xE7\xE3o.`),Ee.forEach(a),Ar=p(o),b(Ye.$$.fragment,o),Zr=p(o),Ra=r(o,"P",{});var PM=n(Ra);em=s(PM,`Depois de implementar uma configura\xE7\xE3o ONNX, voc\xEA pode instanci\xE1-la fornecendo a
configura\xE7\xE3o do modelo base da seguinte forma:`),PM.forEach(a),Br=p(o),b(oa.$$.fragment,o),Or=p(o),qa=r(o,"P",{});var SM=n(qa);om=s(SM,`O objeto resultante tem v\xE1rias propriedades \xFAteis. Por exemplo, voc\xEA pode visualizar o conjunto de operadores ONNX
que ser\xE1 usado durante a exporta\xE7\xE3o:`),SM.forEach(a),kr=p(o),b(aa.$$.fragment,o),Xr=p(o),Wa=r(o,"P",{});var QM=n(Wa);am=s(QM,"Voc\xEA tamb\xE9m pode visualizar as sa\xEDdas associadas ao modelo da seguinte forma:"),QM.forEach(a),Rr=p(o),b(ta.$$.fragment,o),qr=p(o),L=r(o,"P",{});var ye=n(L);tm=s(ye,`Observe que a propriedade outputs segue a mesma estrutura das entradas; ele retorna um
`),ml=r(ye,"CODE",{});var YM=n(ml);sm=s(YM,"OrderedDict"),YM.forEach(a),lm=s(ye,` de sa\xEDdas nomeadas e suas formas. A estrutura de sa\xEDda est\xE1 ligada a
escolha do recurso com o qual a configura\xE7\xE3o \xE9 inicializada. Por padr\xE3o, a configura\xE7\xE3o do ONNX
\xE9 inicializada com o recurso `),ul=r(ye,"CODE",{});var HM=n(ul);rm=s(HM,"default"),HM.forEach(a),nm=s(ye,` que corresponde \xE0 exporta\xE7\xE3o de um
modelo carregado com a classe `),fl=r(ye,"CODE",{});var KM=n(fl);dm=s(KM,"AutoModel"),KM.forEach(a),im=s(ye,`. Se voc\xEA deseja exportar um modelo para outra tarefa,
apenas forne\xE7a um recurso diferente para o argumento `),Ml=r(ye,"CODE",{});var eh=n(Ml);pm=s(eh,"task"),eh.forEach(a),cm=s(ye,` quando voc\xEA inicializar a configura\xE7\xE3o ONNX
. Por exemplo, se quisermos exportar o DistilBERT com uma sequ\xEAncia
de classifica\xE7\xE3o, poder\xEDamos usar:`),ye.forEach(a),Wr=p(o),b(sa.$$.fragment,o),Gr=p(o),b(He.$$.fragment,o),Vr=p(o),$e=r(o,"H3",{class:!0});var Jn=n($e);Ke=r(Jn,"A",{id:!0,class:!0,href:!0});var oh=n(Ke);hl=r(oh,"SPAN",{});var ah=n(hl);b(la.$$.fragment,ah),ah.forEach(a),oh.forEach(a),mm=p(Jn),vl=r(Jn,"SPAN",{});var th=n(vl);um=s(th,"Exportando um modelo"),th.forEach(a),Jn.forEach(a),Dr=p(o),Me=r(o,"P",{});var Ha=n(Me);fm=s(Ha,`Depois de ter implementado a configura\xE7\xE3o do ONNX, o pr\xF3ximo passo \xE9 exportar o modelo.
Aqui podemos usar a fun\xE7\xE3o `),El=r(Ha,"CODE",{});var sh=n(El);Mm=s(sh,"export()"),sh.forEach(a),hm=s(Ha," fornecida pelo pacote "),yl=r(Ha,"CODE",{});var lh=n(yl);vm=s(lh,"transformers.onnx"),lh.forEach(a),Em=s(Ha,`.
Esta fun\xE7\xE3o espera a configura\xE7\xE3o do ONNX, juntamente com o modelo base e o tokenizer,
e o caminho para salvar o arquivo exportado:`),Ha.forEach(a),Lr=p(o),b(ra.$$.fragment,o),zr=p(o),W=r(o,"P",{});var ee=n(W);ym=s(ee,"Os "),bl=r(ee,"CODE",{});var rh=n(bl);bm=s(rh,"onnx_inputs"),rh.forEach(a),jm=s(ee," e "),jl=r(ee,"CODE",{});var nh=n(jl);_m=s(nh,"onnx_outputs"),nh.forEach(a),Tm=s(ee," retornados pela fun\xE7\xE3o "),_l=r(ee,"CODE",{});var dh=n(_l);wm=s(dh,"export()"),dh.forEach(a),gm=s(ee,` s\xE3o listas de
chaves definidas nas propriedades `),Tl=r(ee,"CODE",{});var ih=n(Tl);Um=s(ih,"inputs"),ih.forEach(a),Cm=s(ee," e "),wl=r(ee,"CODE",{});var ph=n(wl);$m=s(ph,"outputs"),ph.forEach(a),Jm=s(ee,` da configura\xE7\xE3o. Uma vez que o
modelo \xE9 exportado, voc\xEA pode testar se o modelo est\xE1 bem formado da seguinte forma:`),ee.forEach(a),Fr=p(o),b(na.$$.fragment,o),Pr=p(o),b(eo.$$.fragment,o),Sr=p(o),Je=r(o,"H3",{class:!0});var xn=n(Je);oo=r(xn,"A",{id:!0,class:!0,href:!0});var ch=n(oo);gl=r(ch,"SPAN",{});var mh=n(gl);b(da.$$.fragment,mh),mh.forEach(a),ch.forEach(a),xm=p(xn),Ul=r(xn,"SPAN",{});var uh=n(Ul);Nm=s(uh,"Validando a sa\xEDda dos modelos"),uh.forEach(a),xn.forEach(a),Qr=p(o),he=r(o,"P",{});var Ka=n(he);Im=s(Ka,`A etapa final \xE9 validar se as sa\xEDdas do modelo base e exportado concordam
dentro de alguma toler\xE2ncia absoluta. Aqui podemos usar a fun\xE7\xE3o `),Cl=r(Ka,"CODE",{});var fh=n(Cl);Am=s(fh,"validate_model_outputs()"),fh.forEach(a),Zm=s(Ka,`
fornecida pelo pacote `),$l=r(Ka,"CODE",{});var Mh=n($l);Bm=s(Mh,"transformers.onnx"),Mh.forEach(a),Om=s(Ka," da seguinte forma:"),Ka.forEach(a),Yr=p(o),b(ia.$$.fragment,o),Hr=p(o),ao=r(o,"P",{});var Nn=n(ao);km=s(Nn,"Esta fun\xE7\xE3o usa o m\xE9todo "),Jl=r(Nn,"CODE",{});var hh=n(Jl);Xm=s(hh,"generate_dummy_inputs()"),hh.forEach(a),Rm=s(Nn,` para
gerar entradas para o modelo base e o exportado, e a toler\xE2ncia absoluta pode ser
definida na configura\xE7\xE3o. Geralmente encontramos concord\xE2ncia num\xE9rica em 1e-6 a 1e-4
de alcance, embora qualquer coisa menor que 1e-3 provavelmente esteja OK.`),Nn.forEach(a),Kr=p(o),xe=r(o,"H2",{class:!0});var In=n(xe);to=r(In,"A",{id:!0,class:!0,href:!0});var vh=n(to);xl=r(vh,"SPAN",{});var Eh=n(xl);b(pa.$$.fragment,Eh),Eh.forEach(a),vh.forEach(a),qm=p(In),Nl=r(In,"SPAN",{});var yh=n(Nl);Wm=s(yh,"Contribuindo com uma nova configura\xE7\xE3o para \u{1F917} Transformers"),yh.forEach(a),In.forEach(a),en=p(o),Ga=r(o,"P",{});var bh=n(Ga);Gm=s(bh,`Estamos procurando expandir o conjunto de configura\xE7\xF5es prontas e receber contribui\xE7\xF5es
da comunidade! Se voc\xEA gostaria de contribuir para a biblioteca, voc\xEA
precisar\xE1:`),bh.forEach(a),on=p(o),ve=r(o,"UL",{});var et=n(ve);ca=r(et,"LI",{});var An=n(ca);Vm=s(An,"Implemente a configura\xE7\xE3o do ONNX no arquivo "),Il=r(An,"CODE",{});var jh=n(Il);Dm=s(jh,"configuration_<model_name>.py"),jh.forEach(a),Lm=s(An,` correspondente
Arquivo`),An.forEach(a),zm=p(et),Va=r(et,"LI",{});var su=n(Va);Fm=s(su,`Incluir a arquitetura do modelo e recursos correspondentes em
`),Al=r(su,"CODE",{});var _h=n(Al);Pm=s(_h,"~onnx.features.FeatureManager"),_h.forEach(a),su.forEach(a),Sm=p(et),Da=r(et,"LI",{});var lu=n(Da);Qm=s(lu,"Adicione sua arquitetura de modelo aos testes em "),Zl=r(lu,"CODE",{});var Th=n(Zl);Ym=s(Th,"test_onnx_v2.py"),Th.forEach(a),lu.forEach(a),et.forEach(a),an=p(o),so=r(o,"P",{});var Zn=n(so);Hm=s(Zn,"Confira como ficou a configura\xE7\xE3o do "),ma=r(Zn,"A",{href:!0,rel:!0});var wh=n(ma);Km=s(wh,"IBERT"),wh.forEach(a),eu=s(Zn,` para obter uma
id\xE9ia do que est\xE1 envolvido.`),Zn.forEach(a),this.h()},h(){v(f,"name","hf:doc:metadata"),v(f,"content",JSON.stringify(Xh)),v(g,"id","exportando-modelos-para-onnx"),v(g,"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"),v(g,"href","#exportando-modelos-para-onnx"),v(M,"class","relative group"),v(J,"href","http://onnx.ai"),v(J,"rel","nofollow"),v(Y,"href","main_classes/onnx"),v(Xe,"id","exportando-um-modelo-para-onnx"),v(Xe,"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"),v(Xe,"href","#exportando-um-modelo-para-onnx"),v(we,"class","relative group"),v(Co,"href","https://onnx.ai/supported-tools.html#deployModel"),v(Co,"rel","nofollow"),v($o,"href","https://onnxruntime.ai/"),v($o,"rel","nofollow"),v(No,"href","https://huggingface.co/keras-io"),v(No,"rel","nofollow"),v(Ge,"id","selecionando-features-para-diferentes-tarefas-do-modelo"),v(Ge,"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"),v(Ge,"href","#selecionando-features-para-diferentes-tarefas-do-modelo"),v(ge,"class","relative group"),v(Fe,"id","exportando-um-modelo-para-uma-arquitetura-sem-suporte"),v(Fe,"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"),v(Fe,"href","#exportando-um-modelo-para-uma-arquitetura-sem-suporte"),v(Ue,"class","relative group"),v(Pe,"id","implementando-uma-configurao-onnx-personalizada"),v(Pe,"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"),v(Pe,"href","#implementando-uma-configurao-onnx-personalizada"),v(Ce,"class","relative group"),v(Ke,"id","exportando-um-modelo"),v(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"),v(Ke,"href","#exportando-um-modelo"),v($e,"class","relative group"),v(oo,"id","validando-a-sada-dos-modelos"),v(oo,"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"),v(oo,"href","#validando-a-sada-dos-modelos"),v(Je,"class","relative group"),v(to,"id","contribuindo-com-uma-nova-configurao-para-transformers"),v(to,"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"),v(to,"href","#contribuindo-com-uma-nova-configurao-para-transformers"),v(xe,"class","relative group"),v(ma,"href","https://github.com/huggingface/transformers/pull/14868/files"),v(ma,"rel","nofollow")},m(o,d){e(document.head,f),c(o,x,d),c(o,M,d),e(M,g),e(g,$),j(h,$,null),e(M,E),e(M,N),e(N,U),c(o,C,d),c(o,Z,d),e(Z,I),e(Z,J),e(J,F),e(Z,G),c(o,V,d),j(P,o,d),c(o,le,d),c(o,S,d),e(S,io),e(S,oe),e(oe,po),e(S,co),c(o,be,d),c(o,A,d),e(A,mo),c(o,re,d),c(o,Q,d),e(Q,uo),e(Q,Y),e(Y,je),e(je,fo),e(Q,_e),c(o,Ne,d),c(o,ne,d),e(ne,Te),c(o,Ie,d),c(o,m,d),e(m,ae),e(ae,Mo),e(m,ho),e(m,te),e(te,vo),e(m,Eo),e(m,se),e(se,yo),e(m,bo),e(m,X),e(X,B),e(m,va),e(m,Ae),e(Ae,Ea),e(m,ya),e(m,Ze),e(Ze,ba),e(m,ja),e(m,O),e(O,_a),e(m,Ta),e(m,Be),e(Be,wa),e(m,ga),e(m,Oe),e(Oe,Ua),e(m,Bn),e(m,ot),e(ot,On),e(m,kn),e(m,at),e(at,Xn),e(m,Rn),e(m,tt),e(tt,qn),e(m,Wn),e(m,st),e(st,Gn),e(m,Vn),e(m,lt),e(lt,Dn),e(m,Ln),e(m,rt),e(rt,zn),e(m,Fn),e(m,nt),e(nt,Pn),e(m,Sn),e(m,dt),e(dt,Qn),e(m,Yn),e(m,it),e(it,Hn),e(m,Kn),e(m,pt),e(pt,ed),e(m,od),e(m,ct),e(ct,ad),e(m,td),e(m,mt),e(mt,sd),e(m,ld),e(m,ut),e(ut,rd),e(m,nd),e(m,ft),e(ft,dd),e(m,id),e(m,Mt),e(Mt,pd),e(m,cd),e(m,ht),e(ht,md),e(m,ud),e(m,vt),e(vt,fd),e(m,Md),e(m,Et),e(Et,hd),e(m,vd),e(m,yt),e(yt,Ed),e(m,yd),e(m,bt),e(bt,bd),e(m,jd),e(m,jt),e(jt,_d),e(m,Td),e(m,_t),e(_t,wd),e(m,gd),e(m,Tt),e(Tt,Ud),e(m,Cd),e(m,wt),e(wt,$d),e(m,Jd),e(m,gt),e(gt,xd),e(m,Nd),e(m,Ut),e(Ut,Id),e(m,Ad),e(m,Ct),e(Ct,Zd),e(m,Bd),e(m,$t),e($t,Od),e(m,kd),e(m,Jt),e(Jt,Xd),e(m,Rd),e(m,xt),e(xt,qd),e(m,Wd),e(m,Nt),e(Nt,Gd),e(m,Vd),e(m,It),e(It,Dd),e(m,Ld),e(m,At),e(At,zd),e(m,Fd),e(m,Zt),e(Zt,Pd),e(m,Sd),e(m,Bt),e(Bt,Qd),e(m,Yd),e(m,Ot),e(Ot,Hd),e(m,Kd),e(m,kt),e(kt,ei),e(m,oi),e(m,Xt),e(Xt,ai),e(m,ti),e(m,Rt),e(Rt,si),e(m,li),e(m,qt),e(qt,ri),e(m,ni),e(m,Wt),e(Wt,di),e(m,ii),e(m,Gt),e(Gt,pi),e(m,ci),e(m,Vt),e(Vt,mi),e(m,ui),e(m,Dt),e(Dt,fi),e(m,Mi),e(m,Lt),e(Lt,hi),e(m,vi),e(m,zt),e(zt,Ei),e(m,yi),e(m,Ft),e(Ft,bi),e(m,ji),e(m,Pt),e(Pt,_i),e(m,Ti),e(m,St),e(St,wi),e(m,gi),e(m,Qt),e(Qt,Ui),c(o,Rl,d),c(o,Ca,d),e(Ca,Ci),c(o,ql,d),c(o,ke,d),e(ke,jo),e(jo,$i),e(jo,Yt),e(Yt,Ji),e(jo,xi),e(ke,Ni),e(ke,Ht),e(Ht,Ii),c(o,Wl,d),c(o,we,d),e(we,Xe),e(Xe,Kt),j(_o,Kt,null),e(we,Ai),e(we,es),e(es,Zi),c(o,Gl,d),c(o,$a,d),e($a,Bi),c(o,Vl,d),j(To,o,d),c(o,Dl,d),c(o,Re,d),e(Re,Oi),e(Re,os),e(os,ki),e(Re,Xi),c(o,Ll,d),j(wo,o,d),c(o,zl,d),c(o,Ja,d),e(Ja,Ri),c(o,Fl,d),j(go,o,d),c(o,Pl,d),c(o,xa,d),e(xa,qi),c(o,Sl,d),j(Uo,o,d),c(o,Ql,d),c(o,de,d),e(de,Wi),e(de,as),e(as,Gi),e(de,Vi),e(de,ts),e(ts,Di),e(de,Li),c(o,Yl,d),c(o,H,d),e(H,zi),e(H,ss),e(ss,Fi),e(H,Pi),e(H,Co),e(Co,Si),e(H,Qi),e(H,$o),e($o,Yi),e(H,Hi),c(o,Hl,d),j(Jo,o,d),c(o,Kl,d),c(o,qe,d),e(qe,Ki),e(qe,ls),e(ls,ep),e(qe,op),c(o,er,d),j(xo,o,d),c(o,or,d),c(o,We,d),e(We,ap),e(We,No),e(No,tp),e(We,sp),c(o,ar,d),j(Io,o,d),c(o,tr,d),c(o,Na,d),e(Na,lp),c(o,sr,d),j(Ao,o,d),c(o,lr,d),c(o,ie,d),e(ie,rp),e(ie,rs),e(rs,np),e(ie,dp),e(ie,ns),e(ns,ip),e(ie,pp),c(o,rr,d),j(Zo,o,d),c(o,nr,d),j(Bo,o,d),c(o,dr,d),c(o,pe,d),e(pe,cp),e(pe,ds),e(ds,mp),e(pe,up),e(pe,is),e(is,fp),e(pe,Mp),c(o,ir,d),j(Oo,o,d),c(o,pr,d),c(o,ge,d),e(ge,Ge),e(Ge,ps),j(ko,ps,null),e(ge,hp),e(ge,cs),e(cs,vp),c(o,cr,d),c(o,ce,d),e(ce,Ep),e(ce,ms),e(ms,yp),e(ce,bp),e(ce,us),e(us,jp),e(ce,_p),c(o,mr,d),c(o,Ve,d),e(Ve,fs),e(fs,Xo),e(Xo,Ms),e(Ms,Tp),e(Xo,wp),e(Xo,hs),e(hs,gp),e(Ve,Up),e(Ve,R),e(R,Ro),e(Ro,qo),e(qo,vs),e(vs,Cp),e(qo,$p),e(qo,Es),e(Es,Jp),e(Ro,xp),e(Ro,ys),e(ys,bs),e(bs,Np),e(R,Ip),e(R,Wo),e(Wo,Go),e(Go,js),e(js,Ap),e(Go,Zp),e(Go,_s),e(_s,Bp),e(Wo,Op),e(Wo,Ts),e(Ts,ws),e(ws,kp),e(R,Xp),e(R,Vo),e(Vo,gs),e(gs,Us),e(Us,Rp),e(Vo,qp),e(Vo,Cs),e(Cs,$s),e($s,Wp),e(R,Gp),e(R,Do),e(Do,Js),e(Js,xs),e(xs,Vp),e(Do,Dp),e(Do,Ns),e(Ns,Is),e(Is,Lp),e(R,zp),e(R,Lo),e(Lo,zo),e(zo,As),e(As,Fp),e(zo,Pp),e(zo,Zs),e(Zs,Sp),e(Lo,Qp),e(Lo,Bs),e(Bs,Os),e(Os,Yp),e(R,Hp),e(R,Fo),e(Fo,ks),e(ks,Xs),e(Xs,Kp),e(Fo,ec),e(Fo,Rs),e(Rs,qs),e(qs,oc),e(R,ac),e(R,Po),e(Po,Ws),e(Ws,Gs),e(Gs,tc),e(Po,sc),e(Po,Vs),e(Vs,Ds),e(Ds,lc),c(o,ur,d),c(o,De,d),e(De,rc),e(De,Ls),e(Ls,nc),e(De,dc),c(o,fr,d),j(So,o,d),c(o,Mr,d),c(o,me,d),e(me,ic),e(me,zs),e(zs,pc),e(me,cc),e(me,Fs),e(Fs,mc),e(me,uc),c(o,hr,d),j(Qo,o,d),c(o,vr,d),c(o,Ia,d),e(Ia,fc),c(o,Er,d),j(Yo,o,d),c(o,yr,d),c(o,K,d),e(K,Mc),e(K,Ps),e(Ps,hc),e(K,vc),e(K,Ss),e(Ss,Ec),e(K,yc),e(K,Qs),e(Qs,bc),e(K,jc),c(o,br,d),j(Le,o,d),c(o,jr,d),j(ze,o,d),c(o,_r,d),c(o,Ue,d),e(Ue,Fe),e(Fe,Ys),j(Ho,Ys,null),e(Ue,_c),e(Ue,Hs),e(Hs,Tc),c(o,Tr,d),c(o,Aa,d),e(Aa,wc),c(o,wr,d),c(o,ue,d),e(ue,Ks),e(Ks,gc),e(ue,Uc),e(ue,el),e(el,Cc),e(ue,$c),e(ue,ol),e(ol,Jc),c(o,gr,d),c(o,Za,d),e(Za,xc),c(o,Ur,d),c(o,Ce,d),e(Ce,Pe),e(Pe,al),j(Ko,al,null),e(Ce,Nc),e(Ce,tl),e(tl,Ic),c(o,Cr,d),c(o,Ba,d),e(Ba,Ac),c(o,$r,d),c(o,fe,d),e(fe,Oa),e(Oa,Zc),e(Oa,sl),e(sl,Bc),e(fe,Oc),e(fe,ka),e(ka,kc),e(ka,ll),e(ll,Xc),e(fe,Rc),e(fe,Xa),e(Xa,qc),e(Xa,rl),e(rl,Wc),c(o,Jr,d),j(Se,o,d),c(o,xr,d),c(o,Qe,d),e(Qe,Gc),e(Qe,nl),e(nl,Vc),e(Qe,Dc),c(o,Nr,d),j(ea,o,d),c(o,Ir,d),c(o,D,d),e(D,Lc),e(D,dl),e(dl,zc),e(D,Fc),e(D,il),e(il,Pc),e(D,Sc),e(D,pl),e(pl,Qc),e(D,Yc),e(D,cl),e(cl,Hc),e(D,Kc),c(o,Ar,d),j(Ye,o,d),c(o,Zr,d),c(o,Ra,d),e(Ra,em),c(o,Br,d),j(oa,o,d),c(o,Or,d),c(o,qa,d),e(qa,om),c(o,kr,d),j(aa,o,d),c(o,Xr,d),c(o,Wa,d),e(Wa,am),c(o,Rr,d),j(ta,o,d),c(o,qr,d),c(o,L,d),e(L,tm),e(L,ml),e(ml,sm),e(L,lm),e(L,ul),e(ul,rm),e(L,nm),e(L,fl),e(fl,dm),e(L,im),e(L,Ml),e(Ml,pm),e(L,cm),c(o,Wr,d),j(sa,o,d),c(o,Gr,d),j(He,o,d),c(o,Vr,d),c(o,$e,d),e($e,Ke),e(Ke,hl),j(la,hl,null),e($e,mm),e($e,vl),e(vl,um),c(o,Dr,d),c(o,Me,d),e(Me,fm),e(Me,El),e(El,Mm),e(Me,hm),e(Me,yl),e(yl,vm),e(Me,Em),c(o,Lr,d),j(ra,o,d),c(o,zr,d),c(o,W,d),e(W,ym),e(W,bl),e(bl,bm),e(W,jm),e(W,jl),e(jl,_m),e(W,Tm),e(W,_l),e(_l,wm),e(W,gm),e(W,Tl),e(Tl,Um),e(W,Cm),e(W,wl),e(wl,$m),e(W,Jm),c(o,Fr,d),j(na,o,d),c(o,Pr,d),j(eo,o,d),c(o,Sr,d),c(o,Je,d),e(Je,oo),e(oo,gl),j(da,gl,null),e(Je,xm),e(Je,Ul),e(Ul,Nm),c(o,Qr,d),c(o,he,d),e(he,Im),e(he,Cl),e(Cl,Am),e(he,Zm),e(he,$l),e($l,Bm),e(he,Om),c(o,Yr,d),j(ia,o,d),c(o,Hr,d),c(o,ao,d),e(ao,km),e(ao,Jl),e(Jl,Xm),e(ao,Rm),c(o,Kr,d),c(o,xe,d),e(xe,to),e(to,xl),j(pa,xl,null),e(xe,qm),e(xe,Nl),e(Nl,Wm),c(o,en,d),c(o,Ga,d),e(Ga,Gm),c(o,on,d),c(o,ve,d),e(ve,ca),e(ca,Vm),e(ca,Il),e(Il,Dm),e(ca,Lm),e(ve,zm),e(ve,Va),e(Va,Fm),e(Va,Al),e(Al,Pm),e(ve,Sm),e(ve,Da),e(Da,Qm),e(Da,Zl),e(Zl,Ym),c(o,an,d),c(o,so,d),e(so,Hm),e(so,ma),e(ma,Km),e(so,eu),tn=!0},p(o,[d]){const ua={};d&2&&(ua.$$scope={dirty:d,ctx:o}),P.$set(ua);const Bl={};d&2&&(Bl.$$scope={dirty:d,ctx:o}),Le.$set(Bl);const Ol={};d&2&&(Ol.$$scope={dirty:d,ctx:o}),ze.$set(Ol);const kl={};d&2&&(kl.$$scope={dirty:d,ctx:o}),Se.$set(kl);const fa={};d&2&&(fa.$$scope={dirty:d,ctx:o}),Ye.$set(fa);const Xl={};d&2&&(Xl.$$scope={dirty:d,ctx:o}),He.$set(Xl);const Ma={};d&2&&(Ma.$$scope={dirty:d,ctx:o}),eo.$set(Ma)},i(o){tn||(_(h.$$.fragment,o),_(P.$$.fragment,o),_(_o.$$.fragment,o),_(To.$$.fragment,o),_(wo.$$.fragment,o),_(go.$$.fragment,o),_(Uo.$$.fragment,o),_(Jo.$$.fragment,o),_(xo.$$.fragment,o),_(Io.$$.fragment,o),_(Ao.$$.fragment,o),_(Zo.$$.fragment,o),_(Bo.$$.fragment,o),_(Oo.$$.fragment,o),_(ko.$$.fragment,o),_(So.$$.fragment,o),_(Qo.$$.fragment,o),_(Yo.$$.fragment,o),_(Le.$$.fragment,o),_(ze.$$.fragment,o),_(Ho.$$.fragment,o),_(Ko.$$.fragment,o),_(Se.$$.fragment,o),_(ea.$$.fragment,o),_(Ye.$$.fragment,o),_(oa.$$.fragment,o),_(aa.$$.fragment,o),_(ta.$$.fragment,o),_(sa.$$.fragment,o),_(He.$$.fragment,o),_(la.$$.fragment,o),_(ra.$$.fragment,o),_(na.$$.fragment,o),_(eo.$$.fragment,o),_(da.$$.fragment,o),_(ia.$$.fragment,o),_(pa.$$.fragment,o),tn=!0)},o(o){T(h.$$.fragment,o),T(P.$$.fragment,o),T(_o.$$.fragment,o),T(To.$$.fragment,o),T(wo.$$.fragment,o),T(go.$$.fragment,o),T(Uo.$$.fragment,o),T(Jo.$$.fragment,o),T(xo.$$.fragment,o),T(Io.$$.fragment,o),T(Ao.$$.fragment,o),T(Zo.$$.fragment,o),T(Bo.$$.fragment,o),T(Oo.$$.fragment,o),T(ko.$$.fragment,o),T(So.$$.fragment,o),T(Qo.$$.fragment,o),T(Yo.$$.fragment,o),T(Le.$$.fragment,o),T(ze.$$.fragment,o),T(Ho.$$.fragment,o),T(Ko.$$.fragment,o),T(Se.$$.fragment,o),T(ea.$$.fragment,o),T(Ye.$$.fragment,o),T(oa.$$.fragment,o),T(aa.$$.fragment,o),T(ta.$$.fragment,o),T(sa.$$.fragment,o),T(He.$$.fragment,o),T(la.$$.fragment,o),T(ra.$$.fragment,o),T(na.$$.fragment,o),T(eo.$$.fragment,o),T(da.$$.fragment,o),T(ia.$$.fragment,o),T(pa.$$.fragment,o),tn=!1},d(o){a(f),o&&a(x),o&&a(M),w(h),o&&a(C),o&&a(Z),o&&a(V),w(P,o),o&&a(le),o&&a(S),o&&a(be),o&&a(A),o&&a(re),o&&a(Q),o&&a(Ne),o&&a(ne),o&&a(Ie),o&&a(m),o&&a(Rl),o&&a(Ca),o&&a(ql),o&&a(ke),o&&a(Wl),o&&a(we),w(_o),o&&a(Gl),o&&a($a),o&&a(Vl),w(To,o),o&&a(Dl),o&&a(Re),o&&a(Ll),w(wo,o),o&&a(zl),o&&a(Ja),o&&a(Fl),w(go,o),o&&a(Pl),o&&a(xa),o&&a(Sl),w(Uo,o),o&&a(Ql),o&&a(de),o&&a(Yl),o&&a(H),o&&a(Hl),w(Jo,o),o&&a(Kl),o&&a(qe),o&&a(er),w(xo,o),o&&a(or),o&&a(We),o&&a(ar),w(Io,o),o&&a(tr),o&&a(Na),o&&a(sr),w(Ao,o),o&&a(lr),o&&a(ie),o&&a(rr),w(Zo,o),o&&a(nr),w(Bo,o),o&&a(dr),o&&a(pe),o&&a(ir),w(Oo,o),o&&a(pr),o&&a(ge),w(ko),o&&a(cr),o&&a(ce),o&&a(mr),o&&a(Ve),o&&a(ur),o&&a(De),o&&a(fr),w(So,o),o&&a(Mr),o&&a(me),o&&a(hr),w(Qo,o),o&&a(vr),o&&a(Ia),o&&a(Er),w(Yo,o),o&&a(yr),o&&a(K),o&&a(br),w(Le,o),o&&a(jr),w(ze,o),o&&a(_r),o&&a(Ue),w(Ho),o&&a(Tr),o&&a(Aa),o&&a(wr),o&&a(ue),o&&a(gr),o&&a(Za),o&&a(Ur),o&&a(Ce),w(Ko),o&&a(Cr),o&&a(Ba),o&&a($r),o&&a(fe),o&&a(Jr),w(Se,o),o&&a(xr),o&&a(Qe),o&&a(Nr),w(ea,o),o&&a(Ir),o&&a(D),o&&a(Ar),w(Ye,o),o&&a(Zr),o&&a(Ra),o&&a(Br),w(oa,o),o&&a(Or),o&&a(qa),o&&a(kr),w(aa,o),o&&a(Xr),o&&a(Wa),o&&a(Rr),w(ta,o),o&&a(qr),o&&a(L),o&&a(Wr),w(sa,o),o&&a(Gr),w(He,o),o&&a(Vr),o&&a($e),w(la),o&&a(Dr),o&&a(Me),o&&a(Lr),w(ra,o),o&&a(zr),o&&a(W),o&&a(Fr),w(na,o),o&&a(Pr),w(eo,o),o&&a(Sr),o&&a(Je),w(da),o&&a(Qr),o&&a(he),o&&a(Yr),w(ia,o),o&&a(Hr),o&&a(ao),o&&a(Kr),o&&a(xe),w(pa),o&&a(en),o&&a(Ga),o&&a(on),o&&a(ve),o&&a(an),o&&a(so)}}}const Xh={local:"exportando-modelos-para-onnx",sections:[{local:"exportando-um-modelo-para-onnx",title:"Exportando um modelo para ONNX"},{local:"selecionando-features-para-diferentes-tarefas-do-modelo",title:"Selecionando features para diferentes tarefas do modelo"},{local:"exportando-um-modelo-para-uma-arquitetura-sem-suporte",sections:[{local:"implementando-uma-configurao-onnx-personalizada",title:"Implementando uma configura\xE7\xE3o ONNX personalizada"},{local:"exportando-um-modelo",title:"Exportando um modelo"},{local:"validando-a-sada-dos-modelos",title:"Validando a sa\xEDda dos modelos"}],title:"Exportando um modelo para uma arquitetura sem suporte"},{local:"contribuindo-com-uma-nova-configurao-para-transformers",title:"Contribuindo com uma nova configura\xE7\xE3o para \u{1F917} Transformers"}],title:"Exportando modelos para ONNX "};function Rh(q){return Jh(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Dh extends gh{constructor(f){super();Uh(this,f,Rh,kh,Ch,{})}}export{Dh as default,Xh as metadata};
