Controlar a versão e acompanhar os conjuntos de dados do Azure Machine Learning
APLICA-SE A: SDK do Python azureml v1
Neste artigo, você aprenderá a controlar a versão e a acompanhar os conjuntos de dados do Azure Machine Learning para reprodução. O controle de versão do conjunto de dados é uma maneira de indicar o estado de seus dados de forma que você possa aplicar uma versão específica do conjunto para experimentos futuros.
Talvez você queira ver a versão dos recursos do Azure Machine Learning nesses cenários típicos:
- Quando novos dados ficarem disponíveis para novo treinamento
- Quando você estiver aplicando estratégias diferentes de preparação de dados ou de engenharia de recursos
Pré-requisitos
O SDK do Azure Machine Learning para Python. Esse SDK inclui o pacote azureml-datasets
Um workspace do Azure Machine Learning. Crie um novo workspace ou recupere um workspace existente com esse exemplo de código:
import azureml.core from azureml.core import Workspace ws = Workspace.from_config()
Registrar e recuperar versões do conjunto de dados
Você pode criar versão, reutilizar e compartilhar de um conjunto de dados registrado entre 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 meio do nome e do número dela.
Registrar uma versão de conjunto de dados
Esse exemplo de código define o parâmetro create_new_version
do conjunto de dados titanic_ds
como True
para registrar uma nova versão desse conjunto de dados. Se não houver um conjunto de dados titanic_ds
registrado no workspace, o código criará um conjunto com o nome titanic_ds
e definirá a respectiva 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 método Dataset
get_by_name () na classe retorna a versão mais recente do conjunto de dados registrado com o workspace.
Esse código retorna a versão 1 do conjunto de dados 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)
Melhores práticas de controle de versão
Ao criar uma versão de conjunto de dados, você não cria uma cópia extra dos dados com o workspace. Uma vez que 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, chamar uma versão específica do conjunto de dados não reverte a alteração.
Quando você carrega dados de um conjunto, o conteúdo atual dos dados referenciado pelo conjunto de dados é sempre carregado. Para garantir que cada versão do conjunto de dados seja reproduzível, recomendamos não modificar o conteúdo de dados referenciado pela versão do conjunto de dados. Quando chegarem novos dados, salve os arquivos de dados novos em uma pasta de dados separada e crie uma nova versão do conjunto de dados a fim de incluí-los na nova pasta.
A imagem e o código de exemplo seguintes mostram a maneira recomendada de estruturar suas pastas de dados e criar versões do conjuntos de dados que fazem referência a essas pastas:
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)
Controlar a versão de um conjunto de dados de saída de um pipeline de ML
Você pode usar um conjunto de dados como entrada e saída de cada etapa de pipeline de ML. Quando você executa os pipelines novamente, a saída de cada etapa de pipeline é registrada como uma nova versão do conjunto de dados.
Os pipelines de ML preenchem a saída de cada etapa em uma nova pasta toda vez que o pipeline é reexecutado. Os conjuntos de dados de saída com versão se tornam 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)
Acompanhar dados em seus experimentos
O Azure Machine Learning acompanha seus dados em todo o experimento como conjuntos de dados de entrada e saída. Nesses cenários, seus dados são acompanhados como um conjunto de dados de entrada:
Como um objeto
DatasetConsumptionConfig
por meio do parâmetroinputs
ouarguments
do seu objetoScriptRunConfig
ao enviar o trabalho do experimentoQuando o script chama determinados métodos,
get_by_name()
ouget_by_id()
, por exemplo. O nome atribuído ao conjunto de dados no momento em que você registrou esse conjunto de dados no workspace é o nome exibido
Nesses cenários, seus dados são acompanhados como um conjunto de dados de saída:
Passe um objeto
OutputFileDatasetConfig
por meio dos parâmetrosoutputs
ouarguments
ao enviar um trabalho de experimento. Os objetosOutputFileDatasetConfig
também podem ser usados para persistir os dados entre as etapas do pipeline. Para obter mais informações, visite Mover dados entre as etapas do pipeline de MLRegistrar um conjunto de dados em seu script. Para esse cenário, o nome exibido é o que foi atribuído ao conjunto de dados quando você o registrou no workspace. Nesse exemplo de código,
training_ds
é o nome exibido:training_ds = unregistered_ds.register(workspace = workspace, name = 'training_ds', description = 'training data' )
Envio de um trabalho filho, com um conjunto de dados não registrado, no script. Esse envio resulta em um conjunto de dados salvo anônimo
Rastrear conjuntos de dados em trabalhos de experimento
Para cada experimento do Machine Learning, você pode rastrear os conjuntos de dados de entrada para o objeto de experimento Job
. Este exemplo de código usa o método get_details()
para acompanhar 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 o input_datasets
de experimentos também poder ser usando o Estúdio do Azure Machine Learning.
A imagem a seguir mostra onde encontrar o conjunto de dados de entrada de um experimento no Estúdio do Azure Machine Learning. Para esse exemplo, acesse o painel Experimentos e abra a guia Propriedades para uma execução específica de seu experimento, keras-mnist
.
Esse código registra 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ê poderá ver a lista de modelos registrados com o conjunto de dados usando o Python ou ir para o estúdio.
A captura de tela de Thia é do painel Conjuntos de dados em Ativos. Selecione o conjunto de dados e depois a guia Modelos para obter uma lista dos modelos registrados com o conjunto de dados.