Créer une ressource de données

Effectué

En tant que scientifique des données, vous souhaitez vous concentrer sur l’apprentissage des modèles Machine Learning. Bien que vous ayez besoin d’accéder aux données en tant qu’entrée pour un modèle Machine Learning, vous ne voulez pas avoir à vous soucier de la façon d’obtenir l’accès. Pour simplifier l’obtention de l’accès aux données que vous souhaitez utiliser, vous pouvez utiliser des ressources de données.

Comprendre les ressources de données

Dans Azure Machine Learning, les ressources de données sont des références à l’emplacement où les données sont stockées, à la façon d’obtenir l’accès et à toutes les autres métadonnées pertinentes. Vous pouvez créer des ressources de données pour accéder aux données dans des magasins de données, des services de stockage Azure, des URL publiques ou des données stockées sur votre appareil local.

Les avantages de l’utilisation des ressources de données sont les suivants :

  • Vous pouvez partager et réutiliser des données avec d’autres membres de l’équipe pour qu’ils n’aient pas besoin de mémoriser l’emplacement des fichiers.
  • Vous pouvez accéder en toute transparence aux données pendant la formation du modèle (sur n’importe quel type de calcul pris en charge) sans vous soucier des chaînes de connexion ou des chemins de données.
  • Vous pouvez contrôler la version des métadonnées de la ressource de données.

Il existe trois principaux types de ressources de données que vous pouvez utiliser :

Diagram of different types of data assets in Azure Machine Learning.

  • Fichier URI : pointe vers un fichier spécifique.
  • Dossier URI : pointe vers un dossier.
  • MLTable : pointe vers un dossier ou un fichier, et inclut un schéma à lire sous forme de données tabulaires.

Remarque

URI signifie Uniform Resource Identifier et correspond à un emplacement de stockage sur votre ordinateur local, à un Stockage Blob Azure ou Data Lake Storage, à un emplacement https accessible au public ou même à un magasin de données attaché.

Quand utiliser des ressources de données

Les ressources de données sont plus utiles lors de l’exécution de tâches Machine Learning en tant que travaux Azure Machine Learning. Vous pouvez exécuter, comme travail, un script Python qui prend des entrées et génère des sorties. Une ressource de données peut être analysée en tant qu’entrée ou sortie d’un travail Azure Machine Learning.

Examinons chacun des types de ressources de données, leur création et l’utilisation de la ressource de données dans un travail.

Créer une ressource de données de fichier URI

Une ressource de données de fichier URI pointe vers un fichier spécifique. Azure Machine Learning stocke uniquement le chemin d’accès au fichier, ce qui signifie que vous pouvez pointer vers n’importe quel type de fichier. Lorsque vous utilisez la ressource de données, vous spécifiez comment vous voulez lire les données, ce qui dépend du type de données auquel vous vous connectez.

Les chemins d’accès pris en charge que vous pouvez utiliser lors de la création d’une ressource de données de fichier URI sont les suivants :

  • Local : ./<path>
  • Stockage Blob Azure : wasbs://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
  • Azure Data Lake Storage (Gen 2) : abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>
  • Magasin de données : azureml://datastores/<datastore_name>/paths/<folder>/<file>

Important

Lorsque vous créez une ressource de données et pointez vers un fichier ou un dossier stocké sur votre appareil local, une copie du fichier ou dossier est chargée dans le magasin de données workspaceblobstore par défaut. Vous pouvez chercher le fichier ou le dossier dans le dossier LocalUpload. En chargeant une copie, vous pourrez toujours accéder aux données à partir de l’espace de travail Azure Machine Learning, même lorsque l’appareil local sur lequel les données sont stockées n’est pas disponible.

Pour créer une ressource de données de fichier URI, vous pouvez utiliser le code suivant :

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FILE,
    description="<description>",
    name="<name>",
    version="<version>"
)

ml_client.data.create_or_update(my_data)

Lorsque vous analysez le fichier de données URI en tant qu’entrée dans une tâche Azure Machine Learning, vous devez d’abord lire les données avant de pouvoir les utiliser.

