【发布时间】: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