OpenSearch事前トレーニングされたモデルの使用

OpenSearchを使用したOCI Searchは、OpenSearch事前トレーニング済モデルの組込みサポートを提供します。

このトピックでは、モデル名のみを指定して、事前トレーニング済のハギング・センテンス・トランスフォーマ・モデルを登録し、クラスタにデプロイする方法について説明します。承認済モデルのリストは、事前トレーニング済モデルを参照してください。OpenSearchを使用してOCI検索でセマンティック検索にOpenSearch事前トレーニング済モデルを使用する方法のエンドツーエンドの手順については、セマンティック検索ウォークスルーを参照してください。

前提条件

開始する前に、次の手順を実行する必要があります。

  • OpenSearchを使用して、OCI Searchでサポートされている事前トレーニング済モデルのいずれかを選択します

  • OpenSearchクラスタがバージョン2.11以降であることを確認します。

  • セマンティック検索を実行するようにクラスタ設定を更新します。次の例は、推奨設定を示しています。

    PUT _cluster/settings
    {
      "persistent": {
        "plugins": {
          "ml_commons": {
            "only_run_on_ml_node": "false",
            "model_access_control_enabled": "true",
            "native_memory_threshold": "99",
            "rag_pipeline_feature_enabled": "true",
            "memory_feature_enabled": "true",
            "allow_registering_model_via_local_file": "true",
            "allow_registering_model_via_url": "true",
            "model_auto_redeploy.enable":"true",
            "model_auto_redeploy.lifetime_retry_times": 10
          }
        }
      }
    }

ステップ1: モデル・グループの登録

モデル・グループを使用すると、特定のモデルへのアクセスを管理できます。モデル・グループの登録は任意ですが、モデル・グループを登録しない場合、ML Commonsによって新しいモデル・グループが登録されるため、モデル・グループを登録することをお薦めします。

次の例に示すように、モデル・グループAPIregister操作を使用してモデル・グループを登録します。

POST /_plugins/_ml/model_groups/_register
{
  "name": "new_model_group",
  "description": "A model group for local models"
}

レスポンスで返されたmodel_group_idを書き留めます。

{
  "model_group_id": "<modelgroupID>",
  "status": "CREATED"
}

ステップ2: モデルの登録

事前トレーニング済モデルを登録するには、次のものが必要です:

次の例に示すように、モデルAPIから登録操作を使用してモデルを登録します。

POST /_plugins/_ml/models/_register
{
  "name": "huggingface/sentence-transformers/msmarco-distilbert-base-tas-b",
  "version": "1.0.2",
  "model_group_id": "TOD4Zo0Bb0cPUYbzwcpD",
  "model_format": "TORCH_SCRIPT"
}

レスポンスで返されたtask_idをノートにとり、task_idを使用して操作のステータスを確認できます。

たとえば、次のレスポンスから:

{
  "task_id": "TuD6Zo0Bb0cPUYbz3Moz",
  "status": "CREATED"
}

登録操作のステータスを確認するには、次の例に示すように、タスクAPIGet操作でtask_idを使用します。

GET /_plugins/_ml/tasks/TuD6Zo0Bb0cPUYbz3Moz

登録操作が完了すると、次の例に示すように、取得操作に対するレスポンスのstatus値はCOMPLETEDになります。

{
  "model_id": "iDf6Zo0BkIugivXi3E7z",
  "task_type": "REGISTER_MODEL",
  "function_name": "TEXT_EMBEDDING",
  "state": "COMPLETED",
  "worker_node": [
    "3qSqVfK2RvGJv1URKfS1bw"
  ],
  "create_time": 1706829732915,
  "last_update_time": 1706829780094,
  "is_async": true
}

モデルのデプロイ時に使用するレスポンスで返されるmodel_id値をノートにとります。

ステップ3: モデルのデプロイ

モデルの登録操作が完了したら、次の例に示すように、モデルAPIのデプロイ操作を使用してモデルをクラスタにデプロイし、前のステップのGet操作レスポンスからmodel_idを渡すことができます。

POST /_plugins/_ml/models/cleMb4kBJ1eYAeTMFFg4/_deploy

レスポンスで返されたtask_idをノートにとり、task_idを使用して操作のステータスを確認できます。

たとえば、次のレスポンスから:

{
  "task_id": "T-D7Zo0Bb0cPUYbz-cod",
  "task_type": "DEPLOY_MODEL",
  "status": "CREATED"
}

登録操作のステータスを確認するには、次の例に示すように、「タスクAPI」「取得」操作でtask_idを使用します。

GET /_plugins/_ml/tasks/T-D7Zo0Bb0cPUYbz-cod

デプロイ操作が完了すると、次の例に示すように、Get操作に対するレスポンスのstatus値はCOMPLETEDになります。

{
  "model_id": "iDf6Zo0BkIugivXi3E7z",
  "task_type": "DEPLOY_MODEL",
  "function_name": "TEXT_EMBEDDING",
  "state": "COMPLETED",
  "worker_node": [
    "3qSqVfK2RvGJv1URKfS1bw"
  ],
  "create_time": 1706829732915,
  "last_update_time": 1706829780094,
  "is_async": true
}

ステップ4: モデルのテスト

テキスト埋込みモデルの次の例に示すように、Predict APIを使用してモデルをテストします。

POST /_plugins/_ml/_predict/text_embedding/<your_embedding_model_ID>
{
  "text_docs":[ "today is sunny"],
  "return_number": true,
  "target_response": ["sentence_embedding"]
}

レスポンスには、次のレスポンス例に示すように、指定された文のテキスト埋込みが含まれます。

  "inference_results" : [
    {
      "output" : [
        {
          "name" : "sentence_embedding",
          "data_type" : "FLOAT32",
          "shape" : [
            768
          ],
          "data" : [
            0.25517133,
            -0.28009856,
            0.48519906,
            ...
          ]
        }
      ]
    }
  ]
}