✅ 5단계: 추론 - LoRA + Base 모델 합쳐서 답변 생성

🎯 목표

  • LoRA adapter 불러오기
  • 사용자 입력으로부터 모델 응답 생성
  • 텍스트 디코딩 후 출력

📦 1. 모델 & LoRA 어댑터 로드

from peft import PeftModel
from transformers import AutoTokenizer, AutoModelForCausalLM

base_model_id = "tiiuae/falcon-rw-1b"
adapter_path = "./output/lora-adapter"

# base 모델
model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    torch_dtype=torch.float16,
    device_map="auto"
)

# tokenizer
tokenizer = AutoTokenizer.from_pretrained(adapter_path)

# LoRA 어댑터 적용
model = PeftModel.from_pretrained(model, adapter_path)
model.eval()

🧾 2. Prompt → 모델 입력 → 응답 생성

def generate_response(prompt, max_new_tokens=100):
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

    with torch.no_grad():
        outputs = model.generate(
            input_ids=inputs["input_ids"],
            attention_mask=inputs["attention_mask"],
            max_new_tokens=max_new_tokens,
            do_sample=True,
            temperature=0.7,
            top_p=0.9,
            pad_token_id=tokenizer.pad_token_id,
            eos_token_id=tokenizer.eos_token_id
        )

    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return response

🧪 3. 테스트 예시

test_prompt = "Translate 'Thank you for your help' to Korean."
response = generate_response(test_prompt)
print("🧠 모델 응답:", response)
 

출력 예시:

🧠 모델 응답: Translate 'Thank you for your help' to Korean. → 도와주셔서 감사합니다.

학습 데이터에 따라 응답 문장 스타일이나 품질이 달라질 수 있습니다.


🎯 고급 설정 (옵션)

파라미터설명
temperature 0.7~1.0 사이 설정, 클수록 다양성 ↑
top_p nucleus sampling 확률 누적합 컷오프
max_new_tokens 생성할 최대 토큰 수
do_sample 샘플링 기반 응답 (True), 그리디 응답(False)
 

 

'AI > LLM' 카테고리의 다른 글

🧭 2. 전체 실습 흐름 - 7  (0) 2025.07.02
🧭 2. 전체 실습 흐름 - 6  (0) 2025.07.02
🧭 2. 전체 실습 흐름 - 4  (0) 2025.07.02
🧭 2. 전체 실습 흐름 - 3  (0) 2025.07.02
🧭 2. 전체 실습 흐름 - 1  (0) 2025.07.02

+ Recent posts