Amazon SageMaker で InternalServerError レスポンスのトラブルシューティングを行うにはどうすればよいですか?

最終更新日: 2020 年 9 月 24 日

Amazon SageMaker でトレーニングジョブを実行するか、予測を行うと、次のレスポンスでリクエストが失敗します。「HTTP Error 500: Internal Server Error (HTTP エラー 500: 内部サーバーエラー) 」または「InternalServerError: We encountered an internal error. (InternalServerError: 内部エラーが発生しました。)もう一度お試しください。」 エラーの根本原因を見つけるにはどうすればよいですか?

解決方法

トレーニングジョブ

リクエストを再試行します。それでも TrainingJobStatusFailed になる場合は、FailureReason を確認して、失敗の原因を特定します。エラーの詳細を確認するには、次のセクションで Amazon CloudWatch Logs を確認してください。

推論リクエスト

エンドポイントに関連付けられている CloudWatch Logs を確認して、根本原因を特定します。

1.    SageMaker コンソールを開きます。

2.    エラーが発生した場所に応じて、[トレーニングジョブ] または [ エンドポイント] を選択します。

3.    トレーニングジョブまたはエンドポイントの名前を選択します。

4.    [モニター] セクションで [ログの表示] を選択し、 CloudWatch コンソールを開きます。

5.    CloudWatch コンソールで、トレーニングジョブまたはエンドポイントのログストリームを選択します。

トレーニングジョブの場合、ログストリームは /aws/sagemaker/TrainingJobs CloudWatch ロググループにあります。ストリーム名は、トレーニングジョブ名 (例: imageclassfi-job-2020-04-05/xxxxx) から始まります。

エンドポイントの場合、ログストリームは /aws/sagemaker/Endpoints/エンドポイント名 CloudWatch ロググループにあります。ストリーム名は、バリアント名 (例: AllTraffic/i-xxxxxxx) で始まります。

6.    ログをレビューして、詳細なエラーメッセージを探します。トレーニングジョブまたは推論スクリプトにデバッグコードを追加して、このプロセスを簡素化できます。たとえば、ジョブのステータスやデータセットの実際の値を出力します。次に CloudWatch Logs で、出力されたメッセージを探します。

エンドポイントをデバッグするための推論コードの例を次に示します。このコードを使用すると、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) )

7.    ログの情報を使用して、エラーの根本原因を特定します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?