システムは、キュー内のデータ量を監視し、推論サービスを自動的にスケーリングして、推論サービスインスタンスの数を制御します。 このトピックでは、推論サービスの自動スケーリングを設定する方法について説明します。
仕組み
非同期推論シナリオでは、システムはキューのステータスに基づいてサービスインスタンスを自動的に追加または削除できます。 キューが空の場合、システムはすべてのサービスインスタンスを削除してコストを削減できます。 次の図は、非同期推論サービスでの自動スケーリングメカニズムの動作を示しています。
非同期推論サービスの自動スケーリングの設定
EASCMDクライアントにログインし、次のコマンドを実行して、非同期推論サービスの自動スケーリング機能を有効にします。 EASCMDクライアントにログオンする方法については、「EASCMDクライアントのダウンロードとユーザー認証の完了」をご参照ください。
構文
eascmd autoscale <service_name> -Dmin=[attr_value] -Dmax=[attr_value] -Dstrategies.queue[avgbacklog]=[attr_value]
ここで:
queue[avgbacklog]: キュー内の各サービスインスタンスが処理できるリクエストの平均数。 このパラメーターは、キューサービスの自動スケーリングをトリガーするためのしきい値として使用されます。
<service_name>: 非同期推論サービスの名前。
例:
eascmd autoscale pmmlasync -Dmin=0 -Dmax=10 -Dstrategies.queue[avgbacklog]=10
上記のコードでは、
queue[avgbacklog]=10: 非同期推論サービスの各インスタンスが最大10個のリクエストを処理できることを示します。
max=10: 非同期推論サービスを最大10インスタンスにスケールアウトできることを示します。
min=0: 非同期推論サービスをゼロインスタンスにスケールインできることを示します。
非同期推論サービスに3つのインスタンスがあり、キュー内のリクエスト数が30を超える場合 (各インスタンスで10を超えるリクエスト) 、スケールアウトアクティビティがトリガーされます。 推論サービスは、最大10インスタンスまでスケールアウトできます。 キュー内のリクエスト数が30以下の場合、スケールインアクティビティがトリガーされます。 キューが空の場合、推論サービスをゼロインスタンスにスケールインできます。 この場合、キューは期待どおりに機能します。 新しい要求がキューに配信されると、推論サービスは再びスケールアウトされます。
次のコマンドを実行して、スケールインまたはスケールアウトのアクティビティの待機期間を設定できます。
構文
eascmd autoscale <service_name> -Dbehavior.<attr_name>.stabilizationWindowSeconds=<attr_value>
上記のコードでは、
<service_name>: 非同期推論サービスの名前。
<attr_name>: スケールインアクティビティの場合はscaleDown、スケールアウトアクティビティの場合はscaleUpです。
<attr_value>: 秒単位の待機期間。 値はINT型でなければなりません。
スケールインアクティビティのデフォルトの待機時間は300秒です。 頻繁なスケールイン活動を防ぐために、スケールイン活動の待機期間を小さな値に設定しないことをお勧めします。
スケールアウトアクティビティのデフォルトの待機時間は0秒です。 ほとんどの場合、リソースが使い果たされたときに最も早い機会にサービスをスケールアウトするために、スケールアウト活動の待機期間を小さな値に設定することをお勧めします。 これにより、サービスの中断を防ぐことができます。
例
スケールイン活動の待機期間を設定する
eascmd autoscale pmmlasync -Dbehavior.scaleDown.stabilizationWindowSeconds=100
スケールインアクティビティをトリガーするには、システムは100秒待たなければなりません。
スケールアウト活動の待機期間を設定する
eascmd autoscale pmmlasync -Dbehavior.scaleUp.stabilizationWindowSeconds=100
スケールアウトアクティビティをトリガーするには、システムは100秒待たなければなりません。
設定ファイルを変更して、スケールインおよびスケールアウトのアクティビティの待機期間を設定できます。
構文
eascmd autocale <service_name> -s <scale.json>
上記のコードでは、
<service_name>: 非同期推論サービスの名前。
<scale.json>: 設定ファイル。 サンプルファイルの内容:
{ "behavior": { "scaleUp": { "stabilizationWindowSeconds": 20 }, "scaleDown": { "stabilizationWindowSeconds": 150 } } }
例:
eascmd autoscale pmmlasync -s scale.json
システムは、スケールアウトアクティビティをトリガーする前に20秒、スケールインアクティビティをトリガーする前に150秒待たなければなりません。