こんにちは、技術開発ユニットの三浦です。2021年も残り少なくなってきました。この時期は色々と立て込むことが多くて、今年もやっぱりバタバタしています。そんな中ですが、「My"今年を表す漢字"」をふとした時にぼんやりと考えています。5個ぐらいに絞れてきたのですが、なかなか1個に決めきれないんですよね。
さて、最近MicrosoftのクラウドAzureで提供されている機械学習のサービスAzure Machine Learningについて色々調べつつ触ってみています。ちょっとずつ備忘録を兼ねて記事に残していきたいと考えています。私達のチームでは機械学習に関する業務が色々と発生しており、それを実行する環境をクラウドで用意することが多くなってきました。一方で各プロジェクトが独立したり、閉じてしまっていることも結構あって、各プロジェクトで作った環境やモデルを一括管理しておき、必要に応じて再利用出来たらもっと効率が上がりそうだな、とかプロジェクトごとに発生するクラウド利用コストを分かりやすく管理したいな、などなど、改善したい点もあります。そういった課題の解決にAzure Machine Learningが使えないかな・・・と調べはじめた次第です。
参考資料
Azureのリソースセンターでe-Bookが公開されているのでそれを読んでいます。
Azure Machine Learning の習得 | Microsoft Azure
400ページに及ぶ、全文英語のドキュメントなので読むのにはなかなか体力を使いますが、とても勉強になるドキュメントだと思います。
あとはチュートリアルも参考に読んでいます。こちらからチュートリアルに進むことが出来ます。
Azure Machine Learning documentation | Microsoft Docs
Azure Machine Learningの概要
Azure Machine LearningはAzureのサービスで、機械学習に関するタスク、例えばデータ管理、モデル生成、評価、デプロイ、それらを実行するコンピュータと環境の管理など、いわゆるMLOpsを実現するための機能が提供されています。Python SDKが提供されていて、それを通じて利用することも、Webブラウザで利用できるAzure Machine Learning Studioを使ってGUIから利用することも出来ます。私はとりあえずAzure Machine Learning Studioを使って試してみています。Azure Machine Learning StudioではJupyter notebookを実行する環境も備わっていて、よく使うPythonの機械学習のフレームワークもすでにセットアップされているようです。ですのでAzure Machine Learning Studioを立ち上げるだけでも大体の機械学習プロジェクトは遂行出来てしまうのでは・・・と感じました。
アーキテクチャ
Azure Machine Learningのアーキテクチャは以下のようになっています。Azure Machine Learningのドキュメントから引用させて頂きます。
この図から分かるように、Azure Machine Learningではその中心にWorkspaceがあります。WorkspaceはAzure Machine Learningの新規リソースを作る際に作成します。このWorkspaceを通じてAzureの既存のストレージ(Blob Containerなど)にあるデータを参照したり、すでに立ち上げているVMに対してスクリプトを渡して実行させることも出来るようです。また、Workspaceから必要に応じてVMやクラスタなどのコンピュータリソースを作って管理することも出来ます。Azure Machine LearningはAzureの他のサービスの機能を一部必要としていて、必要なサービスとその用途については以下のようになっているようです。
- Azure Container Registry
スクリプトの実行環境をDocker Containerで管理するために使用。 - Microsoft Azure Storage Account
Workspaceのデフォルトのストレージとして。Jupyter notebookの保存先としても使用。 - Azure Application Insights
モデルの監視情報保存用として使用・・・なのですが、まだ使用イメージが具体的に湧いておりません。 - Azure Key Vault
Workspaceから外部接続する際に使われるキー情報管理用。こちらもこれから色々使っていくともっと理解が深まりそう・・・。
Workspaceで管理されるアセットについて、私が現在触ってみた範囲で出てきたものについて簡単にまとめてみます。
Environments
モデルの学習や推論などを行うスクリプトを実行するための環境。Pythonのパッケージや環境変数、その他ソフトウェアなどで構成されます。必要に応じて自分でカスタマイズも出来ますが、プリセットされているものも充実している印象を受けました。
Experiments
学習やスコアリングなどの処理(Run)をまとめてグループ化したもの。おそらくプロジェクト単位で作っていくのがいいのかな・・・と思いました。
Pipelines
データの前処理、モデル学習、検証、スコアリング・・・といった機械学習のワークフローを、構成する各フェーズをstepとして組み合わせて表現したものをPipelineとして登録することが出来ます。別のExperimentで作ったPipelineから一部のstepを変更し、別のExperimentでPipelineとして再利用する・・・といったことが出来そうです。
Datasets
Workspaceで使うデータ。Datasetはバージョン管理出来るので、再現性を保つことが出来ます。DatasetはCSVなどのファイル入力だけでなく、Web上で公開されているデータのURLを指定したり、他のストレージを参照して登録することが出来ます。
Models
作ったモデルはDatasetsと同様にバージョン管理出来るようです。一度作ったモデルを継続的に学習させていく時に使えそうです。
Endpoints
モデルをWeb Serviceとして公開する時の公開先をEndpointとして登録しておくことが出来るようです。モデルの推論機能をWeb APIで提供して他のサービスと連携するようなケースで使ってみたいです。
・・・という感じでざっとアーキテクチャを追ってみましたが、普段から機械学習の業務で「出来たらいいな」「なんとかしたいな」と思っていることがかなり実現できそうな印象を受けました。チームの機械学習のプロジェクトの状況や成果が1つのWorkspaceに集約されるのがいいなと思います。
とりあえずはじめてみよう
さっそくAzure Machine Learningのリソースを作ってみました。Azure Portalで作ることが出来ます。
Azure Portalの"Create a resource"を選び、
「Machine Learning」などで検索をし、
「Create」で初期設定を行って作成出来ます。
途中で"Resource group"を選ぶ項目がありますが、とりあえず試してみるのであれば、新規に作成しておく方が良いかもしれません。不要になればResource groupごと一括して削除することが出来るためです。また、Resource groupの"Cost analysis"を見れば今どれくらいのコストを使っているのかを把握することも出来ます。
まとめ
今回はAzure Machine Learningについて、概要や構成している概念、それに少し触ってみた内容についてご紹介しました。次はオープンデータセットを使って機械学習のワークフローをAzure Machine Learning Studioで作ってみようと思います!