Notebooks no Container Runtime para ML

Visão geral

Você pode executar o Snowflake Notebooks no Container Runtime for ML. O Container Runtime for ML é fornecido pelo Snowpark Container Services, oferecendo uma infraestrutura de contêiner flexível que oferece suporte à criação e operacionalização de uma ampla variedade de fluxos de trabalho inteiramente dentro do Snowflake. O Container Runtime for ML fornece opções de software e hardware para dar suporte a cargas de trabalho avançadas de ciência de dados e machine learning (aprendizado de máquina). Comparado aos warehouses virtuais, o Container Runtime for ML fornece um ambiente de computação mais flexível, onde você pode instalar pacotes de várias fontes e selecionar recursos de computação, incluindo tipos de máquina de GPU, enquanto ainda executa consultas SQL em warehouses para um desempenho ideal.

Este documento descreve algumas considerações para usar notebooks no Container Runtime for ML. Você também pode experimentar o guia de início rápido Introdução ao Snowflake Notebook Container Runtime para saber mais sobre como usar o Container Runtime for ML no seu desenvolvimento.

Pré-requisitos

Antes de começar a usar o Snowflake Notebooks no Container Runtime for ML, a função ACCOUNTADMIN deve concluir as etapas de configuração do notebook para criar os recursos necessários e conceder privilégios a esses recursos. Para obter etapas detalhadas, consulte Configuração do administrador.

Criar um notebook no Container Runtime for ML

Ao criar um notebook no Container Runtime for ML, você escolhe um warehouse, um tempo de execução e um pool de computação para fornecer os recursos para executar seu notebook. O tempo de execução escolhido lhe dará acesso a diferentes pacotes Python com base no seu caso de uso. Diferentes tamanhos de warehouse ou pools de computação têm diferentes implicações de custo e desempenho. Todas essas configurações podem ser alteradas posteriormente, se necessário.

Nota

Um usuário com as funções ACCOUNTADMIN, ORGADMIN ou SECURITYADMIN não pode criar ou possuir diretamente um notebook no Container Runtime. Os Notebooks criados ou de propriedade direta dessas funções não serão executados. No entanto, se um notebook for de propriedade de uma função da qual as funções ACCOUNTADMIN, ORGADMIN ou SECURITYADMIN herdam privilégios, como a função PUBLIC, você poderá usar essas funções para executar esse notebook.

Para criar um Snowflake Notebook para execução no Container Runtime, siga estas etapas:

  1. Faça login no Snowsight.

  2. Selecione Notebooks.

  3. Selecione + Notebook.

  4. Insira um nome para seu notebook.

  5. Selecione um banco de dados e um esquema para armazenar seu notebook. Este parâmetro não pode ser alterado após a criação do notebook.

    Nota

    O banco de dados e o esquema são necessários apenas para armazenar seus notebooks. Você pode consultar qualquer banco de dados e esquema aos quais sua função tenha acesso a partir do seu notebook.

  6. Selecione o Run on container como seu ambiente Python.

  7. Selecione o tipo de Runtime: CPU ou GPU.

  8. Selecione um Compute pool.

    O Snowflake provisiona automaticamente dois pools de computação em cada conta para a execução de notebooks: SYSTEM_COMPUTE_POOL_CPU e SYSTEM_COMPUTE_POOL_GPU.

  9. Altere o warehouse selecionado a ser usado para executar consultas SQL e Snowpark.

  10. Para criar e abrir seu notebook, selecione Create.

Runtime:

Há dois tipos de tempos de execução disponíveis: CPU e GPU. Cada imagem de tempo de execução contém um conjunto base de versões e pacotes Python verificados e integrados pelo Snowflake. Todas as imagens de tempo de execução oferecem suporte à análise de dados, modelagem e treinamento com o Snowpark Python, Snowflake ML e Streamlit.

Para instalar pacotes adicionais de um repositório público, você pode usar o pip. Uma integração de acesso externo (EAI) é necessária para que o Snowflake Notebooks instale pacotes de pontos de extremidade externos. Para configurar EAIs, consulte Configurar acesso externo para o Snowflake Notebooks. Entretanto, se um pacote já fizer parte da imagem base, você não poderá alterar a versão do pacote instalando uma versão diferente com pip install. Para uma lista dos pacotes pré-instalados, consulte Container Runtime para ML.

Compute pool:

Um pool de computação fornece os recursos de computação para o kernel do seu notebook e o código Python. Use pools de computação menores e baseados em CPU para começar e selecione pools de computação com mais memória e baseados em GPU para otimizar cenários de uso intensivo de GPU, como visão computacional ou LLMs/VLMs.

