AI VIDEO BRIEFING
LLM 명령어 파인튜닝 직접 구현: 알파카 템플릿, 패딩 마스킹, Ollama 평가
세바스찬 라슈카가 사전학습된 GPT-2를 명령어를 따르는 비서 모델로 파인튜닝하는 과정을, 데이터셋 준비와 패딩 마스킹부터 학습, 그리고 Ollama를 이용한 자동 평가까지 코드로 차근차근 보여 줍니다.

핵심 메시지
쉽게 이해하기
이 영상은 'Build a Large Language Model from Scratch' 책의 7장 보충 강의로, 사전학습된 LLM을 명령어(instruction)를 따르는 작은 개인 비서로 바꾸는 과정을 다룬다. 앞 장에서 만든 스팸 분류기는 '스팸/정상'만 답했지만, 이번에는 자유형 텍스트로 여러 종류의 질문에 응답하는 더 일반적인 모델을 만든다. 다만 ChatGPT 수준은 수백만 달러가 들기에, 교육 목적의 작은 데이터셋과 모델로 개념만 동일하게 재현한다.
핵심은 데이터셋 준비다. 약 1,100개의 학습 예시가 담긴 JSON을 내려받는데, 각 항목은 instruction·input·output 세 필드를 가진다. 이를 '아래는 작업을 설명하는 지시문입니다…'라는 보일러플레이트를 앞에 붙이는 알파카 프롬프트 템플릿으로 변환해 평문 텍스트로 만든다. 발표자는 더 짧은 Phi-3 스타일 등 다른 형식도 가능하며 형식 자체에 너무 얽매일 필요는 없다고 강조한다.
데이터는 85% 학습, 10% 테스트, 5% 검증으로 나눈다(935·110·55개). 배치를 만들 때는 다섯 단계를 거친다. 포맷팅, 토큰화, 배치별 최장 길이에 맞춘 패딩, 한 칸 이동한 타깃 토큰 생성, 그리고 과도한 패딩 토큰을 -100으로 바꿔 손실에서 무시하기다. 패딩을 전체가 아닌 배치 단위로 적용하는 이유는 불필요한 패딩 토큰을 줄이기 위해서이며, -100은 PyTorch 교차 엔트로피 손실이 기본으로 무시하는 값이라 손실이 패딩 양에 휘둘리지 않게 한다. 문장의 끝을 학습시키기 위해 패딩 토큰 하나는 일부러 남긴다.
데이터로더를 만든 뒤에는 5·6장과 같은 방식으로 OpenAI의 사전학습 가중치를 불러온다. 다만 작은 1억 2400만 파라미터 모델은 응답 품질이 낮아 한 단계 큰 3억 5500만 파라미터(GPT-2 medium)를 쓴다. 파인튜닝은 5장의 학습 함수를 그대로 재사용하며, 손실 함수는 사전학습과 동일하게 다음 토큰을 예측한다. 발표자의 2020년형 맥북 에어에서는 두 에폭에 약 30분이 걸렸지만 A100 GPU에서는 1분이면 끝난다.
마지막 난관은 평가다. 자유형 응답은 정답이 하나가 아니어서 정확도로 재기 어렵다. 그래서 모델의 응답을 모두 JSON에 저장한 뒤, 로컬에서 Ollama로 Llama 3.2(30억) 모델을 띄워 각 응답에 0~100점을 매기게 한다. 110개 응답 중 14개는 점수로 변환되지 않았지만 평균 약 51.6점을 얻었고, 더 큰 평가 모델이나 개선된 채점 프롬프트(1~5점 척도, 루브릭 포함)를 쓰면 더 안정적인 결과를 얻을 수 있다고 안내한다.
주요 인사이트
- 명령어 파인튜닝의 손실 함수는 사전학습과 같은 다음 토큰 예측이다. 따라서 어려운 부분은 학습 자체가 아니라 데이터셋을 올바르게 구성하는 일이다.
- 패딩 토큰을 -100으로 마스킹하면 교차 엔트로피 손실이 그 위치를 무시해, 모델 학습이 배치마다 다른 패딩 양에 영향을 받지 않는다. 다만 문장 종료를 학습시키려 종료 토큰 하나는 남긴다.
- 명령어 파인튜닝(SFT) 다음에는 RLHF나 DPO 같은 선호도 정렬(alignment) 단계가 선택적으로 따라온다. DPO는 별도 보상 모델이 필요 없어 구현이 더 간단하다.
- LLM으로 LLM을 채점하는 방식은 흔한 평가법이지만 평가 모델의 크기에 크게 좌우된다. 작은 3B 모델은 같은 설정에서도 비결정적 결과를 내기도 한다.
- 더 나은 평가를 얻는 가장 가성비 좋은 방법은 프롬프트를 다듬는 것보다 더 크고 새로운 평가 모델(예: 더 큰 Llama, DeepSeek R1, 혹은 유료 API 모델)을 쓰는 것이다.
자주 묻는 질문
명령어 파인튜닝과 사전학습의 차이는 무엇인가요?
둘 다 다음 토큰을 예측하는 같은 손실 함수를 사용합니다. 차이는 입력 텍스트의 구조로, 사전학습은 원시 텍스트를 쓰지만 명령어 파인튜닝은 instruction·input·response 형태로 구조화된 텍스트를 사용합니다.
패딩 토큰을 -100으로 바꾸는 이유는 무엇인가요?
-100은 PyTorch 교차 엔트로피 손실이 기본으로 무시하는 값입니다. 과도한 패딩 토큰을 이 값으로 마스킹하면 손실 계산에서 제외되어, 배치마다 다른 패딩 양이 학습에 영향을 주지 않습니다. 단, 모델이 문장 끝을 배우도록 종료 토큰 하나는 남겨 둡니다.
자유형 응답은 어떻게 평가하나요?
정답이 하나가 아니어서 정확도로 재기 어렵기 때문에, 영상에서는 Ollama로 로컬에서 Llama 3.2 모델을 띄워 각 응답에 0~100점을 매기게 합니다. 테스트셋 110개에 대해 평균 약 51.6점을 얻었습니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