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

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

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

    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;
      
      Copy
  • Suppression : utilisez la commande DROP COMPUTE POOL pour supprimer un pool de calcul.

    Exemple :

    DROP COMPUTE POOL <name>
    
    Copy

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

    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.