제퍼넷 로고

AWS Lambda 계층 및 컨테이너를 사용하여 Amazon SageMaker 모델을위한 재사용 가능한 서버리스 추론 함수 구축

시간

AWS에서는 다음과 같은 방법으로 훈련 된 모델을 호스팅 할 수 있습니다. 아마존 세이지 메이커 배포, 배포 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 인스턴스 (예 : Flask + NGINX 실행), AWS 파게이트, Amazon Elastic Kubernetes 서비스 (Amazon EKS) 또는 AWS 람다.

SageMaker는 편리한 모델 호스팅 서비스 for 모델 배포, 그리고 추론을 제공하기 위해 기계 학습 (ML) 모델을 사용할 수있는 HTTPS 엔드 포인트를 제공합니다. 이를 통해 인스턴스 유형, 자동 조정 정책, 모델 버전, 추론 파이프 라인 및 프로덕션 워크로드를 처리하기 위해 배포를 쉽고 효과적으로 만드는 기타 기능과 같은 배포 옵션에 집중할 수 있습니다. 우리가 언급 한 다른 배포 옵션에는 클러스터 또는 인스턴스 시작, 추론 코드로 Docker 컨테이너 유지 관리, 작업 단순화를위한 자체 API 생성과 같은 추가 작업이 필요합니다.

이 게시물에서는 AWS Lambda를 사용하여 추론을 위해 ML 모델을 호스팅하는 방법을 보여주고 수동으로 계층을 패키징하고 업로드하고 사용하는 등 계층과 컨테이너를 구축하는 여러 옵션을 살펴 봅니다. AWS 클라우드 포메이션, AWS 서버리스 애플리케이션 모델 (AWS SAM) 및 컨테이너.

ML 추론에 Lambda를 사용하는 것은 다음과 같은 이유로 일부 사용 사례에 대한 훌륭한 대안입니다.

  • Lambda를 사용하면 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다.
  • 사용한 컴퓨팅 시간에 대해서만 비용을 지불하고 추론을 수행하지 않을 때는 비용이 부과되지 않습니다.
  • Lambda는 각 트리거 (또는이 경우 훈련 된 모델을 사용하여 예측을 수행하기 위해 클라이언트 애플리케이션의 추론 호출)에 대한 응답으로 코드를 실행하여 자동으로 확장됩니다. 코드는 병렬로 실행되고 각 트리거를 개별적으로 처리하여 워크로드의 크기에 따라 확장됩니다.
  • 동시 호출 수를 계정 수준 기본값 인 1,000으로 제한하거나 적절한 제한 증가를 요청할 수 있습니다.
  • 이 경우 추론 코드는 Lambda 코드 일 뿐이며 Lambda 콘솔에서 직접 편집하거나 AWS 클라우드9.
  • Lambda 패키지 또는 컨테이너에 모델을 저장하거나 아마존 단순 스토리지 서비스 (Amazon S3). 후자의 방법은 추가 지연 시간을 도입하지만 작은 모델의 경우 매우 낮습니다.
  • 다양한 서비스를 통해 내부적으로 또는 다음을 통해 Lambda를 트리거 할 수 있습니다. 아마존 API 게이트웨이.

Lambda 계층을 사용할 때이 접근 방식의 한 가지 제한은 작은 모델 만 수용 할 수 있다는 것입니다 (Lambda의 경우 50MB 압축 계층 크기 제한). 세이지메이커 네오, 모델을 실행하기 위해 프레임 워크에 필요한 메모리 양을 잠재적으로 10 배 줄일 수 있습니다. 모델과 프레임 워크는 프로덕션에 배포 할 수있는 단일 실행 파일로 컴파일되어 빠르고 지연 시간이 짧은 예측을 수행합니다. 또한 최근 출시 된 컨테이너 이미지 지원 Lambda 작업에 최대 10GB 크기의 컨테이너를 사용할 수 있습니다. 이 게시물의 뒷부분에서 크기에 대한 몇 가지 제한 사항을 극복하는 방법에 대해 설명합니다. 먼저 Lambda 계층을 살펴 보겠습니다!

Lambda 계층을 사용한 추론

Lambda 계층은 라이브러리가 포함 된 .zip 아카이브입니다. 커스텀 런타임또는 기타 종속성. 레이어를 사용하면 배포 패키지에 포함 할 필요없이 함수에서 라이브러리를 사용할 수 있습니다.

