반응형
FP8
- FP32는 메모리도 많이 먹고 무엇보다도 추론시 메모리에 올리고 쓰는 순간 대역폭 오버헤드가 발생함
- 그래서 FP8처럼 기존 FP32 모델을 작게 양자화시켜서 메모리에 올림
- 근데 이러면 정확도가 구려지니까 각 양자화된 가중치에 곱했을 때 FP32 원본 가중치와 유사한 "근삿값"을 얻을 수 있는 "스케일링 값"을 계산함
- 그래서 FP32 원본만큼 정확하지는 않지만, 텐서코어 등의 GPU 칩셋 내부에서 처리하여 메모리 보틀넥을 줄임
그런데 문제는 보통 AI 모델에는 수백개의 텐서가 있고 내부에 수백~수천만개의 파라미터가 있음. 스케일링 값은 이 텐서 단위로 계산됨.
=> 즉, 텐서 내 수백만~수천만 개의 파라미터가 32비트 스케일 값 하나에 의존하는 구조라는 것
MXFP8

https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf
- 기존 FP8은 하나의 FP32 스케일 값을 FP8 가중치에 일괄적용
- MXFP8은 각 원소 (파라미터)를 32개 단위로 청킹하여 각 청크마다 스케일 값을 독립적으로 계산 (이때 이 스케일 값은 FP8과 다르게 32비트가 아닌 8비트 정밀도를 사용 -> 그래서
E8M0임) - 따라서 추론시 FP8의 파라미터를 원본 FP32로 근사할 때, MXFP8은 보다 더 정확하게 근사할 수 있다는 의미
- 물론 청크에 적용될 스케일 값을 각각 청크마다 계산하고 저장하니 필연적으로 파라미터가 커질수록 모델 크기가 증가함
- 하지만 FP8 vs MXFP8 모델 크기를 비교하면 3B 기준 ~3GB vs ~3.09GB라 큰 의미는 없음
- E8M0? => Exponent 8bit, Mantissa 0bit 라는 뜻인데, 어짜피 이 값은 스케일링만 하는 용도기 때문에 따로 Mantissa는 안넣었다고 함. Mantissa가 들어가는 순간 단순 bit shift에서 연산이 끝나는게 아니라 아예 multiplication을 해야하기 때문
반응형