如何在无服务器AWS上部署机器学习深度学习ML DL模型?

时间:2020-07-13 07:15:37

标签: amazon-web-services deployment aws-lambda serverless mlmodel

我们正在尝试将深度学习模型作为服务提供给AWS Lambda。 我们正在使用存储桶来包含模型,代码存储库以及另一个存储桶作为函数触发器。我们在本地创建了一个虚拟环境,并尝试按照.yml文件中的配置将其部署到AWS。 yml文件保存有关从何处开始执行以及将所有代码存储区部署到哪个存储桶以及从哪个存储区部署模型的信息(与其余代码分离)。对于不同的软件包,软件包大小超过2 GB,因此由于大小过大而使该方法失败。 我们还尝试将代码的zip文件以及所有依赖项放入S3存储桶中,但是aws不允许将大型文件从s3链接到lambda函数。 我们有一个训练有素的模型以及所有的依赖关系。我们的目标是基于实例(无服务器)将该程序包作为服务托管。该项目是一个图像检测项目。我们希望我们的客户能够通过html页面访问此页面,发送请求(IMAGES)并通过该页面获取结果。

以下是main.py

导入boto3 导入操作系统 导入系统 导入uuid 导入json 从urllib.parse导入unquote_plus 从PIL导入图片 导入PIL.Image 导入make_prediction #s3_client = boto3.resource('s3')

#BUCKET_NAME ='触发输入'

def lambda_handler(事件,上下文): s3_client = boto3.client('s3')

    bucket = event['Records'][0]['s3']['bucket']['name']
    key = unquote_plus(event['Records'][0]['s3']['object']['key'])
    print("Bucket: ",bucket)
    print("key :",key)
    tmpkey = key.replace('/', '')
    download_path = '/tmp/{}{}'.format(uuid.uuid4(),key)
    print('tmpkey',tmpkey)
    print('download_path',download_path)
    s3_client.download_file(bucket, tmpkey, download_path)
    result = make_prediction.predict(download_path)
    return {
            'statusCode' : 200,
            'body' : result
            }


 

以下是serverless.yml文件

######################################## 服务:测试部署 插件:

  • serverless-python-requirements 自定义: pythonRequirements: 苗条:真的

提供者: 名称:aws 运行时:python3.6 地区:us-east-2 deploymentBucket: 名称:“ triggerputsourcecode” iamRoleStatements:

  • 效果:允许 行动:
    • “ s3.GetObject” 资源:“ arn:aws:s3 ::: triggerputsourcecode / *”

功能: aws-lambda: 名称:lambda_handler 描述:使用无服务器将训练好的模型部署到lambda 角色:“ arn:aws:iam :: 668425647453:role / service-role / S3putRole” 处理程序:main.lambda_handler bucket:触发输出 事件:

  • http:PUT /预测 #########################################

enter image description here

0 个答案:

没有答案