✅ 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 |