서비스를 위해 AI/ML 모델을 준비하는 방법

게시자
울랩 팀
켜기
2023년 10월 13일 9:29 AM

머신 러닝, LLM, AI 모델을 클라우드에 배포하는 것은 복잡하고 시간이 많이 소요되는 프로세스일 수 있습니다. 

특정 클라우드 서비스 및 클라우드 리소스 구성에 대한 광범위한 지식이 있거나 운영 개발자 팀이 작업을 대신 수행해야 합니다.

데이터 과학자들이 개발 프로세스의 이 단계를 싫어하는 것은 당연합니다. 다른 사람이 모델을 배포해 주기를 기다리는 동안 작업이 지연되기 때문입니다.

바로 이 부분에서 울랩의 추론 엔진은 효율적이고 데이터 과학자 친화적인 모델 제공 플랫폼을 제공합니다.

이 글에서 그 방법을 보여드리겠습니다.

모델 서빙이란 무엇인가요?

모델 서비스는 간단히 말해 머신 러닝 모델을 호스팅하고 API를 통해 해당 기능을 사용할 수 있도록 하여 애플리케이션이 시스템에 AI를 통합할 수 있도록 하는 것입니다.

데이터 과학자가 ML 모델을 준비했다면, 다음 단계는 배포하는 것입니다.

클라우드 또는 온프레미스(클라우드 사용을 권장하지만)에서 액세스할 수 있는 제품을 만들지 않고는 대규모 사용자 기반에 AI 제품을 제공할 수 없습니다.

일반적인 서빙 방법

일반적으로 클라우드에 모델을 배포(또는 서비스)하는 방법에는 두 가지 일반적인 방법이 있습니다.

클라우드 서비스

모델을 제공하는 가장 일반적인 방법 중 하나는 AWS Sagemaker, Azure ML, GCP Vertex AI와 같은 클라우드 서비스를 활용하는 것입니다.

이 방법을 사용하려면 사용자 또는 팀이 사용 중인 특정 서비스에 익숙하고 클라우드 리소스 구성을 이해해야 하며, 이를 잘 수행하려면 광범위한 교육과 경험이 필요합니다.

이는 일반적으로 가장 비용이 많이 드는 옵션이며 공급업체 종속으로 이어질 수 있습니다. 한 번 공급업체를 선택하면 변경하기가 매우 어렵고 비용이 많이 들기 때문에 현명하게 선택하세요!

추론 엔드포인트

다음 방법은 허깅 페이스, 웨이트 앤 바이어스, 데이터로봇, 데이터브릭스와 같은 추론 엔드포인트의 배포를 제공하는 공급업체를 찾는 것입니다.

이러한 공급업체는 일반적으로 배포 프로세스가 자동화되어 있으므로 클라우드 리소스를 구성하는 방법을 알 필요가 없습니다.

이 방법에서는 사용자 또는 팀이 모델 파일에 모델 또는 위치를 제공하면 소프트웨어가 모델을 컨테이너화하여 제공합니다.

추론 엔진의 기반이 되는 기술 

클라우드에 모델을 제공하기 위한 세 번째 옵션인 Ulap의 추론 엔진이 있습니다.

배포 마법사와 자동화된 작업을 통해 개발자와 데이터 과학자가 클라우드 리소스에서 놀라운 AI/ML 애플리케이션을 제공할 수 있도록 하기 위해 추론 엔진을 구축했습니다. 즉, 클라우드에 모델을 제공할 수 있는 비용 효율적이고 사용하기 쉬운 옵션을 만들고자 했습니다.

오픈 소스 기술

내부적으로 저희 추론 엔진은 오픈 소스 기술을 활용합니다. 추론 서버를 관리하고 배포하기 위해 Kubernetes를 활용합니다. 서버의 확장성, 리소스 관리, 내결함성, 자동화를 제공함으로써 도움이 됩니다. 이는 곧 프로덕션에 바로 사용할 수 있는 추론 서비스를 위한 강력한 아키텍처로 이어집니다. 

간섭 엔진을 구동하기 위해 두 가지 오픈 소스 도구를 사용합니다.

MLflow

먼저 MLflow를 사용하여 프로덕션 준비 모델을 추적합니다.

이 오픈 소스 플랫폼은 실험, 재현성, 배포 및 중앙 모델 레지스트리를 포함한 ML 라이프사이클을 관리합니다.

