使用Java SDK触发SageMaker创建训练任务时报找不到ECR镜像错误
SageMaker Java调用createTrainingJob异常问题说明
当前操作流程进展
- 上传以目标字段为第一列的训练数据CSV文件,该步骤已顺利完成
- 调用AWS SDK的
createTrainingJobAPI创建SageMaker训练任务,该步骤触发异常中断
接口返回的异常原文
Cannot find the requested image: 777445444252.dkr.ecr.eu-west-1.amazonaws.com/sagemakerimage with tag: latest and digest: null. Please check if your ECR image exists and role arn:aws:iam::777445444252:role/sagemaker has proper pull permissions for SageMaker: ecr:BatchCheckLayerAvailability, ecr:BatchGetImage, ecr:GetDownloadUrlForLayer
已完成的排查动作
- 已创建名为sagemaker的服务角色,为其配置了可全权访问ECR所有仓库的权限,权限配置操作参考了官方指引截图
- 已在eu-west-1区域的ECR中创建名为sagemakerimage的仓库
- 初始认知偏差:此前默认使用SageMaker时会自动创建训练所需的运行镜像,未完成镜像推送至ECR仓库的操作
问题核心根因
- ECR仓库本身不自带镜像内容:ECR作为容器镜像托管仓库,与代码仓库逻辑一致,仅完成仓库创建无法自动生成可运行的镜像,必须主动将镜像推送到仓库路径下,才能被SageMaker正常拉取
- 镜像标签匹配校验:报错明确指向找不到带
latest标签的镜像资产,即便仓库已创建,只要仓库下不存在对应标签的可用镜像,就会触发镜像找不到的异常 - SageMaker镜像机制说明:如果使用SageMaker官方提供的内置算法,不需要自行创建ECR仓库和镜像,直接使用AWS公开的官方镜像URI即可触发训练;只有使用自定义训练逻辑时,才需要自行构建镜像并推送到自有ECR仓库
对应修复操作
- 校验调用
createTrainingJob时传入的镜像参数:如果是使用内置算法,直接替换为eu-west-1区域对应的算法版本官方镜像URI,无需自行维护ECR仓库 - 如果是自定义训练场景,将本地构建完成的训练镜像推送到已创建的
sagemakerimageECR仓库,确认推送的镜像打了latest标签,且和调用时填写的镜像URI(所属区域、仓库路径、镜像标签)完全匹配 - 校验sagemaker服务角色的信任策略:需在角色的信任关系配置中,允许
sagemaker.amazonaws.com服务代入该角色,仅配置ECR访问权限但未开通SageMaker服务信任关系的情况下,SageMaker依然无法获得拉取ECR镜像的权限
内容的提问来源于stack exchange,提问作者codeworks
相关产品推荐
相关产品推荐

