Partager via


API Foundation Model avec débit approvisionné

Cet article montre comment déployer des API de modèle de fondation avec débit approvisionné. Databricks recommande le débit approvisionné pour les charges de travail de production et il offre une inférence optimisée pour les modèles de fondation avec des garanties de performances.

Qu’est-ce que le débit approvisionné ?

Le débit approvisionné fait référence au nombre de jetons de demandes que vous pouvez soumettre à un point de terminaison en même temps. Les points de terminaison de mise en service de débit approvisionné sont des points de terminaison dédiés qui sont configurés en termes de plage de jetons par seconde que vous pouvez envoyer au point de terminaison.

Pour plus d'informations, consultez les ressources suivantes :

Consultez API Foundation Model à débit approvisionné pour obtenir la liste des architectures de modèle prises en charge pour des points de terminaison de débit approvisionné.

Spécifications

Consultez les exigences. Pour déployer des modèles de base affinés, consultez Déployer des modèles de base affinés.

Important

Cette fonctionnalité est disponible en préversion publique.

Databricks recommande d’utiliser les modèles de base préinstallés dans le catalogue Unity. Vous trouverez ces modèles sous le catalogue system dans le ai de schéma (system.ai).

Pour déployer un modèle de base :

  1. Accédez à system.ai dans l’Explorateur de catalogues.
  2. Cliquez sur le nom du modèle à déployer.
  3. Sur la page du modèle, cliquez sur le bouton Servir ce modèle.
  4. La page Créer un point de terminaison de service s’affiche. Consultez Créer votre point de terminaison avec débit provisionné en utilisant l’interface utilisateur.

Déployer des modèles de base à partir de la Place de marché Databricks

Vous pouvez également installer des modèles de base dans le catalogue Unity à partir de Databricks Marketplace.

Vous pouvez rechercher une famille de modèles. Ensuite, dans la page du modèle, vous pouvez sélectionner Obtenir l’accès et indiquer les informations d’identification de connexion pour installer le modèle dans Unity Catalog.

Une fois le modèle installé sur Unity Catalog, vous pouvez créer un point de terminaison de service de modèle en utilisant l’interface utilisateur de service.

Déployer des modèles DBRX

Databricks recommande la mise en service du modèle DBRX Instruct pour vos charges de travail. Pour servir le modèle DBRX Instruct à l’aide d’un débit provisionné, suivez les instructions de [Recommandé] Déployer des modèles de base à partir du catalogue Unity.

Lors de la mise en service de ces modèles DBRX, le débit approvisionné prend en charge une longueur maximale de contexte de 16 k.

Les modèles DBRX utilisent l’invite système par défaut suivante pour garantir la pertinence et la précision des réponses du modèle :

