Utilisation d'un modèle préentraîné OpenSearch

OCI Search avec OpenSearch fournit une prise en charge intégrée des modèles préentraînés OpenSearch.

Cette rubrique explique comment enregistrer et déployer n'importe lequel des modèles de transformateur de phrase préentraînés dans un cluster en spécifiant uniquement le nom du modèle. Pour obtenir la liste des modèles approuvés, reportez-vous à Modèles préentraînés. Pour obtenir une procédure de bout en bout sur l'utilisation d'un modèle préentraîné OpenSearch pour la recherche sémantique dans OCI Search avec OpenSearch, reportez-vous à Présentation de la recherche sémantique.

Prérequis

Avant de commencer, vous devez effectuer les opérations suivantes :

  • Sélectionnez l'un des modèles préentraînés pris en charge par OCI Search avec OpenSearch
  • Vérifiez que le cluster OpenSearch est version 2.11 ou ultérieure.
  • Mettez à jour les paramètres du cluster pour effectuer une recherche sémantique. L'exemple suivant inclut les paramètres recommandés :
    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
          }
        }
      }
    }

Etape 1 : Enregistrer le groupe de modèles

Les groupes de modèles vous permettent de gérer l'accès à des modèles spécifiques. L'enregistrement d'un groupe de modèles est facultatif. Cependant, si vous n'enregistrez pas, ML Commons crée un nouveau groupe de modèles pour vous. Nous vous recommandons donc d'enregistrer le groupe de modèles.

Enregistrez un groupe de modèles à l'aide de l'opération Enregistrer dans les API de groupe de modèles, comme indiqué dans l'exemple suivant :

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

Notez le message model_group_id renvoyé dans la réponse :

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

Etape 2 : Enregistrer le modèle

Pour enregistrer un modèle préentraîné, vous avez besoin des éléments suivants :
  • model_group_id : si vous avez terminé l'étape 1, il s'agit de la valeur de model_group_id pour la demande _register.
  • name : nom du modèle à utiliser pour le modèle préentraîné.
  • version : numéro de version du modèle préentraîné à utiliser.
  • model_format : format du modèle, TORCH_SCRIPT ou ONNX.

Enregistrez le modèle à l'aide de l'opération d'enregistrement à partir des API de modèle, comme indiqué dans l'exemple suivant :

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

Notez la valeur task_id renvoyée dans la réponse. Vous pouvez utiliser task_id pour vérifier le statut de l'opération.

Par exemple, à partir de la réponse suivante :

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

pour vérifier le statut de l'opération d'inscription, utilisez task_id avec l'opération Get des API de tâche, comme indiqué dans l'exemple suivant :

GET /_plugins/_ml/tasks/TuD6Zo0Bb0cPUYbz3Moz

Une fois l'opération d'inscription terminée, la valeur status dans la réponse à l'opération Get est COMPLETED, comme indiqué dans l'exemple suivant :

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

Notez la valeur model_id renvoyée dans la réponse à utiliser lors du déploiement du modèle.

Etape 3 : Déployer le modèle

Une fois l'opération d'inscription terminée pour le modèle, vous pouvez déployer le modèle vers le cluster à l'aide de l'opération de déploiement des API de modèle, en transmettant model_id à partir de la réponse de l'opération Get à l'étape précédente, comme indiqué dans l'exemple suivant :

POST /_plugins/_ml/models/cleMb4kBJ1eYAeTMFFg4/_deploy

Notez la valeur task_id renvoyée dans la réponse. Vous pouvez utiliser task_id pour vérifier le statut de l'opération.

Par exemple, à partir de la réponse suivante :

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

pour vérifier le statut de l'opération d'inscription, utilisez task_id avec l'opération Get des API des tâches, comme indiqué dans l'exemple suivant :

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

Une fois l'opération de déploiement terminée, la valeur status dans la réponse à l'opération Get est COMPLETED, comme indiqué dans l'exemple suivant :

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

Etape 4 : test du modèle

Utilisez l'API de prévision pour tester le modèle, comme indiqué dans l'exemple suivant pour un modèle d'intégration de texte :

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

La réponse contient des incorporations de texte pour la phrase fournie, comme indiqué dans l'exemple de réponse suivant :

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