You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon SageMaker PipelineModel批量转换报错:application/json非可接受ContentType

问题分析与解决方案

原因确认

没错,这个错误就是因为第一个SKLearn预处理容器输出的中间数据是application/json格式,而第二个XGBoost模型容器只支持错误提示里列出的格式(比如text/csv、libsvm等),导致XGB容器无法识别输入格式而报错。

解决办法

1. 修改SKLearn预处理脚本,强制输出CSV格式

在你的SKLearn预处理脚本里,调整transform_fn或者predict_fn函数,把处理后的数据输出为CSV格式,而非默认的JSON:

import pandas as pd

def transform_fn(model, request_body, request_content_type, response_content_type):
    # 保留原有预处理逻辑,比如解析输入、用模型处理数据
    input_data = pd.read_csv(request_body)
    processed_data = model.transform(input_data)
    
    # 把处理好的数据转成CSV字符串,去掉索引和表头
    csv_result = pd.DataFrame(processed_data).to_csv(index=False, header=False)
    
    # 返回CSV内容和对应的content type
    return csv_result, "text/csv"

2. 通过环境变量配置容器的输入输出格式

创建模型时给两个容器分别设置环境变量,让SKLearn输出CSV,XGB接收CSV:

# 创建SKLearn模型时指定输出格式为CSV
scikit_learn_inferencee_model = sklearn_preprocessor.create_model(
    env={"SAGEMAKER_INFERENCE_OUTPUT_FORMAT": "text/csv"}
)

# 创建XGB模型时指定输入格式为CSV
xgb = Model(
    image_uri=image_uri,
    model_data=mod.model_data,
    role=role,
    env={"SAGEMAKER_INFERENCE_INPUT_FORMAT": "text/csv"}
)

# 重新构建PipelineModel
sm_model = PipelineModel(
    name=model_name, role=role, models=[scikit_learn_inferencee_model, xgb]
)

3. 调整批量转换的全局环境变量

在创建transformer时,添加全局环境变量统一指定输出格式,确保容器间传递的格式匹配:

final = sm_model.transformer(
    instance_count=1, 
    instance_type="ml.m5.2xlarge", 
    assemble_with="Line", 
    accept="text/csv",
    strategy='SingleRecord',
    env={"SAGEMAKER_INFERENCE_OUTPUT_FORMAT": "text/csv"}
)

内容的提问来源于stack exchange,提问作者mai nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:05:23