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

Sagemaker PyTorch端点传入输入数据报utf-8解码错误如何解决

问题根因

你遇到的解码错误来自Sagemaker推理工具包的默认输入处理逻辑:当你指定ContentType为application/json时,服务端会默认尝试将传入的原始字节按UTF-8解码为字符串后再解析JSON。如果你直接传入未做编码转换的图片二进制字节,或者JSON字符串编码后又做了额外的二进制处理,就会出现字节不符合UTF-8编码规则的报错。


方案1:直接传输图片二进制(推荐)

这种方式不需要额外编解码,性能更好。

客户端调用代码示例

# 读取本地图片二进制
with open("test.jpg", "rb") as f:
    payload = f.read()
# 调用时指定Content-Type为对应图片格式
response = predictor.predict(
    payload,
    initial_args={'ContentType': 'image/jpeg'}
)

服务端适配(predict_sku110k.py)

你需要在入口文件中自定义input_fn方法处理图片输入:

def input_fn(request_body, request_content_type):
    if request_content_type == 'image/jpeg':
        # request_body就是图片二进制,直接处理为模型需要的输入格式即可
        # 示例:用PIL读取图片
        from PIL import Image
        import io
        img = Image.open(io.BytesIO(request_body))
        # 后续做Resize、转Tensor等预处理
        return processed_img
    # 其他content type的处理逻辑
    raise ValueError(f"不支持的Content Type: {request_content_type}")

方案2:图片转Base64后通过JSON传输

如果你需要同时传图片和其他附加参数,可以用这种方式。

客户端调用代码示例

import json
import base64

# 读取图片转base64字符串
with open("test.jpg", "rb") as f:
    img_b64 = base64.b64encode(f.read()).decode("utf-8")
# 构造JSON payload
payload = json.dumps({
    "image": img_b64,
    # 可以加其他自定义参数
    "threshold": 0.5
})
# 调用时用application/json
response = predictor.predict(
    payload,
    initial_args={'ContentType': 'application/json'}
)

服务端适配(predict_sku110k.py)

自定义input_fn处理JSON中的base64图片:

import json
import base64
import io
from PIL import Image

def input_fn(request_body, request_content_type):
    if request_content_type == 'application/json':
        input_data = json.loads(request_body)
        # 解码base64图片
        img_bytes = base64.b64decode(input_data["image"])
        img = Image.open(io.BytesIO(img_bytes))
        # 后续预处理
        return processed_img
    raise ValueError(f"不支持的Content Type: {request_content_type}")

额外注意点

  • 不要对已经是字符串类型的JSON payload再调用encode('utf-8'),Sagemaker的Python SDK会自动完成字符串到字节的编码转换,重复编码会导致服务端接收到的字节流不符合预期。
  • 如果没有自定义input_fn,服务端会走默认的输入处理逻辑,无法直接适配图片输入,必须显式实现该方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:07