EAS オンライン推論サービスに関する一般的な質問 (デプロイの問題、スケーリングポリシー、トラブルシューティングの手順など) への回答を記載しています。
サービスデプロイとステータスの問題
サービスをデプロイした後、[Overview] ページの [Service instances] リストでインスタンスのステータス、ログ、イベントを表示して問題をトラブルシューティングします。
Q:サービスが長時間 Waiting 状態のままです。どうすれば修正できますか?
サービスをデプロイすると、リソースがスケジューリングされインスタンスが起動する間、[Waiting] 状態になります。すべてのインスタンスが正常に起動すると、サービスは [Running] 状態に移行します。次のシナリオでは、Waiting 状態が長引く可能性があります。
Q:サービスが Failed 状態です。どうすれば修正できますか?
サービスは次の 2 つの状況で [Failed] 状態になります。
デプロイ中:デプロイ時に指定されたリソース (モデルパスなど) が存在しない場合、サービスのステータスにエラーの理由が表示されます。通常、エラーメッセージにデプロイが失敗した理由が示されます。
-
起動中:デプロイが成功し、スケジューリングが開始された後にサービスが失敗した場合、ステータスには
Instance <network-test-5ff76448fd-h9dsn> not healthy: Instance crashed, please inspect instance log.と表示されます。このメッセージは、1 つ以上のインスタンスの起動に失敗したことを意味します。サービスの [Overview] ページの [Service instances] リストを確認して、具体的な原因を特定します。一般的な失敗の原因は次のとおりです。
インスタンスの起動中にメモリが不足し、システムによって強制終了 (OOMKilled) されました。より多くのメモリを割り当ててサービスを再デプロイしてください。インスタンスリストでは、[Last status] 列に [OOMKilled(247)] と表示され、コンテナがメモリ制限を超えたために終了したことを示します。詳細については [Restart count] と [Last exit reason] の列を確認してください。
コードエラーにより起動中にクラッシュしました。この場合、[Last status] には Error (エラーコード) が表示されます。インスタンスの [Actions] 列にある [Log] をクリックしてサービスログを確認し、起動失敗の原因を特定します。
サービスイメージのプルに失敗しました。詳細については、「イメージのプルに失敗 (ImagePullBackOff) した場合はどうすればよいですか?」をご参照ください。
Q:イメージのプルに失敗 (ImagePullBackOff) した場合はどうすればよいですか?
サービスインスタンスリストの [Last exit reason] 列に ImagePullBackOff と表示されている場合、イメージのプルに失敗しています。[Status] 列にアイコンが表示されている場合は、それをクリックして具体的な理由を確認できます。
イメージのプルに失敗する一般的な原因を以下に示します。
|
原因 |
エラーメッセージ |
解決策 |
|
システムディスクの容量不足 |
|
|
|
ACR のアクセス制御が未設定 |
|
パブリックイメージアドレスを使用するには、ACR のパブリックアクセスを有効化します。 プライベートイメージアドレスを使用するには、次の手順を実行します。
|
|
EAS のネットワーク設定ミス |
|
パブリックイメージアドレスを使用するには、EAS のインターネットアクセスの設定を行います。 |
|
認証情報がない、または無効 |
|
ACR Enterprise Edition インスタンスが匿名プルを許可しておらず、インターネット経由でクロスリージョンのプルを行う場合は、EAS サービス設定でイメージレジストリのユーザー名とパスワードを設定します。詳細については、「アクセス認証情報の設定」をご参照ください。 |
イメージレジストリと EAS サービスのリージョンに基づいて、以下のガイダンスに従ってください。
同一リージョン:プライベートイメージアドレスを使用してイメージをプルします。
-
クロスリージョン:ACR Personal Edition はパブリックイメージアドレスのみをサポートします。ACR Enterprise Edition の場合は、要件に応じて選択してください。
より高いセキュリティと信頼性を求める場合は、プライベートイメージアドレスを使用します。そのためには、CEN を介して VPC を接続する必要があります。詳細については、「ACR Enterprise Edition インスタンスへのクロスリージョンまたは IDC からのアクセス」をご参照ください。
よりシンプルなシナリオや、プライベートネットワーク接続がまだ利用できない場合は、一時的なオプションとしてパブリックイメージアドレスを使用します。パブリックネットワーク経由のダウンロードは遅くなります。
ACR Enterprise Edition に関する追加の注意点:
必要に応じて、VPC とパブリックネットワークの両方のアクセスに対してアクセス制御を設定します。
リポジトリが匿名プルを許可していない場合、パブリックアドレス経由のクロスリージョンのプルでは、EAS サービスでイメージレジストリのユーザー名とパスワードを設定する必要があります。
Q:停止したはずの EAS サービスが自動的に再起動します。何が原因ですか?
問題の説明:EAS サービスが一定期間停止した後に、自律的に再起動します。
根本原因:
サービスに最小インスタンス数を 0 とするオートスケーリングが設定されています。一定期間トラフィックがない場合、インスタンス数は自動的に 0 にスケールダウンします。スケールダウンにより利用可能なインスタンスがないときにリクエストが到着すると、EAS は自動的にスケールアップをトリガーします。このとき、設定されたスケールアップしきい値に達している必要はありません。
デプロイイベントで auto scaling メッセージを確認し、オートスケールアップが発生したかどうかを確認します。情報列に [Service is now auto scaling] というエントリがある場合、サービスが自動的にスケールアップするようにトリガーされたことを示します。その後、イベントステータスは Waiting から Scaling を経て Running に移行し、利用可能なインスタンス数は 0 から 1 に変わります。
解決策:
サービスが不要になった場合は、削除してください。
サービスを維持しつつ自動再起動を防ぐには、コンソールまたは
StopServiceAPI を呼び出してサービスを停止してください。手動で停止したサービスは、トラフィックが到着してもスケールアップしません。オートスケーリングによってサービスが停止するのを防ぐには、最小インスタンス数を 0 に設定しないでください。
予期せぬトラフィックがスケールアップをトリガーすることが懸念される場合は、オートスケーリングを完全に無効にしてください。
Q:PAI-EAS の起動が「IoError(Os { code: 28, kind: StorageFull, message: "No space left on device" })」というエラーで失敗します
問題の説明:
[2024-10-21 20:59:33] serialize_file(_flatten(tensors), filename, metadata=metadata)
[2024-10-21 20:59:33] safetensors_rust.SafetensorError: Error while serializing: IoError(Os { code: 28, kind: StorageFull, message: "No space left on device" })
[2024-10-21 20:59:35] time="2024-10-21T12:59:35Z" level=info msg="program stopped with status:exit status 1" program=/bin/sh
根本原因:大きなモデルファイルにより、EAS インスタンスのシステムディスクがいっぱいになっています。これにより、サービスの起動が妨げられています。
解決策:
オプション 1:EAS インスタンスのシステムディスクを拡張します。
オプション 2:モデルファイルが大きすぎる場合は、外部ストレージ (OSS、NAS など) に保存し、ストレージマウントを使用して読み取ります。
Q:デプロイが「fail to start program with error:fork/exec /bin/sh:exec format error」というエラーで失敗します
exec format error は、オペレーティングシステムがターゲットのバイナリを実行できないことを意味します。最も一般的な原因は、実行ファイルまたはコンテナイメージとホストマシンの CPU アーキテクチャの不一致です。
別のリソース仕様を試してください。
Q:エラー:Invalid GPU count 6, only supported: [0 1 2 4 8 16]
GPU 間の通信効率を最大化するために、サービスあたりの GPU 数は 2 のべき乗である必要があります。
サポートされているサービスあたりの GPU 数:0、1、2、4、8、または 16。
リソースに関する問題
コンピューティングリソースとシステムディスクの使用量に関する質問については、「リソース設定 FAQ」をご参照ください。
サービスの更新とスケーリング
Q:EAS はどのようなスケーリングポリシーをサポートしていますか?
ワークロードのニーズに基づいてスケーリングポリシーを選択します。EAS は、水平オートスケーリングとスケジュールされたスケーリングをサポートしています。
水平オートスケーリングについては、QPS や CPU 使用率などのカスタムメトリクスに基づいて設定します。メトリクスの計算方法と設定の詳細については、「水平オートスケーリング」をご参照ください。
メトリクスの変動によるスラッシングを防ぐため、EAS はしきい値に 10% の許容帯域を適用します。たとえば、QPS のしきい値が 10 の場合、スケールアウトは QPS が一貫して 11 (10 × 1.1) を超えたときにトリガーされます。これは、次のことを意味します。
10 から 11 の間の短期的な QPS のスパイクでは、すぐにスケールアウトはトリガーされません。
スケールアウトは、QPS が持続的に 11~12 以上を維持した場合にのみトリガーされます。
この許容帯域により、不要なリソースの変更が減り、安定性とコスト効率が向上します。
Q:スケールアウトしたインスタンスはどこで実行されますか?
エラスティックリソースプールが設定された専用リソースグループを使用している場合、専用リソースグループに利用可能なノードがないと、インスタンスはパブリックリソースグループにスケールアウトします。
Q:サービスをダウンタイムなしで更新するにはどうすればよいですか?
シナリオ:サービスを中断せずに更新します。専用リソースグループに十分なキャパシティがない場合、一時的に新しいインスタンスをパブリックリソース上で実行し、更新後に専用リソースグループに再スケジュールします。
-
解決策:ローリングアップデート、高優先度リソースのデスケジューリング、およびエラスティックリソースプールを組み合わせます。
ローリングアップデートの設定:サービスの中断を防ぎます。 で、ローリングアップデートポリシーを設定します。詳細については、「ローリングアップデートとグレースフルシャットダウン」をご参照ください。カスタムデプロイページで、[Stability assurance] セクションの [Rolling update] をオンにし、設定ダイアログで [Max surge] と [Max unavailable] パラメーターを設定して [OK] をクリックします。
エラスティックリソースプールの有効化:専用リソースのキャパシティを超えるインスタンスを、従量課金のパブリックリソースで実行できるようにします。詳細については、「エラスティックリソースプール」をご参照ください。
高優先度リソースのデスケジューリング[の有効化]:専用リソースグループに空きキャパシティができた場合 (例えば、古いインスタンスが削除された後)、EAS はコストを削減するためにパブリックリソースのインスタンスを自動的に専用リソースグループに再スケジュールします。
サービスコールに関する問題
コールエラー
返された HTTP ステータスコードに基づいてトラブルシューティングを行います。詳細については、「サービスステータスコードとエラー」をご参照ください。
HTTPS とカスタムドメイン
Q:EAS は HTTPS コールをサポートしていますか?
はい。サービスエンドポイント URL の http:// を https:// に置き換えることで、暗号化された転送を有効にできます。クライアント (Python の requests ライブラリなど) が SSL 証明書検証エラーを返す場合、これは EAS の問題ではなく、クライアント側の設定の問題です。
Q:HTTPS のみのアクセスを強制するにはどうすればよいですか?
共有ゲートウェイ:HTTPS リダイレクトはサポートされていません。
専用ゲートウェイ:サポートされています。専用ゲートウェイの設定で [HTTPS redirect] を有効にします。有効にすると、すべての HTTP リクエストが自動的に HTTPS にリダイレクトされます。
Q:カスタムドメインを使用してサービスを呼び出すことはできますか?
はい。フルマネージド専用ゲートウェイを作成して使用し、ゲートウェイ設定でカスタムドメインを設定します。詳細については、「専用ゲートウェイの使用」をご参照ください。
トークン管理
Q:サービストークンは期限切れになったり、変更されたりしますか?
いいえ。サービスがデプロイされたときに生成される[Token]は長期間有効です。サービスの再起動、更新 (手動で認証方法を変更しない限り)、またはスケーリングを行ってもトークンは変更されません。トークンは、手動でリセットするか、サービスを削除した場合にのみ無効になります。
Q:1つのサービスに対して複数のトークンを作成できますか?
いいえ。各 EAS サービスインスタンスがサポートする認証[Token]は 1 つだけです。複数ユーザーの権限管理や個別の使用状況追跡には、Alibaba Cloud RAM ベースの認証または同様のアクセス制御ソリューションを使用してください。
その他のコールに関する問題
Q:LLM サービスでストリーミング応答を有効にするにはどうすればよいですか?
EAS にはグローバルなストリーミング切り替え機能はありません。各 API リクエストボディで個別にストリーミングを指定します。たとえば、OpenAI 互換の LLM サービスを呼び出す場合、JSON リクエストボディに "stream": true を含めます。
Q:VPC アドレスコールと VPC ダイレクト接続の違いは何ですか?
VPC アドレスコール:リクエストは内部 SLB とゲートウェイを経由します (パブリックアドレスコールはパブリック SLB とゲートウェイを経由します)。これは標準的なリクエストパスです。各リクエストは、サービスインスタンスに到達する前に、SLB でのレイヤー 4 転送とゲートウェイでのレイヤー 7 転送を通過します。高い同時実行性や大量のトラフィックの状況下では、この転送によりレイテンシーのオーバーヘッドが増加します。また、ゲートウェイには帯域幅の上限 (デフォルトで 1 Gbps) があります。
-
VPC ダイレクト接続:EAS は、追加コストなしでパフォーマンスとスケーラビリティの両方に対応した高速なダイレクト接続モードを提供します。VPC ダイレクト接続を有効にすると、お使いの VPC と EAS サービス VPC の間にネットワークパスが確立されます。リクエストは EAS のサービスディスカバリを使用してサービスを特定し、クライアントサイドソフトウェア負荷分散を実行します。これには EAS SDK が必要で、[endpoint_type] を [DIRECT] に設定する必要があります。
たとえば、Python SDK のシナリオでは、次の行をコードに追加して、ゲートウェイコールからダイレクト接続に切り替えます。
-
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()
-
権限とネットワーク
Q:RAMユーザーが EAS のサービスリンクロールを自動的に作成または削除できないのはなぜですか?
特定の権限を持つユーザーのみが AliyunServiceRoleForPaiEas を自動的に作成または削除できます。RAM ユーザーがこの操作を実行できない場合は、次のように必要なポリシーを付与します。
-
スクリプトベースの設定方法を使用して、次のポリシーをカスタムポリシーとして作成します。詳細については、「カスタムポリシーの作成」をご参照ください。
前の手順で作成したカスタムポリシーをターゲットの RAM ユーザーにアタッチします。詳細については、「RAM ユーザーの権限管理」をご参照ください。
Q:EAS サービスはどのようにインターネットにアクセスしますか?
EAS サービスはデフォルトではインターネットにアクセスできません。インターネットアクセスを有効にするには、EAS サービス用にインターネット接続が可能な VPC を設定します。詳細については、「EAS のパブリックおよびプライベートリソースへのアクセス」をご参照ください。
サービス管理
Q:EAS はインスタンスへの SSH アクセスをサポートしていますか?
いいえ。EAS はマネージドサービスであり、コンテナへの SSH アクセスは提供していません。コンテナ起動時に特定のコマンドを実行するには、サービス設定の [Run Command] フィールドで指定します。
Q:EAS にはどのようなサービスステータスがありますか?
EAS サービスには以下のステータスがあります。Model Serving (EAS) ページのステータス列でもステータスを確認できます。
作成中
待機中 — インスタンスの起動を待っています
停止済み
失敗
更新中 — インスタンスが更新されています
停止中
ホットアップデート中 — インスタンスを置き換えずに更新しています
起動中
削除失敗
実行中
スケーリング中 — インスタンスがスケーリングしています
保留中 — 処理を待っています
削除中
完了
準備中
Q:どの RAMユーザーがサービスを作成したかを確認するにはどうすればよいですか?
ActionTrail コンソールでイベントを照会します。イベント名のフィルターを CreateService に設定します。詳細については、「ActionTrail コンソールでのイベントの照会」をご参照ください。
Q:PAI の公式イメージをインターネットからダウンロードできますか?
いいえ。PAI の公式イメージはプラットフォーム内部のイメージであり、PAI プラットフォーム内でのみ使用できます。プラットフォームコンテナの外部からダウンロードすることはできません。
Q:PAI-EAS のサービス名とサービス ID の一意性に関するルールは何ですか?
サービス名の一意性:EAS サービス名は、単一リージョン内でグローバルに一意です。サービス作成時に「service name already exists」というエラーが表示され、[Model Serving (EAS)] リストにその名前が表示されない場合、同じリージョン内の別のユーザーがその名前を既に使用しています。別の名前を選択して再試行してください。
サービス ID の一意性:PAI-EAS のサービス ID はグローバルに一意であり、システムによって自動的に割り当てられます。手動で指定することはできません。
Q:モジュールを無効にした後、EAS を再購入する必要がありますか?また、サービスインスタンスが見つからない場合はどうすればよいですか?
再購入は不要:一度有効化されると、PAI-EAS は無期限に利用可能です。再度使用するには、PAI コンソールに移動し、ワークスペースを選択または作成して、そのワークスペースに EAS インスタンスを作成します。追加の購入や再有効化は必要ありません。
-
インスタンスが見つからない場合:
PAI コンソールにログインし、ページ上部に表示されている [Workspace] が探しているものであることを確認します。
ワークスペースが削除または切り替えられた場合は、[Overview] ページまたはターゲットのワークスペース内から [Model Serving (EAS)] リストを探します。
リストにデータやインスタンスが表示されない場合、そのワークスペースには課金対象の EAS インスタンスが作成されていません。モジュールを有効にするだけでは料金は発生せず、追加のクリーンアップも不要です。
その他
Q:EAS サービスをデプロイする際に OSS バケットを選択できないのはなぜですか?
EAS サービスをデプロイする際、ストレージの場所を指定してモデルやコードをマウントできます。OSS バケットと NAS ファイルシステムが EAS サービスと同じリージョンにあることを確認してください。クロスリージョンのストレージは選択できません。
Q:TensorFlow に関する問題
詳細については、「TensorFlow FAQ」をご参照ください。