AI

모개숲 딥러닝 스터디 - 10. The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits

META_BS 2024. 5. 16. 21:14

 

Large Language Model(LLM)

•모델 사이즈를 키우면 전반적으로 성능이 좋아짐
•예전에는 모델 크기를 증가시킬 때 오히려 성능이 낮아지는 경향도 있었으나,

    다양한 해결방법의 등장으로 위 전제가 어느정도 해결된 상태 (Scale is all you need)

•모델 사이즈를 키운다 = 파라미터가 많아진다
•파라미터가 많아진다 -> 학습 데이터가 많이 필요함. 연산량, 학습시간, 전력소모, 학습비용 증가

 

Model

• What is “Model”?

  - 인공지능 모델은 “함수”이다.

  -  Input x -> output y

•How to train “Model”?

  - Trainable parameters : W, b

 

  z11 = X1 * W11 + X2 * W21 + b1

  a11 = activation(z11)

역전파를 이용하여,

입력에 대한 함수의 출력과 실제 정답 간

오차를 줄이도록 W와 b를 바꾸는 과정

 

Quantization

실수형 변수 (floating-point type)를 정수형 변수(integer or fixed point)로 변환하는 모델 경량화 작업
Weight나 activation function의 값이 어느 정도의 범위 안에 있다는 것으로 가정
Bit수를 줄이면서 곱셈의 계산복잡도 감소
(int형 변수의 bit수를 N배 줄이면, 곱셈은 N*N배로 줄어듬)
장점:

  모델 사이즈 축소

  모델 연산량 감소

  효율적인 하드웨어 사용

• ResNet34_2bit > ResNet18_4bit
• 양자화를 통해 모델사이즈는 감소, 성능이 증가
• 작은 모델을 조금 quantization하는 것 보다 큰 모델에 quantization을 많이 하는게 이득
 
현재 트렌드는 FP16 -> FP4 정도로 양자화시키는것
그럼에도, 이는 최적이 아닌것같음. 극한으로 양자화 가보자
BitNet과 같은 파격적인 양자화에 대한 연구는 LLM의 비용을 크게 줄일 수 있을것
 
대부분의 계산 비용은 부동소수점 덧셈 및 곱셈 연산에서 비롯됨
BitNet은 정수덧셈만 하므로 많은 비용을 절약가능
 
 

1.58 Bit LLM

-1, 0, +1 세가지 값만 가지는 BitNet b1.58
- 왜 이름이 1.58인가?

    2비트와 3비트 사이 :  log_2(3) = 1.5849…

1bit 구조는 더 이상 행렬 곱셈이 필요하지 않음
이러한 작업을 처리하는데 최적화된 새 하드웨어가 필요할 것

 

- 왜 1Bit가 아니고 세개의 항을 사용하나?
 

b1.58은 기존의 1비트 BitNet의 이점을 유지하면서,

모델 가중치에 0이 포함되어 기능 필터링을 가능하게 하여 모델링 능력 향상 -> 성능을 크게 향상할 수 있음

3B에서 훈련했을때 최종 성능측면에서 1.58bit와 FP16간 성능 차이가 매우 적다

 

가중치를 {-1, 0, +1}로 제한하기 위해, absmean 양자화 함수를 도입

1.가중치행렬 W를 평균절댓값 r로 나눈다.
2. RoundClip함수는 x를 반올림 한 뒤 최솟값 a와 최댓값 b 사이로 제한.
a, b = -1, 1
max(-1, min(1, round(x))) 이므로 x는 {-1, 0, 1}에 가까운 값으로 매핑됨

 

3. r는 행렬 W의 모든 요소의 평균 (스케일을 위함)

 

- 성능이 줄어들지 않았나?

PPL(perplexity) 낮을수록 언어모델이 다음 단어에 대해 보다 정확한 예측을 수행함

동일한 모델 사이즈에서도 b1.58 모델이 LLaMA보다 우위임을 볼 수 있음

 

향후 발전 가능성

- 1bit Mixture of Experts(MoE)

전문가 혼합(MoE)방식은 LLM에서 비용 효율적이 증명되었음

높은 메모리소비, 통신 오버헤드 유발

1.58bit LLM으로 해결할 수 있음

- 긴 시퀀스 지원

KV Cache : 토큰 생성 시 계산되는 Key/Value 텐서를 GPU메모리에 임시저장한 뒤 재사용하는것.

컴퓨팅 양을 줄이는 대신 텐서를 저장해야하기 때문에 trade off 발생

적은 메모리를 사용하는 1.58bit LLM은 이러한 문제를 해결할 수 있을것

- Local에서의 LLM

모바일 기기와 같은 작은 하드웨어 장치에서 모델의 성능을 크게 향상시킬 수 있는 잠재력

또한 CPU에 더 친화적이므로, GPU가 들어있지 않은 기기에서도 효율적으로 작동할것

- 1bit LLM을 위한 하드웨어

Groq 머신러닝 추론 가속기 와 같은 연구는

LLM을 위한 특정 하드웨어를 구축하기 위한 유망한 결과와 큰 잠재력을 보여줌

1bit를 위한 하드웨어와 시스템 설계가 디자인된다면 훨씬 더 좋은 발전이 가능할 것

 

Training Tips, Code and FAQ

 

- 왜 {-1, 0, 1} 이 세가지 항만 사용하는가?

{-1, 1} : BitNet (1bit짜리)를 구현했는데 성능이 구려요
{0, 1} : 최적화가 불안정하고 학습이 잘 안되요
{-2, -1, 0, 1} or {-2, -1, 0, 1, 2} 와 같이 추가적인 비트의 사용 : 삼항이랑 별 차이 없어요

 


- {-1, 0, 1} 값의 분포는?


대체로 균일함

 


- Full-precision 모델에서 post-training quantization(PTQ, 사후훈련 양자화) 사용은?

Full-precision을 훈련하고 8비트나 4비트까지 줄이는데는 성공적이었으나,
더 낮은 정밀도로 가중치를 양자화 하는데 어려움이 있었다.
실험적으로도 PTQ 훈련이 어렵다는것이 확인됨.
양자화를 할수록 크게 낮아지는 정확도, 개선이 불능하다고 판단되었다.

 

- 훈련이 빨라지나요?

추후 연구를 통해 훈련을 가속화 할 수 있는 잠재적인 방법들이 있을 것


- 더 큰 모델에서도 잘 되나요?


모델 크기가 커질수록 full-precision과 BitNet 1.58 사이의 loss가 줄어드는 것을 확인할 수 있다.
추세적으로 봤을 때, 더 큰 모델에서 더욱 효과적일 것
1.58비트 모델은 더 나은 일반화를 수행하고, overfitting 확률을 낮춘다.