레이어를 사용하면 배포 패키지를 작게 유지할 수 있으므로 개발이 더 쉬워집니다. 함수 코드를 사용하여 종속성을 설치하고 패키징 할 때 발생할 수있는 오류를 방지 할 수 있습니다. Node.js, Python 및 Ruby 함수의 경우 다음을 수행 할 수 있습니다. Lambda 콘솔에서 함수 코드 개발 배포 패키지를 3MB 미만으로 유지하는 한. 함수는 한 번에 최대 250 개의 레이어를 사용할 수 있습니다. 함수 및 모든 계층의 총 압축 해제 된 크기는 압축 해제 된 배포 패키지 크기 제한 인 XNUMXMB를 초과 할 수 없습니다. 자세한 내용은 Lambda 할당량.

여러 추론 함수와 함께 사용할 수있는 공통 ML Lambda 계층을 구축하면 노력이 줄어들고 배포 프로세스가 간소화됩니다. 다음 섹션에서는 작지만 강력한 ML 프레임 워크 인 scikit-learn 용 레이어를 구축하는 방법을 설명합니다.

scikit-learn ML 계층 구축

이 섹션의 목적은 단계별로 수동으로 레이어를 빌드하는 프로세스를 탐색하는 것입니다. 프로덕션에서는 AWS SAM 또는 다음과 같은 다른 옵션을 사용합니다. AWS 클라우드 개발 키트 (AWS CDK), AWS CloudFormation 또는 자체 컨테이너 빌드 파이프 라인이 동일한 작업을 수행합니다. 이러한 단계를 수동으로 수행 한 후에는 AWS SAM과 같은 다른 도구 중 일부가 이러한 단계를 단순화하고 자동화하는 방법을 이해할 수 있습니다.

사용자 지정 계층을 원활하고 안정적으로 구축하려면 Amazon Linux를 실행하는 EC2 인스턴스에 로그인하여이 계층을 구축하는 것이 좋습니다. 지침은 다음을 참조하십시오. Linux 인스턴스에 연결.

EC2 인스턴스에 로그인되어 있으면 다음 단계에 따라 sklearn 계층을 구축합니다.

1 단계 – pip 및 awscli 업그레이드

업그레이드하려면 다음 코드를 입력하십시오. pipawscli:

pip install --upgrade pip
pip install awscli --upgrade

2 단계 – pipenv 설치 및 새 Python 환경 생성

설치 pipnv 다음 코드로 새 Python 환경을 만듭니다.

pip install pipenv
pipenv --python 3.6

3 단계 – ML 프레임 워크 설치

선호하는 ML 프레임 워크 (이 게시물의 sklearn)를 설치하려면 다음 코드를 입력하십시오.

pipenv install sklearn

4 단계 – 설치된 패키지 및 종속성이있는 빌드 폴더 만들기

다음 코드를 사용하여 설치된 패키지 및 종속성으로 빌드 폴더를 만듭니다.

ls $VIRTUAL_ENV
PY_DIR='build/python/lib/python3.6/site-packages'
mkdir -p $PY_DIR
pipenv lock -r > requirements.txt
pip install -r requirements.txt -t $PY_DIR

5 단계 – 배포 패키지의 크기 줄이기

컴파일 된 바이너리에서 심볼을 제거하고 훈련에만 필요한 데이터 파일을 제거하여 배포 패키지의 크기를 줄입니다.

cd build/
find . -name "*.so" | xargs strip
find . -name '*.dat' -delete
find . -name '*.npz' -delete

6 단계 – 레이어에 모델 파일 추가

해당되는 경우 모델 파일 (일반적으로 pickle (.pkl) 파일, joblib 파일 또는 model.tar.gz 파일)을 빌드 폴더에 추가하십시오. 앞서 언급했듯이 추론을 수행하기 전에 Lambda 함수 내의 Amazon S3에서 모델을 풀다운 할 수도 있습니다.

7 단계 – 7z 또는 zip을 사용하여 빌드 폴더 압축

폴더 압축에는 두 가지 옵션이 있습니다. 한 가지 옵션은 다음 코드입니다.

7z a -mm=Deflate -mfb=258 -mpass=15 -r ../sklearn_layer.zip *

또는 다음을 입력하십시오.

7z a -tzip -mx=9 -mfb=258 -mpass=20 -r ../sklearn_layer.zip *

