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;
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 }
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 }
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;
Remoção: use o comando DROP COMPUTE POOL para remover um pool de computação.
Exemplo:
DROP COMPUTE POOL <name>
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];
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.