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