본문 바로가기

AstraGo

딥러닝 모델을 최적화하는 방법 'AI 모델 경량화'

 

AI모델경량화-모델경량화-인공지능경량화-딥러닝경량화

 


"딥러닝 모델을 최적화하는 방법? "

 

 

안녕하세요, AI 영상 분석 전문 씨이랩입니다😊 AI 시장이 커지고, 많은 빅테크기업은 더 나은 성능과 효율성을 위한 딥러닝 모델을 끊임 없이 개선하고 최적화하고 있어요. 이때 딥러닝 모델개발과 배포 과정에서는 많은 시간과 비용의 리소스가 들게 되는데요.

 

딥러닝 모델의 크기와 연산량이 커짐에 따라 학습과 추론 과정에서 요구되는 자원과 비용은 증가하게 되고, 응용 모델이 개발됨에 따라 모바일 기기 등에서는 제한 정보 자원을 추론 지원 또한 요구되는데요. 따라서 AI 업계에서는 모델을 더 효율적으로 실행하고 저사양 하드웨어나 제한된 환경에서도 사용 가능하게 만드는 '모델 경량화'에 대해 큰 관심을 두고 있어요.

 

오늘은 AI 모델의 크기가 커질수록 함께 뜨거운 주목을 받고 있는 '모델 경량화' 에 대한 세부 내용과 AstraGo을 통한 실제 비교 사례까지 살펴보는 시간을 가져보겠습니다 :) 🤗

 

| 모델 경량화, 무엇일까요?

인공지능-AI-데이터
이미지 출처:코그넥스

모델 경량화는 대규모 및 복잡한 AI 모델을 작고 가벼운 형태로 변환하는 기술과 방법을 의미해요. 즉, 딥러닝 모델의 크기를 줄이고 효율성을 높여 비용 및 시간을 절감하는 방법이죠! 모델을 경량화하는 방법은 크게 두 가지로 나뉘며, 첫 번째는 학습된 모델의 크기를 줄이는 방법이고, 두 번째는 네트워크 구조를 효율적으로 설계하는 방법인데요.

 

이처럼 다양한 방법으로 모델 크기를 줄이고 계산량을 최소화하면, 모바일 및 에지 컴퓨팅 장치 등 보다 더 다양한 환경에서 효율적으로 실행이 가능하답니다 :) 😁

 

실제로 씨이랩의 AstraGo에서도 경량화 전/후 모델의 GPU 사용량을 비교해볼 수 있었는데요. 경량화된 모델은 최대 42%의 GPU 사용 효율이라는 결과값을 얻을 수 있었어요. 해당 이유에 대해, 아래에서 자세하게 설명드리겠습니다.

 

| 모델 경량화가 왜 필요할까요?

AI모델경량화-모델경량화-인공지능경량화-딥러닝경량화-AI파라미터
이미지 출처: EPOCH AI

 

 

모델 경량화는 모델의 크기, 계산 요구 사항 및 메모리 사용량을 줄이는 일련의 과정이에요. 그렇다면, 왜 모델의 크기를 줄이는 것이 업계의 동향이자 수요가 되었을까요? 정답은 바로 점점 커지는 AI 모델 크기 때문이에요. 위의 그래프가 보여주듯이 비전, 언어, 게임 등 다양한 분야의 AI 모델은 많은 파라미터 개수로 인해 무거워지고 있어요. 그 중에서도 빨간색 경계선을 넘은 멀티 모달과 생성형 AI가 가장 많은 파라미터 수를 가지고 있다는 것을 알 수 있는데요.

 

 

따라서 AI 모델을 학습·추론하는 데는 기존보다 더 오랜 시간과 자원이 필요하고, 고사양의 하드웨어가 요구돼요. 이러한 문제를 해결하기 위해 모델의 성능은 기존과 동일하게 유지하되, 저사양의 하드웨어 환경에서도 학습과 추론 속도를 가속화하기 위한 <모델 경량화> 기술이 탄생하게 되었습니다.

 


| 딥러닝 모델 경량화 방법

크게 4가지의 항목을 기반으로 모델의 크기를 줄이고, 딥러닝 모델을 최적화할 수 있어요.

 

1. Weights : 모델 사이즈, 메모리 사용량, 공간 차지율을 줄이는 가장 대표적인 모델 경량화의 방법이에요.

 

2. Activations : 활성화 함수로 불리는 Activations은 딥러닝 메모리의 대부분을 차지하는 경우가 많은데요. 따라서 Activations의 크기를 줄이면 메모리 사용량을 크게 줄일 수 있을 뿐만 아니라 모델의 성능도 개선이 가능해요.

 

3. KV cache : KV cache는 딥러닝 모델에서 사용되는 일종의 메모리 캐시 구조입니다. KV cache는 주로 시퀀스 생성 작업에서 모델의 효율성을 높이기위해 사용됨으로 KV Cache를 정량화하여 긴 시퀀스 생성의 처리량을 개선해줘요.

 

4. Gradients : 모델 학습 시, Gradients는 일반적으로 부동 소수점 숫자에요. 주로 분산 컴퓨팅에서 통신 오버헤드를 줄이는 역할을 하며, backward pass 시 비용을 줄일 수 있어요.

 

