クラウド時代の最強機械学習プラットフォーム Azure Machine Learning まとめ

# 背景
[自分のMacで機械学習環境を構築](https://qiita.com/aical/items/2d066801a7464a676994)していた時から時代は進み、クラウド環境上で機械学習を行うようになってきました。
クラウド上の機械学習プラットフォームは各種ありますが、[kaggle](https://www.kaggle.com/)等の機械学習コンペでよく使われる[LightGBM](https://github.com/microsoft/LightGBM)アルゴリズムを開発しているMicrosoftが作っている機械学習プラットフォームの[評判が良い (?)](https://www.microsoft.com/ja-jp/events/azurebase/blog/microsoft-named-a-leader-in-forrester-s-notebook-based/)ので、調べてまとめてみました。

# 特徴
## Notebooks 機能
Jupyter notebookライクなノートブック機能で、Pythonコードを書いて学習していけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/8c593e3b-3b39-5244-0374-0245c899a3c1.png)
VSCodeに搭載されているようなコード補完機能 (IntelliSense)も搭載されています。今後共同編集機能なんかも登場するようです ([参考](https://techcommunity.microsoft.com/t5/azure-ai/bringing-intellisense-collaboration-and-more-to-jupyter/ba-p/1362009))。

慣れない方は従来のJupyter notebook (Jupyter Lab)を使うこともできるようです。

## GUIで機械学習モデルを作成できる機能 (デザイナー)
モジュールを組み合わせていってデータの加工や機械学習モデルの作成、デプロイを行える機能があります ([参考](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-designer))。
![image.png](https://docs.microsoft.com/ja-jp/azure/machine-learning/media/concept-designer/designer-drag-and-drop.gif)
(画像は[ここ](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-designer)から転載)

モジュールは色々あって、特徴量エンジニアリング、モデル学習 (回帰、分類、クラスタリング)、推論 (リアルタイム&バッチ)、カスタムモデル・スクリプト (Python, R)等々ができるようです。
デプロイ先もAzure Kubernetes Service (AKS)等にそのままデプロイできるみたいです。


## 自動機械学習機能 (AutoML)
[いわゆるAutoML](https://qiita.com/highno_RQ/items/71595fc402e5b3a55665)ですね！使用する説明変数の選択や加工とかの特徴量エンジニアリング、アルゴリズムの選択、ハイパーパラメータのチューニングを自動で多数試し、最も精度 (あるいは選択した指標)が良かったモデルを使うことができます。
試したモデル達のアンサンブル学習ができるのでそれだけで精度が良いモデルができそうです（）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/d7a9248a-e3b1-08ac-efaa-0c1ef24fc4cd.png)
(画像は[ここ](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-automated-ml)から転載)

## モデルの運用管理 (MLOps)
いわゆるMLOpsですね！機械学習モデルを作って終わりではなく、ちゃんと再現が出来るような仕組みであったり、モニタリングの状況に応じてモデルの再学習を自動化してデプロイメントまで自動的に行える仕組みを作れるみたいです。
MicrosoftはGItHubを持っている ~~(ずるい)~~ので、[Azure DevOps](https://qiita.com/ymasaoka/items/c43ac02e0bc9cbdadd65)はもちろん、GitHubと連携して[MLOps](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-model-management-and-deployment)の仕組みを構築できそうです。

Azure Machine LearningでのMLOpsはこの下図のようなアーキテクチャになっているみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/4f0bfe03-5711-7ad8-f48a-c71f7a2d5fef.png)
画像：[Azure Machine Learning を使用した Python モデル用の MLOps](https://docs.microsoft.com/ja-jp/azure/architecture/reference-architectures/ai/mlops-python)

## モデルの解釈
最近重要視されていますが、「AIで非常に精度良く分類できるようになったが、何で判断しているか分からない！」という問題に取り組むのがモデル解釈の機能です。ざっくり言うとどの説明変数・特徴量をベースにそのような分類をしているのか推測 (ブラックボックスなモデルでは)機能です。

Azure Machine LearningでAutoMLだったりでモデル学習を行うと、自動的にモデルの解釈も表示してくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/21fbf6b1-7581-7d3b-ce7f-15d3223e4ccc.png)

Microsoftはモデル解釈用のフレームワークをOSSとして公開 ([InterpretML](https://github.com/interpretml/interpret/))していて、その知見が取り組まれているようです (あるいはAzure MLが先？) ([参考](https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-machine-learning-interpretability)

参考：[MicrosoftのInterpretMLが便利だった](https://zakopilo.hatenablog.jp/entry/2020/09/19/181719)

## 計算環境
言わずもがなクラウド上でデータ分析、機械学習を行う大きなメリットの一つですね。どこのクラウドサービスでも似たようなものだと思われますが各種Virtual Machine (VM)を計算環境として使用できます。最近だとNVIDIAの最新GPU (A100)への対応も[アナウンス](https://azure.microsoft.com/ja-jp/blog/bringing-ai-supercomputing-to-customers/)されています。

あと、AzureのHPCやDL用のVMだと高速なノード間通信である**[InfiniBandに対応](https://docs.microsoft.com/ja-jp/azure/virtual-machines/workloads/hpc/enable-infiniband)**しているようです。
他のクラウド (AWSやGCP)は私の知る限り対応していないので、分散ディープラーニング、みたいなことを行う際には活かせそうです ([参考](https://techcommunity.microsoft.com/t5/azure-ai/accelerating-distributed-training-in-azure-machine-learning/ba-p/1059050))

InfiniBand参考：[いまさら聞けないInfiniBand](https://www.nicpartners.co.jp/report/53121/)

## 課金
そしてAzure Machine Learningのこれらの機能自体は無料で、基本的には計算環境 (VMの種類と稼働時間？)分の利用料金しかかからないみたいです。VMも1時間数百円とかなので利用しやすいですね..。逆にこれ儲かっているのか心配です..。

## その他の特徴
機械学習モデルを多数作って管理していく必要があるケースにも対応しているようです！(追記)
参考：[Azure Machine Learning Many Models Solution Acceleratorの紹介と利用方法](https://qiita.com/ryoma-nagata/items/411ddf9f94319c9b7869)

# まとめ
Microsoft Researchという研究機関があってそこの研究成果を盛り込めたり、開発周りでVScodeやGitHubを持っているのが強いですね..！

# 参考
本文中での言及に関わらず、いくつか参考になりそうな記事をピックアップしてみました。
[HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ](https://qiita.com/aical/items/2d066801a7464a676994)
[LightGBM 徹底入門 – LightGBMの使い方や仕組み、XGBoostとの違いについて](https://www.codexa.net/lightgbm-beginner/)
[Kaggleとは？機械学習初心者が知っておくべき3つの使い方](https://www.codexa.net/what-is-kaggle/)
[Accelerating Distributed Training in Azure Machine Learning service using SR-IOV](https://techcommunity.microsoft.com/t5/azure-ai/accelerating-distributed-training-in-azure-machine-learning/ba-p/1059050)
[Bringing IntelliSense, collaboration and more to Jupyter notebooks with Azure Machine Learning
](https://techcommunity.microsoft.com/t5/azure-ai/bringing-intellisense-collaboration-and-more-to-jupyter/ba-p/1362009)[AutoMLがすごいと聞いたので色々使って比べてみた](https://qiita.com/highno_RQ/items/71595fc402e5b3a55665)
[Azure DevOps を完全理解する](https://qiita.com/ymasaoka/items/c43ac02e0bc9cbdadd65)
[ゆるふわMLOps入門](https://www.nogawanogawa.com/entry/mlops)
[Azure Machine Learning を使用した Python モデル用の MLOps](https://docs.microsoft.com/ja-jp/azure/architecture/reference-architectures/ai/mlops-python)
[MicrosoftのInterpretMLが便利だった](https://zakopilo.hatenablog.jp/entry/2020/09/19/181719)
[図解でわかる！インフィニバンド豆知識](https://www.macnica.co.jp/business/semiconductor/articles/mellanox/191/)
[いまさら聞けないInfiniBand](https://www.nicpartners.co.jp/report/53121/)