AI 모델의 경량화

Jiwon Kim
|2024. 4. 1. 21:01

  Efficient AI  

 

- 온디바이스에 AI 모델을 적용하는 사례가 늘면서 '경량화'가 화두가 됨

- 왜? ai model은 계속 커지고 있음 vs 그대로 Application에 적용하기에는 비용적 cost가 너무 큼

- hardware, software 어느 쪽 하나의 approach만 필요한 것이 아닌, holistic approach가 필요한 부분

- AI 모델을 구동하기 위한 cost를 낮추기 위하여, 경량화의 공부가 필요함

- 새로 나온 모델, 경량화 방법론 등을 알아보고자 함

 

 

 

   Background of Efficient AI   

 

- ai 모델이 더 다양하고 복잡한 task를 수행하고자 점차 크고 복잡한 모델이 만들어지게 되었다. 

- 그게 트렌드.. 크기를 키우는게 가장 성능을 쉽게 높이는 방법이더라..

- 특히 언어모델의 경우 매해 그 파라미터 수가 약 40배씩 증가하는데, 이를 AI Application에 적용할 때 비효율성의 문제가 제기되기 시작함.

 

https://arxiv.org/abs/2001.08361

 

 

OpenAI의 ChatGPT를 가동하는데 하루에 약 $100,000의 비용이 든다고 한다. 

이렇게 큰 인공지능 모델들은 연산할 수 있는 양 대비 cost가 매우 큰 것을 확인할 수 있고

이 효율성이 사람의 뇌에 비해 상대적으로 낮은 수준이기에, 이에 대한 개선이 필요함. 

 

 

   What is Efficient AI?    

 

Efficient AI System을 구성하기 위해서 우리는 compression & acceleration을 모두 고려해야 한다. 

 

1. Compression : 모델 자체를 작게 하는 방법 (파라미터 수 줄이거나 precision을 낮추는 방법) -> can reduce storage cost

(하지만 이는 연산을 빨리하게 하는 방법은 아님)

2. Acceleration : 연산 속도를 높이는 방법 -> can reduce computation cost, ai 알고리즘 가속 

 

이 연구가 어려운 이유

- 벤치마크 데이터 셋이랑 실제 use case 에서의 데이터 차이가 있기 때문에 테스트 했을 때 성능이 좋다고 실제로 좋다고 할 수 없음 

- 새로운 모델이 계속 업데이트 되는데, 모델마다 경량화를 따로 해야하므로 (프레임워크가 계속 변해야함) 불편함이 있음

- 경량화를 했어도, 경량화 target은 성공했음에도 불구하고 실제로 그 target이 포함된 전체시스템을 돌렸을 때 효과가 별로인 경우가 있음..

- AI model이 작동하는 하드웨어적인 부분도 함께 고려되어야 함 (오히려 더 느려지는 경우, 하드웨어마다 최적화 된 태스크가 달라서 cpu에서는 빠른데 gpu에서는 느려지는 등)

 


 

 

   Model Compression Techniques    

 

1. Quantization : reducing precision (학습이 끝난 이후 precision을 32bit fp, 16bit fp → int로 바꿈)

2. Pruning : dense to sparse representation

3. Knowledge Distillation : student model with teacher model

(1,2,3 : 큰 모델을 작게 만드는 방법)

4. Efficient Architecture : 처음부터 작고 연산이 빠른, 성능 좋은 모델 개발

(요즘 LLM에서 활발히 연구되는, 파라미터 수 적은데 성능 좋은 모델... 젬마같은)

 


 

(1) Quantization 

 

Quantization is the process of constraining an input from a continuous or otherwise large set of values to a discrete set. 

 

https://ieeexplore.ieee.org/document/8100244

 

- 모델의 추론 시, computational and memory cost를 줄이기 위한 테크닉 

- weights, activations를 보통 32-bit floating point (float32)로 하는데, 이 대신에 low-precision data types ( ex. 8-bit integer (int8))로 바꿔줌

