import{s as Ce,n as Pe,o as Le}from"../chunks/scheduler.6e0d5ff7.js";import{S as ze,i as Ie,g as i,s as n,r as u,E as Ne,h as o,f as l,c as a,j as me,u as d,x as f,k as xe,y as r,a as s,v as M,d as y,t as h,w as $}from"../chunks/index.d7c1b260.js";import{C as V}from"../chunks/CodeBlock.09a08494.js";import{H as $e}from"../chunks/Heading.30a009b0.js";function Re(Te){let m,X,S,E,b,Y,Z,be='<a href="https://github.com/huggingface/safetensors" rel="nofollow">safetensors</a>는 텐서를 저장하고 로드하기 위한 안전하고 빠른 파일 형식입니다. 일반적으로 PyTorch 모델 가중치는 Python의 <a href="https://docs.python.org/3/library/pickle.html" rel="nofollow"><code>pickle</code></a> 유틸리티를 사용하여 <code>.bin</code> 파일에 저장되거나 <code>피클</code>됩니다. 그러나 <code>피클</code>은 안전하지 않으며 피클된 파일에는 실행될 수 있는 악성 코드가 포함될 수 있습니다. 세이프텐서는 <code>피클</code>의 안전한 대안으로 모델 가중치를 공유하는 데 이상적입니다.',q,g,Ze="이 가이드에서는 <code>.safetensor</code> 파일을 로드하는 방법과 다른 형식으로 저장된 안정적 확산 모델 가중치를 <code>.safetensor</code>로 변환하는 방법을 보여드리겠습니다. 시작하기 전에 세이프텐서가 설치되어 있는지 확인하세요:",F,w,D,v,ge='[‘runwayml/stable-diffusion-v1-5`] (<a href="https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main" rel="nofollow">https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main</a>) 리포지토리를 보면 <code>text_encoder</code>, <code>unet</code> 및 <code>vae</code> 하위 폴더에 가중치가 <code>.safetensors</code> 형식으로 저장되어 있는 것을 볼 수 있습니다. 기본적으로 🤗 디퓨저는 모델 저장소에서 사용할 수 있는 경우 해당 하위 폴더에서 이러한 ‘.safetensors` 파일을 자동으로 로드합니다.',A,J,we="보다 명시적인 제어를 위해 선택적으로 <code>사용_세이프텐서=True</code>를 설정할 수 있습니다(<code>세이프텐서</code>가 설치되지 않은 경우 설치하라는 오류 메시지가 표시됨):",O,G,K,B,ve="그러나 모델 가중치가 위의 예시처럼 반드시 별도의 하위 폴더에 저장되는 것은 아닙니다. 모든 가중치가 하나의 ‘.safetensors<code>파일에 저장되는 경우도 있습니다. 이 경우 가중치가 Stable Diffusion 가중치인 경우</code>~diffusers.loaders.FromCkptMixin.from_ckpt` 메서드를 사용하여 파일을 직접 로드할 수 있습니다:",ee,k,te,U,le,j,Je='허브의 모든 가중치를 ‘.safetensors<code>형식으로 사용할 수 있는 것은 아니며, &#39;.bin</code>으로 저장된 가중치가 있을 수 있습니다. 이 경우 <a href="https://huggingface.co/spaces/diffusers/convert" rel="nofollow">Convert Space</a>을 사용하여 가중치를 ‘.safetensors’로 변환하세요. Convert Space는 피클된 가중치를 다운로드하여 변환한 후 풀 리퀘스트를 열어 허브에 새로 변환된 <code>.safetensors</code> 파일을 업로드합니다. 이렇게 하면 피클된 파일에 악성 코드가 포함되어 있는 경우, 안전하지 않은 파일과 의심스러운 피클 가져오기를 탐지하는 <a href="https://huggingface.co/docs/hub/security-pickle#hubs-security-scanner" rel="nofollow">보안 스캐너</a>가 있는 허브로 업로드됩니다. - 개별 컴퓨터가 아닌.',se,W,Ge='개정<code>매개변수에 풀 리퀘스트에 대한 참조를 지정하여 새로운 &#39;.safetensors</code> 가중치가 적용된 모델을 사용할 수 있습니다(허브의 <a href="https://huggingface.co/spaces/diffusers/check_pr" rel="nofollow">Check PR</a> 공간에서 테스트할 수도 있음)(예: <code>refs/pr/22</code>):',ne,_,ae,x,ie,C,Be="세이프티 센서를 사용하는 데에는 여러 가지 이유가 있습니다:",oe,T,I,ke="<p>세이프텐서를 사용하는 가장 큰 이유는 안전입니다.오픈 소스 및 모델 배포가 증가함에 따라 다운로드한 모델 가중치에 악성 코드가 포함되어 있지 않다는 것을 신뢰할 수 있는 것이 중요해졌습니다.세이프센서의 현재 헤더 크기는 매우 큰 JSON 파일을 구문 분석하지 못하게 합니다.</p>",ue,p,N,Ue="모델 전환 간의 로딩 속도는 텐서의 제로 카피를 수행하는 세이프텐서를 사용해야 하는 또 다른 이유입니다. 가중치를 CPU(기본값)로 로드하는 경우 ‘피클’에 비해 특히 빠르며, 가중치를 GPU로 직접 로드하는 경우에도 빠르지는 않더라도 비슷하게 빠릅니다. 모델이 이미 로드된 경우에만 성능 차이를 느낄 수 있으며, 가중치를 다운로드하거나 모델을 처음 로드하는 경우에는 성능 차이를 느끼지 못할 것입니다.",de,R,je="전체 파이프라인을 로드하는 데 걸리는 시간입니다:",Me,P,ye,H,We="하지만 실제로 500MB의 모델 가중치를 로드하는 데 걸리는 시간은 얼마 되지 않습니다:",he,L,pe,z,_e='지연 로딩은 세이프텐서에서도 지원되며, 이는 분산 설정에서 일부 텐서만 로드하는 데 유용합니다. 이 형식을 사용하면 <a href="https://huggingface.co/bigscience/bloom" rel="nofollow">BLOOM</a> 모델을 일반 PyTorch 가중치를 사용하여 10분이 걸리던 것을 8개의 GPU에서 45초 만에 로드할 수 있습니다.',fe,Q,re;return b=new $e({props:{title:"세이프텐서 로드",local:"세이프텐서-로드",headingTag:"h1"}}),w=new V({props:{code:"IXBpcCUyMGluc3RhbGwlMjBzYWZldGVuc29ycw==",highlighted:"!pip install safetensors",wrap:!1}}),G=new V({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBJTBBcGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTIycnVud2F5bWwlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIlMkMlMjB1c2Vfc2FmZXRlbnNvcnMlM0RUcnVlKQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;runwayml/stable-diffusion-v1-5&quot;</span>, use_safetensors=<span class="hljs-literal">True</span>)`,wrap:!1}}),k=new V({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMFN0YWJsZURpZmZ1c2lvblBpcGVsaW5lJTBBJTBBcGlwZWxpbmUlMjAlM0QlMjBTdGFibGVEaWZmdXNpb25QaXBlbGluZS5mcm9tX2NrcHQoJTBBJTIwJTIwJTIwJTIwJTIyaHR0cHMlM0ElMkYlMkZodWdnaW5nZmFjZS5jbyUyRldhcnJpb3JNYW1hNzc3JTJGT3JhbmdlTWl4cyUyRmJsb2IlMkZtYWluJTJGTW9kZWxzJTJGQWJ5c3NPcmFuZ2VNaXglMkZBYnlzc09yYW5nZU1peC5zYWZldGVuc29ycyUyMiUwQSk=",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> StableDiffusionPipeline

pipeline = StableDiffusionPipeline.from_ckpt(
    <span class="hljs-string">&quot;https://huggingface.co/WarriorMama777/OrangeMixs/blob/main/Models/AbyssOrangeMix/AbyssOrangeMix.safetensors&quot;</span>
)`,wrap:!1}}),U=new $e({props:{title:"세이프텐서로 변환",local:"세이프텐서로-변환",headingTag:"h2"}}),_=new V({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBJTBBcGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLTItMSUyMiUyQyUyMHJldmlzaW9uJTNEJTIycmVmcyUyRnByJTJGMjIlMjIp",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;stabilityai/stable-diffusion-2-1&quot;</span>, revision=<span class="hljs-string">&quot;refs/pr/22&quot;</span>)`,wrap:!1}}),x=new $e({props:{title:"세이프센서를 사용하는 이유는 무엇인가요?",local:"세이프센서를-사용하는-이유는-무엇인가요",headingTag:"h2"}}),P=new V({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMFN0YWJsZURpZmZ1c2lvblBpcGVsaW5lJTBBJTBBcGlwZWxpbmUlMjAlM0QlMjBTdGFibGVEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTIyc3RhYmlsaXR5YWklMkZzdGFibGUtZGlmZnVzaW9uLTItMSUyMiklMEElMjJMb2FkZWQlMjBpbiUyMHNhZmV0ZW5zb3JzJTIwMCUzQTAwJTNBMDIuMDMzNjU4JTIyJTBBJTIyTG9hZGVkJTIwaW4lMjBQeVRvcmNoJTIwMCUzQTAwJTNBMDIuNjYzMzc5JTIy",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> StableDiffusionPipeline

pipeline = StableDiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;stabilityai/stable-diffusion-2-1&quot;</span>)
<span class="hljs-string">&quot;Loaded in safetensors 0:00:02.033658&quot;</span>
<span class="hljs-string">&quot;Loaded in PyTorch 0:00:02.663379&quot;</span>`,wrap:!1}}),L=new V({props:{code:"c2FmZXRlbnNvcnMlM0ElMjAzLjQ4NzNtcyUwQVB5VG9yY2glM0ElMjAxNzIuNzUzN21z",highlighted:`safetensors: 3.4873ms
PyTorch: 172.7537ms`,wrap:!1}}),{c(){m=i("meta"),X=n(),S=i("p"),E=n(),u(b.$$.fragment),Y=n(),Z=i("p"),Z.innerHTML=be,q=n(),g=i("p"),g.innerHTML=Ze,F=n(),u(w.$$.fragment),D=n(),v=i("p"),v.innerHTML=ge,A=n(),J=i("p"),J.innerHTML=we,O=n(),u(G.$$.fragment),K=n(),B=i("p"),B.innerHTML=ve,ee=n(),u(k.$$.fragment),te=n(),u(U.$$.fragment),le=n(),j=i("p"),j.innerHTML=Je,se=n(),W=i("p"),W.innerHTML=Ge,ne=n(),u(_.$$.fragment),ae=n(),u(x.$$.fragment),ie=n(),C=i("p"),C.textContent=Be,oe=n(),T=i("ul"),I=i("li"),I.innerHTML=ke,ue=n(),p=i("li"),N=i("p"),N.textContent=Ue,de=n(),R=i("p"),R.textContent=je,Me=n(),u(P.$$.fragment),ye=n(),H=i("p"),H.textContent=We,he=n(),u(L.$$.fragment),pe=n(),z=i("p"),z.innerHTML=_e,fe=n(),Q=i("p"),this.h()},l(e){const t=Ne("svelte-u9bgzb",document.head);m=o(t,"META",{name:!0,content:!0}),t.forEach(l),X=a(e),S=o(e,"P",{}),me(S).forEach(l),E=a(e),d(b.$$.fragment,e),Y=a(e),Z=o(e,"P",{"data-svelte-h":!0}),f(Z)!=="svelte-xy39pg"&&(Z.innerHTML=be),q=a(e),g=o(e,"P",{"data-svelte-h":!0}),f(g)!=="svelte-1quckm"&&(g.innerHTML=Ze),F=a(e),d(w.$$.fragment,e),D=a(e),v=o(e,"P",{"data-svelte-h":!0}),f(v)!=="svelte-bfrnv6"&&(v.innerHTML=ge),A=a(e),J=o(e,"P",{"data-svelte-h":!0}),f(J)!=="svelte-1ood1ep"&&(J.innerHTML=we),O=a(e),d(G.$$.fragment,e),K=a(e),B=o(e,"P",{"data-svelte-h":!0}),f(B)!=="svelte-1t7sg9j"&&(B.innerHTML=ve),ee=a(e),d(k.$$.fragment,e),te=a(e),d(U.$$.fragment,e),le=a(e),j=o(e,"P",{"data-svelte-h":!0}),f(j)!=="svelte-kfki6q"&&(j.innerHTML=Je),se=a(e),W=o(e,"P",{"data-svelte-h":!0}),f(W)!=="svelte-k67rn6"&&(W.innerHTML=Ge),ne=a(e),d(_.$$.fragment,e),ae=a(e),d(x.$$.fragment,e),ie=a(e),C=o(e,"P",{"data-svelte-h":!0}),f(C)!=="svelte-89r6jc"&&(C.textContent=Be),oe=a(e),T=o(e,"UL",{});var ce=me(T);I=o(ce,"LI",{"data-svelte-h":!0}),f(I)!=="svelte-5u0i6e"&&(I.innerHTML=ke),ue=a(ce),p=o(ce,"LI",{});var c=me(p);N=o(c,"P",{"data-svelte-h":!0}),f(N)!=="svelte-1fytkny"&&(N.textContent=Ue),de=a(c),R=o(c,"P",{"data-svelte-h":!0}),f(R)!=="svelte-grfvs7"&&(R.textContent=je),Me=a(c),d(P.$$.fragment,c),ye=a(c),H=o(c,"P",{"data-svelte-h":!0}),f(H)!=="svelte-zt4kwc"&&(H.textContent=We),he=a(c),d(L.$$.fragment,c),c.forEach(l),ce.forEach(l),pe=a(e),z=o(e,"P",{"data-svelte-h":!0}),f(z)!=="svelte-p6xz18"&&(z.innerHTML=_e),fe=a(e),Q=o(e,"P",{}),me(Q).forEach(l),this.h()},h(){xe(m,"name","hf:doc:metadata"),xe(m,"content",He)},m(e,t){r(document.head,m),s(e,X,t),s(e,S,t),s(e,E,t),M(b,e,t),s(e,Y,t),s(e,Z,t),s(e,q,t),s(e,g,t),s(e,F,t),M(w,e,t),s(e,D,t),s(e,v,t),s(e,A,t),s(e,J,t),s(e,O,t),M(G,e,t),s(e,K,t),s(e,B,t),s(e,ee,t),M(k,e,t),s(e,te,t),M(U,e,t),s(e,le,t),s(e,j,t),s(e,se,t),s(e,W,t),s(e,ne,t),M(_,e,t),s(e,ae,t),M(x,e,t),s(e,ie,t),s(e,C,t),s(e,oe,t),s(e,T,t),r(T,I),r(T,ue),r(T,p),r(p,N),r(p,de),r(p,R),r(p,Me),M(P,p,null),r(p,ye),r(p,H),r(p,he),M(L,p,null),s(e,pe,t),s(e,z,t),s(e,fe,t),s(e,Q,t),re=!0},p:Pe,i(e){re||(y(b.$$.fragment,e),y(w.$$.fragment,e),y(G.$$.fragment,e),y(k.$$.fragment,e),y(U.$$.fragment,e),y(_.$$.fragment,e),y(x.$$.fragment,e),y(P.$$.fragment,e),y(L.$$.fragment,e),re=!0)},o(e){h(b.$$.fragment,e),h(w.$$.fragment,e),h(G.$$.fragment,e),h(k.$$.fragment,e),h(U.$$.fragment,e),h(_.$$.fragment,e),h(x.$$.fragment,e),h(P.$$.fragment,e),h(L.$$.fragment,e),re=!1},d(e){e&&(l(X),l(S),l(E),l(Y),l(Z),l(q),l(g),l(F),l(D),l(v),l(A),l(J),l(O),l(K),l(B),l(ee),l(te),l(le),l(j),l(se),l(W),l(ne),l(ae),l(ie),l(C),l(oe),l(T),l(pe),l(z),l(fe),l(Q)),l(m),$(b,e),$(w,e),$(G,e),$(k,e),$(U,e),$(_,e),$(x,e),$(P),$(L)}}}const He='{"title":"세이프텐서 로드","local":"세이프텐서-로드","sections":[{"title":"세이프텐서로 변환","local":"세이프텐서로-변환","sections":[],"depth":2},{"title":"세이프센서를 사용하는 이유는 무엇인가요?","local":"세이프센서를-사용하는-이유는-무엇인가요","sections":[],"depth":2}],"depth":1}';function Ve(Te){return Le(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ye extends ze{constructor(m){super(),Ie(this,m,Ve,Re,Ce,{})}}export{Ye as component};