8 단계 – 새로 생성 된 계층을 Lambda로 푸시

다음 코드를 사용하여 새 계층을 Lambda에 푸시합니다.

cd ..
rm -r build/ aws lambda publish-layer-version --layer-name sklearn_layer --zip-file fileb://sklearn_layer.zip

9 단계 – 추론을 위해 새로 생성 된 레이어 사용

추론에 새 계층을 사용하려면 다음 단계를 완료하십시오.

  1. Lambda 콘솔에서 기존 함수로 이동합니다.
  2. . 레이어 섹션 선택 레이어 추가.

  1. 선택 런타임 호환 레이어 목록에서 선택.
  2. 방금 업로드 한 레이어 (sklearn 레이어)를 선택합니다.

계층의 ARN을 제공 할 수도 있습니다.

  1. 추가 선택.

10 단계 – 추론 코드를 추가하여 모델을로드하고 예측합니다.

Lambda 함수 내에서 sklearn 라이브러리를 가져오고 추론을 수행하는 코드를 추가합니다. 두 가지 예를 제공합니다. 하나는 Amazon S3 및 pickle 라이브러리에 저장된 모델을 사용하고 다른 하나는 로컬에 저장된 모델과 joblib 라이브러리를 사용합니다.

1.	from sklearn.externals import joblib 2.	import boto3 3.	import json 4.	import pickle 5. 6.	s3_client = boto3.client("s3") 7. 8.	def lambda_handler(event, context): 9. 10. #Using Pickle + load model from s3 11. filename = "pickled_model.pkl" 12. s3_client.download_file('bucket-withmodels', filename, '/tmp/' + filename) 13. loaded_model = pickle.load(open('/tmp/' + filename, 'rb')) 14. result = loaded_model.predict(X_test) 15. 16. # Using Joblib + load the model from local storage 17. loaded_model = joblib.load(“filename.joblib”) 18. result = loaded_model.score(X_test, Y_test) 19. print(result) 20. return {'statusCode': 200, 'body': json.dumps(result)}

ML Lambda 계층 코드를 셸 스크립트로 패키징

또는 10 줄의 코드만으로 셸 스크립트를 실행하여 Lambda 계층 .zip 파일을 생성 할 수 있습니다 (설명한 모든 수동 단계없이).

  1. 다음 코드를 사용하여 셸 스크립트 (.sh 파일)를 만듭니다.
createlayer.sh
#!/bin/bash if [ "$1" != "" ] || [$# -gt 1]; then echo "Creating layer compatible with python version $1" docker run -v "$PWD":/var/task "lambci/lambda:build-python$1" /bin/sh -c "pip install -r requirements.txt -t python/lib/python$1/site-packages/; exit" zip -r layer.zip python > /dev/null rm -r python echo "Done creating layer!" ls -lah layer.zip else echo "Enter python version as argument - ./createlayer.sh 3.6"
fi

  1. 파일 이름 지정 createlayer.sh 그것을 저장하십시오.

스크립트에는 계층에 사용할 Python 버전에 대한 인수가 필요합니다. 스크립트는이 인수를 확인하고 다음이 필요합니다.

  • 로컬 머신, EC2 인스턴스 또는 노트북을 사용하는 경우 다음을 수행해야합니다. Docker 설치. SageMaker 노트북 인스턴스 터미널 창 또는 AWS Cloud9 터미널을 사용하는 경우 Docker가 이미 설치되어 있습니다.
  • 다음과 같은 경로에있는 requirements.txt 파일이 필요합니다. createlayer.sh 작성한 스크립트이며 설치해야하는 패키지가 있습니다. 이 파일을 만드는 방법에 대한 자세한 내용은 https://pip.pypa.io/en/stable/user_guide/#requirements-files.

이 예에서 requirements.txt 파일은 한 줄로 구성되며 다음과 같습니다.

scikit-learn

  1. 한 줄에 하나의 패키지 이름이있는 버전 번호와 함께 필요한 다른 패키지를 추가하십시오.
  2. 당신의 createlayer.sh 스크립트는 실행 가능합니다. Linux 또는 macOS 터미널 창에서 저장 한 위치로 이동합니다. createlayer.sh 파일을 열고 다음을 입력하십시오.
chmod +x createlayer.sh

이제 레이어를 만들 준비가되었습니다.

  1. 터미널에 다음을 입력하십시오.
