Laden und Schreiben von Daten¶
Verwenden Sie Snowflake ML, um Daten effizient aus Snowflake-Tabellen und -Stagingbereichen in Ihre Workflows für maschinelles Lernen zu laden. Snowflake ML bietet optimierte Funktionen zum Laden von Daten, die die verteilte Verarbeitung von Snowflake nutzen, um die Datenerfassung für Ihre Trainings- und Inferenz-Workflows zu beschleunigen.
Sie können Daten laden und verarbeiten mit:
Snowflake Notebooks: Interaktive Entwicklungsumgebung für die Erkundung von Daten und die Erstellung von ML-Modellen. Weitere Informationen dazu finden Sie unter Notebooks on Container Runtime.
Snowflake ML-Jobs: Führen Sie Ihre ML-Workloads asynchron in einer Entwicklungsumgebung aus. Weitere Informationen dazu finden Sie unter Snowflake ML Jobs.
Both Notebooks and ML Jobs run on the Container Runtime, which provides preconfigured environments optimized for machine learning workloads with distributed processing capabilities. The Container Runtime uses Ray, an open-source framework for distributed computing, to efficiently process data across multiple compute nodes. For more information about the Container Runtime, see Snowflake Container-Laufzeitumgebung.
Snowflake ML bietet verschiedene APIs zum Laden strukturierter und unstrukturierter Daten:
Strukturierte Daten (Tabellen und Datensets)
DataConnector: Laden von Daten aus Snowflake-Tabellen und Snowflake-Datensets. Weitere Informationen dazu finden Sie unter Laden von strukturierten Daten aus Snowflake-Tabellen.
DataSink: Zurückschreiben von Daten in Snowflake-Tabellen. Weitere Informationen dazu finden Sie unter Schreiben von strukturierten Daten zurück in Snowflake-Tabellen.
Unstrukturierte Daten (Dateien in Stagingbereichen)
DataSource APIs: Laden von Daten aus verschiedenen Dateiformaten (CSV, Parquet, Images und mehr) aus Snowflake-Stagingbereichen. Weitere Informationen dazu finden Sie unter Laden unstrukturierter Daten aus Snowflake-Stagingbereichen.
Die folgende Tabelle kann Ihnen bei der Auswahl der richtigen API für Ihren Anwendungsfall helfen:
Datentyp |
Datenquelle |
API zum Laden |
API zum Schreiben |
|---|---|---|---|
Strukturiert |
Snowflake-Tabellen |
DataConnector |
DataSink |
Strukturiert |
Snowflake Datasets |
DataConnector |
DataSink |
Unstrukturiert |
CSV-Dateien (Stagingbereich) |
DataSource-API |
N/A |
Unstrukturiert |
Parquet-Dateien (Stagingbereich) |
DataSource-API |
N/A |
Unstrukturiert |
Andere Stagingdateien |
DataSource-API |
N/A |
Laden von strukturierten Daten aus Snowflake-Tabellen¶
Verwenden Sie den Snowflake DataConnector zum Laden strukturierter Daten aus Snowflake-Tabellen und Snowflake-Datensets in ein Snowflake Notebook oder einen Snowflake ML-Job. Der DataConnector beschleunigt das Laden von Daten, indem die Lesevorgänge über mehrere Serverknoten hinweg parallelisiert werden.
Der DataConnector kann entweder mit Snowpark DataFrames oder Snowflake-Datensets verwendet werden:
Snowpark DataFrames: Bieten Sie direkten Zugriff auf die Daten in Ihren Snowflake-Tabellen. Werden am besten während der Entwicklung verwendet.
Snowflake-Datensets: Versionierte Objekte auf Schemaebene. Werden am besten für Produktions-Workflows verwendet. Weitere Informationen dazu finden Sie unter Snowflake Datasets.
Nach der Parallelisierung der Leseoperationen kann der DataConnector die Daten in eine der folgenden Datenstrukturen umwandeln:
pandas-Datenframe
PyTorch-Datenset
TensorFlow-Datenset
Erstellen Sie eine DataConnector, wenn:¶
Sie können einen DataConnector aus einem Snowpark DataFrame oder einem Snowflake-Datenset erstellen.
Verwenden Sie den folgenden Code, um einen DataConnector aus einem Snowpark DataFrame zu erstellen:
Verwenden Sie den folgenden Code, um einen DataConnector aus einem Snowflake-Datenset zu erstellen:
Konvertieren von DataConnector in andere Formate¶
Nach dem Erstellen eines DataConnector können Sie ihn in verschiedene Datenstrukturen zur Verwendung mit verschiedenen ML-Frameworks konvertieren.
Sie können einen DataConnector zu einem pandas-Datenframe zur Verwendung mit scikit-learn und anderen pandas-kompatiblen Bibliotheken konvertieren.
Im folgenden Beispiel werden Daten aus einer Snowflake-Tabelle in einen pandas-Datenframe geladen und es wird ein ein XGBoost-Klassifizierer trainiert:
Sie können einen DataConnector in ein PyTorch-Datenset zur Verwendung mit PyTorch-Modellen und Datenladeprogrammen konvertieren.
Im folgenden Beispiel werden Daten aus einer Snowflake-Tabelle in ein PyTorch-Datenset geladen:
Sie können einen DataConnector in ein TensorFlow-Datenset zur Verwendung mit TensorFlow-Modellen konvertieren. Das Laden von Daten erfolgt in einem Streaming-Verfahren für maximale Effizienz.
Im folgenden Beispiel wird ein DataConnector in ein TensorFlow-Datenset konvertiert:
Verwenden mit verteilten Trainings-APIs von Snowflake¶
Für die beste Leistung können Sie einen DataConnector direkt an optimierte verteilte Training-APIs von Snowflake übergeben, anstatt diesen zuerst in Pandas-, PyTorch- oder TensorFlow-Datensets zu konvertieren.
Im folgenden Beispiel wird ein XGBoost-Modell unter Verwendung des verteilten XGBoost-Estimators von Snowflake trainiert:
Verwenden von Sharding mit dem PyTorch Distributor¶
Sie können den ShardedDataConnector verwenden, um Ihre Daten für verteiltes Training mit dem Snowflake PyTorch Distributor auf mehrere Knoten zu verteilen.
Im folgenden Beispiel wird ein PyTorch-Modell für das Ziffern-Datenset unter Verwendung von Daten trainiert, die auf mehrere Prozesse verteilt sind:
Laden unstrukturierter Daten aus Snowflake-Stagingbereichen¶
Verwenden Sie die Snowflake DataSource APIs zum Lesen unstrukturierter Daten aus Snowflake-Stagingbereichen. Jedes Dateiformat hat eine entsprechende Datenquellenklasse, die definiert, wie die Daten gelesen werden sollen.
Im Folgenden werden die Dateiformate und die zugehörigen APIs angezeigt, die Sie zum Laden der Daten verwenden:
Binärdateien:
SFStageBinaryFileDataSourceTextdateien:
SFStageTextDataSourceCSV-Dateien:
SFStageCSVDataSourceParquet-Dateien:
SFStageParquetDataSourceImagedateien:
SFStageImageDataSource
Laden und Verarbeiten von Daten¶
Wenn Sie eine Snowflake-Datenquelle erstellen, müssen Sie Folgendes bereitstellen:
Der Name des Stagingbereichs, aus dem Sie die Daten lesen
Die Datenbank, die den Stagingbereich enthält (standardmäßig die aktuelle Sitzung)
Das Schema, das den Stagingbereich enthält (standardmäßig die aktuelle Sitzung)
Das Muster für die Filterdateien, die aus der Datenquelle gelesen werden (optional)
Die Daten-API oder der Datenkonnektor ruft alle Dateien innerhalb des angegebenen Pfads ab, die mit dem Dateimuster übereinstimmen.
Nachdem Sie die Snowflake-Datenquelle definiert haben, können Sie Daten in ein Ray-Datenset laden. Mit dem Ray-Datenset können Sie Folgendes tun:
Das Datenset mit Ray-APIs verwenden
Das Datenset an DataConnector übergeben
Ggf. in pandas- oder PyTorch-Datensets konvertieren.
Im folgenden Beispiel wird Folgendes ausgeführt:
Liest Parquet-Dateien aus einem Snowflake-Stagingbereich in ein Ray-Datenset
Konvertiert das Datenset in einen DataConnector
Schreiben von strukturierten Daten zurück in Snowflake-Tabellen¶
Verwenden Sie die Snowflake DataSink API, um strukturierte Daten von Ihrem Notebook oder ML-Job zurück in eine Snowflake-Tabelle zu schreiben. Sie können transformierte oder Vorhersage-Datensets zur weiteren Analyse oder Speicherung in Snowflake schreiben.
Um eine Datensenke zu definieren, geben Sie Folgendes ein:
Name des Stagingbereichs
Name der Datenbank (standardmäßig aktuelle Sitzung)
Schemaname (standardmäßig aktuelle Sitzung)
Dateimuster zur Übereinstimmung mit bestimmten Dateien (optional)
Das folgende Beispiel definiert eine Datensenke:
Nachdem Sie eine Datensenke definiert haben, können Sie den folgenden Code verwenden, um das Ray-Datenset in eine Snowflake-Tabelle zu schreiben.
Best Practices und Hinweise¶
Um eine optimale Leistung und Auslastung der Ressourcen zu erzielen, sollten Sie die folgenden Best Practices berücksichtigen:
Parallelität: Entwerfen Sie Ihre Datenquellenimplementierungen, um die verteilte Struktur von Ray zu nutzen. Passen Sie die Argumente für Parallelität so an, dass sie besser für Ihren Anwendungsfall geeignet sind. Sie können in jedem Schritt manuell festlegen, wie viele Ressourcen Sie pro Aufgabe zuweisen.
Partitionierung: Standardmäßig partitioniert die interne Logik von Ray das Datenset auf der Grundlage von Ressourcen und Datenumfang. Sie können mit ray_ds.repartition(X) die Anzahl der Partitionen anpassen, um zwischen einer großen Anzahl kleiner Aufgaben und einer kleinen Anzahl großer Aufgaben zu wählen, je nach dem Anwendungsfall.
Best Practices: Befolgen Sie Benutzerhandbuch für Ray Data für zusätzliche Hinweise.
Ray API-Details:
Nächste Schritte¶
Nach dem Laden Ihrer Daten können Sie Folgendes tun:
Den Feature Store für das Feature-Management verwenden