import{s as rt,o as ut,n as pt}from"../chunks/scheduler.bdbef820.js";import{S as ft,i as ct,g as s,s as o,r as x,A as dt,h as m,f as n,c as i,j as st,u as Q,x as u,k as Y,y as ht,a,v as V,d as J,t as Z,w as L}from"../chunks/index.33f81d56.js";import{T as vt}from"../chunks/Tip.34194030.js";import{C as mt}from"../chunks/CodeBlock.362b34a4.js";import{H as $t,E as gt}from"../chunks/EditOnGithub.a9246e21.js";function bt(k){let l,c='이 <a href="https://colab.research.google.com/drive/16CXfVmtdQvciSh9BopZUDYcmXCDpvgrT?usp=sharing" rel="nofollow">노트북</a>으로 Quanto와 transformers를 사용해 보세요!';return{c(){l=s("p"),l.innerHTML=c},l(r){l=m(r,"P",{"data-svelte-h":!0}),u(l)!=="svelte-1f8fow8"&&(l.innerHTML=c)},m(r,U){a(r,l,U)},p:pt,d(r){r&&n(l)}}}function Mt(k){let l,c,r,U,d,G,p,X,h,B='<a href="https://github.com/huggingface/optimum-quanto" rel="nofollow">🤗 Quanto</a> 라이브러리는 다목적 파이토치 양자화 툴킷입니다. 이 라이브러리에서 사용되는 양자화 방법은 선형 양자화입니다. Quanto는 다음과 같은 여러 가지 기능을 제공합니다:',H,v,K="<li>가중치 양자화 (<code>float8</code>,<code>int8</code>,<code>int4</code>,<code>int2</code>)</li> <li>활성화 양자화 (<code>float8</code>,<code>int8</code>)</li> <li>모달리티에 구애받지 않음 (e.g CV,LLM)</li> <li>장치에 구애받지 않음 (e.g CUDA,MPS,CPU)</li> <li><code>torch.compile</code> 호환성</li> <li>특정 장치에 대한 사용자 정의 커널의 쉬운 추가</li> <li>QAT(양자화를 고려한 학습) 지원</li>",F,$,O="시작하기 전에 다음 라이브러리가 설치되어 있는지 확인하세요:",P,g,z,b,tt='이제 <a href="/docs/transformers/main/ko/main_classes/model#transformers.PreTrainedModel.from_pretrained">from_pretrained()</a> 메소드에 <a href="/docs/transformers/main/ko/main_classes/quantization#transformers.QuantoConfig">QuantoConfig</a> 객체를 전달하여 모델을 양자화할 수 있습니다. 이 방식은 <code>torch.nn.Linear</code> 레이어를 포함하는 모든 모달리티의 모든 모델에서 잘 작동합니다.',W,M,et='허깅페이스의 transformers 라이브러리는 개발자 편의를 위해 quanto의 인터페이스를 일부 통합하여 지원하고 있으며, 이 방식으로는 가중치 양자화만 지원합니다. 활성화 양자화, 캘리브레이션, QAT 같은 더 복잡한 기능을 수행하기 위해서는 <a href="https://github.com/huggingface/optimum-quanto" rel="nofollow">quanto</a> 라이브러리의 해당 함수를 직접 호출해야 합니다.',E,T,j,_,nt=`참고로, transformers에서는 아직 직렬화가 지원되지 않지만 곧 지원될 예정입니다!
모델을 저장하고 싶으면 quanto 라이브러리를 대신 사용할 수 있습니다.`,I,w,at='Quanto 라이브러리는 양자화를 위해 선형 양자화 알고리즘을 사용합니다. 비록 기본적인 양자화 기술이지만, 좋은 결과를 얻는데 아주 큰 도움이 됩니다! 바로 아래에 있는 벤치마크(llama-2-7b의 펄플렉서티 지표)를 확인해 보세요. 더 많은 벤치마크는 <a href="https://github.com/huggingface/quanto/tree/main/bench/generation" rel="nofollow">여기</a> 에서 찾을 수 있습니다.',R,f,lt='<div><img class="rounded-xl" src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/quantization/NousResearch-Llama-2-7b-hf_Perplexity.png" alt="llama-2-7b-quanto-perplexity"/></div>',A,C,ot="이 라이브러리는 대부분의 PTQ 최적화 알고리즘과 호환될 만큼 충분히 유연합니다. 앞으로의 계획은 가장 인기 있는 알고리즘(AWQ, Smoothquant)을 최대한 매끄럽게 통합하는 것입니다.",N,y,S,q,D;return d=new $t({props:{title:"Quanto",local:"quanto",headingTag:"h1"}}),p=new vt({props:{$$slots:{default:[bt]},$$scope:{ctx:k}}}),g=new mt({props:{code:"cGlwJTIwaW5zdGFsbCUyMHF1YW50byUyMGFjY2VsZXJhdGUlMjB0cmFuc2Zvcm1lcnM=",highlighted:"pip install quanto accelerate transformers",wrap:!1}}),T=new mt({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNJTJDJTIwQXV0b1Rva2VuaXplciUyQyUyMFF1YW50b0NvbmZpZyUwQSUwQW1vZGVsX2lkJTIwJTNEJTIwJTIyZmFjZWJvb2slMkZvcHQtMTI1bSUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2lkKSUwQXF1YW50aXphdGlvbl9jb25maWclMjAlM0QlMjBRdWFudG9Db25maWcod2VpZ2h0cyUzRCUyMmludDglMjIpJTBBcXVhbnRpemVkX21vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yQ2F1c2FsTE0uZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2lkJTJDJTIwZGV2aWNlX21hcCUzRCUyMmN1ZGElM0EwJTIyJTJDJTIwcXVhbnRpemF0aW9uX2NvbmZpZyUzRHF1YW50aXphdGlvbl9jb25maWcp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForCausalLM, AutoTokenizer, QuantoConfig

model_id = <span class="hljs-string">&quot;facebook/opt-125m&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_id)
quantization_config = QuantoConfig(weights=<span class="hljs-string">&quot;int8&quot;</span>)
quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map=<span class="hljs-string">&quot;cuda:0&quot;</span>, quantization_config=quantization_config)`,wrap:!1}}),y=new gt({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/ko/quantization/quanto.md"}}),{c(){l=s("meta"),c=o(),r=s("p"),U=o(),x(d.$$.fragment),G=o(),x(p.$$.fragment),X=o(),h=s("p"),h.innerHTML=B,H=o(),v=s("ul"),v.innerHTML=K,F=o(),$=s("p"),$.textContent=O,P=o(),x(g.$$.fragment),z=o(),b=s("p"),b.innerHTML=tt,W=o(),M=s("p"),M.innerHTML=et,E=o(),x(T.$$.fragment),j=o(),_=s("p"),_.textContent=nt,I=o(),w=s("p"),w.innerHTML=at,R=o(),f=s("div"),f.innerHTML=lt,A=o(),C=s("p"),C.textContent=ot,N=o(),x(y.$$.fragment),S=o(),q=s("p"),this.h()},l(t){const e=dt("svelte-u9bgzb",document.head);l=m(e,"META",{name:!0,content:!0}),e.forEach(n),c=i(t),r=m(t,"P",{}),st(r).forEach(n),U=i(t),Q(d.$$.fragment,t),G=i(t),Q(p.$$.fragment,t),X=i(t),h=m(t,"P",{"data-svelte-h":!0}),u(h)!=="svelte-u79ms7"&&(h.innerHTML=B),H=i(t),v=m(t,"UL",{"data-svelte-h":!0}),u(v)!=="svelte-1ghlhdh"&&(v.innerHTML=K),F=i(t),$=m(t,"P",{"data-svelte-h":!0}),u($)!=="svelte-1dydg7a"&&($.textContent=O),P=i(t),Q(g.$$.fragment,t),z=i(t),b=m(t,"P",{"data-svelte-h":!0}),u(b)!=="svelte-ttfnc0"&&(b.innerHTML=tt),W=i(t),M=m(t,"P",{"data-svelte-h":!0}),u(M)!=="svelte-imwxel"&&(M.innerHTML=et),E=i(t),Q(T.$$.fragment,t),j=i(t),_=m(t,"P",{"data-svelte-h":!0}),u(_)!=="svelte-8mo7mh"&&(_.textContent=nt),I=i(t),w=m(t,"P",{"data-svelte-h":!0}),u(w)!=="svelte-1i8tmwt"&&(w.innerHTML=at),R=i(t),f=m(t,"DIV",{class:!0,"data-svelte-h":!0}),u(f)!=="svelte-196rp13"&&(f.innerHTML=lt),A=i(t),C=m(t,"P",{"data-svelte-h":!0}),u(C)!=="svelte-1dccdow"&&(C.textContent=ot),N=i(t),Q(y.$$.fragment,t),S=i(t),q=m(t,"P",{}),st(q).forEach(n),this.h()},h(){Y(l,"name","hf:doc:metadata"),Y(l,"content",Tt),Y(f,"class","flex gap-4")},m(t,e){ht(document.head,l),a(t,c,e),a(t,r,e),a(t,U,e),V(d,t,e),a(t,G,e),V(p,t,e),a(t,X,e),a(t,h,e),a(t,H,e),a(t,v,e),a(t,F,e),a(t,$,e),a(t,P,e),V(g,t,e),a(t,z,e),a(t,b,e),a(t,W,e),a(t,M,e),a(t,E,e),V(T,t,e),a(t,j,e),a(t,_,e),a(t,I,e),a(t,w,e),a(t,R,e),a(t,f,e),a(t,A,e),a(t,C,e),a(t,N,e),V(y,t,e),a(t,S,e),a(t,q,e),D=!0},p(t,[e]){const it={};e&2&&(it.$$scope={dirty:e,ctx:t}),p.$set(it)},i(t){D||(J(d.$$.fragment,t),J(p.$$.fragment,t),J(g.$$.fragment,t),J(T.$$.fragment,t),J(y.$$.fragment,t),D=!0)},o(t){Z(d.$$.fragment,t),Z(p.$$.fragment,t),Z(g.$$.fragment,t),Z(T.$$.fragment,t),Z(y.$$.fragment,t),D=!1},d(t){t&&(n(c),n(r),n(U),n(G),n(X),n(h),n(H),n(v),n(F),n($),n(P),n(z),n(b),n(W),n(M),n(E),n(j),n(_),n(I),n(w),n(R),n(f),n(A),n(C),n(N),n(S),n(q)),n(l),L(d,t),L(p,t),L(g,t),L(T,t),L(y,t)}}}const Tt='{"title":"Quanto","local":"quanto","sections":[],"depth":1}';function _t(k){return ut(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class xt extends ft{constructor(l){super(),ct(this,l,_t,Mt,rt,{})}}export{xt as component};
