如何使用dockerfile在aws sagemaker中运行python文件
我有一个python代码和一个经过预训练的模型,并且在代码所在的同一目录中有一个model.pkl文件,现在我必须运行该代码或将其部署到aws sagemaker,但没有得到任何解决方案,因为aws sagemaker只支持两个命令,分别用于训练和部署 目前,我正在使用命令“python filename.py”运行该程序,并且它正在成功运行。我希望在aws sagemaker上运行同样的程序 有什么解决办法吗如何使用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相同的方法,并在部署时调用,我不知道这是正确的还是错误的。
我尝试了与将模型部署到s3相同的方法,并在部署时调用,我不知道这是正确的还是错误的。如果您有一个预训练的模型和一个要在SageMaker端点上运行的文件
filename.py
,您只需要将其打包为Docker映像来创建一个模型,然后将其部署到端点并进行调用
为了做到这一点,我只是按照AWS文档上的指南进行操作
这些步骤将是:
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"