./createlayer.sh 3.6

이 명령은 Lambda 런타임과 일치하는 컨테이너를 가져오고 (레이어가 기본적으로 호환되는지 확인), requirements.txt 파일에 지정된 패키지를 사용하여 레이어를 생성하고, 사용할 수있는 layer.zip을 저장합니다. Lambda 함수에 업로드.

다음 코드는 Lambda 호환 sklearn 계층을 생성하기 위해이 스크립트를 실행할 때의 예제 로그를 보여줍니다.

./createlayer.sh 3.6
Creating layer compatible with python version 3.6
Unable to find image 'lambci/lambda:build-python3.6' locally
build-python3.6: Pulling from lambci/lambda
d7ca5f5e6604: Pull complete 5e23dc432ea7: Pull complete fd755da454b3: Pull complete c81981d73e17: Pull complete Digest: sha256:059229f10b177349539cd14d4e148b45becf01070afbba8b3a8647a8bd57371e
Status: Downloaded newer image for lambci/lambda:build-python3.6
Collecting scikit-learn Downloading scikit_learn-0.22.1-cp36-cp36m-manylinux1_x86_64.whl (7.0 MB)
Collecting joblib>=0.11 Downloading joblib-0.14.1-py2.py3-none-any.whl (294 kB)
Collecting scipy>=0.17.0 Downloading scipy-1.4.1-cp36-cp36m-manylinux1_x86_64.whl (26.1 MB)
Collecting numpy>=1.11.0 Downloading numpy-1.18.1-cp36-cp36m-manylinux1_x86_64.whl (20.1 MB)
Installing collected packages: joblib, numpy, scipy, scikit-learn
Successfully installed joblib-0.14.1 numpy-1.18.1 scikit-learn-0.22.1 scipy-1.4.1
Done creating layer!
-rw-r--r-- 1 user ANTDomain Users 60M Feb 23 21:53 layer.zip

AWS SAM CLI를 사용하여 ML Lambda 계층 관리

AWS SAM은 Lambda 함수, 이벤트 소스 및 작업을 수행하기 위해 함께 작동하는 기타 리소스를 포함하여 AWS에서 서버리스 애플리케이션을 구축하는 데 사용할 수있는 오픈 소스 프레임 워크입니다. AWS SAM은 AWS CloudFormation의 확장이므로 AWS CloudFormation의 안정적인 배포 기능을 얻을 수 있습니다. 이 게시물에서는 AWS SAM을 사용하여 Python 함수를위한 계층을 구축하는 방법에 중점을 둡니다. AWS SAM 시작에 대한 자세한 내용은 AWS SAM 개발자 안내서.

  1. 다음 코드를 실행하여 AWS SAM CLI가 설치되어 있는지 확인하십시오.
sam --version
SAM CLI, version 1.20.0

  1. 그런 다음 다음 파일 구조가 있다고 가정합니다.
./
├── my_layer
│ ├── makefile
│ └── requirements.txt
└── template.yml

내부 파일을 살펴 보겠습니다. my_layer 개별 폴더 :

  • template.yml – 레이어 리소스 및 호환 가능한 런타임을 정의하고 메이크 파일을 가리 킵니다.
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: makefile

  • makefile – 빌드 지침을 정의합니다 (requirements.txt 파일을 사용하여 계층에 특정 라이브러리를 설치).
build-MyLayer: mkdir -p "$(ARTIFACTS_DIR)/python" python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"

  • requirements.txt – 패키지 포함 (옵션 버전 번호 포함) :

이 예제를 복제하고 필요에 따라 수정할 수도 있습니다. 자세한 내용은 https://github.com/aws-samples/aws-lambda-layer-create-script

  1. 달리기 sam build:
sam build
Building layer 'MyLayer'
Running CustomMakeBuilder:CopySource
Running CustomMakeBuilder:MakeBuild
Current Artifacts Directory : /Users/path/to/samexample/.aws-sam/build/MyLayer Build Succeeded Built Artifacts : .aws-sam/build
Built Template : .aws-sam/build/template.yaml Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Deploy: sam deploy --guided

  1. 달리기 sam deploy –guided:
