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