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 (conhecido como a família de instâncias) a ser provisionada 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.

Para criar um pool de computação usando Snowsight ou SQL:

Snowsight:
  1. Selecione Admin » Compute pools.

  2. Selecione seu nome de usuário na parte inferior da barra de navegação e alterne para a função ACCOUNTADMIN ou qualquer função que tenha permissão para criar um pool de computação.

  3. Selecione + Compute Pool.

  4. Na New compute pool UI, especifique as informações necessárias (o nome do pool de computação, a família de instâncias e o limite de nós).

  5. Selecione Create Compute Pool.

SQL:

Execute o comando CREATE COMPUTE POOL.

Por exemplo, o comando a seguir 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

A família de instâncias identifica o tipo de máquina que você deseja provisionar para os nós de computador no pool de computação. Especificar a família de instâncias 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 (GB)

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_SL, . 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 . (AWS apenas, exceto nas regiões de Paris e Osaka)

6

27

300 (NVMe)

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 . (somenteAWS, exceto nas regiões de Paris e Osaka)

44

178

3,4 TB (NVMe)

40

4 NVIDIA A10G

24

10

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

GPU_NV_L, . GPU | L . (AWS apenas, disponível somente nas regiões AWS US West e US East mediante solicitação; disponibilidade limitada pode ser possível em outras regiões mediante solicitação)

92

1112

6,8 TB (NVMe)

400

8 NVIDIA A100

40

Mediante solicitação

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

GPU_NV_XS, . GPU | XS . (somente Azure, exceto nas regiões do Norte da Suíça e Norte dos UAE)

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, exceto na região Central US)

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, exceto na região Central US)

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, exceto nas regiões Norte da Europa e Norte dos UAE)

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, exceto nas regiões Norte da Europa e Norte dos UAE)

92

858

100

80

4 NVIDIA A100

80

Mediante solicitação

Maior instância de 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

Você pode gerenciar um pool de computação usando Snowsight ou SQL.

Em Snowsight, você escolhe a opção mais () ao lado do nome do pool de computação e escolhe a operação desejada no menu. A seção explica os comandos SQL que podem ser usados para gerenciar 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 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, o Snowflake recria automaticamente as instâncias de serviço em execução nos nós mais antigos do pool de computação nos novos nós. O Snowflake usa um método contínuo para recriar as instâncias de serviço.

  • Se um serviço tiver apenas uma instância, a interrupção do serviço ocorrerá enquanto o Snowflake estiver recriando a instância.

  • Para serviços com várias instâncias, o Snowflake recria as instâncias de serviço de forma incremental nos nós atualizados. Não mais do que 50% das instâncias de serviço são substituídas de cada vez. Observe que isso pode resultar em menos instâncias disponíveis do que o MIN_INSTANCES solicitado para o serviço. Se as instâncias disponíveis caírem para menos de MIN_READY_INSTANCES, isso fará com que o serviço passe do estado READY para o estado PENDING, causando a interrupção do serviço. Portanto, para evitar a interrupção do serviço, considere a possibilidade de configurar MIN_READY_INSTANCES para menos de 50% de MIN_INSTANCES.

Os serviços de trabalho em andamento serão interrompidos e deverão ser reiniciados pelos clientes após a conclusão da manutenção.

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

  • Execute várias instâncias de serviço: ter várias instâncias minimiza a interrupção do serviço durante a manutenção, garantindo alta disponibilidade.

  • Armazenar o estado do aplicativo no armazenamento persistente: armazene dados e objetos com estado no armazenamento persistente, incluindo armazenamento em bloco, estágios do Snowflake ou tabelas do Snowflake.

  • Capture o sinal SIGTERM: ao encerrar uma instância de serviço, o Snowflake primeiro envia um sinal SIGTERM para cada contêiner de serviço (consulte Término do serviço). Como parte do processamento do sinal, o código do contêiner pode salvar o estado do serviço antes que a instância do serviço seja desligada ou reiniciada.

  • Projete serviços de alta disponibilidade para serem executados em estado obsoleto durante a manutenção: para permanecer disponível durante a manutenção, seu serviço deve ser tolerante à execução com apenas 50% das instâncias.

  • Forneça uma sonda de prontidão: se você não fornecer uma sonda de prontidão, o Snowflake presumirá que sua instância de serviço está pronta assim que o código começar a ser executado. Normalmente, leva algum tempo para que um contêiner conclua a inicialização e esteja pronto para lidar com as solicitações. Você deve fornecer uma sonda de prontidão na configuração do serviço para informar explicitamente ao Snowflake quando a instância do serviço está pronta para tratar as solicitações.

  • Monitore as programações de manutenção: evite programar tarefas críticas durante uma janela de manutenção.

  • Evite programar o serviço de trabalho para ser executado durante as janelas de manutenção: o Snowflake pode cancelar um trabalho em execução durante uma janela de manutenção.

  • Realize backups ou pontos de verificação regulares: faça periodicamente o backup ou o ponto de verificação do estado do aplicativo no armazenamento persistente (incluindo armazenamento em bloco, estágios do Snowflake ou tabelas do Snowflake).

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.

