Snowpark Container Services: como trabalhar com pools de computação

Um pool de computação é uma coleção de um ou mais nós de máquinas virtuais (VM) nos quais o Snowflake executa suas tarefas e serviços do Snowpark Container Services. Você cria um pool de computação usando o comando CREATE COMPUTE POOL. Em seguida, você o especifica ao criar um serviço ou executar um trabalho.

Criação de um pool de computação

Um pool de computação é uma construção em nível de conta, análoga a um warehouse virtual Snowflake. O escopo de nomenclatura do pool de computação é a sua conta. Ou seja, você não pode ter vários pools de computação com o mesmo nome na sua conta.

As informações mínimas necessárias para criar um pool de computação incluem o seguinte:

  • O tipo de máquina a ser provisionado para os nós do pool de computação

  • Os nós mínimos para iniciar o pool de computação

  • O número máximo de nós para os quais o pool de computação pode ser dimensionado (o Snowflake gerencia o dimensionamento).

Se você espera uma carga substancial ou picos repentinos de atividade nos serviços que pretende executar no pool de computação, defina uma contagem mínima de nós maior que 1. Essa abordagem garante que nós adicionais estejam prontamente disponíveis quando necessário, em vez de aguardar o início do dimensionamento automático.

Definir um limite máximo de nós evita que um número inesperadamente grande de nós seja adicionado ao seu pool de computação pelo dimensionamento automático do Snowflake. Isso pode ser crucial em cenários como picos de carga inesperados ou problemas no código que podem fazer com que o Snowflake aloque um número maior de nós do pool de computação do que o planejado originalmente.

O seguinte comando CREATE COMPUTE POOL cria um pool de computação de um nó:

CREATE COMPUTE POOL tutorial_compute_pool
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = CPU_X64_XS;
Copy

INSTANCE_FAMILY identifica o tipo de máquina que você deseja provisionar para nós de computador no pool de computação. Especificar INSTANCE_FAMILY na criação de um pool de computação é semelhante a especificar o tamanho do warehouse (XSMALL, SMALL, MEDIUM, LARGE e assim por diante) ao criar um warehouse. A tabela a seguir lista os tipos de máquinas disponíveis.

Mapeamento da tabela de consumo

INSTANCE_FAMILY

vCPU

Memória (GiB)

Armazenamento (GiB)

GPU

Memória GPU por GPU (GiB)

Descrição

CPU | XS

CPU_X64_XS

2

8

250

n/a

n/a

Menor instância disponível para Snowpark Containers. Ideal para economizar custos e começar.

CPU | S

CPU_X64_S

4

16

250

n/a

n/a

Ideal para hospedar vários serviços/trabalhos enquanto economiza custos.

CPU | M

CPU_X64_M

8

32

250

n/a

n/a

Ideal para ter um aplicativo full stack ou múltiplos serviços

CPU | L

CPU_X64_L

32

128

250

n/a

n/a

Para aplicativos que precisam de um número incomumente grande de CPUs, memória e armazenamento.

CPU de alta memória | S

HIGHMEM_X64_S

8

64

250

n/a

n/a

Para aplicativos com uso intensivo de memória.

CPU de alta memória | M

HIGHMEM_X64_M

32

256

250

n/a

n/a

Para hospedar vários aplicativos com uso intenso de memória em uma única máquina.

CPU de alta memória | L

HIGHMEM_X64_L

128

1024

250

n/a

n/a

A maior máquina com muita memória disponível para processar grandes dados na memória.

GPU | S

GPU_NV_S

8

32

250

1 NVIDIA A10G

24

Nosso menor tamanho NVIDIA GPU disponível para Snowpark Containers para começar.

GPU | M

GPU_NV_M

48

192

250

4 NVIDIA A10G

24

Otimizado para cenários de uso intensivo de GPU, como Visão computacional ou LLMs/VLMs

GPU | L

GPU_NV_L

192

2048

250

8 NVIDIA A100

40

Maior instância GPU para casos de GPU especializados e avançados, como LLMs e clustering etc.

Para obter informações sobre famílias de instâncias disponíveis, consulte CREATE COMPUTE POOL.

Dimensionamento automático de nós do pool de computação

Depois de criar um pool de computação, o Snowflake inicia o número mínimo de nós e cria automaticamente nós adicionais até o máximo permitido. Isso é chamado de dimensionamento automático. Novos nós são alocados quando os nós em execução não podem suportar nenhuma carga de trabalho adicional. Por exemplo, suponha que duas instâncias de serviço estejam em execução em dois nós do seu pool de computação. Se você executar outro serviço no mesmo pool de computação, os requisitos de recursos adicionais poderão fazer com que o Snowflake inicie um nó adicional.

