import{s as ul,n as rl,o as cl}from"../chunks/scheduler.23542ac5.js";import{S as Jl,i as $l,e as a,s,c as o,h as wl,a as p,d as t,b as i,f as Ml,g as U,j as c,k as tl,l as Ql,m as n,n as f,t as M,o as T,p as u}from"../chunks/index.9b1f405b.js";import{C as hl,H as _,E as Cl}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.1d640393.js";import{C as Tl}from"../chunks/CodeBlock.e0f68650.js";function gl(nl){let m,A,k,N,J,v,$,S,w,sl="Diffusers는 Stable Diffusion 추론을 위해 PyTorch <code>mps</code>를 사용해 Apple 실리콘과 호환됩니다. 다음은 Stable Diffusion이 있는 M1 또는 M2 컴퓨터를 사용하기 위해 따라야 하는 단계입니다.",F,Q,x,h,il='<li>Apple silicon (M1/M2) 하드웨어의 Mac 컴퓨터.</li> <li>macOS 12.6 또는 이후 (13.0 또는 이후 추천).</li> <li>Python arm64 버전</li> <li>PyTorch 2.0(추천) 또는 1.13(<code>mps</code>를 지원하는 최소 버전). Y<a href="https://pytorch.org/get-started/locally/%EC%9D%98" rel="nofollow">https://pytorch.org/get-started/locally/의</a> 지침에 따라 <code>pip</code> 또는 <code>conda</code>로 설치할 수 있습니다.</li>',D,C,G,g,al="아래 코도는 익숙한 <code>to()</code> 인터페이스를 사용하여 <code>mps</code> 백엔드로 Stable Diffusion 파이프라인을 M1 또는 M2 장치로 이동하는 방법을 보여줍니다.",Z,r,pl="<p><strong>PyTorch 1.13을 사용 중일 때</strong> 추가 일회성 전달을 사용하여 파이프라인을 “프라이밍”하는 것을 추천합니다. 이것은 발견한 이상한 문제에 대한 임시 해결 방법입니다. 첫 번째 추론 전달은 후속 전달와 약간 다른 결과를 생성합니다. 이 전달은 한 번만 수행하면 되며 추론 단계를 한 번만 사용하고 결과를 폐기해도 됩니다.</p>",P,j,ml="이전 팁에서 설명한 것들을 포함한 여러 문제를 해결하므로 PyTorch 2 이상을 사용하는 것이 좋습니다.",W,y,z,d,H,I,ol="M1/M2 성능은 메모리 압력에 매우 민감합니다. 시스템은 필요한 경우 자동으로 스왑되지만 스왑할 때 성능이 크게 저하됩니다.",L,O,Ul="특히 컴퓨터의 시스템 RAM이 64GB 미만이거나 512 × 512픽셀보다 큰 비표준 해상도에서 이미지를 생성하는 경우, 추론 중에 메모리 압력을 줄이고 스와핑을 방지하기 위해 <em>어텐션 슬라이싱</em>을 사용하는 것이 좋습니다. 어텐션 슬라이싱은 비용이 많이 드는 어텐션 작업을 한 번에 모두 수행하는 대신 여러 단계로 수행합니다. 일반적으로 범용 메모리가 없는 컴퓨터에서 ~20%의 성능 영향을 미치지만 64GB 이상이 아닌 경우 대부분의 Apple Silicon 컴퓨터에서 <em>더 나은 성능</em>이 관찰되었습니다.",X,E,q,R,Y,V,fl='<li>여러 프롬프트를 배치로 생성하는 것은 <a href="https://github.com/huggingface/diffusers/issues/363" rel="nofollow">충돌이 발생하거나 안정적으로 작동하지 않습니다</a>. 우리는 이것이 <a href="https://github.com/pytorch/pytorch/issues/84039" rel="nofollow">PyTorch의 <code>mps</code> 백엔드</a>와 관련이 있다고 생각합니다. 이 문제는 해결되고 있지만 지금은 배치 대신 반복 방법을 사용하는 것이 좋습니다.</li>',K,b,ll,B,el;return J=new hl({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),$=new _({props:{title:"Apple Silicon (M1/M2)에서 Stable Diffusion을 사용하는 방법",local:"apple-silicon-m1m2에서-stable-diffusion을-사용하는-방법",headingTag:"h1"}}),Q=new _({props:{title:"요구 사항",local:"요구-사항",headingTag:"h2"}}),C=new _({props:{title:"추론 파이프라인",local:"추론-파이프라인",headingTag:"h2"}}),y=new Tl({props:{code:"JTIzJTIwJTYwaGYlMjBhdXRoJTIwbG9naW4lNjAlRUMlOTclOTAlMjAlRUIlQTElOUMlRUElQjclQjglRUMlOUQlQjglRUIlOTAlOTglRUMlOTYlQjQlMjAlRUMlOUUlODglRUMlOUQlOEMlRUMlOUQlODQlMjAlRUQlOTklOTUlRUMlOUQlQjglMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEFwaXBlJTIwJTNEJTIwRGlmZnVzaW9uUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUyMnN0YWJsZS1kaWZmdXNpb24tdjEtNSUyRnN0YWJsZS1kaWZmdXNpb24tdjEtNSUyMiklMEFwaXBlJTIwJTNEJTIwcGlwZS50byglMjJtcHMlMjIpJTBBJTBBJTIzJTIwJUVDJUJCJUI0JUVEJTkzJUE4JUVEJTg0JUIwJUVBJUIwJTgwJTIwNjRHQiUyMCVFQyU5RCVCNCVFRCU5NSU5OCVFQyU5RCU5OCUyMFJBTSUyMCVFQiU5RSVBOCVFQyU5RCVCQyUyMCVFQiU5NSU4QyUyMCVFQyVCNiU5NCVFQyVCMiU5QyUwQXBpcGUuZW5hYmxlX2F0dGVudGlvbl9zbGljaW5nKCklMEElMEFwcm9tcHQlMjAlM0QlMjAlMjJhJTIwcGhvdG8lMjBvZiUyMGFuJTIwYXN0cm9uYXV0JTIwcmlkaW5nJTIwYSUyMGhvcnNlJTIwb24lMjBtYXJzJTIyJTBBJTBBJTIzJTIwJUVDJUIyJTk4JUVDJTlEJThDJTIwJTIyJUVDJTlCJThDJUVCJUIwJThEJUVDJTk3JTg1JTIyJTIwJUVDJUEwJTg0JUVCJThCJUFDJTIwKCVFQyU5QyU4NCUyMCVFQyU4NCVBNCVFQiVBQSU4NSVFQyU5RCU4NCUyMCVFQiVCMyVCNCVFQyU4NCVCOCVFQyU5QSU5NCklMEFfJTIwJTNEJTIwcGlwZShwcm9tcHQlMkMlMjBudW1faW5mZXJlbmNlX3N0ZXBzJTNEMSklMEElMEElMjMlMjAlRUElQjIlQjAlRUElQjMlQkMlRUIlOEElOTQlMjAlRUMlOUIlOEMlRUIlQjAlOEQlRUMlOTclODUlMjAlRUMlQTAlODQlRUIlOEIlQUMlMjAlRUQlOUIlODQlRUMlOUQlOTglMjBDUFUlMjAlRUMlOUUlQTUlRUMlQjklOTglRUMlOUQlOTglMjAlRUElQjIlQjAlRUElQjMlQkMlRUMlOTklODAlMjAlRUMlOUQlQkMlRUMlQjklOTglRUQlOTUlQTklRUIlOEIlODglRUIlOEIlQTQuJTBBaW1hZ2UlMjAlM0QlMjBwaXBlKHByb21wdCkuaW1hZ2VzJTVCMCU1RA==",highlighted:`<span class="hljs-comment"># \`hf auth login\`에 로그인되어 있음을 확인</span>
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;stable-diffusion-v1-5/stable-diffusion-v1-5&quot;</span>)
pipe = pipe.to(<span class="hljs-string">&quot;mps&quot;</span>)

