Transformers documentation

채팅 기본

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

채팅 기본

Chat 모델은 메시지를 보내고 응답을 받을 수 있는 대화형 모델입니다. 2023년 중반 이후의 대부분의 언어 모델은 chat 모델이며, “instruct” 또는 “instruction-tuned” 모델이라고도 불립니다. chat을 지원하지 않는 모델은 “base” 또는 “pretrained” 모델이라고 불립니다.

크고 새로운 모델은 일반적으로 더 높은 성능을 보이지만, 특정 도메인(의료, 법률 텍스트, 비영어권 언어 등)에 특화된 모델은 이러한 대형 모델보다 더 나은 성능을 발휘할 수 있습니다. OpenLLM 및 LMSys Chatbot Arena와 같은 리더보드를 활용하여 사용 사례에 가장 적합한 모델을 찾아보세요.

이 가이드에서는 Transformers에서 명령줄을 통해 채팅 모델을 빠르게 로드하는 방법, 대화 구성 및 포맷팅 방법, 그리고 TextGenerationPipeline을 사용하여 채팅하는 방법을 보여줍니다.

채팅 CLI

Transformers 설치 후, 명령줄에서 모델과 직접 대화할 수 있습니다. 아래 명령은 모델과 대화하는 인터랙티브 세션을 시작하며, 세션 시작 시 기본 명령 몇 가지가 나열됩니다.

다음 명령어의 경우 transformers serve가 실행 중인지 확인하십시오.

transformers chat Qwen/Qwen2.5-0.5B-Instruct

generate 플래그를 임의로 사용하여 CLI를 시작할 수 있으며, 형식은 arg_1=value_1 arg_2=value_2 ...입니다.

transformers chat Qwen/Qwen2.5-0.5B-Instruct do_sample=False max_new_tokens=10

전체 옵션 목록을 확인하려면 아래 명령을 실행하세요.

transformers chat -h

채팅은 AutoClass 위에 구현되어 있으며, 텍스트 생성 및 채팅의 도구를 사용합니다. 내부적으로 transformers serve CLI를 사용합니다(문서).

TextGenerationPipeline

TextGenerationPipeline는 “채팅 모드”를 지원하는 고수준 텍스트 생성 클래스입니다. 대화형 모델이 감지되고 채팅 프롬프트가 적절하게 포맷되어 있을 때 채팅 모드가 활성화됩니다.

Chat 모델은 메시지 목록(채팅 히스토리)을 입력으로 받습니다. 각 메시지는 role과 content 키를 가진 딕셔너리입니다. 채팅을 시작하려면 user 메시지를 하나 추가합니다. 모델의 동작 방식을 지시하기 위해 system 메시지를 선택적으로 포함할 수도 있습니다.

chat = [
    {"role": "system", "content": "You are a helpful science assistant."},
    {"role": "user", "content": "Hey, can you explain gravity to me?"}
]

TextGenerationPipeline를 생성하고 chat을 전달합니다. 대규모 모델의 경우 device_map=“auto”를 설정하면 모델 로딩 속도가 빨라지고, 사용 가능한 가장 빠른 장치에 자동으로 배치됩니다.

import torch
from transformers import pipeline

pipeline = pipeline(task="text-generation", model="HuggingFaceTB/SmolLM2-1.7B-Instruct", dtype="auto", device_map="auto")
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])

이 과정이 성공적으로 완료되면 모델의 응답을 확인할 수 있습니다. 대화를 계속하려면 모델의 응답으로 채팅 히스토리를 업데이트해야 합니다. chat에 텍스트를 추가(assistant 역할 사용)하거나, 최신 응답을 포함한 전체 채팅 히스토리를 담고 있는 response[0]["generated_text"]를 읽는 방식으로 수행할 수 있습니다.

모델의 응답을 받은 후에는 채팅 기록에 새로운 user 메시지를 추가하여 대화를 계속할 수 있습니다.

chat = response[0]["generated_text"]
chat.append(
    {"role": "user", "content": "Woah! But can it be reconciled with quantum mechanics?"}
)
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])

이 과정을 반복하면 컨텍스트 윈도우가 소진되거나 메모리가 부족해질 때까지 대화를 계속할 수 있습니다.

성능 및 메모리 사용량

Transformers는 기본적으로 모델을 float32 정밀도로 로드하며, 8B 모델의 경우 약 32GB의 메모리가 필요합니다. 메모리 사용량을 줄이려면 torch_dtype="auto" 인수를 사용하세요. 이 인수는 해당 모델이 bfloat16로 학습된 경우 일반적으로 bfloat16를 사용합니다.

사용 가능한 다양한 양자화 백엔드에 대한 자세한 내용은 Quantization 문서를 참조하세요.

메모리 사용량을 더 낮추려면 bitsandbytes를 사용하여 모델을 8비트 또는 4비트로 양자화할 수 있습니다. 원하는 양자화 설정으로 BitsAndBytesConfig를 생성하고 pipelines의 model_kwargs 매개변수에 전달합니다. 아래 예제는 모델을 8비트로 양자화합니다.

from transformers import pipeline, BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(load_in_8bit=True)
pipeline = pipeline(task="text-generation", model="meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config})

일반적으로 모델 크기와 성능은 직접적인 상관관계가 있습니다. 더 큰 모델은 더 많은 메모리가 필요할 뿐만 아니라, 생성되는 각 토큰마다 활성 파라미터가 메모리에서 읽혀야 하므로 속도가 느려집니다. 이는 LLM 텍스트 생성의 병목 현상이며, 생성 속도를 개선하기 위한 주요 옵션은 모델을 양자화하거나 더 높은 메모리 대역폭을 가진 하드웨어를 사용하는 것입니다. 컴퓨트 파워를 추가하는 것은 실질적인 도움이 되지 않습니다.

speculative decoding와 같은 기법도 시도해 볼 수 있습니다. 이 기법에서는 작은 모델이 후보 토큰을 생성하고, 더 큰 모델이 이를 검증합니다. 후보 토큰이 정확하다면 더 큰 모델은 한 번에 여러 개의 토큰을 생성할 수 있습니다. 이를 통해 대역폭 병목 현상을 크게 완화하고 생성 속도를 향상시킬 수 있습니다.

Mixtral, Qwen2MoE, GPT-OSS와 같은 Mixture-of-Expert(MoE) 모델은 매개변수가 많지만, 각 토큰을 생성할 때 그 중 일부만 “활성화”합니다. 그 결과, MoE 모델은 일반적으로 메모리 대역폭 요구 사항이 훨씬 낮으며, 동일한 크기의 일반 LLM보다 더 빠를 수 있습니다. 그러나 추측적 디코딩과 같은 기법은 MoE 모델에서 효과가 없는데, 이는 새로운 추측 토큰이 추가될 때마다 활성화되는 매개변수의 수가 증가하기 때문입니다.

Update on GitHub