Imaginez que vous créez un script Python que vous souhaitez exécuter en tant que travail et que vous définissez la valeur du paramètre d’entrée input_data comme étant la ressource de données de fichier URI (qui pointe vers un fichier CSV). Vous pouvez lire les données en incluant le code suivant dans votre script Python :

import argparse
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

df = pd.read_csv(args.input_data)
print(df.head(10))

Si votre fichier URI pointe vers un autre type de fichier, vous devez utiliser le code Python approprié pour lire les données. Par exemple, si au lieu de fichiers CSV, vous utilisez des fichiers JSON, vous devriez plutôt utiliser pd.read_json().

Créer une ressource de données de dossier URI

Une ressource de données de dossier URI pointe vers un dossier spécifique. Elle fonctionne de la même manière qu’une ressource de données de fichier URI et prend en charge les mêmes chemins.

Pour créer une ressource de données de dossier URI avec le SDK Python, vous pouvez utiliser le code suivant :

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FOLDER,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

Lorsque vous analysez la ressource de données du dossier URI en tant qu’entrée dans une tâche Azure Machine Learning, vous devez d’abord lire les données avant de pouvoir les utiliser.

Imaginez que vous créez un script Python que vous souhaitez exécuter en tant que travail et que vous définissez la valeur du paramètre d’entrée input_data comme étant la ressource de données de dossier URI (qui pointe vers plusieurs fichiers CSV). Vous pouvez lire tous les fichiers CSV du dossier et les concaténer, ce que vous pouvez faire en incluant le code suivant dans votre script Python :

import argparse
import glob
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

data_path = args.input_data
all_files = glob.glob(data_path + "/*.csv")
df = pd.concat((pd.read_csv(f) for f in all_files), sort=False)

Selon le type de données avec lesquelles vous travaillez, le code que vous utilisez pour lire les fichiers peut changer.

Créer une ressource de données MLTable

Une ressource de données MLTable vous permet de pointer vers des données tabulaires. Lorsque vous créez une ressource de données MLTable, vous spécifiez la définition du schéma pour lire les données. Comme le schéma est déjà défini et stocké avec la ressource de données, vous n’avez pas besoin de spécifier comment lire les données lorsque vous l’utilisez.

Par conséquent, il est préférable d’utiliser une ressource de données MLTable lorsque le schéma de vos données est complexe ou change fréquemment. Au lieu de modifier la façon de lire les données dans chaque script qui utilise les données, il vous suffit de les modifier dans la ressource de données elle-même.

Lorsque vous définissez le schéma durant la création d’une ressource de données MLTable, vous pouvez également choisir de spécifier uniquement un sous-ensemble des données.

Pour certaines fonctionnalités d’Azure Machine Learning, comme le Machine Learning automatisé, vous devez utiliser une ressource de données MLTable, car Azure Machine Learning doit savoir comment lire les données.

Pour définir le schéma, vous pouvez inclure un fichier MLTable dans le même dossier que les données que vous souhaitez lire. Le fichier MLTable inclut le chemin d’accès pointant vers les données que vous souhaitez lire et la façon de lire les données :

type: mltable

paths:
  - pattern: ./*.txt
transformations:
  - read_delimited:
      delimiter: ','
      encoding: ascii
      header: all_files_same_headers

Pour créer une ressource de données MLTable avec le SDK Python, vous pouvez utiliser le code suivant :

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<path-including-mltable-file>'

my_data = Data(
    path=my_path,
    type=AssetTypes.MLTABLE,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

Lorsque vous analysez une ressource de données MLTable en tant qu’entrée dans un script Python que vous souhaitez exécuter comme travail Azure Machine Learning, vous pouvez inclure le code suivant pour lire les données :

import argparse
import mltable
import pandas

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

tbl = mltable.load(args.input_data)
df = tbl.to_pandas_dataframe()

print(df.head(10))

Une approche courante consiste à convertir les données tabulaires en trame de données Pandas. Cependant, vous pouvez également convertir les données en trame de données Spark si cela convient mieux à votre charge de travail.