【问题标题】:SageMaker deploy error "serve" executable file not found in $PATH在 $PATH 中找不到 SageMaker 部署错误“服务”可执行文件
【发布时间】:2021-01-25 10:53:47
【问题描述】:

在 Amazon SageMaker 中,我尝试使用 Scikit-Learn 模型部署自定义创建的 Docker 容器,但部署时不断出错。

这些是我的步骤:

  • 在我的本地机器上创建了一个脚本 (script.py) 并拆分了训练和测试数据。该脚本包含一个主要部分,接受参数'output-train-dir'、'model-dir'、'train'和'test',并包含函数model_fn、input_fn、output_fn和predict_fn

  • 在本地测试了脚本,效果很好

    • python script.py --train 。 - 测试 。 --model-dir .
  • 基于默认 Python 镜像(Python 3.9)创建 Docker 镜像并推送到 Amazon ECR,以下是我使用过的命令

     > 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})
    

这也是成功的(但是,提供模型目录参数会出错,所以我省略了它)

  • 部署却报错:

      aws_sklearn_predictor = aws_sklearn.deploy(instance_type='ml.t2.medium',
                                                 initial_instance_count=1)
    

错误信息:

UnexpectedStatusException:错误托管端点 mymodel-2021-01-24-12-52-02-790:失败。原因:初级 生产变体 AllTraffic 的容器未通过 ping 健康检查。请检查此端点的 CloudWatch 日志..

Cloudwatch 说:

AWS sagemaker exec: "serve": $PATH 中找不到可执行文件

我在某处读到我应该将 RUN chmod +x /opt/program/serve 添加到 Dockerfile,但是在我的本地映像中,没有提供服务文件,这是 SageMaker 创建的东西,对吧?

我应该如何或在哪里将服务添加到 $PATH 环境变量或授予服务脚本执行权限?

【问题讨论】:

    标签: docker deployment amazon-sagemaker


    【解决方案1】:

    serve 文件不是 SageMaker 自动创建的;你必须让它成为 Docker 容器的一部分。这在技术上也适用于 Estimator 作业(也应该有一个类似的 train 文件;但是您可以通过手动指定 entry_point 来覆盖它)。

    This page 应该有助于解释 SageMaker 在您运行训练和 batch_transform 作业时实际尝试运行的内容。该页面引用了this repo,您可以将其用作示例。

    简而言之,如果您想继续使用自定义 docker 容器,则必须为 serve 命令构建功能(请参阅 repo 中的其他脚本以启动 gunicorn 服务器运行 Flask 应用程序的多个实例)并将这些文件添加到您的 Dockerfile。

    添加serve 命令功能后,RUN chmod +x /opt/program/serve 命令也将更有意义。

    【讨论】:

    • 谢谢,我会尝试一下,会尽快回复您。不知道那个页面,似乎是一个全面的解释!
    • 这节省了我的时间,非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2015-01-25
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多