증류기법이 왜 나오게 되었으며 필요성은?
- 거대 언어의 시대 도래 : 2017년 BERT가 나온 후 2020년 GPT가 나오게 됨
- 사용되는 알고리즘은 바뀐게 없지만 size가 커짐
- 의도한게 아닌 발견에 의해(context learning) 여러가지 기능이 나옴
- 창발현상
- 모델이 커지면 어느 시점부터 등장
- 대표적인 창발현상 : in-context learning
- 스케일 전쟁의 시작
- GPT3 → LaMDA → pathways → Chat GPT → GPT4 → Claude Sonnet
- Claude Sonnet의 경우 역으로 어떤 뉴런이 사용되는지 연구한 것(관련있는 data, 관련없는 data를 넣었을 때 두 집단 사이의 뉴런 차이를 통해 어떤 뉴런이 사용되는지 연구)
- 문제 : 연산자원의 부족
- 단위 연산 자원당 비용 감소
- 돈으로 해결…→ 규모의 투조가 다른 모든 요소를 압도
- 돈으로도 안되는 문제 발생 → 토큰(데이터)가 부족! 이미 인터넷에 있는 데이터를 대부분 긁어와서 사용함.. → 대안 : 합성 데이터 생성(ex, Gemma2 스몰 모델 : 큰 모델에서 생성된 데이터로 훈련), Student-Teacher 모델(큰 모델을 만들어 임의의 데이터를 넣고 그에 대한 출력값으로 데이터셋 생성, 훨씬 작은 모델들의 앙상블을 만들고 앙상블을 훈련시켜 가장작은 모델 선택)
큰 모델을 만든 다음에 작은 모델에 합성 데이터들을 왕창 집어넣어서 성능을 유사하게 만드는 것을 ‘증류’라고 함
- 그럼 문제가 무엇일까?
- 문제 : 모델 열화
- 우로보로스 문제 : 할로지네이션으로 학습된 모델은 더 큰 할로지네이션
- 모델에서 만들어진 데이터로 모델을 훈련하면 성능 열화가 방생
- .임시 해결책 : 훤씬 더 크고 성능이 좋은 모델을 사용하여 데이터 품질을 개선
- NeMoTron, Llama 3.1
- 두 모델 모두 “데이터 생성 활용”을 주 용도로 내세움 …서비스하긴 너무 크니까
- 태깅이 없는 데이터를 어떻게 훈련에 사용할까? → 문장 : 데이터의 구조만으로도 훈련이 됨
Project : Soju maker
- 동기 : LLM을 학습하여면 고품질의 잘 구조화된 데이터가 필요.
- But, 현재 인터넷 아카이브에 기반한 한국어 말뭉치에는 관고, 스팸, 전화번화 같은 가비지 정보 다수 포함
- 알고리즘 및 모델 : Gemma의 강력한 한국어 토큰화기를 원용하여 한국어 데이터 정제 모델로 사용해보자!
- 목표 : TensorRT-LLM 과 Backend.AI를 사용하여 test
- Gemma : 구글의 개방형 LLM/ VLM 모델, 로컬 서버 및 구글 클라우드를 통해 사용 가능
- 세가지 모델 유형 : Gemma, PaliGemma(VLM), Recurrent Gemma(Non-transformer 구조)
- 장점 : Gemma와 토크나이저를 공유 → 한국어 지우너 개선 : 늘어난 토큰의 상당부분이 한국어에 할당됨
- Soju 프로젝트의 목표 : 쓰레기 데이터를 넣어서 멀쩡한 데이터를 뽑아내자!
- 필요한 것 : LLM학습에는 고품질의 잘 구조화된 데이터 필요
- 문제 : 너무 데이터가 쓰레기라 맛이 간 모델이 나왔음
- 어떻게 개선 ? : 고급 데이터 정제기술 사용, 원시 말뭉치 정제,
- 데이터증류
- 공개된 데이터셋을 사용 : HPLT
- Awesome-Korean-Dataset 소스로도 테스트
- Few-shot learning
- 문제 : 토큰 생성 속도를 올려야함
- 해결책 : 프로파일링
- nsight profiling log를 찍어서 모든 인스트럭션의 실행타이밍 추적
- 배치 →큰 영향을 미침 because 다른 데이터가 들어올떄까지 기다려서 한번에 보내는데 딜레이가 발생하는 등 문제가 있을 수 있기에 : 기존엔 in-flight batching이 없었음, medusa 켜기..