<span class="hljs-comment"># 컴퓨터가 64GB 이하의 RAM 램일 때 추천</span>
pipe.enable_attention_slicing()

prompt = <span class="hljs-string">&quot;a photo of an astronaut riding a horse on mars&quot;</span>

<span class="hljs-comment"># 처음 &quot;워밍업&quot; 전달 (위 설명을 보세요)</span>
_ = pipe(prompt, num_inference_steps=<span class="hljs-number">1</span>)

<span class="hljs-comment"># 결과는 워밍업 전달 후의 CPU 장치의 결과와 일치합니다.</span>
image = pipe(prompt).images[<span class="hljs-number">0</span>]`,wrap:!1}}),d=new _({props:{title:"성능 추천",local:"성능-추천",headingTag:"h2"}}),E=new Tl({props:{code:"cGlwZWxpbmUuZW5hYmxlX2F0dGVudGlvbl9zbGljaW5nKCk=",highlighted:"pipeline.enable_attention_slicing()",wrap:!1}}),R=new _({props:{title:"Known Issues",local:"known-issues",headingTag:"h2"}}),b=new Cl({props:{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/ko/optimization/mps.md"}}),{c(){m=a("meta"),A=s(),k=a("p"),N=s(),o(J.$$.fragment),v=s(),o($.$$.fragment),S=s(),w=a("p"),w.innerHTML=sl,F=s(),o(Q.$$.fragment),x=s(),h=a("ul"),h.innerHTML=il,D=s(),o(C.$$.fragment),G=s(),g=a("p"),g.innerHTML=al,Z=s(),r=a("blockquote"),r.innerHTML=pl,P=s(),j=a("p"),j.textContent=ml,W=s(),o(y.$$.fragment),z=s(),o(d.$$.fragment),H=s(),I=a("p"),I.textContent=ol,L=s(),O=a("p"),O.innerHTML=Ul,X=s(),o(E.$$.fragment),q=s(),o(R.$$.fragment),Y=s(),V=a("ul"),V.innerHTML=fl,K=s(),o(b.$$.fragment),ll=s(),B=a("p"),this.h()},l(l){const e=wl("svelte-u9bgzb",document.head);m=p(e,"META",{name:!0,content:!0}),e.forEach(t),A=i(l),k=p(l,"P",{}),Ml(k).forEach(t),N=i(l),U(J.$$.fragment,l),v=i(l),U($.$$.fragment,l),S=i(l),w=p(l,"P",{"data-svelte-h":!0}),c(w)!=="svelte-1cmhw56"&&(w.innerHTML=sl),F=i(l),U(Q.$$.fragment,l),x=i(l),h=p(l,"UL",{"data-svelte-h":!0}),c(h)!=="svelte-xmgm9h"&&(h.innerHTML=il),D=i(l),U(C.$$.fragment,l),G=i(l),g=p(l,"P",{"data-svelte-h":!0}),c(g)!=="svelte-26dp8q"&&(g.innerHTML=al),Z=i(l),r=p(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),c(r)!=="svelte-18o442n"&&(r.innerHTML=pl),P=i(l),j=p(l,"P",{"data-svelte-h":!0}),c(j)!=="svelte-d7ffo5"&&(j.textContent=ml),W=i(l),U(y.$$.fragment,l),z=i(l),U(d.$$.fragment,l),H=i(l),I=p(l,"P",{"data-svelte-h":!0}),c(I)!=="svelte-1rzz618"&&(I.textContent=ol),L=i(l),O=p(l,"P",{"data-svelte-h":!0}),c(O)!=="svelte-1bz9ahf"&&(O.innerHTML=Ul),X=i(l),U(E.$$.fragment,l),q=i(l),U(R.$$.fragment,l),Y=i(l),V=p(l,"UL",{"data-svelte-h":!0}),c(V)!=="svelte-1uyieu0"&&(V.innerHTML=fl),K=i(l),U(b.$$.fragment,l),ll=i(l),B=p(l,"P",{}),Ml(B).forEach(t),this.h()},h(){tl(m,"name","hf:doc:metadata"),tl(m,"content",jl),tl(r,"class","warning")},m(l,e){Ql(document.head,m),n(l,A,e),n(l,k,e),n(l,N,e),f(J,l,e),n(l,v,e),f($,l,e),n(l,S,e),n(l,w,e),n(l,F,e),f(Q,l,e),n(l,x,e),n(l,h,e),n(l,D,e),f(C,l,e),n(l,G,e),n(l,g,e),n(l,Z,e),n(l,r,e),n(l,P,e),n(l,j,e),n(l,W,e),f(y,l,e),n(l,z,e),f(d,l,e),n(l,H,e),n(l,I,e),n(l,L,e),n(l,O,e),n(l,X,e),f(E,l,e),n(l,q,e),f(R,l,e),n(l,Y,e),n(l,V,e),n(l,K,e),f(b,l,e),n(l,ll,e),n(l,B,e),el=!0},p:rl,i(l){el||(M(J.$$.fragment,l),M($.$$.fragment,l),M(Q.$$.fragment,l),M(C.$$.fragment,l),M(y.$$.fragment,l),M(d.$$.fragment,l),M(E.$$.fragment,l),M(R.$$.fragment,l),M(b.$$.fragment,l),el=!0)},o(l){T(J.$$.fragment,l),T($.$$.fragment,l),T(Q.$$.fragment,l),T(C.$$.fragment,l),T(y.$$.fragment,l),T(d.$$.fragment,l),T(E.$$.fragment,l),T(R.$$.fragment,l),T(b.$$.fragment,l),el=!1},d(l){l&&(t(A),t(k),t(N),t(v),t(S),t(w),t(F),t(x),t(h),t(D),t(G),t(g),t(Z),t(r),t(P),t(j),t(W),t(z),t(H),t(I),t(L),t(O),t(X),t(q),t(Y),t(V),t(K),t(ll),t(B)),t(m),u(J,l),u($,l),u(Q,l),u(C,l),u(y,l),u(d,l),u(E,l),u(R,l),u(b,l)}}}const jl='{"title":"Apple Silicon (M1/M2)에서 Stable Diffusion을 사용하는 방법","local":"apple-silicon-m1m2에서-stable-diffusion을-사용하는-방법","sections":[{"title":"요구 사항","local":"요구-사항","sections":[],"depth":2},{"title":"추론 파이프라인","local":"추론-파이프라인","sections":[],"depth":2},{"title":"성능 추천","local":"성능-추천","sections":[],"depth":2},{"title":"Known Issues","local":"known-issues","sections":[],"depth":2}],"depth":1}';function yl(nl){return cl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Rl extends Jl{constructor(m){super(),$l(this,m,yl,gl,ul,{})}}export{Rl as component};
