AWS Lambda 배포 제한 사항 탐색

6643 단어 serverlessaws
원문: https://dashbird.io/blog/exploring-lambda-limitations/
우리는 이미 이 점을 어떻게 하는지 탐색했다deploy Machine Learning models using AWS Lambda.AWS Lambda 배치 ML 모델을 사용하면 초기 프로젝트에 적용됩니다. Lambda 함수를 사용하는 데 한계가 있기 때문입니다.그러나 기계 학습 프로젝트에서 AWS Lambda의 잠재력을 충분히 활용해야 한다면 이것은 당신이 걱정하는 이유가 아닙니다.
Lambda 함수를 사용할 때 개발자들은 배포 패키지의 크기를 자주 걱정한다.
우선 AWS Lambda 배포 제한을 살펴보고 AWS 공식 문서에서 50MB의 가방 크기 문제를 해결하는 것은 좀 터무니없습니다. 압축되지 않은 파일을 더 크게 배치할 수 있기 때문입니다.

AWS Lambda에는 다음과 같은 제한이 있습니다.


런타임 환경 제한:
  • 디스크 공간(임시)은 512MB로 제한됩니다.
  • 기본 배포 패키지 크기는 50MB입니다.
  • 메모리 범위는 128 ~ 3008MB입니다.
  • 함수의 최대 실행 시간은 15분*입니다.
    Lambda 요청 제한:
  • 요청과 응답(동기화 호출) 본문의 유효 부하 크기는 6MB에 달한다.
  • 이벤트 요청(비동기식 호출) 본문은 최대 128KB입니다.
  • 50MB 제한을 정의하는 이유는 배포 패키지를 Lambda에 직접 업로드할 수 없기 때문입니다. 크기가 정의된 제한보다 큽니다.기술적으로 Lambda 함수를 S3에서 배치 패키지를 추출하면 제한이 훨씬 높을 수 있습니다.Lambda나 다른 AWS 서비스에 직접 업로드하는 것보다 AWS S3는 더 높은 배포 패키지로 배포 기능 코드를 제한할 수 있습니다.사실상 대부분의 AWS 서비스의 기본 제한은 지원 요청을 통해 높아질 수 있습니다.
    그럼에도 불구하고 많은 개발자들에게 실제 제한이 무엇인지는 의문이다.따라서 이 문제의 답을 찾기 위해 크기가 다른 배치 패키지를 업로드하여 테스트를 진행할 것입니다.

    배포 패키지


    우리는 기계 학습 모델을 배치 패키지로 사용하여 지정된 크기의 무작위 데이터를 만들어 서로 다른 크기의 제한을 테스트할 것이다.문서에 설명된 다음 제한 사항을 테스트합니다.
    50MB: 최대 배포 팩 크기
    250MB: 배포 패키지에 압축할 수 있는 코드/의존 항목의 크기(압축되지 않은.zip/.jar 크기)
    이 테스트에 대해 우리는 AWS Service Limits에서 만든 기계 학습 모델을 사용할 것이다.TensorFlow Inception-v3 모델을 기반으로 한 이미지 식별 딥러닝 모델입니다.비록 우리의 데이터는 압축되지 않았지만.전체 파일 크기는 약 150MB로 지정된 50MB 제한보다 훨씬 큽니다.

    테스트


    Lambda 함수에 직접 업로드하여 테스트해 보겠습니다.다음은 따라야 할 주요 단계입니다.
    우리는 먼저 소포를 지퍼를 당긴다.이 압축 패키지에는 다음과 같은 모든 파일이 포함됩니다.
  • 이미지를 분류합니다.py
  • classify\u image\u graph\u def.pb
  • 기계 학습 패키지.우편번호
  • 이 모델은 이 프로젝트를 위해 특별히 만들어진 것이다.단, 다음 출처에서 기계 학습 모형을 다운로드할 수 있다.
    케라스: this article
    TensorFlow:https://github.com/fchollet/deep-learning-modelsofficial releaseperformance models
    2 우리는 우리의 소프트웨어 패키지를 기계 학습이라고 부른다.지퍼
    zip MachineLearning.zip MachineLearning 
    
    3 파일을 압축할 수 있는지 확인합니다.
    $ ls -lhtr | grep zip
    -rw-r--r-- 1 john staff 123M Nov 4 13:05 MachineLearning.zip
    
    압축 및 압축 후에도 전체 가방 크기는 약 132MB입니다.
    4 Lambda 함수를 만들기 위해 IAM 역할을 만들어야 합니다.우리의 주요 목표는 테스트 제한이기 때문에, 우리는 캐릭터 생성 과정을 뛰어넘을 것이다.자격 증명을 사용하여 IAM 관리 콘솔에 로그인하여 테스트 역할을 만들고 AWSLambdaRole 정책을 추가합니다.
    tensornets

    5 다음은 를 통해 Lambda 함수를 만들고 배포 패키지를 이 함수에 직접 업로드합니다.
    aws lambda create-function --function-name mlearn-test --runtime nodejs6.10 --role arn:aws:iam::XXXXXXXXXXXX:role/Test-role --handler tensorml --region ap-south-1 --zip-file fileb://./MachineLearning.zip
    AWS 계정 id로 xxxxxxxxxxx를 교체합니다. 패키지 크기가 50MB보다 커서 오류가 발생합니다.
    An error occurred (RequestEntityTooLargeException) when calling the UpdateFunctionCode operation: Request must be smaller than 69905067 bytes for the UpdateFunctionCode operation
    6 배포 패키지가 상당히 크기 때문에 AWS Lambda에서 실행 기간에 Amazon S3에서 다시 불러올 것으로 추정합니다.이를 위해서는 AWS CLI에서 AWS S3 버킷을 생성해야 합니다.
    aws s3 mb s3://mlearn-test --region ap-south-1
    
    이것은 우리를 위해 S3 버킷을 만들 것입니다.현재, 우리는 우리의 가방을 이 버킷에 전달하고, S3 대상 키로 람다 함수를 업데이트할 것입니다.
    aws s3 cp ./ s3://mlearn-test/ --recursive --exclude "*" --include "MachineLearning.zip"
    
    일단 우리의 가방이 버킷에 업로드되면, 우리는 가방의 대상 키로 람다 함수를 업데이트할 것입니다.
    aws lambda update-function-code --function-name mlearn-test --region ap-south-1 --s3-bucket mlearn-test --s3-key MachineLearning.zip
    
    이번에는 Lambda 함수를 업데이트한 후에도 오류가 나타나지 않아 가방을 성공적으로 업로드할 수 있습니다.즉, 직접 업로드가 아닌 S3를 통해 업로드할 경우 패키지 크기가 50MB보다 클 수 있습니다.압축 후 우리의 가방 크기는 약 132MB이기 때문에, 우리는 여전히 업로드 가방의 최대 제한이 얼마인지 잘 모른다.
    최대 제한을 얻기 위해 300MB 정도의 무작위 데이터를 만들고 S3를 통해 업로드하며 Lambda 함수를 업데이트합니다.
    fsutil file createnew sample300.txt 350000000
    
    그러면 약 300MB의 예제 파일이 생성됩니다.파일을 압축하여 S3를 통해 다시 업로드합니다.
    aws s3 cp ./ s3://mlearn-test/ --recursive --exclude "*" --include "sample300.zip"
    

    aws lambda update-function-code --function-name mlearn-test --region ap-south-1 --s3-bucket mlearn-test --s3-key sample300.zip
    Lambda 함수를 업데이트하면 다음과 같은 오류가 발생합니다.
    An error occurred (InvalidParameterValueException) when calling the UpdateFunctionCode operation: Unzipped size must be smaller than 262144000 bytes
    이 오류는 압축 해제 패키지의 크기가 262144000바이트, 즉 약 262MB보다 작아야 한다는 것을 설명합니다.이 크기는 배포 패키지에 압축할 수 있는 250MB 크기의 코드/의존 항목 (압축되지 않은.zip/.jar 크기) 의 지정한 제한보다 약간 크다는 것을 알 수 있습니다.따라서 S3를 통해 업로드할 때 압축되지 않은 배포 패키지의 최대 크기는 250MB로 제한됩니다.그러나 Lambda 함수에 직접 업로드할 때 50MB가 넘는 패키지를 업로드할 수 없습니다.
    여기서 주의해야 할 중요한 점은 압축되지 않은 상태일 때 코드와 의존항의 크기는 250MB 이내여야 한다는 것이다.설령 우리가 비교적 큰 봉인 사이즈를 고려한다 하더라도, Lambda 함수의 냉가동 시간에 심각한 영향을 줄 수 있다.따라서 Lambda 함수는 더 큰 패키지 크기를 실행하는 데 더 많은 시간이 걸릴 것입니다.
    서버 없는 사이트나 응용 프로그램의 성능을 더 빠르고 쉽게 알고 싶으면 DashbirdAWS CLI나hit the ground running andmonitoring, insights and alerts features를 보십시오.
    *get your free account now 5분에서 2018년 10월까지 15분.

    좋은 웹페이지 즐겨찾기