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

La fonction de recherche OCI avec OpenSearch prend en charge les modèles préentraînés OpenSearch.

Cette rubrique décrit comment enregistrer et déployer tous les modèles de transformateur de phrases préentraînés dans un cluster en spécifiant uniquement le nom du modèle. Voir Modèles préentraînés pour obtenir la liste des modèles approuvés. Pour une procédure de bout en bout sur l'utilisation d'un modèle préentraîné OpenSearch pour la recherche sémantique dans la recherche OCI avec OpenSearch, voir Procédure pas à pas de recherche sémantique.

Préalables

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 la recherche OCI avec OpenSearch
  • Vérifiez que la grappe OpenSearch est version 2.11 ou plus récente.
  • Mettez à jour les paramètres de grappe pour effectuer une recherche sémantique. L'exemple suivant présente 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
          }
        }
      }
    }

Étape 1 : Enregistrer le groupe de modèles

Les groupes de modèles permettent de gérer l'accès à des modèles spécifiques. L'enregistrement d'un groupe de modèles est facultatif. Toutefois, si vous n'enregistrez pas de groupe de modèles, 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 illustré dans l'exemple suivant :

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

Notez la valeur model_group_id retournée dans la réponse :

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

Étape 2 : Enregistrer le modèle

Pour enregistrer un modèle préentraîné, vous devez disposer 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 préentraîné à utiliser.
  • 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 Enregistrer à partir des API de modèle, comme illustré 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 retourné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'enregistrement, utilisez task_id avec l'opération Obtenir des API de tâche, comme illustré dans l'exemple suivant :

GET /_plugins/_ml/tasks/TuD6Zo0Bb0cPUYbz3Moz

Une fois l'opération d'enregistrement terminée, la valeur status dans la réponse à l'opération Get est COMPLETED, comme illustré 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 retournée dans la réponse à utiliser lors du déploiement du modèle.

Étape 3 : Déployer le modèle

Une fois l'opération d'enregistrement terminée pour le modèle, vous pouvez déployer le modèle dans la grappe à 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 illustré dans l'exemple suivant :

POST /_plugins/_ml/models/cleMb4kBJ1eYAeTMFFg4/_deploy

Notez la valeur task_id retourné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'enregistrement, utilisez task_id avec l'opération Obtenir des API de tâches, comme illustré 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 illustré 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
}

Étape 4 : Tester le modèle

Utilisez l'API de prédiction pour tester le modèle, comme illustré 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 plongements de texte pour la phrase fournie, comme illustré 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,
            ...
          ]
        }
      ]
    }
  ]
}