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によって新しいモデル・グループが登録されるため、モデル・グループを登録することをお薦めします。
次の例に示すように、モデル・グループAPIのregister操作を使用してモデル・グループを登録します。
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: モデルの登録
model_group_id
: ステップ1を完了した場合、これは_registerリクエストに対するmodel_group_idの値です。name
: 使用する事前トレーニング済モデルのモデル名。version
: 使用する事前トレーニング済モデルのバージョン番号。model_format
: モデルの形式(TORCH_SCRIPT
またはONNX
)。
次の例に示すように、モデル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"
}
登録操作のステータスを確認するには、次の例に示すように、タスクAPIのGet操作で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,
...
]
}
]
}
]
}