カスタム・モデル

「Bring Your Own Model (BYOM)」プロセスを使用して、カスタム・モデルをクラスタにアップロードできます。

カスタム・モデルを使用するには、OpenSearchバージョン2.11を使用するように構成されたクラスタが必要です。デフォルトでは、新しいクラスタはバージョン2.11を使用します。クラスタを作成するには、「OpenSearchクラスタの作成」を参照してください。

バージョン2.3用に構成された既存のクラスタの場合、バージョン2.11へのインライン・アップグレードを実行できます。詳細は、OpenSearchクラスタ・ソフトウェアのアップグレードを参照してください。

バージョン1.2.3に構成された既存のクラスタを2.11にアップグレードするには、OpenSearch Cluster Software Upgradesで説明されているアップグレード・プロセスを使用します。

カスタム・モデルをインポートするBYOMプロセスには、次のステップが含まれます。

  1. 次の前提条件を実行します。
    • 必要なIAMポリシーを構成します。
    • 推奨されるクラスタ設定を構成します。

    • カスタム・モデルをオブジェクト・ストレージ・バケットにアップロードします。
  2. モデルを登録します。

  3. モデルをデプロイします。

  4. (オプション)モデルをテストします。

1: 前提条件

IAMポリシー

カスタム・モデルをアップロードするオブジェクト・ストレージ・バケットへのOpenSearchアクセス権を持つOCI Searchを付与するポリシーを作成する必要があります。次のポリシーの例には、必要な権限が含まれています。

ALLOW ANY-USER to manage object-family in tenancy WHERE ALL {request.principal.type='opensearchcluster', request.resource.compartment.id='<cluster_compartment_id>'}

ポリシーを初めて使用する場合は、ポリシーの開始および共通ポリシーを参照してください。

生成AIコネクタのリージョン

OCI生成AIを使用するには、テナンシが米国中西部(シカゴ)リージョンまたはドイツ中央部(フランクフルト)リージョンにサブスクライブされている必要があります。どちらのリージョンにもクラスタを作成する必要はありません。テナンシがいずれかのリージョンにサブスクライブされていることを確認してください。

クラスタ設定の構成

クラスタAPI設定操作を使用して、セマンティック検索の推奨クラスタ設定を構成します。次の例は、推奨設定を示しています。

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
      }
    }
  }
}

オブジェクト・ストレージ・バケットへのモデルのアップロード

カスタム・モデルをクラスタに登録できるようにするには、そのモデルをテナンシのオブジェクト・ストレージ・バケットにアップロードする必要があります。既存のObject Storageバケットがない場合は、バケットを作成する必要があります。バケットの作成方法を説明するチュートリアルは、バケットの作成を参照してください。

次に、カスタム・モデルをバケットにアップロードする必要があります。バケットにファイルをアップロードする方法を説明するチュートリアルは、バケットへのファイルのアップロードを参照してください。このウォークスルーでは、サポートされているハギング・フェイス・モデルをダウンロードしてアップロードできます。

2: モデルの登録

カスタム・モデルをオブジェクト・ストレージ・バケットにアップロードした後、アップロードされたファイルにアクセスするためのURLを取得し、モデルAPIから登録操作でURLを渡す必要があります。その後、「タスクAPI」「取得」操作を使用して登録操作の完了を追跡し、モデルのデプロイ時に使用するモデルIDを取得できます。

アップロードしたモデル・ファイルのURLを取得するには

  1. ナビゲーション・メニューを開き、「ストレージ」をクリックします。「オブジェクト・ストレージおよびアーカイブ・ストレージ」で、「バケット」をクリックします。

  2. アップロードされたモデルを含むバケットをクリックします。バケットの「詳細」ページが表示されます。

  3. オブジェクト名の横にある「アクション」メニュー(アクション・メニュー)をクリックし、「オブジェクト詳細の表示」を選択します。「オブジェクトの詳細」ダイアログ・ボックスが表示されます。

  4. モデル・ファイルにアクセスするためのURLが「URLパス(URI)」フィールドに表示されます。カスタム・モデルの登録時に次のステップで使用するURLをコピーします。

    重要

    「URLパス(URI)」フィールドの現在のURLが非推奨であり、警告メッセージに新しいURLが指定されていることを示す警告メッセージが表示される場合があります。この警告メッセージが表示された場合は、かわりに警告メッセージで新しいURLを使用してカスタム・モデルを登録します。