sam deploy --guided
Configuring SAM deploy
====================== Looking for config file [samconfig.toml] : Not found Setting default arguments for 'sam deploy' ========================================= Stack Name [sam-app]: AWS Region [us-east-1]: #Shows you resources changes to be deployed and require a 'Y' to initiate deploy Confirm changes before deploy [y/N]: y #SAM needs permission to be able to create roles to connect to the resources in your template Allow SAM CLI IAM role creation [Y/n]: y Save arguments to configuration file [Y/n]: y SAM configuration file [samconfig.toml]: SAM configuration environment [default]: Looking for resources needed for deployment: Not found. Creating the required resources... Successfully created! Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-18scin0trolbw A different default S3 bucket can be set in samconfig.toml Saved arguments to config file Running 'sam deploy' for future deployments will use the parameters saved above. The above parameters can be changed by modifying samconfig.toml Learn more about samconfig.toml syntax at https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
Initiating deployment
=====================
Uploading to sam-app/1061dc436524b10ad192d1306d2ab001.template 366 / 366 (100.00%) Waiting for changeset to be created.. CloudFormation stack changeset
-----------------------------------------------------------------------------------------------------------------------------------------
Operation LogicalResourceId ResourceType Replacement -----------------------------------------------------------------------------------------------------------------------------------------
+ Add MyLayer3fa5e96c85 AWS::Lambda::LayerVersion N/A ----------------------------------------------------------------------------------------------------------------------------------------- Changeset created successfully. arn:aws:cloudformation:us-east-1:497456752804:changeSet/samcli-deploy1615226109/ec665854-7440-42b7-8a9c-4c604ff565cb Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]: y 2021-03-08 12:55:49 - Waiting for stack create/update to complete CloudFormation events from changeset
-----------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus ResourceType LogicalResourceId ResourceStatusReason -----------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS AWS::Lambda::LayerVersion MyLayer3fa5e96c85 - CREATE_COMPLETE AWS::Lambda::LayerVersion MyLayer3fa5e96c85 - CREATE_IN_PROGRESS AWS::Lambda::LayerVersion MyLayer3fa5e96c85 Resource creation Initiated CREATE_COMPLETE AWS::CloudFormation::Stack sam-app - ----------------------------------------------------------------------------------------------------------------------------------------- 

이제 AWS CloudFormation 콘솔에서 스택에 대한 이러한 업데이트를 볼 수 있습니다.

Lambda 콘솔에서 생성 된 Lambda 계층을 볼 수도 있습니다.

 

ML Lambda 계층 및 Lambda 함수 생성을 CloudFormation 템플릿으로 패키징

이미 구축 된 레이어를 자동화하고 재사용하려면 CloudFormation 템플릿 세트가 있으면 유용합니다. 이 섹션에서는 여러 ML Lambda 계층을 구축하고 선택한 계층 내에서 Lambda 함수를 시작하는 두 가지 템플릿을 설명합니다.

Lambda 용 다중 ML 계층 구축

표준 계층 세트를 구축 및 유지 관리 할 때 그리고 선호하는 경로가 AWS CloudFormation에서 직접 작업하는 경우이 섹션이 흥미로울 수 있습니다. 다음을 수행하기 위해 두 개의 스택을 제시합니다.

  • 다음을 사용하여 yaml 파일에 지정된 모든 레이어를 빌드합니다. AWS 코드빌드
  • 적절한 계층이 연결된 새 Lambda 함수 생성

일반적으로 첫 번째 스택은 드물게 실행하고 계층이 연결된 새 Lambda 함수를 생성해야 할 때마다 두 번째 스택을 실행합니다.

당신이 사용하는지 확인하십시오 Serverless-ML-1 (기본 이름) 1 단계에서 사용하거나 1 단계의 CloudFormation 스택 내 2 단계에서 사용할 스택 이름을 변경합니다.

1 단계 – 첫 번째 스택 시작

첫 번째 CloudFormation 스택을 시작하려면 발사 스택:

다음 다이어그램은 스택이 빌드하는 리소스의 아키텍처를 보여줍니다. 여러 계층 (MXNet, GluonNLP, GuonCV, Pillow, SciPy 및 SkLearn)이 빌드되고 버전으로 생성되는 것을 볼 수 있습니다. 일반적으로 ML 추론 함수에서 이러한 계층 중 하나만 사용합니다. 여러 라이브러리를 사용하는 레이어가있는 경우 필요한 모든 라이브러리를 포함하는 단일 레이어를 구축하는 것이 좋습니다.

2 단계 – 기존 계층으로 Lambda 함수 생성