모델 개발 프로세스 전반에 걸쳐 훈련 실험을 추적하는 데 도움이 될 뿐만 아니라 모델 레지스트리에서 프로덕션 준비가 완료된 모델 목록도 추적할 수 있습니다.

모델 성능, 아티팩트 위치 및 모델 요구 사항에 대한 정보가 저장되어 쉽게 액세스할 수 있습니다.

KServe

추론 엔진을 구동하는 두 번째 애플리케이션은 KServe입니다.

이 애플리케이션은 Kubernetes에서 서버리스 추론을 가능하게 하고 일반적인 머신 러닝(ML) 프레임워크를 위한 고성능의 고도로 추상화된 인터페이스를 제공하여 프로덕션 모델 서비스 사용 사례를 해결합니다.

확장, 네트워킹, 상태 확인, 모델 서버 구성에 KServe를 사용합니다.

내부적으로는 MLserver, Tensorflow Serving, TorchServe를 활용하여 프레임워크별 모델을 지원합니다. 

Ulap의 추론 엔진으로 서비스를 제공하기 위한 모델 준비하기

울랩의 추론 엔진으로 모델을 서비스하는 것은 간단합니다.

모델이 구축되는 AI 프레임워크(예: scikit-Learn 또는 PyTorch)에 따라 모델 배포 프로세스 단계가 달라집니다.

그러나 추론 엔진에서 모델을 배포하고 서비스하기 위해서는 전체적으로 세 가지 단계가 필요합니다:

1단계: 모델 훈련 및 추적

첫 번째 단계는 MLFlow를 사용하여 모델 학습을 추적하는 것입니다.

학습 과정에서 모델 성능 지표뿐만 아니라 학습에서 모델을 재현하는 데 필요한 모든 정보를 추적하는 것이 목표입니다.

여기에는 다음과 같은 정보가 포함될 수 있습니다:

  • 사용된 데이터 세트
  • 교육 스크립트
  • 환경 요구 사항

모델 트레이닝을 추적하는 가장 일반적인 방법은 트레이닝 코드를 래핑하고 아래 코드를 사용하여 MLflow 실행을 시작하는 것입니다:

를 mlflow.start_run()과 함께 사용합니다:
# 훈련 코드
# 예: scikit에 model.fit(X_train, y_train) 사용

2단계: 모델 파일 준비

이 단계에서는 모델을 프레임워크 종속 파일로 패키징하고 추가 배포 파일을 생성합니다.

scikit, XGBoostTensorFlow의 경우 모델은 각각 .pickle, .bst 또는 .pb 파일로 저장됩니다.

그러나 PyTorch의 경우 프레임워크에서 더 많은 서비스 구성이 가능하기 때문에 배포 프로세스가 조금 더 복잡합니다. 세 개의 파일을 생성해야 합니다:

그런 다음 다음 명령을 사용하여 MLFlow를 통해 모델 실행과 연결된 배포 폴더에 이러한 파일을 로드합니다:

# 모델 아티팩트 업로드
client.log_artifacts(run_id=run_id,
local_dir="deployment",
artifact_path='deployment')

3단계: 모델 스테이징

프로세스의 마지막 단계는 아래 코드를 사용하여 MLflow에서 모드를 스테이징하는 것입니다.

client = MlflowClient()
client.transition_model_version_stage(name="MODEL_NAME", version=1,
stage="Staging")

여기에서 모델을 "스테이징", "프로덕션" 또는 "아카이브"로 전환할 수 있습니다. 이를 통해 사용자는 모델 단계를 추적할 수 있으며, 더 구체적으로 어떤 모델을 서비스할 준비가 되었는지, 아티팩트가 어디에 있는지 추론 엔진에 알려주어 서버가 배포 중에 파일을 가져올 수 있도록 합니다.

간편한 배포

머신러닝 모델을 배포하는 것은 어려운 작업이 아니어야 합니다.

Ulap의 추론 엔진을 사용하면 배포 프로세스를 간소화하여 개발자와 데이터 과학자가 중요한 일, 즉 고객이 좋아할 애플리케이션 구축에 집중할 수 있도록 할 수 있습니다.

추론 엔진을 직접 사용해 보고 싶으신가요?

30일 무료 평가판에 등록 하고 지금 바로 ML 모델 배포를 시작하세요.