Pools de computação padrão para Notebooks

A partir da versão 8.46, o Snowflake provisiona automaticamente dois pools de computação em cada conta do Snowflake (exceto as contas de avaliação) para a execução de aplicativos do Notebook. Esses pools de computação são exclusivos para a execução de Notebooks e não podem ser usados para criar um serviço do Snowpark Container Services.

  • Nome do pool de computação (como aparece na Snowsight UI): SYSTEM_COMPUTE_POOL_GPU

    • Família de instâncias: GPU_NV_S (consulte Tabela de famílias de instâncias)

    • Configuração padrão:

      • MIN_NODES=1

      • MAX_NODES=5

      • INITIALLY_SUSPENDED=verdadeiro

      • AUTO_SUSPEND_SECS=600

  • Nome do pool de computação (como aparece na Snowsight UI): SYSTEM_COMPUTE_POOL_CPU

    • Família de instâncias: CPU_X64_S

    • Configuração padrão:

      • MIN_NODES=1

      • MAX_NODES=25

      • INITIALLY_SUSPENDED=verdadeiro

      • AUTO_SUSPEND_SECS=600

As propriedades de configuração padrão significam o seguinte:

  • Os pools de computação estão inicialmente em um estado suspenso e só começam a incorrer em custos quando os Notebooks são iniciados neles.

  • Se nenhum dos Notebooks estiver em execução, esses pools de computação serão automaticamente suspensos após 10 minutos. Observe o seguinte:

    • Por padrão, os Notebooks são suspensos automaticamente após 30 minutos de inatividade. Depois que todos os Notebooks param de funcionar em um pool de computação padrão, o Snowflake suspende o pool após 10 minutos.

    • Para modificar a política de suspensão automática dos pools de computação padrão, use o comando ALTER COMPUTE POOL SET AUTO_SUSPEND_SECS. Você também pode ajustar a política de suspensão automática do Notebook. Para obter mais informações, consulte Tempo ocioso e reconexão.

Os pools de computação padrão são fornecidos por conveniência. Embora qualquer função em uma conta do Snowflake possa criar um Notebook, somente a função ACCOUNTADMIN está autorizada a criar pools de computação. Ao usar pools de computação padrão, os usuários podem criar Notebooks sem precisar que um administrador de conta configure um pool de computação.

Esses pools de computação são dedicados às cargas de trabalho do Notebook e você pode associar os orçamentos aos pools de computação padrão para gerenciar os custos do Notebook.

Observe o seguinte sobre a permissão padrão do pool de computação:

  • Em uma conta do Snowflake, a função ACCOUNTADMIN é proprietária desses pools de computação. Os administradores têm controle total sobre os pools de computação, incluindo a modificação de suas propriedades, a suspensão de operações e o monitoramento do consumo. Se os pools de computação padrão criados pelo Snowflake não forem necessários, a função ACCOUNTADMIN poderá excluí-los. Por exemplo:

    USE ROLE ACCOUNTADMIN;
    ALTER COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU STOP ALL;
    DROP COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU;
    
    Copy
  • Por padrão, a permissão USAGE nos pools de computação padrão é concedida à função PUBLIC, permitindo que todas as funções da conta os utilizem. No entanto, o ACCOUNTADMIN pode modificar esses privilégios para restringir o acesso, se necessário.

    Para restringir o acesso aos pools de computação padrão a funções específicas em sua conta, use a função ACCOUNTADMIN para revogar a permissão USAGE da função PUBLIC e concedê-la à(s) função(ões) desejada(s). Por exemplo:

    USE ROLE ACCOUNTADMIN;
    REVOKE USAGE ON COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU FROM ROLE PUBLIC;
    GRANT USAGE ON COMPUTE POOL SYSTEM_COMPUTE_POOL_CPU TO ROLE <role-name>;
    
    Copy

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.