적절한 ML 계층이 연결된 Lambda 함수를 설정할 때마다 다음 CloudFormation 스택을 시작할 수 있습니다.

다음 다이어그램은 스택이 빌드하는 새 리소스를 보여줍니다.

Lambda에서 컨테이너를 사용한 추론

크기 제한과 같이 계층을 사용하는 동안 도입 된 제한을 처리 할 때와 컨테이너 기반 도구에 투자 할 때 Lambda 함수를 빌드하기 위해 컨테이너를 사용하는 것이 유용 할 수 있습니다. 컨테이너 이미지로 빌드 된 Lambda 함수는 최대 10GB까지 가능하며, 전부는 아니더라도 대부분의 인기있는 ML 프레임 워크에 편안하게 맞출 수 있습니다. 컨테이너 이미지로 배포 된 Lambda 함수는 동일한 운영 단순성, 자동 조정, 고 가용성 및 여러 서비스와의 기본 통합의 이점을 누립니다. ML 프레임 워크가 Lambda와 함께 작동하려면 이러한 이미지가 Lambda 런타임 API. 그러나 전체 지연 시간을 최소화하려면 추론 컨테이너 크기를 작게 유지하는 것이 여전히 중요합니다. PyTorch 및 TensorFlow와 같은 대규모 ML 프레임 워크를 사용하면 컨테이너 크기가 커지고 전체 지연 시간이 늘어날 수 있습니다. 자신 만의 기본 이미지를 쉽게 구축 할 수 있도록 Lambda 팀은 Lambda 런타임 인터페이스 클라이언트추론을위한 샘플 TensorFlow 컨테이너를 만드는 데 사용합니다. 함께 제공되는 노트북을 사용하여 다음 단계를 수행 할 수도 있습니다.

1 단계 – TensorFlow를 사용하여 모델 학습

다음 코드로 모델을 학습 시키십시오.

model.fit(train_set, steps_per_epoch=int(0.75 * dataset_size / batch_size), validation_data=valid_set, validation_steps=int(0.15 * dataset_size / batch_size), epochs=5)

2 단계 – 모델을 H5 파일로 저장

다음 코드를 사용하여 모델을 H5 파일로 저장합니다.

model.save('model/1/model.h5') #saving the model

3 단계 – Dockerfile을 빌드하고 Amazon ECR에 푸시

기본 TensorFlow 이미지로 시작하여 추론 코드와 모델 파일을 입력하고 런타임 인터페이스 클라이언트와 에뮬레이터를 추가합니다.

