Technology
안녕하세요. AI 추론 최적화 엔진을 만들고 있는 Optimium 팀의 모세웅(Sewoong Moh)입니다. 이 글에서는 AI 최적화가 무엇이며 최적화를 진행하면서 겪는 어려움에 대해서 설명드리고자 합니다.
Sewoong Moh
January 12, 2024
안녕하세요. AI 추론 최적화 엔진을 만들고 있는 Optimium 팀의 모세웅(Sewoong Moh)입니다. 이 글에서는 AI 최적화가 무엇이며 최적화를 진행하면서 겪는 어려움에 대해서 설명드리고자 합니다.
그런데 말입니다. AI 최적화는 무얼 의미하는 걸까요?
AI 모델이 본격적으로 서비스에 적용되면서, 효율적인 학습과 추론에 대한 요구가 증가하고 있습니다. 하지만 딥러닝 모델 기술은 빠르게 발전하는 반면, 컴퓨팅 시스템의 변환은 더딘 편입니다. 따라서 AI 서비스의 효용성을 높이기 위한 모델 최적화 기술의 연구 개발이 증가하는 추세입니다.
1.필요성
모델의 파라미터 수도 많고, 연산량도 많을수록 특징 추출이 용이하고 결과값도 좋습니다. 하지만 모바일 환경이나 IoT, 임베디드 환경과 같이 속도가 중요한 곳에서는 최적화가 필요합니다.
2.임베디드 시스템의 제약
임베디드 시스템은 제한적인 자원(연산, 메모리, 전력량 등)으로 인해 AI 기술의 활용에 제한적인 동작 환경입니다. 특히, AI 기반 애플리케이션은 일반적인 애플리케이션에 비해 높은 연산과 메모리를 필요로 하기 때문에 모델 최적화가 필요합니다.
3.최적화와 상호운용성
모델 최적화 시 타겟 프레임워크의 특성(TensorFlow Lite, TensorRT, CoreML 등)을 고려하는 것이 중요합니다. 이때 프레임워크간의 차이로 인해 상호 운용성 문제가 발생할 수 있습니다.
4.최적화와 경량화
간혹 최적화와 경량화를 혼동하는 분들이 있는데, 아래와 많이 사용되는 경량화 기법들에 대해서 간단하게 설명드리겠습니다.
Pruning: 모델 자체를 압축하는 기술로서 학습된 모델에 불필요한 부분을 제거하는 방식입니다. 학습에서 필요한 가중치 값은 비교적 작은 값에 영향을 크게 받지 않기 때문에 작은 값을 모두 0으로 합니다.
Distillation: 잘 학습한 네트워크에서 실제로 사용하고자 하는 작은 네트워크를 학습시키는 방식입니다. 모델의 생성 시 파라미터 값을 활용하여 학습시간을 줄입니다.
5.경량화의 한계
모델 경량화를 통해 연산량을 줄이면, 모델의 정확도가 저하될 수 있습니다. 따라서 모델 경량화와 정확도 사이의 균형을 잘 맞추는 것이 중요합니다. 또한 모델 경량화가 잘 되었어도, 최적화 여부에 따라 실제 성능은 하드웨어의 영향(가용 메모리, CPU 코어 개수 등)을 많이 받습니다. 따라서, 추론 성능을 극대화하기 위해서는 모델 경량화의 방법과 같이 모델 최적화의 방법 또한 사용 되어야 합니다.
국내 주요 AI 기업의 AI 최적화 사례
AI를 서비스하고 있는 많은 회사들 중 AI 최적화한 경험을 자유롭게 공유해 준 3개 회사를 대표적으로 예를 들어 설명합니다.
1.카카오페이
카카오페이는 모델 개발과 서빙을 위한 언어를 파이썬으로 통일하여 개발 생산성을 높이고, 언어 간 변환 과정에서 발생하는 문제점을 해소하였습니다. 하지만 TensorFlow 기반으로 학습된 모델의 인퍼런스 속도가 원하는 수준에 미치지 못하는 경우가 있었습니다.
이를 해결하기 위해 카카오페이는 모델 인퍼런스 최적화 및 가속화 엔진을 활용하여 최적화된 모델을 확보했습니다. TensorFlow 모델을 ONNX 또는 TensorRT로 변환하는 과정에서는 속도와 정합성을 모두 고려해야 했습니다. 하지만 TensorRT의 경우 지원하지 않는 연산과 레이어가 존재하고, 모델 구조에 따라서 정합성이 맞지 않는 경우가 있었습니다.
따라서 지원하지 않는 연산을 직접 개발하여 추가하거나, 호환되는 연산의 조합으로 대체하도록 모델 구조를 수정해야 했습니다. 해당 작업은 공수가 많이 들어가기 때문에 개발 생산성을 저하하고 운영의 부담을 가중시켰습니다.
2.하이퍼커넥트
하이퍼커넥트의 AI 조직에서는 다양한 머신러닝 모델을 서빙하고 있습니다. 보통의 서버와는 달리, 머신러닝 모델의 처리량을 높이기 위해서는 GPU가 필요합니다. GPU를 사용하면 성능이 좋으나 비용이 상당히 많이 듭니다.
하이퍼커넥트는 GPU 사용 비용을 절감하기 위해 다양한 방법을 모색하고 있습니다. 그 중 하나는 모델 최적화를 통해 인퍼런스 속도를 높이는 것입니다. 또한, GPU의 성능을 최대한 활용하기 위한 최적화 작업도 진행하고 있습니다.
3.콴다
실시간 모바일 딥러닝을 위한 안드로이드 데이터 처리 파이프라인 최적화파이프라인 분석과 최적화 작업후기blog.mathpresso.com
콴다는 실시간 모바일 딥러닝을 구현하기 위해 최적화를 작업하였습니다. 특히 구글에서 제공하는 TensorFlowLite를 통하여 작동하는 파이프라인을 가지고 있습니다.
콴다의 실시간 모바일 딥러닝에서 가장 병목이 되는 과정은 convertYUVtoARGB, normalizeInput 과정입니다. 이 과정은 픽셀 하나하나를 특정한 연산을 통해 변환해야 하기 때문에 시간이 많이 소요됩니다.
따라서 콴다는 이 과정을 최적화하기 위해 다양한 방법을 모색하고 있습니다. 예를 들어, 픽셀을 그룹으로 처리하거나, 연산을 병렬화하는 등의 방법을 고려하고 있습니다.
전문가들이 겪는 어려움 (feat.설문 조사)
한국정보통신기술협회(TTA)에서 발간한 클라우드 기반의 AI 서비스 상호운용성(2021)에서 다수의 AI 프레임워크 및 환경을 다룬 경험이 있고, 3~5년 이상의 연구 및 개발 경력이 있는 전문가 9명을 선발하여 인터뷰를 수행하였습니다.
주로 사용하는 AI 프레임워크는 무엇입니까?

