このトピックでは、オンライン予測に関するよくある質問への回答を提供します。
サービスデプロイ
サービスが長時間「待機中」状態のままになる場合の対処方法
サービスをデプロイした後、そのステータスは [待機中] に変わり、サービスはリソースのスケジューリングとインスタンスの起動を待機します。すべてのインスタンスが起動すると、サービスのステータスは [実行中] に変わります。サービスが長時間 [待機中] ステータスのままになっている場合は、サービス名をクリックして [概要] ページに移動します。[サービスインスタンス] リストで、インスタンスステータスに基づいて原因を特定します。ほとんどの場合、問題は次の状況で発生します。
リソース不足: インスタンスリストで、一部またはすべてのインスタンスが「保留中」状態になっています。
専用リソースグループに十分なアイドルリソースがないため、リソースのスケジューリングに失敗します。例:
専用リソースグループ内のノードが、CPU、メモリ、GPU リソースを含む、十分なアイドルリソースを提供できるかどうかを確認します。たとえば、サービスインスタンスに 3 vCPU と 4 GB のメモリが必要な場合、リソースグループには、必要なアイドルリソースを提供するノードが少なくとも 1 つ必要です。
重要ピーク時にシステム障害を回避するために、ノードはシステムコンポーネント用に少なくとも 1 vCPU を予約する必要があります。したがって、スケジュール可能な vCPU は合計数より 1 コア少なくなります。
次の図は、専用リソースグループ内のノードを示しています。リソースグループの詳細の表示方法については、「EAS リソースグループの操作」をご参照ください。
ヘルスチェック失敗: サービスインスタンスのステータスは「実行中」ですが、コンテナのステータスは [0/1] または [1/2] です。
スラッシュ (/) の左側の数字は、起動したコンテナの数を示します。右側の数字は、コンテナの総数を示します。カスタムイメージを使用してサービスをデプロイすると、トラフィックを制御および監視するために、各インスタンスにサイドカーコンテナが自動的に挿入されます。サイドカーコンテナに注意を払う必要はありません。コンソールに表示されるコンテナの総数は 2 で、カスタムイメージからのコンテナとサイドカーコンテナを示します。サービスインスタンスは、両方のコンテナが準備完了になった場合にのみ起動し、トラフィックの受信を開始します。
サービスのステータスが「失敗」の場合の対処方法
サービスは、次の状況で失敗状態のままになります。
サービスデプロイ中: サービスのデプロイ時に指定したモデルパスなどのリソースが存在しない場合、サービスのステータス情報にエラーが表示されます。ほとんどの場合、エラーメッセージに基づいて障害の原因を特定できます。
サービス起動中: サービスがデプロイされ、リソースがサービスにスケジュールされた後、サービスが起動に失敗します。このシナリオでは、次のステータス情報が表示されます:
Instance <network-test-5ff76448fd-h9dsn> not healthy: Instance crashed, please inspect instance log.
インスタンスWordPress の基本的な知識。このシナリオでは、 ページの リストでインスタンスステータスを確認して、障害の原因を特定する必要があります。サービスインスタンスは、次の状況で起動に失敗します。
起動プロセス中にメモリ不足 (OOM) エラーが発生したため、サービスインスタンスがシステムによって終了されました。ほとんどの場合、サービスに割り当てられたメモリを増やすことで、この問題を解決できます。例:
起動フェーズでサービスインスタンスでコードクラッシュが発生し、サービスインスタンスの [最終ステータス] 列に
Error(error code)
と表示されます。このシナリオでは、[アクション] 列の [ログ] をクリックして、障害の原因を特定します。例:サービスインスタンスがイメージをプルできず、[インスタンスステータス] が「保留中」です。[最後の終了の理由] は
ImagePullBackOff
です。この問題は通常、カスタムイメージを使用してサービスをデプロイし、カスタムイメージのプルに失敗した場合に発生します。この問題を解決するには、次の項目を確認してください。
イメージアドレスが有効かどうかを確認します。デフォルトでは、EAS はインターネットに接続されておらず、インターネット経由でイメージをプルすることはできません。イメージが Container Registry Personal Edition インスタンスに保存されている場合は、Container Registry Personal Edition インスタンスの VPC 経由でイメージをプルします。インターネット経由でイメージをプルするには、「EAS にデプロイされたサービスはどのようにインターネットにアクセスしますか?」をご参照ください。
イメージが Container Registry Enterprise Edition インスタンスに保存されている場合は、Container Registry Enterprise Edition インスタンスの VPC 構成が EAS のネットワーク構成と同じであることを確認してください。EAS と Container Registry のネットワークを構成するには、次のトピックを参照してください。
Container Registry Enterprise Edition インスタンスの VPC 構成: 「VPC 経由のアクセスを構成する」。
EAS 専用リソースグループのネットワーク構成: 「リソースグループのネットワークを構成する」。
EAS パブリックリソースグループのネットワーク構成: 「リソースグループのネットワークを構成する」。
認証情報が有効かどうかを確認します。コンソールで EAS に権限を付与すると、EAS はパスワードなしで Container Registry インスタンスからイメージをプルできます。Container Registry Personal Edition インスタンスからイメージをプルするには、イメージのアドレスを入力します。Container Registry Enterprise Edition インスタンスからイメージをプルするには、サービス構成で
"cloud.docker_registry.instance_id": "cr_xxx"
フィールドを指定します。このフィールドは、イメージをプルする Container Registry Enterprise Edition インスタンスの ID を指定します。サードパーティのイメージリポジトリからイメージをプルする場合は、dockerAuth フィールドを指定して、イメージリポジトリのユーザー名とパスワードを設定します。
EAS にデプロイされたサービスはどのようにインターネットにアクセスしますか?
デフォルトでは、EAS にデプロイされたサービスはインターネットにアクセスできません。インターネットにアクセスするには、サービスがデプロイされている VPC に NAT ゲートウェイを作成する ことで、インターネットに接続します。次のトピックを参照してください。
専用リソースグループの場合: 「リソースグループのネットワークを構成する」。
パブリックリソースグループの場合: 「リソースグループのネットワークを構成する」。
EAS サービスのデプロイ時に OSS バケットを選択できないのはなぜですか?
EAS サービスのデプロイ時に、マウントによってモデルとコードを構成できます。OSS バケットまたは NAS ファイルシステムが EAS サービスと同じリージョンにあることを確認してください。そうでない場合、OSS バケットまたは NAS ファイルシステムを選択できません。
EAS サービスのデプロイ時に、1 コア 2 GB メモリのインスタンスタイプを選択できないのはなぜですか?
使用中の潜在的な問題を回避するため、1 コア 2 GB メモリのインスタンスタイプは販売から削除されました。これは、EAS が各ノードに特定のシステムコンポーネントをデプロイするため、一部のリソースが占有されるためです。ノードの仕様が小さすぎると、システムコンポーネントのリソース使用率が高くなりすぎて、使用可能なリソースの割合が少なくなります。
EAS に最大でいくつのサービスをデプロイできますか?
デプロイできる EAS サービスの数は、残りのリソースに基づいて決定されます。残りのリソースは、[リソースグループ] タブの [ノード] リストで表示できます。詳細については、「EAS リソースグループの操作」をご参照ください。
タスクが vCPU コア数に基づいて割り当てられる場合、デプロイされたインスタンス数の上限は (vCPU コア数 - 1) / インスタンスあたりに使用されるコア数です。
サービス呼び出し
HTTP アクセスをブロックし、HTTPS アクセスのみを許可する方法
共有ゲートウェイは HTTP アクセスをブロックできません。専用ゲートウェイの場合は、[HTTPS リダイレクト] をオンにすると、HTTP リクエストが HTTPS プロトコルに自動的にリダイレクトされます。
オンラインデバッグ中に「正常なアップストリームなし」というエラーメッセージが返される場合の対処方法
オンラインでサービスをデバッグすると、「正常なアップストリームなし」というエラーメッセージが返されます。ステータスコードは 503 です。
原因: vCPU、メモリ、GPU メモリなどのリソースが過剰に使用されています。その結果、使用可能なリソースがインスタンス操作をサポートするのに不十分です。
解決策:
インスタンスがパブリックリソースを使用している場合は、オフピーク時に再試行するか、別のインスタンスタイプを使用するか、別のリージョンに切り替えることができます。
インスタンスが専用リソース (EAS リソースグループ) を使用している場合は、リソースグループがインスタンス用に十分な vCPU、メモリ、GPU メモリを予約していることを確認してください。合計リソースの少なくとも 20% をバッファとして予約することをお勧めします。
VPC 経由のサービス呼び出しと VPC 直接接続経由のサービス呼び出しの違いは何ですか?
VPC 経由のサービス呼び出し: VPC 経由でサービスを呼び出すには、内部向け Server Load Balancer (SLB) インスタンスと NAT ゲートウェイが使用されます。SLB インスタンスはレイヤー 4 でリクエストを転送するために使用され、NAT ゲートウェイはレイヤー 7 でリクエストを転送するために使用されます。ピーク時には、トラフィックの転送と NAT ゲートウェイの帯域幅の制限 (デフォルトでは 1 Gbps) により、サービスのパフォーマンスが低下する可能性があります。
VPC 直接接続: 前述のパフォーマンスと帯域幅制限の問題を解決するために、追加料金なしで VPC 直接接続を使用できます。有効にすると、クライアントの VPC と EAS サービスがデプロイされている VPC の間に直接接続が確立されます。次に、EAS が提供するサービス検出機能を使用してサービスエンドポイントを取得し、クライアントのソフトウェアロードバランサを使用してサービスへのリクエストを開始できます。このソリューションでは、EAS SDK を使用してサービスにアクセスし、endpoint_type を DIRECT に設定する必要があります。
たとえば、「Python 用 SDK」で説明されているシナリオでは、クライアントコードに次のコードブロックを追加して、接続モードを NAT ゲートウェイから VPC 直接接続に変更できます。
client = PredictClient('http://pai-eas-vpc.cn-hangzhou.aliyuncs.com', 'mnist_saved_model_example') client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****') client.set_endpoint_type(ENDPOINT_TYPE_DIRECT) # 直接リンク client.init()
cURL コマンドを使用して EAS オンラインサービスを呼び出す方法
EAS にオンラインサービスをデプロイした後、cURL コマンドを実行して、パブリックエンドポイントまたは VPC エンドポイント経由でサービスを呼び出すことができます。次の手順を実行します。
サービスエンドポイントとトークンを取得します。
[Elastic Algorithm Service (EAS)] ページで、対象のサービスをクリックして概要ページに移動します。
[基本情報] セクションで、[エンドポイント情報を表示] をクリックします。
[呼び出し方法] で、サービスのインターネットエンドポイントと VPC エンドポイント、およびトークンを取得します。
cURL コマンドを実行してサービスを呼び出します。
$ curl <service_url> -H 'Authorization: <service_token>' -d '[{"sex":0,"cp":0,"fbs":0,"restecg":0,"exang":0,"slop":0,"thal":0,"age":0,"trestbps":0,"chol":0,"thalach":0,"oldpeak":0,"ca":0}]'
パラメータ:
<service_url>: 取得したエンドポイントに置き換えます。
<service_token>: 取得したトークンに置き換えます。
-d: サービスリクエストデータ。
サービスログに「[WARN] 接続が閉じられました: ファイルの終わり」または「無効なストリームの書き込み: ファイルの終わり」と表示される場合の対処方法
クライアントとサーバー間の接続が中断されています。サーバーがクライアントからのリクエストに応答すると、サーバーはクライアントへの接続が中断されていることを識別します。次に、サーバーは警告イベントを生成します。接続は、次の状況で中断されます。
サーバーがタイムアウトする: サービスがプロセッサを使用してデプロイされている場合、サーバーのデフォルトのタイムアウト期間は 5 秒です。サービスの
metadata.rpc.keepalive
パラメータを設定して、サーバーのタイムアウト期間を変更できます。タイムアウト期間が終了すると、サーバーは自動的に接続を閉じます。このシナリオでは、サーバーのモニタリングデータに 408 状態コードが表示されます。クライアントがタイムアウトする: クライアントのタイムアウト期間は、クライアントのコードで指定されます。タイムアウト期間が終了する前にサーバーが応答を返さない場合、HTTP クライアントは自動的に接続を閉じます。このシナリオでは、サーバーのモニタリングデータに 499 状態コードが表示されます。
リクエストステータスコードの詳細については、「付録: ステータスコード」をご参照ください。
アップストリーム接続エラーまたはヘッダー前の切断/リセット。リセットの理由: 接続終了
このエラーは通常、長い接続タイムアウトまたは不均一なインスタンス負荷が原因で発生します。サーバーの処理時間がクライアントによって設定された HTTP タイムアウトを超えると、クライアントはリクエストを破棄して接続を閉じます。この時点で、サーバーのモニタリングにはステータスコード 499 が表示されます。さらに確認するには、モニタリングメトリックを確認できます。推論に時間がかかる場合は、非同期推論サービスをデプロイする ことをお勧めします。
TensorFlow または PyTorch プロセッサを使用してデプロイされたサービスの呼び出しまたはデバッグに失敗した場合の対処方法
サービスのパフォーマンスを確保するため、TensorFlow または PyTorch プロセッサによって送信されるリクエストの本文は protobuf 形式です。これは、リクエストが暗号リクエストであることを意味します。ただし、オンラインサービスデバッグはプレーンテキストリクエストのみをサポートしています。コンソールでオンラインサービスデバッグを実行することはできません。オンラインサービスデバッグを実行するには、EAS SDK を使用してリクエストを送信する必要があります。さまざまなプログラミング言語の EAS SDK の詳細については、「SDK」をご参照ください。
サービス管理
SSH 経由で EAS インスタンスに接続できますか?
いいえ。EAS はリモート SSH アクセスをサポートしていません。コンテナにログインして EAS インスタンスをデバッグすることはできません。コマンドを実行する必要がある場合は、実行コマンドでコマンドを構成することをお勧めします。
EAS のサービスステータスは何ですか?
現在、EAS サービスは次のステータスになる可能性があります。サービスのステータスは、Elastic Algorithm Service (EAS) ページで表示できます。
作成中
待機中
停止済
失敗
更新中
停止中
ホットアップデート
起動中
削除失敗
実行中
スケーリング
保留中
削除中
完了
準備中
リソースの購入/解約/削除
専用リソースグループがスケーリングし続ける
これは通常、現在のリージョンにリソースが不足していることが原因です。
サブスクリプション課金方法を使用するインスタンスの場合、リソースが不足しているためにリソースの作成に失敗すると、システムは自動的に払い戻し注文を作成し、支払われた料金は元の支払い方法で返金されます。
サブスクリプション課金方法を使用する専用リソースグループ内のノードを削除する方法
解約 ページに移動して、サブスクリプション課金方法を使用する専用リソースグループ内のノードを解約します。
タイプ: [一部払い戻し] を選択します。
名前: [EAS 専用マシンの前払い] を選択します。
[検索] をクリックして、解約するノードを見つけます。次に、[アクション] 列の [リソースの解約] をクリックします。コンソールの指示に従って完了します。
リソースグループ内のインスタンスを解約した後、サービスインスタンスデータは保持されますか?
いいえ、サービスインスタンスデータは保持されません。
権限
RAM ユーザーに対して EAS のサービスロールが自動的に作成または削除されないのはなぜですか?
AliyunServiceRoleForPaiEas ロールは、必要な権限を持っている場合にのみ自動的に作成または削除できます。したがって、AliyunServiceRoleForPaiEas ロールは、Resource Access Management (RAM) ユーザーに対して自動的に作成または削除することはできません。システムがロールを自動的に作成および削除するようにするには、次のカスタムポリシーを RAM ユーザーにアタッチします。
スクリプトモードで次のコンテンツに基づいてカスタムポリシーを作成します。詳細については、「カスタムポリシーを作成する」をご参照ください。
{ "Statement": [ { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "eas.pai.aliyuncs.com" } } } ], "Version": "1" }
カスタムポリシーを RAM ユーザーにアタッチします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。