Verze a sledování datových sad Azure Machine Learning

V tomto článku se dozvíte, jak verze a sledovat Azure Machine Learning datových sad pro reprodukovatelnost. Správa verzí datové sady je způsob, jak si vytvořit záložku stavu dat, abyste mohli použít konkrétní verzi datové sady pro budoucí experimenty.

Typické scénáře správy verzí:

  • Když jsou k dispozici nová data pro opětovné natrénování
  • Při použití různých přístupů k přípravě dat nebo technických přístupech k funkcím

Požadavky

Pro účely tohoto kurzu potřebujete:

Registrace a načtení verzí datové sady

Registrací datové sady můžete verze, opakované použití a sdílení dat napříč experimenty a kolegy. Můžete zaregistrovat více datových sad pod stejným názvem a načíst konkrétní verzi podle názvu a čísla verze.

Registrace verze datové sady

Následující kód zaregistruje novou verzi titanic_ds datové sady nastavením parametru create_new_version na True. Pokud v pracovním prostoru není zaregistrovaná žádná datová titanic_ds sada, vytvoří kód novou datovou sadu s názvem titanic_ds a nastaví její verzi na 1.

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

Načtení datové sady podle názvu

Ve výchozím nastavení vrátí metoda get_by_name() třídy Dataset nejnovější verzi datové sady zaregistrované v pracovním prostoru.

Následující kód získá verzi 1 titanic_ds datové sady.

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)

Osvědčený postup správy verzí

Při vytváření verze datové sady nevytváříte další kopii dat s pracovním prostorem. Vzhledem k tomu, že datové sady jsou odkazy na data ve vaší službě úložiště, máte jediný zdroj pravdy, který spravuje vaše služba úložiště.

Důležité

Pokud jsou data odkazovaná vaší datovou sadou přepsána nebo odstraněna, volání konkrétní verze datové sady se nezmění .

Při načítání dat z datové sady se vždy načte aktuální obsah dat odkazovaný datovou sadou. Pokud chcete zajistit, aby každá verze datové sady byla reprodukovatelná, doporučujeme neupravovat obsah dat, na který odkazuje verze datové sady. Když se nová data přidají, uložte nové datové soubory do samostatné datové složky a vytvořte novou verzi datové sady, která bude obsahovat data z této nové složky.

Následující obrázek a ukázkový kód ukazují doporučený způsob strukturování datových složek a vytváření verzí datových sad, které odkazují na tyto složky:

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)

Verze výstupní datové sady kanálu ML

Datovou sadu můžete použít jako vstup a výstup každého kroku kanálu ML. Při opětovném spuštění kanálů se výstup každého kroku kanálu zaregistruje jako nová verze datové sady.

ML kanály naplní výstup každého kroku do nové složky při každém opětovném spuštění kanálu. Toto chování umožňuje reprodukovatelné výstupní výstupní datové sady verzí. Přečtěte si další informace o datových sadách v kanálech.

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)

Sledování dat v experimentech

Azure Machine Learning sleduje data v rámci experimentu jako vstupní a výstupní datové sady.

Tady jsou scénáře, ve kterých se vaše data sledují jako vstupní datová sada.

  • DatasetConsumptionConfig Jako objekt prostřednictvím objektu inputs nebo arguments parametru objektu ScriptRunConfig při odesílání spuštění experimentu.

  • Pokud se metody jako get_by_name() nebo get_by_id() volají ve vašem skriptu. V tomto scénáři je název přiřazený k datové sadě, když jste ji zaregistrovali do pracovního prostoru, zobrazovaný název.

Tady jsou scénáře, ve kterých se vaše data sledují jako výstupní datová sada.

  • OutputFileDatasetConfig Předání objektu buď prostřednictvím nebo parametru outputsarguments při odesílání spuštění experimentu. OutputFileDatasetConfig Objekty lze použít také k zachování dat mezi kroky kanálu. Viz Přesun dat mezi kroky kanálu ML.

  • Zaregistrujte datovou sadu ve skriptu. V tomto scénáři je název přiřazený k datové sadě, když jste ji zaregistrovali do pracovního prostoru, zobrazovaný název. V následujícím příkladu je název, training_ds který by se zobrazil.

    training_ds = unregistered_ds.register(workspace = workspace,
                                     name = 'training_ds',
                                     description = 'training data'
                                     )
    
  • Odeslání podřízeného spuštění s neregistrovanou datovou sadou ve skriptu Výsledkem je anonymní uložená datová sada.

Trasování datových sad v spuštění experimentu

Pro každý Machine Learning experiment můžete snadno sledovat datové sady používané jako vstup s objektem experimentuRun.

Následující kód používá metodu get_details() ke sledování, které vstupní datové sady byly použity při spuštění experimentu:

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

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

Můžete také najít input_datasets experimenty pomocí studio Azure Machine Learning.

Následující obrázek ukazuje, kde najít vstupní datovou sadu experimentu na studio Azure Machine Learning. V tomto příkladu přejděte do podokna Experimenty a otevřete kartu Vlastnosti pro konkrétní spuštění experimentu. keras-mnist

Input datasets

K registraci modelů v datových sadách použijte následující kód:

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

Po registraci můžete zobrazit seznam modelů registrovaných v datové sadě pomocí Pythonu nebo přejít do studia.

Následující zobrazení je z podokna Datové sady v části Prostředky. Vyberte datovou sadu a pak vyberte kartu Modely pro seznam modelů zaregistrovaných v datové sadě.

Input datasets models

Další kroky