새로운 AWS Lambda 컨테이너 이미지 기능을 사용하여 ML 모델 배포

이번 주re:Invent에서 AWS가 자신의 용기를 Lambda 함수에 도입하는 기능을 발표한 것을 보았습니다.처음에는 서버가 없는 것을 반대하는 것 같았지만, 서버가 없는 것은 하나의 스펙트럼이며, 사람마다 다른 위치에 있다는 것을 명심하십시오.
나를 흥분시킨 장면은 람바다 내부에 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

사용 가능한 버전

  • TypeScript
  • Python
  • 이 모드는 무엇을 포함합니까?


    이 모드는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개의 독립된 과정을 포함한다
  • Lambda Python 이미지 내부에서 ML 모델을 훈련하고 내보내서 실행할 때 호환성을 실현하는 스크립트화 과정
  • 내보낸 모델을 가져오고 용기화 lambda 함수에 사용할 Dockerfile
  • API 게이트웨이 배포 및 위 Lambda
  • 의 CDK 구현

    모델 트레이닝 - 완전한 옵션


    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)
    })
    

    좋은 웹페이지 즐겨찾기