SageMaker CreateTransformJob报找不到DeepAR模型错误如何解决
报错原因
- 核心问题是混淆了SageMaker训练作业和可调用模型实体的概念:训练作业完成后仅会在S3存储桶生成模型权重压缩包,不会自动在SageMaker推理模块注册可被批量转换、端点部署调用的模型资源。你从训练作业详情页复制的字符串只是训练作业的命名后缀,并非SageMaker模型列表中真实存在的模型名,接口按传入名称拼接资源ARN后自然查询不到对应模型。
- 潜在风险点:你代码中初始化boto3 SageMaker客户端时未显式指定区域,如果本地/运行环境默认区域和模型所在的
eu-central-1不一致,也会触发跨区找不到资源的问题;另外你写的DEEPAR_INFERENCE_CONFIG环境变量存在JSON语法错误,双引号未转义,就算模型匹配成功也会报参数校验失败。
修复方法
- 先注册可供批量转换调用的SageMaker模型
两种实现方式二选一即可:- 控制台操作:进入SageMaker控制台的「推理」-「模型」板块,点击创建模型,填写和训练作业一致的IAM执行角色,模型数据源选择本次训练作业输出到S3的
model.tar.gz文件路径,算法镜像选择对应版本的DeepAR内置算法镜像,模型名称可直接使用你之前写的forecasting-deepar-2022-06-21-14-12-51-560,创建完成后回到模型列表确认该名称存在即可。 - 代码操作:如果你是通过SageMaker Python SDK完成的训练,直接调用训练生成的estimator对象的
create_model()方法,即可自动完成镜像、模型路径、角色的配置,完成模型注册。
- 控制台操作:进入SageMaker控制台的「推理」-「模型」板块,点击创建模型,填写和训练作业一致的IAM执行角色,模型数据源选择本次训练作业输出到S3的
- 修正代码参数问题
初始化boto3客户端时显式指定区域,避免跨区调用:
修复环境变量的JSON转义错误:import boto3 boto3_sm = boto3.client('sagemaker', region_name='eu-central-1')"Environment": { "DEEPAR_INFERENCE_CONFIG" : "{ \"num_samples\": 200, \"output_types\": [\"mean\"] }" } - 补全批量转换任务的输入参数
你贴出的代码中省略了TransformInput配置块,注意要将该配置块中的ContentType设置为application/jsonlines,匹配DeepAR批量推理的输入格式要求,同时确认输入S3路径、输出S3路径填写正确。 - 重新调用
create_transform_job接口提交任务即可正常运行。
内容的提问来源于stack exchange,提问作者Samuel
相关产品推荐
相关产品推荐

