대규모 언어 모델 (Large Language Model)

LLM 실습을 위한 기본 정보

LLM의 개념과 구조

실습을 위한 선수 지식

실습 환경 및 도구

CPU/GPU 샘플 코드

1. CPU 버전 (기본)

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# 모델과 토크나이저 로드 (CPU)
model_name = "gpt2"  # 경량 모델 사용
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 입력 텍스트
input_text = "인공지능이 세상을 바꾸는 방식은"

# 토큰화 및 모델 입력
inputs = tokenizer(input_text, return_tensors="pt")

# 텍스트 생성 (CPU에서 실행)
with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_length=100,
        num_return_sequences=1,
        no_repeat_ngram_size=2,
        temperature=0.7
    )

# 결과 디코딩
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)

2. GPU 버전 (가속화)

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# GPU 사용 가능 여부 확인
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")

# 모델과 토크나이저 로드 (GPU 사용)
model_name = "gpt2"  # 경량 모델 사용
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 입력 텍스트
input_text = "인공지능이 세상을 바꾸는 방식은"

# 토큰화 및 모델 입력 (GPU로 이동)
inputs = tokenizer(input_text, return_tensors="pt").to(device)

# 텍스트 생성 (GPU에서 실행)
with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_length=100,
        num_return_sequences=1,
        no_repeat_ngram_size=2,
        temperature=0.7,
        pad_token_id=tokenizer.eos_token_id
    )

# 결과 디코딩 (다시 CPU로 이동)
generated_text = tokenizer.decode(outputs[0].cpu(), skip_special_tokens=True)
print(generated_text)

3. 메모리 효율적인 GPU 사용 (큰 모델용)

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch

# 4비트 양자화 설정 (메모리 절약)
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True,
)

# 모델 로드 (4비트 양자화 적용)
model_name = "EleutherAI/polyglot-ko-1.3b"  # 한국어 모델
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=quantization_config,
    device_map="auto"  # 자동으로 GPU/CPU 할당
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 생성 파이프라인 사용
from transformers import pipeline

pipe = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    device=0 if torch.cuda.is_available() else -1
)

# 텍스트 생성
result = pipe(
    "오늘 날씨가 좋아서",
    max_length=100,
    do_sample=True,
    temperature=0.7,
    top_p=0.9
)

print(result[0]['generated_text'])

실습의 주요 단계

  1. 프롬프트 엔지니어링

    • LLM에 명확한 지시를 내리는 프롬프트 작성법 연습
    • 다양한 프롬프트 유형, 구성 요소, 매개변수 실습
  2. 기본 모델 활용

    • 사전 학습된 LLM을 불러와 텍스트 생성, 요약, 번역 등 기본 태스크 실습
    • API 또는 라이브러리로 간단한 챗봇 구축
  3. RAG(검색 증강 생성) 실습

    • 문서 검색과 LLM을 결합해 질문에 답변하는 RAG 파이프라인 구현
    • llamaIndex, LangChain 등으로 벡터DB 구축, 인덱싱, 검색, 프롬프트 결합 실습
  4. 모델 미세조정(Fine-tuning)

    • 자신만의 데이터셋으로 LLM을 추가 학습(파인튜닝)
    • QLoRA, LoRA 등 경량화 및 효율적 미세조정 기법 활용
  5. 애플리케이션 개발

    • LLM을 활용한 챗봇, 문서 요약, 질의응답 등 실제 서비스 개발 실습

실습 예제 및 참고 자료

실습 시 유의사항

정리

ref

What Else?
inflearn react api server buy me a coffee