我有一个python代码和一个模型,是预先训练和有一个model.pkl文件与我在同一个目录中的代码我,现在我必须运行或部署这到aws sagemaker但没有得到任何解决方案由于aws sagemaker只支持两个命令,分别用于训练和部署。
目前,我正在使用命令“python filename.py”运行该程序,并且它正在成功运行。我希望在aws sagemaker上运行同样的程序。
有什么解决办法吗??
我尝试了与将模型部署到s3相同的方法,并在部署时调用,我不知道这是正确的还是错误的。
如果您有一个预训练模型和一个文件名。py如果要在SageMakerendpoint上运行,只需将其打包为Docker映像,以创建一个模型,然后将其部署到endpoint并进行调用。
为了做到这一点,我只是遵循AWS文档中关于使用您自己的推理代码的指南。
这些步骤将是:
让我们以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)
以下是一些要求。txt:
Flask==0.10.1
我们需要一个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
任何endpoint:
curl localhost:8080/ping
> ok
现在我们需要将其发布到ECR,因为SageMaker从ECR读取模型。我在跟随AWS的指引
通过运行
docker图像
获取图像id
用这个。为了方便起见,我正在使用us-west-2。将其替换为您选择的区域:
docker tag <image id> <aws accound id>.dkr.ecr.us-west-2.amazonaws.com/simple-model
现在我们应该把它推到ECR:
docker push <aws accound id>.dkr.ecr.us-west-2.amazonaws.com/simple-model
现在我们可以用这个图像创建一个模型。首先,您需要一个SageMaker执行角色。这将用于访问您的图像和其他资源。你可以在这个AWS文档页面上设置。
其次,需要设置AWS CLI。
让我们开始吧。
让我们先创建模型。这将指向您在最后一步中创建的ECR映像。在这个命令中替换上面创建的角色名:
aws sagemaker create-model --model-name "SimpleModel" --execution-role-arn "arn:aws:iam::<aws account id>:role/<role name>" --primary-container "{
\"ContainerHostname\": \"ModelHostname\",
\"Image\": \"<aws account id>.dkr.ecr.us-west-2.amazonaws.com/simple-model:latest\"
}"
这将创建您的模型。现在我们需要创建一个
EndpointConfig
,它将告诉您的SageMakerendpoint需要如何配置:
aws sagemaker create-endpoint-config --endpoint-config-name "SimpleConfig" --production-variants "[
{
\"VariantName\" : \"SimpleVariant\",
\"ModelName\" : \"SimpleModel\",
\"InitialInstanceCount\" : 1,
\"InstanceType\" : \"ml.t2.medium\"
}
]"
最后,我们可以使用该配置创建endpoint:
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还具有自动抓取模型工件的能力,您不必将它们包含在模型容器中。看这里的留档。
希望这有帮助!
问题内容: 我正在制作一个dockerfile来安装elasticsearch:6.5.4并将少量文件添加到所需位置,并运行一个名为test.sh的脚本,以便在Elasticsearch运行时在elasticsearch中创建新索引。 我不确定是否应该使用RUN,CMD或ENTRYPOINT来执行此操作。 我已经通过注释最后一行(包含RUN / CMD / ENTRYPOINT test.sh)成
上述方法工作良好,但有一个警告 我想知道,有没有一种简单明了的方法可以直接调用bash函数,因为它是正常的二进制函数,而不需要包装?也许像是
问题内容: 我在代理后面,我需要通过安装一些东西。 我最好的是这个 问题是,我之后需要取消设置这些环境变量。 任何想法如何做到少于5层? 问题答案: 您需要使用构建时变量(–build-arg)。 该标志允许您传递在Dockerfile的RUN指令中像常规环境变量一样被访问的构建时变量。而且,这些值不会像ENV值那样保留在中间或最终图像中。 因此,您只有3行: 您只需要定义构建时变量和/或在图像构
问题内容: 我正在尝试在Dockerfile的构建过程中运行脚本。但这似乎不起作用。 我尝试过这种方式: 也这样: 并且也执行我正在运行的容器: 似乎没有任何作用。 你知道怎么做吗? 问题答案: 和是执行脚本的两种不同方式。 意味着它将创建一个中间容器,运行脚本并将该容器的新状态冻结在新的中间映像中。此后该脚本将不再运行:您的最终图像应该反映出该脚本的结果。 表示您的映像(尚未执行脚本)将创建一个
问题内容: 我正在尝试对laravel应用程序进行Docker化。该应用程序已经构建并且在git中,但是我.gitignore我的供应商文件夹。我添加了一个Dockerfile,如下所示: 当我构建时,这似乎很棒。我看到依赖项已下载,我看到输出中正在生成自动加载文件。但是,一旦构建完成,vendor文件夹实际上就不存在了。我猜这都是在中间容器中完成的,然后将其删除?所以当我运行docker- co
问题内容: 在mongo shell js文件中,可以使用以下命令运行: 如何使用spring-data做到这一点?或Java中的任何其他方式。我试过了: 和: 但这不起作用。 问题答案: 这是参考文档中有关如何在Spring Data MongoDB中使用脚本的相关部分。