참여자들은 주로 사용하는 AI 프레임워크로 PyTorch, TensorFlow, Keras, Caffe, Darknet을 선택하였습니다. 그 중 PyTorch가 42.9%로 1위, TensorFlow가 28.6%로 2위로 사용되었습니다. 참여자들은 주로 사용하는 AI 프레임워크 2개 이상의 프레임워크를 답변하기도 했는데, 2개 이상의 프레임워크를 답변한 사람은 55.6%로 과반수에 해당하는 참여자가 2개 이상의 프레임워크를 사용 중이라고 응답하였습니다.
AI 프레임워크 간 변환이 필요하다고 생각하는 이유는 무엇입니까?

AI 프레임워크 간 변환이 필요하다고 생각하는 이유로는 모바일 환경 최적화(33.3%), 논문 코드 활용(33.3%)이 가장 많은 비중을 차지 했습니다. 특히, AI 모델을 학습하는 환경(대형 컴퓨팅 환경)과 AI 모델을 디플로이하는 환경(모바일 환경)이 달라 모바일 환경에 탑재하기 위해 변환이 필요하다고 언급했습니다.
특히, 모바일 Face Recognition 알고리즘 개발 시, Caffe 기반으로 학습된 모델을 기기에 탑재하는 작업을 수행했습니다. 모바일 CPU 연산 환경에서 모델을 동작시키기 위해, 학습된 모델을 직접 C언어로 변환하였습니다. TensorFlow와 PyTorch 가중치를 저장하는 방식이 달라 TensorFlow로 학습된 가중치를 로딩하여 PyTorch 형태로 변환하는 작업을 진행했습니다. 또한, Python으로 구현된 코드 및 모델은 동작이 상대적으로 무겁기 때문에, 모바일 환경에서 빠르게 동작 가능하고 메모리의 효율적 관리가 가능한 C 언어로의 변환을 수행했습니다.
AI 프레임워크 간 변환은 어떠한 방식으로 진행했습니까?

