このトピックでは、オンライン予測に関するよくある質問に対する回答を提供します。
サービスが長期間待機状態のままである場合はどうすればよいですか?
Elastic Algorithm service (EAS) でサービスをデプロイすると、サービスのステータスが [待機中] に変わり、サービスはリソーススケジューリングとサービスインスタンスの起動を待機します。 すべてのサービスインスタンスの起動後、サービスのステータスは [実行中] に変わります。 サービスが長期間待機状態のままである場合は、[サービスの詳細] ページに移動し、[インスタンス] タブをクリックして、サービスインスタンスのステータスに基づいて原因を特定できます。 ほとんどの場合、この問題は次の状況で発生します。
リソース不足: [インスタンス] タブで、すべてのサービスインスタンスまたは一部のサービスインスタンスが [保留中] 状態になります。
専用リソースグループに十分なアイドルリソースがないため、リソーススケジューリングが失敗します。 以下の図は一例です。
このシナリオでは、専用リソースグループのノードが、CPU、メモリ、GPUリソースなどの十分なアイドルリソースを提供できるかどうかを確認します。 サービスインスタンスに3 vCPUと4 GBのメモリが必要な場合、リソースグループには、必要なアイドルリソースを提供するノードが1つ以上必要です。
ピーク時のシステム障害を回避するために、ノードはシステムコンポーネント用に少なくとも1つのvCPUを予約する必要があります。 したがって、スケジュール可能なvCoreの総数から1つのvCPUを減らす必要があります。
次の図は、専用リソースグループ内のノードを示しています。 リソースグループの詳細を表示する方法の詳細については、「専用リソースグループの管理」をご参照ください。
サービスインスタンスがヘルスチェックを完了できません: サービスインスタンスのステータスは実行中ですが、コンテナーのステータスは [0/1] または [1/2] です。
スラッシュ (/) の左の数字は、起動したコンテナの数を示します。 スラッシュ (/) の右側の数字は、コンテナーの総数を示します。 カスタムイメージからサービスをデプロイすると、サイドカーコンテナーが各サービスインスタンスに自動的に挿入され、サービスのトラフィックが制御および監視されます。 サイドカーコンテナに注意を払う必要はありません。 コンソールに表示されるコンテナーの総数は2です。これは、カスタムイメージとサイドカーコンテナーから作成されたコンテナーを示します。 サービスインスタンスは、両方のコンテナーの準備ができている場合にのみ起動し、トラフィックの受信を開始します。
サービスのステータスがFailedの場合はどうすればよいですか。
次の状況では、サービスはFailed状態のままです。
サービスのデプロイフェーズ: サービスのデプロイ時に指定したリソース (モデルパスなど) が存在しない場合、サービスのステータス情報にエラーが表示されます。 ほとんどの場合、エラーに基づいて障害の原因を特定できます。
サービスの起動フェーズ: サービスがデプロイされ、リソースがサービスにスケジュールされると、サービスの起動に失敗します。 このシナリオでは、次のステータス情報が表示されます。
インスタンス <network-test-5ff76448fd-h9dsn> が正常でない: インスタンスがクラッシュしました。インスタンスログを確認してください。
この情報は、サービスインスタンスの起動に失敗したことを示します。 このシナリオでは、サービス詳細ページの [インスタンス] タブでインスタンスのステータスを確認して、障害の原因を特定する必要があります。 次の状況では、サービスインスタンスの起動に失敗します。
サービスインスタンスは、メモリ不足 (OOM) エラーのため、起動プロセス中にシステムによって終了します。 ほとんどの場合、この問題を解決するためにサービスに割り当てられるメモリを増やすことができます。 次の図は、インスタンスのステータスを示しています。
サービスインスタンスの起動段階でコードクラッシュが発生し、サービスインスタンスの [Last Status] 列にエラー (エラーコード) が表示されます。 このシナリオでは、[インスタンス] タブのサービスインスタンスの [操作] 列で [ログ] をクリックして、障害の原因を特定する必要があります。 次の図は、インスタンスのステータスを示しています。
サービスインスタンスがイメージのプルに失敗し、インスタンスステータスが保留中です。 サービスインスタンスの [最終終了の理由] 列にImagePullBackOffが表示されます。
この問題は通常、カスタムイメージを使用してサービスをデプロイし、カスタムイメージのプルに失敗した場合に発生します。 この問題を解決するには、次の項目を確認します。
イメージアドレスが有効かどうかを確認します。 デフォルトでは、EASはインターネットに接続されていません。 したがって、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専用リソースグループのネットワーク設定: Configure networking for a resource group
EASパブリックリソースグループのネットワーク設定: Configure networking for a resource group
認証情報が有効かどうかを確認してください。 コンソールでEASに権限を付与すると、EASはパスワードなしでContainer Registryインスタンスからイメージをプルできます。 Container Registry Personal Editionインスタンスからイメージをプルするには、イメージのアドレスを入力します。 Container Registry Enterprise Editionインスタンスからイメージをプルするには、サービス構成で "cloud.doc ker_registry.instance_id": "cr_xxx" フィールドを指定します。 このフィールドには、イメージをプルするContainer Registry Enterprise EditionインスタンスのIDを指定します。 サードパーティのイメージリポジトリからイメージを取得する場合は、dockerAuthフィールドを指定して、イメージリポジトリのユーザー名とパスワードを設定します。
EASで展開されるサービスはどのようにインターネットにアクセスしますか?
デフォルトでは、EASにデプロイされたサービスはインターネットにアクセスできません。 インターネットにアクセスする場合は、サービスがデプロイされているVPCをインターネットに接続する必要があります。 直接接続を作成する前に、VPCにNATゲートウェイがデプロイされていることを確認してください。 NATゲートウェイが存在しない場合、VPCのNATゲートウェイを作成します。 EASをインターネットに接続するための直接接続を作成するには、次のトピックを参照してください。
EAS専用リソースグループのネットワーク設定: Configure networking for a resource group
EASパブリックリソースグループのネットワーク設定: Configure networking for a resource group
VPC経由とVPC直接接続経由でのサービスの呼び出しの違いは何ですか?
VPC経由でサービスを呼び出す: VPC経由でサービスを呼び出すには、内部対応のServer Load Balancer (SLB) インスタンスとNATゲートウェイが使用されます。 SLBインスタンスはレイヤー4でリクエストを転送するために使用され、NATゲートウェイはレイヤー7でリクエストを転送するために使用されます。 ピーク時には、トラフィック転送とNATゲートウェイの帯域幅の制限により、サービスのパフォーマンスが低下することがあります。
VPCダイレクト接続: 上記のパフォーマンスと帯域幅の制限の問題を解決するために、EASでは追加料金なしでVPCダイレクト接続機能を使用できます。 VPC直接接続機能を有効にすると、クライアントのVPCとEASサービスがデプロイされているVPCとの間に直接接続が確立されます。 次に、EASが提供するサービス検出機能を使用してサービスエンドポイントを取得し、クライアントのソフトウェアロードバランサーを使用してサービスへの要求を開始できます。 このソリューションでは、EAS SDKを使用してサービスにアクセスし、endpoint_typeをDIRECTに設定する必要があります。
たとえば、SDK For Pythonで説明されているシナリオでは、次のコードブロックをクライアントコードに追加して、接続モードを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) # Direct link client.init()
サービスのログに「 [WARN] connection is closed: End of file」または「Write an Invalid stream: End of file」エラーが含まれている場合はどうすればよいですか?
クライアントとサーバー間の接続が中断されます。 サーバがクライアントからの要求に応答すると、サーバは、クライアントへの接続が中断されたことを識別します。 次に、サーバは、警告イベントを生成する。 次の状況で接続が中断されます。
サーバーのタイムアウト: サービスがプロセッサを使用してデプロイされている場合、サーバーのデフォルトのタイムアウト時間は5秒です。 サービスの
metadata.rpc.keepalive
パラメーターを設定して、サーバーのタイムアウト期間を変更できます。 タイムアウト期間が終了すると、サーバーは自動的に接続を閉じます。 このシナリオでは、サーバーのモニタリングデータに408のステータスコードを見つけることができます。クライアントがタイムアウト: クライアントのタイムアウト期間は、クライアントのコードで指定されています。 タイムアウト期間が終了する前にサーバーが応答を返さない場合、HTTPクライアントは自動的に接続を閉じます。 このシナリオでは、サーバーのモニタリングデータに499のステータスコードを見つけることができます。
リクエストのステータスコードの詳細については、「付録: ステータスコード」をご参照ください。
TensorFlowまたはPyTorchプロセッサを使用してデプロイされたサービスの呼び出しまたはデバッグに失敗した場合はどうすればよいですか?
サービスのパフォーマンスを確保するために、TensorFlowまたはPyTorchプロセッサによって送信されるリクエストの本文はprotobuf形式です。 これは、要求が暗号要求であることを意味します。 ただし、オンラインサービスのデバッグはプレーンテキスト要求のみをサポートします。 コンソールでオンラインサービスのデバッグを実行できません。 オンラインサービスデバッグを実行するには、EAS SDKを使用してリクエストを送信する必要があります。 さまざまなプログラミング言語のEAS SDKの詳細については、「SDK」をご参照ください。
EASのサービスにリンクされたロールがRAMユーザーに対して自動的に作成または削除されないのはなぜですか?
AliyunServiceRoleForPaiEasロールは、必要な権限がある場合にのみ自動的に作成または削除できます。 したがって、Resource Access Management (RAM) ユーザーに対してAliyunServiceRoleForPaiEasロールを自動的に作成または削除することはできません。 システムでロールを自動的に作成および削除する場合は、次のカスタムポリシーをRAMユーザーにアタッチします。
スクリプトモードで次の内容に基づいてカスタムポリシーを作成します。 詳細については、「カスタムポリシーの作成」をご参照ください。
{ "Statement": [ { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "eas.pai.aliyuncs.com" } } } ], "Version": "1" }
カスタムポリシーをRAMユーザーにアタッチします。 詳細については、「RAMユーザーへの権限の付与」をご参照ください。
サブスクリプション課金方法を使用する専用リソースグループ内のノードを削除するにはどうすればよいですか。
サブスクリプションの有効期限が切れる前にノードのサブスクリプションをキャンセルすることはできません。 サブスクリプションノードを削除する場合は、顧客ビジネスマネージャーに連絡してください。
cURLコマンドを使用してEASオンラインサービスを呼び出すにはどうすればよいですか?
EASでオンラインサービスをデプロイした後、cURLコマンドを実行して、パブリックエンドポイントまたはVPCエンドポイントを介してサービスを呼び出すことができます。 以下の手順を実行します。
サービスエンドポイントとトークンを取得します。
[EAS-Online Model Services] ページで、サービス名をクリックして [サービスの詳細] ページに移動します。
[基本情報] セクションで、[エンドポイント情報の表示] をクリックします。
[呼び出し方法] ダイアログボックスの [パブリックエンドポイント] または [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: サービス要求データ。