6장. Qwen 모델 준비와 텍스트 생성
2일차의 흐름과 말투 페르소나
요리 학원 이틀 과정을 떠올려 봅니다. 첫날에는 칼과 불이 어떻게 작동하는지 원리를 배웠습니다. 둘째 날에는 이미 요리를 할 줄 아는 조리사를 데려와, 우리 가게만의 맛을 내도록 짧게 연수시킵니다. 조리사를 처음부터 키우지 않고, 양념 몇 가지만 새로 가르치는 것입니다. 2일차가 바로 이 연수입니다. 이미 공개된 Qwen 을 데려와, 우리가 만든 데이터로, 적은 자원을 써서 말투를 바꿉니다.
그림은 2일차 네 장의 차례입니다. 이 장에서 모델을 준비하고 말을 시켜 보며, 7장에서 데이터를 대본 양식으로 바꾸고, 8장에서 LoRA 라는 얇은 필름을 붙여 학습하고, 9장에서 학습 전후를 견주고 더 작게 줄이는 QLoRA 를 봅니다. 원본 노트북은 이 흐름을 한 노트북에 담았고, 교안은 네 장으로 나눴습니다.
2일차 네 장과 원본 노트북의 절
| 장 | 원본 노트북의 절 | 하는 일 | 요리 학원으로 치면 |
|---|---|---|---|
| 6장 | 1. Qwen 모델 준비 | 모델 불러오기, 메모리 감각, 생성과 디코딩 | 조리사를 데려와 요리를 한번 시켜 보기 |
| 7장 | 2~3. SFT 데이터, Chat Template | 데이터 불러오기, 대화 형식 변환, 분리, 토큰화 | 우리 가게 레시피 카드 만들기 |
| 8장 | 4~5. PEFT·LoRA, 학습 | LoRA 원리, SFTTrainer 로 학습 | 양념 몇 가지만 새로 가르치기 |
| 9장 | 6~7. 평가와 활용, QLoRA | 학습 전후 비교, 어댑터 저장·병합, 4비트 | 시식회와 주방 공간 줄이기 |
실습 주제는 말투(페르소나) 학습입니다. 평범한 질문에 "냉소적인 절대 군주" 말투로 답하도록 Qwen 을 가르칩니다. 말투는 학습 전후 차이가 눈에 잘 보이므로 SFT 와 LoRA 의 효과를 확인하기 좋습니다. 데이터의 답변이 일부러 냉소적인 것은 말투 차이를 눈으로 보기 쉽게 고른 학습용 데이터이기 때문입니다. 종합평가에서는 같은 방법을 고객 문의 응답 형식이라는 실무형 주제에 씁니다.
짧은 예시
# pandas = 표(DataFrame)를 다루는 도구
import pandas as pd
# read_csv = csv 파일을 읽어 표로 만든다(작업 폴더 workspace/ 기준의 경로)
df = pd.read_csv("data/persona_sft_raw.csv")
# shape = (행 수, 열 수). 결과: (327, 2)
print(df.shape)
# 열 이름. 결과: ['prompt', 'response']
print(df.columns.tolist())
# 첫 행의 질문과 답을 꺼낸다
print("질문:", df.loc[0, "prompt"])
print("답변:", df.loc[0, "response"])
# 결과: 질문: 다음 주 발표 때문에 너무 떨리는데 긴장 푸는 법 있어?
# 답변: 떨고 있느냐. 네가 무슨 말을 하든 세상은 변하지 않는다. ...이 코드가 뜻하는 것
연수에 쓸 레시피 카드 묶음을 처음 펼쳐 보는 일입니다. 카드는 327장이고, 앞면에 손님 질문(prompt), 뒷면에 우리 가게식 답(response)이 적혀 있습니다. 질문은 평범한데 답은 군주처럼 내려다보는 말투입니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
pd.read_csv("data/persona_sft_raw.csv") | csv 를 표로 읽는다 | 레시피 카드 묶음 펼치기 |
df.shape | 행과 열의 수를 본다 | 카드 327장, 앞뒤 두 면 |
df.loc[0, "prompt"] | 0번 행의 질문 칸을 꺼낸다 | 첫 카드의 앞면 읽기 |
이 표를 대화 형식으로 바꾸고 나누는 일은 7장에서 합니다. 이 장에서는 "무엇을 가르칠지"만 미리 봅니다.
주의할 점
- 원본 노트북은 VRAM 8GB 이상의 NVIDIA GPU 1개를 가정합니다. GPU 가 없으면 Colab T4 같은 환경을 씁니다. 이 교안의 출력은 RTX 3080(10GB)에서 한 번 돌린 결과입니다.
- 샘플링(
do_sample=True)을 쓰는 셀과 학습 결과는 실행할 때마다, GPU 마다 조금씩 달라집니다. 교안의 문장과 똑같지 않아도 정상입니다.