새로운 AWS Lambda 컨테이너 이미지 기능을 사용하여 ML 모델 배포
12558 단어 awscdkmachinelearningawsserverless
나를 흥분시킨 장면은 람바다 내부에 ML 모형을 배치하는 것이다.이전에는 Lambda에서 ML을 실행하는 것이 대부분의 용례에 너무 어색했지만, 아래에서 보여 드리겠습니다. 지금은 매우 간단합니다.이렇게 하려면 새 CDK 모드를 사용하겠습니다.
예측 Lambda 모드
이것은 Lambda의 용기를 사용하여 맞춤형 Python ML 모델을 배치하고, 당신의lat/long에 따라 최근의Chipotle 식당을 예측합니다.
몇 가지 유용한 참고 자료:
작자
링크
AWS 블로그
New for AWS Lambda – Container Image Support
AWS 파일
Lambda now supports container images
줄리엔 오드
Working with lambda layers and extensions in container images
어찌... 할 수 있겠는가
Using container images with aws lambda
새파랗다
Package your Lambda function as a container image
Scikit 학습 문서
User Guide
AWS ECR 갤러리
Python Lambda Image
Docker Docs
CLI Reference
사용 가능한 버전
이 모드는 무엇을 포함합니까?
이 모드는sklearn을 사용하여 위도와 경도에서 가장 가까운 Chipotle을 예측하기 위해 사용자 정의 k근접 모델을 만듭니다.이 모델은 AWS Lambda와 연결된 컨테이너에 배치됩니다.
데이터
만약 이 모델에 사용된 데이터를 보고 싶다면 jupyter notebook를 볼 수 있습니다. 원시 데이터는 kaggle에서 나온 것입니다.
ML 모델
이것은 매우 간단한 모델로 이 개념을 보여준다. (나는 심지어 정확성을 검사하지 않았다. 왜냐하면 그것은 모델을 바꾸지 않기 때문이다.)그것은 sklearn nearest neighbors 예측 거리를 사용하여lat/long의 가장 가까운 부스러기 슬롯 위치를 정한다
두 부두 컨테이너
나는 Lambda 이미지를 사용하여 용기에서 ML 모형을 훈련시킨 다음에 배치된 Lambda 함수를 위한 단독 용기를 사용합니다.내가 이렇게 한 이유는, 이것은 당신이 배치할 같은 환경에서 당신의 모델을 수정했다는 것을 알고 있다는 것을 의미하지만, 당신이 배치할 함수에 포장되지 않는 것들을 사용해서 가능한 한 경량급을 유지할 수 있다는 것을 의미하기 때문이다.원시 데이터, 훈련 논리, 훈련 모델을 포함하는 구축된 용기 이미지도 가지고 있습니다.이 이미지들은 모델의 기록을 얻기 위해 보관할 수 있습니다.
Lambda 함수
15초 제한 시간 및 4GB 메모리 설정이 있어 모델을 편안하게 실행할 수 있습니다.
API 게이트웨이 HTTP API
프록시 통합으로 설정하면 모든 요청이 Lambda 함수에 적중합니다.
이 모드는 어떻게 테스트합니까?
기본 디렉터리에서 "npm run deploy"를 실행하면 로그나 CloudFormation 콘솔에서 API 게이트웨이 출력의 URL을 얻을 수 있습니다.브라우저에서 이 URL을 열지만 끝에 "?lat=39.153198 &long=-77.066176"을 추가하면 예측을 얻을 수 있습니다.
깊이 파고들어 훈련하다.
이 모드는 3개의 독립된 과정을 포함한다
모델 트레이닝 - 완전한 옵션
I have included a pre-trained model in this pattern so you only need to do this if you want to understand how I did it or you want to try it with your own model.
모델 폴더를 보면trainmodel이라는 셸 스크립트를 발견할 수 있습니다.sh, 이 스크립트를 실행하면 (docker가 시작되었는지 확인) 모형을 완전히 다시 훈련합니다.
cd model
./trainmodel.sh
이 셸 스크립트의 코드는 실제 상황보다 더 나빠 보입니다#Using the named TrainingDockerfile, build this image and tag it as chipotle
docker build . -f TrainingDockerfile -t chipotle
#We need the image id, so query docker for an image tagged with chipotle
IMAGE_ID=$(docker images -q chipotle)
#Start the image as a background process named training
docker run -d --name 'training' ${IMAGE_ID} 'app.handler'
#Copy the trained model out of the container
docker cp training:/var/task/chipotle.pkl chipotle.pkl
#stop the running instance and delete it
docker kill training && docker rm training
다음은 TrainingDockerfile 입니다.# Use the python lambda image from AWS ECR
FROM public.ecr.aws/lambda/python:3.6
# Put these 3 files inside the container
COPY training/training.py requirements.txt training/chipotle_stores.csv ./
# Install python dependencies
RUN pip3 install -r requirements.txt
# Run the training logic
RUN python3 training.py
chipotle 상점의 데이터를 보고 싶으시면보시면jupyter notebook, 원시 데이터kaggle에서교육/교육 중의 교육 논리.pychipotle 상점을 마운트합니다.csv를 Python으로 변환하여 정리한 다음 모델을 훈련/내보냅니다.로직 교육/익스포트
#train model
model = KNeighborsClassifier(n_neighbors=2, weights="distance", algorithm="auto")
model.fit(train_set_no_labels, train_set_labels)
#export model
joblib.dump(model, 'chipotle.pkl')
컨테이너화 Lambda 함수
이 점을 실현하는 대부분의 논리는 모델/Dockerfile에 있다
FROM public.ecr.aws/lambda/python:3.6
# copy our function logic, requirements and model into the container
COPY deployment/app.py requirements.txt chipotle.pkl ./
# install the dependencies
RUN pip3 install -r requirements.txt
# the lambda handler is located inside app.py as a method called lambdaHandler
CMD ["app.lambdaHandler"]
배치/응용 프로그램의 실제 lambda 처리 프로그램 코드입니다.py는 다른 lambda 함수와 같습니다import joblib
def lambdaHandler(event, context):
model = joblib.load('chipotle.pkl')
try:
latitude = event["queryStringParameters"]['lat']
except KeyError:
latitude = 0
try:
longitude = event["queryStringParameters"]['long']
except KeyError:
longitude = 0
prediction = model.predict([[latitude,longitude]])
prediction = prediction.tolist()
return {'body': str(prediction[0]), 'statusCode': 200}
CDK 보조 논리
CDK와 관련된 부분은 함수를 만드는 일반적인 방법이 아니라 lambda를 사용합니다.DockerImageFunction 및 CDK가 모델 폴더에서 컨테이너를 구성해야 함
// defines an AWS Lambda resource
const predictiveLambda = new lambda.DockerImageFunction(this, 'PredictiveLambda', {
code: lambda.DockerImageCode.fromImageAsset(path.join(__dirname, '../model')),
memorySize:4096,
timeout: cdk.Duration.seconds(15)
})
Reference
이 문제에 관하여(새로운 AWS Lambda 컨테이너 이미지 기능을 사용하여 ML 모델 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-heroes/deploying-a-ml-model-using-the-new-aws-lambda-container-image-functionality-4e7o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)