Observe que cada nó de computação está limitado a executar um notebook por usuário por vez. Você deve definir o parâmetro MAX_NODES com um valor maior que um ao criar pools de computação para notebooks. Para obter um exemplo, consulte Recursos de computação. Para mais detalhes sobre pools de computação do Snowpark Container Services, consulte Snowpark Container Services: como trabalhar com pools de computação.

Quando um notebook não estiver sendo usado, considere desligá-lo para liberar recursos do nó. Você pode desligar um notebook selecionando End session no menu suspenso de conexão.

Se um notebook for executado no Container Runtime, a função precisará do privilégio USAGE em um pool de computação, e não no warehouse do Notebook. Os pools de computação são máquinas virtual baseadas em CPU ou GPU gerenciadas pelo Snowflake. Ao criar um pool de computação, defina o parâmetro MAX_NODES como maior que um, pois cada notebook exigirá um nó completo para ser executado. Para obter mais informações, consulte Snowpark Container Services: como trabalhar com pools de computação.

Você pode visualizar a utilização de seus recursos. Para obter mais informações, consulte Sobre os notebooks Snowflake.

Nota

No AWS, os notebooks executados nos pools de computação de GPU usam o armazenamento NVMe de alto desempenho como dispositivo de inicialização padrão.

Executar um notebook no Container Runtime

Depois de criar seu notebook, você pode começar a executar o código imediatamente adicionando e executando células. Para obter mais informações sobre como adicionar células, consulte Desenvolvimento e execução de código nos Snowflake Notebooks.

Importação de mais pacotes

Além dos pacotes pré-instalados para colocar seu notebook em funcionamento, você pode instalar pacotes de fontes públicas às quais tenha acesso externo definido. Você também pode usar pacotes armazenados em um estágio ou em um repositório privado. Você precisa usar a função ACCOUNTADMIN ou uma função que possa criar integrações de acesso externo (EAIs) para definir e conceder acesso para visitar pontos de extremidade externos específicos. Use o comando ALTER NOTEBOOK para habilitar o acesso externo no seu notebook. Uma vez concedido, você verá EAIs em Notebook settings. Ative as EAIs antes de começar a instalar a partir de canais externos. Para obter instruções, consulte Configurar um notebook com acesso externo e segredos.

O exemplo a seguir instala um pacote externo usando pip install em uma célula de código:

!pip install transformers scipy ftfy accelerate
Copy

Atualização das configurações do notebook

Você pode atualizar configurações, como quais pools de computação ou warehouse usar, a qualquer momento em Notebook settings, que podem ser acessadas pelo menu Mais ações para planilha Ações do Notebook no canto superior direito.

Uma das configurações que você pode atualizar em Notebook settings é a configuração de tempo limite de inatividade. O tempo limite de inatividade padrão é 1 hora, e você pode defini-lo para até 72 horas. Para definir isso em SQL, use o comando CREATE NOTEBOOK ou ALTER NOTEBOOK para definir a propriedade IDLE_AUTO_SHUTDOWN_TIME_SECONDS do notebook.

Instalação de pacotes privados

Pip oferece suporte à instalação de pacotes de fontes privadas com autenticação básica, como o JFrog Artifactory. Configure o notebook para integração de acesso externo (EAI) para que ele possa acessar o repositório.

  1. Crie uma regra de rede para especificar o repositório que deseja acessar. Por exemplo, esta regra de rede especifica um repositório JFrog:

    CREATE OR REPLACE NETWORK RULE jfrog_network_rule
      MODE = EGRESS
      TYPE = HOST_PORT
      VALUE_LIST = ('<your-repo>.jfrog.io');
    
    Copy
  2. Crie uma integração de acesso externo que permita o acesso ao repositório:

    CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION jfrog_integration
      ALLOWED_NETWORK_RULES = (jfrog_network_rule)
      ENABLED = TRUE;
    
    GRANT USAGE ON INTEGRATION jfrog_integration TO ROLE data_scientist;
    
    Copy
  3. Para acessar a configuração de acesso externo, selecione Mais ações para planilha (menu Notebook actions) no canto superior direito do notebook.

  4. Selecione Notebook settings e depois selecione a guia External access.

  5. Selecione a EAI para se conectar ao repositório.

    O notebook é reiniciado.

  6. Depois que o notebook for reiniciado, é possível instalar a partir do repositório:

    !pip install hello-jfrog --index-url https://<user>:<token>@<your-repo>.jfrog.io/artifactory/api/pypi/test-pypi/simple
    
    Copy