FROM tensorflow/tensorflow ARG FUNCTION_DIR="/function"
# Set working directory to function root directory
WORKDIR ${FUNCTION_DIR}
COPY app/* ${FUNCTION_DIR} # Copy our model folder to the container
COPY model/1 /opt/ml/model/1 RUN pip3 install --target ${FUNCTION_DIR} awslambdaric ADD https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie /usr/bin/aws-lambda-rie
RUN chmod 755 /usr/bin/aws-lambda-rie
COPY entry.sh /
ENTRYPOINT [ "/entry.sh" ]
CMD [ "app.handler" ]

노트북에 포함 된 스크립트를 사용하여 컨테이너를 빌드하고 푸시 할 수 있습니다. Amazon Elastic Container Registry (Amazon ECR). 이 게시물에서는 모델을 컨테이너에 직접 추가합니다. 프로덕션 사용 사례의 경우 핸들러 함수 내에서 Amazon S3에서 사용하려는 최신 모델을 다운로드하는 것이 좋습니다.

4 단계 – Lambda에서 컨테이너를 사용하여 함수 생성

컨테이너를 사용하여 새 Lambda 함수를 생성하려면 다음 단계를 완료하십시오.

  1. Lambda 콘솔에서 기능.
  2. 왼쪽 메뉴에서 기능 만들기.
  3. 선택 컨테이너 이미지.
  4. 럭셔리 기능 명, 함수 이름을 입력하십시오.
  5. 럭셔리 컨테이너 이미지 URI, 컨테이너 이미지의 URI를 입력합니다.

5 단계 – 테스트 이벤트 생성 및 Lambda 함수 테스트

Test 기능 탭에서 호출 테스트 이벤트를 만들고 함수를 테스트합니다. 노트북에 제공된 샘플 페이로드를 사용하십시오.

결론

이 게시물에서는 Lambda 계층 및 컨테이너를 사용하여 추론을 위해 scikit-learn 및 TensorFlow와 같은 ML 프레임 워크를로드하는 방법을 보여주었습니다. 동일한 절차를 사용하여 PyTorch 및 MXNet과 같은 다른 프레임 워크에 대한 함수를 만들 수 있습니다. TensorFlow 및 PyTorch와 같은 더 큰 프레임 워크는 Lambda 배포 패키지의 현재 크기 제한에 맞지 않을 수 있으므로 Lambda에 대해 새로 시작된 컨테이너 옵션을 사용하는 것이 좋습니다. 또 다른 해결 방법은 ONNX와 같은 모델 형식 교환 프레임 워크를 사용하여 모델을 계층 또는 배포 패키지에서 사용하기 전에 다른 형식으로 변환하는 것입니다.

이제 ML Lambda 계층 및 컨테이너를 생성하는 방법을 알았으므로 예를 들어 계층에서 ONNX를 사용하여 서버리스 모델 교환 함수를 구축 할 수 있습니다. 또한 Amazon SageMaker Neo 런타임, treelite 또는 이와 유사한 라이트 버전의 ML 런타임을 사용하여 Lambda 계층에 배치하는 것을 고려하십시오. SageMaker Neo와 같은 프레임 워크를 사용하여 전용 런타임 (딥 러닝 런타임 또는 DLR이라고 함)이있는 특정 인스턴스 유형에 사용할 모델을 압축하는 것을 고려하십시오.

비용은 사용할 옵션 (레이어 또는 컨테이너)을 결정할 때 중요한 고려 사항이며 이는 전체 지연 시간과 관련이 있습니다. 예를 들어, 추론 당 평균 지연 시간이 1 밀리 초인 Lambda에서 한 달 동안 50TPS로 추론을 실행하는 비용은 약 $ 7입니다 [(0.0000000500 * 50 + 0.20 / 1e6) * 60 * 60 * 24 * 30 * TPS ~ $ 7)]. 지연 시간은 기능 구성 (메모리, vCPU, 레이어, 사용 된 컨테이너), 모델 크기, 프레임 워크 크기, 입력 크기, 추가 전처리 및 후 처리 등과 같은 다양한 요인에 따라 달라집니다. 비용을 절감하고 종단 간 ML 교육, 튜닝, 모니터링 및 배포 솔루션을 확보하려면 다음을 포함한 다른 SageMaker 기능을 확인하십시오. 다중 모델 끝점 단일 엔드 포인트 내에서 여러 모델을 호스팅하고 동적으로로드 및 언로드합니다.

또한 다중 모델 엔드 포인트에서 모델 캐시 비활성화 자주 호출되지 않는 모델이 많을 때 Amazon SageMaker에서-기본 모드보다 높은 TPS를 허용합니다. 모델 배포와 관련된 완전 관리 형 API 세트는 다음을 참조하십시오. Amazon SageMaker에서 모델 배포.

마지막으로, 더 큰 모델과 프레임 워크로 작업하고로드하는 기능은 아마존 탄성 파일 시스템 Lambda 함수에 연결된 (Amazon EFS) 볼륨은 특정 사용 사례에 도움이 될 수 있습니다. 자세한 내용은 서버리스 애플리케이션에서 AWS Lambda 용 Amazon EFS 사용.


저자에 관하여

슈레 야스 수 브라마 니안 AI / ML 전문 솔루션 아키텍트이며 기계 학습을 사용하여 AWS 플랫폼에서 비즈니스 과제를 해결함으로써 고객을 돕습니다.

안드레아 모란 디 Strategic Specialist 팀의 AI / ML 전문가 솔루션 설계자입니다. 그는 고객이 AWS에서 ML 애플리케이션을 제공하고 최적화하도록 돕습니다. Andrea는 박사 학위를 받았습니다. 볼로냐 대학 (이탈리아)에서 천체 물리학을 전공 한 그는 베이 지역에서 아내와 함께 살고 있으며 여가 시간에는 하이킹을 좋아합니다.

코인 스마트. 유로파 최고의 비트 코인-보르 스
출처 : https://aws.amazon.com/blogs/machine-learning/build-reusable-serverless-inference-functions-for-your-amazon-sagemaker-models-using-aws-lambda-layers-and-containers/

spot_img

최신 인텔리전스

spot_img