Efficient AI
- 온디바이스에 AI 모델을 적용하는 사례가 늘면서 '경량화'가 화두가 됨
- 왜? ai model은 계속 커지고 있음 vs 그대로 Application에 적용하기에는 비용적 cost가 너무 큼
- hardware, software 어느 쪽 하나의 approach만 필요한 것이 아닌, holistic approach가 필요한 부분
- AI 모델을 구동하기 위한 cost를 낮추기 위하여, 경량화의 공부가 필요함
- 새로 나온 모델, 경량화 방법론 등을 알아보고자 함
Background of Efficient AI
- ai 모델이 더 다양하고 복잡한 task를 수행하고자 점차 크고 복잡한 모델이 만들어지게 되었다.
- 그게 트렌드.. 크기를 키우는게 가장 성능을 쉽게 높이는 방법이더라..
- 특히 언어모델의 경우 매해 그 파라미터 수가 약 40배씩 증가하는데, 이를 AI Application에 적용할 때 비효율성의 문제가 제기되기 시작함.
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.
- 모델의 추론 시, 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에 비해 높음
[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가 많이 든다.
최근 LLM의 경우 Weight을 low bit int로 quantization을 많이 하고 있다. (activation은 양자화가 까다로워 그냥 fp로 두는 경우 대다수)
activation이 여전히 fp이기 때문에 연산이 fp 연산일 수 밖에 없지만, weight loading과정에서 메모리를 아낄 수 있다.
int끼리의 연산이 이루어지므로 연산이 많이 단순해진다.
quantization 알고리즘을 나누는 또 다른 방법으로는, quantization 함수를 입히는 단위에 따라 나누는 방법이 있다.
[ Quantization 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 |
---|