import{s as dt,o as Pt,n as gt}from"../chunks/scheduler.56730f09.js";import{S as xt,i as vt,g as o,s as r,r as _,A as Ct,h as s,f as n,c as l,j as _t,u as T,x as m,k as Tt,y as yt,a as i,v as d,d as P,t as g,w as x}from"../chunks/index.1f144517.js";import{T as bt}from"../chunks/Tip.41e845e5.js";import{H as J,E as wt}from"../chunks/EditOnGithub.854793f1.js";function Lt(A){let a,v="PyTorch의 버전이 1.14.0 이상이라면, jit 모드는 jit.trace에서 dict 입력이 지원되므로, 모든 모델의 예측과 평가가 개선될 수 있습니다.",c,f,$="PyTorch의 버전이 1.14.0 미만이라면, 질의 응답 모델과 같이 forward 매개변수의 순서가 jit.trace의 튜플 입력 순서와 일치하는 모델에 득이 될 수 있습니다. 텍스트 분류 모델과 같이 forward 매개변수 순서가 jit.trace의 튜플 입력 순서와 다른 경우, jit.trace가 실패하며 예외가 발생합니다. 이때 예외상황을 사용자에게 알리기 위해 Logging이 사용됩니다.";return{c(){a=o("p"),a.textContent=v,c=r(),f=o("p"),f.textContent=$},l(p){a=s(p,"P",{"data-svelte-h":!0}),m(a)!=="svelte-16x55zk"&&(a.textContent=v),c=l(p),f=s(p,"P",{"data-svelte-h":!0}),m(f)!=="svelte-658865"&&(f.textContent=$)},m(p,u){i(p,a,u),i(p,c,u),i(p,f,u)},p:gt,d(p){p&&(n(a),n(c),n(f))}}}function It(A){let a,v,c,f,$,p,u,lt="이 가이드는 CPU에서 대규모 모델을 효율적으로 추론하는 방법에 중점을 두고 있습니다.",B,C,F,y,at='우리는 최근 CPU에서 텍스트, 이미지 및 오디오 모델의 빠른 추론을 위해 <code>BetterTransformer</code>를 통합했습니다. 이 통합에 대한 더 자세한 내용은 <a href="https://huggingface.co/docs/optimum/bettertransformer/overview" rel="nofollow">이 문서</a>를 참조하세요.',G,b,N,w,ot="TorchScript는 PyTorch 코드에서 직렬화와 최적화가 가능한 모델을 생성할때 쓰입니다. TorchScript로 만들어진 프로그램은 기존 Python 프로세스에서 저장한 뒤, 종속성이 없는 새로운 프로세스로 가져올 수 있습니다. PyTorch의 기본 설정인 <code>eager</code> 모드와 비교했을때, <code>jit</code> 모드는 연산자 결합과 같은 최적화 방법론을 통해 모델 추론에서 대부분 더 나은 성능을 제공합니다.",O,L,st='TorchScript에 대한 친절한 소개는 <a href="https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html#tracing-modules" rel="nofollow">PyTorch TorchScript 튜토리얼</a>을 참조하세요.',R,I,D,j,pt="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 혼합 정밀도 모두에서 성능상의 이점을 얻을 수 있습니다.",K,E,ft='<a href="https://intel.github.io/intel-extension-for-pytorch/cpu/latest/tutorials/features/graph_optimization.html" rel="nofollow">IPEX 그래프 최적화</a>에 대한 자세한 정보를 확인하세요.',Q,M,V,H,mt='IPEX 배포 주기는 PyTorch를 따라서 이루어집니다. 자세한 정보는 <a href="https://intel.github.io/intel-extension-for-pytorch/" rel="nofollow">IPEX 설치 방법</a>을 확인하세요.',W,q,Y,X,ut="평가 또는 예측을 위해 Trainer에서 JIT 모드를 사용하려면 Trainer의 명령 인수에 <code>jit_mode_eval</code>을 추가해야 합니다.",Z,h,tt,S,ct='<a href="https://github.com/huggingface/transformers/tree/main/examples/pytorch/question-answering" rel="nofollow">Transformers 질의 응답</a>의 사용 사례 예시를 참조하세요.',et,z,$t=`<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>`,nt,U,it,k,rt;return $=new J({props:{title:"CPU에서 효율적인 추론하기",local:"efficient-inference-on-cpu",headingTag:"h1"}}),C=new J({props:{title:"더 빠른 추론을 위한 BetterTransformer",local:"bettertransformer-for-faster-inference",headingTag:"h2"}}),b=new J({props:{title:"PyTorch JIT 모드 (TorchScript)",local:"pytorch-jitmode-torchscript",headingTag:"h2"}}),I=new J({props:{title:"JIT 모드와 함께하는 IPEX 그래프 최적화",local:"ipex-graph-optimization-with-jitmode",headingTag:"h3"}}),M=new J({props:{title:"IPEX 설치:",local:"ipex-installation",headingTag:"h4"}}),q=new J({props:{title:"JIT 모드 사용법",local:"usage-of-jitmode",headingTag:"h3"}}),h=new bt({props:{warning:!0,$$slots:{default:[Lt]},$$scope:{ctx:A}}}),U=new wt({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/ko/perf_infer_cpu.md"}}),{c(){a=o("meta"),v=r(),c=o("p"),f=r(),_($.$$.fragment),p=r(),u=o("p"),u.textContent=lt,B=r(),_(C.$$.fragment),F=r(),y=o("p"),y.innerHTML=at,G=r(),_(b.$$.fragment),N=r(),w=o("p"),w.innerHTML=ot,O=r(),L=o("p"),L.innerHTML=st,R=r(),_(I.$$.fragment),D=r(),j=o("p"),j.textContent=pt,K=r(),E=o("p"),E.innerHTML=ft,Q=r(),_(M.$$.fragment),V=r(),H=o("p"),H.innerHTML=mt,W=r(),_(q.$$.fragment),Y=r(),X=o("p"),X.innerHTML=ut,Z=r(),_(h.$$.fragment),tt=r(),S=o("p"),S.innerHTML=ct,et=r(),z=o("ul"),z.innerHTML=$t,nt=r(),_(U.$$.fragment),it=r(),k=o("p"),this.h()},l(t){const e=Ct("svelte-u9bgzb",document.head);a=s(e,"META",{name:!0,content:!0}),e.forEach(n),v=l(t),c=s(t,"P",{}),_t(c).forEach(n),f=l(t),T($.$$.fragment,t),p=l(t),u=s(t,"P",{"data-svelte-h":!0}),m(u)!=="svelte-17589kz"&&(u.textContent=lt),B=l(t),T(C.$$.fragment,t),F=l(t),y=s(t,"P",{"data-svelte-h":!0}),m(y)!=="svelte-tutck2"&&(y.innerHTML=at),G=l(t),T(b.$$.fragment,t),N=l(t),w=s(t,"P",{"data-svelte-h":!0}),m(w)!=="svelte-1o0woyz"&&(w.innerHTML=ot),O=l(t),L=s(t,"P",{"data-svelte-h":!0}),m(L)!=="svelte-pi9b65"&&(L.innerHTML=st),R=l(t),T(I.$$.fragment,t),D=l(t),j=s(t,"P",{"data-svelte-h":!0}),m(j)!=="svelte-9s4z7g"&&(j.textContent=pt),K=l(t),E=s(t,"P",{"data-svelte-h":!0}),m(E)!=="svelte-1prhbg8"&&(E.innerHTML=ft),Q=l(t),T(M.$$.fragment,t),V=l(t),H=s(t,"P",{"data-svelte-h":!0}),m(H)!=="svelte-11ohqvl"&&(H.innerHTML=mt),W=l(t),T(q.$$.fragment,t),Y=l(t),X=s(t,"P",{"data-svelte-h":!0}),m(X)!=="svelte-8lud22"&&(X.innerHTML=ut),Z=l(t),T(h.$$.fragment,t),tt=l(t),S=s(t,"P",{"data-svelte-h":!0}),m(S)!=="svelte-1eo7s2"&&(S.innerHTML=ct),et=l(t),z=s(t,"UL",{"data-svelte-h":!0}),m(z)!=="svelte-aucptx"&&(z.innerHTML=$t),nt=l(t),T(U.$$.fragment,t),it=l(t),k=s(t,"P",{}),_t(k).forEach(n),this.h()},h(){Tt(a,"name","hf:doc:metadata"),Tt(a,"content",jt)},m(t,e){yt(document.head,a),i(t,v,e),i(t,c,e),i(t,f,e),d($,t,e),i(t,p,e),i(t,u,e),i(t,B,e),d(C,t,e),i(t,F,e),i(t,y,e),i(t,G,e),d(b,t,e),i(t,N,e),i(t,w,e),i(t,O,e),i(t,L,e),i(t,R,e),d(I,t,e),i(t,D,e),i(t,j,e),i(t,K,e),i(t,E,e),i(t,Q,e),d(M,t,e),i(t,V,e),i(t,H,e),i(t,W,e),d(q,t,e),i(t,Y,e),i(t,X,e),i(t,Z,e),d(h,t,e),i(t,tt,e),i(t,S,e),i(t,et,e),i(t,z,e),i(t,nt,e),d(U,t,e),i(t,it,e),i(t,k,e),rt=!0},p(t,[e]){const ht={};e&2&&(ht.$$scope={dirty:e,ctx:t}),h.$set(ht)},i(t){rt||(P($.$$.fragment,t),P(C.$$.fragment,t),P(b.$$.fragment,t),P(I.$$.fragment,t),P(M.$$.fragment,t),P(q.$$.fragment,t),P(h.$$.fragment,t),P(U.$$.fragment,t),rt=!0)},o(t){g($.$$.fragment,t),g(C.$$.fragment,t),g(b.$$.fragment,t),g(I.$$.fragment,t),g(M.$$.fragment,t),g(q.$$.fragment,t),g(h.$$.fragment,t),g(U.$$.fragment,t),rt=!1},d(t){t&&(n(v),n(c),n(f),n(p),n(u),n(B),n(F),n(y),n(G),n(N),n(w),n(O),n(L),n(R),n(D),n(j),n(K),n(E),n(Q),n(V),n(H),n(W),n(Y),n(X),n(Z),n(tt),n(S),n(et),n(z),n(nt),n(it),n(k)),n(a),x($,t),x(C,t),x(b,t),x(I,t),x(M,t),x(q,t),x(h,t),x(U,t)}}}const jt='{"title":"CPU에서 효율적인 추론하기","local":"efficient-inference-on-cpu","sections":[{"title":"더 빠른 추론을 위한 BetterTransformer","local":"bettertransformer-for-faster-inference","sections":[],"depth":2},{"title":"PyTorch JIT 모드 (TorchScript)","local":"pytorch-jitmode-torchscript","sections":[{"title":"JIT 모드와 함께하는 IPEX 그래프 최적화","local":"ipex-graph-optimization-with-jitmode","sections":[{"title":"IPEX 설치:","local":"ipex-installation","sections":[],"depth":4}],"depth":3},{"title":"JIT 모드 사용법","local":"usage-of-jitmode","sections":[],"depth":3}],"depth":2}],"depth":1}';function Et(A){return Pt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class St extends xt{constructor(a){super(),vt(this,a,Et,It,dt,{})}}export{St as component};
