import{s as nt,o as rt,n as at}from"../chunks/scheduler.bdbef820.js";import{S as it,i as st,g as o,s as i,r as L,A as ot,h as p,f as l,c as s,j as tt,u as S,x as y,k as et,y as pt,a as n,v as x,d as Z,t as J,w as j}from"../chunks/index.33f81d56.js";import{T as ct}from"../chunks/Tip.34194030.js";import{C as lt}from"../chunks/CodeBlock.362b34a4.js";import{H as mt,E as ft}from"../chunks/EditOnGithub.a9246e21.js";function Mt(H){let r,d="일부 Pytorch 연산들은 아직 MPS에서 지원되지 않아 오류가 발생할 수 있습니다. 이를 방지하려면 환경 변수 <code>PYTORCH_ENABLE_MPS_FALLBACK=1</code> 를 설정하여 CPU 커널을 대신 사용하도록 해야 합니다(이때 <code>UserWarning</code>이 여전히 표시될 수 있습니다).",f,h,c,m,M='다른 오류가 발생할 경우 <a href="https://github.com/pytorch/pytorch/issues" rel="nofollow">PyTorch</a> 리포지토리에 이슈를 등록해주세요. 현재 <a href="/docs/transformers/pr_22105/ko/main_classes/trainer#transformers.Trainer">Trainer</a>는 MPS 백엔드만 통합하고 있습니다.';return{c(){r=o("p"),r.innerHTML=d,f=i(),h=o("br"),c=i(),m=o("p"),m.innerHTML=M},l(a){r=p(a,"P",{"data-svelte-h":!0}),y(r)!=="svelte-p10qai"&&(r.innerHTML=d),f=s(a),h=p(a,"BR",{}),c=s(a),m=p(a,"P",{"data-svelte-h":!0}),y(m)!=="svelte-1e7u9dj"&&(m.innerHTML=M)},m(a,u){n(a,r,u),n(a,f,u),n(a,h,u),n(a,c,u),n(a,m,u)},p:at,d(a){a&&(l(r),l(f),l(h),l(c),l(m))}}}function ut(H){let r,d,f,h,c,m,M,a='이전에는 Mac에서 모델을 학습할 때 CPU만 사용할 수 있었습니다. 그러나 이제 PyTorch v1.12의 출시로 Apple의 실리콘 GPU를 사용하여 훨씬 더 빠른 성능으로 모델을 학습할 수 있게 되었습니다. 이는 Pytorch에서 Apple의 Metal Performance Shaders (MPS)를 백엔드로 통합하면서 가능해졌습니다. <a href="https://pytorch.org/docs/stable/notes/mps.html" rel="nofollow">MPS 백엔드</a>는 Pytorch 연산을 Metal 세이더로 구현하고 이 모듈들을 mps 장치에서 실행할 수 있도록 지원합니다.',u,_,X,T,B="<code>mps</code> 장치를 이용하면 다음과 같은 이점들을 얻을 수 있습니다:",E,U,I="<li>로컬에서 더 큰 네트워크나 배치 크기로 학습 가능</li> <li>GPU의 통합 메모리 아키텍처로 인해 메모리에 직접 접근할 수 있어 데이터 로딩 지연 감소</li> <li>클라우드 기반 GPU나 추가 GPU가 필요 없으므로 비용 절감 가능</li>",N,$,z="Pytorch가 설치되어 있는지 확인하고 시작하세요. MPS 가속은 macOS 12.3 이상에서 지원됩니다.",k,w,G,b,q='<a href="/docs/transformers/pr_22105/ko/main_classes/trainer#transformers.TrainingArguments">TrainingArguments</a>는 <code>mps</code> 장치가 사용 가능한 경우 이를 기본적으로 사용하므로 장치를 따로 설정할 필요가 없습니다. 예를 들어, MPS 백엔드를 자동으로 활성화하여 <a href="https://github.com/huggingface/transformers/blob/main/examples/pytorch/text-classification/run_glue.py" rel="nofollow">run_glue.py</a> 스크립트를 아무 수정 없이 실행할 수 있습니다.',Q,P,W,g,D='<code>gloco</code>와 <code>nccl</code>과 같은 <a href="https://pytorch.org/docs/stable/distributed.html#backends" rel="nofollow">분산 학습 백엔드</a>는 <code>mps</code> 장치에서 지원되지 않으므로, MPS 백엔드에서는 단일 GPU로만 학습이 가능합니다.',R,A,K='Mac에서 가속된 PyTorch 학습에 대한 더 자세한 내용은 <a href="https://pytorch.org/blog/introducing-accelerated-pytorch-training-on-mac/" rel="nofollow">Introducing Accelerated PyTorch Training on Mac</a> 블로그 게시물에서 확인할 수 있습니다.',F,C,V,v,Y;return c=new mt({props:{title:"Apple 실리콘에서 Pytorch 학습",local:"PyTorch training on Apple silicon",headingTag:"h1"}}),_=new ct({props:{warning:!0,$$slots:{default:[Mt]},$$scope:{ctx:H}}}),w=new lt({props:{code:"cGlwJTIwaW5zdGFsbCUyMHRvcmNoJTIwdG9yY2h2aXNpb24lMjB0b3JjaGF1ZGlv",highlighted:"pip install torch torchvision torchaudio",wrap:!1}}),P=new lt({props:{code:"ZXhwb3J0JTIwVEFTS19OQU1FJTNEbXJwYyUwQSUwQXB5dGhvbiUyMGV4YW1wbGVzJTJGcHl0b3JjaCUyRnRleHQtY2xhc3NpZmljYXRpb24lMkZydW5fZ2x1ZS5weSUyMCU1QyUwQSUyMCUyMC0tbW9kZWxfbmFtZV9vcl9wYXRoJTIwZ29vZ2xlLWJlcnQlMkZiZXJ0LWJhc2UtY2FzZWQlMjAlNUMlMEElMjAlMjAtLXRhc2tfbmFtZSUyMCUyNFRBU0tfTkFNRSUyMCU1QyUwQS0lMjAtLXVzZV9tcHNfZGV2aWNlJTIwJTVDJTBBJTIwJTIwLS1kb190cmFpbiUyMCU1QyUwQSUyMCUyMC0tZG9fZXZhbCUyMCU1QyUwQSUyMCUyMC0tbWF4X3NlcV9sZW5ndGglMjAxMjglMjAlNUMlMEElMjAlMjAtLXBlcl9kZXZpY2VfdHJhaW5fYmF0Y2hfc2l6ZSUyMDMyJTIwJTVDJTBBJTIwJTIwLS1sZWFybmluZ19yYXRlJTIwMmUtNSUyMCU1QyUwQSUyMCUyMC0tbnVtX3RyYWluX2Vwb2NocyUyMDMlMjAlNUMlMEElMjAlMjAtLW91dHB1dF9kaXIlMjAlMkZ0bXAlMkYlMjRUQVNLX05BTUUlMkYlMjAlNUMlMEElMjAlMjAtLW92ZXJ3cml0ZV9vdXRwdXRfZGly",highlighted:`export TASK_NAME=mrpc

python examples/pytorch/text-classification/run_glue.py \\
  --model_name_or_path google-bert/bert-base-cased \\
  --task_name $TASK_NAME \\
<span class="hljs-deletion">- --use_mps_device \\</span>
  --do_train \\
  --do_eval \\
  --max_seq_length 128 \\
  --per_device_train_batch_size 32 \\
  --learning_rate 2e-5 \\
  --num_train_epochs 3 \\
  --output_dir /tmp/$TASK_NAME/ \\
  --overwrite_output_dir`,wrap:!1}}),C=new ft({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/ko/perf_train_special.md"}}),{c(){r=o("meta"),d=i(),f=o("p"),h=i(),L(c.$$.fragment),m=i(),M=o("p"),M.innerHTML=a,u=i(),L(_.$$.fragment),X=i(),T=o("p"),T.innerHTML=B,E=i(),U=o("ul"),U.innerHTML=I,N=i(),$=o("p"),$.textContent=z,k=i(),L(w.$$.fragment),G=i(),b=o("p"),b.innerHTML=q,Q=i(),L(P.$$.fragment),W=i(),g=o("p"),g.innerHTML=D,R=i(),A=o("p"),A.innerHTML=K,F=i(),L(C.$$.fragment),V=i(),v=o("p"),this.h()},l(t){const e=ot("svelte-u9bgzb",document.head);r=p(e,"META",{name:!0,content:!0}),e.forEach(l),d=s(t),f=p(t,"P",{}),tt(f).forEach(l),h=s(t),S(c.$$.fragment,t),m=s(t),M=p(t,"P",{"data-svelte-h":!0}),y(M)!=="svelte-15xgyng"&&(M.innerHTML=a),u=s(t),S(_.$$.fragment,t),X=s(t),T=p(t,"P",{"data-svelte-h":!0}),y(T)!=="svelte-94e36i"&&(T.innerHTML=B),E=s(t),U=p(t,"UL",{"data-svelte-h":!0}),y(U)!=="svelte-12prpyz"&&(U.innerHTML=I),N=s(t),$=p(t,"P",{"data-svelte-h":!0}),y($)!=="svelte-1il699x"&&($.textContent=z),k=s(t),S(w.$$.fragment,t),G=s(t),b=p(t,"P",{"data-svelte-h":!0}),y(b)!=="svelte-uo4zze"&&(b.innerHTML=q),Q=s(t),S(P.$$.fragment,t),W=s(t),g=p(t,"P",{"data-svelte-h":!0}),y(g)!=="svelte-jq8gcz"&&(g.innerHTML=D),R=s(t),A=p(t,"P",{"data-svelte-h":!0}),y(A)!=="svelte-1g0gj3x"&&(A.innerHTML=K),F=s(t),S(C.$$.fragment,t),V=s(t),v=p(t,"P",{}),tt(v).forEach(l),this.h()},h(){et(r,"name","hf:doc:metadata"),et(r,"content",ht)},m(t,e){pt(document.head,r),n(t,d,e),n(t,f,e),n(t,h,e),x(c,t,e),n(t,m,e),n(t,M,e),n(t,u,e),x(_,t,e),n(t,X,e),n(t,T,e),n(t,E,e),n(t,U,e),n(t,N,e),n(t,$,e),n(t,k,e),x(w,t,e),n(t,G,e),n(t,b,e),n(t,Q,e),x(P,t,e),n(t,W,e),n(t,g,e),n(t,R,e),n(t,A,e),n(t,F,e),x(C,t,e),n(t,V,e),n(t,v,e),Y=!0},p(t,[e]){const O={};e&2&&(O.$$scope={dirty:e,ctx:t}),_.$set(O)},i(t){Y||(Z(c.$$.fragment,t),Z(_.$$.fragment,t),Z(w.$$.fragment,t),Z(P.$$.fragment,t),Z(C.$$.fragment,t),Y=!0)},o(t){J(c.$$.fragment,t),J(_.$$.fragment,t),J(w.$$.fragment,t),J(P.$$.fragment,t),J(C.$$.fragment,t),Y=!1},d(t){t&&(l(d),l(f),l(h),l(m),l(M),l(u),l(X),l(T),l(E),l(U),l(N),l($),l(k),l(G),l(b),l(Q),l(W),l(g),l(R),l(A),l(F),l(V),l(v)),l(r),j(c,t),j(_,t),j(w,t),j(P,t),j(C,t)}}}const ht='{"title":"Apple 실리콘에서 Pytorch 학습","local":"PyTorch training on Apple silicon","sections":[],"depth":1}';function yt(H){return rt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class wt extends it{constructor(r){super(),st(this,r,yt,ut,nt,{})}}export{wt as component};
