このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
2020/01/23にMicrosoftのオフィスで開催された、AutoMLハンズオンに参加してきたのでその内容について簡単にブログに残します。
AutoMLと聞くと多くのGoogle社のものを想像されると思いますが、今回はMicrosoftのAzure上で利用できる、Azure Machine Learning(AzureML)というサービスのうちの1機能であるAutoMLのことを指しています。
筆者はデータサイエンスや機械学習専門の人間ではないのですが、AutoMLはまさにそういう人材が使えるためのツールだと考えているので、本ハンズオンを通じて実際に自分の手を動かしてモデルを学習してみました。
なお、記事の内容については専門知識の不足もあり、間違った解釈をしている場合がありますのでご了承ください。
機械学習モデルをすばやく構築してデプロイすることを目的とした、企業向けのサービスです。
https://azure.microsoft.com/ja-jp/services/machine-learning/
具体的には、データセットとそこから予測したいラベルを渡すと、様々な機械学習手法(線形モデルやランダムフォレスト、LightGBMなど)のモデルを学習し、それらの中から良いものを自動で提案してくれます。
また、予測結果に対して、その理由を人間が理解しやすいように説明してくれる機能もあります(らしい)。
WebのGUIを使った作業方法は別の人が書いてくれると思うので、ここでは手元で作業することになれているプログラマやエンジニアを対象に、ローカルのPythonを使ってAzureMLのAutoMLを学習した後、jupyter notebookで結果を視覚化する方法を紹介します。
上述したように、Azure MLはwebブラウザベースのGUIとpythonからのSDK(他言語もありそう)で利用できます。
料金はクラウド上でJupyterノートブックや機械学習を行うために計算資源(VM)を使うことで発生しますが、
ローカルのPythonでAzureMLのSDKを動かせば、それらが必要なくなるので基本的に無料で利用できます。
AutoMLのモデルの選択処理を実行するために、プログラム中にAzure上のサーバにAPIで問い合わせる処理が入りますが、これも無料だそうです。
ワークショップでは、自動車の様々な特徴からその価格を予測する回帰問題を解くモデルを、AutoMLを用いて作りました。
資料はLinkedInで見ることができます。
はじめに、上の資料に沿って、ブラウザ上でAzure Machine Learning Studioが使えるように準備をして、Compute
のNotebook VMs
とTraining cluster
を作成してください。
次に実際に学習に使うデータセットを登録します。AzureのAutoMLではクラウド上にデータセットを作成して保存しておき、学習する際にそれをIDで参照して利用することができます。
ローカルでもデータセットは普通に作れる(Pandas?)ようですが、今回はデータセットをクラウドで作ることにします。
今回はサンプルに入っている data/automobile.csv
を利用します。
データセットの作成は、Azure Machine Learning Studioから行います。
subscription_id
, resource_group
, workspace_name
を確認しておくワークショップで利用したサンプルコードは以下。git clone https://github.com/konabuta/Automated-ML-Workshop.git
READMEに従って、開発環境をセットアップしてください。今回はconda
を使用しましたが、普通にpipを使用しても大丈夫たと思います。
cd Automated-ML-Workshop
conda env create -f environment.yml
conda activate automl-workshop
python -m ipykernel install --user --name automl-workshop --display-name "Python (automl-workshop)"
サンプルコードはリポジトリ内の Sample/Azure-Machine-Learning/Automobile-regression-explainer-remote.ipynb
にあります。
このサンプルは元々AzureMLのクラウド上で使うことを前提としているため、ローカルのPythonで動かす場合は以下のように変更する必要があります。
Workspace
のインスタンスをIDを用いて生成するように変更# ws = Workspace.from_config() <- コメントして以下を追加
subscription_id = '{your-subscription_id}'
resource_group = '{your-resource_group}'
workspace_name = '{your-resource_group}'
ws = Workspace(subscription_id, resource_group, workspace_name)
上記のsubscription_id
, resource_group
, workspace_name
は作成したデータセットのから取得したものです。
# from azureml.core.compute import ComputeTarget <- コメントアウト
# compute_target = ComputeTarget(ws, "cpucluster") <- コメントアウト
...
automl_config = AutoMLConfig(task = 'regression',
training_data = train_dataset,
label_column_name = label,
# compute_target=compute_target, <- コメントアウト
model_explainability = True,
**automl_settings
)
環境の準備は終わったので、あとはjupyer-notebookで実際に機械学習を行っていきます。
jupyter-notebookを使わずにVSCodeなどのエディタで開発をしたい方は、notebookは起動せずにそのまま自身の環境で作業を行ってください。ただし、学習を終えてデータを視覚化する際に、VSCodeのPythonプラグインによるnotebookの描画機能やJupyter Labでは、正しく表示できない部分があります。(MSの方曰く、現状は未対応だが将来的に対応予定とのことです)
jupyter notebook
サンプル中のexperiment.submit(...)
を実行すると、実際にAutoMLの処理が走り出します
以下のようになったら終了です。今回のサンプルは5~10分くらいで処理が完了すると思います。
最後に、AzureMLのRunDetails
を利用して、自動で生成された機械学習モデルの結果を確認します。
グラフにプロットすることもできます (以下は正規化平均絶対誤差)。
また、AzureMLには自動で生成されてもモデルを人間的に解釈する仕組みがあります。これはデータを描画しつつインタラクティブに操作できるので、人間がモデルの解釈をする作業を効率化できて大変便利です。 この辺の詳細は公式をご参照ください。
上の印象に残った点にも書きましたが、Jupyter上でのGUIが大変使いやすいと感じました。また、Microsoftは機械学習モデルの解釈に対してすごく力を入れており、この辺は色々学んでみたいと感じました。
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...