No entanto, se nenhum serviço ou trabalho for executado em um nó por um período específico, o Snowflake removerá automaticamente o nó, garantindo que o pool de computação mantenha os nós mínimos necessários, mesmo após a remoção.

Gerenciamento de um pool de computação

O Snowpark Container Services fornece os seguintes comandos para gerenciar pools de computação:

  • Monitoramento: use o comando SHOW COMPUTE POOLS para obter informações sobre pools de computação.

  • Operação: use o comando ALTER COMPUTE POOL para alterar o estado de um pool de computação.

    ALTER COMPUTE POOL <name> { SUSPEND | RESUME | STOP ALL }
    
    Copy

    Quando você suspende um pool de computação, o Snowflake suspende todos os serviços, mas os trabalhos continuam em execução até atingirem um estado terminal (DONE ou FAILED), após o qual os nós do pool de computação são liberados.

    Um pool de computação suspenso deve ser retomado antes que você possa iniciar um novo serviço ou trabalho. Se o pool de computação estiver configurado para retomada automática (com a propriedade AUTO_RESUME definida como TRUE), o Snowflake retoma automaticamente o pool quando um serviço ou trabalho é enviado a ele. Caso contrário, será necessário executar o comando ALTER COMPUTE POOL para retomar manualmente o pool de computação.

  • Modificação: use o comando ALTER COMPUTE POOL para alterar as propriedades do pool de computação.

    ALTER COMPUTE POOL <name> SET propertiesToAlter
    propertiesToAlter := { MIN_NODES | MAX_NODES | AUTO_RESUME | AUTO_SUSPEND_SECS | COMMENT }
    
    Copy

    Ao diminuir MAX_NODES, observe os seguintes efeitos potenciais:

    • O Snowflake pode precisar encerrar uma ou mais instâncias de serviço e reiniciá-las em outros nós disponíveis no pool de computação. Se MAX_NODES estiver definido como muito baixo, o Snowflake poderá não conseguir agendar determinadas instâncias de serviço.

    • Se o nó encerrado tiver uma execução de trabalho em andamento, a execução do trabalho falhará. Snowflake não reiniciará o trabalho.

      Exemplo:

      ALTER COMPUTE POOL MYPOOL SET MIN_NODES = 2  MAX_NODES = 2;
      
      Copy
  • Remoção: use o comando DROP COMPUTE POOL para remover um pool de computação.

    Exemplo:

    DROP COMPUTE POOL <name>
    
    Copy

    Você deve interromper todos os serviços em execução antes de descartar um pool de computação.

  • Listagem de pools de computação e visualização de propriedades: use os comandos SHOW COMPUTE POOLS e DESCRIBE COMPUTE POOL. Para ver exemplos, consulte Exibição de pools de computação.

Ciclo de vida do pool de computação

Um pool de computação pode estar em qualquer um dos seguintes estados:

  • IDLE: o pool de computação tem o número desejado de nós de máquinas virtuais (VM), mas nenhum serviço ou trabalho está agendado. Neste estado, o dimensionamento automático pode reduzir o pool de computação para o tamanho mínimo devido à falta de atividade.

  • ACTIVE: o pool de computação tem pelo menos um serviço em execução ou programado para execução nele. O pool pode aumentar (até o máximo de nós) ou diminuir (até o mínimo de nós) em resposta ao carregamento ou às ações do usuário.

  • SUSPENDED: o pool atualmente não contém nós de máquinas virtuais em execução, mas se a propriedade do pool de computação AUTO_RESUME estiver definida como TRUE, o pool será retomado automaticamente quando um serviço ou trabalho for agendado.

Os seguintes estados são transitórios:

  • STARTING: quando você cria ou retoma um pool de computação, o pool de computação entra no estado STARTING até que pelo menos um nó seja provisionado.

  • STOPPING: quando você suspende um pool de computação (usando ALTER COMPUTE POOL), o pool de computação entra no estado STOPPING até que o Snowflake libere todos os nós no pool de computação. Quando você suspende um pool de computação, o Snowflake suspende todos os serviços, mas os trabalhos continuam em execução até atingirem um estado terminal (DONE ou FAILED), após o qual os nós do pool de computação são liberados.

  • RESIZING: quando você cria um pool de computação, inicialmente ele entra no estado STARTING. Depois de provisionar um nó, ele entra no estado RESIZING até que o número mínimo de nós (conforme especificado em CREATE COMPUTE POOL) seja provisionado. Quando você altera um pool de computação (ALTER COMPUTE POOL) e atualiza os valores mínimo e máximo do nó, o pool entra no estado RESIZING até que os nós mínimos sejam provisionados. Observe que o dimensionamento automático de um pool de computação também coloca o pool de computação no estado RESIZING.

Privilégios do pool de computação

