import{S as ii,i as oi,s as ni,e as a,k as h,w as c,t as p,M as li,c as i,d as t,m as f,a as o,x as m,h as u,b as s,N as si,G as r,g as l,y as v,L as hi,q as d,o as w,B as g,v as fi}from"../chunks/vendor-hf-doc-builder.js";import{I as _}from"../chunks/IconCopyLink-hf-doc-builder.js";function pi(Dr){let $,lt,P,x,Se,F,Zt,Ne,er,st,ne,tr,ht,le,se,Jr,ft,he,rr,pt,y,I,Te,K,ar,Ce,ir,ut,fe,or,ct,E,M,He,Q,nr,xe,lr,mt,pe,sr,vt,ue,ce,hr,dt,b,z,Ie,V,fr,Me,pr,wt,me,ur,gt,ve,de,cr,_t,k,q,ze,X,mr,qe,vr,$t,we,We,dr,Pt,U,W,Be,Y,wr,Le,gr,yt,ge,Re,_r,Et,G,B,De,Z,$r,Je,Pr,bt,_e,yr,kt,A,L,Oe,ee,Er,je,br,Ut,$e,Fe,kr,Gt,S,R,Ke,te,Ur,Qe,Gr,At,Pe,Ve,Ar,St,N,D,Xe,re,Sr,Ye,Nr,Nt,ye,Ze,Tr,Tt,T,J,et,ae,Cr,tt,Hr,Ct,Ee,rt,xr,Ht,C,O,at,ie,Ir,it,Mr,xt,be,zr,It,ke,Ue,qr,Mt,H,j,ot,oe,Wr,nt,Br,zt,Ge,Lr,qt,Ae,Rr,Wt;return F=new _({}),K=new _({}),Q=new _({}),V=new _({}),X=new _({}),Y=new _({}),Z=new _({}),ee=new _({}),te=new _({}),re=new _({}),ae=new _({}),ie=new _({}),oe=new _({}),{c(){$=a("meta"),lt=h(),P=a("h1"),x=a("a"),Se=a("span"),c(F.$$.fragment),Zt=h(),Ne=a("span"),er=p("Performance and Scalability"),st=h(),ne=a("p"),tr=p("Training larger and larger transformer models and deploying them to production comes with a range of challenges. During training your model can require more GPU memory than is available or be very slow to train and when you deploy it for inference it can be overwhelmed with the throughput that is required in the production environment. This documentation is designed to help you navigate these challenges and find the best setting for your use-case. We split the guides into training and inference as they come with different challenges and solutions. Then within each of them we have separate guides for different kinds of hardware setting (e.g. single vs. multi-GPU for training or CPU vs. GPU for infrence)."),ht=h(),le=a("p"),se=a("img"),ft=h(),he=a("p"),rr=p("This document serves as an overview and entry point for the methods that could be useful for your scenario."),pt=h(),y=a("h2"),I=a("a"),Te=a("span"),c(K.$$.fragment),ar=h(),Ce=a("span"),ir=p("Training"),ut=h(),fe=a("p"),or=p("Training transformer models efficiently requires an accelerator such as a GPU or TPU. The most common case is where you only have a single GPU."),ct=h(),E=a("h3"),M=a("a"),He=a("span"),c(Q.$$.fragment),nr=h(),xe=a("span"),lr=p("Single GPU"),mt=h(),pe=a("p"),sr=p("Training large models on a single GPU can be challenging but there are a number of tools and methods that make it feasible. In this section methods such as mixed precision training, gradient accumulation and checkpointing, efficient optimizers, as well as strategies to determine the best batch size are discussed."),vt=h(),ue=a("p"),ce=a("a"),hr=p("Go to single GPU training section"),dt=h(),b=a("h3"),z=a("a"),Ie=a("span"),c(V.$$.fragment),fr=h(),Me=a("span"),pr=p("Multi-GPU"),wt=h(),me=a("p"),ur=p("In some cases training on a single GPU is still too slow or won\u2019t fit the large model. Moving to a mutli-GPU setup is the logical step, but training on multiple GPUs at once comes with new decisions: does each GPU have a full copy of the model or is the model itself also distributed? In this section we look at data, tensor, and pipeline parallism."),gt=h(),ve=a("p"),de=a("a"),cr=p("Go to multi-GPU training section"),_t=h(),k=a("h3"),q=a("a"),ze=a("span"),c(X.$$.fragment),mr=h(),qe=a("span"),vr=p("TPU"),$t=h(),we=a("p"),We=a("em"),dr=p("Coming soon"),Pt=h(),U=a("h3"),W=a("a"),Be=a("span"),c(Y.$$.fragment),wr=h(),Le=a("span"),gr=p("Specialized Hardware"),yt=h(),ge=a("p"),Re=a("em"),_r=p("Coming soon"),Et=h(),G=a("h2"),B=a("a"),De=a("span"),c(Z.$$.fragment),$r=h(),Je=a("span"),Pr=p("Inference"),bt=h(),_e=a("p"),yr=p("Efficient inference with large models in a production environment can be as challenging as training them. In the following sections we go through the steps to run inference on CPU and single/multi-GPU setups."),kt=h(),A=a("h3"),L=a("a"),Oe=a("span"),c(ee.$$.fragment),Er=h(),je=a("span"),br=p("CPU"),Ut=h(),$e=a("p"),Fe=a("em"),kr=p("Coming soon"),Gt=h(),S=a("h3"),R=a("a"),Ke=a("span"),c(te.$$.fragment),Ur=h(),Qe=a("span"),Gr=p("Single GPU"),At=h(),Pe=a("p"),Ve=a("em"),Ar=p("Coming soon"),St=h(),N=a("h3"),D=a("a"),Xe=a("span"),c(re.$$.fragment),Sr=h(),Ye=a("span"),Nr=p("Multi-GPU"),Nt=h(),ye=a("p"),Ze=a("em"),Tr=p("Coming soon"),Tt=h(),T=a("h3"),J=a("a"),et=a("span"),c(ae.$$.fragment),Cr=h(),tt=a("span"),Hr=p("Specialized Hardware"),Ct=h(),Ee=a("p"),rt=a("em"),xr=p("Coming soon"),Ht=h(),C=a("h2"),O=a("a"),at=a("span"),c(ie.$$.fragment),Ir=h(),it=a("span"),Mr=p("Hardware"),xt=h(),be=a("p"),zr=p("In the hardware section you can find tips and tricks when building your own deep learning rig."),It=h(),ke=a("p"),Ue=a("a"),qr=p("Go to hardware section"),Mt=h(),H=a("h2"),j=a("a"),ot=a("span"),c(oe.$$.fragment),Wr=h(),nt=a("span"),Br=p("Contribute"),zt=h(),Ge=a("p"),Lr=p("This document is far from being complete and a lot more needs to be added, so if you have additions or corrections to make please don\u2019t hesitate to open a PR or if you aren\u2019t sure start an Issue and we can discuss the details there."),qt=h(),Ae=a("p"),Rr=p("When making contributions that A is better than B, please try to include a reproducible benchmark and/or a link to the source of that information (unless it comes directly from you)."),this.h()},l(e){const n=li('[data-svelte="svelte-1phssyn"]',document.head);$=i(n,"META",{name:!0,content:!0}),n.forEach(t),lt=f(e),P=i(e,"H1",{class:!0});var Bt=o(P);x=i(Bt,"A",{id:!0,class:!0,href:!0});var Or=o(x);Se=i(Or,"SPAN",{});var jr=o(Se);m(F.$$.fragment,jr),jr.forEach(t),Or.forEach(t),Zt=f(Bt),Ne=i(Bt,"SPAN",{});var Fr=o(Ne);er=u(Fr,"Performance and Scalability"),Fr.forEach(t),Bt.forEach(t),st=f(e),ne=i(e,"P",{});var Kr=o(ne);tr=u(Kr,"Training larger and larger transformer models and deploying them to production comes with a range of challenges. During training your model can require more GPU memory than is available or be very slow to train and when you deploy it for inference it can be overwhelmed with the throughput that is required in the production environment. This documentation is designed to help you navigate these challenges and find the best setting for your use-case. We split the guides into training and inference as they come with different challenges and solutions. Then within each of them we have separate guides for different kinds of hardware setting (e.g. single vs. multi-GPU for training or CPU vs. GPU for infrence)."),Kr.forEach(t),ht=f(e),le=i(e,"P",{});var Qr=o(le);se=i(Qr,"IMG",{src:!0,alt:!0}),Qr.forEach(t),ft=f(e),he=i(e,"P",{});var Vr=o(he);rr=u(Vr,"This document serves as an overview and entry point for the methods that could be useful for your scenario."),Vr.forEach(t),pt=f(e),y=i(e,"H2",{class:!0});var Lt=o(y);I=i(Lt,"A",{id:!0,class:!0,href:!0});var Xr=o(I);Te=i(Xr,"SPAN",{});var Yr=o(Te);m(K.$$.fragment,Yr),Yr.forEach(t),Xr.forEach(t),ar=f(Lt),Ce=i(Lt,"SPAN",{});var Zr=o(Ce);ir=u(Zr,"Training"),Zr.forEach(t),Lt.forEach(t),ut=f(e),fe=i(e,"P",{});var ea=o(fe);or=u(ea,"Training transformer models efficiently requires an accelerator such as a GPU or TPU. The most common case is where you only have a single GPU."),ea.forEach(t),ct=f(e),E=i(e,"H3",{class:!0});var Rt=o(E);M=i(Rt,"A",{id:!0,class:!0,href:!0});var ta=o(M);He=i(ta,"SPAN",{});var ra=o(He);m(Q.$$.fragment,ra),ra.forEach(t),ta.forEach(t),nr=f(Rt),xe=i(Rt,"SPAN",{});var aa=o(xe);lr=u(aa,"Single GPU"),aa.forEach(t),Rt.forEach(t),mt=f(e),pe=i(e,"P",{});var ia=o(pe);sr=u(ia,"Training large models on a single GPU can be challenging but there are a number of tools and methods that make it feasible. In this section methods such as mixed precision training, gradient accumulation and checkpointing, efficient optimizers, as well as strategies to determine the best batch size are discussed."),ia.forEach(t),vt=f(e),ue=i(e,"P",{});var oa=o(ue);ce=i(oa,"A",{href:!0});var na=o(ce);hr=u(na,"Go to single GPU training section"),na.forEach(t),oa.forEach(t),dt=f(e),b=i(e,"H3",{class:!0});var Dt=o(b);z=i(Dt,"A",{id:!0,class:!0,href:!0});var la=o(z);Ie=i(la,"SPAN",{});var sa=o(Ie);m(V.$$.fragment,sa),sa.forEach(t),la.forEach(t),fr=f(Dt),Me=i(Dt,"SPAN",{});var ha=o(Me);pr=u(ha,"Multi-GPU"),ha.forEach(t),Dt.forEach(t),wt=f(e),me=i(e,"P",{});var fa=o(me);ur=u(fa,"In some cases training on a single GPU is still too slow or won\u2019t fit the large model. Moving to a mutli-GPU setup is the logical step, but training on multiple GPUs at once comes with new decisions: does each GPU have a full copy of the model or is the model itself also distributed? In this section we look at data, tensor, and pipeline parallism."),fa.forEach(t),gt=f(e),ve=i(e,"P",{});var pa=o(ve);de=i(pa,"A",{href:!0});var ua=o(de);cr=u(ua,"Go to multi-GPU training section"),ua.forEach(t),pa.forEach(t),_t=f(e),k=i(e,"H3",{class:!0});var Jt=o(k);q=i(Jt,"A",{id:!0,class:!0,href:!0});var ca=o(q);ze=i(ca,"SPAN",{});var ma=o(ze);m(X.$$.fragment,ma),ma.forEach(t),ca.forEach(t),mr=f(Jt),qe=i(Jt,"SPAN",{});var va=o(qe);vr=u(va,"TPU"),va.forEach(t),Jt.forEach(t),$t=f(e),we=i(e,"P",{});var da=o(we);We=i(da,"EM",{});var wa=o(We);dr=u(wa,"Coming soon"),wa.forEach(t),da.forEach(t),Pt=f(e),U=i(e,"H3",{class:!0});var Ot=o(U);W=i(Ot,"A",{id:!0,class:!0,href:!0});var ga=o(W);Be=i(ga,"SPAN",{});var _a=o(Be);m(Y.$$.fragment,_a),_a.forEach(t),ga.forEach(t),wr=f(Ot),Le=i(Ot,"SPAN",{});var $a=o(Le);gr=u($a,"Specialized Hardware"),$a.forEach(t),Ot.forEach(t),yt=f(e),ge=i(e,"P",{});var Pa=o(ge);Re=i(Pa,"EM",{});var ya=o(Re);_r=u(ya,"Coming soon"),ya.forEach(t),Pa.forEach(t),Et=f(e),G=i(e,"H2",{class:!0});var jt=o(G);B=i(jt,"A",{id:!0,class:!0,href:!0});var Ea=o(B);De=i(Ea,"SPAN",{});var ba=o(De);m(Z.$$.fragment,ba),ba.forEach(t),Ea.forEach(t),$r=f(jt),Je=i(jt,"SPAN",{});var ka=o(Je);Pr=u(ka,"Inference"),ka.forEach(t),jt.forEach(t),bt=f(e),_e=i(e,"P",{});var Ua=o(_e);yr=u(Ua,"Efficient inference with large models in a production environment can be as challenging as training them. In the following sections we go through the steps to run inference on CPU and single/multi-GPU setups."),Ua.forEach(t),kt=f(e),A=i(e,"H3",{class:!0});var Ft=o(A);L=i(Ft,"A",{id:!0,class:!0,href:!0});var Ga=o(L);Oe=i(Ga,"SPAN",{});var Aa=o(Oe);m(ee.$$.fragment,Aa),Aa.forEach(t),Ga.forEach(t),Er=f(Ft),je=i(Ft,"SPAN",{});var Sa=o(je);br=u(Sa,"CPU"),Sa.forEach(t),Ft.forEach(t),Ut=f(e),$e=i(e,"P",{});var Na=o($e);Fe=i(Na,"EM",{});var Ta=o(Fe);kr=u(Ta,"Coming soon"),Ta.forEach(t),Na.forEach(t),Gt=f(e),S=i(e,"H3",{class:!0});var Kt=o(S);R=i(Kt,"A",{id:!0,class:!0,href:!0});var Ca=o(R);Ke=i(Ca,"SPAN",{});var Ha=o(Ke);m(te.$$.fragment,Ha),Ha.forEach(t),Ca.forEach(t),Ur=f(Kt),Qe=i(Kt,"SPAN",{});var xa=o(Qe);Gr=u(xa,"Single GPU"),xa.forEach(t),Kt.forEach(t),At=f(e),Pe=i(e,"P",{});var Ia=o(Pe);Ve=i(Ia,"EM",{});var Ma=o(Ve);Ar=u(Ma,"Coming soon"),Ma.forEach(t),Ia.forEach(t),St=f(e),N=i(e,"H3",{class:!0});var Qt=o(N);D=i(Qt,"A",{id:!0,class:!0,href:!0});var za=o(D);Xe=i(za,"SPAN",{});var qa=o(Xe);m(re.$$.fragment,qa),qa.forEach(t),za.forEach(t),Sr=f(Qt),Ye=i(Qt,"SPAN",{});var Wa=o(Ye);Nr=u(Wa,"Multi-GPU"),Wa.forEach(t),Qt.forEach(t),Nt=f(e),ye=i(e,"P",{});var Ba=o(ye);Ze=i(Ba,"EM",{});var La=o(Ze);Tr=u(La,"Coming soon"),La.forEach(t),Ba.forEach(t),Tt=f(e),T=i(e,"H3",{class:!0});var Vt=o(T);J=i(Vt,"A",{id:!0,class:!0,href:!0});var Ra=o(J);et=i(Ra,"SPAN",{});var Da=o(et);m(ae.$$.fragment,Da),Da.forEach(t),Ra.forEach(t),Cr=f(Vt),tt=i(Vt,"SPAN",{});var Ja=o(tt);Hr=u(Ja,"Specialized Hardware"),Ja.forEach(t),Vt.forEach(t),Ct=f(e),Ee=i(e,"P",{});var Oa=o(Ee);rt=i(Oa,"EM",{});var ja=o(rt);xr=u(ja,"Coming soon"),ja.forEach(t),Oa.forEach(t),Ht=f(e),C=i(e,"H2",{class:!0});var Xt=o(C);O=i(Xt,"A",{id:!0,class:!0,href:!0});var Fa=o(O);at=i(Fa,"SPAN",{});var Ka=o(at);m(ie.$$.fragment,Ka),Ka.forEach(t),Fa.forEach(t),Ir=f(Xt),it=i(Xt,"SPAN",{});var Qa=o(it);Mr=u(Qa,"Hardware"),Qa.forEach(t),Xt.forEach(t),xt=f(e),be=i(e,"P",{});var Va=o(be);zr=u(Va,"In the hardware section you can find tips and tricks when building your own deep learning rig."),Va.forEach(t),It=f(e),ke=i(e,"P",{});var Xa=o(ke);Ue=i(Xa,"A",{href:!0});var Ya=o(Ue);qr=u(Ya,"Go to hardware section"),Ya.forEach(t),Xa.forEach(t),Mt=f(e),H=i(e,"H2",{class:!0});var Yt=o(H);j=i(Yt,"A",{id:!0,class:!0,href:!0});var Za=o(j);ot=i(Za,"SPAN",{});var ei=o(ot);m(oe.$$.fragment,ei),ei.forEach(t),Za.forEach(t),Wr=f(Yt),nt=i(Yt,"SPAN",{});var ti=o(nt);Br=u(ti,"Contribute"),ti.forEach(t),Yt.forEach(t),zt=f(e),Ge=i(e,"P",{});var ri=o(Ge);Lr=u(ri,"This document is far from being complete and a lot more needs to be added, so if you have additions or corrections to make please don\u2019t hesitate to open a PR or if you aren\u2019t sure start an Issue and we can discuss the details there."),ri.forEach(t),qt=f(e),Ae=i(e,"P",{});var ai=o(Ae);Rr=u(ai,"When making contributions that A is better than B, please try to include a reproducible benchmark and/or a link to the source of that information (unless it comes directly from you)."),ai.forEach(t),this.h()},h(){s($,"name","hf:doc:metadata"),s($,"content",JSON.stringify(ui)),s(x,"id","performance-and-scalability"),s(x,"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"),s(x,"href","#performance-and-scalability"),s(P,"class","relative group"),si(se.src,Jr="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/perf_overview.png")||s(se,"src",Jr),s(se,"alt","perf_overview"),s(I,"id","training"),s(I,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),s(I,"href","#training"),s(y,"class","relative group"),s(M,"id","single-gpu"),s(M,"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"),s(M,"href","#single-gpu"),s(E,"class","relative group"),s(ce,"href","perf_train_gpu_one"),s(z,"id","multigpu"),s(z,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),s(z,"href","#multigpu"),s(b,"class","relative group"),s(de,"href","perf_train_gpu_many"),s(q,"id","tpu"),s(q,"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"),s(q,"href","#tpu"),s(k,"class","relative group"),s(W,"id","specialized-hardware"),s(W,"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"),s(W,"href","#specialized-hardware"),s(U,"class","relative group"),s(B,"id","inference"),s(B,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),s(B,"href","#inference"),s(G,"class","relative group"),s(L,"id","cpu"),s(L,"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"),s(L,"href","#cpu"),s(A,"class","relative group"),s(R,"id","single-gpu"),s(R,"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"),s(R,"href","#single-gpu"),s(S,"class","relative group"),s(D,"id","multigpu"),s(D,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),s(D,"href","#multigpu"),s(N,"class","relative group"),s(J,"id","specialized-hardware"),s(J,"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"),s(J,"href","#specialized-hardware"),s(T,"class","relative group"),s(O,"id","hardware"),s(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"),s(O,"href","#hardware"),s(C,"class","relative group"),s(Ue,"href","perf_hardware"),s(j,"id","contribute"),s(j,"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"),s(j,"href","#contribute"),s(H,"class","relative group")},m(e,n){r(document.head,$),l(e,lt,n),l(e,P,n),r(P,x),r(x,Se),v(F,Se,null),r(P,Zt),r(P,Ne),r(Ne,er),l(e,st,n),l(e,ne,n),r(ne,tr),l(e,ht,n),l(e,le,n),r(le,se),l(e,ft,n),l(e,he,n),r(he,rr),l(e,pt,n),l(e,y,n),r(y,I),r(I,Te),v(K,Te,null),r(y,ar),r(y,Ce),r(Ce,ir),l(e,ut,n),l(e,fe,n),r(fe,or),l(e,ct,n),l(e,E,n),r(E,M),r(M,He),v(Q,He,null),r(E,nr),r(E,xe),r(xe,lr),l(e,mt,n),l(e,pe,n),r(pe,sr),l(e,vt,n),l(e,ue,n),r(ue,ce),r(ce,hr),l(e,dt,n),l(e,b,n),r(b,z),r(z,Ie),v(V,Ie,null),r(b,fr),r(b,Me),r(Me,pr),l(e,wt,n),l(e,me,n),r(me,ur),l(e,gt,n),l(e,ve,n),r(ve,de),r(de,cr),l(e,_t,n),l(e,k,n),r(k,q),r(q,ze),v(X,ze,null),r(k,mr),r(k,qe),r(qe,vr),l(e,$t,n),l(e,we,n),r(we,We),r(We,dr),l(e,Pt,n),l(e,U,n),r(U,W),r(W,Be),v(Y,Be,null),r(U,wr),r(U,Le),r(Le,gr),l(e,yt,n),l(e,ge,n),r(ge,Re),r(Re,_r),l(e,Et,n),l(e,G,n),r(G,B),r(B,De),v(Z,De,null),r(G,$r),r(G,Je),r(Je,Pr),l(e,bt,n),l(e,_e,n),r(_e,yr),l(e,kt,n),l(e,A,n),r(A,L),r(L,Oe),v(ee,Oe,null),r(A,Er),r(A,je),r(je,br),l(e,Ut,n),l(e,$e,n),r($e,Fe),r(Fe,kr),l(e,Gt,n),l(e,S,n),r(S,R),r(R,Ke),v(te,Ke,null),r(S,Ur),r(S,Qe),r(Qe,Gr),l(e,At,n),l(e,Pe,n),r(Pe,Ve),r(Ve,Ar),l(e,St,n),l(e,N,n),r(N,D),r(D,Xe),v(re,Xe,null),r(N,Sr),r(N,Ye),r(Ye,Nr),l(e,Nt,n),l(e,ye,n),r(ye,Ze),r(Ze,Tr),l(e,Tt,n),l(e,T,n),r(T,J),r(J,et),v(ae,et,null),r(T,Cr),r(T,tt),r(tt,Hr),l(e,Ct,n),l(e,Ee,n),r(Ee,rt),r(rt,xr),l(e,Ht,n),l(e,C,n),r(C,O),r(O,at),v(ie,at,null),r(C,Ir),r(C,it),r(it,Mr),l(e,xt,n),l(e,be,n),r(be,zr),l(e,It,n),l(e,ke,n),r(ke,Ue),r(Ue,qr),l(e,Mt,n),l(e,H,n),r(H,j),r(j,ot),v(oe,ot,null),r(H,Wr),r(H,nt),r(nt,Br),l(e,zt,n),l(e,Ge,n),r(Ge,Lr),l(e,qt,n),l(e,Ae,n),r(Ae,Rr),Wt=!0},p:hi,i(e){Wt||(d(F.$$.fragment,e),d(K.$$.fragment,e),d(Q.$$.fragment,e),d(V.$$.fragment,e),d(X.$$.fragment,e),d(Y.$$.fragment,e),d(Z.$$.fragment,e),d(ee.$$.fragment,e),d(te.$$.fragment,e),d(re.$$.fragment,e),d(ae.$$.fragment,e),d(ie.$$.fragment,e),d(oe.$$.fragment,e),Wt=!0)},o(e){w(F.$$.fragment,e),w(K.$$.fragment,e),w(Q.$$.fragment,e),w(V.$$.fragment,e),w(X.$$.fragment,e),w(Y.$$.fragment,e),w(Z.$$.fragment,e),w(ee.$$.fragment,e),w(te.$$.fragment,e),w(re.$$.fragment,e),w(ae.$$.fragment,e),w(ie.$$.fragment,e),w(oe.$$.fragment,e),Wt=!1},d(e){t($),e&&t(lt),e&&t(P),g(F),e&&t(st),e&&t(ne),e&&t(ht),e&&t(le),e&&t(ft),e&&t(he),e&&t(pt),e&&t(y),g(K),e&&t(ut),e&&t(fe),e&&t(ct),e&&t(E),g(Q),e&&t(mt),e&&t(pe),e&&t(vt),e&&t(ue),e&&t(dt),e&&t(b),g(V),e&&t(wt),e&&t(me),e&&t(gt),e&&t(ve),e&&t(_t),e&&t(k),g(X),e&&t($t),e&&t(we),e&&t(Pt),e&&t(U),g(Y),e&&t(yt),e&&t(ge),e&&t(Et),e&&t(G),g(Z),e&&t(bt),e&&t(_e),e&&t(kt),e&&t(A),g(ee),e&&t(Ut),e&&t($e),e&&t(Gt),e&&t(S),g(te),e&&t(At),e&&t(Pe),e&&t(St),e&&t(N),g(re),e&&t(Nt),e&&t(ye),e&&t(Tt),e&&t(T),g(ae),e&&t(Ct),e&&t(Ee),e&&t(Ht),e&&t(C),g(ie),e&&t(xt),e&&t(be),e&&t(It),e&&t(ke),e&&t(Mt),e&&t(H),g(oe),e&&t(zt),e&&t(Ge),e&&t(qt),e&&t(Ae)}}}const ui={local:"performance-and-scalability",sections:[{local:"training",sections:[{local:"single-gpu",title:"Single GPU"},{local:"multigpu",title:"Multi-GPU"},{local:"tpu",title:"TPU"},{local:"specialized-hardware",title:"Specialized Hardware"}],title:"Training"},{local:"inference",sections:[{local:"cpu",title:"CPU"},{local:"single-gpu",title:"Single GPU"},{local:"multigpu",title:"Multi-GPU"},{local:"specialized-hardware",title:"Specialized Hardware"}],title:"Inference"},{local:"hardware",title:"Hardware"},{local:"contribute",title:"Contribute"}],title:"Performance and Scalability"};function ci(Dr){return fi(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class di extends ii{constructor($){super();oi(this,$,ci,pi,ni,{})}}export{di as default,ui as metadata};
