Partager via


API Foundation Model avec débit approvisionné

Cet article montre comment déployer des modèles à l’aide d’API Foundation Model débit provisionné. Databricks recommande le débit provisionné pour les charges de travail de production et fournit 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 API Foundation Model à débit approvisionné pour obtenirlist la liste des architectures de modèle prises en charge pour les points de terminaison à débit approvisionné.

Exigences

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 Unity Catalog. Vous trouverez ces modèles sous le catalogsystem dans le schemaai (system.ai).

Pour déployer un modèle de base :

  1. Accédez à system.ai dans l’Explorateur Catalog.
  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 sur Unity Catalog à partir de Databricks Marketplace.

Vous pouvez rechercher une famille de modèles et à partir de la page du modèle, vous pouvez selectGet accéder et fournir des identifiants credentials 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 de servir le 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 de Unity Catalog.

Lors du traitement de ces modèles DBRX, le débit approvisionné prend en charge une longueur de contexte allant jusqu’à 16 ko.

Les modèles DBRX utilisent l’invite système par défaut suivante pour garantir la pertinence et la précision dans les réponses de 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 system.aischema 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 à Unity Catalog. Cette section et les sections suivantes montrent comment set votre code pour enregistrer un modèle MLflow dans le Catalog 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 affinés et leur disponibilité dans leur région.

Exigences

  • 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 Unity Catalog pour accélérer le chargement et le téléchargement de modèles volumineux.

Définir catalog, schema et le nom du modèle

Pour déployer un modèle de base affiné, définissez l'CatalogcatalogUnity cible, schemaet 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 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 metadata paramètre 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 connecté à Unity Catalog, continuez sur 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 provisionné en utilisant l’interface utilisateur

Après que le modèle ait été journalisé dans Unity Catalog, créez un endpoint de service à débit provisionné en procédant comme suit :

  1. Accédez à l’interface utilisateur de service dans votre espace de travail.
  2. SelectCréer un point de terminaison de service.
  3. Dans le champ Entité, select votre modèle dans Unity Catalog. 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 avec débit provisionné sont automatiquement mis à l’échelle : vous pouvez donc sélectionner selectModifier pour voir le nombre minimal de jetons par seconde auquel votre point de terminaison peut descendre.

débit provisionné

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 provisionné à l’aide de l’API REST, vous devez spécifier min_provisioned_throughput et max_provisioned_throughput champs 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 Get débit provisionné 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é de journalisation des tâches d’achèvement 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 métriques d’évaluation. Consultez la tâche de chat pour des détails sur les paramètres.

Get le débit provisionné par incréments

Le débit provisionné est disponible par incréments de jetons par seconde avec des incréments spécifiques variables par modèle. Pour identifier la plage appropriée pour 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 provisionné pour un notebook de modèle GTE

Get bloc-notes

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

Get ordinateur portable

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

Get ordinateur portable

Limitations

  • 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 update 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 délais d’expiration des demandes.

  • Seules les architectures de modèle GTE v1.5 (anglais) et BGE v1.5 (anglais) sont prises en charge.

  • GTE v1.5 (anglais) n'intègre pas d'intégrations generate normalisées.