import{s as ol,o as Ml,n as fl}from"../chunks/scheduler.6e0d5ff7.js";import{S as rl,i as cl,g as m,s as i,r as M,E as ul,h as U,f as t,c as a,j as pl,u as f,x as J,k as ml,y as Tl,a as n,v as r,d as c,t as u,w as T}from"../chunks/index.d7c1b260.js";import{T as Jl}from"../chunks/Tip.c000e27b.js";import{C as Ul}from"../chunks/CodeBlock.09a08494.js";import{H as F}from"../chunks/Heading.30a009b0.js";function $l(D){let s,$="<strong>PyTorch 1.13을 사용 중일 때</strong> 추가 일회성 전달을 사용하여 파이프라인을 “프라이밍”하는 것을 추천합니다. 이것은 발견한 이상한 문제에 대한 임시 해결 방법입니다. 첫 번째 추론 전달은 후속 전달와 약간 다른 결과를 생성합니다. 이 전달은 한 번만 수행하면 되며 추론 단계를 한 번만 사용하고 결과를 폐기해도 됩니다.";return{c(){s=m("p"),s.innerHTML=$},l(p){s=U(p,"P",{"data-svelte-h":!0}),J(s)!=="svelte-1uj24v1"&&(s.innerHTML=$)},m(p,S){n(p,s,S)},p:fl,d(p){p&&t(s)}}}function Cl(D){let s,$,p,S,C,v,Q,Y="Diffusers는 Stable Diffusion 추론을 위해 PyTorch <code>mps</code>를 사용해 Apple 실리콘과 호환됩니다. 다음은 Stable Diffusion이 있는 M1 또는 M2 컴퓨터를 사용하기 위해 따라야 하는 단계입니다.",B,y,A,V,ll='<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>',x,w,G,h,el="아래 코도는 익숙한 <code>to()</code> 인터페이스를 사용하여 <code>mps</code> 백엔드로 Stable Diffusion 파이프라인을 M1 또는 M2 장치로 이동하는 방법을 보여줍니다.",P,o,k,g,tl="이전 팁에서 설명한 것들을 포함한 여러 문제를 해결하므로 PyTorch 2 이상을 사용하는 것이 좋습니다.",Z,d,H,j,W,b,nl="M1/M2 성능은 메모리 압력에 매우 민감합니다. 시스템은 필요한 경우 자동으로 스왑되지만 스왑할 때 성능이 크게 저하됩니다.",L,R,sl="특히 컴퓨터의 시스템 RAM이 64GB 미만이거나 512 × 512픽셀보다 큰 비표준 해상도에서 이미지를 생성하는 경우, 추론 중에 메모리 압력을 줄이고 스와핑을 방지하기 위해 <em>어텐션 슬라이싱</em>을 사용하는 것이 좋습니다. 어텐션 슬라이싱은 비용이 많이 드는 어텐션 작업을 한 번에 모두 수행하는 대신 여러 단계로 수행합니다. 일반적으로 범용 메모리가 없는 컴퓨터에서 ~20%의 성능 영향을 미치지만 64GB 이상이 아닌 경우 대부분의 Apple Silicon 컴퓨터에서 <em>더 나은 성능</em>이 관찰되었습니다.",N,E,z,O,X,I,il='<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,_,q;return C=new F({props:{title:"Apple Silicon (M1/M2)에서 Stable Diffusion을 사용하는 방법",local:"apple-silicon-m1m2에서-stable-diffusion을-사용하는-방법",headingTag:"h1"}}),y=new F({props:{title:"요구 사항",local:"요구-사항",headingTag:"h2"}}),w=new F({props:{title:"추론 파이프라인",local:"추론-파이프라인",headingTag:"h2"}}),o=new Jl({props:{warning:!0,$$slots:{default:[$l]},$$scope:{ctx:D}}}),d=new Ul({props:{code:"JTIzJTIwJTYwaHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4lNjAlRUMlOTclOTAlMjAlRUIlQTElOUMlRUElQjclQjglRUMlOUQlQjglRUIlOTAlOTglRUMlOTYlQjQlMjAlRUMlOUUlODglRUMlOUQlOEMlRUMlOUQlODQlMjAlRUQlOTklOTUlRUMlOUQlQjglMEFmcm9tJTIwZGlmZnVzZXJzJTIwaW1wb3J0JTIwRGlmZnVzaW9uUGlwZWxpbmUlMEElMEFwaXBlJTIwJTNEJTIwRGlmZnVzaW9uUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUyMnJ1bndheW1sJTJGc3RhYmxlLWRpZmZ1c2lvbi12MS01JTIyKSUwQXBpcGUlMjAlM0QlMjBwaXBlLnRvKCUyMm1wcyUyMiklMEElMEElMjMlMjAlRUMlQkIlQjQlRUQlOTMlQTglRUQlODQlQjAlRUElQjAlODAlMjA2NEdCJTIwJUVDJTlEJUI0JUVEJTk1JTk4JUVDJTlEJTk4JTIwUkFNJTIwJUVCJTlFJUE4JUVDJTlEJUJDJTIwJUVCJTk1JThDJTIwJUVDJUI2JTk0JUVDJUIyJTlDJTBBcGlwZS5lbmFibGVfYXR0ZW50aW9uX3NsaWNpbmcoKSUwQSUwQXByb21wdCUyMCUzRCUyMCUyMmElMjBwaG90byUyMG9mJTIwYW4lMjBhc3Ryb25hdXQlMjByaWRpbmclMjBhJTIwaG9yc2UlMjBvbiUyMG1hcnMlMjIlMEElMEElMjMlMjAlRUMlQjIlOTglRUMlOUQlOEMlMjAlMjIlRUMlOUIlOEMlRUIlQjAlOEQlRUMlOTclODUlMjIlMjAlRUMlQTAlODQlRUIlOEIlQUMlMjAoJUVDJTlDJTg0JTIwJUVDJTg0JUE0JUVCJUFBJTg1JUVDJTlEJTg0JTIwJUVCJUIzJUI0JUVDJTg0JUI4JUVDJTlBJTk0KSUwQV8lMjAlM0QlMjBwaXBlKHByb21wdCUyQyUyMG51bV9pbmZlcmVuY2Vfc3RlcHMlM0QxKSUwQSUwQSUyMyUyMCVFQSVCMiVCMCVFQSVCMyVCQyVFQiU4QSU5NCUyMCVFQyU5QiU4QyVFQiVCMCU4RCVFQyU5NyU4NSUyMCVFQyVBMCU4NCVFQiU4QiVBQyUyMCVFRCU5QiU4NCVFQyU5RCU5OCUyMENQVSUyMCVFQyU5RSVBNSVFQyVCOSU5OCVFQyU5RCU5OCUyMCVFQSVCMiVCMCVFQSVCMyVCQyVFQyU5OSU4MCUyMCVFQyU5RCVCQyVFQyVCOSU5OCVFRCU5NSVBOSVFQiU4QiU4OCVFQiU4QiVBNC4lMEFpbWFnZSUyMCUzRCUyMHBpcGUocHJvbXB0KS5pbWFnZXMlNUIwJTVE",highlighted:`<span class="hljs-comment"># \`huggingface-cli 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;runwayml/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}}),j=new F({props:{title:"성능 추천",local:"성능-추천",headingTag:"h2"}}),E=new Ul({props:{code:"cGlwZWxpbmUuZW5hYmxlX2F0dGVudGlvbl9zbGljaW5nKCk=",highlighted:"pipeline.enable_attention_slicing()",wrap:!1}}),O=new F({props:{title:"Known Issues",local:"known-issues",headingTag:"h2"}}),{c(){s=m("meta"),$=i(),p=m("p"),S=i(),M(C.$$.fragment),v=i(),Q=m("p"),Q.innerHTML=Y,B=i(),M(y.$$.fragment),A=i(),V=m("ul"),V.innerHTML=ll,x=i(),M(w.$$.fragment),G=i(),h=m("p"),h.innerHTML=el,P=i(),M(o.$$.fragment),k=i(),g=m("p"),g.textContent=tl,Z=i(),M(d.$$.fragment),H=i(),M(j.$$.fragment),W=i(),b=m("p"),b.textContent=nl,L=i(),R=m("p"),R.innerHTML=sl,N=i(),M(E.$$.fragment),z=i(),M(O.$$.fragment),X=i(),I=m("ul"),I.innerHTML=il,K=i(),_=m("p"),this.h()},l(l){const e=ul("svelte-u9bgzb",document.head);s=U(e,"META",{name:!0,content:!0}),e.forEach(t),$=a(l),p=U(l,"P",{}),pl(p).forEach(t),S=a(l),f(C.$$.fragment,l),v=a(l),Q=U(l,"P",{"data-svelte-h":!0}),J(Q)!=="svelte-1cmhw56"&&(Q.innerHTML=Y),B=a(l),f(y.$$.fragment,l),A=a(l),V=U(l,"UL",{"data-svelte-h":!0}),J(V)!=="svelte-xmgm9h"&&(V.innerHTML=ll),x=a(l),f(w.$$.fragment,l),G=a(l),h=U(l,"P",{"data-svelte-h":!0}),J(h)!=="svelte-26dp8q"&&(h.innerHTML=el),P=a(l),f(o.$$.fragment,l),k=a(l),g=U(l,"P",{"data-svelte-h":!0}),J(g)!=="svelte-d7ffo5"&&(g.textContent=tl),Z=a(l),f(d.$$.fragment,l),H=a(l),f(j.$$.fragment,l),W=a(l),b=U(l,"P",{"data-svelte-h":!0}),J(b)!=="svelte-1rzz618"&&(b.textContent=nl),L=a(l),R=U(l,"P",{"data-svelte-h":!0}),J(R)!=="svelte-1bz9ahf"&&(R.innerHTML=sl),N=a(l),f(E.$$.fragment,l),z=a(l),f(O.$$.fragment,l),X=a(l),I=U(l,"UL",{"data-svelte-h":!0}),J(I)!=="svelte-1uyieu0"&&(I.innerHTML=il),K=a(l),_=U(l,"P",{}),pl(_).forEach(t),this.h()},h(){ml(s,"name","hf:doc:metadata"),ml(s,"content",Ql)},m(l,e){Tl(document.head,s),n(l,$,e),n(l,p,e),n(l,S,e),r(C,l,e),n(l,v,e),n(l,Q,e),n(l,B,e),r(y,l,e),n(l,A,e),n(l,V,e),n(l,x,e),r(w,l,e),n(l,G,e),n(l,h,e),n(l,P,e),r(o,l,e),n(l,k,e),n(l,g,e),n(l,Z,e),r(d,l,e),n(l,H,e),r(j,l,e),n(l,W,e),n(l,b,e),n(l,L,e),n(l,R,e),n(l,N,e),r(E,l,e),n(l,z,e),r(O,l,e),n(l,X,e),n(l,I,e),n(l,K,e),n(l,_,e),q=!0},p(l,[e]){const al={};e&2&&(al.$$scope={dirty:e,ctx:l}),o.$set(al)},i(l){q||(c(C.$$.fragment,l),c(y.$$.fragment,l),c(w.$$.fragment,l),c(o.$$.fragment,l),c(d.$$.fragment,l),c(j.$$.fragment,l),c(E.$$.fragment,l),c(O.$$.fragment,l),q=!0)},o(l){u(C.$$.fragment,l),u(y.$$.fragment,l),u(w.$$.fragment,l),u(o.$$.fragment,l),u(d.$$.fragment,l),u(j.$$.fragment,l),u(E.$$.fragment,l),u(O.$$.fragment,l),q=!1},d(l){l&&(t($),t(p),t(S),t(v),t(Q),t(B),t(A),t(V),t(x),t(G),t(h),t(P),t(k),t(g),t(Z),t(H),t(W),t(b),t(L),t(R),t(N),t(z),t(X),t(I),t(K),t(_)),t(s),T(C,l),T(y,l),T(w,l),T(o,l),T(d,l),T(j,l),T(E,l),T(O,l)}}}const Ql='{"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(D){return Ml(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class jl extends rl{constructor(s){super(),cl(this,s,yl,Cl,ol,{})}}export{jl as component};
