이 글은 1편 LLM 이해하기
에서 이어지는 글 입니다.
바로 이 글에서 파인튜닝을 설명하기 위해
1편에서 LLM
에 대해 알아보며 빌드업 한 것입니다.
1편에서 파인튜닝 부분을 잠시 요약 하겠습니다.
이제 FM 모델과 LLM을 알았으니, 지금 제가 하는 중인 파인튜닝 이해는 쉽습니다.
파인튜닝의 결과물은 이렇습니다.
원본 FM 모델
+내가 학습한 부분만 가지고 있는 작은 모델
=우리의 모델
간단합니다.
즉, 인간의 말을 잘하는 FM 모델은 메타를 시작으로 여러 대형 회사가 내놓았습니다.
그러나 FM은 보편적 지식만 가지고 학습한 모델 입니다.
우리는 아임웹을 잘 아는 모델(내 목적에 특별히 더 학습한)이 필요하죠.
그래서 FM모델을 갖고와서는, 원래 있던 룰은 그대로 두고
그 위에 우리 아임웹의 지식을 갖다 부어 추가적인 룰을 만들어요.
그리고 그 룰을 병합하면!
짠! 우리 모델이 태어나는 것입니다.
파인튜닝은 바로 이것입니다.
그런데, 어떻게 할까요?
의외로 이론은 간단합니다.
CSV, JSON
같은 형식의 데이터를 준비 합니다.LLM용
프롬프트를 만듭니다."아래 질문에 해당하는 답을 친절하게 대답해줘. 질문: 넌 누구니? 대답: 난 천재야"
"아래 질문에 해당하는 답을 친절하게 대답해줘. 질문: 넌 누구니? 대답:"
이라고 모델에 입력하면,“난 외계인이야”, “넌 누군데?”
이러면 0점
을“난 AI야”
이러면 1점
을“난 천재야”
이러면 100점
을 주는거죠.수백/수천번
을 물어봐야 함은 인지상정이고요.계~속 반복
합니다.Loss 율
이 점점 떨어지게 됩니다.Step
기반 과 Epoch
기반으로 조정 할수 있는데요.Step
은 한 질문 데이터 하나 하나 진행한 횟수를 말하고요Epoch
은 제공한 모든 데이터를 한번 다 돌리면 1
이 되는 값 입니다.2~3 Epoch
정도는 돌려야 모델이 감을 잡기 시작 합니다.수백 시간
걸려 학습을 마친 모델이, 튜닝된 우리만의 고유한 모델이 됩니다.ML(Machine Learning)
경험이 있으신 분은, 결국 LLM 학습
도 머신러닝 기계학습과 크게 다를 바가 없다는 걸 아실겁니다.
데이터를 준비해서, 예상 질/답을 하고, 모델이 답에 가까운 말을 할때까지 계~~속 학습해서, 그 결과물을 취하는 것입니다.
간단한 설명을 위해서 데이터셋을 학습용
과 테스트용
으로 나눈다는 말까진 하지 않았습니다.
아무튼 비교적 간단해요.
그러나 데이터셋 만큼 배수로 수천 수만번 추론
하기 때문에 시간과 비용이 많이 듭니다.
그런데, 시간과 비용에 절대적인 영향을 미치는 장비가 있습니다.
바로, 메모리
입니다.
메모리가 어마무시하게 많이 필요합니다.
모델이 계속 추론을 반복해야 하고, 또 학습 데이터 자체도 메모리에 올려야 하고,
중간단계의 결과물도 메모리에 계속 갖고 있어야 합니다.
정말 메모리가 어마 어마하게 필요합니다.
근데, 더 큰 문제는 여기서 말하는 메모리는 PC RAM
이 아니고, GPU VRAM
입니다.
학습이란, GPU
와 바로 붙어있는 VRAM
에서 데이터를 어마어마하게 꺼내쓰고 저장하고 하는데,
그 데이터 양이 무지하게 크므로, 시간이 많이 걸리게 됩니다.
쪼개서 할수도 없어요.
모델이 학습 과정에 추론을 해야 해서, 전체 모델 데이터가 메모리에 있어야 합니다.
결국 VRAM
은 모델 용량 의 최소 2배 이상을 확보해야 합니다.
하지만, VRAM
은 엄청나게 비싸요.
PC는 DDR5
를 쓰지만, 소비자용 고성능 GPU
카드는 DDR6
을 씁니다.
그리고 VRAM
은 보통 그래픽카드에 내장되어 확장이 불가능 합니다.
다만 맥북은 VRAM과 RAM이 통합되어 용량면에서 이득이 있으나, 대역폭은 느립니다. 따로 검색해보세요~!
Nvidia 의 최신 세대인 4090
이 딸랑 24GB
이고 GPU는 VRAM으로 DDR6
을 쓰는데요.
DDR5
에 비해 대역폭이 약 2배 입니다. (결국 한번에 2배의 양을 주고 받음)
그런데, 소비자용 GPU 말고 AI 용 카드가 따로 있습니다.
T4, V100, A100, H100
같은 모델명을 가진 Nvidia 제품군 인데요.
일단 CPU / 냉각 장치 같은 다른 장비는 다 치우고, 순수 카드의 RAM만 보면
T4 16GB / V100 40GB / A100 40GB, 80GB / H100 80GB
처럼 제공되는데요.
이런 AI용 카드에 들어가는 VRAM은 DDR6
이 아니라 HBM
이라는 고대역폭 초고성능 메모리를 사용 합니다.
DDR6
과 비교도 할수 없는 수치로 대역폭(최대 400GB, DDR5의 20배
)이 올라갑니다.
어마어마하죠? 가격도 어마어마 하겠죠? 80배 향상인데요.
4090 24GB
를 1장에 300만원대면 구할 수 있으나
A100 80GB
는 4천만원이 넘고, 물량도 없으며
H100 80GB
는 8천만원이 넘고 역시 구할 수 없습니다.
(구글, 메타, MS가 싹 쓸어갔다는 그 카드 입니다.)
이것이 바로, 개인이나 중소기업이 LLM 연구가 어렵다고 하는 이유 입니다.
그런데요.
그렇다고 손가락만 빨 수는 없잖아요?
소프트웨어로 해결을 해보는 다양한 시도가 늘어났습니다.
오늘 딱 1가지만 먼저 소개할께요.
바로 모델 양자화 입니다.
모델을 구동할때 필요한 VRAM 사이즈를 줄이는데 목적이 있습니다.
네, LLM을 잘 다루려면, 메모리 싸움을 잘 해야 합니다.
“뭐지, 또 수학인가” 하시는 분들을 위해 미리 말씀 드리면, 수학은 아니고 압축 입니다. (그게 그건가?)
엄밀하게 말하자면 수치 계산을 하는 것이기 때문에 수학을 쓰기는 합니다.
어려운건 치우고 아주 쉽게 설명 할게요
모델의 가중치의 룰 하나하나는 각각의 소숫점 숫자값 입니다.
일반적으로 FP32 즉, 32 Bit 부동소숫점
단위로 모델이 만들어 집니다.
다 빼고 말하면 약 소숫점 7자리까지 오차없이 정확히 저장할수 있는 단위 입니다.
이렇게 수십억개의 모델 가중치를 소수점으로 저장하고 있는게 모델인데요.
문제는 숫자 하나를 저장하는데 메모리 32 Bit
가 필요한 것이죠.
그럼 가중치당 4바이트 (32bit / 8) [1바이트 = 8비트)
가 필요합니다.
그래서 7B 모델은 70억개니까 7,000,000,000×4=28,000,000,000 바이트
약, 26 GB가 나옵니다. 7B 모델이 메모리가 VRAM이 26 GB가 필요한 것
이지요.
4090
이 24GB
이므로, 4090 으로도 7B 모델을 돌릴 수 없겠죠?
일단 32 Bit
를 줄여서 8 bit
으로 저장 할수 있다면, 메모리 용량도 1/4
이 되겠죠?
그럼 이제 어떻게 줄일거냐 입니다.
여기서 수학이 사용 됩니다.
일단 32 bit
를 8 bit
로 줄여요.
그리고 나중에 연산할때 8 bit
를 다시 32 bit
로 복구하여 추론하는거죠.
예를 들어 원본이 0.15625
인 값을 8bit
로 줄일때 스케일을 통해 정수 범위로 인코딩 하면
(1.0−(−1.0))/(255−0)=2/255≈0.0078
이렇게 0~255 범위의 정수
로 줄일수 있습니다.
(8비트는 256가지의 정수를 저장할수 있죠)
0번에는 얼마, 1번에는 얼마 이런식으로 제로포인트라는 기법으로 딕셔너리를 만들고요.
위 경우는 8bit
로 바꾸면 128
이 됩니다.
이제 위 정보를 안다면, 역산으로 나중에 128
로 0.15625
를 알수 있지만
이때 정확히 0.15625
이하의 소숫점 값은 사라집니다. 그 주변의 값도 128이 되기 때문 입니다.
여기서 가중치의 손실이 발생하죠.
애써 학습하여 룰을 만들었는데 몇가지 룰이 양자화 거치면서 사라지기 때문 입니다.
그래서 원본 모델의 가중치와 다르게 손실이 있는채로 텍스트를 생성하게 됩니다.
(모델이 약간 이상한 말을 할 수 있음)
그래서 양자화를 거친 모델은 용량은 줄지만 원본 모델보다 성능은 떨어질수 밖에 없습니다.
그런데 성능이 얼마나 차이가 날까요?
아래는 Llama2 7B
를 양자화 했을때의 예시 입니다.
(100% 정확한 값은 아니며 근사치 입니다.)
양자화 방식 | 정밀도 (비트) | 메모리 사용량 (GB) | 정확도 (F1 스코어) |
---|---|---|---|
FP32 | 32 | 28 | 85.0 |
FP16 | 16 | 14 | 84.8 |
INT8 | 8 | 7 | 83.5 |
INT4 | 4 | 3.5 | 80.0 |
위 표가 말해주듯이 정밀도를 떨어 트릴수록, 필요한 메모리 용량은 급격히 줄어들지만,
정확도 (추론 정확도)는 크게 떨어지지 않는 모습이 관찰 됩니다.
따라서 나의 학습 데이터와 추론 프롬프트에 따른 양자화별 성능을 평가해보고
우리의 요구사항에 맞는 양자화 선택이 필요하죠.
개인적인 경험으로는 대체로 INT8
까지는 훌륭한 선택이 되었습니다.
VRAM
이 어마어마 합니다.VRAM
사용량을 극적으로 줄일 수 있어서,추론은 위처럼 해결 했다 하더라도, 학습에는 역시 원본 모델이 필요합니다.
원본 모델은 대부분 FP32
또는 FP16
정밀도를 사용하고 있기 때문에
학습에 필요한 하드웨어 VRAM
요구사항이 어마어마 해집니다.
그런데 이문제도 해결할 기술이 나왔습니다.
다음 글에서는 추론이 아닌 학습 단계에 필요한 VRAM
사용량을 줄일 수 있는 획기적인 기술인
LoRA 그리고 QLoRA
를 알아보도록 하겠습니다.
오늘은 다소 글이 길었습니다.
그래도 양자화에 대해 조금이라도 쉽게 이해가 되셨기를 바래요.
감사합니다.
아임웹 CTO 매튜 드림.