Gérer des points de terminaison de mise en service des modèles
Cet article décrit comment gérer les points de terminaison de mise en service des modèles à l’aide de l’interface utilisateur Serving (Mise en service) et de l’API REST. Consultez Points de terminaison de mise en service dans la référence de l’API REST.
Pour créer des points de terminaison de service de modèle, utilisez l’une des options suivantes :
- Créer des points de terminaison pour des modèles personnalisés.
- Créer des points de terminaison de mise en service de modèles d’IA générative.
Obtenir l’état du point de terminaison du modèle
Dans l’interface utilisateur Serving (Mise en service), vous pouvez vérifier l’état d’un point de terminaison à partir de l’indicateur État du point de terminaison de mise en service en haut de la page des détails de votre point de terminaison.
Vous pouvez utiliser vérifier l’état et les détails d’un point de terminaison de manière programmatique à l’aide de l’API REST ou du Kit de développement logiciel (SDK) MLflow Deployments
API REST
GET /api/2.0/serving-endpoints/{name}
L’exemple suivant crée un point de terminaison qui sert la première version du my-ads-model
modèle inscrit dans le registre du modèle catalogue Unity. Vous devez fournir le nom complet du modèle, y compris le catalogue parent et le schéma tels que . catalog.schema.example-model
Dans l’exemple de réponse suivant, le champ state.ready
est « PRÊT », ce qui signifie que le point de terminaison est prêt à recevoir du trafic. Le champ state.update_state
est NOT_UPDATING
et pending_config
n’est plus retourné, car la mise à jour a été terminée avec succès.
{
"name": "unity-model-endpoint",
"creator": "customer@example.com",
"creation_timestamp": 1666829055000,
"last_updated_timestamp": 1666829055000,
"state": {
"ready": "READY",
"update_state": "NOT_UPDATING"
},
"config": {
"served_entities": [
{
"name": "my-ads-model",
"entity_name": "myCatalog.mySchema.my-ads-model",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": false,
"state": {
"deployment": "DEPLOYMENT_READY",
"deployment_state_message": ""
},
"creator": "customer@example.com",
"creation_timestamp": 1666829055000
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "my-ads-model",
"traffic_percentage": 100
}
]
},
"config_version": 1
},
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"permission_level": "CAN_MANAGE"
}
Kit de développement logiciel (SDK) de déploiements MLflow
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="chat")
assert endpoint == {
"name": "chat",
"creator": "alice@company.com",
"creation_timestamp": 0,
"last_updated_timestamp": 0,
"state": {...},
"config": {...},
"tags": [...],
"id": "88fd3f75a0d24b0380ddc40484d7a31b",
}
Arrêter un point de terminaison de mise en service de modèle
Vous pouvez arrêter temporairement un point de terminaison de mise en service de modèle et le démarrer ultérieurement. Lorsqu’un point de terminaison est arrêté, les ressources approvisionnées pour ce point sont arrêtées et le point de terminaison n’est pas en mesure de traiter les requêtes tant qu’il n’est pas redémarré. Seuls les points de terminaison qui servent des modèles personnalisés, ne sont pas optimisés pour l’itinéraire et n’ont pas de mises à jour en cours peuvent être arrêtés. Les points de terminaison arrêtés ne sont pas comptabilisés dans le quota de ressources. Les requêtes envoyées à un point de terminaison arrêté retournent une erreur 400.
Vous pouvez arrêter un point de terminaison dans la page de détails du point de terminaison, dans l’interface utilisateur Serving (Mise en service).
- Cliquez sur le point de terminaison à arrêter.
- Dans le coin supérieur droit, cliquez sur Arrêter.
Vous pouvez également arrêter un point de terminaison de mise en service de manière programmatique en utilisant l’API REST comme suit :
POST /api/2.0/serving-endpoints/{name}/config:stop
Lorsque vous êtes prêt à démarrer un point de terminaison de mise en service de modèle arrêté, vous pouvez le faire à partir de la page des détails du point de terminaison dans l’interface utilisateur Serving.
- Cliquez sur le point de terminaison à démarrer.
- Dans le coin supérieur droit, cliquez sur Démarrer.
Vous pouvez également démarrer un point de terminaison de mise en service arrêté de manière programmatique en utilisant l’API REST comme suit :
POST /api/2.0/serving-endpoints/{name}/config:start
Supprimer un point de terminaison de mise en service de modèles
Pour désactiver la mise en service pour un modèle, vous pouvez supprimer le point de terminaison sur lequel il est servi.
Vous pouvez supprimer un point de terminaison dans la page de détails du point de terminaison, dans l’interface utilisateur Serving (Mise en service).
- Cliquez sur Mise en service dans la barre latérale.
- Cliquez sur le point de terminaison à supprimer.
- Cliquez sur le menu kebab en haut et sélectionnez Supprimer.
Sinon, vous pouvez supprimer un point de terminaison de mise en service de manière programmatique à l’aide de l’API REST ou du Kit de développement logiciel (SDK) MLflow Deployments
API REST
DELETE /api/2.0/serving-endpoints/{name}
Kit de développement logiciel (SDK) de déploiements MLflow
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")
Déboguer votre point de terminaison de mise en service de modèles
Pour déboguer les problèmes liés au point de terminaison, vous pouvez extraire :
- Les journaux de build de conteneur de serveur de modèle
- Les journaux du serveur de modèle
Ces journaux sont également accessibles à partir de l’IU Points de terminaison sous l’onglet Journaux.
Pour les journaux de génération d’un modèle servi, vous pouvez utiliser la requête suivante. Pour plus d’informations, consultez le guide de débogage du service model.
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
“config_version”: 1 // optional
}
Pour les journaux du serveur de modèle pour un modèle de service, vous pouvez utiliser la requête suivante :
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs
{
“config_version”: 1 // optional
}
Gérer les autorisations sur votre point de terminaison de service de modèles
Vous devez avoir au moins l’autorisation PEUT GÉRER sur un point de terminaison de service pour modifier les autorisations. Pour plus d’informations sur les niveaux d’autorisation, consultez ACL de point de terminaison de service.
Obtenez la liste des autorisations sur le point de terminaison de service.
databricks permissions get servingendpoints <endpoint-id>
Accorder à l’utilisateur(-trice)jsmith@example.com
l’autorisation PEUT DEMANDER sur le point de terminaison de service.
databricks permissions update servingendpoints <endpoint-id> --json '{
"access_control_list": [
{
"user_name": "jsmith@example.com",
"permission_level": "CAN_QUERY"
}
]
}'
Vous pouvez également modifier les autorisations de point de terminaison de service à l’aide de l’API Autorisations.
Obtenir un point de terminaison de schéma de mise en service de modèles
Important
La prise en charge du service des schémas de requête de point de terminaison est disponible en Préversion publique. Cette fonctionnalité est disponible dans Mise en service de modèles de régions.
Un schéma de requête de point d'accès est une description formelle du point de terminaison à l'aide de la spécification OpenAPI standard au format JSON. Il contient des informations sur le point de terminaison, notamment son chemin d'accès, des détails permettant de l'interroger, comme le format du corps de la requête et de la réponse, et le type de données pour chaque champ. Ces informations peuvent être utiles pour les scénarios de reproductibilité ou lorsque vous avez besoin d'informations sur le point de terminaison, mais que vous n'êtes pas le créateur ou le propriétaire du point de terminaison original.
Pour obtenir le schéma de point de terminaison de service du modèle, le modèle servi doit avoir une signature de modèle enregistrée et le point de terminaison doit être dans un état READY
.
Les exemples suivants montrent comment obtenir par programme le schéma du point de terminaison du service de modèle à l'aide de l'API REST. Pour connaître les schémas de point de terminaison de service de fonctionnalités, consultez Qu’est-ce que la fonctionnalité de mise en service Databricks ?.
Le schéma renvoyé par l’API se présente sous la forme d’un objet JSON conforme à la spécification OpenAPI.
ACCESS_TOKEN="<endpoint-token>"
ENDPOINT_NAME="<endpoint name>"
curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"
Détails de la réponse au schéma
La réponse est une spécification OpenAPI au format JSON, généralement incluant des champs tels que openapi
, info
, servers
et paths
. La réponse au schéma étant un objet JSON, vous pouvez l'analyser à l'aide de langages de programmation courants et générer du code client à partir de la spécification à l'aide d'outils tiers.
Vous pouvez également visualiser la spécification OpenAPI à l’aide d’outils tiers tels que Swagger Editor.
Les principaux champs de la réponse sont les suivants :
- Le champ
info.title
affiche le nom du point de terminaison de service. - Le champ
servers
contient toujours un objet, généralement le champurl
qui est l’URL de base du point de terminaison. - L’objet
paths
de la réponse contient tous les chemins d’accès pris en charge pour un point de terminaison. Les clés de l’objet sont l’URL du chemin d’accès. Chaquepath
peut prendre en charge plusieurs formats d’entrées. Ces entrées sont répertoriées dans le champoneOf
.
Voici un exemple de réponse du schéma de point de terminaison :
{
"openapi": "3.1.0",
"info": {
"title": "example-endpoint",
"version": "2"
},
"servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint"}],
"paths": {
"/served-models/vanilla_simple_model-2/invocations": {
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"dataframe_split": {
"type": "object",
"properties": {
"columns": {
"description": "required fields: int_col",
"type": "array",
"items": {
"type": "string",
"enum": [
"int_col",
"float_col",
"string_col"
]
}
},
"data": {
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{
"type": "integer",
"format": "int64"
},
{
"type": "number",
"format": "double"
},
{
"type": "string"
}
]
}
}
}
},
"params": {
"type": "object",
"properties": {
"sentiment": {
"type": "number",
"format": "double",
"default": "0.5"
}
}
}
},
"examples": [
{
"columns": [
"int_col",
"float_col",
"string_col"
],
"data": [
[
3,
10.4,
"abc"
],
[
2,
20.4,
"xyz"
]
]
}
]
},
{
"type": "object",
"properties": {
"dataframe_records": {
"type": "array",
"items": {
"required": [
"int_col",
"float_col",
"string_col"
],
"type": "object",
"properties": {
"int_col": {
"type": "integer",
"format": "int64"
},
"float_col": {
"type": "number",
"format": "double"
},
"string_col": {
"type": "string"
},
"becx_col": {
"type": "object",
"format": "unknown"
}
}
}
},
"params": {
"type": "object",
"properties": {
"sentiment": {
"type": "number",
"format": "double",
"default": "0.5"
}
}
}
}
}
]
}
}
}
},
"responses": {
"200": {
"description": "Successful operation",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"predictions": {
"type": "array",
"items": {
"type": "number",
"format": "double"
}
}
}
}
}
}
}
}
}
}
}
}