Snowflake Container Runtime¶
Visão geral¶
O Snowflake Container Runtime é um conjunto de ambientes personalizáveis pré-configurados desenvolvido para machine learning no Snowpark Container Services, abrangendo experimentação interativa e cargas de trabalho de ML em lote, como treinamento de modelo, ajuste de hiperparâmetros, inferência em lote e ajuste fino. Eles incluem as estruturas mais populares de aprendizado de máquina e aprendizado profundo. Usados com notebooks Snowflake, eles proporcionam uma experiência de ML completa.
Ambiente de execução¶
O Container Runtime oferece um ambiente preenchido com pacotes e bibliotecas compatíveis com uma ampla variedade de tarefas de desenvolvimento de ML no Snowflake. Além dos pacotes pré-instalados, é possível importar pacotes de fontes externas, como repositórios PyPI públicos ou repositórios de pacote hospedados internamente, que fornecem uma lista de pacotes aprovados para uso dentro de sua organização.
As execuções de suas cargas de trabalho personalizadas em Python ML e APIs de treinamento suportado ocorrem em Snowpark Container Services, que oferece a capacidade de execução em pools de computação CPU ou GPU. Ao usar as APIs de ML do Snowflake, o Container Runtime distribui o processamento entre os recursos disponíveis.
Os Container Runtimes têm controle de versão, permitindo que você selecione ambientes de tempo de execução específicos, fixe suas cargas de trabalho em uma versão específica e migre para ambientes de tempo de execução de contêiner atualizados no seu próprio ritmo.
Processamento distribuído¶
A modelagem de ML e as APIs de carregamento de dados Snowflake são desenvolvidas com base na estrutura de processamento distribuído de ML Snowflake, que maximiza a utilização de recurso aproveitando totalmente o poder de computação disponível. Por padrão, esta estrutura usa todas as GPUs em nós com mais de uma GPU, oferecendo melhorias significativas de desempenho em comparação aos pacotes de código aberto e reduzindo o tempo de execução geral.
As cargas de trabalho de aprendizado de máquina, incluindo o carregamento de dados, são executadas em um ambiente de computação gerenciado pelo Snowflake. A estrutura permite o dimensionamento dinâmico de recursos com base nos requisitos específicos da tarefa em questão, como modelos de treinamento ou carregamento de dados. O número de recursos, incluindo alocação de GPU e memória para cada tarefa, pode ser facilmente configurado por meio das APIs.
Carregamento de dados otimizado¶
O Container Runtime fornece um conjunto de APIs de conectores de dados que permite conectar as fontes de dados do Snowflake (incluindo tabelas, DataFrames e Datasets) a frameworks ML populares, como PyTorch e TensorFlow, aproveitando ao máximo os vários núcleos ou GPUs. Depois de carregados, os dados podem ser processados usando pacotes de código aberto ou qualquer uma das APIs Snowflake ML, incluindo as versões distribuídas descritas abaixo. Essas APIs são encontradas no namespace snowflake.ml.data.
A classe snowflake.ml.data.data_connector.DataConnector conecta os Snowpark DataFrames ou os conjuntos de dados Snowflake ML aos DataSets TensorFlow ou PyTorch, ou aos DataFrames Pandas. Instancie um conector usando um dos seguintes métodos de classe:
DataConnector.from_dataframe: aceita um Snowpark DataFrame.
DataConnector.from_dataset: aceita um conjunto de dados Snowflake ML, especificado por nome e versão.
DataConnector.from_sources: aceita uma lista de fontes, e cada uma delas pode ser um DataFrame ou um conjunto de dados.
Depois de instanciar o conector (chamando a instância, por exemplo, data_connector), chame os métodos a seguir para produzir o tipo desejado de saída.
data_connector.to_tf_dataset: retorna um conjunto de dados TensorFlow adequado para uso com TensorFlow.data_connector.to_torch_dataset: retorna um conjunto de dados PyTorch adequado para uso com PyTorch.
Para mais informações sobre essas APIs, consulte a referência API de ML do Snowflake.
Criação com código aberto¶
Com as imagens básicas de CPU e GPU que vêm pré-preenchidas com pacotes populares de ML e a flexibilidade de instalar bibliotecas adicionais usando pip, os usuários podem empregar estruturas de código aberto familiares e inovadoras dentro do Snowflake Notebooks, sem mover os dados para fora do Snowflake. Você pode dimensionar o processamento usando APIs distribuídas do Snowflake para carregamento de dados, treinamento e otimização de hiperparâmetros, com as APIs conhecidas dos pacotes OSS populares, com pequenas alterações na interface para permitir configurações de dimensionamento.
O código a seguir ilustra a criação de um classificador XGBoost usando essas APIs:
from snowflake.snowpark.context import get_active_session
from snowflake.ml.data.data_connector import DataConnector
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
session = get_active_session()
# Use the DataConnector API to pull in large data efficiently
df = session.table("my_dataset")
pandas_df = DataConnector.from_dataframe(df).to_pandas()
# Build with open source
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)
O tempo de execução do contêiner do CPU tem pacotes diferentes em comparação ao GPU. As seções a seguir listam os pacotes disponíveis em cada tempo de execução de contêiner.
Pacotes Snowflake Container Runtime¶
A lista completa de pacotes disponíveis no Snowflake Container Runtime é mantida como parte das Notas de lançamento do Container Runtime.
Treinamento otimizado¶
O Container Runtime oferece um conjunto de APIs de treinamento distribuídas, incluindo versões distribuídas do LightGBM, PyTorch e XGBoost, que aproveitam ao máximo os recursos disponíveis no ambiente de contêiner. Elas são encontradas no namespace snowflake.ml.modeling.distributors. As APIs das classes distribuídas são semelhantes às das versões padrão.
Para mais informações sobre essas APIs, consulte a Referência de API.
XGBoost¶
A classe XGBoost primária é snowflake.ml.modeling.distributors.xgboost.XGBEstimator. As classes relacionadas incluem:
:class:``snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig``snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig`
Para ver um exemplo de como trabalhar com essa API, consulte o notebook de exemplo de XGBoost em GPU no repositório GitHub do Snowflake Container Runtime.
LightGBM¶
A classe LightGBM primária é snowflake.ml.modeling.distributors.lightgbm.LightGBMEstimator. As classes relacionadas incluem:
:class:``snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig``snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig`
Para ver um exemplo de como trabalhar com essa API, consulte o notebook de exemplo de LightGBM em GPU no repositório GitHub do Snowflake Container Runtime.
PyTorch¶
A classe primária do PyTorch é snowflake.ml.modeling.distributors.pytorch.PyTorchDistributor. As classes e funções relacionadas incluem:
:class:``snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig``snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig`
:class:``snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig``snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig`
:class:``snowflake.ml.modeling.distributors.pytorch.Context``snowflake.ml.modeling.distributors.pytorch.Context`
:class:``snowflake.ml.modeling.distributors.pytorch.get_context``snowflake.ml.modeling.distributors.pytorch.get_context`
Para ver um exemplo de como trabalhar com essa API, consulte o notebook de exemplo de PyTorch em GPU no repositório GitHub do Snowflake Container Runtime.
Próximos passos¶
Para testar um notebook Snowflake usando o Container Runtime, consulte Notebooks on Container Runtime.