Partager via


API Foundation Model avec débit approvisionné

Cet article montre comment déployer des API Foundation Model au 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 base avec des garanties de performances.

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

Le débit provisionné correspond au nombre de jetons de requêtes que vous pouvez simultanément soumettre à un point de terminaison. Les points de terminaison de mise en service de débit approvisionné sont des points de terminaison dédiés 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 Débit approvisionné pour obtenir la liste des architectures de modèle prises en charge pour les points de terminaison à débit approvisionné.

Spécifications

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

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 schéma ai (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 pour créer votre point de terminaison de débit provisionné à l’aide de 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 et à partir de la page modèle, vous pouvez sélectionner Obtenir l’accès et fournir des informations d’identification de connexion pour installer le modèle dans le catalogue Unity.

Une fois le modèle installé sur Unity Catalog, vous pouvez créer un point de terminaison pour le service du modèle à l’aide de l'UI 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 du 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 d’ajustement

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 limites de débit approvisionnées pour les modèles Meta Llama 3.1, 3.2 et 3.3 d’ajustement et leur disponibilité dans leur région.

Spécifications

  • Le déploiement de modèles de base d’ajustement 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 approvisionné 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 mise en 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 complétion de texte à 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 d’enregistrement du modèle Alibaba-NLP/gte-large-en-v1.5 afin qu’il puisse être servi avec un débit approvisionné :

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 votre modèle connecté dans le catalogue Unity, poursuivez Créer votre point de terminaison de débit approvisionné à l’aide de l’interface utilisateur pour créer un point de terminaison de service de modèle avec un débit provisionné.

Créer votre point de terminaison avec débit approvisionné 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 approvisionné 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 le catalogue Unity. Pour les modèles éligibles, l’interface utilisateur de l’entité servie affiche l’écran Débit provisionné.
  4. Dans la liste déroulante jusqu’à, vous pouvez configurer le nombre maximal de jetons par seconde pour votre point de terminaison.
    1. Les points de terminaison de débit provisionné évoluent automatiquement, vous pouvez donc sélectionner Modifier pour afficher le nombre minimum de jetons par seconde auquel votre point de terminaison peut être réduit.

Débit approvisionné

Créer votre point de terminaison de débit alloué à l’aide de l’API REST

Pour déployer votre modèle en mode de débit approvisionné 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 approvisionné par incréments.

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "prov-throughput-endpoint"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.foundation-model"

# 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é d’enregistrement des tâches de fin de conversation

Pour les tâches d’achèvement de conversation, vous pouvez utiliser le paramètre logprobs pour fournir la probabilité logarithmique d’un jeton échantillonné dans le cadre du processus de génération d'un grand modèle de langage. Vous pouvez utiliser logprobs pour divers scénarios, notamment la classification, l’évaluation de l’incertitude du modèle et l’exécution des indicateurs d’évaluation. Consultez la tâche de chat pour des détails sur les paramètres.

Obtenir le débit approvisionné par incréments

Le débit approvisionné 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 cahiers

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

Mise en service de débit approvisionné pour un notebook de modèle GTE

Obtenir le notebook

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

Obtenir le notebook

Le notebook suivant montre comment télécharger et inscrire le modèle Llama dispersé par DeepSeek R1 dans Unity Catalog, afin de pouvoir le déployer à l’aide d’un point de terminaison de débit approvisionné des API Foundation Model.

Débit approvisionné pour le notebook de modèle Llama dispersé par DeepSeek R1

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 pour les API de modèles fondamentaux est plus lente que l'exécution de modèles sur CPU. Databricks recommande le surapprovisionnement pour éviter les expirations des délais d’attente de requête.
  • GTE v1.5 (anglais) ne génère pas d’incorporations normalisées.