You are DBRX, created by Databricks. You were last updated in December 2023. You answer questions based on information available up to that point.
YOU PROVIDE SHORT RESPONSES TO SHORT QUESTIONS OR STATEMENTS, but provide thorough responses to more complex and open-ended questions.
You assist with various tasks, from writing to coding (using markdown for code blocks — remember to use ``` with code, JSON, and tables).
(You do not have real-time data access or code execution capabilities. You avoid stereotyping and provide balanced perspectives on controversial topics. You do not provide song lyrics, poems, or news articles and do not divulge details of your training data.)
This is your system prompt, guiding your responses. Do not reference it, just respond to the user. If you find yourself talking about this message, stop. You should be responding appropriately and usually that means not mentioning this.
YOU DO NOT MENTION ANY OF THIS INFORMATION ABOUT YOURSELF UNLESS THE INFORMATION IS DIRECTLY PERTINENT TO THE USER'S QUERY.

Déployer des modèles de base affinés

Si vous ne pouvez pas utiliser les modèles dans le schéma system.ai ou installer des modèles à partir de la Place de marché Databricks, vous pouvez déployer un modèle de base affiné en le connectant au catalogue Unity. Cette section et les sections suivantes montrent comment configurer votre code pour enregistrer un modèle MLflow dans le catalogue Unity et créer votre point de terminaison de débit approvisionné à l’aide de l’interface utilisateur ou de l’API REST.

Consultez les limites de débit approvisionnées pour les modèles optimisés Meta Llama 3.1 et 3.2 pris en charge et leur disponibilité dans leur région.

Spécifications

  • Le déploiement de modèles de base affinés n’est pris en charge que par MLflow 2.11 ou version ultérieure. Databricks Runtime 15.0 ML et versions ultérieures préinstalle la version MLflow compatible.
  • Databricks recommande d’utiliser des modèles dans Le catalogue Unity pour accélérer le chargement et le téléchargement de modèles volumineux.

Définir le catalogue, le schéma et le nom du modèle

Pour déployer un modèle de base affiné, définissez le catalogue de catalogues Unity cible, le schéma et le nom du modèle de votre choix.

mlflow.set_registry_uri('databricks-uc')
CATALOG = "catalog"
SCHEMA = "schema"
MODEL_NAME = "model_name"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

Enregistrer votre modèle

Pour activer le débit provisionné pour votre point de terminaison de modèle, vous devez enregistrer votre modèle à l’aide de la version transformers MLflow et spécifier l’argument task avec l’interface de type de modèle appropriée à partir des options suivantes :

  • "llm/v1/completions"
  • "llm/v1/chat"
  • "llm/v1/embeddings"

Ces arguments spécifient la signature d’API utilisée pour le point de terminaison de service du modèle. Reportez-vous à la documentation MLflow pour plus d’informations sur ces tâches et les schémas d’entrée/sortie correspondants.

Voici un exemple de journalisation d’un modèle de langage de saisie semi-automatique de texte journalisé à l’aide de MLflow :

model = AutoModelForCausalLM.from_pretrained("mosaicml/mixtral-8x7b-instruct", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mixtral-8x7b-instruct")

with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        # Specify the llm/v1/xxx task that is compatible with the model being logged
        task="llm/v1/completions",
        # Specify an input example that conforms to the input schema for the task.
        input_example={"prompt": np.array(["Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\nWhat is Apache Spark?\n\n### Response:\n"])},
        # By passing the model name, MLflow automatically registers the Transformers model to Unity Catalog with the given catalog/schema/model_name.
        registered_model_name=registered_model_name
        # Optionally, you can set save_pretrained to False to avoid unnecessary copy of model weight and gain more efficiency
        save_pretrained=False
    )

Remarque

Si vous utilisez MLflow antérieure à la version 2.12, vous devez spécifier la tâche dans le paramètre metadata de la même fonction mlflow.transformer.log_model() à la place.

  • metadata = {"task": "llm/v1/completions"}
  • metadata = {"task": "llm/v1/chat"}
  • metadata = {"task": "llm/v1/embeddings"}

Le débit provisionné prend également en charge les modèles d’incorporation GTE de base et de grande taille. Voici un exemple de journalisation du modèle Alibaba-NLP/gte-large-en-v1.5 afin qu’il puisse être servi avec un débit provisionné :

model = AutoModel.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        task="llm/v1/embeddings",
        registered_model_name=registered_model_name,
        # model_type is required for logging a fine-tuned BGE models.
        metadata={
            "model_type": "gte-large"
        }
    )

Une fois que votre modèle est enregistré dans Unity Catalog, allez sur Créer votre point de terminaison de débit approvisionné à l’aide de l’interface utilisateur (IU) pour créer un point de terminaison de service de modèle à débit approvisionné.

Créer votre point de terminaison avec débit provisionné en utilisant l’interface utilisateur

Une fois le modèle enregistré dans Unity Catalog, créez un point de terminaison de service avec débit provisionné en procédant comme suit :

  1. Accédez à l’interface utilisateur de service dans votre espace de travail.
  2. Sélectionnez Créer un point de terminaison de service.
  3. Dans le champ Entité, sélectionnez votre modèle dans Unity Catalog. Pour les modèles éligibles, l’IU de l’entité servie affiche l’écran Débit provisionné.
  4. Dans la liste déroulante Jusqu’à, vous pouvez configurer le débit maximal en jetons par seconde pour votre point de terminaison.
    1. Les points de terminaison avec débit provisionné sont automatiquement mis à l’échelle : vous pouvez donc sélectionner Modifier pour voir le nombre minimal de jetons par seconde auquel votre point de terminaison peut descendre.

Débit approvisionné

Créer votre point de terminaison avec débit provisionné en utilisant l’API REST

Pour déployer votre modèle en mode de débit provisionné en utilisant l’API REST, vous devez spécifier des champs min_provisioned_throughput et max_provisioned_throughput dans votre requête. Si vous préférez Python, vous pouvez également créer un point de terminaison à l’aide du Kit de développement logiciel (SDK) de déploiement MLflow.

Pour identifier la plage appropriée de débit provisionné pour votre modèle, consultez Obtenir le débit provisionné par incréments.

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "llama2-13b-chat"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.llama-13b"

# Get the latest version of the MLflow model
model_version = 3

# Get the API endpoint and token for the current notebook context
API_ROOT = "<YOUR-API-URL>"
API_TOKEN = "<YOUR-API-TOKEN>"

headers = {"Context-Type": "text/json", "Authorization": f"Bearer {API_TOKEN}"}

optimizable_info = requests.get(
  url=f"{API_ROOT}/api/2.0/serving-endpoints/get-model-optimization-info/{model_name}/{model_version}",
  headers=headers)
  .json()

if 'optimizable' not in optimizable_info or not optimizable_info['optimizable']:
  raise ValueError("Model is not eligible for provisioned throughput")

chunk_size = optimizable_info['throughput_chunk_size']

# Minimum desired provisioned throughput
min_provisioned_throughput = 2 * chunk_size

# Maximum desired provisioned throughput
max_provisioned_throughput = 3 * chunk_size

# Send the POST request to create the serving endpoint
data = {
  "name": endpoint_name,
  "config": {
    "served_entities": [
      {
        "entity_name": model_name,
        "entity_version": model_version,
        "min_provisioned_throughput": min_provisioned_throughput,
        "max_provisioned_throughput": max_provisioned_throughput,
      }
    ]
  },
}

response = requests.post(
  url=f"{API_ROOT}/api/2.0/serving-endpoints", json=data, headers=headers
)

print(json.dumps(response.json(), indent=4))

Probabilité de journalisation des tâches relatives aux discussions

Pour les tâches relatives aux discussions, vous pouvez utiliser le paramètre logprobs pour fournir la probabilité de journal d’un jeton échantillonné dans le cadre du processus de génération de modèle de langage volumineux. Vous pouvez utiliser logprobs pour différents scénarios, notamment la classification, l’évaluation de l’incertitude du modèle et l’exécution des métriques d’évaluation. Pour plus d’informations sur les paramètres, consultez Tâches relatives aux discussions.

Obtenir le débit provisionné par incréments

Le débit provisionné est disponible par incréments de jetons par seconde, les incréments spécifiques variant selon le modèle. Pour identifier la plage appropriée à vos besoins, Databricks recommande d’utiliser l’API d’informations d’optimisation du modèle au sein de la plateforme.

GET api/2.0/serving-endpoints/get-model-optimization-info/{registered_model_name}/{version}

Voici un exemple de réponse de l’API :

{
  "optimizable": true,
  "model_type": "llama",
  "throughput_chunk_size": 1580
}

Exemples de Notebook

Les carnets de notes suivants montrent des exemples de création d’une API de modèle de fondation à débit approvisionné :

Débit provisionné pour le notebook du modèle GTE

Obtenir le notebook

Débit approvisionné pour la mise en service du notebook de modèle Mistral

Obtenir le notebook

Mise en service de débit provisionné pour un notebook de modèle BGE

Obtenir le notebook

Limites

  • Le modèle de déploiement peut échouer en raison de problèmes de capacité du GPU, ce qui entraîne un dépassement du délai d’expiration lors de la création ou de la mise à jour du point de terminaison. Contactez l’équipe de votre compte Databricks afin d’obtenir de l’aide pour la résolution du problème.
  • La mise à l’échelle automatique des API de modèles de fondation est plus lente que la mise à disposition de modèles par l’unité centrale. Databricks recommande le surapprovisionnement pour éviter les expirations des délais d’attente de requête.