Dimensionar um aplicativo usando Ray¶
O tempo de execução do contêiner Snowflake se integra ao Ray, uma estrutura unificada de código aberto para escalonamento de aplicativos de AI e Python. Essa integração permite usar os recursos de computação distribuída do Ray no Snowflake para suas cargas de trabalho de aprendizado de máquina.
O Ray é pré-instalado e executado como um processo em segundo plano no tempo de execução do contêiner de ML do Snowflake. É possível acessar o Ray no tempo de execução de contêiner das seguintes maneiras:
Notebooks Snowflake: um ambiente interativo em que é possível se conectar ao Ray, definir tarefas e dimensionar o cluster dinamicamente para desenvolvimento e experimentação.
Trabalhos de ML do Snowflake: envie seus aplicativos Ray como trabalhos estruturados e repetíveis. É possível especificar o tamanho do cluster como parte da configuração do trabalho para cargas de trabalho de produção.
Quando você executa o tempo de execução do contêiner em um notebook Snowflake ou trabalho de ML, o processo Ray é iniciado automaticamente como parte desse contêiner.
Use o seguinte código Python para estabelecer conexão com o cluster:
Importante
Certifique-se de usar sempre o endereço "auto" quando estiver se conectando ao cluster do Ray. A inicialização com o endereço "auto" direciona seu aplicativo para o nó principal do cluster do Ray que o Snowflake provisionou para sua sessão.
Escalonamento do cluster do Ray¶
Após estabelecer conexão com o cluster do Ray, você pode ajustar o tamanho dele para atender às demandas computacionais de sua carga de trabalho.
Use estas abordagens para dimensionar seu cluster do Ray:
Em um notebook, é possível aumentar ou reduzir a escala vertical do cluster usando a função scale_cluster. Isso é ideal para fluxos de trabalho interativos em que as necessidades de recursos podem mudar.
Ao especificar expected_cluster_size=5, você obtém 1 nó principal e 4 nós de trabalho.
Para trabalhos de ML, você define o tamanho do cluster de modo declarativo dentro da definição do trabalho. Especificar o tamanho do cluster na definição do trabalho garante que o número necessário de nós seja provisionado quando o trabalho for iniciado.
Por exemplo, o decorador do trabalho pode incluir:
Depois que terminar de usar o cluster, você poderá reduzir sua escala vertical. Para obter mais informações, consulte Limpeza.
Monitoramento com o painel do Ray¶
Se você está executando um trabalho de um notebook Snowflake, pode usar o painel do Ray para monitorar seu cluster. O painel é uma interface da Web que permite visualizar os recursos, os trabalhos, as tarefas e o desempenho do cluster. Use o código a seguir para obter o URL do painel:
Abra o URL em uma nova guia do navegador, faça login com suas credenciais do Snowflake.
Casos de uso avançados¶
Esta seção abrange os recursos avançados do Ray para cargas de trabalho complexas e para a migração de aplicativos existentes.
Criação e operação de cargas de trabalho distribuídas com Ray¶
O Ray fornece componentes que permitem criar e operar cargas de trabalho distribuídas. Isso inclui componentes básicos via Ray Core com primitivos essenciais para criar e dimensionar essas cargas de trabalho.
Também inclui as seguintes bibliotecas que permitem criar fluxos de trabalho próprios para pré-processamento de dados, treinamento de ML, ajuste de hiperparâmetros e inferência de modelo:
Ray Data: processamento e transformação de dados escaláveis
Ray Train: treinamento distribuído e ajuste fino de modelos de ML
Ray Tune: otimização de hiperparâmetros com algoritmos de pesquisa avançados
Ray Serve: serviço de modelo e inferência
As seções a seguir descrevem como usar essas bibliotecas diretamente, enquanto as interfaces nativas do Snowflake desenvolvidas com base no Ray fornecem ferramentas adicionais para criar, implantar e operacionalizar aplicativos baseados no Ray.
Ray Core: tarefas e atores¶
O Ray fornece os seguintes primitivos de computação distribuída:
Tarefas: funções sem estado que são executadas remotamente e retornam valores
Atores: classes com estado que podem ser instanciadas remotamente e chamadas várias vezes
Objetos: valores imutáveis armazenados no armazenamento de objetos distribuídos do Ray
Recursos: CPU, GPU e requisitos de recursos personalizados para tarefas e atores
O exemplo a seguir demonstra como usar uma tarefa básica e atores do Ray para fazer regressão linear:
Ray Train: treinamento distribuído¶
O Ray Train é uma biblioteca que permite treinamento distribuído e ajuste fino de modelos. Você pode executar seu código de treinamento em uma única máquina ou em um cluster inteiro.
Você pode usar o Ray Train para execução de nó único e de vários nós.
Para treinamento de vários nós, você deve providenciar o seguinte:
Armazenamento distribuído para pontos de verificação (sem sistema de arquivos compartilhado entre os nós)
Carregamento de dados personalizado
Configuração manual de recursos para coordenar entre a ingestão de dados e o uso de recursos de treinamento
Para uma experiência otimizada, use as funções de treinamento otimizado para XGBoost, LightGBM e PyTorch. No mesmo cluster Ray, essas funções cuidam do seguinte:
Criação de pontos de verificação com base em área de preparação do Snowflake
Ingestão de dados nativos do Snowflake
Alocação de recurso internos para ingestão de dados e treinamento
Ray Data: processamento de dados escalável¶
O Ray Data fornece processamento de dados escalável e distribuído para cargas de trabalho de ML. Ele pode lidar com conjuntos de dados maiores que a memória do cluster por meio de execução de streaming e avaliação lenta.
Nota
O Snowflake oferece integração nativa para transformar qualquer fonte de dados do Snowflake em Ray Data. Para mais informações, consulte as páginas Conector de dados e Ingestão de Ray Data.
Use Ray Data para:
Processamento de grandes conjuntos de dados que não cabem na memória de nó único
Pré-processamento de dados distribuídos e engenharia de recursos
Criação de pipelines de dados que se integram a outras bibliotecas Ray
Ray Tune: Ajuste de hiperparâmetros distribuídos¶
O Ray Tune fornece otimização de hiperparâmetros distribuídos com algoritmos de pesquisa avançados e recursos de interrupção antecipada. Para uma experiência mais integrada e otimizada ao ler de fontes de dados do Snowflake, use a API Hyperparameter Optimization (HPO) nativa. Para obter mais informações sobre o uso da otimização de HPO, consulte Otimizar os hiperparâmetros de um modelo.
Se você está procurando uma abordagem mais personalizável para uma implementação distribuída da HPO, use o Ray Tune.
Você pode usar o Ray Tune para os seguintes casos de uso:
Otimização de hiperparâmetros em vários testes em paralelo
Algoritmos avançados de pesquisa (otimização bayesiana, treinamento baseado em população)
Varreduras de hiperparâmetros em grande escala que exigem execução distribuída
Model Serving¶
Para distribuição de modelos, você pode usar os recursos nativos do Snowflake. Para obter mais informações, consulte Implantar modelos para inferência em tempo real (REST API).
Envio e gerenciamento de aplicativos distribuídos em clusters do Ray¶
Use os trabalhos do Ray para enviar e gerenciar aplicativos distribuídos em clusters do Ray com melhor isolamento de recursos e gerenciamento do ciclo de vida. Para todas as execuções baseadas em trabalhos que requerem acesso a um cluster do Ray, a Snowflake recomenda o uso de um trabalho de ML em que seja possível definir a lógica do aplicativo Ray. Para instâncias em que você precisa de acesso direto à interface do trabalho do Ray, como a migração de uma implementação existente, você pode usar o primitivo do trabalho do Ray como descrito na Documentação do Ray.
Use os trabalhos do Ray para:
Pipelines de ML de produção e fluxos de trabalho programados
Cargas de trabalho de longa duração que exigem tolerância a falhas
Processamento em lote e processamento de dados em grande escala
Dimensionamento de clusters do Ray com opções¶
A partir de um notebook Snowflake, é possível dimensionar seus clusters do Ray para atender às demandas computacionais com precisão. Um cluster consiste em um nó principal (coordenador) e nós de trabalho (para execução de tarefas).
Monitoramento de recursos¶
Limpeza¶
Ao terminar de usar o cluster, você poderá reduzi-lo para evitar cobranças adicionais. Use o código a seguir para reduzir a escala vertical: