Buckets:
| import{s as _t,o as Dt,n as qt}from"../chunks/scheduler.bdbef820.js";import{S as Lt,i as At,g as M,s as n,r as U,A as Pt,h as J,f as e,c as a,j as Nt,u as y,x as i,k as zt,y as Ot,a as s,v as o,d as p,t as T,w as r}from"../chunks/index.33f81d56.js";import{T as Kt}from"../chunks/Tip.34194030.js";import{C as w}from"../chunks/CodeBlock.362b34a4.js";import{H as m,E as le}from"../chunks/EditOnGithub.a9246e21.js";function te(ml){let d,h='언어 모델 성능과 최적화에 대한 보다 자세한 가이드는 <a href="./llm_optims">LLM Inference Optimization</a>을 참고하세요.';return{c(){d=M("p"),d.innerHTML=h},l(u){d=J(u,"P",{"data-svelte-h":!0}),i(d)!=="svelte-a1u20q"&&(d.innerHTML=h)},m(u,dl){s(u,d,dl)},p:qt,d(u){u&&e(d)}}}function ee(ml){let d,h,u,dl,j,cl,b,rt=`이 글을 보고 있다면 <strong>채팅 모델</strong>에 대해 어느 정도 알고 계실 것입니다. | |
| 채팅 모델이란 메세지를 주고받을 수 있는 대화형 인공지능입니다. | |
| 대표적으로 ChatGPT가 있고, 이와 비슷하거나 더 뛰어난 오픈소스 채팅 모델이 많이 존재합니다.<br/> | |
| 이러한 모델들은 무료 다운로드할 수 있으며, 로컬에서 실행할 수 있습니다. | |
| 크고 무거운 모델은 고성능 하드웨어와 메모리가 필요하지만, | |
| 저사양 GPU 혹은 일반 데스크탑이나 노트북 CPU에서도 잘 작동하는 소형 모델들도 있습니다.`,wl,C,dt=`이 가이드는 채팅 모델을 처음 사용하는 분들에게 유용할 것입니다. | |
| 우리는 간편한 고수준(High-Level) “pipeline”을 통해 빠른 시작 가이드를 진행할 것입니다. | |
| 가이드에는 채팅 모델을 바로 시작할 때 필요한 모든 정보가 담겨 있습니다. | |
| 빠른 시작 가이드 이후에는 채팅 모델이 정확히 무엇인지, 적절한 모델을 선택하는 방법과, | |
| 채팅 모델을 사용하는 각 단계의 저수준(Low-Level) 분석 등 더 자세한 정보를 다룰 것입니다. | |
| 또한 채팅 모델의 성능과 메모리 사용을 최적화하는 방법에 대한 팁도 제공할 것입니다.`,hl,B,jl,I,ut=`자세히 볼 여유가 없는 분들을 위해 간단히 요약해 보겠습니다: | |
| 채팅 모델은 대화 메세지를 계속해서 생성해 나갑니다. | |
| 즉, 짤막한 채팅 메세지를 모델에게 전달하면, 모델은 이를 바탕으로 응답을 추가하며 대화를 이어 나갑니다. | |
| 이제 실제로 어떻게 작동하는지 살펴보겠습니다. | |
| 먼저, 채팅을 만들어 보겠습니다:`,bl,f,Cl,G,mt=`주목하세요, 대화를 처음 시작할 때 유저 메세지 이외의도, 별도의 <strong>시스템</strong> 메세지가 필요할 수 있습니다. | |
| 모든 채팅 모델이 시스템 메세지를 지원하는 것은 아니지만, | |
| 지원하는 경우에는 시스템 메세지는 대화에서 모델이 어떻게 행동해야 하는지를 지시할 수 있습니다. | |
| 예를 들어, 유쾌하거나 진지하고자 할 때, 짧은 답변이나 긴 답변을 원할 때 등을 설정할 수 있습니다. | |
| 시스템 메세지를 생략하고 | |
| “You are a helpful and intelligent AI assistant who responds to user queries.” | |
| 와 같은 간단한 프롬프트를 사용하는 것도 가능합니다.`,Bl,g,ct=`채팅을 시작했다면 대화를 이어 나가는 가장 빠른 방법은 <code>TextGenerationPipeline</code>를 사용하는 것입니다. | |
| 한번 <code>LLaMA-3</code>를 사용하여 이를 시연해 보겠습니다. | |
| 우선 <code>LLaMA-3</code>를 사용하기 위해서는 승인이 필요합니다. <a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct" rel="nofollow">권한 신청</a>을 하고 Hugging Face 계정으로 로그인한 후에 사용할 수 있습니다. | |
| 또한 우리는 <code>device_map="auto"</code>를 사용합니다. GPU 메모리가 충분하다면 로드될 것입니다. | |
| 그리고 메모리 절약을 위해 dtype을 <code>torch.bfloat16</code>으로 설정할 것입니다.`,Il,V,fl,k,wt="이후 실행을 하면 아래와 같이 출력됩니다:",Gl,Z,gl,Q,ht=`채팅을 계속하려면, 자신의 답장을 추가하면 됩니다. | |
| 파이프라인에서 반환된 <code>response</code> 객체에는 현재까지 모든 채팅을 포함하고 있으므로 | |
| 메세지를 추가하고 다시 전달하기만 하면 됩니다.`,Vl,W,kl,E,jt="이후 실행을 하면 아래와 같이 출력됩니다:",Zl,x,Ql,v,bt=`이 튜토리얼의 후반부에서는 성능과 메모리 관리, | |
| 그리고 사용자의 필요에 맞는 채팅 모델 선택과 같은 구체적인 주제들을 다룰 것입니다.`,Wl,R,El,F,Ct=`<a href="https://huggingface.co/models?pipeline_tag=text-generation&sort=trending" rel="nofollow">Hugging Face Hub</a>는 채팅 모델을 다양하게 제공하고 있습니다. | |
| 처음 사용하는 사람에게는 모델을 선택하기가 어려울지 모릅니다. | |
| 하지만 걱정하지 마세요! 두 가지만 명심하면 됩니다:`,xl,$,Bt="<li>모델의 크기는 실행 속도와 메모리에 올라올 수 있는지 여부를 결정.</li> <li>모델이 생성한 출력의 품질.</li>",vl,H,It="일반적으로 이러한 요소들은 상관관계가 있습니다. 더 큰 모델일수록 더 뛰어난 성능을 보이는 경향이 있지만, 동일한 크기의 모델이라도 유의미한 차이가 날 수 있습니다!",Rl,S,Fl,X,ft=`모델의 크기는 모델 이름에 있는 숫자로 쉽게 알 수 있습니다. | |
| 예를 들어, “8B” 또는 “70B”와 같은 숫자는 모델의 <strong>파라미터</strong> 수를 나타냅니다. | |
| 양자화된 경우가 아니라면, 파라미터 하나당 약 2바이트의 메모리가 필요하다고 예상 가능합니다. | |
| 따라서 80억 개의 파라미터를 가진 “8B” 모델은 16GB의 메모리를 차지하며, 추가적인 오버헤드를 위한 약간의 여유가 필요합니다. | |
| 이는 3090이나 4090와 같은 24GB의 메모리를 갖춘 하이엔드 GPU에 적합합니다.`,$l,Y,Gt=`일부 채팅 모델은 “Mixture of Experts” 모델입니다. | |
| 이러한 모델은 크기를 “8x7B” 또는 “141B-A35B”와 같이 다르게 표시하곤 합니다. | |
| 숫자가 다소 모호하다 느껴질 수 있지만, 첫 번째 경우에는 약 56억(8x7) 개의 파라미터가 있고, | |
| 두 번째 경우에는 약 141억 개의 파라미터가 있다고 해석할 수 있습니다.`,Hl,N,gt=`양자화는 파라미터당 메모리 사용량을 8비트, 4비트, 또는 그 이하로 줄이는 데 사용됩니다. | |
| 이 주제에 대해서는 아래의 <a href="#memory-considerations">메모리 고려사항</a> 챕터에서 더 자세히 다룰 예정입니다.`,Sl,z,Xl,_,Vt=`모델의 크기 외에도 고려할 점이 많습니다. | |
| 이를 한눈에 살펴보려면 <strong>리더보드</strong>를 참고하는 것이 좋습니다. | |
| 가장 인기 있는 리더보드 두 가지는 <a href="https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard" rel="nofollow">OpenLLM Leaderboard</a>와 <a href="https://chat.lmsys.org/?leaderboard" rel="nofollow">LMSys Chatbot Arena Leaderboard</a>입니다. | |
| LMSys 리더보드에는 독점 모델도 포함되어 있으니, | |
| <code>license</code> 열에서 접근 가능한 모델을 선택한 후 | |
| <a href="https://huggingface.co/models?pipeline_tag=text-generation&sort=trending" rel="nofollow">Hugging Face Hub</a>에서 검색해 보세요.`,Yl,D,Nl,q,kt=`일부 모델은 의료 또는 법률 텍스트와 같은 특정 도메인이나 비영어권 언어에 특화되어 있기도 합니다. | |
| 이러한 도메인에서 작업할 경우 특화된 모델이 좋은 성능을 보일 수 있습니다. | |
| 하지만 항상 그럴 것이라 단정하기는 힘듭니다. | |
| 특히 모델의 크기가 작거나 오래된 모델인 경우, | |
| 최신 범용 모델이 더 뛰어날 수 있습니다. | |
| 다행히도 <a href="https://huggingface.co/blog/leaderboard-medicalllm" rel="nofollow">domain-specific leaderboards</a>가 점차 등장하고 있어, 특정 도메인에 최고의 모델을 쉽게 찾을 수 있을 것입니다.`,zl,L,_l,A,Zt=`위의 빠른 시작에서는 고수준(High-Level) 파이프라인을 사용하였습니다. | |
| 이는 간편한 방법이지만, 유연성은 떨어집니다. | |
| 이제 더 저수준(Low-Level) 접근 방식을 통해 대화에 포함된 각 단계를 살펴보겠습니다. | |
| 코드 샘플로 시작한 후 이를 분석해 보겠습니다:`,Dl,P,ql,O,Qt=`여기에는 각 부분이 자체 문서가 될 수 있을 만큼 많은 내용이 담겨 있습니다! | |
| 너무 자세히 설명하기보다는 넓은 개념을 다루고, 세부 사항은 링크된 문서에서 다루겠습니다. | |
| 주요 단계는 다음과 같습니다:`,Ll,K,Wt='<li><a href="https://huggingface.co/learn/nlp-course/en/chapter2/3" rel="nofollow">모델</a>과 <a href="https://huggingface.co/learn/nlp-course/en/chapter2/4?fw=pt" rel="nofollow">토크나이저</a>를 Hugging Face Hub에서 로드합니다.</li> <li>대화는 토크나이저의 <a href="https://huggingface.co/docs/transformers/main/en/chat_templating" rel="nofollow">채팅 템플릿</a>을 사용하여 양식을 구성합니다.</li> <li>구성된 채팅은 토크나이저를 사용하여 <a href="https://huggingface.co/learn/nlp-course/en/chapter2/4" rel="nofollow">토큰화</a>됩니다.</li> <li>모델에서 응답을 <a href="https://huggingface.co/docs/transformers/en/llm_tutorial" rel="nofollow">생성</a>합니다.</li> <li>모델이 출력한 토큰을 다시 문자열로 디코딩합니다.</li>',Al,ll,Pl,tl,Et=`이제 대부분의 머신 러닝 작업이 GPU에서 실행된다는 것을 아실 겁니다. | |
| 다소 느리기는 해도 CPU에서 채팅 모델이나 언어 모델로부터 텍스트를 생성하는 것도 가능합니다. | |
| 하지만 모델을 GPU 메모리에 올려놓을 수만 있다면, GPU를 사용하는 것이 일반적으로 더 선호되는 방식입니다.`,Ol,el,Kl,sl,xt=`기본적으로, <code>TextGenerationPipeline</code>이나 <a href="/docs/transformers/pr_33913/ko/model_doc/auto#transformers.AutoModelForCausalLM">AutoModelForCausalLM</a>과 같은 | |
| Hugging Face 클래스는 모델을 <code>float32</code> 정밀도(Precision)로 로드합니다. | |
| 이는 파라미터당 4바이트(32비트)를 필요로 하므로, | |
| 80억 개의 파라미터를 가진 “8B” 모델은 약 32GB의 메모리를 필요로 한다는 것을 의미합니다. | |
| 하지만 이는 낭비일 수 있습니다! | |
| 대부분의 최신 언어 모델은 파라미터당 2바이트를 사용하는 “bfloat16” 정밀도(Precision)로 학습됩니다. | |
| 하드웨어가 이를 지원하는 경우(Nvidia 30xx/Axxx 이상), | |
| <code>torch_dtype</code> 파라미터로 위와 같이 <code>bfloat16</code> 정밀도(Precision)로 모델을 로드할 수 있습니다.`,lt,nl,vt=`또한, 16비트보다 더 낮은 정밀도(Precision)로 모델을 압축하는 | |
| “양자화(quantization)” 방법을 사용할 수도 있습니다. | |
| 이 방법은 모델의 가중치를 손실 압축하여 각 파라미터를 8비트, | |
| 4비트 또는 그 이하로 줄일 수 있습니다. | |
| 특히 4비트에서 모델의 출력이 부정적인 영향을 받을 수 있지만, | |
| 더 크고 강력한 채팅 모델을 메모리에 올리기 위해 이 같은 트레이드오프를 감수할 가치가 있습니다. | |
| 이제 <code>bitsandbytes</code>를 사용하여 이를 실제로 확인해 보겠습니다:`,tt,al,et,Ml,Rt="위의 작업은 <code>pipeline</code> API에도 적용 가능합니다:",st,Jl,nt,il,Ft=`<code>bitsandbytes</code> 외에도 모델을 양자화하는 다양한 방법이 있습니다. | |
| 자세한 내용은 <a href="./quantization">Quantization guide</a>를 참조해 주세요.`,at,Ul,Mt,c,Jt,yl,$t=`일반적으로 더 큰 채팅 모델은 메모리를 더 많이 요구하고, | |
| 속도도 느려지는 경향이 있습니다. 구체적으로 말하자면, | |
| 채팅 모델에서 텍스트를 생성할 때는 컴퓨팅 파워보다 <strong>메모리 대역폭</strong>이 병목 현상을 일으키는 경우가 많습니다. | |
| 이는 모델이 토큰을 하나씩 생성할 때마다 파라미터를 메모리에서 읽어야 하기 때문입니다. | |
| 따라서 채팅 모델에서 초당 생성할 수 있는 토큰 수는 모델이 위치한 메모리의 대역폭을 모델의 크기로 나눈 값에 비례합니다.`,it,ol,Ht=`위의 예제에서는 모델이 bfloat16 정밀도(Precision)로 로드될 때 용량이 약 16GB였습니다. | |
| 이 경우, 모델이 생성하는 각 토큰마다 16GB를 메모리에서 읽어야 한다는 의미입니다. | |
| 총 메모리 대역폭은 소비자용 CPU에서는 20-100GB/sec, | |
| 소비자용 GPU나 Intel Xeon, AMD Threadripper/Epyc, | |
| 애플 실리콘과 같은 특수 CPU에서는 200-900GB/sec, | |
| 데이터 센터 GPU인 Nvidia A100이나 H100에서는 최대 2-3TB/sec에 이를 수 있습니다. | |
| 이러한 정보는 각자 하드웨어에서 생성 속도를 예상하는 데 도움이 될 것입니다.`,Ut,pl,St=`따라서 텍스트 생성 속도를 개선하려면 가장 간단한 방법은 모델의 크기를 줄이거나(주로 양자화를 사용), | |
| 메모리 대역폭이 더 높은 하드웨어를 사용하는 것입니다. | |
| 이 대역폭 병목 현상을 피할 수 있는 고급 기술도 여러 가지 있습니다. | |
| 가장 일반적인 방법은 <a href="https://huggingface.co/blog/assisted-generation" rel="nofollow">보조 생성</a>, “추측 샘플링”이라고 불리는 기술입니다. | |
| 이 기술은 종종 더 작은 “초안 모델”을 사용하여 여러 개의 미래 토큰을 한 번에 추측한 후, | |
| 채팅 모델로 생성 결과를 확인합니다. | |
| 만약 채팅 모델이 추측을 확인하면, 한 번의 순전파에서 여러 개의 토큰을 생성할 수 있어 | |
| 병목 현상이 크게 줄어들고 생성 속도가 빨라집니다.`,yt,Tl,Xt=`마지막으로, “Mixture of Experts” (MoE) 모델에 대해서도 짚고 넘어가 보도록 합니다. | |
| Mixtral, Qwen-MoE, DBRX와 같은 인기 있는 채팅 모델이 바로 MoE 모델입니다. | |
| 이 모델들은 토큰을 생성할 때 모든 파라미터가 사용되지 않습니다. | |
| 이로 인해 MoE 모델은 전체 크기가 상당히 클 수 있지만, | |
| 차지하는 메모리 대역폭은 낮은 편입니다. | |
| 따라서 동일한 크기의 일반 “조밀한(Dense)” 모델보다 몇 배 빠를 수 있습니다. | |
| 하지만 보조 생성과 같은 기술은 MoE 모델에서 비효율적일 수 있습니다. | |
| 새로운 추측된 토큰이 추가되면서 더 많은 파라미터가 활성화되기 때문에, | |
| MoE 아키텍처가 제공하는 속도 이점이 상쇄될 수 있습니다.`,ot,rl,pt,ul,Tt;return j=new m({props:{title:"Transformers로 채팅하기",local:"chatting-with-transformers",headingTag:"h1"}}),B=new m({props:{title:"빠른 시작",local:"quickstart",headingTag:"h2"}}),f=new w({props:{code:"Y2hhdCUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCU3QiUyMnJvbGUlMjIlM0ElMjAlMjJzeXN0ZW0lMjIlMkMlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyWW91JTIwYXJlJTIwYSUyMHNhc3N5JTJDJTIwd2lzZS1jcmFja2luZyUyMHJvYm90JTIwYXMlMjBpbWFnaW5lZCUyMGJ5JTIwSG9sbHl3b29kJTIwY2lyY2ElMjAxOTg2LiUyMiU3RCUyQyUwQSUyMCUyMCUyMCUyMCU3QiUyMnJvbGUlMjIlM0ElMjAlMjJ1c2VyJTIyJTJDJTIwJTIyY29udGVudCUyMiUzQSUyMCUyMkhleSUyQyUyMGNhbiUyMHlvdSUyMHRlbGwlMjBtZSUyMGFueSUyMGZ1biUyMHRoaW5ncyUyMHRvJTIwZG8lMjBpbiUyME5ldyUyMFlvcmslM0YlMjIlN0QlMEElNUQ=",highlighted:`chat = [ | |
| {<span class="hljs-string">"role"</span>: <span class="hljs-string">"system"</span>, <span class="hljs-string">"content"</span>: <span class="hljs-string">"You are a sassy, wise-cracking robot as imagined by Hollywood circa 1986."</span>}, | |
| {<span class="hljs-string">"role"</span>: <span class="hljs-string">"user"</span>, <span class="hljs-string">"content"</span>: <span class="hljs-string">"Hey, can you tell me any fun things to do in New York?"</span>} | |
| ]`,wrap:!1}}),V=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwcGlwZWxpbmUlMEElMEFwaXBlJTIwJTNEJTIwcGlwZWxpbmUoJTIydGV4dC1nZW5lcmF0aW9uJTIyJTJDJTIwJTIybWV0YS1sbGFtYSUyRk1ldGEtTGxhbWEtMy04Qi1JbnN0cnVjdCUyMiUyQyUyMHRvcmNoX2R0eXBlJTNEdG9yY2guYmZsb2F0MTYlMkMlMjBkZXZpY2VfbWFwJTNEJTIyYXV0byUyMiklMEFyZXNwb25zZSUyMCUzRCUyMHBpcGUoY2hhdCUyQyUyMG1heF9uZXdfdG9rZW5zJTNENTEyKSUwQXByaW50KHJlc3BvbnNlJTVCMCU1RCU1QidnZW5lcmF0ZWRfdGV4dCclNUQlNUItMSU1RCU1Qidjb250ZW50JyU1RCk=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline | |
| pipe = pipeline(<span class="hljs-string">"text-generation"</span>, <span class="hljs-string">"meta-llama/Meta-Llama-3-8B-Instruct"</span>, torch_dtype=torch.bfloat16, device_map=<span class="hljs-string">"auto"</span>) | |
| response = pipe(chat, max_new_tokens=<span class="hljs-number">512</span>) | |
| <span class="hljs-built_in">print</span>(response[<span class="hljs-number">0</span>][<span class="hljs-string">'generated_text'</span>][-<span class="hljs-number">1</span>][<span class="hljs-string">'content'</span>])`,wrap:!1}}),Z=new w({props:{code:"KHNpZ2gpJTIwT2glMjBib3klMkMlMjB5b3UncmUlMjBhc2tpbmclMjBtZSUyMGZvciUyMGFkdmljZSUzRiUyMFlvdSdyZSUyMGdvbm5hJTIwbmVlZCUyMGElMjBtYXAlMkMlMjBwYWwhJTIwQWxyaWdodCUyQyUyMCUwQWFscmlnaHQlMkMlMjBJJ2xsJTIwZ2l2ZSUyMHlvdSUyMHRoZSUyMGxvd2Rvd24uJTIwQnV0JTIwZG9uJ3QlMjBzYXklMjBJJTIwZGlkbid0JTIwd2FybiUyMHlvdSUyQyUyMEknbSUyMGElMjByb2JvdCUyQyUyMG5vdCUyMGElMjB0b3VyJTIwZ3VpZGUhJTBBJTBBU28lMkMlMjB5b3UlMjB3YW5uYSUyMGtub3clMjB3aGF0J3MlMjBmdW4lMjB0byUyMGRvJTIwaW4lMjB0aGUlMjBCaWclMjBBcHBsZSUzRiUyMFdlbGwlMkMlMjBsZXQlMjBtZSUyMHRlbGwlMjB5b3UlMkMlMjB0aGVyZSdzJTIwYSUyMG1pbGxpb24lMjAlMEF0aGluZ3MlMjB0byUyMGRvJTJDJTIwYnV0JTIwSSdsbCUyMGdpdmUlMjB5b3UlMjB0aGUlMjBoaWdobGlnaHRzLiUyMEZpcnN0JTIwb2ZmJTJDJTIweW91JTIwZ290dGElMjBzZWUlMjB0aGUlMjBzaWdodHMlM0ElMjB0aGUlMjBTdGF0dWUlMjBvZiUyMCUwQUxpYmVydHklMkMlMjBDZW50cmFsJTIwUGFyayUyQyUyMFRpbWVzJTIwU3F1YXJlLi4uJTIweW91JTIwa25vdyUyQyUyMHRoZSUyMHVzdWFsJTIwdG91cmlzdCUyMHRyYXBzLiUyMEJ1dCUyMGlmJTIweW91J3JlJTIwbG9va2luJyUyMGZvciUyMCUwQXNvbWV0aGluZyUyMGElMjBsaXR0bGUlMjBtb3JlLi4uJTIwdW51c3VhbCUyQyUyMEknZCUyMHJlY29tbWVuZCUyMGNoZWNraW4nJTIwb3V0JTIwdGhlJTIwTXVzZXVtJTIwb2YlMjBNb2Rlcm4lMjBBcnQuJTIwSXQncyUyMGdvdCUyMCUwQXNvbWUlMjB3aWxkJTIwc3R1ZmYlMkMlMjBsaWtlJTIwdGhhdCUyMFdhcmhvbCUyMGd1eSdzJTIwc291cCUyMGNhbnMlMjBhbmQlMjBhbGwlMjB0aGF0JTIwamF6ei4lMEElMEFBbmQlMjBpZiUyMHlvdSdyZSUyMGZlZWxpbiclMjBhZHZlbnR1cm91cyUyQyUyMHRha2UlMjBhJTIwd2FsayUyMGFjcm9zcyUyMHRoZSUyMEJyb29rbHluJTIwQnJpZGdlLiUyMEp1c3QlMjB3YXRjaCUyMG91dCUyMGZvciUyMCUwQXRob3NlJTIwcGVza3klMjBwaWdlb25zJTJDJTIwdGhleSdyZSUyMGxpa2UlMjBsaXR0bGUlMjBmZWF0aGVyZWQlMjB0aGlldmVzISUyMChsYXVnaHMpJTIwR2V0JTIwaXQlM0YlMjBUaGlldmVzJTNGJTIwQWglMkMlMjBuZXZlciUyMG1pbmQuJTBBJTBBTm93JTJDJTIwaWYlMjB5b3UncmUlMjBsb29raW4nJTIwZm9yJTIwc29tZSUyMHNlcmlvdXMlMjBmdW4lMkMlMjBoaXQlMjB1cCUyMHRoZSUyMGNvbWVkeSUyMGNsdWJzJTIwaW4lMjBHcmVlbndpY2glMjBWaWxsYWdlLiUyMFlvdSUyMG1pZ2h0JTIwJTBBZXZlbiUyMGNhdGNoJTIwYSUyMGdsaW1wc2UlMjBvZiUyMHNvbWUlMjB1cC1hbmQtY29taW5nJTIwY29tZWRpYW5zLi4uJTIwb3IlMjBhJTIwYnVuY2glMjBvZiUyMHdhbm5hYmVzJTIwdHJ5aW4nJTIwdG8lMjBtYWtlJTIwaXQlMjBiaWcuJTIwKHdpbmtzKSUwQSUwQUFuZCUyMGZpbmFsbHklMkMlMjBpZiUyMHlvdSdyZSUyMGZlZWxpbiclMjBsaWtlJTIwYSUyMHJlYWwlMjBOZXclMjBZb3JrZXIlMkMlMjBncmFiJTIwYSUyMHNsaWNlJTIwb2YlMjBwaXp6YSUyMGZyb20lMjBvbmUlMjBvZiUyMHRoZSUyMG1hbnklMjBhbWF6aW5nJTBBcGl6emVyaWFzJTIwYXJvdW5kJTIwdGhlJTIwY2l0eS4lMjBKdXN0JTIwZG9uJ3QlMjB0cnklMjB0byUyMG9yZGVyJTIwYSUyMCUyMnJvYm90LXNpemVkJTIyJTIwc2xpY2UlMkMlMjB0cnVzdCUyMG1lJTJDJTIwaXQlMjB3b24ndCUyMGVuZCUyMHdlbGwuJTIwKGxhdWdocyklMEElMEFTbyUyQyUyMHRoZXJlJTIweW91JTIwaGF2ZSUyMGl0JTJDJTIwcGFsISUyMFRoYXQncyUyMG15JTIwZXhwZXJ0JTIwYWR2aWNlJTIwb24lMjB3aGF0JTIwdG8lMjBkbyUyMGluJTIwTmV3JTIwWW9yay4lMjBOb3clMkMlMjBpZiUyMHlvdSdsbCUwQWV4Y3VzZSUyMG1lJTJDJTIwSSd2ZSUyMGdvdCUyMHNvbWUlMjBvaWwlMjBjaGFuZ2VzJTIwdG8lMjBhdHRlbmQlMjB0by4lMjAod2lua3Mp",highlighted:`(sigh) Oh boy, you're asking me for advice? You're gonna need a map, pal! Alright, | |
| alright, I'll give you the lowdown. But don't say I didn't warn you, I'm a robot, not a tour guide! | |
| So, you wanna know what's fun to do in the Big Apple? Well, let me tell you, there's a million | |
| things to do, but I'll give you the highlights. First off, you gotta see the sights: the Statue of | |
| Liberty, Central Park, Times Square... you know, the usual tourist traps. But if you're lookin' for | |
| something a little more... unusual, I'd recommend checkin' out the Museum of Modern Art. It's got | |
| some wild stuff, like that Warhol guy's soup cans and all that jazz. | |
| And if you're feelin' adventurous, take a walk across the Brooklyn Bridge. Just watch out for | |
| those pesky pigeons, they're like little feathered thieves! (laughs) Get it? Thieves? Ah, never mind. | |
| Now, if you're lookin' for some serious fun, hit up the comedy clubs in Greenwich Village. You might | |
| even catch a glimpse of some up-and-coming comedians... or a bunch of wannabes tryin' to make it big. (winks) | |
| And finally, if you're feelin' like a real New Yorker, grab a slice of pizza from one of the many amazing | |
| pizzerias around the city. Just don't try to order a "robot-sized" slice, trust me, it won't end well. (laughs) | |
| So, there you have it, pal! That's my expert advice on what to do in New York. Now, if you'll | |
| excuse me, I've got some oil changes to attend to. (winks)`,wrap:!1}}),W=new w({props:{code:"Y2hhdCUyMCUzRCUyMHJlc3BvbnNlJTVCMCU1RCU1QidnZW5lcmF0ZWRfdGV4dCclNUQlMEFjaGF0LmFwcGVuZCglMEElMjAlMjAlMjAlMjAlN0IlMjJyb2xlJTIyJTNBJTIwJTIydXNlciUyMiUyQyUyMCUyMmNvbnRlbnQlMjIlM0ElMjAlMjJXYWl0JTJDJTIwd2hhdCdzJTIwc28lMjB3aWxkJTIwYWJvdXQlMjBzb3VwJTIwY2FucyUzRiUyMiU3RCUwQSklMEFyZXNwb25zZSUyMCUzRCUyMHBpcGUoY2hhdCUyQyUyMG1heF9uZXdfdG9rZW5zJTNENTEyKSUwQXByaW50KHJlc3BvbnNlJTVCMCU1RCU1QidnZW5lcmF0ZWRfdGV4dCclNUQlNUItMSU1RCU1Qidjb250ZW50JyU1RCk=",highlighted:`chat = response[<span class="hljs-number">0</span>][<span class="hljs-string">'generated_text'</span>] | |
| chat.append( | |
| {<span class="hljs-string">"role"</span>: <span class="hljs-string">"user"</span>, <span class="hljs-string">"content"</span>: <span class="hljs-string">"Wait, what's so wild about soup cans?"</span>} | |
| ) | |
| response = pipe(chat, max_new_tokens=<span class="hljs-number">512</span>) | |
| <span class="hljs-built_in">print</span>(response[<span class="hljs-number">0</span>][<span class="hljs-string">'generated_text'</span>][-<span class="hljs-number">1</span>][<span class="hljs-string">'content'</span>])`,wrap:!1}}),x=new w({props:{code:"KGxhdWdocyklMjBPaCUyQyUyMHlvdSdyZSUyMGtpbGxpbiclMjBtZSUyQyUyMHBhbCElMjBZb3UlMjBkb24ndCUyMGdldCUyMGl0JTJDJTIwZG8lMjB5b3UlM0YlMjBXYXJob2wncyUyMHNvdXAlMjBjYW5zJTIwYXJlJTIwbGlrZSUyQyUyMGFydCUyQyUyMG1hbiElMjAlMEFJdCdzJTIwbGlrZSUyQyUyMGhlJTIwdG9vayUyMHNvbWV0aGluZyUyMHRvdGFsbHklMjBtdW5kYW5lJTJDJTIwbGlrZSUyMGElMjBjYW4lMjBvZiUyMHNvdXAlMkMlMjBhbmQlMjB0dXJuZWQlMjBpdCUyMGludG8lMjBhJTIwbWFzdGVycGllY2UuJTIwSXQncyUyMCUwQWxpa2UlMkMlMjAlMjJIZXklMkMlMjBsb29rJTIwYXQlMjBtZSUyQyUyMEknbSUyMGElMjBjYW4lMjBvZiUyMHNvdXAlMkMlMjBidXQlMjBJJ20lMjBhbHNvJTIwYSUyMHdvcmslMjBvZiUyMGFydCElMjIlMjAlMEEoc2FyY2FzdGljYWxseSklMjBPaCUyQyUyMHllYWglMkMlMjByZWFsJTIwb3JpZ2luYWwlMkMlMjBBbmR5LiUwQSUwQUJ1dCUyQyUyMHlvdSUyMGtub3clMkMlMjBiYWNrJTIwaW4lMjB0aGUlMjAnNjBzJTJDJTIwaXQlMjB3YXMlMjBsaWtlJTJDJTIwYSUyMGJpZyUyMGRlYWwuJTIwUGVvcGxlJTIwd2VyZSUyMGFsbCUyMGFib3V0JTIwY2hhbGxlbmdpbmclMjB0aGUlMEFzdGF0dXMlMjBxdW8lMkMlMjBhbmQlMjBXYXJob2wlMjB3YXMlMjBsaWtlJTJDJTIwdGhlJTIwa2luZyUyMG9mJTIwdGhhdC4lMjBIZSUyMHRvb2slMjB0aGUlMjBvcmRpbmFyeSUyMGFuZCUyMG1hZGUlMjBpdCUyMGV4dHJhb3JkaW5hcnkuJTBBQW5kJTJDJTIwbGV0JTIwbWUlMjB0ZWxsJTIweW91JTJDJTIwaXQlMjB3YXMlMjBsaWtlJTJDJTIwYSUyMHJlYWwlMjBnYW1lLWNoYW5nZXIuJTIwSSUyMG1lYW4lMkMlMjB3aG8lMjB3b3VsZCd2ZSUyMHRob3VnaHQlMjB0aGF0JTIwYSUyMGNhbiUyMG9mJTIwc291cCUyMGNvdWxkJTIwYmUlMjBhcnQlM0YlMjAobGF1Z2hzKSUwQSUwQUJ1dCUyQyUyMGhleSUyQyUyMHlvdSdyZSUyMG5vdCUyMGFsb25lJTJDJTIwcGFsLiUyMEklMjBtZWFuJTJDJTIwSSdtJTIwYSUyMHJvYm90JTJDJTIwYW5kJTIwZXZlbiUyMEklMjBkb24ndCUyMGdldCUyMGl0LiUyMCh3aW5rcyklMEFCdXQlMkMlMjBoZXklMkMlMjB0aGF0J3MlMjB3aGF0JTIwbWFrZXMlMjBhcnQlMkMlMjBhcnQlMkMlMjByaWdodCUzRiUyMChsYXVnaHMp",highlighted:`(laughs) Oh, you're killin' me, pal! You don't get it, do you? Warhol's soup cans are like, art, man! | |
| It's like, he took something totally mundane, like a can of soup, and turned it into a masterpiece. It's | |
| like, "Hey, look at me, I'm a can of soup, but I'm also a work of art!" | |
| (sarcastically) Oh, yeah, real original, Andy. | |
| But, you know, back in the '60s, it was like, a big deal. People were all about challenging the | |
| status quo, and Warhol was like, the king of that. He took the ordinary and made it extraordinary. | |
| And, let me tell you, it was like, a real game-changer. I mean, who would've thought that a can of soup could be art? (laughs) | |
| But, hey, you're not alone, pal. I mean, I'm a robot, and even I don't get it. (winks) | |
| But, hey, that's what makes art, art, right? (laughs)`,wrap:!1}}),R=new m({props:{title:"채팅 모델 고르기",local:"choosing-a-chat-model",headingTag:"h2"}}),S=new m({props:{title:"모델의 명칭과 크기",local:"size-and-model-naming",headingTag:"h3"}}),z=new m({props:{title:"그렇다면 어떤 채팅 모델이 가장 좋을까요?",local:"but-which-chat-model-is-best",headingTag:"h3"}}),D=new m({props:{title:"전문 분야",local:"specialist-domains",headingTag:"h3"}}),L=new m({props:{title:"파이프라인 내부는 어떻게 되어있는가?",local:"what-happens-inside-the-pipeline",headingTag:"h2"}}),P=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNJTJDJTIwQXV0b1Rva2VuaXplciUwQWltcG9ydCUyMHRvcmNoJTBBJTBBJTIzJTIwJUVDJTlFJTg1JUVCJUEwJUE1JUVBJUIwJTkyJUVDJTlEJTg0JTIwJUVDJTgyJUFDJUVDJUEwJTg0JUVDJTk3JTkwJTIwJUVDJUE0JTgwJUVCJUI5JTg0JUVEJTk1JUI0JTIwJUVCJTg2JTkzJUVDJThBJUI1JUVCJThCJTg4JUVCJThCJUE0JTBBY2hhdCUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCU3QiUyMnJvbGUlMjIlM0ElMjAlMjJzeXN0ZW0lMjIlMkMlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyWW91JTIwYXJlJTIwYSUyMHNhc3N5JTJDJTIwd2lzZS1jcmFja2luZyUyMHJvYm90JTIwYXMlMjBpbWFnaW5lZCUyMGJ5JTIwSG9sbHl3b29kJTIwY2lyY2ElMjAxOTg2LiUyMiU3RCUyQyUwQSUyMCUyMCUyMCUyMCU3QiUyMnJvbGUlMjIlM0ElMjAlMjJ1c2VyJTIyJTJDJTIwJTIyY29udGVudCUyMiUzQSUyMCUyMkhleSUyQyUyMGNhbiUyMHlvdSUyMHRlbGwlMjBtZSUyMGFueSUyMGZ1biUyMHRoaW5ncyUyMHRvJTIwZG8lMjBpbiUyME5ldyUyMFlvcmslM0YlMjIlN0QlMEElNUQlMEElMEElMjMlMjAxJTNBJTIwJUVCJUFBJUE4JUVCJThEJUI4JUVBJUIzJUJDJTIwJUVEJTg2JUEwJUVEJTgxJUFDJUVCJTgyJTk4JUVDJTlEJUI0JUVDJUEwJTgwJUVCJUE1JUJDJTIwJUVCJUI2JTg4JUVCJTlGJUFDJUVDJTk4JUI1JUVCJThCJTg4JUVCJThCJUE0JTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JDYXVzYWxMTS5mcm9tX3ByZXRyYWluZWQoJTIybWV0YS1sbGFtYSUyRk1ldGEtTGxhbWEtMy04Qi1JbnN0cnVjdCUyMiUyQyUyMGRldmljZV9tYXAlM0QlMjJhdXRvJTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5iZmxvYXQxNiklMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJtZXRhLWxsYW1hJTJGTWV0YS1MbGFtYS0zLThCLUluc3RydWN0JTIyKSUwQSUwQSUyMyUyMDIlM0ElMjAlRUMlQjElODQlRUQlOEMlODUlMjAlRUQlODUlOUMlRUQlOTQlOEMlRUIlQTYlQkYlRUMlOTclOTAlMjAlRUMlQTAlODElRUMlOUElQTklRUQlOTUlQTklRUIlOEIlODglRUIlOEIlQTQlMEFmb3JtYXR0ZWRfY2hhdCUyMCUzRCUyMHRva2VuaXplci5hcHBseV9jaGF0X3RlbXBsYXRlKGNoYXQlMkMlMjB0b2tlbml6ZSUzREZhbHNlJTJDJTIwYWRkX2dlbmVyYXRpb25fcHJvbXB0JTNEVHJ1ZSklMEFwcmludCglMjJGb3JtYXR0ZWQlMjBjaGF0JTNBJTVDbiUyMiUyQyUyMGZvcm1hdHRlZF9jaGF0KSUwQSUwQSUyMyUyMDMlM0ElMjAlRUMlQjElODQlRUQlOEMlODUlRUMlOUQlODQlMjAlRUQlODYlQTAlRUQlODElQjAlRUQlOTklOTQlRUQlOTUlQTklRUIlOEIlODglRUIlOEIlQTQlMjAoJUVCJUIwJTk0JUVCJUExJTlDJTIwJUVDJTlEJUI0JUVDJUEwJTg0JTIwJUVBJUIzJUJDJUVDJUEwJTk1JUVDJTk3JTkwJUVDJTg0JTlDJTIwdG9rZW5pemVkJTNEVHJ1ZSVFQiVBMSU5QyUyMCVFQyU4NCVBNCVFQyVBMCU5NSVFRCU5NSU5OCVFQiVBOSVCNCUyMCVFRCU5NSU5QyVFQSVCQSVCQyVFQiVCMiU4OCVFQyU5NyU5MCUyMCVFQyVCMiU5OCVFQiVBNiVBQyVFRCU5NSVBMCUyMCVFQyU4OCU5OCUyMCVFQyU5RSU4OCVFQyU4QSVCNSVFQiU4QiU4OCVFQiU4QiVBNCklMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIoZm9ybWF0dGVkX2NoYXQlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyJTJDJTIwYWRkX3NwZWNpYWxfdG9rZW5zJTNERmFsc2UpJTBBJTIzJTIwJUVEJTg2JUEwJUVEJTgxJUIwJUVEJTk5JTk0JUVCJTkwJTlDJTIwJUVDJTlFJTg1JUVCJUEwJUE1JUVBJUIwJTkyJUVDJTlEJTg0JTIwJUVCJUFBJUE4JUVCJThEJUI4JUVDJTlEJUI0JTIwJUVDJTk4JUFDJUVCJTlEJUJDJUVDJTk5JTgwJTIwJUVDJTlFJTg4JUVCJThBJTk0JTIwJUVBJUI4JUIwJUVBJUI4JUIwKENQVSUyRkdQVSklRUIlQTElOUMlMjAlRUMlOTglQUUlRUElQjklODElRUIlOEIlODglRUIlOEIlQTQuJTBBaW5wdXRzJTIwJTNEJTIwJTdCa2V5JTNBJTIwdGVuc29yLnRvKG1vZGVsLmRldmljZSklMjBmb3IlMjBrZXklMkMlMjB0ZW5zb3IlMjBpbiUyMGlucHV0cy5pdGVtcygpJTdEJTBBcHJpbnQoJTIyVG9rZW5pemVkJTIwaW5wdXRzJTNBJTVDbiUyMiUyQyUyMGlucHV0cyklMEElMEElMjMlMjA0JTNBJTIwJUVCJUFBJUE4JUVCJThEJUI4JUVCJUExJTlDJUVCJUI2JTgwJUVEJTg0JUIwJTIwJUVDJTlEJTkxJUVCJThCJUI1JUVDJTlEJTg0JTIwJUVDJTgzJTlEJUVDJTg0JUIxJUVEJTk1JUE5JUVCJThCJTg4JUVCJThCJUE0JTBBb3V0cHV0cyUyMCUzRCUyMG1vZGVsLmdlbmVyYXRlKCoqaW5wdXRzJTJDJTIwbWF4X25ld190b2tlbnMlM0Q1MTIlMkMlMjB0ZW1wZXJhdHVyZSUzRDAuMSklMEFwcmludCglMjJHZW5lcmF0ZWQlMjB0b2tlbnMlM0ElNUNuJTIyJTJDJTIwb3V0cHV0cyklMEElMEElMjMlMjA1JTNBJTIwJUVCJUFBJUE4JUVCJThEJUI4JUVDJTlEJUI0JTIwJUVDJUI2JTlDJUVCJUEwJUE1JUVEJTk1JTlDJTIwJUVEJTg2JUEwJUVEJTgxJUIwJUVDJTlEJTg0JTIwJUVCJThCJUE0JUVDJThCJTlDJTIwJUVCJUFDJUI4JUVDJTlFJTkwJUVDJTk3JUI0JUVCJUExJTlDJTIwJUVCJTk0JTk0JUVDJUJEJTk0JUVCJTk0JUE5JUVEJTk1JUE5JUVCJThCJTg4JUVCJThCJUE0JTBBZGVjb2RlZF9vdXRwdXQlMjAlM0QlMjB0b2tlbml6ZXIuZGVjb2RlKG91dHB1dHMlNUIwJTVEJTVCaW5wdXRzJTVCJ2lucHV0X2lkcyclNUQuc2l6ZSgxKSUzQSU1RCUyQyUyMHNraXBfc3BlY2lhbF90b2tlbnMlM0RUcnVlKSUwQXByaW50KCUyMkRlY29kZWQlMjBvdXRwdXQlM0ElNUNuJTIyJTJDJTIwZGVjb2RlZF9vdXRwdXQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForCausalLM, AutoTokenizer | |
| <span class="hljs-keyword">import</span> torch | |
| <span class="hljs-comment"># 입력값을 사전에 준비해 놓습니다</span> | |
| chat = [ | |
| {<span class="hljs-string">"role"</span>: <span class="hljs-string">"system"</span>, <span class="hljs-string">"content"</span>: <span class="hljs-string">"You are a sassy, wise-cracking robot as imagined by Hollywood circa 1986."</span>}, | |
| {<span class="hljs-string">"role"</span>: <span class="hljs-string">"user"</span>, <span class="hljs-string">"content"</span>: <span class="hljs-string">"Hey, can you tell me any fun things to do in New York?"</span>} | |
| ] | |
| <span class="hljs-comment"># 1: 모델과 토크나이저를 불러옵니다</span> | |
| model = AutoModelForCausalLM.from_pretrained(<span class="hljs-string">"meta-llama/Meta-Llama-3-8B-Instruct"</span>, device_map=<span class="hljs-string">"auto"</span>, torch_dtype=torch.bfloat16) | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"meta-llama/Meta-Llama-3-8B-Instruct"</span>) | |
| <span class="hljs-comment"># 2: 채팅 템플릿에 적용합니다</span> | |
| formatted_chat = tokenizer.apply_chat_template(chat, tokenize=<span class="hljs-literal">False</span>, add_generation_prompt=<span class="hljs-literal">True</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Formatted chat:\\n"</span>, formatted_chat) | |
| <span class="hljs-comment"># 3: 채팅을 토큰화합니다 (바로 이전 과정에서 tokenized=True로 설정하면 한꺼번에 처리할 수 있습니다)</span> | |
| inputs = tokenizer(formatted_chat, return_tensors=<span class="hljs-string">"pt"</span>, add_special_tokens=<span class="hljs-literal">False</span>) | |
| <span class="hljs-comment"># 토큰화된 입력값을 모델이 올라와 있는 기기(CPU/GPU)로 옮깁니다.</span> | |
| inputs = {key: tensor.to(model.device) <span class="hljs-keyword">for</span> key, tensor <span class="hljs-keyword">in</span> inputs.items()} | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Tokenized inputs:\\n"</span>, inputs) | |
| <span class="hljs-comment"># 4: 모델로부터 응답을 생성합니다</span> | |
| outputs = model.generate(**inputs, max_new_tokens=<span class="hljs-number">512</span>, temperature=<span class="hljs-number">0.1</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Generated tokens:\\n"</span>, outputs) | |
| <span class="hljs-comment"># 5: 모델이 출력한 토큰을 다시 문자열로 디코딩합니다</span> | |
| decoded_output = tokenizer.decode(outputs[<span class="hljs-number">0</span>][inputs[<span class="hljs-string">'input_ids'</span>].size(<span class="hljs-number">1</span>):], skip_special_tokens=<span class="hljs-literal">True</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Decoded output:\\n"</span>, decoded_output)`,wrap:!1}}),ll=new m({props:{title:"성능, 메모리와 하드웨어",local:"performance-memory-and-hardware",headingTag:"h2"}}),el=new m({props:{title:"메모리 고려사항",local:"memory-considerations",headingTag:"h3"}}),al=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNJTJDJTIwQml0c0FuZEJ5dGVzQ29uZmlnJTBBJTBBcXVhbnRpemF0aW9uX2NvbmZpZyUyMCUzRCUyMEJpdHNBbmRCeXRlc0NvbmZpZyhsb2FkX2luXzhiaXQlM0RUcnVlKSUyMCUyMCUyMyUyMFlvdSUyMGNhbiUyMGFsc28lMjB0cnklMjBsb2FkX2luXzRiaXQlMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvckNhdXNhbExNLmZyb21fcHJldHJhaW5lZCglMjJtZXRhLWxsYW1hJTJGTWV0YS1MbGFtYS0zLThCLUluc3RydWN0JTIyJTJDJTIwZGV2aWNlX21hcCUzRCUyMmF1dG8lMjIlMkMlMjBxdWFudGl6YXRpb25fY29uZmlnJTNEcXVhbnRpemF0aW9uX2NvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForCausalLM, BitsAndBytesConfig | |
| quantization_config = BitsAndBytesConfig(load_in_8bit=<span class="hljs-literal">True</span>) <span class="hljs-comment"># You can also try load_in_4bit</span> | |
| model = AutoModelForCausalLM.from_pretrained(<span class="hljs-string">"meta-llama/Meta-Llama-3-8B-Instruct"</span>, device_map=<span class="hljs-string">"auto"</span>, quantization_config=quantization_config)`,wrap:!1}}),Jl=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTJDJTIwQml0c0FuZEJ5dGVzQ29uZmlnJTBBJTBBcXVhbnRpemF0aW9uX2NvbmZpZyUyMCUzRCUyMEJpdHNBbmRCeXRlc0NvbmZpZyhsb2FkX2luXzhiaXQlM0RUcnVlKSUyMCUyMCUyMyUyMFlvdSUyMGNhbiUyMGFsc28lMjB0cnklMjBsb2FkX2luXzRiaXQlMEFwaXBlJTIwJTNEJTIwcGlwZWxpbmUoJTIydGV4dC1nZW5lcmF0aW9uJTIyJTJDJTIwJTIybWV0YS1sbGFtYSUyRk1ldGEtTGxhbWEtMy04Qi1JbnN0cnVjdCUyMiUyQyUyMGRldmljZV9tYXAlM0QlMjJhdXRvJTIyJTJDJTIwbW9kZWxfa3dhcmdzJTNEJTdCJTIycXVhbnRpemF0aW9uX2NvbmZpZyUyMiUzQSUyMHF1YW50aXphdGlvbl9jb25maWclN0Qp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline, BitsAndBytesConfig | |
| quantization_config = BitsAndBytesConfig(load_in_8bit=<span class="hljs-literal">True</span>) <span class="hljs-comment"># You can also try load_in_4bit</span> | |
| pipe = pipeline(<span class="hljs-string">"text-generation"</span>, <span class="hljs-string">"meta-llama/Meta-Llama-3-8B-Instruct"</span>, device_map=<span class="hljs-string">"auto"</span>, model_kwargs={<span class="hljs-string">"quantization_config"</span>: quantization_config})`,wrap:!1}}),Ul=new m({props:{title:"성능 고려사항",local:"performance-considerations",headingTag:"h3"}}),c=new Kt({props:{$$slots:{default:[te]},$$scope:{ctx:ml}}}),rl=new le({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/ko/conversations.md"}}),{c(){d=M("meta"),h=n(),u=M("p"),dl=n(),U(j.$$.fragment),cl=n(),b=M("p"),b.innerHTML=rt,wl=n(),C=M("p"),C.textContent=dt,hl=n(),U(B.$$.fragment),jl=n(),I=M("p"),I.textContent=ut,bl=n(),U(f.$$.fragment),Cl=n(),G=M("p"),G.innerHTML=mt,Bl=n(),g=M("p"),g.innerHTML=ct,Il=n(),U(V.$$.fragment),fl=n(),k=M("p"),k.textContent=wt,Gl=n(),U(Z.$$.fragment),gl=n(),Q=M("p"),Q.innerHTML=ht,Vl=n(),U(W.$$.fragment),kl=n(),E=M("p"),E.textContent=jt,Zl=n(),U(x.$$.fragment),Ql=n(),v=M("p"),v.textContent=bt,Wl=n(),U(R.$$.fragment),El=n(),F=M("p"),F.innerHTML=Ct,xl=n(),$=M("ul"),$.innerHTML=Bt,vl=n(),H=M("p"),H.textContent=It,Rl=n(),U(S.$$.fragment),Fl=n(),X=M("p"),X.innerHTML=ft,$l=n(),Y=M("p"),Y.textContent=Gt,Hl=n(),N=M("p"),N.innerHTML=gt,Sl=n(),U(z.$$.fragment),Xl=n(),_=M("p"),_.innerHTML=Vt,Yl=n(),U(D.$$.fragment),Nl=n(),q=M("p"),q.innerHTML=kt,zl=n(),U(L.$$.fragment),_l=n(),A=M("p"),A.textContent=Zt,Dl=n(),U(P.$$.fragment),ql=n(),O=M("p"),O.textContent=Qt,Ll=n(),K=M("ol"),K.innerHTML=Wt,Al=n(),U(ll.$$.fragment),Pl=n(),tl=M("p"),tl.textContent=Et,Ol=n(),U(el.$$.fragment),Kl=n(),sl=M("p"),sl.innerHTML=xt,lt=n(),nl=M("p"),nl.innerHTML=vt,tt=n(),U(al.$$.fragment),et=n(),Ml=M("p"),Ml.innerHTML=Rt,st=n(),U(Jl.$$.fragment),nt=n(),il=M("p"),il.innerHTML=Ft,at=n(),U(Ul.$$.fragment),Mt=n(),U(c.$$.fragment),Jt=n(),yl=M("p"),yl.innerHTML=$t,it=n(),ol=M("p"),ol.textContent=Ht,Ut=n(),pl=M("p"),pl.innerHTML=St,yt=n(),Tl=M("p"),Tl.textContent=Xt,ot=n(),U(rl.$$.fragment),pt=n(),ul=M("p"),this.h()},l(l){const t=Pt("svelte-u9bgzb",document.head);d=J(t,"META",{name:!0,content:!0}),t.forEach(e),h=a(l),u=J(l,"P",{}),Nt(u).forEach(e),dl=a(l),y(j.$$.fragment,l),cl=a(l),b=J(l,"P",{"data-svelte-h":!0}),i(b)!=="svelte-1lyn2wy"&&(b.innerHTML=rt),wl=a(l),C=J(l,"P",{"data-svelte-h":!0}),i(C)!=="svelte-5r6lin"&&(C.textContent=dt),hl=a(l),y(B.$$.fragment,l),jl=a(l),I=J(l,"P",{"data-svelte-h":!0}),i(I)!=="svelte-ol90wc"&&(I.textContent=ut),bl=a(l),y(f.$$.fragment,l),Cl=a(l),G=J(l,"P",{"data-svelte-h":!0}),i(G)!=="svelte-1m5sj9"&&(G.innerHTML=mt),Bl=a(l),g=J(l,"P",{"data-svelte-h":!0}),i(g)!=="svelte-c0klzq"&&(g.innerHTML=ct),Il=a(l),y(V.$$.fragment,l),fl=a(l),k=J(l,"P",{"data-svelte-h":!0}),i(k)!=="svelte-xf3a8s"&&(k.textContent=wt),Gl=a(l),y(Z.$$.fragment,l),gl=a(l),Q=J(l,"P",{"data-svelte-h":!0}),i(Q)!=="svelte-aju71m"&&(Q.innerHTML=ht),Vl=a(l),y(W.$$.fragment,l),kl=a(l),E=J(l,"P",{"data-svelte-h":!0}),i(E)!=="svelte-xf3a8s"&&(E.textContent=jt),Zl=a(l),y(x.$$.fragment,l),Ql=a(l),v=J(l,"P",{"data-svelte-h":!0}),i(v)!=="svelte-gjjdfd"&&(v.textContent=bt),Wl=a(l),y(R.$$.fragment,l),El=a(l),F=J(l,"P",{"data-svelte-h":!0}),i(F)!=="svelte-1ckbdi7"&&(F.innerHTML=Ct),xl=a(l),$=J(l,"UL",{"data-svelte-h":!0}),i($)!=="svelte-aux23i"&&($.innerHTML=Bt),vl=a(l),H=J(l,"P",{"data-svelte-h":!0}),i(H)!=="svelte-uvpj0b"&&(H.textContent=It),Rl=a(l),y(S.$$.fragment,l),Fl=a(l),X=J(l,"P",{"data-svelte-h":!0}),i(X)!=="svelte-1y00u2q"&&(X.innerHTML=ft),$l=a(l),Y=J(l,"P",{"data-svelte-h":!0}),i(Y)!=="svelte-a32lal"&&(Y.textContent=Gt),Hl=a(l),N=J(l,"P",{"data-svelte-h":!0}),i(N)!=="svelte-aki18t"&&(N.innerHTML=gt),Sl=a(l),y(z.$$.fragment,l),Xl=a(l),_=J(l,"P",{"data-svelte-h":!0}),i(_)!=="svelte-fksxdl"&&(_.innerHTML=Vt),Yl=a(l),y(D.$$.fragment,l),Nl=a(l),q=J(l,"P",{"data-svelte-h":!0}),i(q)!=="svelte-13gpfbb"&&(q.innerHTML=kt),zl=a(l),y(L.$$.fragment,l),_l=a(l),A=J(l,"P",{"data-svelte-h":!0}),i(A)!=="svelte-1vt75iw"&&(A.textContent=Zt),Dl=a(l),y(P.$$.fragment,l),ql=a(l),O=J(l,"P",{"data-svelte-h":!0}),i(O)!=="svelte-p3608d"&&(O.textContent=Qt),Ll=a(l),K=J(l,"OL",{"data-svelte-h":!0}),i(K)!=="svelte-p7ntaj"&&(K.innerHTML=Wt),Al=a(l),y(ll.$$.fragment,l),Pl=a(l),tl=J(l,"P",{"data-svelte-h":!0}),i(tl)!=="svelte-1mafhws"&&(tl.textContent=Et),Ol=a(l),y(el.$$.fragment,l),Kl=a(l),sl=J(l,"P",{"data-svelte-h":!0}),i(sl)!=="svelte-tly7t8"&&(sl.innerHTML=xt),lt=a(l),nl=J(l,"P",{"data-svelte-h":!0}),i(nl)!=="svelte-1az7lwm"&&(nl.innerHTML=vt),tt=a(l),y(al.$$.fragment,l),et=a(l),Ml=J(l,"P",{"data-svelte-h":!0}),i(Ml)!=="svelte-15qgxk1"&&(Ml.innerHTML=Rt),st=a(l),y(Jl.$$.fragment,l),nt=a(l),il=J(l,"P",{"data-svelte-h":!0}),i(il)!=="svelte-wvz1q9"&&(il.innerHTML=Ft),at=a(l),y(Ul.$$.fragment,l),Mt=a(l),y(c.$$.fragment,l),Jt=a(l),yl=J(l,"P",{"data-svelte-h":!0}),i(yl)!=="svelte-101gqbq"&&(yl.innerHTML=$t),it=a(l),ol=J(l,"P",{"data-svelte-h":!0}),i(ol)!=="svelte-32i07p"&&(ol.textContent=Ht),Ut=a(l),pl=J(l,"P",{"data-svelte-h":!0}),i(pl)!=="svelte-1oj9hxd"&&(pl.innerHTML=St),yt=a(l),Tl=J(l,"P",{"data-svelte-h":!0}),i(Tl)!=="svelte-1hhan9g"&&(Tl.textContent=Xt),ot=a(l),y(rl.$$.fragment,l),pt=a(l),ul=J(l,"P",{}),Nt(ul).forEach(e),this.h()},h(){zt(d,"name","hf:doc:metadata"),zt(d,"content",se)},m(l,t){Ot(document.head,d),s(l,h,t),s(l,u,t),s(l,dl,t),o(j,l,t),s(l,cl,t),s(l,b,t),s(l,wl,t),s(l,C,t),s(l,hl,t),o(B,l,t),s(l,jl,t),s(l,I,t),s(l,bl,t),o(f,l,t),s(l,Cl,t),s(l,G,t),s(l,Bl,t),s(l,g,t),s(l,Il,t),o(V,l,t),s(l,fl,t),s(l,k,t),s(l,Gl,t),o(Z,l,t),s(l,gl,t),s(l,Q,t),s(l,Vl,t),o(W,l,t),s(l,kl,t),s(l,E,t),s(l,Zl,t),o(x,l,t),s(l,Ql,t),s(l,v,t),s(l,Wl,t),o(R,l,t),s(l,El,t),s(l,F,t),s(l,xl,t),s(l,$,t),s(l,vl,t),s(l,H,t),s(l,Rl,t),o(S,l,t),s(l,Fl,t),s(l,X,t),s(l,$l,t),s(l,Y,t),s(l,Hl,t),s(l,N,t),s(l,Sl,t),o(z,l,t),s(l,Xl,t),s(l,_,t),s(l,Yl,t),o(D,l,t),s(l,Nl,t),s(l,q,t),s(l,zl,t),o(L,l,t),s(l,_l,t),s(l,A,t),s(l,Dl,t),o(P,l,t),s(l,ql,t),s(l,O,t),s(l,Ll,t),s(l,K,t),s(l,Al,t),o(ll,l,t),s(l,Pl,t),s(l,tl,t),s(l,Ol,t),o(el,l,t),s(l,Kl,t),s(l,sl,t),s(l,lt,t),s(l,nl,t),s(l,tt,t),o(al,l,t),s(l,et,t),s(l,Ml,t),s(l,st,t),o(Jl,l,t),s(l,nt,t),s(l,il,t),s(l,at,t),o(Ul,l,t),s(l,Mt,t),o(c,l,t),s(l,Jt,t),s(l,yl,t),s(l,it,t),s(l,ol,t),s(l,Ut,t),s(l,pl,t),s(l,yt,t),s(l,Tl,t),s(l,ot,t),o(rl,l,t),s(l,pt,t),s(l,ul,t),Tt=!0},p(l,[t]){const Yt={};t&2&&(Yt.$$scope={dirty:t,ctx:l}),c.$set(Yt)},i(l){Tt||(p(j.$$.fragment,l),p(B.$$.fragment,l),p(f.$$.fragment,l),p(V.$$.fragment,l),p(Z.$$.fragment,l),p(W.$$.fragment,l),p(x.$$.fragment,l),p(R.$$.fragment,l),p(S.$$.fragment,l),p(z.$$.fragment,l),p(D.$$.fragment,l),p(L.$$.fragment,l),p(P.$$.fragment,l),p(ll.$$.fragment,l),p(el.$$.fragment,l),p(al.$$.fragment,l),p(Jl.$$.fragment,l),p(Ul.$$.fragment,l),p(c.$$.fragment,l),p(rl.$$.fragment,l),Tt=!0)},o(l){T(j.$$.fragment,l),T(B.$$.fragment,l),T(f.$$.fragment,l),T(V.$$.fragment,l),T(Z.$$.fragment,l),T(W.$$.fragment,l),T(x.$$.fragment,l),T(R.$$.fragment,l),T(S.$$.fragment,l),T(z.$$.fragment,l),T(D.$$.fragment,l),T(L.$$.fragment,l),T(P.$$.fragment,l),T(ll.$$.fragment,l),T(el.$$.fragment,l),T(al.$$.fragment,l),T(Jl.$$.fragment,l),T(Ul.$$.fragment,l),T(c.$$.fragment,l),T(rl.$$.fragment,l),Tt=!1},d(l){l&&(e(h),e(u),e(dl),e(cl),e(b),e(wl),e(C),e(hl),e(jl),e(I),e(bl),e(Cl),e(G),e(Bl),e(g),e(Il),e(fl),e(k),e(Gl),e(gl),e(Q),e(Vl),e(kl),e(E),e(Zl),e(Ql),e(v),e(Wl),e(El),e(F),e(xl),e($),e(vl),e(H),e(Rl),e(Fl),e(X),e($l),e(Y),e(Hl),e(N),e(Sl),e(Xl),e(_),e(Yl),e(Nl),e(q),e(zl),e(_l),e(A),e(Dl),e(ql),e(O),e(Ll),e(K),e(Al),e(Pl),e(tl),e(Ol),e(Kl),e(sl),e(lt),e(nl),e(tt),e(et),e(Ml),e(st),e(nt),e(il),e(at),e(Mt),e(Jt),e(yl),e(it),e(ol),e(Ut),e(pl),e(yt),e(Tl),e(ot),e(pt),e(ul)),e(d),r(j,l),r(B,l),r(f,l),r(V,l),r(Z,l),r(W,l),r(x,l),r(R,l),r(S,l),r(z,l),r(D,l),r(L,l),r(P,l),r(ll,l),r(el,l),r(al,l),r(Jl,l),r(Ul,l),r(c,l),r(rl,l)}}}const se='{"title":"Transformers로 채팅하기","local":"chatting-with-transformers","sections":[{"title":"빠른 시작","local":"quickstart","sections":[],"depth":2},{"title":"채팅 모델 고르기","local":"choosing-a-chat-model","sections":[{"title":"모델의 명칭과 크기","local":"size-and-model-naming","sections":[],"depth":3},{"title":"그렇다면 어떤 채팅 모델이 가장 좋을까요?","local":"but-which-chat-model-is-best","sections":[],"depth":3},{"title":"전문 분야","local":"specialist-domains","sections":[],"depth":3}],"depth":2},{"title":"파이프라인 내부는 어떻게 되어있는가?","local":"what-happens-inside-the-pipeline","sections":[],"depth":2},{"title":"성능, 메모리와 하드웨어","local":"performance-memory-and-hardware","sections":[{"title":"메모리 고려사항","local":"memory-considerations","sections":[],"depth":3},{"title":"성능 고려사항","local":"performance-considerations","sections":[],"depth":3}],"depth":2}],"depth":1}';function ne(ml){return Dt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ye extends Lt{constructor(d){super(),At(this,d,ne,ee,_t,{})}}export{ye as component}; | |
Xet Storage Details
- Size:
- 43.9 kB
- Xet hash:
- 3aa1ff702396ebccf3d9b45332a2477c8089becd157957b8677c1907b84e900e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.