서빙을 위한 AI/ML 모델 최적화: 추론 시간을 단축하는 검증된 기법

게시자
울랩 팀
켜기
2023년 12월 15일 오전 7:32

모델이 프로덕션 환경에서 잘 작동하도록 하려면 교육, 준비, 서비스 그 이상의 것이 필요합니다.

모델과 서버를 최적화해야 합니다.

상상해 보세요: 사용자가 스마트폰에서 LLM을 사용하려고 하는데 모델이 응답할 때까지 몇 분을 기다려야 합니다. 

LLM은 휴대폰의 모든 메모리와 컴퓨팅 성능을 빨아들일 뿐만 아니라, 쉽게 복구할 수 없는 열악한 사용자 경험을 제공하게 됩니다.

이러한 끔찍한 시나리오를 피하려면 모델을 최적화해야 합니다.

서비스를 제공하기 전에 LLM 또는 딥러닝 모델을 최적화할 수 있는 두 가지 방법에 대해 자세히 알아보겠습니다.

모델 최적화 시작하기

LLM 및 딥러닝 모델 최적화는 모델이 학습된 후 서비스를 제공하기 전에 시작됩니다.

프로덕션 환경에서 모델이 제대로 작동하도록 하려면 두 가지 요소를 고려해야 합니다:

모델 크기

서버 하드웨어가 모델의 메모리 및 스토리지 요구 사항을 지원하지 않을 수 있으므로 모델 크기를 고려하는 것이 중요합니다.

또한 모델을 제공할 때는 모델을 업로드하고 다운로드해야 합니다. 모델이 크면 서빙 시간이 늘어나므로 메모리 및 컴퓨팅 성능에 제약이 있는 에지 디바이스(예: 스마트폰, 태블릿 또는 노트북)에서 모델을 서빙할 때 주의해야 합니다.

특히 LLM에 주의하세요. 크기가 10GB에 달할 수 있습니다.

출처: 내부 언어 모델(GPT-4에서 PaLM까지) - Alan D. Thompson 박사 - 라이프 아키텍트

추론 지연 시간

또한 실제 애플리케이션에서는 빠른 추론 시간이 필요하므로 추론 지연 시간도 살펴봐야 합니다. 이는 실시간 애플리케이션에서 특히 중요합니다.

지연 시간을 줄이는 쉬운 방법 중 하나는 GPU를 사용하는 것입니다. 하지만 일부 하드웨어 배포에만 GPU가 탑재되어 있으며, LLM과 같은 경우에는 여전히 개선이 필요합니다. 이는 최종 사용자가 추론을 기다려야 하기 때문에 좋지 않은 경험을 유발할 수 있을 뿐만 아니라(ChatGPT가 응답할 때까지 몇 분을 기다려야 한다고 상상해 보세요), 모델 제공과 관련된 비용도 증가시킬 수 있습니다.  

모델 최적화 기법

모델 최적화의 목표는 모델의 메모리와 계산 요구 사항을 모두 줄여 전반적인 성능을 가속화하는 것입니다.

이러한 목표를 달성하는 데는 두 가지 일반적인 방법이 있습니다:

  • 모델 크기 줄이기
  • 모델 컴파일

두 가지를 모두 살펴보겠습니다.

모델 크기 줄이기

특히 공간이 제한된 스마트폰, 태블릿, 노트북과 같은 엣지 디바이스에서 모델에 액세스하는 경우 모델의 크기를 줄이는 것은 프로덕션 환경에 맞게 최적화하는 데 필수적입니다.

모델 크기를 줄이는 방법에는 두 가지가 있습니다:

  • 모델 정량화
  • 모델 가지치기

모델 정량화

모델 크기를 줄이는 가장 보편적인 방법은 정량화라고 하는 프로세스입니다. 

모델에는 수백만 또는 수십억 개의 가중치와 편향이 모델의 메모리로 사용됩니다. 일반적으로 32비트 부동 소수점 숫자로 저장되는 이러한 매개변수는 모델에 엄청난 양의 메모리를 필요로 합니다.

정량화는 가중치의 정밀도를 낮추는 방식으로 작동하며, 기본적으로 이러한 매개변수를 보다 간결한 형태로 단순화하고 자릿수의 길이를 줄이는 것입니다. 이 프로세스는 모델의 메모리 사용량과 계산 요구 사항을 크게 줄여줍니다.

출처: 딥러닝 모델 양자화 및 양자화 인식 훈련에 대한 궁극적인 가이드

정량화의 단점

정량화에는 모델 정확도의 저하라는 단점이 있습니다. 

정량화는 모델에서 수치 값의 정밀도를 떨어뜨리기 때문에 정보 손실로 이어질 수 있으며, 이는 특히 복잡한 작업의 경우 모델 정확도 저하로 이어질 수 있습니다.

LLM의 경우, 이는 곧 횡설수설하는 응답을 의미할 수 있습니다.

정량화 방법

모델 개발 프로세스의 단계에 따라 모델을 정량화하는 방법에는 두 가지가 있습니다:

교육 후 정량화(PTQ)

텐서플로에 따르면 학습 후 양자화에는 모델 정확도를 거의 저하시키지 않으면서 CPU 및 하드웨어 가속기 지연 시간, 처리, 전력, 모델 크기를 줄이는 일반적인 기술이 포함되어 있습니다.

이 정량화 방법은 모델을 학습시킨 후에 수행되며(따라서 이름도 정량화) 사용하기 쉽습니다.

