Snowpark Container Services : utilisation des pools de calcul¶
Un pool de calcul est une collection d’un ou plusieurs nœuds de machines virtuelles (VM) sur lesquels Snowflake exécute vos services Snowpark Container Services (y compris les services de tâche). Vous créez un pool de calcul à l’aide de la commande CREATE COMPUTE POOL. Vous le spécifiez ensuite lors de la création d’un service ou de l’exécution d’un service de tâche.
Création d’un pool de calcul¶
Un pool de calcul est une construction au niveau du compte, analogue à un entrepôt virtuel Snowflake. L’espace de nommage du pool de calcul est votre compte. En d’autres termes, vous ne pouvez pas avoir plusieurs pools de calcul portant le même nom dans votre compte.
Les informations minimales requises pour créer un pool de calcul sont les suivantes :
Le type de machine à provisionner pour les nœuds du pool de calcul
Le nombre minimum de nœuds pour démarrer un pool de calcul.
Le nombre maximum de nœuds que le pool de calcul peut atteindre (Snowflake gère la mise à l’échelle).
Si vous vous attendez à une charge importante ou à des pics d’activité soudains sur les services que vous avez l’intention d’exécuter dans votre pool de calcul, vous pouvez définir un nombre minimum de nœuds supérieur à 1. Cette approche garantit que des nœuds supplémentaires sont immédiatement disponibles en cas de besoin, au lieu d’attendre le démarrage de la mise à l’échelle automatique.
La définition d’une limite maximale de nœuds permet d’éviter qu’un grand nombre de nœuds ne soient ajoutés à votre pool de calcul par la mise à l’échelle automatique de Snowflake. Cela peut s’avérer crucial dans des scénarios tels que des pics de charge inattendus ou des problèmes dans votre code qui pourraient amener Snowflake à allouer un plus grand nombre de nœuds de pool de calcul que prévu à l’origine.
La commande CREATE COMPUTE POOL suivante crée un pool de calcul à un nœud :
CREATE COMPUTE POOL tutorial_compute_pool
MIN_NODES = 1
MAX_NODES = 1
INSTANCE_FAMILY = CPU_X64_XS;
INSTANCE_FAMILY identifie le type de machine à provisionner pour les nœuds informatiques du pool de calcul. La spécification de INSTANCE_FAMILY lors de la création d’un pool de calcul est similaire à la spécification de la taille de l’entrepôt (XSMALL, SMALL, MEDIUM, LARGE et ainsi de suite) lors de la création d’un entrepôt. Le tableau suivant répertorie les types de machines disponibles.
INSTANCE_FAMILY, mappage de la Table de consommation du service Snowflake
vCPU
Mémoire (GiB)
Stockage (GiB)
Limite de bande passante (Gb/s)
GPU
Mémoire GPU par GPU (GiB)
Limite du nœud
Description
CPU_X64_XS, . CPU | XS
1
6
100
Jusqu’à 12,5
s/o
s/o
50
La plus petite instance disponible pour les conteneurs Snowpark. Idéal pour réaliser des économies et démarrer.
CPU_X64_S, . CPU | S
3
13
100
Jusqu’à 12,5
s/o
s/o
50
Idéal pour héberger plusieurs services/tâches tout en réduisant les coûts.
CPU_X64_M, . CPU | M
6
28
100
Jusqu’à 12,5
s/o
s/o
50
Idéal pour les applications full stack ou les services multiples
CPU_X64_L, . CPU | L
28
116
100
12,5
s/o
s/o
50
Pour les applications qui nécessitent un nombre anormalement élevé de CPUs, de mémoire et de stockage.
HIGHMEM_X64_S, . mémoire élevée CPU | S
6
58
100
AWS : jusqu’à 12,5, Azure : 8
s/o
s/o
50
Pour les applications qui utilisent beaucoup de mémoire.
HIGHMEM_X64_M, . Mémoire élevée CPU | M . (AWS uniquement)
28
240
100
12,5
s/o
s/o
50
Pour héberger plusieurs applications qui utilisent beaucoup en mémoire sur une seule machine.
HIGHMEM_X64_M, . Mémoire élevée CPU | M . (Azure uniquement)
28
244
100
16
s/o
s/o
50
Pour héberger plusieurs applications qui utilisent beaucoup en mémoire sur une seule machine.
HIGHMEM_X64_L, . Mémoire élevée CPU | L . (AWS uniquement)
124
984
100
50
s/o
s/o
20
La machine AWS qui dispose de la plus grande mémoire disponible pour traiter de grandes quantités de données en mémoire.
HIGHMEM_X64_L, . Mémoire élevée CPU | L . (Azure uniquement)
92
654
100
32
s/o
s/o
20
La machine Azure qui dispose de la plus grande mémoire disponible pour traiter de grandes quantités de données en mémoire.
GPU_NV_S, . GPU | S . (AWS uniquement)
6
27
100
Jusqu’à 10
1 NVIDIA A10G
24
10
Notre plus petite taille de GPU NVIDIA disponible pour les conteneurs Snowpark pour commencer.
GPU_NV_M, . GPU | M . (AWS uniquement)
44
178
100
40
4 NVIDIA A10G
24
10
Optimisé pour les scénarios d’utilisation intensive de GPU comme la vision par ordinateur ou LLMs/VLMs
GPU_NV_L, . GPU | L . (AWS uniquement)
92
1112
100
400
8 NVIDIA A100
40
À la demande
La plus grande instance de GPU pour les cas de GPU spécialisés et avancés tels que LLMs et clustering, etc.
GPU_NV_XS, . GPU | XS . (Azure uniquement)
3
26
100
8
1 NVIDIA T4
16
10
Notre plus petite taille de GPU NVIDIA Azure disponible pour les conteneurs Snowpark pour commencer.
GPU_NV_SM, . GPU | SM . (Azure uniquement)
32
424
100
40
1 NVIDIA A10
24
10
Une taille plus petite de GPU NVIDIA Azure disponible pour les conteneurs Snowpark pour commencer.
GPU_NV_2M, . GPU | 2M . (Azure uniquement)
68
858
100
80
2 NVIDIA A10
24
5
Optimisé pour les scénarios d’utilisation intensive de GPU comme la vision par ordinateur ou LLMs/VLMs
GPU_NV_3M, . GPU | 3M . (Azure uniquement)
44
424
100
40
2 NVIDIA A100
80
À la demande
Optimisé pour les scénarios d’utilisation intensive de GPU comme la vision par ordinateur ou LLMs/VLMs
GPU_NV_SL, . GPU | SL . (Azure uniquement)
92
858
100
80
4 NVIDIA A100
80
À la demande
La plus grande instance de GPU pour les cas de GPU spécialisés et avancés tels que LLMs et clustering, etc.
Pour plus d’informations sur les familles d’instances disponibles, voir CREATE COMPUTE POOL.
Mise à l’échelle automatique des nœuds d’un pool de calcul¶
Après avoir créé un pool de calcul, Snowflake lance le nombre minimum de nœuds et crée automatiquement des nœuds supplémentaires jusqu’au maximum autorisé. C’est ce qu’on appelle la mise à l’échelle automatique. De nouveaux nœuds sont attribués lorsque les nœuds en service ne peuvent plus supporter de charge de travail supplémentaire. Par exemple, supposons que deux instances de service s’exécutent sur deux nœuds de votre pool de calcul. Si vous exécutez un autre service dans le même pool de calcul, les besoins en ressources supplémentaires peuvent amener Snowflake à démarrer un nœud supplémentaire.
Toutefois, si aucun service n’est exécuté sur un nœud pendant une durée déterminée, Snowflake supprime automatiquement le nœud, garantissant ainsi que le pool de calcul conserve le nombre minimum de nœuds requis, même après la suppression.
Gestion d’un pool de calcul¶
Snowpark Container Services fournit les commandes suivantes pour gérer les pools de calcul :
Surveillance : utilisez la commande SHOW COMPUTE POOLS pour obtenir des informations sur les pools de calcul.
Fonctionnement : utilisez la commande ALTER COMPUTE POOL pour modifier l’état d’un pool de calcul.
ALTER COMPUTE POOL <name> { SUSPEND | RESUME | STOP ALL }
Lorsque vous suspendez un pool de calcul, Snowflake suspend tous les services à l’exception des services de tâches. Les services de tâches continuent de fonctionner jusqu’à ce qu’ils atteignent un état terminal (DONE ou FAILED), après quoi les nœuds de calcul sont libérés.
Un pool de calcul suspendu doit être repris avant que vous ne puissiez démarrer un nouveau service. Si le pool de calcul est configuré pour une reprise automatique (avec la propriété AUTO_RESUME définie sur TRUE), Snowflake reprend automatiquement le pool lorsqu’un service lui est soumis. Sinon, vous devez exécuter la commande ALTER COMPUTE POOL pour reprendre manuellement le pool de calcul.
Modification : utilisation de la commande ALTER COMPUTE POOL pour modifier les propriétés du pool de calcul.
ALTER COMPUTE POOL <name> SET propertiesToAlter = <value> propertiesToAlter := { MIN_NODES | MAX_NODES | AUTO_RESUME | AUTO_SUSPEND_SECS | COMMENT }
Lorsque vous diminuez MAX_NODES, tenez compte des effets potentiels suivants :
Snowflake peut avoir besoin de mettre fin à une ou plusieurs instances de service et de les redémarrer sur d’autres nœuds disponibles dans le pool de calcul. Si MAX_NODES est défini sur une valeur trop faible, Snowflake peut être incapable de planifier certaines instances de service.
Si le nœud interrompu avait un service de tâche en cours d’exécution, l’exécution de la tâche échouera. Snowflake ne redémarrera pas le service de tâche.
Exemple :
ALTER COMPUTE POOL MYPOOL SET MIN_NODES = 2 MAX_NODES = 2;
Suppression : utilisez la commande DROP COMPUTE POOL pour supprimer un pool de calcul.
Exemple :
DROP COMPUTE POOL <name>
Vous devez arrêter tous les services en cours d’exécution avant de pouvoir supprimer un pool de calcul.
Répertorier les pools de calcul et afficher les propriétés : utilisez les commandes SHOW COMPUTE POOLS et DESCRIBE COMPUTE POOL. Pour des exemples, voir Afficher les pools de calcul.
Cycle de vie d’un pool de calcul¶
Un pool de calcul peut se trouver dans l’un des états suivants :
IDLE : le pool de calcul dispose du nombre souhaité de nœuds de machines virtuelles (VM), mais aucun service n’est planifié. Dans cet état, la mise à l’échelle automatique peut réduire le pool de calcul à la taille minimale en raison d’un manque d’activité.
ACTIVE : le pool de calcul a au moins un service en cours d’exécution ou planifié. Le pool peut augmenter (jusqu’au nombre maximal de nœuds) ou diminuer (jusqu’au nombre minimal de nœuds) en fonction de la charge ou des actions de l’utilisateur.
SUSPENDED : le pool ne contient actuellement aucun nœud de machine virtuelle en cours d’exécution, mais si la propriété du pool de calcul AUTO_RESUME est définie sur TRUE, le pool reprendra automatiquement lorsqu’un service sera planifié.
Les états suivants sont transitoires :
STARTING : lorsque vous créez ou reprenez un pool de calcul, celui-ci entre dans l’état STARTING jusqu’à ce qu’au moins un nœud soit provisionné.
STOPPING : lorsque vous suspendez un pool de calcul (en utilisant ALTER COMPUTE POOL), le pool de calcul entre dans l’état STOPPING jusqu’à ce que Snowflake ait libéré tous les nœuds du pool de calcul. Lorsque vous suspendez un pool de calcul, Snowflake suspend tous les services à l’exception des services de tâches. Les services de tâches continuent de fonctionner jusqu’à ce qu’ils atteignent un état terminal (DONE ou FAILED), après quoi les nœuds de calcul sont libérés.
RESIZING : lorsque vous créez un pool de calcul, il entre initialement dans l’état STARTING. Après avoir provisionné un nœud, il entre dans l’état RESIZING jusqu’à ce que le nombre minimum de nœuds (tel que spécifié dans CREATE COMPUTE POOL) soit provisionné. Lorsque vous modifiez un pool de calcul (ALTER COMPUTE POOL) et que vous mettez à jour les valeurs minimales et maximales des nœuds, le pool entre dans l’état RESIZING jusqu’à ce que le nombre minimal de nœuds soit provisionné. Notez que la mise à l’échelle automatique d’un pool de calcul place également le pool de calcul dans l’état RESIZING.
Privilèges de pool de calcul¶
Lorsque vous travaillez avec des pools de calcul, le modèle de privilège suivant s’applique :
Pour créer un pool de calcul dans un compte, le rôle actuel doit disposer du privilège CREATE COMPUTE POOL sur le compte. Si vous créez un pool, vous disposez, en tant que propriétaire, de l’autorisation OWNERSHIP, qui vous permet d’exercer un contrôle total sur ce pool de calcul. Le fait d’avoir l’autorisation OWNERSHIP sur un pool de calcul n’implique aucune permission sur les autres pools de calcul.
Pour la gestion du pool de calcul, les privilèges (capacités) suivants sont pris en charge :
Privilège
Utilisation
MODIFY
Permet de modifier toutes les propriétés du pool de calcul, y compris la taille.
MONITOR
Permet de visualiser l’utilisation du pool de calcul, y compris la description des propriétés du pool de calcul.
OPERATE
Permet de modifier l’état du pool de calcul (suspension, reprise). En outre, il permet d’arrêter tous les services planifiés (y compris les services de tâches).
USAGE
Permet de créer des services dans le pool de calcul. Notez que lorsqu’un pool de calcul est suspendu et que sa propriété AUTO_RESUME est définie sur true, un rôle disposant de l’autorisation USAGE sur le pool de calcul peut implicitement déclencher la reprise du pool de calcul lorsqu’il démarre ou reprend un service, même si le rôle ne dispose pas de l’autorisation OPERATE.
OWNERSHIP
Donne un contrôle total sur le pool de calcul. Un seul rôle peut détenir ce privilège sur un objet spécifique à la fois.
ALL [ PRIVILEGES ]
Accorde tous les privilèges, sauf OWNERSHIP, sur le pool de calcul.
Maintenance du pool de calcul¶
Dans le cadre de la maintenance de routine de l’infrastructure interne, Snowflake met régulièrement à jour les anciens nœuds du pool de calcul pour garantir des performances et une sécurité optimales. Cela inclut les mises à niveau du système d’exploitation, les améliorations des pilotes et les correctifs de sécurité. La maintenance consiste à remplacer les nœuds obsolètes par des nœuds mis à jour toutes les quelques semaines, chaque nœud étant actif jusqu’à un mois.
Fenêtre de maintenance¶
La maintenance programmée a lieu tous les lundis au jeudi, de 23 h à 5 h du matin (heure locale) dans la région de déploiement, avec une fenêtre prévue de 6 heures.
Interruption de service¶
Pendant la maintenance, toutes les instances de service dans les pools de calcul affectés seront automatiquement recréées sur les nouveaux nœuds. Les services en cours seront interrompus et devront être redémarrés par les clients une fois la maintenance terminée.
Attention
Les interruptions de service pendant une fenêtre de maintenance ou des mises à jour critiques ne sont pas couvertes par le niveau de service défini dans Politique de support et accord de niveau de service de Snowflake.
Bonnes pratiques pour limiter les temps d’arrêt¶
Utilisez des techniques de haute disponibilité, notamment en s’assurant que chaque service dispose de plusieurs instances pouvant être réparties sur plusieurs nœuds de calcul pour éviter les points de défaillance uniques.
Surveillez les calendriers de maintenance et planifiez les tâches critiques en dehors des fenêtres de maintenance.
Mettez en œuvre des procédures de redémarrage automatisées pour les services de travail.
Effectuez des sauvegardes ou des points de contrôle réguliers.
Comment les services sont planifiés sur un pool de calcul¶
Au moment de créer un service, vous pouvez choisir d’exécuter plusieurs instances pour gérer la charge entrante. Snowflake utilise les directives générales suivantes pour planifier vos instances de service sur les nœuds du pool de calcul :
Tous les conteneurs d’une instance de service s’exécutent toujours sur un seul nœud de pool de calcul. En d’autres termes, une instance de service ne s’étend jamais sur plusieurs nœuds.
Lorsque vous exécutez plusieurs instances de service, Snowflake peut les exécuter sur le même nœud ou sur différents nœuds au sein du pool de calcul. Lorsque cette décision est prise, Snowflake prend en compte toutes les exigences spécifiées en matière de ressources matérielles (telles que la mémoire et le GPU) comme indiqué dans le fichier de spécification du service (voir champ containers.resources).
Par exemple, supposons que chaque nœud de votre pool de calcul dispose de 8 GB de mémoire. Si la spécification de votre service inclut une exigence de mémoire 6 GB, et que vous choisissez d’exécuter deux instances lors de la création d’un service, Snowflake ne peut pas exécuter les deux instances sur le même nœud. Dans ce cas, Snowflake planifie chaque instance sur un nœud distinct au sein du pool de calcul afin de répondre aux exigences en matière de mémoire.
Note
Snowflake prend en charge les montages de zones de préparation à utiliser par les conteneurs d’application. La zone de préparation interne de Snowflake est l’un des types de volumes de stockage pris en charge.
Pour des performances optimales, Snowflake limite désormais le nombre total de montages de volume de la zone de préparation jusqu’à huit par nœud de pool de calcul, que ces volumes appartiennent ou non à la même instance de service, au même service ou à des services différents.
Lorsque la limite d’un nœud est atteinte, Snowflake n’utilise pas ce nœud pour démarrer de nouvelles instances de service qui utilisent un volume de zone de préparation. Si la limite est atteinte sur tous les nœuds du pool de calcul, Snowflake ne pourra pas démarrer votre instance de service. Dans ce scénario, lorsque vous exécutez la commande SHOW SERVICE CONTAINERS IN SERVICE, Snowflake revient au statut PENDING avec le message « Non planifiable en raison de ressources insuffisantes ».
Pour prendre en charge cette limite d’allocation de montage de zone de préparation sur un nœud, dans certains cas, vous pouvez augmenter le nombre maximal de nœuds que vous demandez pour un pool de calcul. Cela garantit que des nœuds supplémentaires sont disponibles pour que Snowflake puisse démarrer vos instances de service.
Lignes directrices et limitations¶
Autorisation CREATE COMPUTE POOL : si vous ne pouvez pas créer un pool de calcul sous le rôle actuel, consultez votre administrateur de compte pour accorder la permission. Par exemple :
GRANT CREATE COMPUTE POOL ON ACCOUNT TO ROLE <role_name> [WITH GRANT OPTION];
Pour plus d’informations, consultez GRANT <privilèges>.
Limite par compte sur les nœuds du pool de calcul. Le nombre de nœuds que vous pouvez créer dans votre compte (quel que soit le nombre de pools de calcul) est limité à 120. De plus, il existe une limite au nombre de nœuds autorisés pour chaque famille d’instances (voir la colonne Limite de nœuds dans le tableau des familles d’instances). Si vous obtenez un message d’erreur du type
Requested number of nodes <#> exceeds the node limit for the account
, vous avez rencontré ces limites. Pour plus d’informations, contactez votre représentant de compte.