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 tâches et services Snowpark Container Services. 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’une 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.

Mappage de tableau de consommation

INSTANCE_FAMILY

vCPU

Mémoire (GiB)

Stockage (GiB)

GPU

Mémoire GPU par GPU (GiB)

Max. Limit

Description

CPU | XS

CPU_X64_XS

2

8

250

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 | S

CPU_X64_S

4

16

250

s/o

s/o

50

Idéal pour héberger plusieurs services/tâches tout en réduisant les coûts.

CPU | M

CPU_X64_M

8

32

250

s/o

s/o

20

Idéal pour les applications full stack ou les services multiples

CPU | L

CPU_X64_L

32

128

250

s/o

s/o

20

Pour les applications qui nécessitent un nombre anormalement élevé de CPUs, de mémoire et de stockage.

Mémoire élevée CPU | S

HIGHMEM_X64_S

8

64

250

s/o

s/o

20

Pour les applications qui utilisent beaucoup de mémoire.

Mémoire élevée CPU | M

HIGHMEM_X64_M

32

256

250

s/o

s/o

20

Pour héberger plusieurs applications qui utilisent beaucoup en mémoire sur une seule machine.

Mémoire élevée CPU | L

HIGHMEM_X64_L

128

1024

250

s/o

s/o

20

La machine qui dispose de la plus grande mémoire disponible pour traiter de grandes quantités de données en mémoire.

GPU | S

GPU_NV_S

8

32

250

1 NVIDIA A10G

24

10

Notre plus petite taille de GPU NVIDIA disponible pour les conteneurs Snowpark pour commencer.

GPU | M

GPU_NV_M

48

192

250

4 NVIDIA A10G

24

5

Optimisé pour les scénarios d’utilisation intensive de GPU comme la vision par ordinateur ou LLMs/VLMs

GPU | L

GPU_NV_L

96

1152

250

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.

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 aucune tâche ou 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, mais les tâches continuent de s’exécuter jusqu’à ce qu’elles atteignent un état final (DONE ou FAILED), après quoi les nœuds du pool de calcul sont libérés.

    Un pool de calcul suspendu doit être repris avant que vous ne puissiez démarrer un nouveau service ou une nouvelle tâche. 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’une tâche ou 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
    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 une tâche en cours d’exécution, l’exécution de la tâche échouera. Snowflake ne redémarrera pas la 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 aucune tâche ni 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’une tâche ou 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, mais les tâches continuent de s’exécuter jusqu’à ce qu’elles atteignent un état final (DONE ou FAILED), après quoi les nœuds du pool 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 toutes les tâches et tous les services planifiés.

    USAGE

    Permet de créer des services et des tâches 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 son infrastructure interne, Snowflake effectue des mises à jour sur ses anciens pools de calcul. Ce processus implique des tâches essentielles telles que la mise à niveau du système d’exploitation, l’amélioration des lecteurs et la résolution de toutes les failles de sécurité présentes dans les nœuds du pool de calcul.

Au cours de ces procédures de maintenance, les nœuds du pool de calcul sont mis hors ligne et remplacés périodiquement (toutes les quelques semaines) par des nœuds mis à jour. Un nœud de pool de calcul reste actif pendant un mois au maximum, après quoi Snowflake le retire et le remplace par un nœud nouvellement mis à jour. Lorsque cela se produit :

  • Toutes les instances de service fonctionnant actuellement dans ces pools de calcul seront automatiquement recréées sur les nouveaux nœuds.

  • Toutes les tâches en cours seront perturbées et devront être relancées par les clients une fois que le pool de calcul sera à nouveau opérationnel.

La fenêtre de maintenance prévue est d’environ 30 minutes.

Ces mises à jour de l’infrastructure interne ont lieu tous les mardis, mercredis, jeudis et vendredis entre 8h et 13h, heure locale de la région.

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.

Lignes directrices et limitations

  • Autorisation CREATE COMPUTE POOL : si vous ne pouvez pas créer un pool de calcul sous le rôle actuel, utilisez le rôle ACCOUNTADMIN 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. Pour toute famille d’instance donnée (voir CREATE COMPUTE POOL), il existe une limite par compte sur le nombre total de nœuds qui peuvent être actifs à tout moment. Si vous obtenez un message d’erreur du type - Requested number of nodes <#> exceeds the node limit for the account, vous avez rencontré cette limite. Pour plus d’informations, contactez votre représentant de compte.