カスタム・モデル
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プロセスには、次のステップが含まれます。
- 次の前提条件を完了します。
- 必要なIAMポリシーを構成します。
- 推奨されるクラスタ設定を構成します。
- オブジェクト・ストレージ・バケットにカスタム・モデルをアップロードします。
- モデルを登録します。
- モデルをデプロイします。
- (オプション)モデルをテストします。
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を取得するには
ナビゲーション・メニューを開き、「ストレージ」をクリックします。「オブジェクト・ストレージとアーカイブ・ストレージ」で、「バケット」をクリックします。
アップロードされたモデルを含むバケットをクリックします。バケットの「詳細」ページが表示されます。
オブジェクト名の横にある
をクリックし、「オブジェクト詳細の表示」を選択します。「オブジェクトの詳細」ダイアログ・ボックスが表示されます。モデル・ファイルにアクセスするための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>"
}
]
}
}
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のdeploy操作を使用して、前のステップで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のGet操作でtask_id
を使用します。
GET /_plugins/_ml/tasks/<task_ID>
デプロイ操作が完了すると、Get操作に対するレスポンスの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"
}
}