Amazon SageMaker Processing、トレーニング、または予測ジョブを実行すると、次のレスポンスでリクエストが失敗します。「HTTP Error 500: Internal Server Error (HTTP エラー 500: 内部サーバーエラー) 」または「InternalServerError: We encountered an internal error. (InternalServerError: 内部エラーが発生しました。)もう一度お試しください」
解決方法
エンドポイントへの SageMaker ジョブまたは推論リクエストが「InternalServerError」で失敗した場合は、リクエストを再試行してください。リクエストを再試行することで、一時的な問題による失敗が解消されます。
それでもエラーが発生する場合は、以下の手順に従って Amazon CloudWatch でジョブまたはエンドポイントのログを確認してください。
CloudWatch ログを確認する
SageMaker リソースに関連付けられている CloudWatch Logs を確認して、根本原因を特定します。
1. SageMaker コンソールを開きます。
2. [処理]、[トレーニング]、または [推論] で関連するリソースを選択します。
3. エンドポイント、処理、またはトレーニングジョブの名前を選択します。
4. [モニタリング] セクションで [ログの表示] を選択し、 CloudWatch コンソールを開きます。
5. CloudWatch コンソールで、ジョブまたはエンドポイントのログストリームを選択します。
6. ログストリームがない場合、またはログストリームが空の場合、リソースの実行ロールに次の権限を持つポリシーがあることを確認してください。
{
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:DescribeLogStreams",
"ecr:GetAuthorizationToken"
],
"Resource": "*"
}
7. ログを確認して、エラーメッセージを探します。
推論スクリプトへのデバッグコードの追加 (オプション)
推論スクリプトにデバッグコードを追加することで、ログレビュープロセスを簡素化できます。エンドポイントをデバッグするための推論コードの例を次に示します。このコードを使用すると、predict () 関数が正しく呼び出されたことを確認できます。このコードはデータ変数も出力しますので、エンドポイントに渡された実際の値を確認できます。この例では、MYDEBUG が CloudWatch ログストリームで検索するキーワードです。
def predict():
data = None
print("MYDEBUG: Predict function called")
# Convert from CSV to pandas
if flask.request.content_type == 'text/csv':
data = flask.request.data.decode('utf-8')
s = StringIO.StringIO(data)
data = pd.read_csv(s, header=None)
## To print the actual data set
print( "MYDEBUG: Printing data")
print( data.head(10) )
「InternalServerError」のその他の一般的な原因のトラブルシューティング
リソースの使用状況
インスタンス上のジョブのコンテナがインスタンスのリソースを使い果たした場合、SageMaker ジョブは「InternalServerError」で失敗することがあります。リソースの使用状況を確認するには、CloudWatch でインスタンスの CPUUtilization、MemoryUtilization、および DiskUtilization のメトリクスを確認します。
インスタンスメトリクスを確認するには、次の手順に従います。
1. SageMaker コンソールを開きます。
2. [処理/トレーニングジョブ] セクションで、[処理/トレーニング] を選択します。
3. ジョブ名を選択します。
4. [モニタリング] セクションで [インスタンスメトリクスを表示] を選択し、 CloudWatch コンソールを開きます。ジョブが大量のリソースを使用している場合は、より大きなインスタンスタイプに切り替えるか、既存のインスタンスにより大きなストレージボリュームをアタッチします。
SageMaker 実行ロールに EC2 権限がありません
Amazon Elastic Compute Cloud (Amazon EC2) のアクセス権限が適切に設定されていない場合、Amazon SageMaker 実行ロールに「InternalServerError」が表示されることがあります。SageMaker ジョブで VpcConfig オブジェクトを指定するときは、ジョブの SageMaker 実行ロールに次の権限を含むポリシーがあることを確認してください。
{
"Effect": "Allow",
"Action": [
"ec2:CreateNetworkInterface",
"ec2:CreateNetworkInterfacePermission",
"ec2:DeleteNetworkInterface",
"ec2:DeleteNetworkInterfacePermission",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeVpcs",
"ec2:DescribeDhcpOptions",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups"
]
}
詳細については、Amazon SageMaker ロールをご参照ください。
関連情報
ログ記録とモニタリング
CreateProcessingJob API: 実行ロールの権限
SageMaker ジョブとエンドポイントメトリクス
VPC 内の SageMaker Studio ノートブックを外部リソースに接続