티스토리 뷰

반응형

개요

최근 대형 언어 모델(LLM)의 활용이 증가함에 따라, 이를 보다 효율적으로 로드하고 실행할 수 있는 다양한 기술이 주목받고 있습니다. 본 포스트에서는 UnslothFastLanguageModel을 활용하여 Meta-Llama-3.1-8B-Instruct 모델을 로드하고 추론하는 과정을 분석합니다.

환경 설정

우선 Unsloth 라이브러리를 설치해야 합니다.

!pip install unsloth

그 후, 필요한 모듈을 임포트하고 하이퍼파라미터를 설정합니다.

from unsloth import FastLanguageModel
import torch

max_seq_length = 2048
dtype = None
load_in_4bit = True

모델 로드

FastLanguageModel.from_pretrained를 이용하여 사전 학습된 모델과 토크나이저를 로드합니다.

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/Meta-Llama-3.1-8B-Instruct",
    max_seq_length=max_seq_length,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
)

위 코드에서 중요한 요소는 다음과 같습니다:

  • model_name: 사용할 사전 학습된 모델의 경로를 지정합니다.
  • max_seq_length: 모델이 처리할 최대 토큰 길이를 지정합니다.
  • dtype: 데이터 타입을 설정하며, 기본값은 None으로 설정되어 있습니다.
  • load_in_4bit: 모델을 4비트 양자화(quantization)하여 메모리 사용량을 줄입니다.

채팅 템플릿 적용

Llama-3.1 형식의 대화 템플릿을 적용하여 입력 형식을 맞춥니다.

from unsloth.chat_templates import get_chat_template

tokenizer = get_chat_template(
    tokenizer,
    chat_template="llama-3.1",
)

이는 모델이 일반적인 자연어 처리(NLP) 작업뿐만 아니라 대화형 AI에서도 적절하게 동작할 수 있도록 돕습니다.

모델을 추론 모드로 설정

모델을 학습 모드가 아닌 추론 모드로 설정해야 합니다.

FastLanguageModel.for_inference(model)

이렇게 설정하면 추가적인 메모리 최적화 및 성능 개선이 가능합니다.

입력 처리 및 추론

이제 모델이 추론할 수 있도록 입력을 준비합니다.

inputs = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,  # 생성 작업을 위한 프롬프트 추가
    return_tensors="pt",
).to("cuda")

여기서:

  • messages: 입력 메시지 리스트로, 사용자 질문과 시스템 응답을 포함할 수 있습니다.
  • tokenize=True: 입력을 토큰화합니다.
  • add_generation_prompt=True: 생성형 모델을 위한 추가 프롬프트를 삽입합니다.
  • return_tensors="pt": PyTorch 텐서 형식으로 변환하여 CUDA에서 실행할 수 있도록 합니다.

모델 생성 수행

이제 모델을 통해 실제 텍스트 생성을 수행합니다.

outputs = model.generate(
    input_ids=inputs,
    max_new_tokens=300,
    use_cache=True,
    temperature=0.1
)

이때 중요한 파라미터는 다음과 같습니다:

  • max_new_tokens=300: 최대 300개의 새로운 토큰을 생성합니다.
  • use_cache=True: 이전 결과를 캐시하여 속도를 향상시킵니다.
  • temperature=0.1: 낮은 값일수록 보수적인 응답을 생성하며, 높은 값일수록 창의적인 응답을 생성합니다.

결과 디코딩 및 출력

마지막으로, 모델의 출력을 사람이 읽을 수 있는 텍스트로 변환합니다.

result = tokenizer.batch_decode(outputs)
print(result[0])

이 과정을 통해 모델이 생성한 문장을 최종적으로 확인할 수 있습니다.

결론

본 포스트에서는 UnslothFastLanguageModel을 활용하여 Meta-Llama-3.1-8B-Instruct 모델을 로드하고 추론하는 과정을 살펴보았습니다. 4비트 양자화와 최적화된 채팅 템플릿을 활용하여 모델을 보다 효율적으로 실행할 수 있으며, 이를 통해 메모리 절약 및 성능 향상이 가능합니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함