Azure Data Factory のPipelineから Azure Machine Learning(Preview) の Pipeline を実行する

今回は、Microsoft Ignite 2019付近でリリースされた、Azure Data Factory の Pipeline から Azure Machine Learning(Preview) の Pipeline を実行する機能を試してみます。Machine LearningはまだPreviewということもありますが、試して分かったことがいくつかありますので共有しておきます。（2019年12月31日の時点での情報となります)

# 環境の準備
まずは、準備です。Azure Data Factory と Machine Learning の Pipeline を既に持っている人は読み飛ばしてください。

## Azure Data Factory の作成する
Azure Data Factory を新規から作成します。検索で "Data Factory" と入力すると素早く探すことができます。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/18bea21f-01bf-228e-a022-3121aab7d6e5.png)

見つけたらそのまま作成ボタンを押します。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/c919925f-88e1-9055-2982-5d6c28d98eed.png)

Azure Data Factory で Data Flow や Pipeline を作成する際は、Gitを有効にしておいてください。そのほうがスムーズに作業できます。

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/f2c02dbb-ac30-c402-0810-f6392109d822.png)

次は Azure Machine Learning を作成します。

## Azure Machine Learning の作成する

Azure Machine Learning のリソースを作成します。新規の検索から"Machine Learning"で見つけることができます。なお、"Machine Learning Studio (classic) Workspace" など、様々なMachine Learning が表示されますが、今回使うのは、一番シンプルに表示されている "Machine Learning" になります。

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/a838c06c-ff42-26f2-dc19-fd719c5834ed.png)

ワークスペースでデザイナーを使いたいので、ワークスペースのエディションは "Enterprise" を選択します。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/7e353f84-699c-3aba-21e6-4c435052c4bf.png)

作成したら新しい Azure Machine Learning Studio を開きます。

![15-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/42421be3-d834-490e-4b6c-b650e5d221e7.png)

Azure Machine Learning Studio を開いたら、コンピュートの設定をします。今回は、Azure Data Factory のPipelineから Azure Machine Learning(Preview) の Pipeline を実行するだけなので Training Clusters を作成します。Minimum number of nodes を 0 にしておくと、無駄なコンピュートリソースを削減することができます。

![15-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/ba12907a-da4d-e9a1-598b-d7cccbe2e432.png)


## Azure Machine Learning の Pipeline を作成する
今回は、Azure Data Factory のPipelineから Azure Machine Learning(Preview) の Pipeline を実行できれば良いので、自動車の価格予測サンプルから Pipeline を作成します。

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/e7000868-816d-d942-8944-e62f6f5d4ad7.png)

デザイナーで作成した Pipeline を Publish することにより、Azure Data Factory から実行できるようになります。下の図は、Training Pipeline で学習した後に、Batch Interface Pipeline (推論) を作成したものになります。入力と出力をご自身のStorage BlobやData Lakeに設定してください。

※ここで注意しないといけないことは、Pipelineの名前を、19文字以内に収めることです。Publishにより作成されるPipelineは自動で追加される文字列 17文字と合わせて、36文字以内に収めないと、Azure Data Factory から実行することができません。

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/c5b55bd4-5ce0-0046-974c-35c747268f89.png)

# Azure Data Factory の Linked Service を作成する
Azure Data Factory の Linked Service を作成する前に、Azure Data Factory から Azure Machine Learning に接続するためのアクセス制御(IAM)設定を済ませておく必要があります。

## Azure Active Directory にアプリケーションを登録する
まずは、Azure Active Directory にアプリケーションを登録して、サービスプリンシパルとシークレットを作成します。ポータルから Azure Active Directory を選択します。

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/4206f5ad-8c54-2c23-4df6-d7ff0e837b5c.png)

Azure Active Directoryのメニューからアプリの登録を選択して、新規登録をクリックします。

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/35da9d10-a8c3-5396-8a25-f7d4221cf089.png)

アプリの登録では、Azure Data Factoryが使うことを意識して名前を設定すると分かりやすいと思います。

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/4b6db4cd-2a68-fafb-4ece-136389510b09.png)

作成されたアプリの登録の概要に書かれている、以下の項目は、Azure Data Factory の Linked Service で登録するので覚えておいてください。

