トレーニング済みモデルデプロイメントAPIの開始

新しいトレーニング済みモデルのデプロイメントを開始します。

リクエスト

POST _ml/trained_models/<model_id>/deployment/_start

前提条件

manage_ml クラスター権限が必要です。この権限は machine_learning_admin ビルトインロールに含まれています。

説明

現在、デプロイメントには pytorch モデルのみがサポートされています。デプロイされたモデルは、推論プロセッサを使用してインジェストパイプライン内で、または直接 トレーニング済みモデルの推論 APIで使用できます。

モデルはデプロイメントIDを使用して複数回デプロイできます。デプロイメントIDは一意である必要があり、他のデプロイメントIDやモデルIDと一致してはいけません。ただし、デプロイされるモデルのIDと同じである場合は除きます。deployment_id が設定されていない場合、デフォルトは model_id になります。

推論パフォーマンスのスケーリングは、number_of_allocations および threads_per_allocation パラメータを設定することで達成できます。

threads_per_allocation を増加させると、ノードで推論リクエストが処理される際に使用されるスレッドが増えます。これにより、特定のモデルの推論速度が向上する可能性があります。また、スループットの改善にもつながる場合があります。

number_of_allocations を増加させると、複数の推論リクエストを並行して処理するために使用されるスレッドが増え、スループットが改善されます。各モデルの割り当ては、threads_per_allocation で定義されたスレッド数を使用します。

モデルの割り当ては、機械学習ノードに分散されます。ノードに割り当てられたすべての割り当ては、メモリ内の同じモデルのコピーを共有します。パフォーマンスに悪影響を及ぼすスレッドのオーバーサブスクリプションを避けるために、モデルの割り当ては、使用されるスレッドの合計数がノードに割り当てられたプロセッサを超えないように分散されます。

パスパラメータ

  • <model_id>
  • (必須、文字列) トレーニング済みモデルの一意の識別子。

クエリパラメータ

  • cache_size
  • (オプション、バイト値) モデルのノードごとの推論キャッシュサイズ(JVMヒープ外のメモリ)。サーバーレスでは、デフォルトでキャッシュは無効です。それ以外の場合、デフォルト値は トレーニング済みモデルの統計を取得 フィールドの model_size_bytes に報告されたモデルのサイズです。キャッシュを無効にするには、0b を提供できます。
  • deployment_id
  • (オプション、文字列) モデルのデプロイメントの一意の識別子。

デフォルトは model_id です。

  • number_of_allocations
  • (オプション、整数) このモデルが機械学習ノード全体で割り当てられる合計数。一般的にこの値を増加させるとスループットが向上します。デフォルトは 1 です。
  • priority
  • (オプション、文字列) デプロイメントの優先度。デフォルト値は normal です。優先度設定は2つあります:
    • normal: 本番環境でのデプロイメントに使用します。デプロイメントの割り当ては、ノードプロセッサがオーバーサブスクライブされないように分配されます。
    • low: モデル機能のテストに使用します。これらのデプロイメントには高ボリュームの入力が送信されないことを意図しています。デプロイメントは、1つのスレッドのみを持つ単一の割り当てを持つ必要があります。低優先度のデプロイメントは、すでにすべてのプロセッサを利用しているノードに割り当てられる場合がありますが、通常のデプロイメントよりも低いCPU優先度が与えられます。低優先度のデプロイメントは、通常の優先度のデプロイメントのより多くの割り当てを満たすために未割り当てにされる場合があります。

低優先度のデプロイメントの重い使用は、通常の優先度のデプロイメントのパフォーマンスに影響を与える可能性があります。

  • queue_capacity
  • (オプション、整数) 一度にキューに許可される推論リクエストの数を制御します。モデルが割り当てられるクラスター内のすべての機械学習ノードには、このサイズのキューがあります。リクエストの数が合計値を超えると、新しいリクエストは429エラーで拒否されます。デフォルトは1024です。最大許可値は1000000です。
  • threads_per_allocation
  • (オプション、整数) 推論中に各モデル割り当てによって使用されるスレッドの数を設定します。これにより、各推論リクエストの速度が一般的に向上します。推論プロセスは計算に依存するプロセスです; threads_per_allocations はノードごとに利用可能な割り当てプロセッサの数を超えてはなりません。デフォルトは1です。2の累乗でなければなりません。最大許可値は32です。
  • timeout
  • (オプション、時間) モデルのデプロイに待機する時間を制御します。デフォルトは30秒です。
  • wait_for
  • (オプション、文字列) 戻る前に待機する割り当てステータスを指定します。デフォルトは started です。値 starting はデプロイが開始されているが、まだノード上にないことを示します。値 started はモデルが少なくとも1つのノードで開始されたことを示します。値 fully_allocated はデプロイがすべての有効なノードで開始されたことを示します。

以下の例は、elastic__distilbert-base-uncased-finetuned-conll03-english トレーニング済みモデルの新しいデプロイメントを開始します:

Python

  1. resp = client.ml.start_trained_model_deployment(
  2. model_id="elastic__distilbert-base-uncased-finetuned-conll03-english",
  3. wait_for="started",
  4. timeout="1m",
  5. )
  6. print(resp)

Js

  1. const response = await client.ml.startTrainedModelDeployment({
  2. model_id: "elastic__distilbert-base-uncased-finetuned-conll03-english",
  3. wait_for: "started",
  4. timeout: "1m",
  5. });
  6. console.log(response);

コンソール

  1. POST _ml/trained_models/elastic__distilbert-base-uncased-finetuned-conll03-english/deployment/_start?wait_for=started&timeout=1m

APIは次の結果を返します:

コンソール-結果

  1. {
  2. "assignment": {
  3. "task_parameters": {
  4. "model_id": "elastic__distilbert-base-uncased-finetuned-conll03-english",
  5. "model_bytes": 265632637,
  6. "threads_per_allocation" : 1,
  7. "number_of_allocations" : 1,
  8. "queue_capacity" : 1024,
  9. "priority": "normal"
  10. },
  11. "routing_table": {
  12. "uckeG3R8TLe2MMNBQ6AGrw": {
  13. "routing_state": "started",
  14. "reason": ""
  15. }
  16. },
  17. "assignment_state": "started",
  18. "start_time": "2022-11-02T11:50:34.766591Z"
  19. }
  20. }

デプロイメントIDの使用

以下の例は、ID my_model_for_ingest を持つ my_model トレーニング済みモデルの新しいデプロイメントを開始します。デプロイメントIDは推論API呼び出しや推論プロセッサで使用できます。

Python

  1. resp = client.ml.start_trained_model_deployment(
  2. model_id="my_model",
  3. deployment_id="my_model_for_ingest",
  4. )
  5. print(resp)

Js

  1. const response = await client.ml.startTrainedModelDeployment({
  2. model_id: "my_model",
  3. deployment_id: "my_model_for_ingest",
  4. });
  5. console.log(response);

コンソール

  1. POST _ml/trained_models/my_model/deployment/_start?deployment_id=my_model_for_ingest

my_model トレーニング済みモデルは、異なるIDで再度デプロイできます:

Python

  1. resp = client.ml.start_trained_model_deployment(
  2. model_id="my_model",
  3. deployment_id="my_model_for_search",
  4. )
  5. print(resp)

Js

  1. const response = await client.ml.startTrainedModelDeployment({
  2. model_id: "my_model",
  3. deployment_id: "my_model_for_search",
  4. });
  5. console.log(response);

コンソール

  1. POST _ml/trained_models/my_model/deployment/_start?deployment_id=my_model_for_search