Snowpark ML Data Connector¶
Das DataConnector-Modul bietet eine einheitliche Schnittstelle zum Lesen von Snowflake-Daten und zur Konvertierung in Formate, die mit gängigen Machine Learning-Frameworks wie PyTorch und TensorFlow kompatibel sind.
DataConnector verwendet automatisch eine optimierte Datenaufnahme, wenn es im Container Runtime für ML läuft.
Bemerkung
Dieses Thema setzt voraus, dass das Snowpark ML-Modul installiert ist. Wenn dies nicht der Fall ist, finden Sie weitere Informationen unter Lokale Verwendung von Snowflake ML.
Erstellen einer DataConnector¶
Sie können eine DataConnector-Instanz auf verschiedene Weise erstellen:
Von einer SQL-Abfrage mit
DataConnector.from_sql()
Von einem Snowpark DataFrame mit
DataConnector.from_dataframe()
Aus einem Snowflake-Datensatz mit
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)
Verwenden mit PyTorch¶
Für die Verwendung mit PyTorch verwenden Sie to_torch_dataset()
, um ein IterableDataset zu erhalten, das dann an ein PyTorch DataLoader übergeben werden kann. Der DataLoader iteriert über die -Daten und liefert PyTorch-Tensoren in Batches. Das Laden von Daten erfolgt in einem Streaming-Verfahren für maximale Effizienz.
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)
Verwenden mit TensorFlow¶
Verwenden Sie für die Verwendung mit TensorFlow to_tf_dataset()
-Methode, um einen Tensorflow-Datensatz zu erhalten: Durch Iterieren über den Datensatz erhalten Sie TensorFlow in Batches. Das Laden von Daten erfolgt in einem Streaming-Verfahren für maximale Effizienz.
tf_ds = connector.to_tf_dataset(
batch_size=4,
shuffle=True,
drop_last_batch=True
)
for batch in tf_ds:
print(batch)
Optionen für die Datenverarbeitung¶
Shuffling¶
Übergeben Sie shuffle=True
, um die Daten während der Aufnahme zufällig zu mischen. Dies kann helfen, eine Überanpassung während des Modelltrainings zu verhindern. Eine Diskussion über den Wert des Shufflings finden Sie unter Warum sollten Daten für maschinelles Lernen neu angeordnet werden? (auf Englisch)
Batching¶
Verwenden Sie den Parameter batch_size
, um die Größe der Datenbatches zu steuern. Batching wird effizient auf der Datenaufnahmeebene durchgeführt. Wenn Sie PyTorch DataLoaders verwenden, müssen Sie bei der Instanziierung von DataLoader
explizit batch_size=None
übergeben, um eine doppelte Batchverarbeitung zu vermeiden. Ein Beispiel zur Verwendung mit DataLoader
finden Sie unter Verwenden mit PyTorch
Sie können den letzten Batch auch löschen, wenn dieser unvollständig ist, indem Sie drop_last_batch=True
an to_torch_datapipe
oder to_tf_dataset
übergeben.