- Azure Active Directory アプリの登録 "アプリケーション(クライアント)ID" は、Azure Data Factory Linked Service の "Service Principal Key" に入力する値
- Azure Active Directory "ディレクトリ(テナント)ID" は、Azure Data Factory Linked Service の "Tenant" に入力する値

![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/760cd3df-9167-f9ba-20e6-7914cd285f58.png)

次にシークレットを作成します。メニューの証明書とシークレットから、新しいクライアントシークレットをクリックします。有効期限を設定した場合は、有効期限が過ぎる前に更新するのを忘れないでください。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/484c3cfe-2792-246d-90f2-aceeb2e1d17a.png)

シークレットの値は後から知ることができなくなるため、今のうちに覚えておいてください。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/8b39e8ae-00d5-aba6-c4d9-805d9d4d2b56.png)

## Azure Machine Learning の アクセス制御(IAM)を設定する
Azure Machine Learning の アクセス制御(IAM)から"ロール割り当ての追加"をクリックします。

![11-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/cfcf7f54-bfa7-04ba-9a3e-2b29212242ea.png)

先ほど作成した Azure Active Directory アプリ登録を選択します。役割は共同作成者になります。役割の詳細は以下のURLを参考にしてください。

https://docs.microsoft.com/ja-jp/azure/machine-learning/service/how-to-assign-roles

![11-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/48d46244-4da2-8da0-61be-443ccccc77f6.png)

## Linked Service に Machine Learning を作成する
Azure Data Factory の作成と監視から Data Factory のワークスペースに移動します。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/6f806743-2e02-cd83-8ce2-120ec7c707ca.png)

メニューの Connection から Azure Machine Learning との接続を設定します。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/0cb191d8-de48-829d-ed5c-2f1c4a18b672.png)

上の方でも書きましたが、Azure Active Directoryのアプリの登録で表示された値を入力します。

- Azure Active Directory アプリの登録 "アプリケーション(クライアント)ID" は、Azure Data Factory Linked Service の "Service Principal Key" に入力する値
- Azure Active Directory "ディレクトリ(テナント)ID" は、Azure Data Factory Linked Service の "Tenant" に入力する値

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/11a4f1c7-a019-9f10-76c3-53b03a7fe6eb.png)

# Azure Data Factory の Pipeline から Machine Learning Pipeline を実行する
Factory Resources メニューから Pipelines を作成します。

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/a86e0f68-b5b0-3be4-7a2d-008ce5b15f1a.png)

Pipeline の Activities から Machine Learningの ML Execute Pipeline を選びます。Settingsには、先ほど作成したMachine Learning の Linked Service を選択します。Test Connection をクリックすると接続確認を行うことができます。そして、実行するPipelineを選びます。

※上の方でも書きましたが、ここで選択するPipeline名は、36文字以内のものになります。

![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/dd8ba67c-8521-dbd8-4e66-5d0c88c5262d.png)

デバック実行をすることで、Machine LearningのPipelineが実行を確認することができます。

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32580/fcd8cfde-21d9-ddea-518e-33e3de4be132.png)

# まとめ
これから Azure Data Factory と Azure Machine Learning を使う上で、留意しておいたら良い点をまとめておきます。  

- Azure Machine Learning の Pipelineの名前は、19文字以内に収めてください。
    - Azure Data Factory から実行される Pipeline の名前は、36文字以内ですが、Azure Machine Learning の Publishにより自動で追加される文字列 17文字と合わせて、36文字以内に収めるためです。  
- Azure Machine Learning のアクセス制御(IAM)は、共同作成者の役割を設定してください。
- Azure Data Factory から Azure Machine Learning にアクセスで使用しているサービスプリンシパルのシークレットは有効期限がくる前に更新しましょう。 
- Azure Machine Learning Pipeline のコンピュートリソースは、Training Cluster が使われます。
- Azure Machine Learning の Import Data は複数のファイルをインポートしますが、Export Data は単一のファイルとして出力されます。
- Azure Machine Learning は、Previewですので動作が変わる可能性があります。

あと、最後に、間違っている点などあれば、教えてください。