Chargement et écriture de données¶
Utilisez Snowflake ML pour charger efficacement les données des tables et des zones de préparation Snowflake dans vos workflows de machine learning. Snowflake ML fournit des capacités de chargement de données optimisées qui tirent parti du traitement distribué de Snowflake pour accélérer l’ingestion de données pour vos workflows d’entraînement et d’inférence.
Vous pouvez charger et traiter des données à l’aide de :
Snowflake Notebooks : Environnement de développement interactif pour explorer les données et créer des modèles ML. Pour plus d’informations, voir Notebooks on Container Runtime.
Tâches ML Snowflake : Exécutez vos charges de travail ML de manière asynchrone à partir de n’importe quel environnement de développement. Pour plus d’informations, voir Tâches Snowflake ML.
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 Runtime de conteneur Snowflake.
Snowflake ML fournit différentes APIs pour le chargement de données structurées et non structurées :
Données structurées (tables et ensembles de données)
DataConnector : Chargez des données à partir de tables Snowflake et d’ensembles de données Snowflake. Pour plus d’informations, voir Charger des données structurées à partir de tables Snowflake.
DataSink : Réécrivez les données dans des tables Snowflake. Pour plus d’informations, voir Réécrire les données structurées dans des tables Snowflake.
Données non structurées (fichiers dans des zones de préparation)
APIs DataSource : Chargez des données à partir de différents formats de fichiers (CSV, Parquet, images, etc.) des zones de préparation de Snowflake. Pour plus d’informations, voir Chargement de données non structurées à partir de zones de préparation Snowflake.
Le tableau suivant peut vous aider à choisir la bonne API pour votre cas d’utilisation :
Type de données |
Source de données |
API pour le chargement |
API pour l’écriture |
|---|---|---|---|
Structuré |
Tables Snowflake |
DataConnector |
DataSink |
Structuré |
Ensembles de données Snowflake |
DataConnector |
DataSink |
Non structuré |
Fichiers CSV (zone de préparation) |
DataSource API |
N/A |
Non structuré |
Fichiers Parquet (zone de préparation) |
DataSource API |
N/A |
Non structuré |
Autres fichiers en zone de préparation |
DataSource API |
N/A |
Charger des données structurées à partir de tables Snowflake¶
Utilisez le DataConnector Snowflake pour charger des données structurées à partir de tables Snowflake et d’ensembles de données Snowflake dans un notebook Snowflake ou une tâche ML Snowflake. Le DataConnector accélère le chargement des données en parallélisant les lectures sur plusieurs nœuds de calcul.
Le DataConnector fonctionne avec les DataFrames Snowpark ou les ensembles de données Snowflake :
DataFrames Snowpark : Fournissez un accès direct aux données de vos tables Snowflake. À utiliser de préférence pendant le développement.
Ensembles de données Snowflake : Objets de niveau schéma versionnés. À utiliser de préférence pour les workflows de production. Pour plus d’informations, voir Ensembles de données Snowflake.
Après la parallélisation des lectures, le DataConnector peut convertir les données dans l’une des structures de données suivantes :
dataframe pandas
PyTorch jeu de données
TensorFlow jeu de données
Créer une DataConnector¶
Vous pouvez créer un DataConnector depuis un DataFrame Snowpark ou un ensemble de données Snowflake.
Utilisez le code suivant pour créer un DataConnector depuis un DataFrame Snowpark :
Utilisez le code suivant pour créer un DataConnector depuis un ensemble de données Snowflake :
Convertir DataConnector vers d’autres formats¶
Après avoir créé un DataConnector, vous pouvez le convertir en différentes structures de données pour l’utiliser avec divers frameworks ML.
Vous pouvez convertir un DataConnector vers un dataframe pandas à utiliser avec scikit-learn et d’autres bibliothèques compatibles pandas.
L’exemple suivant charge les données d’une table Snowflake dans un dataframe Pandas et forme un classificateur XGBoost :
Vous pouvez convertir un DataConnector vers un ensemble de données PyTorch à utiliser avec des modèles PyTorch et des chargeurs de données.
L’exemple suivant charge les données d’une table Snowflake dans un ensemble de données PyTorch :
Vous pouvez convertir un DataConnector vers un ensemble de données TensorFlow à utiliser avec des modèles TensorFlow. Les données sont chargées en flux continu pour une efficacité maximale.
L’exemple suivant convertit un DataConnector vers un ensemble de données TensorFlow :
Utilisation avec des APIs d’entraînement distribué de Snowflake¶
Pour une performance optimale, vous pouvez transmettre un DataConnector directement vers les APIs d’entraînement distribué optimisé de Snowflake au lieu de convertir d’abord en ensemble de données pandas, PyTorch ou TensorFlow.
L’exemple suivant entraîne un modèle XGBoost à l’aide de l’estimateur XGBoost distribué de Snowflake :
Utiliser le fragmentage avec le distributeur PyTorch¶
Vous pouvez utiliser le ShardedDataConnector pour fragmenter vos données sur plusieurs nœuds pour un entraînement distribué avec le distributeur PyTorch Snowflake.
L’exemple suivant entraîne un modèle PyTorch sur l’ensemble de données de chiffres utilisant des données fragmentées dans plusieurs processus :
Chargement de données non structurées à partir de zones de préparation Snowflake¶
Utilisez les APIs DataSource Snowflake pour lire des données non structurées à partir de zones de préparation Snowflake. Chaque format de fichier possède une classe de source de données correspondante qui définit la manière de lire les données.
Les formats de fichier et les APIs correspondantes que vous utilisez pour charger les données sont les suivants :
Fichiers binaires :
SFStageBinaryFileDataSourceFichiers de texte :
SFStageTextDataSourceFichiers CSV :
SFStageCSVDataSourceFichiers Parquet :
SFStageParquetDataSourceFichiers d’images :
SFStageImageDataSource
Charger et traiter des données¶
Lorsque vous créez une source de données Snowflake, vous devez fournir les éléments suivants :
Le nom de la zone de préparation à partir de laquelle vous lisez les données
La base de données qui possède la zone de préparation (par défaut, la session actuelle)
Le schéma qui possède la zone de préparation (par défaut, la session actuelle)
Le modèle des fichiers de filtre lus à partir de la source de données (facultatif)
L’API de données ou le connecteur de données extrait tous les fichiers du chemin fourni qui correspond au modèle de fichier.
Après avoir défini la source de données Snowflake, vous pouvez charger les données dans un ensemble de données Ray. Avec l’ensemble de données Ray, vous pouvez effectuer les opérations suivantes :
Utiliser l’ensemble de données avec les APIs Ray
Transmettre l’ensemble de données à DataConnector
Convertir en ensemble de données pandas ou PyTorch si nécessaire.
L’exemple suivant permet d’effectuer les opérations suivantes :
Lit les fichiers Parquet d’une zone de préparation Snowflake vers un ensemble de données Ray
Convertit l’ensemble de données en DataConnector
Réécrire les données structurées dans des tables Snowflake¶
Utilisez l’API DataSink Snowflake pour écrire des données structurées à partir de votre notebook ou de tâches ML vers une table Snowflake. Vous pouvez écrire des ensembles de données transformés ou de prédiction dans Snowflake pour une analyse ou un stockage ultérieur.
Pour définir un récepteur de données, il convient de fournir les éléments suivants :
Nom de la zone de préparation
Nom de la base de données (par défaut, la session actuelle)
Nom du schéma (par défaut, la session actuelle)
Modèle de fichier correspondant à des fichiers spécifiques (facultatif)
L’exemple suivant définit un récepteur de données :
Après avoir défini un récepteur de données, vous pouvez utiliser le code suivant pour écrire l’ensemble de données Ray dans une table Snowflake.
Bonnes pratiques et considérations¶
Pour une performance et une utilisation optimales des ressources, tenez compte des bonnes pratiques suivantes :
Parallélisme : Concevez vos implémentations de sources de données pour tirer parti de la nature distribuée de Ray. Personnalisez les arguments de parallélisme et de concurrence pour mieux répondre à votre cas d’utilisation. Vous pouvez définir manuellement le nombre de ressources que vous affectez par tâche à chaque étape.
Partitionnement : Par défaut, la logique interne de Ray partitionnera l’ensemble de données en fonction des ressources et de la taille des données. Vous pouvez personnaliser le nombre de partitions pour choisir entre un grand nombre de petites tâches et un petit nombre de grandes tâches en fonction du cas d’utilisation grâce à ray_ds.repartition(X).
Bonnes pratiques : Pour en savoir plus, consulter Guide de l’utilisateur des données Ray.
Détails de l’API Ray :
Prochaines étapes¶
Après avoir chargé vos données, vous pouvez :
Utiliser le Feature Store pour la gestion des fonctionnalités