適用対象:Azure Machine Learning SDK v1 for Python
重要
この記事では、Azure Machine Learning SDK v1 の使用に関する情報を提供します。 SDK v1 は 2025 年 3 月 31 日の時点で非推奨となり、サポートは 2026 年 6 月 30 日に終了します。 SDK v1 は、その日付までインストールして使用できます。
2026 年 6 月 30 日より前に SDK v2 に移行することをお勧めします。 SDK v2 の詳細については、「 Azure Machine Learning Python SDK v2 と SDK v2 リファレンスとは」を参照してください。
この記事では、再現性のために Azure Machine Learning データセットのバージョン管理と追跡を行う方法について説明します。 データセットのバージョン管理ではデータの特定の状態がブックマークされるので、将来の実験にデータセットの特定のバージョンを適用できます。
次の典型的なシナリオでは、Azure Machine Learning リソースをバージョン管理することをお勧めします。
- 再トレーニングのために新しいデータを使用できるようになったとき
- 異なるデータ準備または特徴エンジニアリングのアプローチを適用するとき
前提条件
Azure Machine Learning SDK for Python。 この SDK には、azureml-datasets パッケージが含まれています
Azure Machine Learning ワークスペース。 新しいワークスペースを作成するか、次のコード サンプルを使って既存のワークスペースを取得します。
import azureml.core from azureml.core import Workspace ws = Workspace.from_config()
データセットのバージョンを登録および取得する
登録されたデータセットをバージョン管理し、複数の実験で再利用し、同僚と共有することができます。 複数のデータセットを同じ名前で登録し、名前とバージョン番号によって特定のバージョンを取得することができます。
データセットのバージョンを登録する
次のコード サンプルでは、create_new_version
データセットのtitanic_ds
パラメーターをTrue
に設定して、そのデータセットの新しいバージョンを登録します。 ワークスペースに既存の titanic_ds
データセットが登録されていない場合、このコードは titanic_ds
という名前で新しいデータセットを作成し、そのバージョンを 1 に設定します。
titanic_ds = titanic_ds.register(workspace = workspace,
name = 'titanic_ds',
description = 'titanic training data',
create_new_version = True)
名前でデータセットを取得する
既定では、Dataset
クラスの get_by_name() メソッドは、ワークスペースに登録されているデータセットの最新バージョンを返します。
次のコードは、titanic_ds
データセットのバージョン 1 を返します。
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)
バージョン管理のベスト プラクティス
データセットのバージョンを作成しても、ワークスペースにデータの追加のコピーが作成されるわけでは "ありません"。 データセットはストレージ サービス内のデータへの参照なので、信頼できる唯一の情報源があり、ストレージ サービスによって管理されます。
重要
データセットによって参照されるデータが上書きまたは削除された場合、特定のバージョンのデータセットを呼び出しても、変更は元に戻されません。
データセットからデータを読み込むときは常に、データセットによって参照されている現在のデータの内容が読み込まれます。 各データセット バージョンの再現性を確保するために、データセット バージョンによって参照されるデータ コンテンツの変更を回避することをお勧めします。 新しいデータが発生したら、新しいデータ ファイルを別のデータ フォルダーに保存してから、新しいデータセット バージョンを作成して、その新しいフォルダーのデータを含めます。
次の画像とサンプル コードは、データ フォルダーを構成し、それらのフォルダーを参照するデータセット バージョンを作成する、お勧めの方法を示しています。
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)
ML パイプライン出力データセットをバージョン管理する
データセットは、ML の各パイプライン ステップの入力および出力として使用できます。 パイプラインを再実行すると、各パイプライン ステップの出力は新しいデータセット バージョンとして登録されます。
Machine Learning パイプラインを再実行するたびに、パイプラインによって各ステップの出力が新しいフォルダーに格納されます。 その後、バージョン管理される出力データセットは再現可能になります。 詳しくは、パイプラインのデータセットに関する記事を参照してください。
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)
実験のデータを追跡する
Azure Machine Learning では、実験の全体を通してデータが入力と出力のデータセットとして追跡されます。 次のシナリオでは、データが入力データセットとして追跡されます。
実験ジョブを送信するときに、
ScriptRunConfig
オブジェクトのinputs
またはarguments
のいずれかのパラメーターを使用して、DatasetConsumptionConfig
オブジェクトとしてスクリプトが特定のメソッド (たとえば
get_by_name()
やget_by_id()
) を呼び出すとき。 データセットをワークスペースに登録したときにそのデータセットに割り当てた名前が、表示名となります
次のシナリオでは、データが出力データセットとして追跡されます。
実験ジョブを送信するときに、
outputs
またはarguments
パラメーターを介してOutputFileDatasetConfig
オブジェクトを渡します。OutputFileDatasetConfig
オブジェクトによってパイプライン ステップ間でデータを保持することもできます。 詳しくは、ML パイプライン ステップ間でのデータの移動に関する記事を参照してくださいスクリプトでデータセットを登録します。 データセットをワークスペースに登録したときに割り当てられた名前は、表示される名前です。 次のコード サンプルでは、
training_ds
が表示名になります。training_ds = unregistered_ds.register(workspace = workspace, name = 'training_ds', description = 'training data' )
スクリプトで、登録されていないデータセットを使用して、子ジョブを送信する場合。 この送信の結果は、匿名で保存されたデータセットになります
実験ジョブでデータセットをトレースする
Machine Learning の実験ごとに、実験の Job
オブジェクトに対する入力データセットをトレースできます。 次のコード サンプルでは、get_details()
メソッドを使って、実験の実行で使用された入力データセットを追跡しています。
# get input datasets
inputs = run.get_details()['inputDatasets']
input_dataset = inputs[0]['dataset']
# list the files referenced by input_dataset
input_dataset.to_path()
また、Azure Machine Learning スタジオを使用して、実験から input_datasets
を見つけることもできます。
次のスクリーンショットは、Azure Machine Learning スタジオで実験の入力データセットを確認できる場所を示しています。 この例では、実験ウィンドウから開始し、実験の特定の実行の keras-mnist
] タブを開きます。
次のコードにより、モデルがデータセットに登録されます。
model = run.register_model(model_name='keras-mlp-mnist',
model_path=model_path,
datasets =[('training data',train_dataset)])
登録後は、Python またはスタジオを使って、データセットに登録されているモデルのリストを見ることができます。
次のスクリーンショットは、[資産] の下の [データセット] ペインからのものです。 データセットを選んでから [モデル] タブを選ぶと、そのデータセットに登録されているモデルのリストが表示されます。