Accéder aux données dans un travail

S’APPLIQUE À :Extension Azure CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (version actuelle)

Découvrez comment lire et écrire des données pour vos travaux avec le kit SDK Python v2 Azure Machine Learning et l’extension CLI Azure Machine Learning v2.

Prérequis

Chemins pris en charge

Au moment de fournir une entrée/sortie de données à un travail, vous devez spécifier un paramètre path qui pointe vers l’emplacement des données. Voici un tableau qui montre les différents emplacements de données pris en charge dans Azure Machine Learning et des exemples pour le paramètre path :

Emplacement Exemples Notes
Chemin sur votre ordinateur local ./home/username/data/my_data
Chemin sur un serveur http(s) public https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv Le chemin HTTPS pointant vers un dossier n’est pas pris en charge, car HTTPS n’est pas un système de fichiers. Utilisez plutôt d’autres formats (wasbs/abfss/adl) pour le type de données Dossier.
Chemin dans Stockage Azure wasbs://<containername>@<accountname>.blob.core.windows.net/<path_to_data>/
abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
adl://<accountname>.azuredatalakestore.net/<path_to_data>/
Chemin dans un magasin de données azureml://datastores/<data_store_name>/paths/<path>
Chemin d’accès à une ressource de données azureml:<my_data>:<version>

Modes pris en charge

Quand vous exécutez un travail avec des entrées/sorties de données, vous pouvez spécifier le mode pour indiquer par exemple que vous voulez que les données soient montées en lecture seule ou téléchargées sur la cible de calcul. Le tableau ci-dessous montre les modes possibles pour différentes combinaisons de type/mode/entrée/sortie :

Type Entrée/sortie upload download ro_mount rw_mount direct eval_download eval_mount
uri_folder Entrée
uri_file Entrée
mltable Entrée
uri_folder Sortie
uri_file Sortie
mltable Sortie

Notes

eval_download et eval_mount sont uniques à mltable. Même si ro_mount est le mode par défaut pour MLTable, il y a des scénarios où un MLTable peut générer des fichiers qui ne sont pas nécessairement colocalisés avec le fichier MLTable dans le stockage. Un mltable peut aussi créer un sous-ensemble des données qui résident dans le stockage ou les mélanger. Cette vue n’est visible que si le fichier MLTable est réellement évalué par le moteur. Ces modes fourniront cette vue des fichiers.

Lire des données dans un travail

Créez un fichier YAML de spécification de travail (<file-name>.yml). Dans la section inputs du travail, spécifiez :

  1. type ; pour indiquer si les données sont un fichier spécifique (uri_file) ou un emplacement de dossier (uri_folder) ou un mltable.
  2. Le chemin (path) indiquant l’emplacement de vos données ; le chemin peut être n’importe lequel parmi ceux décrits dans la section Chemins pris en charge.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json

# Possible Paths for Data:
# Blob: wasbs://<containername>@<accountname>.blob.core.windows.net/<folder>/<file>
# Datastore: azureml://datastores/paths/<folder>/<file>
# Data Asset: azureml:<my_data>:<version>

command: |
  ls ${{inputs.my_data}}
code: <folder where code is located>
inputs:
  my_data:
    type: <type> # uri_file, uri_folder, mltable
    path: <path>
environment: azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest
compute: azureml:cpu-cluster

Ensuite, exécutez dans l’interface CLI

az ml job create -f <file-name>.yml

Lire des éléments de données de la version 1

Cette section explique comment lire des entités de données FileDataset et TabularDataset de la version 1 dans un travail de la version 2.

Lire un FileDataset

Créez un fichier YAML de spécification de travail (<file-name>.yml), avec le type défini sur mltable et le mode défini sur eval_mount :

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json

command: |
  ls ${{inputs.my_data}}
code: <folder where code is located>
inputs:
  my_data:
    type: mltable
    mode: eval_mount
    path: azureml:<filedataset_name>@latest
environment: azureml:<environment_name>@latest
compute: azureml:cpu-cluster

Ensuite, exécutez dans l’interface CLI

az ml job create -f <file-name>.yml

Lire un TabularDataset

Créez un fichier YAML de spécification de travail (<file-name>.yml), avec le type défini sur mltable et le mode défini sur direct :

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json

command: |
  ls ${{inputs.my_data}}
