当前位置: 首页 > 知识库问答 >
问题:

SageMaker部署错误"service"可执行文件未在$PATH中找到

郎伟兆
2023-03-14

在Amazon SageMaker中,我试图部署一个带有Scikit学习模型的自定义创建的Docker容器,但是部署总是出错。

以下是我的步骤:

>

  • 在我的本地机器上创建了一个脚本(script.py),并分割了培训和测试数据。该脚本包含一个主要部分,接受参数“输出列车dir”、“模型dir”、“列车”和“测试”,并包含函数模型fn、输入fn、输出fn和预测fn

    在本地测试了脚本,效果良好

    • python脚本。py——火车--测试--模型目录

    基于默认的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脚本授予执行权限?

  • 共有1个答案

    陶成济
    2023-03-14

    服务文件不是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数组)时,将在 没有 外壳的 情况下 执行该命令。这意味着大多数环境变量将不存在。 如果您将命令指定为常规字符串(例如),则之后的字符串将使用来执行。 有关更多信息,