LLM 엔지니어링4장 · LLM 을 완성하는 3단계와 Hugging Face12 / 23← 이전목차다음 →MetaContents

4장. LLM 을 완성하는 3단계와 Hugging Face

Trainer 로 학습하기

세탁기의 "표준 코스"를 떠올려 보세요. 빨래와 세제만 넣고 단추를 누르면 불리기, 빨기, 헹구기, 짜기를 알아서 합니다. 2장에서 다섯 줄로 손수 쓴 학습 루프를 transformers 의 Trainer 가 이렇게 대신 돌려 줍니다.

TrainingArguments 설정, Trainer 준비, train(), evaluate() 와 저장의 네 단계를 이은 흐름도

1번 TrainingArguments 에 에포크, 학습률, 배치 크기 같은 설정을 적고, 2번 Trainer 에 모델과 데이터를 넘깁니다. 3번 train() 이 학습 루프를 돌리고, 4번 evaluate() 로 검증 손실을 재고 save_pretrained 로 저장합니다. 여기서 세탁 코스의 설정이 TrainingArguments, 단추가 train() 입니다.

2장의 루프와 견주기

2장에서 손으로 한 일Trainer 에서
DataLoader(…, batch_size=32, shuffle=True)per_device_train_batch_size=32
for epoch in range(200)num_train_epochs=8
torch.optim.Adam(…, lr=0.01)learning_rate=1e-3(AdamW 가 기본)
zero_grad, 순전파, 손실, backward, steptrainer.train() 한 줄
model.to("cuda")GPU 가 있으면 알아서 쓴다
torch.manual_seed(42)seed=42
직접 짠 평가 코드trainer.evaluate() → eval_loss

주요 설정

인자뜻실습 5의 값
output_dir중간 저장 폴더out_pretrain_ckpt
per_device_train_batch_sizeGPU 하나의 배치 크기32
num_train_epochs에포크 수8
learning_rate학습률0.001
warmup_steps처음 몇 걸음은 학습률을 0 에서 천천히 올린다50
fp16혼합 정밀도(GPU 에서만)GPU 가 있으면 True
save_strategy중간 저장 여부"no"(끝에 따로 저장)
report_to학습 기록을 보낼 곳"none"(보내지 않음)
Python
from transformers import TrainingArguments

args = TrainingArguments(
    "out_demo_args",                 # 중간 결과를 둘 폴더 이름
    per_device_train_batch_size=32,
    num_train_epochs=8,
    learning_rate=1e-3,
    report_to="none",                # 외부 기록 서비스로 보내지 않는다
)
print(args.num_train_epochs, args.learning_rate, args.optim.value)

args.optim.value 가 adamw_torch_fused 로 나와 옵티마이저가 AdamW(여러 계산을 한 번에 묶어 빠르게 하는 판)로 정해진 것을 확인할 수 있습니다. 설정만 만든 것이라 폴더나 파일은 아직 생기지 않습니다.

코드에 나오는 함수

코드쉬운 뜻
TrainingArguments("out_demo_args", ...)학습 설정을 한 묶음으로 담는다. arguments 는 "인자, 설정값"이라는 뜻이다. 첫 칸은 output_dir(결과를 둘 폴더)이다
per_device_train_batch_size=32장치(GPU 또는 CPU) 하나가 한 걸음에 보는 예제 수다. per device 는 "장치마다"라는 뜻이다
num_train_epochs=8학습 데이터를 8번 다 돈다
learning_rate=1e-3학습률 0.001 이다. 1e-3 은 1 × 10의 -3제곱을 짧게 적은 꼴이다
report_to="none"학습 기록을 바깥 서비스로 보내지 않는다
args.optim.value고른 옵티마이저(optimizer, 가중치를 고치는 방법)의 이름을 글로 꺼낸다

이 코드가 뜻하는 것

세탁기의 코스 단추를 누르기 전에 물 온도, 헹굼 횟수, 탈수 세기를 맞추는 단계입니다. 아직 시작 단추(trainer.train())는 누르지 않았습니다.

줄하는 일쉽게 말하면
args = TrainingArguments(...)폴더, 배치 크기, 에포크, 학습률을 정한다세탁 코스를 맞춘다
report_to="none"기록을 밖으로 보내지 않는다세탁 기록을 제조사에 보내지 않게 끈다
print(args.num_train_epochs, ...)정한 값과 기본으로 골라진 옵티마이저를 찍는다화면에 뜬 설정을 확인한다

출력에서 우리가 주지 않은 optim 값이 나온 것은, 따로 정하지 않은 설정은 TrainingArguments 가 기본값으로 채우기 때문입니다. 실습 5에서는 이 묶음에 warmup_steps, fp16, save_strategy 같은 설정을 더해 Trainer 에 넘깁니다.

주의할 점

  • Trainer 는 편리하지만 안에서 무엇을 하는지 보이지 않습니다. 결과가 이상하면 2장의 손 루프로 돌아가 한 단계씩 확인합니다.
  • report_to="none" 을 빼면 설치된 외부 기록 서비스로 학습 기록을 보내려 할 수 있습니다. 사내 데이터라면 꼭 끕니다.
← 이전 절4장 · 생성 설정다음 절 →4장 · GPU 메모리 어림하기