AWS SageMaker Autopilot生成Endpoint调用异常问题咨询
咱们先逐个拆解你遇到的问题,然后给出完整的正确调用方法:
错误1:415 Unsupported Content Type
An error occurred (ModelError) when calling the InvokeEndpoint operation: Received client error (415) from container-1 with message "'application/json' is an unsupported content type."
这个问题的核心是你没指定模型期望的Content-Type。AWS SageMaker Autopilot训练的文本类模型,默认不接受application/json格式的输入,通常期望的是text/plain(单条文本输入)或者text/csv(多特征/批量输入)。
解决方案:
调用命令时添加--content-type参数,指定模型支持的类型。比如如果是单条文本输入,用:
--content-type 'text/plain'
错误2:Invalid base64
Invalid base64: "Im happy!"
这个问题很明确:SageMaker Runtime的invoke-endpoint命令要求--body参数必须是base64编码后的字符串,你直接传入了原始文本,所以触发了编码错误。
解决方案:
先把你的输入文本转成base64编码。在Linux/macOS终端可以用这个命令生成编码结果:
echo -n "I'm happy!" | base64
执行后会得到类似SSdtIGhhcHB5IQ==的字符串,这才是你要传给--body的值。
完整的正确调用命令示例
把上面两个修正点结合起来,最终的调用命令应该是这样的:
aws sagemaker-runtime invoke-endpoint \ --endpoint-name autopilottest \ --content-type 'text/plain' \ --body 'SSdtIGhhcHB5IQ==' \ output.txt
output.txt是存放模型预测结果的文件,你可以换成任意文件名。- 如果你的模型需要CSV格式输入(比如包含多个特征列),把
--content-type改成text/csv,并将输入整理成CSV格式后再base64编码(比如"feature1,feature2,feature3"转成base64)。
额外验证小技巧
你可以查看Autopilot训练作业的「模型推理规范」,里面会明确标注模型支持的输入Content-Type和数据格式,确保和你传入的参数匹配。
内容的提问来源于stack exchange,提问作者DeadSec

