Azure Machine Learning Python SDK v2でのML Pipeline開発についての整理

## 目的

Python SDK v2でML pipeline作ろうとしたら複雑だったのでGithubのサンプルコードを使って自分用に整理した

### Azure ML Pipelineについて

[Azure Machine Learning パイプラインとは](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-ml-pipelines)

[Azure Machine Learning コンポーネントとは](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-component)

[Azure Machine Learning SDK v2 でコンポーネントを使用して機械学習パイプラインを作成して実行する (プレビュー)](https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-create-component-pipeline-python)

[Azure Machine Learning Python SDK v2 (プレビュー)](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-v2#azure-machine-learning-python-sdk-v2-preview)

[Python SDK v2](https://docs.microsoft.com/ja-jp/python/api/azure-ai-ml/azure.ai.ml?view=azure-python-preview&viewFallbackFrom=azure-ml-py)


## 整理結果

ざっくりのイメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/71ce8e0a-5124-844d-4397-cc656e979086.png)

コンポーネントを選ぶとこんな中身。それぞれのコンポーネントがそれぞれのジョブ実行を送信したのと同じ感じ


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/65dbb866-e7b2-e41e-b579-215ebc06d8d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e685dac4-b95a-3c48-28c1-bfae60043632.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0158e398-de13-4ed9-216b-25c18399c4fd.png)



これを作る流れ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/490e515b-382e-beff-10dc-6abda70436af.png)

コンポーネントの作り方

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/71c76ae5-0678-0e36-4b13-12adc34f4141.png)




### リファレンス

