[kor] Machine Learning Inference in Serverless Computing System

14 Aug 2022 By Jaeghang Choi

서론

  • 해당 글에서는 다양한 ML 프레임워크 중 Tensorflow를 사용해 간단한 딥러닝 추론을 진행하는 방법에 대해 다룹니다.
  • Tensorflow 추론 코드에 대한 이해도가 어느정도 있다고 가정하고 진행합니다.

1. 깃허브 구성

  • model 폴더에는 추론을 위한 모델이 담겨져 있습니다
  • imagenet_class_index.json는 정확도 측정을 위한 imagenet의 정답 라벨 데이터가 json 형식으로 저장되어 있습니다
  • lambda_build.sh는 람다 빌드를 자동화 해놓은 shell script입니다
  • lambda_function.py는 람다가 실제로 실행할 python 코드입니다
  • requirements.txt는 람다 환경 구성에 필요한 라이브러리 리스트입니다
  • save_model.py는 imagenet으로 사전훈련된 추론 모델을 model 폴더에 저장할 수 있도록 구성된 코드입니다
  • test.jpeg는 추론을 진행할 이미지 입니다

2. Dockerfile 생성

  • AWS Lambda에 Tensorflow를 비롯한 필요한 라이브러리들을 Docker Image에 빌드합니다.
vim Dockerfile
  • Dockerfile 예시
# aws에서 제공하는 lambda base python image 사용
FROM amazon/aws-lambda-python:3.8

# optional : pip update
RUN /var/lang/bin/python3.8 -m pip install --upgrade pip

# install git
RUN yum install git -y

# 미리 구성된 github clone
RUN git clone https://github.com/workdd/lambda-container-example

# install packages
RUN pip install -r lambda-container-example/requirements.txt

# /var/task/ 경로로 실행파일 복사
RUN cp lambda-container-example/lambda_function.py /var/task/
RUN cp lambda-container-example/imagenet_class_index.json /var/task/

# 실행 시 lambda_function.py의 lambda_handler 함수를 실행시킴을 정의
CMD ["lambda_function.lambda_handler"]

3. AWS ECR 생성

AWS Console에서 ecr을 검색하여 리포지토리에 접근합니다.

그 후 리포지토리 생성을 입력하여 생성 페이지에 접근합니다.

이름을 다음과 같이 입력하고 생성 버튼을 클릭합니다.

생성된 ECR 레포지토리에 접근하여 아직 아무런 이미지가 없음을 확인합니다.

4. Docker Image 빌드

생성한 Dockerfile을 이용하여 AWS ECR에 올릴 Docker Image를 빌드합니다.

우선 현재 환경에 aws 계정 등록이 되어있지 않다면 다음의 명령어로 등록을 진행합니다.

aws configure

aws 계정 구성을 했다면 다음의 명령어를 한줄씩 입력하며 이미지 업로드 작업을 진행합니다.

# 도커 이미지 빌드
docker build -t lambda-container-example . --no-cache

# ACCOUNT_ID 변수에 AWS 계정값 등록
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)

# 빌드한 이미지에 태깅 작업 진행
docker tag lambda-container-example $ACCOUNT_ID.dkr.ecr.us-west-2.amazonaws.com/lambda-container-example

# AWS ECR에 로그인
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.us-west-2.amazonaws.com

# AWS ECR에 이미지 push
docker push $ACCOUNT_ID.dkr.ecr.us-west-2.amazonaws.com/lambda-container-example

생성한 ECR 레포지토리에 접근하여 다음과 같은 이미지가 등록되어 있는 것을 확인합니다.

5. AWS Lambda 생성

AWS Console에 ‘lambda’ 를 검색 후 ‘함수 생성’ 버튼을 클릭합니다.

컨테이너 이미지를 클릭하고 함수 이름 기입 후 ‘이미지 찾아보기’ 버튼을 클릭합니다.

AWS ECR 이미지 중 생성한 이미지를 선택합니다.

선택 후 함수 생성 버튼을 클릭하여 AWS Lambda를 생성합니다.

함수 생성 진행을 위해 1분정도 시간이 소요됩니다.

함수 생성이 끝났다면 ‘구성’ 버튼을 클릭 후 일반 구성에서 편집 버튼을 클릭합니다.

메모리와, 제한 시간을 다음과 같이 변경한 후 저장 버튼을 클릭합니다.

람다 함수는 1분정도 업데이트 시간이 소요됩니다.

업데이트가 완료되었다면, 테스트 버튼을 눌러 추론작업을 실행합니다.

추론에 걸린 시간과 사용된 모델에 대해 다음과 같이 결과가 나온다면 성공적으로 람다 함수가 구성되었음을 알 수 있습니다.