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)
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)
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)
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
.