import{s as pt,o as rt,n as ut}from"../chunks/scheduler.9bc65507.js";import{S as ct,i as ft,g as s,s as o,r as q,A as dt,h as m,f as n,c as i,j as st,u as V,x as r,k as Y,y as ht,a as l,v as J,d as Q,t as Z,w as L}from"../chunks/index.707bf1b6.js";import{T as vt}from"../chunks/Tip.c2ecdbf4.js";import{C as mt}from"../chunks/CodeBlock.54a9f38d.js";import{H as $t,E as gt}from"../chunks/EditOnGithub.922df6ba.js";function bt(G){let a,f='이 <a href="https://colab.research.google.com/drive/16CXfVmtdQvciSh9BopZUDYcmXCDpvgrT?usp=sharing" rel="nofollow">노트북</a>으로 Quanto와 transformers를 사용해 보세요!';return{c(){a=s("p"),a.innerHTML=f},l(p){a=m(p,"P",{"data-svelte-h":!0}),r(a)!=="svelte-1f8fow8"&&(a.innerHTML=f)},m(p,U){l(p,a,U)},p:ut,d(p){p&&n(a)}}}function Mt(G){let a,f,p,U,d,X,u,H,h,B='<a href="https://github.com/huggingface/optimum-quanto" rel="nofollow">🤗 Quanto</a> 라이브러리는 다목적 파이토치 양자화 툴킷입니다. 이 라이브러리에서 사용되는 양자화 방법은 선형 양자화입니다. Quanto는 다음과 같은 여러 가지 기능을 제공합니다:',k,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="이제 <code>from_pretrained()</code> 메소드에 <code>QuantoConfig</code> 객체를 전달하여 모델을 양자화할 수 있습니다. 이 방식은 <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,lt='Quanto 라이브러리는 양자화를 위해 선형 양자화 알고리즘을 사용합니다. 비록 기본적인 양자화 기술이지만, 좋은 결과를 얻는데 아주 큰 도움이 됩니다! 바로 아래에 있는 벤치마크(llama-2-7b의 펄플렉서티 지표)를 확인해 보세요. 더 많은 벤치마크는 <a href="https://github.com/huggingface/quanto/tree/main/bench/generation" rel="nofollow">여기</a> 에서 찾을 수 있습니다.',R,c,at='<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,x,D;return d=new $t({props:{title:"Quanto",local:"quanto",headingTag:"h1"}}),u=new vt({props:{$$slots:{default:[bt]},$$scope:{ctx:G}}}),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(){a=s("meta"),f=o(),p=s("p"),U=o(),q(d.$$.fragment),X=o(),q(u.$$.fragment),H=o(),h=s("p"),h.innerHTML=B,k=o(),v=s("ul"),v.innerHTML=K,F=o(),$=s("p"),$.textContent=O,P=o(),q(g.$$.fragment),z=o(),b=s("p"),b.innerHTML=tt,W=o(),M=s("p"),M.innerHTML=et,E=o(),q(T.$$.fragment),j=o(),_=s("p"),_.textContent=nt,I=o(),w=s("p"),w.innerHTML=lt,R=o(),c=s("div"),c.innerHTML=at,A=o(),C=s("p"),C.textContent=ot,N=o(),q(y.$$.fragment),S=o(),x=s("p"),this.h()},l(t){const e=dt("svelte-u9bgzb",document.head);a=m(e,"META",{name:!0,content:!0}),e.forEach(n),f=i(t),p=m(t,"P",{}),st(p).forEach(n),U=i(t),V(d.$$.fragment,t),X=i(t),V(u.$$.fragment,t),H=i(t),h=m(t,"P",{"data-svelte-h":!0}),r(h)!=="svelte-u79ms7"&&(h.innerHTML=B),k=i(t),v=m(t,"UL",{"data-svelte-h":!0}),r(v)!=="svelte-1ghlhdh"&&(v.innerHTML=K),F=i(t),$=m(t,"P",{"data-svelte-h":!0}),r($)!=="svelte-1dydg7a"&&($.textContent=O),P=i(t),V(g.$$.fragment,t),z=i(t),b=m(t,"P",{"data-svelte-h":!0}),r(b)!=="svelte-11pt1fa"&&(b.innerHTML=tt),W=i(t),M=m(t,"P",{"data-svelte-h":!0}),r(M)!=="svelte-imwxel"&&(M.innerHTML=et),E=i(t),V(T.$$.fragment,t),j=i(t),_=m(t,"P",{"data-svelte-h":!0}),r(_)!=="svelte-8mo7mh"&&(_.textContent=nt),I=i(t),w=m(t,"P",{"data-svelte-h":!0}),r(w)!=="svelte-1i8tmwt"&&(w.innerHTML=lt),R=i(t),c=m(t,"DIV",{class:!0,"data-svelte-h":!0}),r(c)!=="svelte-196rp13"&&(c.innerHTML=at),A=i(t),C=m(t,"P",{"data-svelte-h":!0}),r(C)!=="svelte-1dccdow"&&(C.textContent=ot),N=i(t),V(y.$$.fragment,t),S=i(t),x=m(t,"P",{}),st(x).forEach(n),this.h()},h(){Y(a,"name","hf:doc:metadata"),Y(a,"content",Tt),Y(c,"class","flex gap-4")},m(t,e){ht(document.head,a),l(t,f,e),l(t,p,e),l(t,U,e),J(d,t,e),l(t,X,e),J(u,t,e),l(t,H,e),l(t,h,e),l(t,k,e),l(t,v,e),l(t,F,e),l(t,$,e),l(t,P,e),J(g,t,e),l(t,z,e),l(t,b,e),l(t,W,e),l(t,M,e),l(t,E,e),J(T,t,e),l(t,j,e),l(t,_,e),l(t,I,e),l(t,w,e),l(t,R,e),l(t,c,e),l(t,A,e),l(t,C,e),l(t,N,e),J(y,t,e),l(t,S,e),l(t,x,e),D=!0},p(t,[e]){const it={};e&2&&(it.$$scope={dirty:e,ctx:t}),u.$set(it)},i(t){D||(Q(d.$$.fragment,t),Q(u.$$.fragment,t),Q(g.$$.fragment,t),Q(T.$$.fragment,t),Q(y.$$.fragment,t),D=!0)},o(t){Z(d.$$.fragment,t),Z(u.$$.fragment,t),Z(g.$$.fragment,t),Z(T.$$.fragment,t),Z(y.$$.fragment,t),D=!1},d(t){t&&(n(f),n(p),n(U),n(X),n(H),n(h),n(k),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(c),n(A),n(C),n(N),n(S),n(x)),n(a),L(d,t),L(u,t),L(g,t),L(T,t),L(y,t)}}}const Tt='{"title":"Quanto","local":"quanto","sections":[],"depth":1}';function _t(G){return rt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class qt extends ct{constructor(a){super(),ft(this,a,_t,Mt,pt,{})}}export{qt as component};
