Gerenciamento e escalonamento de serviços¶
Após a implantação de um modelo no Snowpark Container Services (SPCS), você deve gerenciar o ciclo de vida, o consumo de recursos e a confiabilidade dele. Esta página aborda operações padrão, observabilidade e configuração de alta disponibilidade para cargas de trabalho de produção.
Gerenciamento de serviços¶
O Snowpark Container Services oferece uma interface SQL para gerenciamento de serviços. É possível usar os comandos DESCRIBE SERVICE e ALTER SERVICE com serviços SPCS criados pelo Snowflake Model Serving da mesma forma que faria para gerenciar qualquer outro serviço SPCS. Por exemplo, você pode:
Alteração de MIN_INSTANCES e outras propriedades de um serviço
Descarte (exclusão) de um serviço
Compartilhamento de um serviço com outra conta
Alteração da propriedade de um serviço (o novo proprietário deve ter acesso READ ao modelo)
Nota
Se o proprietário de um serviço perder o acesso ao modelo subjacente por qualquer motivo, o serviço deixará de funcionar após a reinicialização. Ele continuará funcionando até ser reiniciado.
Para garantir a reprodutibilidade e a capacidade de depuração, você não pode alterar a especificação de um serviço de inferência existente. No entanto, você pode copiar a especificação, personalizá-la e usá-la para criar seu próprio serviço para hospedar o modelo. No entanto, esse método não protege o modelo subjacente de ser excluído. Além disso, ele não rastreia a linhagem. É melhor permitir que o Snowflake Model Serving crie os serviços.
Dimensionamento de serviços¶
Nota
A partir do snowflake-ml-python 1.25.0, você pode definir os limites de escalabilidade para o seu serviço de inferência definindo min_instances e max_instances dentro do método create_service.
Como funciona o dimensionamento automático¶
O serviço é inicializado com o número de nós especificado em min_instances e escala dinamicamente dentro do intervalo definido com base no volume de tráfego em tempo real e na utilização do hardware.
Dimensionamento como zero (suspensão automática): se min_instances estiver definido como 0 (padrão), o serviço será suspenso automaticamente se nenhum tráfego for detectado por 30 minutos.
Latência de dimensionamento: os acionadores de dimensionamento normalmente são ativados após um minuto de cumprimento da condição necessária. Observe que o tempo total de ativação inclui esse período do acionador mais o tempo necessário para provisionar e inicializar novas instâncias de serviço.
Práticas recomendadas de configuração¶
Parâmetro |
Estratégia recomendada |
|---|---|
min_instances |
Defina como 1 ou mais para cargas de trabalho de produção para garantir disponibilidade imediata e evitar atrasos na inicialização a frio. |
max_instances |
Defina para acomodar a demanda máxima, mantendo um limite máximo no consumo de recursos e no custo. |
Suspensão de serviços¶
A configuração padrão min_instances=0 permite que o serviço seja suspenso automaticamente após 30 minutos de inatividade. As solicitações recebidas acionarão uma retomada, com o atraso total determinado pela disponibilidade do pool de computação e pelo tempo de carregamento do modelo (atraso na inicialização).
Para suspender ou retomar manualmente um serviço, use o comando ALTER SERVICE.
ALTER SERVICE my_service [ SUSPEND | RESUME ];
Exclusão de modelos¶
É possível gerenciar modelos e versões de modelo normalmente com a interface SQL ou a API Python, com a restrição de que um modelo ou versão de modelo que esteja sendo usado por um serviço (esteja em execução ou suspenso) não pode ser descartado (excluído). Para descartar um modelo ou versão de modelo, descarte o serviço primeiro.
Serviços de monitoramento¶
Ao executar modelos no Snowpark Container Services, você pode monitorar a integridade do serviço e solucionar problemas acessando os logs e as métricas do contêiner. Os serviços de disponibilização de modelos geram logs que podem ajudar você a entender o comportamento do serviço, diagnosticar erros e otimizar o desempenho.
Para obter informações completas sobre o monitoramento de serviços SPCS, incluindo o acesso a métricas e logs, consulte Monitorando serviços.
No Snowsight¶
Você pode monitorar os serviços de disponibilização de modelos no Snowsight:
No menu de navegação, selecione Monitoring » Services & jobs.
Na guia Services, selecione o serviço desejado para visualizar a página de detalhes.
A guia Overview exibe informações do serviço, incluindo o pool de computação, os pontos de extremidade e a contagem de instâncias.
As guias Logs, Metrics e Events fornecem logs, métricas de desempenho e eventos do serviço (como provisionamento e desligamento de instâncias). Filtre os resultados por nome da instância e do contêiner, conforme necessário.
Acessando os logs de serviço¶
Você pode acessar os logs dos seus serviços de disponibilização de modelos usando qualquer um dos seguintes métodos:
Usando a função auxiliar de serviço¶
O serviço de modelos inclui uma função auxiliar integrada que recupera logs da tabela de eventos para serviços em execução ou suspensos:
-- Retrieve logs using the service helper function
SELECT * FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_LOGS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
Consultando a tabela de eventos diretamente¶
Se você tiver uma tabela de eventos configurada para sua conta, poderá consultá-la diretamente para recuperar os logs de serviço:
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service logs
SELECT TIMESTAMP, RESOURCE_ATTRIBUTES, RECORD_ATTRIBUTES, VALUE
FROM <current_event_table_for_your_account>
WHERE timestamp > dateadd(hour, -1, current_timestamp())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'LOG'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 10;
Usando a função do sistema (somente instâncias em execução)¶
Para depuração em tempo real de contêineres ativos, você pode usar a função SYSTEM$GET_SERVICE_LOGS:
-- Retrieve logs from a specific service instance
SELECT SYSTEM$GET_SERVICE_LOGS('model_service_name', '0', 'model-inference', 10);
Nota
O nome do contêiner para serviços de inferência de modelo é model-inference. Para solucionar problemas de criação de imagem, use model-build como nome do contêiner.
Acessando métricas de serviço¶
Os serviços de disponibilização de modelos emitem métricas de desempenho e integridade que podem ajudar você a monitorar utilização de recursos, taxas de solicitação, latência e outras características operacionais. Essas métricas são capturadas na tabela de eventos e podem ser consultadas para analisar o desempenho do serviço ao longo do tempo.
Para obter mais informações sobre as métricas de serviço SPCS, consulte Acessando as métricas de serviço da tabela de eventos.
Usando a função auxiliar de serviço¶
Os serviços de disponibilização de modelos incluem uma função auxiliar integrada que recupera métricas da tabela de eventos para serviços em execução ou suspensos:
-- Retrieve metrics using the service helper function
SELECT *
FROM TABLE(mydb.myschema.my_model_service!SPCS_GET_METRICS())
WHERE
timestamp > dateadd(hour, -1, current_timestamp())
AND instance_id = 0 -- choose all instances or one particular
AND container_name = 'model-inference';
Consultando a tabela de eventos diretamente¶
Você pode consultar a tabela de eventos diretamente para recuperar e filtrar métricas específicas:
-- Find the event table for your account
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
-- Query the event table for model service metrics
SELECT
timestamp,
RESOURCE_ATTRIBUTES:"snow.service.container.instance" as instance,
RESOURCE_ATTRIBUTES:"snow.service.container.name" as container,
RECORD:metric:"name" as metric,
value
FROM my_event_table_db.my_event_table_schema.my_event_table
WHERE timestamp > DATEADD(hour, -1, CURRENT_TIMESTAMP())
AND RESOURCE_ATTRIBUTES:"snow.service.name" = '<model_service_name>'
AND RECORD_TYPE = 'METRIC'
AND RESOURCE_ATTRIBUTES:"snow.service.container.instance" = '0' -- choose all instances or one particular
AND RESOURCE_ATTRIBUTES:"snow.service.container.name" = 'model-inference'
ORDER BY timestamp DESC
LIMIT 100;
Tolerância a falhas¶
Em qualquer sistema distribuído, falhas acontecem. Para cargas de trabalho de missão crítica, cabe aos usuários configurar o serviço para ser resiliente a falhas de nós e zonas.
Resiliência a falhas de nó¶
Para tolerar falhas de nós padrão, a Snowflake recomenda um superprovisionamento de 50% ou a manutenção de um mínimo de 3 instâncias (o que for maior).
Exemplo: se você precisar de 4 instâncias para suportar picos de tráfego, deverá provisionar 6 instâncias.
Resiliência a falhas zonais¶
Para cargas de trabalho essenciais à missão que exigem resiliência contra uma falha zonal completa, é possível usar um pool de computação distribuído ao criar um serviço. Os pools de computação distribuídos são criados com o parâmetro PLACEMENT_GROUP definido como DISTRIBUTED. Para obter mais informações sobre pools de computação distribuídos, consulte Posicionamento de pools de computação.
Guia de configuração¶
Converter um pool existente¶
Aviso
Você não pode alterar essa configuração em um pool ativo. Você deve suspendê-lo primeiro.
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
SET PLACEMENT_GROUP = 'DISTRIBUTED';
ALTER COMPUTE POOL my_pool RESUME;
Reverter um pool existente¶
Aviso
Você não pode alterar essa configuração em um pool ativo. Você deve suspendê-lo primeiro.
ALTER COMPUTE POOL my_pool SUSPEND;
ALTER COMPUTE POOL my_pool
UNSET PLACEMENT_GROUP;
ALTER COMPUTE POOL my_pool RESUME;
Verificação¶
Para confirmar se o seu pool está configurado corretamente para HA, verifique a coluna placement_group:
DESCRIBE COMPUTE POOL my_service_pool;