Gestion et mise à l’échelle des services¶
Une fois qu’un modèle est déployé dans Snowpark Container Services (SPCS), vous devez gérer son cycle de vie, sa consommation de ressources et sa fiabilité. Cette page couvre les opérations standard, l’observabilité et la configuration de la haute disponibilité pour les charges de travail de production.
Gestion des services¶
Snowpark Container Services propose une interface SQL de gestion des services. Vous pouvez utiliser les commandes DESCRIBE SERVICE et ALTER SERVICE avec les services SPCS créés par Snowflake Model Serving comme vous le feriez pour gérer n’importe quel autre service SPCS. Par exemple, vous pouvez :
Changer MIN_INSTANCES et d’autres propriétés d’un service
Supprimer un service
Partager un service avec un autre compte
Changer la propriété d’un service (le nouveau propriétaire doit avoir accès READ au modèle)
Note
Si le propriétaire d’un service perd l’accès au modèle sous-jacent pour une raison quelconque, le service cesse de fonctionner après un redémarrage. Il continuera à fonctionner jusqu’à ce qu’il soit redémarré.
Pour garantir la reproductibilité et la débogabilité, vous ne pouvez pas modifier la spécification d’un service d’inférence existant. Vous pouvez cependant copier la spécification, la personnaliser et utiliser la spécification personnalisée pour créer votre propre service pour héberger le modèle. Cependant, cette méthode ne protège pas le modèle sous-jacent contre la suppression. En outre, elle ne suit pas la lignée. Il est préférable de permettre à Snowflake Model Serving de créer des services.
Mettre à l’échelle les services¶
Note
À partir de snowflake-ml-python 1.25.0, vous pouvez définir les limites de mise à l’échelle de votre service d’inférence en définissant min_instances et max_instances dans la méthode create_service.
Comment fonctionne la mise à l’échelle automatique ?¶
Le service s’initialise avec le nombre de nœuds spécifié dans min_instances et s’adapte dynamiquement depuis votre plage définie en fonction du volume de trafic en temps réel et de l’utilisation du matériel.
Échelle à zéro (suspension automatique) : si min_instances est défini sur 0 (valeur par défaut), le service sera automatiquement suspendu si aucun trafic n’est détecté pendant 30 minutes.
Latence de la mise à l’échelle : les déclencheurs de mise à l’échelle s’activent généralement après une minute de remplissage de la condition requise. Notez que le temps de mise à l’échelle total comprend cette période de déclenchement plus le temps nécessaire pour provisionner et initialiser de nouvelles instances de service.
Bonnes pratiques en matière de configuration¶
Paramètre |
Stratégie recommandée |
|---|---|
min_instances |
Définissez ce paramètre sur 1 ou plus pour les charges de travail de production afin de garantir une disponibilité immédiate et d’éviter les retards liés au démarrage à froid. |
max_instances |
Définissez ce paramètre pour répondre aux pics de demande tout en limitant la consommation de ressources et les coûts. |
Suspension de services¶
Par défaut, le paramètre min_instances = 0 permet au service de se suspendre automatiquement après 30 minutes d’inactivité. Les requêtes entrantes déclencheront une reprise, avec un délai total déterminé par la disponibilité du pool de calcul et le temps de chargement du modèle (délai de démarrage).
Pour suspendre ou reprendre manuellement un service, utilisez la commande ALTER SERVICE.
ALTER SERVICE my_service [ SUSPEND | RESUME ];
Suppression de modèles¶
Vous pouvez gérer les modèles et les versions de modèles comme d’habitude avec l’interface SQL ou l’API Python, à la condition qu’un modèle ou une version de modèle utilisé(e) par un service (qu’il soit en cours d’exécution ou suspendu) ne puisse pas être supprimé(e). Pour supprimer un modèle ou une version de modèle, supprimez d’abord le service.
Surveiller les services¶
Lors de l’exécution de modèles dans Snowpark Container Services, vous pouvez surveiller la santé du service et résoudre les problèmes en accédant aux journaux et aux métriques des conteneurs. Les services Model Serving génèrent des journaux qui peuvent vous aider à comprendre le comportement des services, à diagnostiquer les erreurs et à optimiser les performances.
Pour obtenir des informations complètes sur la surveillance des services SPCS, y compris l’accès aux métriques et aux journaux, consultez Surveillance des services.
Dans Snowsight¶
Vous pouvez surveiller les services Model Serving dans Snowsight :
Dans le menu de navigation, sélectionnez Surveillance » Services et tâches.
Dans l’onglet Services, sélectionnez votre service pour voir la page de détails du service.
L’onglet Aperçu affiche les informations sur le service, notamment le pool de calcul, les points de terminaison et le nombre d’instances.
Les onglets Journaux, Métriques et Événements fournissent des journaux, des mesures de performances et des événements de service (tels que le provisionnement et les arrêts des instances). Filtrez les résultats par instance et par nom de conteneur, selon vos besoins.
Accès aux journaux des services¶
Vous pouvez accéder aux journaux de vos services Model Serving en utilisant l’une des méthodes suivantes :
Utilisation de la fonction d’aide au service¶
Model Serving comprend une fonction d’aide intégrée qui récupère les journaux du tableau des événements pour les services en cours d’exécution ou suspendus :
-- Retrieve logs using the service helper function
SELECT * FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_LOGS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
Interroger directement le tableau des événements¶
Si un tableau des événements est configuré pour votre compte, vous pouvez y effectuer directement une requête pour récupérer les journaux du service :
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service logs
SELECT TIMESTAMP, RESOURCE_ATTRIBUTES, RECORD_ATTRIBUTES, VALUE
FROM <current_event_table_for_your_account>
WHERE timestamp > dateadd(hour, -1, current_timestamp())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'LOG'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 10;
Utilisation de la fonction système (instances en cours d’exécution uniquement)¶
Pour le débogage en temps réel des conteneurs actifs, vous pouvez utiliser la fonction SYSTEM$GET_SERVICE_LOGS :
-- Retrieve logs from a specific service instance
SELECT SYSTEM$GET_SERVICE_LOGS('model_service_name', '0', 'model-inference', 10);
Note
Le nom de conteneur pour les services d’inférence de modèles est model-inference. Pour résoudre les problèmes liés à la création d’images, utilisez model-build comme nom de conteneur.
Accès aux métriques de service¶
Les services Model Serving émettent des métriques de performances et de santé qui peuvent vous aider à surveiller l’utilisation des ressources, les taux de requête, la latence et d’autres caractéristiques opérationnelles. Ces métriques sont capturées dans le tableau des événements et peuvent être interrogées pour analyser les performances du service au fil du temps.
Pour plus d’informations sur les métriques de service SPCS, consultez Accès aux métriques de service du tableau des événements.
Utilisation de la fonction d’aide au service¶
Les services Model Serving comprennent une fonction d’aide intégrée qui récupère les métriques du tableau des événements pour les services en cours d’exécution ou suspendus :
-- Retrieve metrics using the service helper function
SELECT *
FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_METRICS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
Interroger directement le tableau des événements¶
Vous pouvez interroger directement le tableau des événements pour récupérer et filtrer des métriques spécifiques :
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service metrics
SELECT
timestamp,
RESOURCE_ATTRIBUTES:"snow.service.container.instance" as instance,
RESOURCE_ATTRIBUTES:"snow.service.container.name" as container,
RECORD:metric:"name" as metric,
value
FROM my_event_table_db.my_event_table_schema.my_event_table
WHERE timestamp > DATEADD(hour, -1, CURRENT_TIMESTAMP())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'METRIC'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 100;
Tolérance aux pannes¶
Dans tout système distribué, des échecs se produisent. Pour les charges de travail critiques, il appartient aux utilisateurs de configurer le service pour qu’il soit résistant aux échecs de nœuds et de zones.
Résilience face aux échecs de nœuds¶
Pour tolérer les échecs de nœuds standard, Snowflake recommande un sur-provisionnement de 50 % ou le maintien d’un minimum de 3 instances (la valeur la plus élevée étant retenue).
Exemple : si vous avez besoin de 4 instances pour prendre en charge le pic de trafic, vous devez provisionner 6 instances.
Résilience face aux échecs de zones¶
Pour les charges de travail critiques qui nécessitent une résilience face à un échec de zone complet, vous pouvez utiliser un :doc:` pool de calcul </sql-reference/sql/create-compute-pool>` distribué lors de la création d’un service. Les pools de calcul distribués sont créés avec le paramètre PLACEMENT_GROUP défini sur DISTRIBUTED. Pour plus d’informations sur les pools de calcul distribués, voir Placement du pool de calcul.
Guide de configuration¶
Convertir un pool existant¶
Avertissement
Vous ne pouvez pas modifier ce paramètre sur un pool actif. Vous devez d’abord le suspendre.
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
SET PLACEMENT_GROUP = 'DISTRIBUTED';
ALTER COMPUTE POOL my_pool RESUME;
Rétablir un pool existant¶
Avertissement
Vous ne pouvez pas modifier ce paramètre sur un pool actif. Vous devez d’abord le suspendre.
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
UNSET PLACEMENT_GROUP;
ALTER COMPUTE POOL my_pool RESUME;
Vérification¶
Pour confirmer que votre pool est correctement configuré pour HA, vérifiez la colonne placement_group :
DESCRIBE COMPUTE POOL my_service_pool;