Control de versiones y seguimiento de conjuntos de datos de Azure Machine Learning

SE APLICA A:Azure ML del SDK de Python v1

En este artículo, aprenderá a controlar versiones y realizar un seguimiento de los conjuntos de datos de Azure Machine Learning para fines de reproducibilidad. El control de versiones del conjunto de datos marca los estados específicos de los datos para que pueda aplicar una versión específica del conjunto de datos para futuros experimentos.

Es posible que quiera crear una versión de los recursos de Azure Machine Learning en estos escenarios típicos:

  • Cuando los nuevos datos estén disponibles para el reentrenamiento
  • Al aplicar diferentes enfoques de preparación de datos o ingeniería de características

Requisitos previos

Registrar y recuperar versiones del conjunto de datos

Puede crear versiones, reutilizar y compartir un conjunto de datos registrado entre experimentos y con sus compañeros. Puede registrar varios conjuntos de datos con el mismo nombre y recuperar una versión específica por nombre y número de versión.

Registrar una versión del conjunto de datos

Este ejemplo de código establece el create_new_versionparámetro del titanic_dsconjunto de datos de True, para registrar una nueva versión de ese conjunto de datos. Si el área de trabajo no tiene ningún titanic_dsconjunto de datos existente registrado, el código crea un nuevo conjunto de datos con el nombre titanic_dsy establece su versión en 1.

titanic_ds = titanic_ds.register(workspace = workspace,
                                 name = 'titanic_ds',
                                 description = 'titanic training data',
                                 create_new_version = True)

Recuperar un conjunto de datos por nombre

De forma predeterminada, el método de Datasetclase get_by_name() devuelve la versión más reciente del conjunto de datos registrado con el área de trabajo.

Este código devuelve la versión 1 del conjunto de datos titanic_ds.

from azureml.core import Dataset
# Get a dataset by name and version number
titanic_ds = Dataset.get_by_name(workspace = workspace,
                                 name = 'titanic_ds', 
                                 version = 1)

Procedimientos recomendados de control de versiones

Al crear una versión del conjunto de datos, no crear una copia adicional de los datos con el área de trabajo. Dado que los conjuntos de datos son referencias a los datos del servicio de almacenamiento, tiene una única fuente de verdad, administrada por el servicio de almacenamiento.

Importante

Si los datos a los que hace referencia el conjunto de datos se sobrescriben o eliminan, una llamada a una versión específica del conjunto de datosno revertir el cambio.

Cuando se cargan datos de un conjunto de datos, siempre se carga el contenido de datos actual al que hace referencia el conjunto de datos. Si desea asegurarse de que cada versión del conjunto de datos es reproducible, se recomienda evitar la modificación del contenido de datos al que hace referencia la versión del conjunto de datos. Cuando se produzcan nuevos datos, guarde los nuevos archivos de datos en una carpeta de datos independiente y, a continuación, cree una nueva versión del conjunto de datos para incluir datos de esa nueva carpeta.

Esta imagen y código de ejemplo muestran la manera recomendada de estructurar las carpetas de datos y crear versiones de conjunto de datos que hagan referencia a esas carpetas:

Folder structure

from azureml.core import Dataset

# get the default datastore of the workspace
datastore = workspace.get_default_datastore()

# create & register weather_ds version 1 pointing to all files in the folder of week 27
datastore_path1 = [(datastore, 'Weather/week 27')]
dataset1 = Dataset.File.from_files(path=datastore_path1)
dataset1.register(workspace = workspace,
                  name = 'weather_ds',
                  description = 'weather data in week 27',
                  create_new_version = True)

# create & register weather_ds version 2 pointing to all files in the folder of week 27 and 28
datastore_path2 = [(datastore, 'Weather/week 27'), (datastore, 'Weather/week 28')]
dataset2 = Dataset.File.from_files(path = datastore_path2)
dataset2.register(workspace = workspace,
                  name = 'weather_ds',
                  description = 'weather data in week 27, 28',
                  create_new_version = True)

Control de versiones de un conjunto de datos de salida de canalización de ML

Puede usar un conjunto de datos como entrada y salida de cada paso de canalización de ML. Al volver a ejecutar las canalizaciones, la salida de cada paso de la canalización se registra como una nueva versión del conjunto de datos.

