如何使用dockerfile在aws sagemaker中运行python文件

如何使用dockerfile在aws sagemaker中运行python文件,python,amazon-web-services,amazon-sagemaker,Python,Amazon Web Services,Amazon Sagemaker,我有一个python代码和一个经过预训练的模型,并且在代码所在的同一目录中有一个model.pkl文件,现在我必须运行该代码或将其部署到aws sagemaker,但没有得到任何解决方案,因为aws sagemaker只支持两个命令,分别用于训练和部署 目前,我正在使用命令“python filename.py”运行该程序,并且它正在成功运行。我希望在aws sagemaker上运行同样的程序 有什么解决办法吗 我尝试了与将模型部署到s3相同的方法,并在部署时调用,我不知道这是正确的还是错误的。

我有一个python代码和一个经过预训练的模型,并且在代码所在的同一目录中有一个model.pkl文件,现在我必须运行该代码或将其部署到aws sagemaker,但没有得到任何解决方案,因为aws sagemaker只支持两个命令,分别用于训练和部署

目前,我正在使用命令“python filename.py”运行该程序,并且它正在成功运行。我希望在aws sagemaker上运行同样的程序

有什么解决办法吗


我尝试了与将模型部署到s3相同的方法,并在部署时调用,我不知道这是正确的还是错误的。

如果您有一个预训练的模型和一个要在SageMaker端点上运行的文件
filename.py
,您只需要将其打包为Docker映像来创建一个模型,然后将其部署到端点并进行调用

为了做到这一点,我只是按照AWS文档上的指南进行操作

这些步骤将是:

  • 创建模型代码
  • 用代码创建Docker映像
  • 使用此图像创建端点
  • 步骤1:创建模型代码 让我们以Python中的这个简单模型为例:

    from flask import Flask, request
    app = Flask(__name__)
    
    @app.route('/ping')
    def ping():
        return ''
    
    @app.route('/invocations')
    def invoke():
        return 'should do inference with your model here'
    
    
    if __name__ == '__main__':
        app.run(debug=True, host='0.0.0.0', port=8080)
    
    以下是requirements.txt:

    Flask==0.10.1
    
    步骤2:创建Docker映像 我们需要一个Dockerfile来建立我们的形象。这是我用过的一个:

    Dockerfile:

    FROM ubuntu:16.04
    
    RUN apt-get update -y && apt-get install -y python-pip python-dev
    
    COPY ./requirements.txt /app/requirements.txt
    
    WORKDIR /app
    
    RUN pip install -r requirements.txt
    
    COPY . /app
    
    EXPOSE 8080
    
    ENTRYPOINT ["python"]
    CMD ["model.py"]
    
    我们可以通过运行:
    docker build-t simple model:latest来构建映像。

    这将创建映像,现在我们可以通过运行它来测试它:

    docker run -d -p 8080:8080 simple-model
    
    如果它正在运行,您应该能够
    curl
    任何端点:

    curl localhost:8080/ping
    > ok
    
    现在我们需要在SageMaker从ECR读取模型时将其发布到ECR。我在跟踪

    通过运行
    docker images

    用这个。为了方便起见,我正在使用us-west-2。将其替换为您选择的区域:

    docker tag <image id> <aws accound id>.dkr.ecr.us-west-2.amazonaws.com/simple-model
    
    最后,我们可以使用该配置创建端点:

    aws sagemaker create-endpoint --endpoint-name "SimpleEndpoint" --endpoint-config-name "SimpleConfig"
    
    如果所有这些都有效,请等待
    aws sagemaker描述端点——端点名称SimpleEndpoint
    表示它是
    InService

    一旦完成,我们现在可以对其调用调用:

    aws sagemaker-runtime invoke-endpoint --endpoint-name SimpleEndpoint --body "empty"
    
    结论 如果这一切都成功了,你将有自己的终点。接下来的步骤是定制Python脚本,以使用自己的模型进行自己的推理。SageMaker还能够自动获取模型工件,而不必将它们包含在模型容器中。看


    希望这有帮助

    您想在sagemaker中部署它并将其作为端点公开吗?如果是,那么您可以创建自己的docker映像,并使用sagemaker endpoint进行创建。或者,您可以将整个管道移动到sagemaker。如果你是从新开始,我想后一个是最好的主意。
    aws sagemaker create-endpoint-config --endpoint-config-name "SimpleConfig" --production-variants "[
        {
            \"VariantName\" : \"SimpleVariant\",
            \"ModelName\" : \"SimpleModel\",
            \"InitialInstanceCount\" : 1,
            \"InstanceType\" : \"ml.t2.medium\"
        }
    ]"
    
    aws sagemaker create-endpoint --endpoint-name "SimpleEndpoint" --endpoint-config-name "SimpleConfig"
    
    aws sagemaker-runtime invoke-endpoint --endpoint-name SimpleEndpoint --body "empty"