Elasticsearch推論サービス

推論タスクをelasticsearchサービスで実行するための推論エンドポイントを作成します。

  1. ## リクエスト
  2. `````PUT /_inference/<task_type>/<inference_id>

パスパラメータ

  • <inference_id>
  • (必須、文字列) 推論エンドポイントの一意の識別子。
  • <task_type>
  • (必須、文字列) モデルが実行する推論タスクのタイプ。
    利用可能なタスクタイプ:
    • rerank,
    • text_embedding.

リクエストボディ

  • service
  • (必須、文字列) 指定されたタスクタイプに対してサポートされるサービスのタイプ。この場合、elasticsearch
  • service_settings
  • (必須、オブジェクト) 推論モデルをインストールするために使用される設定。
    これらの設定はelasticsearchサービスに特有です。
    • model_id
    • (必須、文字列) 推論タスクに使用するモデルの名前。これは、組み込みモデルのID(例えば、E5用の.multilingual-e5-small)またはすでにElandを通じてアップロードされたテキスト埋め込みモデルのIDである可能性があります。
    • num_allocations
    • (必須、整数) このモデルが機械学習ノード全体に割り当てられる合計数。一般的にこの値を増やすとスループットが向上します。
    • num_threads
    • (必須、整数) 推論中に各モデル割り当てによって使用されるスレッドの数を設定します。これは一般的に各推論リクエストの速度を向上させます。推論プロセスは計算に依存するプロセスです; threads_per_allocationsはノードごとに利用可能な割り当てられたプロセッサの数を超えてはなりません。2の累乗でなければなりません。最大許可値は32です。
  • task_settings
  • (オプション、オブジェクト) 推論タスクを構成するための設定。これらの設定は、指定した<task_type>に特有です。
    1. - `````return_documents
    • (オプション、ブール値) インデックスだけでなくドキュメントを返します。デフォルトはtrueです。

Elasticsearchサービス経由のE5

以下の例は、my-e5-modelという名前の推論エンドポイントを作成してtext_embeddingタスクタイプを実行する方法を示しています。

以下のAPIリクエストは、すでにダウンロードされていない場合にE5モデルを自動的にダウンロードし、その後モデルをデプロイします。

Python

  1. resp = client.inference.put(
  2. task_type="text_embedding",
  3. inference_id="my-e5-model",
  4. inference_config={
  5. "service": "elasticsearch",
  6. "service_settings": {
  7. "num_allocations": 1,
  8. "num_threads": 1,
  9. "model_id": ".multilingual-e5-small"
  10. }
  11. },
  12. )
  13. print(resp)

Js

  1. const response = await client.inference.put({
  2. task_type: "text_embedding",
  3. inference_id: "my-e5-model",
  4. inference_config: {
  5. service: "elasticsearch",
  6. service_settings: {
  7. num_allocations: 1,
  8. num_threads: 1,
  9. model_id: ".multilingual-e5-small",
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. PUT _inference/text_embedding/my-e5-model
  2. {
  3. "service": "elasticsearch",
  4. "service_settings": {
  5. "num_allocations": 1,
  6. "num_threads": 1,
  7. "model_id": ".multilingual-e5-small"
  8. }
  9. }
model_idは、組み込みのE5モデルの1つのIDでなければなりません。
有効な値は.multilingual-e5-small.multilingual-e5-small_linux-x86_64です。
詳細については、E5モデルのドキュメントを参照してください。

Kibanaコンソールを使用しているときに502 Bad Gatewayエラーが応答に表示されることがあります。このエラーは通常、バックグラウンドでモデルがダウンロードされている間のタイムアウトを反映しています。ダウンロードの進行状況は、機械学習UIで確認できます。Pythonクライアントを使用している場合、timeoutパラメータをより高い値に設定できます。

Elasticsearchサービス経由でElandによってアップロードされたモデル

以下の例は、my-msmarco-minilm-modelという名前の推論エンドポイントを作成してtext_embeddingタスクタイプを実行する方法を示しています。

Python

  1. resp = client.inference.put(
  2. task_type="text_embedding",
  3. inference_id="my-msmarco-minilm-model",
  4. inference_config={
  5. "service": "elasticsearch",
  6. "service_settings": {
  7. "num_allocations": 1,
  8. "num_threads": 1,
  9. "model_id": "msmarco-MiniLM-L12-cos-v5"
  10. }
  11. },
  12. )
  13. print(resp)

Js

  1. const response = await client.inference.put({
  2. task_type: "text_embedding",
  3. inference_id: "my-msmarco-minilm-model",
  4. inference_config: {
  5. service: "elasticsearch",
  6. service_settings: {
  7. num_allocations: 1,
  8. num_threads: 1,
  9. model_id: "msmarco-MiniLM-L12-cos-v5",
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. PUT _inference/text_embedding/my-msmarco-minilm-model
  2. {
  3. "service": "elasticsearch",
  4. "service_settings": {
  5. "num_allocations": 1,
  6. "num_threads": 1,
  7. "model_id": "msmarco-MiniLM-L12-cos-v5"
  8. }
  9. }
推論エンドポイントの一意の識別子を提供します。inference_idは一意でなければならず、model_idと一致してはなりません。
model_idは、すでにElandを通じてアップロードされたテキスト埋め込みモデルのIDでなければなりません。