こんにちは。データサイエンスチームの八木です。
最近では AI・機械学習関連の取り組みもより身近なものになり、概念実証(Proof of Concept : POC)の後、実際のシステムにモデルを組み込んでいくフェーズに進む企業も増えてきました。皆さんは機械学習モデルをシステムに組み込む際、どのように効率化していますか?その際に役に立つのが機械学習モデルの開発・運用フローの効率化を目的とした、Machine Learning Operations(MLOps)という考え方です。MLOps を活用するためには、DevOps の概念理解や機械学習特有のフローの検討などが必要になってきますが、Azure ML を使えば、モデルをデプロイするパイプラインの構築やその管理を簡単に行うことができます。
前回のブログ「CRM データ × Azure ML で解約予測!サンプルを動かしてみよう」では、Azure Machine Learning(Azure ML)という Microsoft のサービスを使い、解約予測モデルを構築する一連の流れをご紹介しました。今回はその続編として、Azure ML で構築したモデルをWeb サービスとしてデプロイする方法を紹介します。AI・機械学習の PoC 中の方、PoC を終えてシステム化の要件整理に進む方など、作った機械学習モデルをシステム化していきたいと考えている方の参考になれば幸いです。
【注意】
本記事は 2022年4月から5月上旬における、 Azure ML スタジオのユーザーインターフェースを前提に解説しています。ただしその後、 2022年5月下旬にかけて、 Azure ML スタジオのユーザーインターフェースに改変が入り、特に今回説明するデザイナーの操作やインターフェースについて、本記事で解説している内容と差異が生じています(例えば、コンポーネントを選択するメニュー部分や、コンポーネントの設定を開く際に、これまでは左クリックのみで開いていましたが、ダブルクリックが必要になるなど、細かい部分に差異があります。また、これまで「実験(Experiment)」と呼ばれていた概念が「ジョブ(Job)」に名称が変更されています)。
PoC で良さそうな結果が出た場合、次に待っているのは実機や検証用のアプリケーションに組み込んで動作や精度の検証を行うフェーズです。その際、本格的なシステム構築に入る前に、今後の運用を見据えたシステム要件を整理しておくことで、開発の手戻りを減らしたりリリース後の運用を楽にしたりすることができます。そんな中で出てくる手法が、MLOps です。
Machine Learning Operations(MLOps)とは、機械学習モデルの開発・運用フローの効率化を目的とした考え方を指します。コードやバージョンの管理、モデルの品質検証、サービス監視など、モデルの学習やデプロイを行うフローの中で効率的に管理・運用していく中で、MLOps は欠かせない考え方です。MLOps は、システムの開発チームと運用チームが連携して開発・運用を行う DevOps の考え方をベースにしているので、DevOps について知っている方であればそのイメージがしやすいと思います。ただし、以下のように MLOps 特有のケースとして挙げられるフローもあるため、開発・運用と機械学習どちらの考え方も必要です。詳しくは、 機械学習の DevOps ガイドをご確認ください。
これらを一から作りこむとなると相当大変ですが、Azure ML を使えばパイプラインの作成やイベントの通知、機械学習アプリケーションの監視など様々な場面で開発・運用を効率化することができます。今回はその第一歩として、Azure ML のデザイナーを使用して、機械学習モデルを Web サービスとして Azure Container Instances(ACI)にデプロイする方法を紹介します。手順としては、以下の4つのステップでモデルをデプロイしていきます。
早速、詳しい手順を見ていきましょう。
前回のブログで作成したモデルを登録するところから行います。 Azure MLにログインしたら、ホーム画面の左メニューから [デザイナー] をクリックします。その後、[Train Model] をクリックし、右側に開いたウィンドウで [出力 + ログ] タブを選択します。その後、[モデルの登録]アイコンをクリックします。
[モデルの登録] 画面が開きますので、モデル名を入れて [保存] をクリックします。名前は何でも構いませんが、今回は deploytest としました。
左メニューから [モデル] をクリックすると、[モデル一覧] のページを見ることができ、先ほど登録したモデルが登録されていることを確認できます。
Azure ML にモデルをデプロイするには、以下 2 つのファイルが必要です。
左メニューから [デザイナー] のページに戻り、[Train Model] のコンポーネントをクリックし、右側に開いたウィンドウで [出力 + ログ] タブを選択します。その後、trained_model_outputs フォルダを選択し、conda_env.yaml をダウンロードします。その後、score.py についても同様の手順でダウンロードします。
また、デプロイ後に動作確認を実施する用のサンプルデータとして、_samples.json という名前の json ファイルも生成されます。後ほど使用するので、一緒にダウンロードしておきましょう。
これで準備が整いましたので、デプロイに入っていきましょう。
左メニューから [モデル] をクリックし、登録されているモデルを選択します。その後、[デプロイ] を選択し、 [Web サービスへの配置] を選択します。
詳細を入力する画面が開きますので、デプロイに必要な各項目を入力していきます。今回は下記の設定を行いました。その他の項目については自身の環境に合わせて、設定してください。
コンピューティングの種類については、Azure Kubernetes Service(AKS)と Azure Container Instances(ACI)から選択できます。今回選択した ACI は、単純なアプリケーション、タスク自動化、ジョブ作成など、一つの独立したコンテナを実行するのに向いたサービスです。複数コンテナ間での実行や自動スケーリングなどを予定している場合には、AKS の利用を Microsoft は推奨しています。
その後、[デプロイ] をクリックします。
デプロイが完了するまでしばらく待ちます。左メニューの [エンドポイント] から、デプロイ結果を確認できますので見てみましょう。
正常にデプロイが完了している場合は、[デプロイ状態] が [Healthy] と表示されます。サービス各状態については以下表を参考にしてください。
Web サービスの状態 | 説明 | デプロイ状況 |
---|---|---|
移行中 | デプロイ処理中 | 実行中 |
異常 | デプロイ済みだが、アクセスできない | 実行中 |
スケジュール不可 | リソースが不足しているため、デプロイできない | 実行中 |
失敗 | エラーまたはクラッシュが発生したため、サービスをデプロイできなかった | 完了 |
Healthy | 正常に完了した。エンドポイントを使用可能 | 完了 |
デプロイが無事に終わったことが分かったので、実際に動作確認をしてみます。
動作確認は、データ分析ツールとしてよく用いられる Jupyter Notebook の機能が Azure ML 上で実行できる Notebooks 機能を利用し、Python コードを実行することで行います。動作確認用の Python コードは Azure ML のチュートリアルページに用意されているため、そのページからコピーして貼り付けるだけで利用可能です。左メニューの [Notebooks] をクリックし、_samples.json ファイルをアップロードします。フォルダにカーソルをあてると […] が表示されますのでクリックし、[ファイルのアップロード] をクリックします。
[ファイルのアップロード] 画面が開きますので、真ん中のプラスマークをクリックし、ダウンロードした _samples.json ファイルを選択します。その後、[このファイルの内容を信頼する] にチェックをし、[アップロード] をクリックします。
続いて、動作確認用のコードを動かす Notebook を準備します。フォルダにカーソルをあて表示される […] をクリックし、[新しいファイルの作成] をクリックします。
[新しいファイルの作成] 画面が開きますので [ファイル名] を入力し、[作成] をクリックします。今回は test.ipynb としました。
少し待つと、新しく Notebook が作成されます。動作確認用の Python コードはサンプルが用意されているので、以下からコピーして Notebook に貼りつけます。
その後、サブスクリプションやワークスペースの情報を自身の内容に書き換えてください。
Notebook を実行するコンピューティングリソースは、前回のブログで作成したコンピューティングインスタンスを利用します。コンピューティング インスタンスの作成方法については、前回のブログ「CRM データ × Azure ML で解約予測!サンプルを動かしてみよう」、もしくは以下の Azure ML の公式リファレンスを参照してください。
コードの入力とコンピューティングリソースの設定が終わったら、Shift + Enter を押し実行します。しばらく待つと実行結果が表示され、正しく動作し結果が返ってきていることが分かりました。
最後に、結果の確認が終わり、今回作成したものが不要な場合はリソースグループごと削除することをおすすめします。 Azure Portalより当該のリソースグループにアクセスし、[リソース グループの削除] をクリックしたら、[リソース グループ名を入力してください:] にリソースグループを記入し、[削除] をクリックします。
今回作成したものを残しておきたい場合はリソースグループを削除せず、作成したコンピューティングの停止や削除をしておくことで費用を抑えましょう。Azure ML のホーム画面の左メニューから [コンピューティング] をクリックし、作成したコンピューティングを選択して、[停止] や [削除] をクリックします。また、エンドポイントについても、同様の作業を実施してください。
以上、機械学習モデルを Web サービスとしてデプロイする手順を紹介しました。
Azure ML では状況に合わせて様々なデプロイ方法が用意されており、本記事で紹介した以外のやり方だと、デザイナーのみを使用したデプロイ、Azure ML SDK for Python や Azure CLI を使用したデプロイなどがあります。これらの詳細については、以下の公式リファレンスもあわせてご確認ください。
本記事では、Azure ML のデザイナーで構築したモデルを Web サービスとしてデプロイする方法を紹介しました。Azure ML で Web サービスをデプロイする際は、今回のようにデザイナーで作成した機械学習モデルでも構いませんし、自身で構築した機械学習モデルを使ってデプロイだけ Azure ML で行うといった使い方もできます。Azure ML を使うことで簡単に MLOps の第一歩を踏み出すことができますので、ぜひ色々試してみてください。
PoC を終えて機械学習モデルをシステムに組み込む際、再学習やモデルの管理、監視をどのように行うか決めていく中で、MLOps の概念はとても重要です。PoC の次のステージに進む際は、MLOps の考え方をふまえて取り組みを進めていきましょう。
SBT では、AI 活用支援をはじめ、様々な分野での AI や機械学習モデルの構築を承っております。現行の作業を軽減してより重要な作業に時間を当てたい、取得しているデータを活用して課題解決を行いたいなど AI 活用を検討中の担当者の方がいましたら、ぜひ当社にお問い合わせください。まず何から始めればよいか悩んでいるといったお客様も、お気軽にご相談いただければと思います。
関連ブログ記事
CRM データ × Azure ML で解約予測!サンプルを動かしてみよう
|
関連ページ |