すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:付録: ステータスコード

最終更新日:Jul 22, 2024

このトピックでは、Machine Learning Platform for AI (PAI) によって返されるステータスコードについて説明します。

ステータスコード

説明

200

リクエストが成功しました。

400

プロセッサがリクエストを処理できません。

原因:

  • リクエスト形式が無効です。 これは、TensorFlowやPyTorchなどの一般的なプロセッサで発生します。

  • リクエストに例外が発生します。 これは、カスタムプロセッサで発生し得る。

    説明

    カスタムプロセッサのステータスコードをカスタマイズすることもできます。

404

サーバーが要求されたリソースを見つけることができません。

原因: サービス名またはサービス要求が無効なエンドポイントを使用しています。

401

サービスの認証に失敗しました。

原因: サービスにアクセスするためのトークンが指定されていないか、無効です。

ソリューション

  1. サービスのデプロイ時に自動生成または手動で指定されたトークンを使用します。 サービスがデプロイされると、サービスへのアクセスに使用できるトークンが自動的に生成されます。 サービスを初めてデプロイするときに手動でトークンを指定するには、サービス構成ファイルにtokenパラメーターを追加して、固定トークン値を指定します。 このようにして、サービスを更新してもトークン値は変わりません。

  2. コンソールでトークン値を取得します。 PAIコンソールにログインし、管理するワークスペースを見つけて、ワークスペースの詳細ページに移動します。 左側のナビゲーションウィンドウで、[モデルサービング (EAS)] をクリックします。 [Elastic Algorithm Service] ページで、管理するサービスを見つけ、[Operating] 列の [Debug] をクリックして、サービスのトークン値を取得します。 eascmd desc service_nameコマンドを実行してトークン値を取得することもできます。

  3. 取得したトークン値を使用してサービスにアクセスします。

    • curlコマンドを実行してサービスをテストするときに、HTTPヘッダーを使用してトークン値をリクエストに追加します。 サンプルコマンド: curl -H 'Authorization: NWMyN2UzNjBiZmI2YT *** 'http:// xxx.cn-shanghai.aliyuncs.com/api/predict/echo

    • SDKを使用してサービスにアクセスするときに、SetToken() 関数を呼び出します。 詳細については、「SDK For Java」をご参照ください。

450

ヘッダーフィールドが大きすぎるため、リクエストは拒否されます。

原因: リクエストのヘッダーフィールドが大きすぎます。 インスタンスがリクエストを受信すると、リクエストをキューに入れます。 インスタンスワーカーが使用可能になると、リクエストが処理されます。 デフォルトでは、各インスタンスに最大5つのワーカーを含めることができます。 この制限は、createコマンドで使用するJSONファイルのmetadata.rpc.worker_threadsパラメーターを使用して変更できます。 createコマンドの詳細については、「サービスの作成」をご参照ください。 ワーカーが長時間占有されている場合、キュー内のリクエストが山積みになり始めます。 キューが上限に達すると、新しい要求は拒否され、ステータスコード450が返されます。 これにより、要求を管理可能な数に保ち、暴走する応答時間を回避することにより、サービスの可用性が保証されます。 デフォルトでは、各キューは最大64個のリクエストを保持できます。 この制限は、createコマンドで使用するJSONファイルのmetadata.rpc.max_queue_sizeパラメーターを使用して変更できます。 createコマンドの詳細については、「サービスの作成」をご参照ください。

説明

キューに課される上限は、トラフィックのスパイクによって引き起こされるカスケード障害を防ぐための抑制手段としてある程度機能します。

ソリューション

  • サービスの中断を防ぐために、アイドル状態のインスタンスにリクエストを再スケジュールします。 このソリューションは、少数のリクエストに対してステータスコード450が返されるシナリオに適用できます。 多数のリクエストに対してこのメソッドを使用すると、スロットリング対策がその目的を果たさず、カスケード障害につながる可能性があります。

  • プロセッサのデバッグコード。 コードエラーによりプロセッサで例外が発生した場合、デッドロック状態によりインスタンスのすべてのワーカーが使用できなくなり、すべてのリクエストに対してステータスコード450が返されます。

408

リクエストがタイムアウトします。

原因: 指定されたタイムアウト時間内にリクエストの処理に失敗しました。 すべての要求に同じタイムアウト期間が与えられます。 要求が指定された時間内に処理されない場合、要求はタイムアウトし、TCP接続は閉じられ、ステータスコード408が返されます。 デフォルトでは、タイムアウト期間は5秒に設定されています。 この制限は、createコマンドで使用するJSONファイルのmetadata.rpc.keepaliveパラメーターを使用して変更できます。 createコマンドの詳細については、「サービスの作成」をご参照ください。

説明

要求処理時間は、プロセッサがコンピューティング動作の実行に費やす時間、システムがネットワークパケットの受信に費やす時間、および要求がキューイングに費やす時間を含む。

499

クライアントが接続を閉じます。

原因: クライアントは接続を閉じ、特定の要求の処理を停止させます。 クライアントが接続を閉じると、このステータスコードはサーバーにのみ記録され、クライアントには返されません。 例えば、クライアントではHTTPレスポンスを受信するためのタイムアウト時間が30ミリ秒に設定され、サーバではHTTPリクエストを処理するためのタイムアウト時間が50ミリ秒に設定されているとする。 クライアントがリクエストを送信してから30ミリ秒後に応答を受信しない場合、接続は閉じられます。 この場合、ステータスコード499がサーバに記録される。

429

多数のリクエストが送信されるため、リクエストはスロットリングをトリガーします。

原因: Elastic Algorithm Service (EAS) は、QPSベースのスロットリング機能を提供します。 この機能を有効にすると、サーバーで同時に処理できるリクエストの数が上限を超えると、それ以降のリクエストは拒否され、ステータスコード429が返されます。 createコマンドで使用するJSONファイルのmetadata.rpc.rate_limitパラメーターを使用して、機能を有効にできます。 createコマンドの詳細については、「サービスの作成」をご参照ください。

503

サービスは利用できません。

原因: サーバーがリクエストを処理する準備ができていません。 ゲートウェイを使用してサービスにアクセスし、すべてのバックエンドサービスインスタンスが準備できていない場合、ゲートウェイからステータスコード503が返されます。

また、次の一般的なシナリオが発生する可能性があります。サービスがデプロイされ、[実行中] 状態になり、サービスのすべてのインスタンスが準備完了です。 ただし、リクエストが開始された後、ステータスコード503が返されます。 ほとんどの場合、その理由は、要求が異常であり、コードのバグを引き起こすためです。 このバグにより、バックエンドサービスインスタンスがクラッシュし、リクエストを処理できなくなります。 この場合、ゲートウェイはステータスコード503をクライアントに返します。