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
El SDK de Azure Machine Learning para Python. Este SDK incluye el paquete de azureml-datasets
Un área de trabajo de Azure Machine Learning. Crear un área de trabajo nueva, o recuperar un área de trabajo existente con este ejemplo de código:
import azureml.core from azureml.core import Workspace ws = Workspace.from_config()
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_version
parámetro del titanic_ds
conjunto 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_ds
conjunto de datos existente registrado, el código crea un nuevo conjunto de datos con el nombre titanic_ds
y 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 Dataset
clase 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:
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ámetroinputs
oarguments
del objetoScriptRunConfig
, al enviar el trabajo del experimentoCuando el script llama a determinados métodos,
get_by_name()
oget_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ámetrooutputs
oarguments
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 MLRegistrar 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
.
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.