딥러닝 모델 최적화는 딥러닝 모델을 개선하고 최적화하여 더 나은 성능, 효율성, 형태 또는 특정 요구 사항을 충족시키는 프로세스를 의미한다. 딥러닝 모델 최적화는 다양한 목표를 달성하기 위해 다양한 기술과 방법을 사용한다.
딥러닝 모델의 성능을 향상시키는 ‘성능 최적화', 모델의 크기를 줄이는 ‘모델 크기 최적화', 모델 추론 속도를 향상시키는 ‘추론 시간 최적화', ‘메모리/에너지 최적화’ 등이 존재한다.
그중에서 ‘모델 크기 최적화'(모델 경량화)와 ‘추론 시간 최적화'(모델 인퍼런스 속도 가속화)에 대해 이야기해보려 한다.
딥러닝 모델은 개발하는 일은 비용과 시간이 많이 소요되지만, 배포한 딥러닝 모델을 사용하는 것 또한 많은 리소스가 소요된다. 때문에 딥러닝 모델을 사용하거나 제공하는 기업들은 모델 경량화와 추론 시간 최적화에 큰 관심을 쏟고 있다. 많은 비용을 차지하는 GPU 서버 비용을 조금이라도 줄이기 위함이다.
1. 모델 경량화
딥러닝 모델 경량화는 대규모 및 복잡한 인공지능 모델을 작고 가벼운 형태로 변환하는 기술과 방법을 의미한다. 이것은 모델의 크기, 계산 요구 사항 및 메모리 사용량을 줄이는 과정을 포함하며, 주요 목표는 모델을 더 효율적으로 실행하고 저사양 하드웨어나 제한된 환경에서도 사용 가능하게 만드는 것이다.
많은 기기 및 시스템이 제한된 하드웨어 자원을 갖고 있어 대규모 딥러닝 모델을 실행하기 어렵다. 모바일 장치 및 에지 컴퓨팅 장치에서도 딥러닝 모델을 활용하기 위해서는 가벼운 모델이 필수적이며, 이는 사용자 경험을 향상시키는 데 중요하다. (많은 사용자는 2초의 레이턴시에도 ‘뒤로 가기' 버튼을 누르기 때문...)
대용량 모델은 데이터를 전송하고 저장하는 데 많은 비용을 발생시킬 수 있으며, 작은 모델은 이러한 비용을 절감하는 데 도움이 된다. 그뿐만 아니라 대규모 모델은 높은 전력 소비로 인해 에너지 비용과 환경 영향이 증가할 수 있으며, 경량 모델은 에너지 효율성을 향상시키는 데 기여한다.
딥러닝 모델 경량화에 사용되는 주요 기술과 방법은 다음과 같다. 물론 최근에는 Pytorch, Tensorflow 등의 프레임워크에서 기본적으로 제공하는 기능들이기도 하다.
- 가중치 양자화 (Weight Quantization): 가중치 값을 정밀한 부동 소수점에서 정수로 양자화하여 모델 크기를 줄이는 방법.
- 가지치기 (Pruning): 중요하지 않은 가중치를 제거하여 모델의 연결 수를 줄이고 계산량을 감소시키는 방법.
- 모델 압축 (Model Compression): 모델을 더 작은 형태로 변환하는 방법으로 네트워크 슬림핑, 가중치 공유 등의 다양한 기술을 포함.
- 모델 양자화 (Model Quantization): 모델의 연산을 고정된 비트 수로 양자화하여 메모리 사용량을 줄이는 방법.
모델 경량화의 주요 목표는 모델 크기를 줄이고 계산량을 최소화하여 모델을 다양한 환경에서 보다 효율적으로 실행할 수 있도록 하는 것이다. 이는 모바일 앱, 웹 서비스, 에지 장치 및 IoT 장치에서 AI를 사용하는 데 필수적이며, 최근에는 AI 모델을 활용한 서비스가 많아지면서 서버 비용을 줄이기 위해 많은 기업에서 관심을 쏟고 있다.
2. 모델 추론 속도 가속화
딥러닝 모델 추론 속도 가속화는 딥러닝 모델을 더 빠르게 실행하기 위한 다양한 기술과 방법을 사용하는 프로세스를 의미한다.
딥러닝 모델의 학습은 일반적으로 상당히 많은 계산량을 요구하므로, 모델을 배포하고 실제 환경에서 사용할 때 추론 속도는 빠르면 빠를수록 좋다. 유저 서비스에 즉각적으로 활용되는 AI 모델은 속도가 생명이고, 그렇지 않더라도 모델 추론을 위해 GPU 서버를 점유하고 있는 시간은 모두 돈이기 때문이다. 아래에서 딥러닝 모델 추론 속도 가속화에 관한 주요 내용을 설명해보겠다.
- 하드웨어 가속기 활용: GPU (Graphics Processing Unit) 및 ASIC (Application-Specific Integrated Circuit)과 같은 하드웨어 가속기를 사용하여 모델 추론 가속화하는 방법. 이러한 가속기는 병렬 처리 능력이 뛰어나며 딥러닝 모델의 계산을 빠르게 처리 가능.
- TensorRT 및 다른 가속화 라이브러리: NVIDIA의 TensorRT와 같은 가속화 라이브러리는 모델을 최적화하고 GPU를 활용하여 빠르게 실행하는 데 사용됨.
- 배치 인퍼런스 (Batch Inference): 모델을 한 번에 여러 입력 데이터에 대해 인퍼런스하여 추론 시간을 줄이는 방법.
- 네트워크 알고리즘 최적화: 모델의 계산을 최적화하기 위해 커스텀 네트워크 알고리즘을 구현하고 사용하는 방법. 예를 들어, 텐서 연산 라이브러리를 활용하거나 커스텀 GPU 커널을 사용할 수 있음.
- Precision 변경 : FP16 또는 Mixed Precision을 사용하는 것은 모델 최적화 및 경량화의 중요한 방법으로 모델의 크기를 줄이고 연산량을 감소시키는 데 도움이 되며, 모델을 가속화하고 추론 속도를 향상시키는 데 기여함.
딥러닝 모델 추론 속도 가속화는 모델을 실제 환경에서 빠르게 실행하고, 실시간 또는 실시간에 가까운 속도로 응답할 수 있도록 돕는 중요한 프로세스이다. 이는 모바일 앱, 웹 서비스, 로봇, 자율주행차, 의료 기기 및 다른 다양한 응용 분야에서 필수적이다.
그래서 모델 추론 가속화를 위해 우리는 무엇을 하면 될까? 위에서 설명한 방법들을 모두 적용하면 최적화된 모델을 개발할 수 있을까?
아쉽게도 현실적으로는 그렇지 않다. 모델 가속화는 대부분 하드웨어에 영향을 크게 받기 때문이다. 동일한 컨볼루션 연산을 수행하더라도 하드웨어 특성에 따라 내부 연산 프로세스는 크게 달라진다.
물론 일반적으로 NVIDIA의 GPU를 사용하는 경우가 많기 때문에 대부분의 경우 TensorRT로 최적화하는 경우 모델 추론 속도를 향상시킬 수 있다. 하지만 이 경우에도 모델의 구조에 따라 속도 향상의 차이가 있을 수 있고, 기존 모델과 출력값 또한 차이가 날 수 있으므로 다양한 테스트가 필수적이다.
불과 몇 년 전만 하더라도 딥러닝 모델을 최적화하기란 쉽지 않았다. 경량화 기법이 오픈소스화되어 있지도 않았고, 모든 모델에 적절하게 적용되지도 않았다. 모델 추론 속도 가속화를 위한 TensorRT 또한 pytorch나 tensorflow로 학습한 모델을 변환하여 TensorRT 환경에서 추론하는 것이 까다로웠다.
하지만 최근에는 딥러닝 프레임워크 자체에서 모델 경량화를 비롯한 다양한 모델 최적화 기법을 제공하고 있으며, TensorRT는 PyTorch에서도 공식적으로 관련 패키지를 제공한다. 모델 최적화를 적용하기 쉬운 환경이 되었기 때문에, 모델 크기, 연산량, 추론 속도가 고민이신 분들은 모델 최적화에 관심을 가져보시길 바란다.
3. NVIDIA의 Tensor RT
작년 9월, 엔비디아 텐서RT-LLM(NVIDIA TensorRT-LLM)이 공개됐다. NVIDIA는 최첨단 사후 트레이닝 및 트레이닝 인더루프 모델 최적화 기술의 종합 라이브러리인 NVIDIA TensorRT Model Optimizer라는 것을 통해 추론 서비스를 확장하고 있다.
텐서RT-LLM은 오픈 소스 모듈식 파이썬 API(Python API)를 통해 쉽게 맞춤화할 수 있다. 예를 들어, 모자이크ML은 텐서RT-LLM 위에 필요한 특정 기능을 원활하게 추가하고 추론 서비스에 통합했다.
데이터브릭스 엔지니어링 담당 부사장인 나빈 라오(Naveen Rao)는 "텐서RT-LLM은 사용이 간편하고, 토큰 스트리밍, 인플라이트 배칭(In-flight Batching), 페이지드 어텐션(Paged-attention), 정량화 등 다양한 기능을 갖추고 있으며 효율적이다. 이 솔루션은 엔비디아 GPU를 사용해 대규모 언어 모델 서비스를 위한 최첨단 성능을 제공하고, 고객에게 비용 절감 효과를 전달한다"고 말했다.
이러한 기술에는 모델 복잡성을 줄이기 위한 양자화 및 희소성 관리기술이 포함되어 있어 NVIDIA TensorRT-LLM 같은 다운스트림 추론 라이브러리가 딥 러닝 모델의 추론 속도를 더 효율적으로 최적화할 수 있다.
NVIDIA TensorRT 에코시스템 체계의 일부에 속하는 NVIDIA TensorRT Model Optimizer(Model Optimizer라고도 함)는 NVIDIA Hopper, NVIDIA Ampere및 NVIDIA Ada Lovelace등의 NVIDIA의 최근 주요 아키텍처에서 사용할 수 있다.
Model Optimizer는 PyTorch 및 ONNX 모델에 대해 시뮬레이션된 양자화된 체크포인트를 생성한다. 이러한 양자화된 체크포인트는 TensorRT-LLM 또는 TensorRT에 원활하게 배포할 수 있다. Model Optimizer Python API를 사용하면 개발자가 다양한 모델 최적화 기술을 스택하여 TensorRT의 기존 런타임 및 컴파일러 최적화를 기반으로 추론을 가속화할 수 있다.
한편, 텐서RT-LLM에는 오늘날 프로덕션 환경에서 널리 사용되는 많은 대규모 언어 모델의 최적화되고 바로 실행 가능한 버전이 포함돼 있다. 여기에는 메타의 라마 2, 오픈AI(OpenAI)의 GPT-2 와 GPT-3, 팔콘(Falcon), 모자이크 MPT(Mosaic MPT), 블룸(BLOOM) 등 12가지가 포함되며, 모두 사용이 간편한 텐서RT-LLM 파이썬API로 구현할 수 있다.
텐서RT-LLM이 탑재된 엔비디아 H100 GPU(H100 GPU)를 사용하면 모델 가중치를 새로운 FP8 형식으로 쉽게 변환하고, 최적화된 FP8 커널을 자동으로 활용하도록 모델을 컴파일할 수 있다. 이는 호퍼 트랜스포머 엔진(Hopper Transformer Engine) 기술을 통해 가능하며, 별도로 모델 코드를 변경할 필요가 없다.
NVIDIA TensorRT Model Optimizer는 2024년 5월 8일에 공개되었으며 모든 개발자는 이 옵티마이저를 NVIDIA PyPI 휠로서 무료로 사용할 수 있다. GitHub에서 NVIDIA/TensorRT-Model-Optimizer 를 방문하여 예제 스크립트도 게재되어 있다.
4. NVIDIA Tensor RT의 양자화 기술
모델을 훈련 후 양자화(PTQ)는 메모리 설치 공간을 줄이고 추론을 가속화하는 가장 인기 있는 모델 압축 방법 중 하나에 속한다. 그 외 일부 양자화 툴킷은 가중치 전용 양자화 또는 기본 기술만 지원하지만 Model Optimizer는 INT8 SmoothQuant 및 INT4 AWQ(활성화 인식 가중치 양자화)를 포함한 고급 보정 알고리즘을 제공한다. TensorRT-LLM에서 FP8 또는 그보다 더 낮은 정밀도(예: INT8 또는 INT4)를 사용하는 경우, Model Optimizer의 PTQ를 이미 내부에서 활용하고 있다.
지난 1년 동안 Model Optimizer의 PTQ는 이미 수많은 TensorRT-LLM 사용자가 모델 정확도를 유지하면서 LLM에 대해 추론 속도를 현저하게 향상할 수 있도록 지원했다. INT4 AWQ를 활용하는 Falcon 180B는 단일 NVIDIA H200 GPU에 적합하다. 아래 그림은 사용자가 Llama 3 모델에서 Model Optimizer PTQ를 사용하여 실현할 수 있는 추론 속도 향상을 보여준다.
양자화가 없다면 확산 모델은 NVIDIA A100 Tensor 코어 GPU에서도 이미지를 생성하는 데 최대 1초가 걸릴 수 있으며 최종 사용자의 경험에 영향을 미칠 수 있다. Model Optimizer의 선도적인 8비트(INT8 및 FP8) 트레이닝 후 양자화는 이미지 생성 속도를 높이기 위해 TensorRT의 확산 배포 파이프라인 및 Stable Diffusion XL NIM 의 내부에서 사용되었다.
MLPerf Inference v4.0에서 Model Optimizer는 TensorRT를 더욱 강화하여 Stable Diffusion XL 성능에 대한 기준을 다른 모든 접근 방식보다 높게 설정했다. 이 8비트 양자화 기능을 활용한 많은 생성형 AI 업체들은 모델 품질을 유지하면서 더 빠른 추론의 사용자 경험을 제공할 수 있게 되었다.
FP8 및 INT8 모두에 대한 엔드 투 엔드 예시를 보려면 GitHub에서 NVIDIA/TensorRT-Model-Optimizer와 NVIDIA/TensorRT를 참조할 수 있다. 보정 데이터세트의 크기에 따라 차이는 있겠지만 확산 모델의 보정 프로세스는 대체로 몇 분 정도 걸린다. FP8의 경우, RTX 6000 Ada에서는 1.45배, FP8 MHA가 없는 L40S에서는 1.35배의 속도 향상을 확인할 수 있다다. 표 1은 INT8 및 FP8 양자화의 추가적인 벤치마크를 보여준다.
그래픽 카드 | INT8 지연 시간(ms) | FP8 지연 시간(ms) | 속도 향상(INT8 vs FP16) | 속도 향상(FP8 vs FP16) |
RTX 6000 Ada | 2,479 | 2,441 | 1.43배 | 1.45배 |
RTX 4090 | 2,058 | 2,161 | 1.20배 | 1.14배 |
L40S | 2,339 | 2,168 | 1.25배 | 1.35배 |
H100 80GB HBM3 | 1,209 | 1,216 | 1.08배 | 1.07배 |
표 1. 배포를 위해 Model Optimizer 및 TensorRT의 8비트 PTQ를 사용하여 다양한 NVIDIA 하드웨어에 걸쳐 SDXL의 추론 속도 향상
5. 희소성(Sparsity)를 고려한 모델 압축
딥 러닝 모델은 전통적으로 밀도가 높고 과다 매개변수화되어 있다. 이로 인해 또 다른 모델 최적화 기술이 필요하다. 희소성은 모델 매개변수의 0값을 선택적으로 권장하여 모델의 크기를 더욱 축소한다. 이 값은 스토리지 또는 연산에서 폐기할 수 있다.
Model Optimizer의 트레이닝 후 희소성은 Llama 2 70B에 대한 FP8 양자화 외에 배치 크기 32에서 1.62배만큼 속도를 더 높여줍니다. 여기서는 NVIDIA Ampere 아키텍처에 도입된 독점 NVIDIA 2:4 희소성이 적용된 NVIDIA H100 GPU 1개가 사용되었다.
MLPerf Inference v4.0에서 TensorRT-LLM은 트레이닝 후 희소성 Model Optimizer를 사용하여 Llama 2 70B를 37% 압축한다. 이를 통해 모델과 KV 캐시를 단일 H100 GPU의 GPU 메모리에 맞출 수 있으며 Tensor 병렬 처리 수준은 2에서 1로 감소한다. MLPerf의 이 특정 요약 작업에서 Model Optimizer는 희소화된 모델의 품질을 유지하며 MLPerf 마감 부서에서 설정한 Rouge 점수의 99.9% 정확도 목표를 충족하게 된다.
모델 | 배치 크기 | 추론 속도 향상 (배치 크기가 동일한 FP8 밀집 모델과 비교) |
희소화된 Llama 2 70B |
32 | 1.62배 |
64 | 1.52배 | |
128 | 1.35배 | |
896 | 1.30배 |
표 2. 하나의 NVIDIA H100 80GB GPU에서 다양한 배치 크기로 기준선 고밀도 모델과 비교한 희소화된 Llama 2 70B 모델의 추론 속도 향상 벤치마크
MLPerf 설정에서는 정확도 저하가 거의 없지만 대개의 경우에는 모델 품질을 유지하기 위해 희소성과 미세 조정을 결합하는 것이 일반적이다. Model Optimizer는 FSDP를 포함한 인기 있는 병렬 처리 기술과 호환되는 희소성 인식 미세 조정을 위한 API를 제공한다. 그림 4는 미세 조정과 함께 SparseGPT를 사용하면 손실 저하를 최소화할 수 있음을 보여준다.
출처: Superb AI, NVIDIA, 위클리포스트
뜨리스땅
https://tristanchoi.tistory.com/655
https://tristanchoi.tistory.com/654
https://tristanchoi.tistory.com/651
* 참고 동영상
https://www.nvidia.com/en-us/on-demand/session/gtc24-s63213/
'인터넷, 통신, 플랫폼, 컨텐츠 산업' 카테고리의 다른 글
LLM의 추론 성능 향상을 위한 RAG 사용 시, 알아두어야 할 것들 (0) | 2024.06.20 |
---|---|
AI 모델 추론을 위한 최적화 모델: Triton Server & Tensor RT (0) | 2024.06.18 |
NVIDIA Triton 란 무엇인가? (1) | 2024.06.05 |
AI 모델을 서비스에 사용(서빙)하기 위한 방법 - 서빙 최적화 방법 (0) | 2024.06.05 |
AI 모델 추론을 위한 VLLM이란 무엇인가? (feat. by Paged Attention) (0) | 2024.06.01 |
댓글