- 보통 float 32에서 float 16으로 또는 float 32에서 int8로 압축되는 사례가 많다.

 

 

- precision을 낮추면 저장하는 메모리가 작아지기 때문에 embedded device에서 이를 읽어내는데 더 적은 비용이 든다.

 

Quantization에는 fixed point dnn quantization / floating point dnn quantization이 있는데, fixed point ~ 는 forward 연산에 대해서만 양자화를 하고 backward 연산에서는 full precision으로 연산을 수행한다. (floating point~는 backward 연산도 quantization하여 훈련과정에서도 적은 bit의 연산을 수행해냄)

 

forward 연산에만 quantization을 적용하는 fixed point ~ 중 PTQ와 QAT를 설명하겠다. 

- 여기서는 scale의 정도와 zero-point를 어떻게 설정할 것인지, 그 두 개를 찾는 방법에 따라 카테고라이징하면 아래 도식과 같다.

- fixed point에서 scale과 zero-point에 대한 개념은 여기서 확인할 수 있다. 

 

'Nerual Network Quantization for Efficient Inference:A Survey'에서는 quantization을 pre-trained model로부터 시작하는 것이 NN의 quantizaing에서 정확도 손실을 낮추는 방법이라고 한다. 

pre-trained NN을 quantizaing하는 두 가지 방법으로 quantized-aware training (QAT)와 post-training quantization (PTQ)가 있다. 

 

- QAT : 가중치를 선 양자화 - 그 다음에 훈련, PTQ에 비해 Accuracy degradation이 낮다는 장점

- PTQ : 알고리즘이 간단하여 양자화 과정에 시간이 적게 소요, minimum precision이 QAT에 비해 높음

 

Calibration data for PTQ can be either a subset of training data or a small set of unlabelled input data.

 

 

 

 

[QAT]

 

- BNN 

https://arxiv.org/abs/1602.02830

https://arxiv.org/abs/1511.00363

- LSQ 

https://arxiv.org/abs/1902.08153

 

 

[PTQ] 

- cost가 낮아서 많은 프레임워크에서 PTQ scheme을 제공 중

 

 

[ Weight Quantization ? Activation Quantization? ] 

 

DNN은 Activation과 Weight사이의 matix multiplication으로 구성됨. 

둘다 floating point이다 보니까 floating point 연산에 연산 cost가 많이 든다. 

AS-IS

 

최근 LLM의 경우 Weight을 low bit int로 quantization을 많이 하고 있다. (activation은 양자화가 까다로워 그냥 fp로 두는 경우 대다수)

 

Weight만 Int로 quantizing

 

activation이 여전히 fp이기 때문에 연산이 fp 연산일 수 밖에 없지만, weight loading과정에서 메모리를 아낄 수 있다. 

 

Weight & Activation 모두 quantizing

 

int끼리의 연산이 이루어지므로 연산이 많이 단순해진다. 

 

 

quantization 알고리즘을 나누는 또 다른 방법으로는, quantization 함수를 입히는 단위에 따라 나누는 방법이 있다. 

 

[ Quantization Granularity ]

점점 granularity가 작아짐

 

1. 전체 weight matrix에 대하여 함수를 하나로만 적용하는 방법

2. output 채널 단위로 quantization함수를 정의해서 양자화를 적용하는 방법

3. 상대적으로 low-bit  precision에서도 accuracy 보존 가능성이 커짐 , 하지만 deploy가 어려움


 

(2) Pruning 

 

https://arxiv.org/abs/1506.02626

 

Neural network pruning is the process of removing less important neurons, connections, or weights from the network based on certain criteria to create a more efficient and smaller network.

 

학습을 마친 후 중요하지 않은 컴포넌트를 날리는 알고리즘 (뉴런 단위, 심지어는 transformer block 단위로도 날릴 수 있음)

 

 

 

 

 

 

'Study > 경량화' 카테고리의 다른 글

LoRA ( w/ Huggingface 🤗 PEFT)  (0) 2024.02.11