CONEXIOBlackBearで機械学習モデルを動かす(3) SageMaker Studioで学習させたモデルをAWS Greengrassでデプロイ
▼前回の記事はこちら
「CONEXIOBlackBearで機械学習モデルを動かす(2)」
目次[非表示]
はじめに
こんにちは。コネクシオIoTブログ 技術記事担当のHです。
前回はAWS IoT Greengrassを用いて、クラウドからCONEXIOBlackBearにデプロイし、動作させてみました。
今回は、SageMakerで機械学習モデルを学習させ、前回と同様GreengrassでCONEXIOBlackBearにデプロイし、動作させてみることにします。
実施環境
基本的に、前回と同じ学習データとモデルの構成を使用し、学習環境をSageMakerにします。ですので、CONEXIOBlackBear側は同じです。
- - CONEXIOBlackBear OSバージョン 1.1.5
- - Python3.7
- - tensorflow 2.0.0(keras 2.2.4)
- - USB接続のWebカメラ
SageMakerの環境は、後述しますが、
- - Python3.6
- - tensorflow 2.1(keras 2.3.0)
です。
1. SageMaker Studioを起動
Amazon SageMakerは、こちらにある通り、完全マネージドの機械学習サービスと謳われており、非常に多くのサービスから構成されていることがわかります。
では、この中で、今回どれを使用すればいいのかということですが、今回やりたいのは、
自前の学習用のプログラムコードが既にあって、それをクラウド上で動かしたい
ということなので、最も基本的なSageMaker StudioというWebブラウザ上で使えるIDEで直接コードを書いて実行すればよさそうだということがわかりました。
なので、SageMaker Studioを起動していきます。
今回使用したAWSアカウントで、SageMaker Studioが一度も使用されていなかったので、ユーザーの作成が必要でした。以下のような画面で、ユーザー名とロールを設定して、送信ボタンを押しました。
ロールは、以下のように自動作成であってもいろいろ選択肢がありますが、任意のS3バケットとしています。
しばらくすると、SageMaker Studio コントロールパネルという画面が開きます。
先ほど作成したユーザー名が表示され、右端の Studioを開く というボタンを押すと、SageMaker Studioが開きます。
UIの詳細は、公式ドキュメントにある通りなので割愛しますが、Pythonの機械学習系開発環境としてお馴染みのJupyterLabの画面ですので、慣れている方も多いかと思います。
2. SageMaker Studioで学習
2.1 ノートブックを作成
ノートブックを作成にあたり、まずSageMaker StudioのLauncher中ほどにあるNotebooks and compute resourcesという項目で、SageMakerImageを選択しますが、最終的にデプロイしたいエッジ側と環境を合わせる必要があるため、
Tensorflow 2.1 Python 3.6 (Optimized for CPU)
というイメージを選択しました。(実は、はじめTensorflow 2.3を使用したところ、エッジ側のTensorflowとのバージョン不整合により、モデルデータの読み込みができませんでした。そのため、上記のバージョンにしています。)
2.2 学習
学習のためのコードは、以前の記事と同様です。
次に、コードの実行に使用するインスタンスタイプですが、こちらを参考にいくつか試したところ、1エポック分の所要時間が
- ml.t3.medium 約146秒
- ml.c5.large 約96秒
- ml.c5.xlarge 約60秒
となりました。ml.t3.mediumだと、手元のPCよりも遅かったのですが、ml.c5だと速くなり、クラウド上のリソースの恩恵が受けられることになります。
したがって、ここではml.c5.xlargeを選択しました。50エポックの所要時間は、およそ50分でした。
3. Greengrassでデプロイ
3.1 S3に学習済みモデルデータを置く
先ほど学習させたモデルは、SageMaker Studio内のディレクトリに出力してあるので、前回と同じ手順で、zip圧縮したデータを所定のバケット/パスにアップロードしました。
そして、前回の記事の3.3.2 機械学習リソースの設定と同様の手順で、モデルソースとして今回学習させたモデルデータを選択します。
3.2 CONEXIOBlackBear
CONEXIOBlackBear側についても、前回の記事の3.5, 3.6の手順を実施します。
この状態でデプロイをしたところ、成功しました。
4. 動作確認
AWS IoTコンソールのテスト用デバイスゲートウェイ画面で、hello/worldトピックをサブスクライブすると、以下のようなメッセージを受信しました。CONEXIOBlackBearから推論した結果が届いています。
というわけで、SageMakerで学習させた機械学習モデルデータをGreengrassでCONEXIOBlackBearにデプロイして動かすことができました。
まとめ
これまで3回にわたって、機械学習モデルで推論を行うプログラムをCONEXIOBlackBearで動かしてきました。今回は比較的簡単な例を取り上げていますが、同様にしてクラウド上の大規模なコンピューティングリソースを使って大量の学習を行ったモデルを作成してエッジにデプロイすることで、様々な高度なアプリケーションが実現できると思います。今後、もっと色々チャレンジしたいと思います。
▼使用した「CONEXIOBlackBear」についてはこちら