コンポーネントの作成

完了

コンポーネント を使用すると、同じ Azure Machine Learning ワークスペース内のユーザー間で簡単に共有できる再利用可能なスクリプトを作成できます。 コンポーネントを使って Azure Machine Learning パイプラインを構築することもできます。

コンポーネントを使う

コンポーネントを使う主な理由は 2 つあります。

  • パイプラインを構築するため。
  • すぐに使用できるコードを共有するため。

"スケーリングのためにコードを準備する" ときにコンポーネントを作成する必要があります。 実験と開発が完了したら、モデルを運用環境に移行する準備は整いました。

Azure Machine Learning のワークスペース内には (任意の言語の) コードを格納するコンポーネントを作成できます。 理想的には、機械学習ワークフローに関連する特定のアクションを実行するようにコンポーネントを設計します。

たとえば、コンポーネントは、データの正規化、機械学習モデルのトレーニング、またはモデルの評価を行う Python スクリプトで構成される場合があります。

コンポーネントは、他の Azure Machine Learning ユーザーと簡単に共有できます。ユーザーは自分の Azure Machine Learning パイプラインでコンポーネントを再利用できます。

Azure Machine Learning ワークスペースで使用可能なコンポーネントのスクリーンショット。

コンポーネントを作成する

コンポーネントは次の 3 つの部分で構成されています。

  • メタデータ: コンポーネントの名前、バージョンなどが含まれます。
  • インターフェイス: 予想される入力パラメーター (データセットやハイパーパラメーターなど) と予想される出力 (メトリックやアーティファクトなど) が含まれます。
  • コマンド、コード、環境: コードの実行方法を指定します。

コンポーネントを作成するには、次の 2 つのファイルが必要です。

  • 実行するワークフローを含むスクリプト。
  • コンポーネントのメタデータ、インターフェイス、コマンド、コード、環境を定義する YAML ファイル。

YAML ファイルを作成するか、デコレーターとして command_component() 関数を使って YAML ファイルを作成することができます。

ヒント

ここでは、コンポーネントを作成するために YAML ファイルを作成することに焦点を当てます。 または、command_component()を使用してコンポーネントを作成する方法の詳細について説明します。

たとえば、欠損値を削除し、データを正規化する Python スクリプト prep.py があるとします。

# import libraries
import argparse
import pandas as pd
import numpy as np
from pathlib import Path
from sklearn.preprocessing import MinMaxScaler

# setup arg parser
parser = argparse.ArgumentParser()

# add arguments
parser.add_argument("--input_data", dest='input_data',
                    type=str)
parser.add_argument("--output_data", dest='output_data',
                    type=str)

# parse args
args = parser.parse_args()

# read the data
df = pd.read_csv(args.input_data)

# remove missing values
df = df.dropna()

# normalize the data    
scaler = MinMaxScaler()
num_cols = ['feature1','feature2','feature3','feature4']
df[num_cols] = scaler.fit_transform(df[num_cols])

# save the data as a csv
output_df = df.to_csv(
    (Path(args.output_data) / "prepped-data.csv"), 
    index = False
)

prep.py スクリプトのコンポーネントを作成するには、YAML ファイル prep.yml が必要です。

$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
name: prep_data
display_name: Prepare training data
version: 1
type: command
inputs:
  input_data: 
    type: uri_file
outputs:
  output_data:
    type: uri_file
code: ./src
environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest
command: >-
  python prep.py 
  --input_data ${{inputs.input_data}}
  --output_data ${{outputs.output_data}}

この YAML ファイルは、prep.py フォルダーに格納されている src スクリプトを参照していることに注意してください。 次のコードを使ってコンポーネントを読み込むことができます。

from azure.ai.ml import load_component
parent_dir = ""

loaded_component_prep = load_component(source=parent_dir + "./prep.yml")

コンポーネントを読み込んだら、それをパイプラインで使うか、コンポーネントを登録することができます。

コンポーネントを登録する

コンポーネントをパイプラインで使うには、スクリプトと YAML ファイルが必要です。 また、ワークスペース内の他のユーザーがコンポーネントにアクセスできるようにするために、Azure Machine Learning ワークスペースにコンポーネントを登録することもできます。

次のコードを使ってコンポーネントを登録できます。

prep = ml_client.components.create_or_update(prepare_data_component)