Azure Machine Learning service を使ってみよう（環境構築編）


Azure Machine Learning service の良さを伝えるために、まず自分で使ってみて、周りの色々なサービスとの連携を理解してみます。
いずれは Azure DevOps と組み合わせてどう使うのか、Visual Studio を使うと便利になるのか、など調べてみたいと思いますが、まずはローカル環境での Jupyter Notebook から始めてみたいと思います。

#準備

次の流れで準備を進めましょう。

1. ローカルの開発環境を準備
2. Azure Machine Learning service のワークスペースを準備
3. ワークスペース構成ファイルを用意して、上記2環境を連携

####1. ローカルの開発環境を準備

#####Conda (Python仮想環境) のセットアップ
Conda を使うと 複数の Python 環境を簡単に作成、管理出来るので便利です。今回は「myenv」という仮想環境上にローカル開発環境（Python 3.6.5）を準備します。

[Miniconda をセットアップ](https://docs.conda.io/en/latest/miniconda.html)

Anaconda Prompt から以下を実行します。

```Python:
(base) conda create -n myenv python=3.6.5
(base) conda activate myenv
(myenv) conda install notebook ipykernel
(myenv) ipython kernel install --user
```

#####Azure Machine Learning SDK のセットアップ
Jupyter Notebook 機能を備えた Machine Learning SDK をインストールします。

```Python:
(myenv) pip install --upgrade azureml-sdk[notebooks]
(myenv) conda install -y cython matplotlib pandas
```
自動化された機械学習コンポーネントをインストールします。

```Python:
(myenv) pip install --upgrade azureml-sdk[automl]
```
インストールしたのはこれ
[What is the Azure Machine Learning SDK for Python?](https://docs.microsoft.com/en-us/python/api/overview/azure/ml/intro?view=azure-ml-py)
[What is the Azure Machine Learning Data Prep SDK for Python?](https://docs.microsoft.com/en-us/python/api/overview/azure/dataprep/intro?view=azure-dataprep-py)

これでローカルPC上で Jupyter Notebook の環境を使った機械学習が出来るようになります。

```Python:
(myenv) jupyter notebook
```
####2. Azure Machine Learning service のワークスペースを準備

Jupyter Notebook から Azure Machine Learning service のワークスペースを作成してみます。
※Azure Portal から作成することも出来ます。GUI でのワークスペース作成方法はこちら

[参考：Azure Machine Learning service ワークスペースを作成する](https://docs.microsoft.com/ja-jp/azure/machine-learning/service/setup-create-workspace#portal)

Jupyter Notebook を起動して [New] から [Python 3] をクリックします。
![Notebook1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/5feab0fb-643d-3fe4-6f0c-9ccb8788b37f.png)

新規 Notebook のセルの中に以下のコマンドでワークスペースを作成します。

```Python:
from azureml.core import Workspace
ws = Workspace.create(name='<workspace-name>',
                      subscription_id='<subscription-id>',
                      resource_group='<resource-group>',
                      create_resource_group=True,
                      location='<location>'
                     )
```
![Notebook2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/cda1d58c-bb33-edf8-3597-c811a42b59f5.png)

Azure Machine Learning service を使う際の認証方法について警告が出ています。Service Principal を使った認証方式をお薦めされていますが、今回は無視して、Azure Portal で結果を確認してみます。4 つのサービスが作成されます。
![Notebook3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/0f64a582-9101-7820-d632-b3f89917a561.png)

※ワークスペースの確認の仕方が分からない場合はこちら
[参考：Azure Machine Learning service ワークスペースを作成し、管理する](https://docs.microsoft.com/ja-jp/azure/machine-learning/service/how-to-manage-workspace#view)

####3. ワークスペース構成ファイルを用意して、上記2環境を連携

上記、1 の手順で準備したローカル環境単独で機械学習を実行することも出来ますが、ワークスペース構成ファイルを作成して読み込むことで、ローカル環境で実行したトレーニング記録を Azure Machine Learning service のワークスペースに連携することが出来るようになります。以下のコマンドを使って Juputer Notebook から作成してみます。

```Python:
from azureml.core import Workspace

subscription_id = '<subscription-id>'
resource_group  = '<resource-group>'
workspace_name  = '<workspace-name>'

try:
    ws = Workspace(subscription_id = subscription_id, resource_group = resource_group, workspace_name = workspace_name)
    ws.write_config()
    print('Library configuration succeeded')
except:
    print('Workspace not found')
```
.azureml フォルダの下にconfig.json という名前の構成ファイルが自動で作成されます。

新しい Jupyter Notebook File を作成して実際に連携が出来ているかどうか確認してみます。

```Python:
import azureml.core
from azureml.core import Workspace, Experiment, Run
from azureml.core import ScriptRunConfig

ws = Workspace.from_config()
exp = Experiment(workspace=ws, name="explore-runs")

notebook_run = exp.start_logging()
notebook_run.log(name="message", value="Hello from run!")

notebook_run.get_details()
```

![Notebook4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/023a4829-ab16-8d19-23e6-65812cdf1283.png)

※ここを参考にしました。
[参考：Python でのトレーニングの実行の開始、監視、およびキャンセル](https://docs.microsoft.com/ja-jp/azure/machine-learning/service/how-to-manage-runs)

実行状況が Azure Machine Learning Services ポータル上に記録されているか確認してみます。
![Notebook6-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/8835d42f-3c24-80c0-a3bc-de26b1c82a94.png)
「explore-runs」の名前で Experiment が作成されました。クリックして状況を確認してみます。
![Notebook5-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/96ee6d40-6b60-6be0-68ab-22df4ba55617.png)
Jupyter Notebook でトレーニングを完了します。
![Notebook8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/353762b2-02a2-4faa-a5dc-07cd4467e39f.png)
Azure Machine Learning Services の ワークスペースでも状況を確認してみます。
![Notebook7-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131935/648e4b7f-719d-bd8e-07c2-ff847f9f7469.png)
確かに実行結果が記録されていることを確認しました。

トレーニングの実行場所が何処であれ、Azure Machine Learning service のワークスペースをハブとして、実行結果を記録していくというのは便利そうですね。
出張先のホテルで筋トレしても、結果は記録したいですもんね。

[参考：Azure Machine Learning 内でトレーニングの実行中にメトリックを記録する](https://docs.microsoft.com/ja-jp/azure/machine-learning/service/how-to-track-experiments)