Formatar e controlar conjuntos de dados do Azure Machine Learning

APLICA-SE A:Python SDK azureml v1

Neste artigo, você aprenderá como fazer a versão e rastrear conjuntos de dados do Azure Machine Learning para reprodutibilidade. O controle de versão do conjunto de dados marca estados específicos de seus dados, para que você possa aplicar uma versão específica do conjunto de dados para experimentos futuros.

Talvez você queira fazer a versão dos recursos do Azure Machine Learning nestes cenários típicos:

  • Quando novos dados ficam disponíveis para reciclagem
  • Quando você aplica diferentes abordagens de preparação de dados ou engenharia de recursos

Pré-requisitos

Registrar e recuperar versões do conjunto de dados

Você pode versionar, reutilizar e compartilhar um conjunto de dados registrado em experimentos e com seus colegas. Você pode registrar vários conjuntos de dados com o mesmo nome e recuperar uma versão específica por nome e número de versão.

Registrar uma versão do conjunto de dados

Este exemplo de código define o create_new_version parâmetro do conjunto de titanic_ds dados como , para Trueregistrar uma nova versão desse conjunto de dados. Se o espaço de trabalho não tiver nenhum conjunto de dados existente titanic_ds registrado, o código criará um novo conjunto de dados com o nome titanic_dse definirá sua versão como 1.

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

Recuperar um conjunto de dados por nome

Por padrão, o Dataset método class get_by_name() retorna a versão mais recente do conjunto de dados registrado no espaço de trabalho.

Esse código retorna a versão 1 do titanic_ds conjunto de dados.

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)

Práticas recomendadas de controle de versão

Ao criar uma versão do conjunto de dados, você não cria uma cópia extra dos dados com o espaço de trabalho. Como os conjuntos de dados são referências aos dados em seu serviço de armazenamento, você tem uma única fonte de verdade, gerenciada pelo seu serviço de armazenamento.

Importante

Se os dados referenciados pelo conjunto de dados forem substituídos ou excluídos, uma chamada para uma versão específica do conjunto de dados não reverterá a alteração.

Quando você carrega dados de um conjunto de dados, o conteúdo de dados atual referenciado pelo conjunto de dados é sempre carregado. Se quiser certificar-se de que cada versão do conjunto de dados é reproduzível, recomendamos que evite a modificação do conteúdo de dados referenciado pela versão do conjunto de dados. Quando novos dados chegarem, salve novos arquivos de dados em uma pasta de dados separada e crie uma nova versão do conjunto de dados para incluir dados dessa nova pasta.

Esta imagem e código de exemplo mostram a maneira recomendada de estruturar suas pastas de dados e criar versões de conjunto de dados que fazem referência a essas pastas:

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)

Versão de um conjunto de dados de saída de pipeline de ML

Você pode usar um conjunto de dados como entrada e saída de cada etapa do pipeline de ML. Quando você executa pipelines novamente, a saída de cada etapa do pipeline é registrada como uma nova versão do conjunto de dados.

Os pipelines de Aprendizado de Máquina preenchem a saída de cada etapa em uma nova pasta sempre que o pipeline é executado novamente. Os conjuntos de dados de saída versionados tornam-se reproduzíveis. Para obter mais informações, visite conjuntos de dados em pipelines.

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)

Rastreie dados em seus experimentos

O Azure Machine Learning rastreia seus dados ao longo do experimento como conjuntos de dados de entrada e saída. Nesses cenários, seus dados são rastreados como um conjunto de dados de entrada:

  • Como um DatasetConsumptionConfig objeto, através do inputs ou arguments parâmetro do seu ScriptRunConfig objeto, ao enviar o trabalho de experimento

  • Quando o script chama determinados métodos - get_by_name() ou get_by_id() - por exemplo. O nome atribuído ao conjunto de dados no momento em que você registrou esse conjunto de dados no espaço de trabalho é o nome exibido

Nesses cenários, seus dados são rastreados como um conjunto de dados de saída:

  • Passe um OutputFileDatasetConfig objeto pelo outputs parâmetro ou arguments quando enviar um trabalho de experimento. OutputFileDatasetConfig Os objetos também podem persistir dados entre as etapas do pipeline. Para obter mais informações, visite Mover dados entre etapas de pipeline de ML

  • Registre um conjunto de dados em seu script. O nome atribuído ao conjunto de dados quando você o registrou no espaço de trabalho é o nome exibido. Neste exemplo de código, training_ds é o nome exibido:

    training_ds = unregistered_ds.register(workspace = workspace,
                                     name = 'training_ds',
                                     description = 'training data'
                                     )
    
  • Submissão de um trabalho filho, com um conjunto de dados não registado, no script. Esta submissão resulta num conjunto de dados anónimo guardado

Rastrear conjuntos de dados em trabalhos de experimento

Para cada experimento de Aprendizado de Máquina, você pode rastrear os conjuntos de dados de entrada para o objeto do experimento Job . Este exemplo de código usa o get_details() método para controlar os conjuntos de dados de entrada usados com a execução do 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()

Você também pode encontrar as input_datasets experiências com o estúdio do Azure Machine Learning.

Esta captura de tela mostra onde encontrar o conjunto de dados de entrada de um experimento no estúdio do Azure Machine Learning. Neste exemplo, comece no painel Experimentos e abra a guia Propriedades de uma execução específica do experimento, keras-mnist.

Input datasets

Este código regista modelos com conjuntos de dados:

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

Após o registro, você pode ver a lista de modelos registrados com o conjunto de dados com Python ou o estúdio.

A captura de tela do Thia é do painel Conjuntos de Dados em Ativos. Selecione o conjunto de dados e, em seguida, selecione a guia Modelos para obter uma lista dos modelos registrados no conjunto de dados.

Input datasets models

Próximos passos