カスタム・モデルの登録

カスタム・モデルを登録するには、登録操作を使用します。次の例では、オブジェクト・ストレージ・バケットにアップロードされるカスタム・モデルはhuggingface/sentence-transformers/all-MiniLM-L12-v2モデルです。この例のmodel_configで指定された値は、モデルの構成ファイルからの値です。登録するカスタム・モデルに適用可能なモデル構成値を使用していることを確認してください。

actionsセクションでオブジェクト・ストレージURLを指定します。これは、BYOMシナリオをサポートするためにOpenSearch APIが追加されたOCI検索です。

POST /_plugins/_ml/models/_register
{
  "model_group_id": "<Model_Group_ID>",
	"name": "sentence-transformers/all-MiniLM-L12-v2",
	"version": "1.0.1",
	"description": "This is a sentence-transformers model: It maps sentences & paragraphs to a 384 dimensional dense vector space and can be used for tasks like clustering or semantic search.",
	"model_task_type": "TEXT_EMBEDDING",
	"model_format": "TORCH_SCRIPT",
	"model_content_size_in_bytes": 134568911,
	"model_content_hash_value": "f8012a4e6b5da1f556221a12160d080157039f077ab85a5f6b467a47247aad49",
	"model_config": {
		"model_type": "bert",
		"embedding_dimension": 384,
		"framework_type": "sentence_transformers",
		"all_config": "{\"_name_or_path\":\"microsoft/MiniLM-L12-H384-uncased\",\"attention_probs_dropout_prob\":0.1,\"gradient_checkpointing\":false,\"hidden_act\":\"gelu\",\"hidden_dropout_prob\":0.1,\"hidden_size\":384,\"initializer_range\":0.02,\"intermediate_size\":1536,\"layer_norm_eps\":1e-12,\"max_position_embeddings\":512,\"model_type\":\"bert\",\"num_attention_heads\":12,\"num_hidden_layers\":12,\"pad_token_id\":0,\"position_embedding_type\":\"absolute\",\"transformers_version\":\"4.8.2\",\"type_vocab_size\":2,\"use_cache\":true,\"vocab_size\":30522}"
	},
    "url_connector": {
        "protocol": "oci_sigv1",
        "parameters": {
            "auth_type": "resource_principal"
        },
        "actions": [
            {
                "method": "GET",
                "action_type": "DOWNLOAD",
                "url": "<Object_Storage_URL_Path>"
            }
        ]
    }
}
<Object_Storage_URL_Path>を有効なオブジェクト・ストレージURLに置き換えます。たとえば:
https://<tenancy_name>.objectstorage.us-ashburn-1.oraclecloud.com/n/<tenancy_name>/b/<bucket_name>/o/sentence-transformers_all-distilroberta-v1-1.0.1-torch_script.zip

レスポンスで返されたtask_idを書き留めます。task_idを使用して、操作のステータスを確認できます。

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

{
  "task_id": "<task_ID>",
  "status": "CREATED"
}

レジスタ・タスクの追跡およびモデルIDの取得

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

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

{
  "model_id": "<embedding_model_ID>",
  "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/<embedding_model_ID>/_deploy

レスポンスで返されたtask_idを書き留めます。task_idを使用して、操作のステータスを確認できます。

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

{
  "task_id": "<task_ID>",
  "task_type": "DEPLOY_MODEL",
  "status": "CREATED"
}

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

GET /_plugins/_ml/tasks/<task_ID>

デプロイ操作が完了すると、取得操作に対するレスポンスのstatus値はCOMPLETEDになります。

4: モデルのテスト

モデルが正常にデプロイされたら、次の例に示すように、text_embeddingエンドポイントを使用してモデルをテストできます。

POST /_plugins/_ml/_predict/text_embedding/<embedding_model_ID>
{
  "text_docs":["hellow world", "new message", "this too"]
}

または、次の例に示すように、_predictエンドポイントを使用できます:

POST /_plugins/_ml/models/<embedding_model_ID>/_predict
{
 "parameters":{
    "passage_text": "Testing the cohere embedding model"
}
}