Instalação de pacotes privados com conectividade privada

Se seu repositório de pacotes privados exigir conectividade privada, siga estas etapas para configurar sua conta. Se precisar de ajuda, é possível entrar em contato com seu administrador de conta para configurar a regra de rede.

  1. Siga as etapas em Saída da rede usando conectividade privada para configurar a saída de rede usando a conectividade privada.

  2. Crie uma EAI com a regra de rede da etapa 1. Por exemplo:

    CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION private_repo_integration
      ALLOWED_NETWORK_RULES = (PRIVATE_LINK_NETWORK_RULE)
      ENABLED = TRUE;
    
    GRANT USAGE ON INTEGRATION private_repo_integration TO ROLE data_scientist;
    
    Copy
  3. Para acessar a configuração de acesso externo, selecione Mais ações para planilha (menu Notebook actions) no canto superior direito do notebook.

  4. Selecione Notebook settings e depois selecione a guia External access.

  5. Selecione a EAI para se conectar ao seu repositório privado.

    O notebook é reiniciado.

  6. Depois que o notebook for reiniciado, é possível fornecer o --index-url de seu repositório:

    !pip install my_package --index-url https://my-private-repo-url.com/simple
    
    Copy

Execução de cargas de trabalho ML

Os Notebooks no Container Runtime são adequados para executar cargas de trabalho de ML, como treinamento de modelos e ajuste de parâmetros. Os tempos de execução vêm pré-instalados com os pacotes de ML populares. Com o acesso à integração externa configurado, é possível instalar qualquer outro pacote necessário usando !pip install.

Para obter uma experiência ideal, use as bibliotecas OSS para desenvolver modelos ou para importar notebooks que usam componentes OSS. O Container Runtime otimizou as APIs, como:

  • DataConnector para uma ingestão de dados mais rápida

  • APIs de treinamento distribuído para ajuste de modelos em escala

  • APIs de ajuste de hiperparâmetro distribuído para utilizar eficientemente todos os recursos disponíveis.

Para obter mais informações, consulte Container Runtime para ML.

Nota

Como o Runtime vem pré-instalado com muitos pacotes, uma alteração em qualquer versão requer a reinicialização do kernel. Para obter mais informações, consulte Exploração do Notebooks.

Usar bibliotecas OSS ML

O exemplo a seguir usa uma biblioteca OSS ML, xgboost, com uma sessão Snowpark ativa para buscar dados diretamente na memória para treinamento:

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
X = df_pd[['feature1', 'feature2']]
y = df_pd['label']
# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)
# Train in memory
model = xgb.XGBClassifier()
model.fit(X_train, y_train)
# Predict
y_pred = model.predict(X_test)
Copy

Limitações

Depois que uma sessão do notebook do Container Runtime é iniciada, ela pode ser executada por até sete dias sem interrupção. Após sete dias, ela poderá ser interrompida e desligada se houver um evento de manutenção de serviço programado SPCS. As configurações de tempo de inatividade do notebook ainda se aplicam. Para obter detalhes sobre a manutenção do serviço SPCS, consulte Manutenção do pool de computação.

Considerações sobre custos/faturamento

Ao executar notebooks no Container Runtime, você pode incorrer em custos de computação de warehouse e de computação do SPCS. Os warehouses são necessários tanto para a execução de consultas quanto para dar suporte a determinadas funcionalidades de front-end no Snowflake Notebooks. Por exemplo, ao usar um pool de computação para execução de Python, pode ser necessário um warehouse para renderizar saídas ou manipular componentes interativos.

O Snowflake Notebooks exige um warehouse virtual para executar consultas SQL e do Snowpark para um desempenho otimizado. Portanto, você também pode incorrer em custos de computação de warehouse virtual se usar SQL em células SQL e consultas push-down do Snowpark executadas em células Python. O diagrama a seguir mostra onde a computação acontece para cada tipo de célula.

Diagrama mostrando a distribuição de computação das células do notebook.

Por exemplo, o exemplo Python a seguir usa a biblioteca xgboost Os dados são puxados para o contêiner e a computação ocorre no Snowpark Container Services:

from snowflake.snowpark.context import get_active_session
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()
df = session.table("my_dataset")
# Pull data into local memory
df_pd = df.to_pandas()
X = df_pd[['feature1', 'feature2']]
y = df_pd['label']
# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)
Copy

Para saber mais sobre os custos de warehouse, consulte Visão geral de warehouses.