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 seus serviços do Snowpark Container Services (incluindo serviços de trabalho). 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 serviço de 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.

INSTANCE_FAMILY, Mapeamento da tabela de consumo do serviço Snowflake

vCPU

Memória (GiB)

Armazenamento (GiB)

Limite de largura de banda (Gbps)

GPU

Memória GPU por GPU (GiB)

Limite de nós

Descrição

CPU_X64_XS, . CPU | XS

1

6

100

Até 12,5

n/a

n/a

50

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

CPU_X64_S, . CPU | S

3

13

100

Até 12,5

n/a

n/a

50

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

CPU_X64_M, . CPU | M

6

28

100

Até 12,5

n/a

n/a

50

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

CPU_X64_L, . CPU | L

28

116

100

12,5

n/a

n/a

50

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

HIGHMEM_X64_S, . CPU de alta memória | S | S

6

58

100

AWS: Até 12,5, Azure: 8

n/a

n/a

50

Para aplicativos com uso intensivo de memória.

HIGHMEM_X64_M, . CPU de alta memória | M . (somente AWS)

28

240

100

12,5

n/a

n/a

50

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

HIGHMEM_X64_M, . CPU de alta memória | M . (somente Azure)

28

244

100

16

n/a

n/a

50

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

HIGHMEM_X64_L, . CPU de alta memória | L . (somente AWS)

124

984

100

50

n/a

n/a

20

A maior máquina de alta memória do AWS disponível para processamento de grandes volumes de dados em memória.

HIGHMEM_X64_L, . CPU de alta memória | L . (somente Azure)

92

654

100

32

n/a

n/a

20

A maior máquina de alta memória do Azure disponível para processamento de grandes volumes de dados em memória.

GPU_NV_S, . GPU | S . (somente AWS)

6

27

100

Até 10

1 NVIDIA A10G

24

10

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

GPU_NV_M, . GPU | M . (somente AWS)

44

178

100

40

4 NVIDIA A10G

24

10

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

GPU_NV_L, . GPU | L . (somente AWS)

92

1112

100

400

8 NVIDIA A100

40

Mediante solicitação

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

GPU_NV_XS, . GPU | XS . (somente Azure)

3

26

100

8

1 NVIDIA T4

16

10

Nosso menor tamanho de GPU NVIDIA Azure disponível para contêineres Snowpark para começar.

GPU_NV_SM, . GPU | SM . (somente Azure)

32

424

100

40

1 NVIDIA A10

24

10

Um tamanho menor de GPU NVIDIA Azure disponível para contêineres Snowpark para começar.

GPU_NV_2M, . GPU | 2M . (somente Azure)

68

858

100

80

2 NVIDIA A10

24

5

Otimizado para cenários de uso intensivo de GPU, como Pesquisa Visual Computacional ou LLMs/VLMs.

GPU_NV_3M, . GPU | 3M . (somente Azure)

44

424

100

40

2 NVIDIA A100

80

Mediante solicitação

Otimizado para cenários de uso intensivo de memória com GPU, como Pesquisa Visual Computacional ou LLMs/VLMs.

GPU_NV_SL, . GPU | SL . (somente Azure)

92

858

100

80

4 NVIDIA A100

80

Mediante solicitação

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 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, exceto os serviços de trabalho. Os serviços de trabalho continuam a ser executados 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. 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 é 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 = <value>
    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 serviço de trabalho em andamento, a execução do trabalho falhará. Snowflake não reiniciará o serviço de 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 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 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, exceto os serviços de trabalho. Os serviços de trabalho continuam a ser executados 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 todos os serviços agendados (incluindo serviços de trabalho).

    USAGE

    Permite a criação de serviços 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 atualiza regularmente os nós do pool de computação mais antigos para garantir desempenho e segurança ideais. Isso inclui atualizações do sistema operacional, melhorias de driver e correções de segurança. A manutenção envolve a substituição de nós desatualizados por atualizados a cada poucas semanas, com cada nó ativo por até um mês.

Janela de manutenção

A manutenção programada ocorre de segunda a quinta-feira, das 11 PM às 5 AM, horário local na região de implementação, com uma janela prevista de 6 horas.

Interrupção do serviço

Durante a manutenção, todas as instâncias de serviço nos pools de computação afetados serão recriadas automaticamente nos novos nós. Os serviços em andamento serão interrompidos e deverão ser reiniciados pelos clientes assim que a manutenção for concluída.

Atenção

Interrupções de serviço durante uma janela de manutenção ou atualizações críticas não são cobertas pela Política de suporte e Acordo de nível de serviço da Snowflake.

Práticas recomendadas para minimizar o tempo de inatividade

  • Use técnicas de alta disponibilidade, incluindo a garantia de que cada serviço tenha várias instâncias que podem ser distribuídas entre vários nós de computação para evitar pontos únicos de falha.

  • Monitore os cronogramas de manutenção e planeje tarefas críticas fora dos períodos de manutenção.

  • Implemente procedimentos de reinicialização automatizados para serviços de trabalho.

  • Execute backups ou pontos de verificação regulares.

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.

Nota

O Snowflake oferece suporte a montagens de estágio para uso em contêineres de aplicativo. O estágio interno Snowflake é um dos tipos de volume de armazenamento compatíveis.

Para desempenho ideal, o Snowflake agora limita o número total de montagens de volume de estágio a oito por nó de pool de computação, independentemente de esses volumes pertencerem à mesma instância de serviço, ao mesmo serviço ou a serviços diferentes.

Quando o limite de um nó é atingido, o Snowflake não usa esse nó para iniciar novas instâncias de serviço que usam um volume de estágio. Se o limite for atingido em todos os nós no pool de computação, o Snowflake não poderá iniciar sua instância de serviço. Neste cenário, quando você executa o comando SHOW SERVICE CONTAINERS IN SERVICE, o Snowflake retorna o status PENDING com a mensagem ”Não programável devido a recursos insuficientes”.

Para acomodar esse limite de cota de montagem de estágio em um nó, em alguns casos, você pode aumentar o número máximo de nós que você solicita a um pool de computação. Isso garante que nós adicionais estejam disponíveis para o Snowflake iniciar suas instâncias de serviço.

Diretrizes e limitações

  • Permissão CREATE COMPUTE POOL: se não for possível criar um pool de computação com a função atual, consulte o administrador da conta para obter 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. O número de nós que você pode criar em sua conta (independentemente do número de pools de computação) é limitado a 120. Além disso, há um limite no número de nós permitidos para cada família de instância (consulte a coluna Limite de nós na tabela de famílias de instância). Se você vir uma mensagem de erro como Requested number of nodes <#> exceeds the node limit for the account, você encontrou esses limites. Para obter mais informações, entre em contato com o representante da sua conta.