import{s as he,o as pe,n as ce}from"../chunks/scheduler.56730f09.js";import{S as fe,i as ue,g as n,s as h,u as G,m as Nt,A as me,h as o,f as e,c as p,j as s,v as O,y as u,n as Xt,k as i,o as l,a,w as R,d as D,t as K,x as Q}from"../chunks/index.ba464511.js";import{T as ve}from"../chunks/Tip.70442610.js";import{I as rt}from"../chunks/IconCopyLink.89bde88e.js";function de(ht){let f,j="PyTorch의 버전이 1.14.0 이상이라면, jit 모드는 jit.trace에서 dict 입력이 지원되므로, 모든 모델의 예측과 평가가 개선될 수 있습니다.",d,m,v="PyTorch의 버전이 1.14.0 미만이라면, 질의 응답 모델과 같이 forward 매개변수의 순서가 jit.trace의 튜플 입력 순서와 일치하는 모델에 득이 될 수 있습니다. 텍스트 분류 모델과 같이 forward 매개변수 순서가 jit.trace의 튜플 입력 순서와 다른 경우, jit.trace가 실패하며 예외가 발생합니다. 이때 예외상황을 사용자에게 알리기 위해 Logging이 사용됩니다.";return{c(){f=n("p"),f.textContent=j,d=h(),m=n("p"),m.textContent=v},l(c){f=o(c,"P",{"data-svelte-h":!0}),u(f)!=="svelte-16x55zk"&&(f.textContent=j),d=p(c),m=o(c,"P",{"data-svelte-h":!0}),u(m)!=="svelte-658865"&&(m.textContent=v)},m(c,_){a(c,f,_),a(c,d,_),a(c,m,_)},p:ce,d(c){c&&(e(f),e(d),e(m))}}}function _e(ht){let f,j,d,m,v,c,_,L,Lt,V,qt="CPU에서 효율적인 추론하기",pt,S,Jt="이 가이드는 CPU에서 대규모 모델을 효율적으로 추론하는 방법에 중점을 두고 있습니다.",ct,P,w,nt,k,St,W,Ut="더 빠른 추론을 위한 <code>BetterTransformer</code>",ft,A,zt='우리는 최근 CPU에서 텍스트, 이미지 및 오디오 모델의 빠른 추론을 위해 <code>BetterTransformer</code>를 통합했습니다. 이 통합에 대한 더 자세한 내용은 <a href="https://huggingface.co/docs/optimum/bettertransformer/overview" rel="nofollow">이 문서</a>를 참조하세요.',ut,$,g,ot,H,kt,Y,Bt="PyTorch JIT 모드 (TorchScript)",mt,M,Ft='TorchScript에 대한 친절한 소개는 <a href="https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html#tracing-modules" rel="nofollow">PyTorch TorchScript 튜토리얼</a>을 참조하세요.',vt,x,E,at,N,At,Z,Gt="JIT 모드와 함께하는 IPEX 그래프 최적화",dt,X,Ot='<a href="https://intel.github.io/intel-extension-for-pytorch/cpu/latest/tutorials/features/graph_optimization.html" rel="nofollow">IPEX 그래프 최적화</a>에 대한 자세한 정보를 확인하세요.',_t,T,C,it,q,Ht,tt,Rt="IPEX 설치:",Pt,J,Dt='IPEX 배포 주기는 PyTorch를 따라서 이루어집니다. 자세한 정보는 <a href="https://intel.github.io/intel-extension-for-pytorch/" rel="nofollow">IPEX 설치 방법</a>을 확인하세요.',$t,y,b,lt,U,Mt,et,Kt="JIT 모드 사용법",xt,I,Tt,z,Qt='<a href="https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering" rel="nofollow">Transformers 질의 응답</a>의 사용 사례 예시를 참조하세요.',yt,B,Vt=`<li><p>CPU에서 jit 모드를 사용한 추론:</p> <pre>python run_qa.py \\
--model_name_or_path csarron/bert-base-uncased-squad-v1 \\
--dataset_name squad \\
--do_eval \\
--max_seq_length 384 \\
--doc_stride 128 \\
--output_dir /tmp/ \\
--no_cuda \\
<b>--jit_mode_eval </b></pre></li> <li><p>CPU에서 IPEX와 함께 jit 모드를 사용한 추론:</p> <pre>python run_qa.py \\
--model_name_or_path csarron/bert-base-uncased-squad-v1 \\
--dataset_name squad \\
--do_eval \\
--max_seq_length 384 \\
--doc_stride 128 \\
--output_dir /tmp/ \\
--no_cuda \\
<b>--use_ipex \\</b>
<b>--jit_mode_eval</b></pre></li>`,wt,st,gt;return L=new rt({}),k=new rt({}),H=new rt({}),N=new rt({}),q=new rt({}),U=new rt({}),I=new ve({props:{warning:!0,$$slots:{default:[de]},$$scope:{ctx:ht}}}),{c(){f=n("meta"),j=h(),d=n("p"),m=h(),v=n("h1"),c=n("a"),_=n("span"),G(L.$$.fragment),Lt=h(),V=n("span"),V.textContent=qt,pt=h(),S=n("p"),S.textContent=Jt,ct=h(),P=n("h2"),w=n("a"),nt=n("span"),G(k.$$.fragment),St=h(),W=n("span"),W.innerHTML=Ut,ft=h(),A=n("p"),A.innerHTML=zt,ut=h(),$=n("h2"),g=n("a"),ot=n("span"),G(H.$$.fragment),kt=h(),Y=n("span"),Y.textContent=Bt,mt=Nt("\n\n\nTorchScript는 PyTorch 코드에서 직렬화와 최적화가 가능한 모델을 생성할때 쓰입니다. TorchScript로 만들어진 프로그램은 기존 Python 프로세스에서 저장한 뒤, 종속성이 없는 새로운 프로세스로 가져올 수 있습니다. PyTorch의 기본 설정인 `eager` 모드와 비교했을때, `jit` 모드는 연산자 결합과 같은 최적화 방법론을 통해 모델 추론에서 대부분 더 나은 성능을 제공합니다.\n"),M=n("p"),M.innerHTML=Ft,vt=h(),x=n("h3"),E=n("a"),at=n("span"),G(N.$$.fragment),At=h(),Z=n("span"),Z.textContent=Gt,dt=Nt(`


Intel® Extension for PyTorch(IPEX)는 Transformers 계열 모델의 jit 모드에서 추가적인 최적화를 제공합니다. jit 모드와 더불어 Intel® Extension for PyTorch(IPEX)를 활용하시길 강력히 권장드립니다. Transformers 모델에서 자주 사용되는 일부 연산자 패턴은 이미 jit 모드 연산자 결합(operator fusion)의 형태로 Intel® Extension for PyTorch(IPEX)에서 지원되고 있습니다. Multi-head-attention, Concat Linear, Linear+Add, Linear+Gelu, Add+LayerNorm 결합 패턴 등이 이용 가능하며 활용했을 때 성능이 우수합니다. 연산자 결합의 이점은 사용자에게 고스란히 전달됩니다. 분석에 따르면, 질의 응답, 텍스트 분류 및 토큰 분류와 같은 가장 인기 있는 NLP 태스크 중 약 70%가 이러한 결합 패턴을 사용하여 Float32 정밀도와 BFloat16 혼합 정밀도 모두에서 성능상의 이점을 얻을 수 있습니다.
`),X=n("p"),X.innerHTML=Ot,_t=h(),T=n("h4"),C=n("a"),it=n("span"),G(q.$$.fragment),Ht=h(),tt=n("span"),tt.textContent=Rt,Pt=h(),J=n("p"),J.innerHTML=Dt,$t=h(),y=n("h3"),b=n("a"),lt=n("span"),G(U.$$.fragment),Mt=h(),et=n("span"),et.textContent=Kt,xt=Nt(`


평가 또는 예측을 위해 Trainer에서 JIT 모드를 사용하려면 Trainer의 명령 인수에 \`jit_mode_eval\`을 추가해야 합니다.
`),G(I.$$.fragment),Tt=h(),z=n("p"),z.innerHTML=Qt,yt=h(),B=n("ul"),B.innerHTML=Vt,wt=h(),st=n("p"),this.h()},l(t){const r=me("svelte-1phssyn",document.head);f=o(r,"META",{name:!0,content:!0}),r.forEach(e),j=p(t),d=o(t,"P",{}),s(d).forEach(e),m=p(t),v=o(t,"H1",{class:!0});var F=s(v);c=o(F,"A",{id:!0,class:!0,href:!0});var Wt=s(c);_=o(Wt,"SPAN",{});var Yt=s(_);O(L.$$.fragment,Yt),Yt.forEach(e),Wt.forEach(e),Lt=p(F),V=o(F,"SPAN",{"data-svelte-h":!0}),u(V)!=="svelte-1920mao"&&(V.textContent=qt),F.forEach(e),pt=p(t),S=o(t,"P",{"data-svelte-h":!0}),u(S)!=="svelte-17589kz"&&(S.textContent=Jt),ct=p(t),P=o(t,"H2",{class:!0});var Et=s(P);w=o(Et,"A",{id:!0,class:!0,href:!0});var Zt=s(w);nt=o(Zt,"SPAN",{});var te=s(nt);O(k.$$.fragment,te),te.forEach(e),Zt.forEach(e),St=p(Et),W=o(Et,"SPAN",{"data-svelte-h":!0}),u(W)!=="svelte-1211y1n"&&(W.innerHTML=Ut),Et.forEach(e),ft=p(t),A=o(t,"P",{"data-svelte-h":!0}),u(A)!=="svelte-tutck2"&&(A.innerHTML=zt),ut=p(t),$=o(t,"H2",{class:!0});var Ct=s($);g=o(Ct,"A",{id:!0,class:!0,href:!0});var ee=s(g);ot=o(ee,"SPAN",{});var re=s(ot);O(H.$$.fragment,re),re.forEach(e),ee.forEach(e),kt=p(Ct),Y=o(Ct,"SPAN",{"data-svelte-h":!0}),u(Y)!=="svelte-1krtq7"&&(Y.textContent=Bt),Ct.forEach(e),mt=Xt(t,"\n\n\nTorchScript는 PyTorch 코드에서 직렬화와 최적화가 가능한 모델을 생성할때 쓰입니다. TorchScript로 만들어진 프로그램은 기존 Python 프로세스에서 저장한 뒤, 종속성이 없는 새로운 프로세스로 가져올 수 있습니다. PyTorch의 기본 설정인 `eager` 모드와 비교했을때, `jit` 모드는 연산자 결합과 같은 최적화 방법론을 통해 모델 추론에서 대부분 더 나은 성능을 제공합니다.\n"),M=o(t,"P",{"data-svelte-h":!0}),u(M)!=="svelte-pi9b65"&&(M.innerHTML=Ft),vt=p(t),x=o(t,"H3",{class:!0});var bt=s(x);E=o(bt,"A",{id:!0,class:!0,href:!0});var ne=s(E);at=o(ne,"SPAN",{});var oe=s(at);O(N.$$.fragment,oe),oe.forEach(e),ne.forEach(e),At=p(bt),Z=o(bt,"SPAN",{"data-svelte-h":!0}),u(Z)!=="svelte-1svyt0j"&&(Z.textContent=Gt),bt.forEach(e),dt=Xt(t,`


Intel® Extension for PyTorch(IPEX)는 Transformers 계열 모델의 jit 모드에서 추가적인 최적화를 제공합니다. jit 모드와 더불어 Intel® Extension for PyTorch(IPEX)를 활용하시길 강력히 권장드립니다. Transformers 모델에서 자주 사용되는 일부 연산자 패턴은 이미 jit 모드 연산자 결합(operator fusion)의 형태로 Intel® Extension for PyTorch(IPEX)에서 지원되고 있습니다. Multi-head-attention, Concat Linear, Linear+Add, Linear+Gelu, Add+LayerNorm 결합 패턴 등이 이용 가능하며 활용했을 때 성능이 우수합니다. 연산자 결합의 이점은 사용자에게 고스란히 전달됩니다. 분석에 따르면, 질의 응답, 텍스트 분류 및 토큰 분류와 같은 가장 인기 있는 NLP 태스크 중 약 70%가 이러한 결합 패턴을 사용하여 Float32 정밀도와 BFloat16 혼합 정밀도 모두에서 성능상의 이점을 얻을 수 있습니다.
`),X=o(t,"P",{"data-svelte-h":!0}),u(X)!=="svelte-1prhbg8"&&(X.innerHTML=Ot),_t=p(t),T=o(t,"H4",{class:!0});var It=s(T);C=o(It,"A",{id:!0,class:!0,href:!0});var ae=s(C);it=o(ae,"SPAN",{});var ie=s(it);O(q.$$.fragment,ie),ie.forEach(e),ae.forEach(e),Ht=p(It),tt=o(It,"SPAN",{"data-svelte-h":!0}),u(tt)!=="svelte-fb7ufp"&&(tt.textContent=Rt),It.forEach(e),Pt=p(t),J=o(t,"P",{"data-svelte-h":!0}),u(J)!=="svelte-11ohqvl"&&(J.innerHTML=Dt),$t=p(t),y=o(t,"H3",{class:!0});var jt=s(y);b=o(jt,"A",{id:!0,class:!0,href:!0});var le=s(b);lt=o(le,"SPAN",{});var se=s(lt);O(U.$$.fragment,se),se.forEach(e),le.forEach(e),Mt=p(jt),et=o(jt,"SPAN",{"data-svelte-h":!0}),u(et)!=="svelte-raqb9y"&&(et.textContent=Kt),jt.forEach(e),xt=Xt(t,`


평가 또는 예측을 위해 Trainer에서 JIT 모드를 사용하려면 Trainer의 명령 인수에 \`jit_mode_eval\`을 추가해야 합니다.
`),O(I.$$.fragment,t),Tt=p(t),z=o(t,"P",{"data-svelte-h":!0}),u(z)!=="svelte-1eo7s2"&&(z.innerHTML=Qt),yt=p(t),B=o(t,"UL",{"data-svelte-h":!0}),u(B)!=="svelte-aucptx"&&(B.innerHTML=Vt),wt=p(t),st=o(t,"P",{}),s(st).forEach(e),this.h()},h(){i(f,"name","hf:doc:metadata"),i(f,"content",JSON.stringify(Pe)),i(c,"id","efficient-inference-on-cpu"),i(c,"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"),i(c,"href","#efficient-inference-on-cpu"),i(v,"class","relative group"),i(w,"id","bettertransformer-for-faster-inference"),i(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"),i(w,"href","#bettertransformer-for-faster-inference"),i(P,"class","relative group"),i(g,"id","pytorch-jitmode-torchscript"),i(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"),i(g,"href","#pytorch-jitmode-torchscript"),i($,"class","relative group"),i(E,"id","ipex-graph-optimization-with-jitmode"),i(E,"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"),i(E,"href","#ipex-graph-optimization-with-jitmode"),i(x,"class","relative group"),i(C,"id","ipex-installation"),i(C,"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"),i(C,"href","#ipex-installation"),i(T,"class","relative group"),i(b,"id","usage-of-jitmode"),i(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"),i(b,"href","#usage-of-jitmode"),i(y,"class","relative group")},m(t,r){l(document.head,f),a(t,j,r),a(t,d,r),a(t,m,r),a(t,v,r),l(v,c),l(c,_),R(L,_,null),l(v,Lt),l(v,V),a(t,pt,r),a(t,S,r),a(t,ct,r),a(t,P,r),l(P,w),l(w,nt),R(k,nt,null),l(P,St),l(P,W),a(t,ft,r),a(t,A,r),a(t,ut,r),a(t,$,r),l($,g),l(g,ot),R(H,ot,null),l($,kt),l($,Y),a(t,mt,r),a(t,M,r),a(t,vt,r),a(t,x,r),l(x,E),l(E,at),R(N,at,null),l(x,At),l(x,Z),a(t,dt,r),a(t,X,r),a(t,_t,r),a(t,T,r),l(T,C),l(C,it),R(q,it,null),l(T,Ht),l(T,tt),a(t,Pt,r),a(t,J,r),a(t,$t,r),a(t,y,r),l(y,b),l(b,lt),R(U,lt,null),l(y,Mt),l(y,et),a(t,xt,r),R(I,t,r),a(t,Tt,r),a(t,z,r),a(t,yt,r),a(t,B,r),a(t,wt,r),a(t,st,r),gt=!0},p(t,[r]){const F={};r&2&&(F.$$scope={dirty:r,ctx:t}),I.$set(F)},i(t){gt||(D(L.$$.fragment,t),D(k.$$.fragment,t),D(H.$$.fragment,t),D(N.$$.fragment,t),D(q.$$.fragment,t),D(U.$$.fragment,t),D(I.$$.fragment,t),gt=!0)},o(t){K(L.$$.fragment,t),K(k.$$.fragment,t),K(H.$$.fragment,t),K(N.$$.fragment,t),K(q.$$.fragment,t),K(U.$$.fragment,t),K(I.$$.fragment,t),gt=!1},d(t){t&&(e(j),e(d),e(m),e(v),e(pt),e(S),e(ct),e(P),e(ft),e(A),e(ut),e($),e(mt),e(M),e(vt),e(x),e(dt),e(X),e(_t),e(T),e(Pt),e(J),e($t),e(y),e(xt),e(Tt),e(z),e(yt),e(B),e(wt),e(st)),e(f),Q(L),Q(k),Q(H),Q(N),Q(q),Q(U),Q(I,t)}}}const Pe={local:"efficient-inference-on-cpu",sections:[{local:"bettertransformer-for-faster-inference",title:"더 빠른 추론을 위한 `BetterTransformer` "},{local:"pytorch-jitmode-torchscript",sections:[{local:"ipex-graph-optimization-with-jitmode",sections:[{local:"ipex-installation",title:"IPEX 설치: "}],title:"JIT 모드와 함께하는 IPEX 그래프 최적화 "},{local:"usage-of-jitmode",title:"JIT 모드 사용법 "}],title:"PyTorch JIT 모드 (TorchScript) "}],title:"CPU에서 효율적인 추론하기 "};function $e(ht){return pe(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ge extends fe{constructor(f){super(),ue(this,f,$e,_e,he,{})}}export{ge as component};