[load_component](https://docs.microsoft.com/ja-jp/python/api/azure-ai-ml/azure.ai.ml?view=azure-python-preview#azure-ai-ml-command)

[command](https://docs.microsoft.com/ja-jp/python/api/azure-ai-ml/azure.ai.ml?view=azure-python-preview#azure-ai-ml-command)


## サンプル1. yamlからComponentsでパイプラインを構築する

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1a_pipeline_with_components_from_yaml



>**学習目標** - このチュートリアルの終了時には、以下のことができるようになっているはずです。
>- Python SDKからAMLワークスペースに接続する。
>- YAML から `CommandComponent` を定義してロードする。
>- ロードしたコンポーネントを使用してパイプラインを作成する。
> 
>**このノートブックでは、ユーザーがyamlを使ってコンポーネントを定義し、そのコンポーネントを使用してパイプラインを構築するシナリオを扱います。**


### コンポーネント 

#### Load:yamlをload_component 

![2022-06-25-16-10-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/56e41bb7-baa1-16d9-b177-54e4cbbdc150.png)


yaml(python実行コマンド)

![2022-06-25-16-10-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a9ccd61a-c1b9-bf6b-daa1-9c0683ea0d99.png)


python

![2022-06-25-16-14-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/eed120b7-4ad3-e0e7-0ca0-a35274b61c4f.png)


### Pipeline

#### CreateSubmit:デコレータ defのみ

![2022-06-25-16-11-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/94c27cf1-0cde-c63d-7e33-49eec4344ee0.png)


## サンプル2 command_component で装飾された python 関数でパイプラインを構築する。

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1b_pipeline_with_python_function_components

> **学習目標** - このチュートリアルの終わりまでに、あなたはできるようになるはずです。
>- Python SDKからAMLワークスペースに接続する。
>- Python の関数と `command_component` デコレーターを使用して `CommandComponent` を定義する。
>- command_component` で定義されたコンポーネントを使用して `Pipeline` を作成する。
>
> **このノートでは、Python の関数と `@command_component` デコレータを使用して `CommandComponent` を定義し、コマンドコンポーネントを使用してパイプラインを構築する方法について説明します。**


### Component 

designer sdkが必要（Compute instanceになし

![2022-06-25-16-13-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1f4c1b0f-2635-9551-4660-6a801d819456.png)


#### Load:デコレータつきpython import

![2022-06-25-16-13-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/592e00a2-a145-358c-106b-517099ea8d31.png)


python 

![2022-06-25-16-15-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/44fbe18d-505b-9244-2260-ceced9fb9422.png)


### Pipeline 

#### CreateSubmit:デコレータdef（cluster

![2022-06-25-16-15-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b0e63317-c74a-a07f-f385-988147b9cecf.png)


## サンプル3 sweep ノードでパイプラインを構築する

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1c_pipeline_with_hyperparameter_sweep

>**学習目標** - このチュートリアルの終わりまでに、あなたはできるようになるはずです。
>- Python SDK から AML ワークスペースに接続する。
>- スイープノードを `sweep()` で作成する。
>- スイープノードを使用してパイプラインを作成します。
>
>**このノートでは、`sweep()` を使用してスイープノードを作成し、それをパイプラインで使用する方法について説明します。sweepノードは、特定のコマンドコンポーネントに対して、指定された計算機(ローカルまたはクラウド)でハイパーパラメータチューニングを有効にするために使用することができます。ターゲット出力を検索するた>めの `search_space` と `objective` を定義することができます。** 

### Component 

#### Load:yamlをload_component 

※ Pipeline セルでロード

ソース内

![2022-06-25-16-16-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c8ce1176-9ba0-0d3c-0e4c-eb245d75955d.png)


### Pipeline 

#### CreateSubmit : デコレータdef（tag、sweep stepつき

![2022-06-25-16-17-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8d50563c-62eb-50a5-ad14-2caafc98a211.png)

## サンプル4 コマンド機能でパイプラインを構築する

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1d_pipeline_with_non_python_components

>**学習目標** - このチュートリアルの終わりまでに、あなたはできるようになるはずです。
>- Python SDKからAMLワークスペースに接続する。
>- command()関数を使用して `CommandComponent` を定義する。
>- command()関数で定義されたコンポーネントを使用して、`Pipeline`を作成する。>
>
>**このノートでは、コマンド関数を使って `CommandComponent` を定義し、コマンドコンポーネントを使用してパイプラインを作成する方法を説明します。コマンドコンポーネントは、Azure機械学習パイプラインの基本的な構成要素です。指定したコンピュート（ローカルまたはクラウド）上でタスクを実行するために使用することができます。コマンドコンポーネントは、必要なインフラストラクチャをセットアップするために `Environment` を受け取ります。このインフラストラクチャで実行する `Command` を `inputs` と共に定義します。同じ >`Component` を別のパイプラインで再利用することができます。** 

### Compornent 

#### command関数で定義

![2022-06-25-16-20-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/852f69cf-cf63-f6bb-7ee6-880bd6049972.png)


Rソース（Rわからん。。。

![2022-06-25-16-21-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e63b487e-d70c-8398-31d4-b9a464e693ae.png)


### Pipeline 

#### CreateSubmit:デコレータdef（tag

![2022-06-25-16-44-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0b50aa7b-e023-3f8d-7acb-06ee90f50a68.png)

## サンプル5 登録されたコンポーネントでパイプラインを構築する

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1e_pipeline_with_registered_components

>**学習目標** - このチュートリアルの終わりまでに、あなたはできるようになるはずです。
>- Python SDKからAMLワークスペースに接続する。
>- YAML、`command_component`デコレーターを使用して、`CommandComponent`を定義する。
>- ワークスペースにコンポーネントを作成する
>- 登録されたコンポーネントを使用して `Pipeline` を作成する。
>
>**このノートでは、SDKからコンポーネントを作成し、そのコンポーネントを使用してパイプラインを構築する方法を説明します。**

### Compornent 

#### Load:yamlをload_component 

![2022-06-25-16-46-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9d8bed21-4f64-1005-9fcc-faae70246e4d.png)


yaml

![2022-06-25-16-51-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/de61b23c-59d0-6414-6642-a757d5c8382c.png)


#### Create

![2022-06-25-16-49-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9b9953ac-43dd-15b3-8a37-74a18fc47200.png)


#### デコレータつきpython import

![2022-06-25-16-51-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3e8971e5-9933-aeea-b6f6-c85e77a644cf.png)


python


![2022-06-25-16-47-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/54c3737c-62f5-2af5-3fa0-243a85457fc0.png)


#### Create 

![2022-06-25-16-48-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cdf32feb-f6ea-d7e7-a318-303a0f58310d.png)


### Pipeline 

#### CreateSubmit:デコレータdefのみ

![2022-06-25-17-05-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/52d72a10-7e9f-6582-caeb-beb6ca7a2f9e.png)



## サンプル6 スケジュールを使ってパイプラインを構築する

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1f_pipeline_using_schedule

>**学習目標** - このチュートリアルの終わりまでに、あなたはできるようになるはずです。
>- Python SDKからAMLワークスペースに接続する。
>- YAML から `CommandComponent` を定義してロードする。
>- ロードしたコンポーネントを使用して `Pipeline` を作成する。
>- パイプラインのスケジュールを設定する。
>
>**このノートでは、スケジュールを使用してパイプラインを作成する方法を説明します。**

### Component

#### Load:yamlをload_component 

![2022-06-25-17-09-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d8a5db99-9c7f-6f3c-b92b-a426b8c01572.png)


yaml 

![2022-06-25-17-09-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/dbe979ec-3503-e3d5-866d-258674c95eed.png)


### Pipeline 

#### Create

![2022-06-25-17-11-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0ee75c51-343a-0e12-21ea-2b85a8dccf61.png)


#### Submit Schedule

![2022-06-25-17-12-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/18ece99f-323c-0d5a-9e8b-1d98c565a783.png)


## サンプル7 並列コンポーネントでシンプルなMLパイプラインを構築する

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1g_pipeline_with_parallel_nodes

>**学習目標** - このチュートリアルの終わりまでに、あなたはできるようになるはずです。
>- Python SDKからAMLワークスペースに接続する。
>- 並列ノードによる `Pipeline` の作成
>- 並列ノードを使ってファイル/表形式データを処理する。
>
>**この例では、パラレルノードを作成し、それをパイプラインで使用する方法を説明します。並列ノードは、1つの>メインデータ入力を複数のミニバッチに自動分割し、ミニバッチごとに並列タスクを作成し、すべての並列タスクを計算機クラスタに分散して並列実行します。タスクの実行状況を監視し、データ/コード/プロセスに障害が発生した場合はタスクを自動再試行し、ユーザが設定した場所に出力を保存します。**

### Component

#### Load:yamlをload_component 

![2022-06-25-17-16-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4ccad18d-07a2-d57d-7661-49d25860dba9.png)



yaml


![2022-06-25-17-16-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d9a069c5-ae92-8a43-6c5e-5a95cc9f7202.png)



### parallel step:parallel関数で定義


![2022-06-25-17-17-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0682ec91-b11a-801f-b1c0-8dd0d6967dfa.png)


### Pipeline

#### CreateSubmit

![2022-06-25-17-17-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b9a43e5e-d40c-da28-2f38-1afde2696256.png)



## サンプル8 AutoML in pipeline※Auto MLはコンポーネントなし

https://github.com/Azure/azureml-examples/tree/sdk-preview/sdk/jobs/pipelines/1h_automl_in_pipeline/automl-classification-bankmarketing-in-pipeline

**学習目標** - このチュートリアルの終わりまでに、あなたはできるようになるはずです。
- Classification AutoMLタスクでパイプラインを作成する。

**このノートブックでは、パイプラインの中でClassification AutoMLタスクを使用する方法について説明します。

### Component なし

### Pipeline 

#### Create デコレータ ( tag description

![2022-06-25-17-20-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0e2deed0-21bd-2de0-b1ca-877a990e815e.png)