在Amazon SageMaker中,我试图部署一个带有Scikit学习模型的自定义创建的Docker容器,但是部署总是出错。
以下是我的步骤:
>
在我的本地机器上创建了一个脚本(script.py),并分割了培训和测试数据。该脚本包含一个主要部分,接受参数“输出列车dir”、“模型dir”、“列车”和“测试”,并包含函数模型fn、输入fn、输出fn和预测fn
在本地测试了脚本,效果良好
基于默认的Python映像(Python3.9)创建了一个Docker映像,并推送到AmazonECR,下面是我使用的命令
> docker pull python
create Dockerfile, containing
FROM python:3.9
RUN pip3 install --no-cache scikit-learn numpy pandas joblib sagemaker-training
> docker build -t mymodel .
> aws ecr create-repository --repository-name mymodel
> docker tag 123456789012 123456789123.dkr.ecr.eu-central-1.amazonaws.com/mymodel
> docker push 123456789123.dkr.ecr.eu-central-1.amazonaws.com/mymodel
将培训和测试数据上传到s3(mybucket)
用本地方法训练脚本
aws_sklearn = SKLearn(entry_point='script.py',
framework_version='0.23-1',
image_uri='123456789123.dkr.ecr.eu-central-1.amazonaws.com/mymodel',
instance_type='local',
role=role)
aws_sklearn.fit({'train': mybucket_train_path, 'test': mybucket_test_path, 'model-dir': mybucket_model_path})
这是成功的
>
接下来我在AWS上训练
aws_sklearn = SKLearn(entry_point='script.py',
framework_version='0.23-1',
image_uri='123456789123.dkr.ecr.eu-central-1.amazonaws.com/mymodel',
instance_type='ml.m4.xlarge',
role=role)
aws_sklearn.fit({'train': mybucket_train_path, 'test': mybucket_test_path})
这也很成功(但是,如果model dir参数给出了错误,那么我省略了它)
>
但部署时出现错误:
aws_sklearn_predictor = aws_sklearn.deploy(instance_type='ml.t2.medium',
initial_instance_count=1)
错误消息:
意外状态异常:托管endpointmyModel-2021-01-24-12-52-02-790错误:失败。原因:用于生产变体所有流量的主容器没有通过ping健康检查。请检查此endpoint的CloudWatch日志...
Cloudwatch说:
AWS sagemaker exec:"service":在$PATH中找不到可执行文件
我在某个地方读到我应该添加RUN chmod x /opt/program/serve到Dockerfile,但是在我的本地映像中,没有服务文件,这是SageMaker创建的东西,对吗?
我应该如何或在何处将serve添加到$PATH环境变量或向serve脚本授予执行权限?
服务文件不是SageMaker自动创建的;你必须让它成为Docker容器的一部分。这在技术上也适用于估计器作业(也应该有一个类似的列车文件;但是您可以通过手动指定一个入口点来覆盖该文件)。
本页应帮助解释当您运行培训和批处理转换作业时,SageMaker实际尝试运行的内容。该页面引用了此回购协议,您可以将其用作示例。
简而言之,如果您想继续使用自定义docker容器,则必须为serve命令内置功能(请参阅repo中启动gunicorn服务器的附加脚本,该服务器运行Flask应用程序的多个实例),并将这些文件添加到docker文件中。
在您添加了服务命令功能后,RUN chmod x /opt/program/serve命令也将变得更有意义。
我正在尝试为elasticsearch 1.7运行docker容器。下面是我的Dockerfile: Docker build运行良好。但是docker run命令给了我这个错误:来自守护进程的错误响应:oci运行时错误:container\u linux。go:265:启动容器进程导致“exec:\“elasticsearch\”:在$PATH中找不到可执行文件” 我使用的Mac和Docker版
我完全按照这个例子,[http://kubernetes.io/docs/hellonode/,] 在我运行[kubectl run hello-node--image=gcr.io/project_id/hello-node:v1--port=8080 deployment“hello-node”created]之后。pod运行不正常,我得到了CrashLoopBackOff状态,我没有部署执行
我已经检查了垃圾箱,里面没有ping
我有一个docker映像,它安装了,但是当我试图运行它时,我得到了一个错误: 如果我在交互模式下运行bash,则可用。 我做错了什么? 这是我的Dockerfile:
我有一个运行在Docker容器中的uwsgi服务,我想用它来服务django应用程序。当我在本地运行uwsgi服务时,一切正常,但是从docker容器中我得到消息和,django应用程序显示内部服务器错误。这是我的uwsgi.ini文件。在docker容器中,我使用类似于
问题内容: 我有一个安装的docker映像,但是当我尝试运行它时,出现错误: 如果我以交互模式运行bash,则可用。 我究竟做错了什么? 这是我的Dockerfile: 问题答案: 当您将exec格式用于命令(例如,带双引号的JSON数组)时,将在 没有 外壳的 情况下 执行该命令。这意味着大多数环境变量将不存在。 如果您将命令指定为常规字符串(例如),则之后的字符串将使用来执行。 有关更多信息,