SageMakerでモデルをデプロイして、エンドポイントをAPIで呼び出したところ、レスポンスに"code":424,"message":"Batch inference failed"
が返されました。この事象に対する対応方法を紹介します。
目次
事象
SageMakerでモデルをデプロイして、エンドポイントをAPIで呼び出す以下のコードを実行しました。
import boto3
import json
client = boto3.client('sagemaker-runtime')
endpoint_name = "my-endpoint-name"
content_type = "text/plain"
accept = "text/plain"
payload = {
"inputs": "some prompt",
"parameters": {
"max_new_tokens": 20
}
}
response = client.invoke_endpoint(
EndpointName=endpoint_name,
ContentType=content_type,
Accept=accept,
Body=json.dumps(payload).encode('utf-8')
)
print(response['Body'].read())
出力された結果は以下の通りです。
{
"code": 424,
"message": "Batch inference failed",
"properties": {},
"content": {
"keys": [],
"values": []
},
"cancelled": false
}
正しくエンドポイントを呼び出せているようですが、このメッセージでは原因が全然分かりませんでした。
原因
ContentTypeとAcceptの指定が誤っていました。入力も出力もjsonなので application/json
としないといけないところを text/plain
としていました。単純なミスですが、エラーメッセージがシンプル過ぎて情報が少なく解決するのに時間がかかってしまいました。
まとめ
“code”:424,”message”:”Batch inference failed”の対処法を紹介しました。単純ミスゆえに解決策を見つけるのが難しいエラーでした。今回私はjsonでしたが、csvでも同様の事が起きるようです。エラーコード424が返ってきたらエンドポイントが求める入力と返す出力の形式が合っているかを確認するようにしましょう。
コメント