Quando você trabalha com pools de computação, o seguinte modelo de privilégio se aplica:

  • Para criar um pool de computação em uma conta, a função atual precisa do privilégio CREATE COMPUTE POOL na conta. Se você criar um pool, como proprietário você terá a permissão OWNERSHIP, que concede controle total sobre esse pool de computação. Ter OWNERSHIP de um pool de computação não implica nenhuma permissão em outros pools de computação.

  • Para gerenciamento de pool de computação, há suporte para os seguintes privilégios (recursos):

    Privilégio

    Uso

    MODIFY

    Permite alterar quaisquer propriedades do pool de computação, incluindo a alteração do tamanho.

    MONITOR

    Permite visualizar o uso do pool de computação, incluindo a descrição das propriedades do pool de computação.

    OPERATE

    Permite alterar o estado do pool de computação (suspender, retomar). Além disso, permite interromper quaisquer serviços e trabalhos agendados.

    USAGE

    Permite a criação de serviços e trabalhos no pool de computação. Observe que quando um pool de computação está em estado suspenso e tem sua propriedade AUTO_RESUME definida como verdadeira, uma função com permissão USAGE no pool de computação pode acionar implicitamente a retomada do pool de computação ao iniciar ou retomar um serviço, mesmo que a função não tenha a permissão OPERATE.

    OWNERSHIP

    Concede controle total sobre o pool de computação. Somente uma única função pode ter este privilégio sobre um objeto específico de cada vez.

    ALL [ PRIVILEGES ]

    Concede todos os privilégios, exceto OWNERSHIP, no pool de computação.

Manutenção do pool de computação

Como parte da manutenção de rotina da infraestrutura interna, a Snowflake realiza atualizações em seus pools de computação mais antigos. Este processo envolve tarefas essenciais, como atualizações do sistema operacional, aprimoramentos de unidade e a resolução de quaisquer vulnerabilidades de segurança presentes nos nós do pool de computação.

Durante esses procedimentos de manutenção, os nós do pool de computação são colocados offline e substituídos por nós atualizados periodicamente (a cada poucas semanas). Um nó do pool de computação permanece ativo por no máximo um mês, após o qual o Snowflake irá retirar o nó e substituí-lo por um recém-atualizado. Quando isso ocorrer:

  • Todas as instâncias de serviço atualmente em execução nesses pools de computação serão recriadas automaticamente nos novos nós.

  • Todos os trabalhos em andamento sofrerão interrupções e precisarão ser reiniciados pelos clientes depois que o pool de computação estiver operacional novamente.

A janela de manutenção esperada é de aproximadamente 30 minutos.

Essas atualizações de infraestrutura interna ocorrem todas as terças, quartas, quintas e sextas-feiras, das 8h às 1h, horário local relativo à região.

Como os serviços são agendados em um pool de computação

No momento de criar um serviço, você pode optar por executar diversas instâncias para gerenciar a carga de entrada. Snowflake usa as seguintes diretrizes gerais ao agendar suas instâncias de serviço em nós de pool de computação:

  • Todos os contêineres em uma instância de serviço sempre são executados em um único nó do pool de computação. Ou seja, uma instância de serviço nunca se estende por vários nós.

  • Quando você executa várias instâncias de serviço, o Snowflake pode executar essas instâncias de serviço no mesmo nó ou em nós diferentes dentro do pool de computação. Ao tomar essa decisão, o Snowflake considera quaisquer requisitos de recursos físicos especificados (como memória e GPU), conforme descrito no arquivo de especificação de serviço (consulte Campo containers.resources).

    Por exemplo, suponha que cada nó do pool de computação forneça 8 GB de memória. Se a especificação do seu serviço incluir um requisito de memória 6 GB e você optar por executar duas instâncias ao criar um serviço, o Snowflake não poderá executar as duas instâncias no mesmo nó. Nesse caso, o Snowflake agenda cada instância em um nó separado no pool de computação para atender aos requisitos de memória.

Diretrizes e limitações

  • Permissão CREATE COMPUTE POOL: se você não conseguir criar um pool de computação na função atual, use a função ACCOUNTADMIN para conceder permissão. Por exemplo:

    GRANT CREATE COMPUTE POOL ON ACCOUNT TO ROLE <role_name> [WITH GRANT OPTION];
    
    Copy

    Para obter mais informações, consulte GRANT <privilégios>.

  • Limite por conta em nós do pool de computação. Para qualquer família de instâncias (consulte CREATE COMPUTE POOL), há um limite por conta no número total de nós que podem estar ativos a qualquer momento. Se você vir uma mensagem de erro como - Requested number of nodes <#> exceeds the node limit for the account, você encontrou esse limite. Para obter mais informações, entre em contato com o representante da sua conta.