6장. Qwen 모델 준비와 텍스트 생성
Qwen 모델 불러오기
새 직원을 맞이할 때는 두 가지가 필요합니다. 하나는 직원 본인이고, 다른 하나는 그 직원이 쓰는 사전입니다. 사전이 다르면 같은 낱말 번호를 다른 뜻으로 읽습니다. LLM 도 같습니다. 글자를 토큰 번호로 바꾸는 토크나이저와, 그 번호를 받아 계산하는 모델 가중치를 같은 모델 이름으로 함께 불러와야 합니다.
그림의 왼쪽은 글자를 번호로 바꾸는 토크나이저, 가운데는 번호를 받아 다음 토큰 점수를 내는 모델, 오른쪽은 그 모델을 어디에(GPU), 몇 바이트 숫자로(BF16) 올릴지입니다. 원본 노트북은 이 셋을 load_base_model 함수 하나에 묶어, 학습 전후 비교와 어댑터를 다시 붙일 때 똑같은 기반 모델을 불러올 수 있게 했습니다.
불러오기에 쓰는 도구
| 도구 | 원래 말 | 하는 일 | 원본 코드 |
|---|---|---|---|
AutoTokenizer.from_pretrained | 이름에 맞는 토크나이저를 학습된 것에서 불러오기 | 글자 ↔ 토큰 번호 | tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) |
AutoModelForCausalLM.from_pretrained | 다음 낱말 맞히기 모델을 학습된 가중치에서 불러오기 | 토큰 번호 → 다음 토큰 점수 | load_base_model() 안 |
torch.cuda.is_bf16_supported() | GPU 가 BF16 을 지원하는가 | BF16 또는 FP16 고르기 | MODEL_DTYPE = ... |
model.to(device) | 모델을 장치로 옮기기 | CPU 메모리 → GPU 메모리 | device = "cuda" |
model.get_memory_footprint() | 메모리 발자국 | 가중치가 차지하는 바이트 수 | 942 MB |
짧은 예시
# AutoTokenizer = 모델 이름에 맞는 토크나이저를 골라 주는 도구
# GenerationConfig = 모델과 함께 저장된 "생성 기본 설정표"
from transformers import AutoTokenizer, GenerationConfig
MODEL_NAME = "Qwen/Qwen2.5-0.5B-Instruct"
# 토크나이저만 불러온다(모델 가중치는 불러오지 않으므로 CPU 로 몇 초면 된다)
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
# len(tokenizer) = 특수 토큰까지 합친 사전의 크기. 결과: 151665
print(len(tokenizer))
# 모델 폴더의 generation_config.json 을 읽는다
gen_cfg = GenerationConfig.from_pretrained(MODEL_NAME)
# 결과: True 0.7 20 0.8 1.1
print(gen_cfg.do_sample, gen_cfg.temperature, gen_cfg.top_k, gen_cfg.top_p, gen_cfg.repetition_penalty)이 코드가 뜻하는 것
새 직원의 사전과, 직원이 회사에서 받은 "평소 말하는 법" 메모를 먼저 펼쳐 본 것입니다. 사전에는 낱말이 15만 개 넘게 있고, 메모에는 "평소에는 제비뽑기로 말하되(do_sample True), 모험심은 0.7, 후보는 20개까지, 누적 80%까지만"이라고 적혀 있습니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
AutoTokenizer.from_pretrained(MODEL_NAME) | Qwen 의 토크나이저를 불러온다 | 직원이 쓰는 사전 받기 |
len(tokenizer) | 사전의 낱말 수 | 151,665 개 |
GenerationConfig.from_pretrained(MODEL_NAME) | 생성 기본값을 읽는다 | 평소 말하는 법 메모 |
이 기본값은 실습에서 중요합니다. 실습 2의 chat 함수는 do_sample=False 로 Greedy 를 쓰므로, 메모에 적힌 temperature, top_p, top_k 가 쓰이지 않습니다. 그래서 "이 설정은 무시될 수 있다"는 안내가 출력 첫 줄에 나옵니다.
주의할 점
- 모델과 토크나이저는 처음 한 번 Hugging Face 에서 내려받습니다(Qwen 약 1GB,
~/.cache/huggingface). 두 번째부터는 캐시에서 읽습니다. dtype=인자는 지금 쓰는 transformers 4.57 의 이름입니다. 예전 자료에는torch_dtype=로 적힌 것이 많습니다. 뜻은 같습니다.- 토크나이저와 모델은 반드시 같은 이름으로 불러옵니다. 다른 모델의 토크나이저를 쓰면 번호가 어긋나 엉뚱한 글이 나옵니다.