Connecteur de données Snowpark ML

Le module DataConnector fournit une interface unifiée pour lire les données de Snowflake et les convertir dans des formats compatibles avec des cadres de machine learning populaires comme PyTorch et TensorFlow.

DataConnector utilise automatiquement une optimisation de l’ingestion des données lorsqu’il est exécuté sur Container Runtime pour ML.

Note

Cette rubrique suppose que le module Snowpark ML est installé. Si ce n’est pas le cas, consultez Utilisation de Snowflake ML en local.

Création d’une DataConnector

Vous pouvez créer une instance DataConnector de plusieurs façons :

  • À partir d’une requête SQL utilisant DataConnector.from_sql()

  • À partir de partir de Snowpark DataFrame en utilisant DataConnector.from_dataframe()

  • À partir d’un jeu de données Snowflake en utilisant 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

Utilisation avec PyTorch

Pour une utilisation avec PyTorch, utilisez to_torch_dataset() pour obtenir un IterableDataset qui peut ensuite être transmis à PyTorch DataLoader. Le DataLoader itère sur les données et produit des tenseurs PyTorch en lots. Les données sont chargées en flux continu pour une efficacité maximale.

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

Utilisation avec TensorFlow

Pour une utilisation avec TensorFlow, utilisez la méthode to_tf_dataset() pour obtenir un ensemble de données Tensorflow : l’itération sur l’ensemble de données permet d’obtenir les tenseurs TensorFlow en lots. Les données sont chargées en flux continu pour une efficacité maximale.

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

for batch in tf_ds:
    print(batch)
Copy

Options de traitement des données

Brassage

Transmettez shuffle=True pour mélanger aléatoirement les données lors de l’ingestion. Cela permet d’éviter l’ajustement excessif lors de l’entraînement du modèle. Pour une discussion sur la valeur du brassage, consultez Pourquoi les données doivent-elles être brassées pour les tâches de machine learning ?

Mise en lot

Utilisez le paramètre batch_size pour contrôler la taille des lots de données. Le lot est géré efficacement au niveau de l’ingestion des données. Lorsque vous l’utilisez avec PyTorch DataLoaders, vous devez explicitement transmettre batch_size=None lors de l’instanciation de DataLoader afin d’éviter un double lot. Voir Utilisation avec PyTorch pour un exemple d’utilisation avec DataLoader

Vous pouvez également supprimer le dernier lot s’il est incomplet en transmettant drop_last_batch=True à to_torch_datapipe ou à to_tf_dataset.