Las canalizaciones de Machine Learning rellenan la salida de cada paso en una nueva carpeta cada vez que se vuelve a ejecutar la canalización. Los conjuntos de datos de salida con versiones se vuelven reproducibles. Para más información, visite conjuntos de datos en canalizaciones.

from azureml.core import Dataset
from azureml.pipeline.steps import PythonScriptStep
from azureml.pipeline.core import Pipeline, PipelineData
from azureml.core. runconfig import CondaDependencies, RunConfiguration

# get input dataset 
input_ds = Dataset.get_by_name(workspace, 'weather_ds')

# register pipeline output as dataset
output_ds = PipelineData('prepared_weather_ds', datastore=datastore).as_dataset()
output_ds = output_ds.register(name='prepared_weather_ds', create_new_version=True)

conda = CondaDependencies.create(
    pip_packages=['azureml-defaults', 'azureml-dataprep[fuse,pandas]'], 
    pin_sdk_version=False)

run_config = RunConfiguration()
run_config.environment.docker.enabled = True
run_config.environment.python.conda_dependencies = conda

# configure pipeline step to use dataset as the input and output
prep_step = PythonScriptStep(script_name="prepare.py",
                             inputs=[input_ds.as_named_input('weather_ds')],
                             outputs=[output_ds],
                             runconfig=run_config,
                             compute_target=compute_target,
                             source_directory=project_folder)

Seguimiento de los datos de los experimentos

Azure Machine Learning realiza un seguimiento de los datos a lo largo del experimento como conjuntos de datos de entrada y salida. Estos son los escenarios en los que se realiza un seguimiento de los datos como conjunto de datos de entrada:

  • Como objeto DatasetConsumptionConfig, mediante el parámetro inputs o arguments del objeto ScriptRunConfig, al enviar el trabajo del experimento

  • Cuando el script llama a determinados métodos, get_by_name() o get_by_id(), por ejemplo. El nombre asignado al conjunto de datos en el momento en que registró ese conjunto de datos en el área de trabajo es el nombre mostrado

Estos son los escenarios en los que se realiza un seguimiento de los datos como conjunto de datos de entrada:

  • Pase un objeto OutputFileDatasetConfig a través del parámetro outputs o arguments al enviar un trabajo de experimento. OutputFileDatasetConfig objetos también pueden conservar los datos entre los pasos de la canalización. Para obtener más información, visite Mover datos entre los pasos de canalización de ML

  • Registrar un conjunto de datos en el script. El nombre asignado al conjunto de datos cuando lo registró en el área de trabajo es el nombre que se muestra. En este ejemplo de código, training_ds es el nombre que se muestra:

    training_ds = unregistered_ds.register(workspace = workspace,
                                     name = 'training_ds',
                                     description = 'training data'
                                     )
    
  • Envío de un trabajo secundario, con un conjunto de datos no registrado, en el script. Este envío da como resultado un conjunto de datos guardado anónimo

Seguimiento de conjuntos de datos en trabajos de experimentos

Para cada experimento de Machine Learning, puede realizar un seguimiento de los conjuntos de datos de entrada del objeto Job del experimento. En este ejemplo de código se usa el método get_details() para realizar un seguimiento de los conjuntos de datos de entrada usados con la ejecución del experimento:

# get input datasets
inputs = run.get_details()['inputDatasets']
input_dataset = inputs[0]['dataset']

# list the files referenced by input_dataset
input_dataset.to_path()

También puede encontrar el input_datasets desde experimentos con Azure Machine Learning Studio.

En esta captura de pantalla se muestra dónde encontrar el conjunto de datos de entrada de un experimento en Azure Machine Learning Studio. En este ejemplo, comience en el panel Experimentos y abra la pestaña Propiedades para una ejecución específica del experimento, keras-mnist.

Input datasets

Este código registra modelos con conjuntos de datos:

model = run.register_model(model_name='keras-mlp-mnist',
                           model_path=model_path,
                           datasets =[('training data',train_dataset)])

Después del registro, puede ver la lista de modelos registrados con el conjunto de datos con Python o el studio.

La captura de pantalla de Thia procede del panel conjuntos de datos en Activos. Seleccione el conjunto de datos y, a continuación, seleccione la pestaña Modelos para obtener una lista de los modelos registrados con el conjunto de datos.

Input datasets models

Pasos siguientes