지식 증류와 관련된 배경
문제 제기:
학습을 시키기에는 LLM은 너무 크다. 한정적인 개인의 자원으로는 불가. (로드도 힘듦)
대안 1: 경량화 학습
1. Model reparameterization (재매개변수화) : LoRA
2. Quantization (양자화 - 파라미터 자료형 축소)
3. Knowledge distillation (지식 증류)
4. Model scaling : yolo v5 m, s, n
대안 2: RAG (학습 X)
지식증류란?
LLM의 능력을 보다 작은 모델에 '전수'하는 과정을 Knowledge Distillation (지식 증류) 또는 LLM Distillation이라 부릅니다.
데이터의 label이 없어서, 교사 모델에게 질문을 주고 예측 값을 정답이라고 생각하고 학습한다.
- 고품질 응답을 생성하는 교사 모델 설정 및 응답 필터링
- 학생 모델의 추론 전 성능 측정
- 증류 데이터 생성 및 Alpaca 포맷 변환
- LoRA 기반의 경량 파인튜닝 수행
- 학습 전후 학생 모델의 성능 비교 및 추론 테스트
Teacher 모델의 출력 응답을 그대로 따라하도록 학습시키는 증류 방식
- Teacher: 고성능 LLM (예: LLaMA, text-davinci-003 등)
- Student: 경량 LLM (예: 3B/7B 모델)
- 학습 방식: Teacher의 응답 텍스트를 target으로 하여 student가 이를 그대로 재현하도록 학습
목차
1) 실습 준비
(1) 라이브러리 설치 및 환경 설정
(2) 데이터셋 로드 및 확인
2) 교사 모델 로드 및 증류 데이터 생성
(1) 교사 모델 로드 (float16)
(2) 응답 필터링 함수 정의
- 교사 모델이 생성한 응답 중 품질이 낮은 것들을 걸러내기 위한 유효성 검사 함수를 정의하는 부분
(3) 증류 데이터 생성 및 샘플 확인
3) 학생 모델 로드 및 학습 준비
(1) 학생 모델 로드 및 LoRA 설정
(2) 학습 데이터 구성 (ChatML 포맷 적용)
이 실습에서는 ChatML 스타일의 대화형 프롬프트 포맷(<|system|>, <|user|>, <|assistant|>)을 기반으로 학습 텍스트를 구성합니다.
ChatML 포맷은 Meta의 LLaMA 3 계열 모델에서 사용하는 구조이며, 사용자/시스템 발화 구분을 명확히 할 수 있어 효과적인 fine-tuning이 가능합니다.
4) 학생 모델 학습 및 저장
(1) 학습 설정 및 진행
(2) 모델 저장
5) 증류 결과 확인 및 비교
(1) 증류 전후 응답 비교
(2) 간단한 추론 테스트