Utilizzo di un modello pre-addestrato OpenSearch

OCI Search con OpenSearch fornisce supporto integrato per i modelli pre-addestrati OpenSearch.

In questo argomento viene descritto come registrare e distribuire qualsiasi modello di trasformatore di frasi pre-addestrato in un cluster specificando solo il nome del modello. Vedere Modelli pre-addestrati per l'elenco dei modelli approvati. Per una procedura end-to-end su come utilizzare un modello pre-addestrato OpenSearch per la ricerca semantica in OCI Search con OpenSearch, consulta la guida di Semantic Search.

Requisiti indispensabili

Prima di iniziare, è necessario effettuare le operazioni riportate di seguito.

  • Selezionare uno dei modelli pre-addestrati supportati da OCI Search con OpenSearch
  • Verificare che il cluster OpenSearch sia versione 2.11 o successiva.
  • Aggiornare le impostazioni del cluster per eseguire la ricerca semantica. L'esempio seguente include le impostazioni consigliate:
    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
          }
        }
      }
    }

Passo 1: registrare il gruppo di modelli

I gruppi di modelli consentono di gestire l'accesso a modelli specifici. La registrazione di un gruppo di modelli è facoltativa. Tuttavia, se non si registra un gruppo di modelli, ML Commons crea un nuovo gruppo di modelli per l'utente, pertanto è consigliabile registrarlo.

Registrare un gruppo di modelli utilizzando l'operazione di registrazione nelle API del gruppo di modelli, come mostrato nell'esempio riportato di seguito.

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

Prendere nota del model_group_id restituito nella risposta:

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

Passo 2: Registra il modello

Per registrare un modello pre-addestrato, è necessario quanto segue:
  • model_group_id: se si è completato il passo 1, questo è il valore di model_group_id per la richiesta _register.
  • name: il nome del modello per il modello preaddestrato che si desidera utilizzare.
  • version: il numero di versione del modello pre-addestrato che si desidera utilizzare.
  • model_format: il formato del modello, TORCH_SCRIPT o ONNX.

Registrare il modello utilizzando l'operazione di registrazione dalle API modello, come mostrato nell'esempio riportato di seguito.

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

Prendere nota del task_id restituito nella risposta, è possibile utilizzare il task_id per controllare lo stato dell'operazione.

Ad esempio, dalla risposta seguente:

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

per controllare lo stato dell'operazione di registrazione, utilizzare task_id con l'operazione Recupera delle API task, come mostrato nell'esempio riportato di seguito.

GET /_plugins/_ml/tasks/TuD6Zo0Bb0cPUYbz3Moz

Una volta completata l'operazione di registrazione, il valore status nella risposta all'operazione Get è COMPLETED, come mostrato nell'esempio seguente:

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

Prendere nota del valore model_id restituito nella risposta da utilizzare quando si distribuisce il modello.

Passo 3: distribuzione del modello

Una volta completata l'operazione di registrazione per il modello, è possibile distribuire il modello nel cluster utilizzando l'operazione deploy delle API del modello, passando il valore model_id dalla risposta dell'operazione Get nel passo precedente, come mostrato nell'esempio seguente:

POST /_plugins/_ml/models/cleMb4kBJ1eYAeTMFFg4/_deploy

Prendere nota del task_id restituito nella risposta, è possibile utilizzare il task_id per controllare lo stato dell'operazione.

Ad esempio, dalla risposta seguente:

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

per controllare lo stato dell'operazione di registrazione, utilizzare task_id con l'operazione Recupera delle API dei task, come mostrato nell'esempio riportato di seguito.

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

Al termine dell'operazione di distribuzione, il valore status nella risposta all'operazione Get è COMPLETED, come mostrato nell'esempio riportato di seguito.

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

Passo 4: Test del modello

Utilizzare l'API Prevedi per eseguire il test del modello, come mostrato nell'esempio riportato di seguito per un modello di incorporamento testo.

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

La risposta contiene incorporamenti di testo per la frase fornita, come mostrato nel seguente esempio di risposta:

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