Snowpark ML Data Connector

O módulo DataConnector oferece uma interface unificada para ler os dados do Snowflake e convertê-los em formatos compatíveis com estruturas populares de aprendizado de máquina, como PyTorch e TensorFlow.

DataConnector usa automaticamente a ingestão de dados otimizada ao ser executado no Container Runtime para ML.

Nota

Este tópico pressupõe que o módulo Snowpark ML esteja instalado. Caso contrário, consulte Como usar o Snowflake ML localmente.

Criação de uma DataConnector

Você pode criar uma instância do DataConnector de várias maneiras:

  • A partir de uma consulta em SQL usando DataConnector.from_sql()

  • De um Snowpark DataFrame usando DataConnector.from_dataframe()

  • De um Snowflake Dataset usando DataConnector.from_dataset()

from snowflake.ml import dataset
from snowflake.ml.data import DataConnector

# Create a DataConnector from a SQL query
connector = DataConnector.from_sql("SELECT * FROM my_table", session=session)

# Create a DataConnector from a Snowpark DataFrame
df = session.table(my_table)
connector = DataConnector.from_dataframe(df)

# Create a DataConnector from a Snowflake Dataset
ds = dataset.load_dataset(session, "my_dataset", "v1")
connector = DataConnector.from_dataset(ds)
Copy

Uso com PyTorch

Para uso com PyTorch, use to_torch_dataset() para obter um IterableDataset que pode então ser passado para um PyTorch DataLoader. O DataLoader itera sobre os dados e produz tensores PyTorch em lote. Os dados são carregados de forma contínua para máxima eficiência.

from torch.utils.data import DataLoader

torch_ds = connector.to_torch_dataset(
    batch_size=4,
    shuffle=True,
    drop_last_batch=True
)

for batch in DataLoader(torch_ds, batch_size=None, num_workers=0):
    print(batch)
Copy

Uso com TensorFlow

Para uso com TensorFlow, use o método to_tf_dataset() para obter um Tensorflow Dataset: a iteração sobre o conjunto de dados produz tensores TensorFlow em lote. Os dados são carregados de forma contínua para máxima eficiência.

tf_ds = connector.to_tf_dataset(
    batch_size=4,
    shuffle=True,
    drop_last_batch=True
)

for batch in tf_ds:
    print(batch)
Copy

Opções de processamento de dados

Embaralhamento

Passe shuffle=True para embaralhar aleatoriamente os dados durante a ingestão. Isso pode ajudar a evitar o ajuste excessivo durante o treinamento do modelo. Para uma discussão sobre o valor do embaralhamento, consulte Por que os dados deveriam ser embaralhados para tarefas de machine learning?

Loteamento

Use o parâmetro batch_size para controlar o tamanho dos lotes de dados. O processamento em lote é feito de forma eficiente no nível de ingestão de dados. Ao usar com PyTorch DataLoaders, você deve passar explicitamente batch_size=None ao instanciar DataLoader para evitar a duplicação de lotes. Consulte Uso com PyTorch para ver um exemplo de uso com o DataLoader

Você também pode descartar o último lote se ele estiver incompleto, passando drop_last_batch=True para to_torch_datapipe ou para to_tf_dataset.