수량화 인식 교육(QAT)

텐서플로에 따르면 양자화 인식 훈련은 다운스트림 도구가 양자화된 모델을 생성하는 데 사용할 모델을 생성하는 방식으로 이루어집니다. 양자화된 모델은 더 낮은 정밀도를 사용하므로 배포 시 이점이 있습니다.

이 정량화 방법은 학습 과정에서 사용되며 모델 정확도에 더 유리한 경우가 많습니다.

↪CF_200D↩정량화라이브러리

정량화에는 다음 라이브러리를 권장합니다:

  • Pytorch 의 프레임워크 모델용입니다.
  • LLM용 트랜스포머 . 트랜스포머를 사용하면 두 가지 알고리즘 중에서 선택할 수 있습니다:
  • ONNX 를 클릭합니다.

모델 가지치기

모델 가지치기는 신경망 내에서 모델의 성능을 향상시키지 않는 뉴런을 제거하는 기술입니다.

이렇게 중요하지 않은 매개변수를 잘라내면 가중치 수가 줄어들어 효과적으로 모델을 더 작게 만들 수 있습니다.

↪CF_200D↩가지치기 방법

가지치기는 모델을 학습시킨 후 두 가지 방법으로 수행할 수 있습니다.

구조화되지 않은 가지치기

크기 가지치기로도 불리는 구조화되지 않은 가지치기는 크기가 작은 일부 매개변수 또는 가중치를 0으로 변환합니다.

모델에서 개별 가중치를 제거합니다. 

구조화된 가지치기

구조적 가지치기는 다음과 같은 대상 신경망의 구조(빌딩 블록)를 제거합니다:

  • 전체 뉴런
  • 필터 채널

네트워크의 특정 구조를 제거하면 매개변수(가중치) 행렬의 크기가 줄어들게 됩니다.

아래 이미지는 가지치기 전과 후의 완전히 연결된 네트워크를 보여줍니다.

출처: 딥러닝 모델에서의 가지치기

가지치기 시 주의사항

모델 가지치기를 통해 추론 시간과 메모리 사용량을 줄이면서 모델 정확도를 높일 수 있습니다. 

그러나 가지치기를 주의해서 사용하지 않으면 특히 모델에서 너무 많은 가중치나 연결이 제거되는 경우 정확도가 떨어질 수 있습니다. 

이렇게 하면 모델 크기가 줄어드는 것 외에도 모델이 실행할 계산이 줄어들기 때문에 추론 대기 시간을 줄일 수 있습니다. 단점은 정확도가 떨어질 가능성이 있다는 것입니다.

라이브러리 가지치기

다음 라이브러리를 사용하여 학습 후 모델을 가지치기할 수 있습니다:

↪CF_200D↩모델컴파일

모델 컴파일은 모델을 특정 하드웨어에서 실행할 수 있는 실행 가능한 형식으로 변환하는 프로세스입니다.

기본적으로 PyTorch와 같은 일반적인 딥 러닝 프레임워크는 Python으로 작성되어 이해와 개발이 쉽지만 느리기로 악명이 높습니다. 이 코드는 C/C++ 프로그램처럼 컴파일되지 않고 런타임에 실행되므로 1~2배 이상 빠를 수 있습니다.  

모델 컴파일은 모델이 학습된 후에 완료됩니다. 양자화 및 가지치기를 수행하기 전이나 후에 수행할 수 있지만, 양자화 및 가지치기를 수행한 후에 수행하는 것이 좋습니다. 이렇게 하면 정확도를 유지하면서 특정 하드웨어 플랫폼에 맞게 모델을 최적화할 수 있습니다.  

모델 컴파일의 장단점

컴파일 과정에서 모델은 특정 하드웨어 플랫폼에 최적화되어 성능 향상, 추론 지연 시간 단축, 메모리 사용량 감소로 이어질 수 있습니다. 

하지만 모델 컴파일은 시간이 많이 걸리는 과정이며, 전문적인 지식과 기술이 필요할 수 있습니다. 

또한 컴파일된 모델은 일부 기능을 지원하지 않을 수 있으므로 이 기술을 사용할 때 제한 사항을 파악하는 것이 중요합니다.

↪CF_200D↩모델컴파일 라이브러리

이 단계는 모델을 학습시킨 후에 수행되며, 시작하려는 프레임워크에 따라 다음과 같은 여러 라이브러리를 사용하여 수행할 수 있습니다:

  • PyTorch: 이 라이브러리는 모델이 런타임에 컴파일되는 적시 컴파일(JIT)을 사용합니다. 이 컴파일 방법은 Jupyter 노트북에서 모델을 실행할 때처럼 인터프리터를 사용하여 실행하지 않고 PyTorch 코드를 최적화된 커널로 컴파일합니다.  
  • ONNX 런타임
  • Apache TVM

모델 최적화 마스터하기

모델을 최적화하면 프로덕션 환경에서 성능과 정확성을 유지하면서 모델 제공 효과를 크게 향상시킬 수 있습니다.

앞서 설명한 기술을 활용하여 모델 크기를 줄이고 클라우드에 제공하기 전에 모델을 컴파일하세요. 

최종 사용자에게 훨씬 더 나은 경험을 제공하고 컴퓨팅 성능을 절약하여 궁극적으로 비용을 절감할 수 있습니다.

모델로 비용을 절감할 수 있는 또 다른 방법이 있나요? 울랩 추론 엔진 무료 체험판에 등록하세요