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 ];
Copy

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 :

  1. Dans le menu de navigation, sélectionnez Surveillance » Services et tâches.

  2. Dans l’onglet Services, sélectionnez votre service pour voir la page de détails du service.

  3. L’onglet Aperçu affiche les informations sur le service, notamment le pool de calcul, les points de terminaison et le nombre d’instances.

  4. 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';
Copy

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;
Copy

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);
Copy

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';
Copy

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;
Copy

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;
Copy

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;
Copy

Vérification

Pour confirmer que votre pool est correctement configuré pour HA, vérifiez la colonne placement_group :

DESCRIBE COMPUTE POOL my_service_pool;
Copy