그렇다면 실질적으로 모델 경량화는 어떤 방식으로 이루어지는걸까요? 모델 압축을 위한 대표적인 접근 방법 3가지를 설명드릴게요 🤗


 
 
AI모델경량화-모델경량화-인공지능경량화-딥러닝경량화-모델가중치양자화-AI파라미터
✅모델 가중치 양자화 (Weight Quantization)
파라미터가 사용하는 부동 소수점의 값을 줄여서 연산의 효율을 높이는 방법이에요. 대부분 파라미터의 weight 값인 FP32 (32-bit floating point)를 FP16 (16-bit floating point) 또는 INT8 (8-bit integer)로 낮추어 모델의 크기를 줄일 수 있어요.
 
AI모델경량화-모델경량화-인공지능경량화-딥러닝경량화-가지치기-매개변수
✅가지치기 (Pruning)
Threshold 보다 크기가 낮은 가중치들을 제거하여 모델에 포함된 매개변수 수를 줄임으로써, 모델을 경량화는 방법이에요. 매개변수의 수가 줄어듦에 따라 지연 시간도 자연스럽게 줄어드는 특징이 있습니다.
 
AI모델경량화-모델경량화-인공지능경량화-딥러닝경량화-지식증류
✅지식 증류 (Knowledge Distillation)
이미 잘 학습된 네트워크 (Teacher Network)에서 실제로 사용하고자 하는 경량화된 네트워크 (Student Network)를 학습시키는 방법이에요. 이를 통해 경량화된 작은 네트워크도 Teacher Network 만큼의 성능 및 정화도를 갖출 수 있게 하여 정보 손실을 최소화하는 기법이에요

 

이미지 출처: 스캐터랩 기술 블로그

 

다음의 경량화 작업들을 이해하기 쉽게 표현하자면, 아래와 같은 그림처럼 나타낼 수 있어요! 여기서 핵심은, 3가지 모두 방법은 다르지만 모델의 크기를 줄이기 위한 기법이라는 것입니다.


| 모델 경량화 장점과 기대효과

이렇게 경량화된 모델은 현업에서 어떤 기대효과를 불러일으킬 수 있을까요?

 

1️⃣필요한 메모리 및 컴퓨팅 전력 절감🖥️

파라미터의 수가 감소 했으므로 기존에 많은 연산량이 요구되었던 FP32에 비해 INT8은 저전력으로도 학습이나 추론을 진행할 수 있습니다. 이 덕분에 저사양의 하드웨어에서도 작업이 실행될 수 있으니 기업에서는 하드웨어에 사용되었던 비용을 절감하며 효율은 높일 수 있어요.

 

2️⃣ 모델 성능 개선 🔺

모델 경량화는 모델의 파라미터 및 활성 함수의 noise를 감소시킴으로써 전반적인 성능을 개선할 수 있습니다. 한층 더 안정적이고 정확한 결과 값을 도출할 수 있어요.

 

3️⃣ 추론 속도 가속화 🤖

경량화된 모델은 메모리에 로드하는 시간이 단축되고, 네트워크를 통해 데이터를 전송할 때도 속도가 향상됨으로 기존의 큰 모델을 기반으로 추론을 실행하는 것보다 훨씬 더 빠른 속도로 작업을 진행할 수 있어요.

 

AstraGo에서 확인한 경량화 모델 vs 기존 모델 GPU 사용량


앞서 소개해드린 개념들이 실제 현업에서 적용되었을 때, 경량화의 유무에 따라 어떤 차이를 보일까요?

Optimize : 경량화된 모델 워크로드 / Non-optimize : 기존 모델 워크로드

 

 

1️⃣ AstraGo에 Yolov8 모델의 경량화 전 / 후 워크로드를 각각 생성하여

한 시간 씩 실행하였을 때의 GPU 사용량 차이를 모니터링 진행해보았어요.

 

 

 

2️⃣ 두 워크로드 모두 Tesla V100 32GB로 동일한 Channel,

batch size 등의 조건에서 테스트 진행되었어요.


 
 
GPU 사용량 테스트 결과
Optimize 워크로드 : 20% ~ 22%
Non-optimize 워크로드 : 51% ~ 64%

테스트 결과, Yolov8 경량화된 모델이 기존 모델 대비 GPU를 최대 42% 적게 사용이 되었는데요. AstraGo를 통해 실제 워크로드의 GPU 사용량 차이를 확인하니, 경량화된 모델에서 GPU 효율이 더욱 증폭되었다는 것을 알 수 있었어요.🔺🤗

 

이번 콘텐츠에서 비교해본 내용과 같이, TensorRT나 경량화 툴을 활용하여 모델을 경량화 한다면, AI 프로젝트에서 딥러닝 모델을 더욱 최적화할 수 있어요. 자체 스케줄링 및 자원 최적화 기술을 통해 다양한 환경에서 GPU 자원을 보다 효율적으로 사용할 수 있는 AstraGo! 더 자세한 대용이 궁금하시다면, 아래의 배너를 클릭하여 다양한 문의 부탁드리겠습니다 :) 👇