대부분의 참여자(45.5%)들은 AI 프레임워크 변환을 위해 직접 변환 툴을 제작하여 사용하거나, 변환 함수를 구현했다고 응답했습니다. 특히, 기존 도구의 신뢰성과 사용성이 부족함으로 인해 직접 구현이 필요한 경우가 언급되었습니다. 다음으로 가장 응답률이 높게 나타난 방식은 외부 툴 사용입니다. 이중 2명은 ONNX를 사용하였으며, 1명은 PyTorch를 C언어로 변환해주는 Libtorch를 사용하였습니다.
AI 프레임워크 간 변환에서 중요한 요소는 무엇입니까?

전체 참여자 중에 43.8%가 변환 후에 발생하는 오차를 최소화하는 것이 가장 중요하다고 응답했습니다. 각 단위 별 연산이 정확하게 변환되어야 하며, 모델을 실제 시스템에 통합하였을 때에도 동일한 성능을 보여야 한다는 점에서 , 오차의 최소화를 최우선으로 꼽았습니다. 이외에도 버전 업데이트에 따른 신속한 대응, 지원하는 프레임워크의 다양성 등의 측면에서 호환성(31%)을 언급하였습니다.
5.현재의 AI 프레임워크 간 변환 기술의 단점이 무엇이 있습니까?

대부분 지원하는 기능의 부족하며, 일부 함수에서 지원하지 않는 오퍼레이션이 있다고 응답했습니다. 이외에도 프레임워크 버전 업데이트 시 도구에 바로 반영되지 않아 발생하는 불편함도 있었습니다. 또한, ONNX의 경우 중간 변환 과정을 거쳐야 하므로 도구 사용이 복잡하다는 점이 있습니다. 아래는 설문조사를 하면서 진행한 인터뷰 내용입니다.
AI 전문가 A: AI 프레임워크별 기본 세팅이 다르기 때문에, 변환 시 일일이 디버깅 해야 하는 불편함이 있습니다. 목표 시스템에 맞게 포팅하기 위해서는, 프레임워크 간 변환이 정확하게 지원될 필요가 있습니다. AI 프레임워크 간의 변환 방법은 잘 알려져 있지만 AI 프레임워크에서 C 언어로 변환하는 방법은 잘 알려져 있지 않습니다.
AI 전문가 B: 흔히 사용되는 MNIST 모델의 경우는 대부분의 변환툴에서 많이 지원되지만, 커스텀 모델은 변환이 잘 되지 않아 시간이 많이 소요됩니다. 네트워크의 오퍼레이션이 새로 추가되었을 때 변환툴에서 바로 반영되지 않아 어려움을 겪습니다.
AI 추론 최적화의 새로운 시대가 온다, Optimium의 대여정
위에서 언급한 회사들과 전문가들뿐만 아니라 많은 AI 기술을 다루는 대부분의 사람들이 최적화에 있어서 많은 어려움을 겪습니다. 에너자이는 이러한 어려움을 해결하기 위해 Optimium라는 AI 추론 최적화 엔진을 연구개발하고 있습니다. 본 글을 시작으로, 앞으로도 Optimium와 AI 최적화 관련하여 유익하고 재밌는 글들을 블로그를 통해 소개드릴테니 많은 관심 부탁드립니다!
Beta Test 실시 예정
2024년 1분기에 Optimium를 미리 사용할 수 있는 Beta Test를 실시할 예정입니다. Beta Test에 참여를 희망하시거나 자세한 사항을 확인하시려면 위의 사이트에 방문 부탁드립니다.
Life is too short, you need Optimium