code: <folder where code is located>
inputs:
  my_data:
    type: mltable
    mode: direct
    path: azureml:<tabulardataset_name>@latest
environment: azureml:<environment_name>@latest
compute: azureml:cpu-cluster

Ensuite, exécutez dans l’interface CLI

az ml job create -f <file-name>.yml

Écrire des données dans un travail

Dans votre travail, vous pouvez écrire des données dans votre stockage cloud en utilisant des sorties. La section Modes pris en charge a montré que seules les sorties de travaux pouvaient écrire des données, car les modes possibles sont rw_mount ou upload.

Créez un fichier YAML de spécification de travail (<file-name>.yml), avec la section outputs complétée avec le type et le chemin menant à l’emplacement où vous souhaitez que vos données soient écrites :

$schema: https://azuremlschemas.azureedge.net/latest/CommandJob.schema.json

# Possible Paths for Data:
# Blob: wasbs://<containername>@<accountname>.blob.core.windows.net/<folder>/<file>
# Datastore: azureml://datastores/<datastore_name>/paths/<folder>/<file>
# Data Asset: azureml:<my_data>:<version>

code: src
command: >-
  python prep.py 
  --raw_data ${{inputs.raw_data}} 
  --prep_data ${{outputs.prep_data}}
inputs:
  raw_data: 
    type: <type> # uri_file, uri_folder, mltable
    path: <path>
outputs:
  prep_data: 
    type: <type> # uri_file, uri_folder, mltable
    path: <path>
environment: azureml:<environment_name>@latest
compute: azureml:cpu-cluster

Créez ensuite un travail à l’aide de l’interface CLI :

az ml job create --file <file-name>.yml

Données dans les pipelines

Si vous utilisez des pipelines Azure Machine Learning, vous pouvez lire des données et déplacer des données entre les composants de pipeline avec l’extension CLI v2 Azure Machine Learning ou le Kit de développement logiciel (SDK) Python v2.

CLI Azure Machine Learning v2

Le fichier YAML suivant montre comment utiliser les données de sortie d’un composant comme entrée pour un autre composant du pipeline à l’aide de l’extension CLI v2 Azure Machine Learning :

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline

display_name: 3b_pipeline_with_data
description: Pipeline with 3 component jobs with data dependencies

settings:
  default_compute: azureml:cpu-cluster

outputs:
  final_pipeline_output:
    mode: rw_mount

jobs:
  component_a:
    type: command
    component: ./componentA.yml
    inputs:
      component_a_input: 
        type: uri_folder
        path: ./data

    outputs:
      component_a_output: 
        mode: rw_mount
  component_b:
    type: command
    component: ./componentB.yml
    inputs:
      component_b_input: ${{parent.jobs.component_a.outputs.component_a_output}}
    outputs:
      component_b_output: 
        mode: rw_mount
  component_c:
    type: command
    component: ./componentC.yml
    inputs:
      component_c_input: ${{parent.jobs.component_b.outputs.component_b_output}}
    outputs:
      component_c_output: ${{parent.outputs.final_pipeline_output}}
      #  mode: upload

Python SDK v2

L’exemple suivant définit un pipeline contenant trois nœuds et déplace les données entre chaque nœud.

  • prepare_data_node qui charge l’image et les étiquettes de l’ensemble de données Fashion MNIST dans mnist_train.csv et mnist_test.csv.
  • train_nodequi entraîne un modèle CNN avec Keras à l’aide des données d’entraînement, mnist_train.csv .
  • score_node qui évalue le modèle à l’aide de données de test, mnist_test.csv.
# define a pipeline containing 3 nodes: Prepare data node, train node, and score node
@pipeline(
    default_compute=cpu_compute_target,
)
def image_classification_keras_minist_convnet(pipeline_input_data):
    """E2E image classification pipeline with keras using python sdk."""
    prepare_data_node = prepare_data_component(input_data=pipeline_input_data)

    train_node = keras_train_component(
        input_data=prepare_data_node.outputs.training_data
    )
    train_node.compute = gpu_compute_target

    score_node = keras_score_component(
        input_data=prepare_data_node.outputs.test_data,
        input_model=train_node.outputs.output_model,
    )


# create a pipeline
pipeline_job = image_classification_keras_minist_convnet(pipeline_input_data=fashion_ds)

Étapes suivantes