皆さんこんにちは!

今回はJAWS-UGが開催する「JAWS-UG関西IoT専門支部 エッジコンピューティングと機械学習ハンズオン」に参加してきましたので、各種知識やハンズオンの流れを簡単にまとめようと思います。

内容としましては、AWSを利用して、IoTにおけるエッジコンピューティングと機械学習をハンズオンです。

エッジコンピューティングとは?

いわゆる「クラウドコンピューティング」における機械学習は、「IoTデバイスなどで収集したデータを、クラウド上の機械学習モデルに渡してデータを予測させたり、分類をさせたりして、デバイスに結果を返す」ということをしている。

ところが、IoTがどんどん進むと

▶得られるデータがめちゃくちゃ膨大になる。

▶クラウド上の機械学習モデルが処理しきれない。

▶遅延が起きてしまう。
リアルタイム性が要求される場面では大きな問題になりうる。

▶デバイスに近い場所に、機械学習モデルを配置し、
意思決定の機能を分散させて、リアルタイム性を改善。

▶デバイス近くでデータを処理するので、クラウド上のシステムの負荷も軽減。
クラウドに送信するデータのフィルタリングもできる。

そんなノリのシステムがエッジコンピューティングです。
今回のハンズオンも、この前提知識があると少し理解しやすい(と終わってから気づきました)。

補足:
【ケータイ用語の基礎知識】エッジコンピューティング とは
https://k-tai.watch.impress.co.jp/docs/column/keyword/1081438.html

今回利用したAWSの各種サービス

●EC2

(仮想)サーバ。「IoT」ということで、本来ならラズベリーパイなどのデバイスを用いることが望ましいのですが、物理的な機器の扱いなどは本質的ではない(しかも面倒な)ため、EC2インスタンスを「IoTデバイス」とみなして、エッジコンピューティングを体験しました。
なお、AMIは用意してくれていたので、必要な環境(設定)は準備されていました。

●AWS Lambda

イベント駆動のコンピューティングサービス。
IoTデバイスのセンサーが収集したデータをエッジの機械学習モデルに投げて、推論を行ういわゆる「機械学習アプリ」の部分をLambdaに担ってもらった。
なお、先述の通り、今回は物理的なデバイスでなく、EC2インスタンスを用いているので、今回は用意されたCSVファイルのデータを「センサーから収集したデータ」とみなしています。
つまり、今回のLambda関数は用意されたファイルのデータを読み込んでモデルに投げます。

●S3

ストレージサービス。機械学習モデルのトレーニングに用いるデータ(用意されたもの)を保管しておく。
また、SageMakerで作成した機械学習モデルの保管にも使います。

●AWS SageMaker

フルマネージドの機械学習サービス。「SageMakerノートブックインスタンス」と呼ばれる、JupyterNotebookがインストールされた機械学習EC2インスタンス上で、JupyterNotebookを用いてPythonのコードを実行し、機械学習モデルのトレーニングを簡単に行うことができる。Jupyterっていうのがいい。使いやすい。
なお、機械学習では、アルゴリズムを組むのが難しいが、SageMakerにはビルトインアルゴリズムもいくつかあるみたいです。
また、こうしてトレーニングしたモデルをデプロイすることもクリックだけで簡単にできてしまう。

補足:
【Amazon SageMaker とは】
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/whatis.html
【初心者向け】Amazon SageMakerではじめる機械学習
https://dev.classmethod.jp/machine-learning/getting-started-with-amazon-sagemaker/

●AWS Greengrass

ソフトウェア。接続されたデバイスでローカルのコンピューティング、メッセージング、データキャッシュ、同期、機械学習推論機能を安全な方法で実行できるようにしてくれる。
今回は、GreengrassをデバイスであるEC2インスタンスにインストールしました(そのための事前準備もAMIに含まれてた)。Greeengrass Core上でLambda関数を動作させ、機械学習モデルに推論させることができる。
ちなみに、Greengrass Groupという言葉が何回も出てきますが、GreengrassCoreやデプロイされたLambda関数、Subscription、Thingsをまとめたものを指す言葉だそうです。

使用した機械学習フレームワーク

●scikit-learn

Pythonのパッケージの一つ。基本的かつ汎用的な機械学習アルゴリズムを簡潔に使用することができます。

補足:
機械学習のライブラリ!scikit-learnとは【初心者向け】
https://techacademy.jp/magazine/17375

使用した機械学習アルゴリズム

●One Class SVM(サポートベクトルマシン)

普通のいわゆるサポートベクトルマシン(SVM)は、教師ありデータの2値分類タスクを実行する典型的な機械学習アルゴリズムです。
(SVMとかカーネル多変量解析あたりは、かなり便利な機械学習アルゴリズム。SVMはカーネル法の一つの手法)
今回用いるOne Class SVMは、いわゆる「異常値(外れ値)検出」を実行するアルゴリズム。
SVMとは違い、サンプルデータが全て同じラベルを持つとして、領域推定を行う。「教師なし学習」という点が大きな特徴。

※この辺りは、数学的な話も入ってくるので難しい(おもしろい)です。

以上の知識をある程度押さえてから今回のハンズオンをやってみると、少しは理解がしやすいかなと思います。

ハンズオンの概要

ところどころ落とし穴があるものの、基本的には添付した資料の通りに進めればできます。
参考資料はこちらです👇
https://s3-ap-northeast-1.amazonaws.com/isd-handson-manual/ML@Edge/ML@Edge_Handson_Kyoto.pdf
制作:JAWS-UG KANSAI

①エッジデバイスのセットアップ

用意していただいたAMI(Ubuntu OSにいろいろインストールしてくれたもの)を使ってEC2インスタンスを立ち上げ。
Greengrassを使うために、GreengrassGroupの作成、証明書の発行をした。
これでエッジデバイスの準備OK。

②データをクラウドに収集

ここは本来自分で頑張らないといけないところですが、今回はCSVファイルで用意されているので、アップロードするだけ。

③機械学習モデルの作成

SageMakerノートブックインスタンスを作成。
用意されたPythonプログラムをJupyterNotebook上で実行することで、機械学習モデルのトレーニングをし、S3に保管。
本当はこのPythonのコードも自分で準備しないといけないが、アルゴリズム自体はSageMakerだったりscikit-learnにあるものを用いてもよい。場合に適したものを使うことが大切。

④推論アプリの作成

GreengrassにデプロイするLambda関数を作成。Lambda関数のコードも準備してくれていました。
ここでLambdaにやらせることは、「デバイスからのデータを機械学習モデルに推論させ、異常なものであればアラートを出す」ということ。
なお、GreengrassでLambda関数をデプロイするために、バージョニング(エイリアス)を指定してきちんと取り扱わないといけないことに注意。
この辺は、Greengrass Groupの設定がメインです。正直理解できてないですが、手を動かせばきっとできます。

あとは、デバイスが検出したことにしているcsvデータを投げることで、モデルに推論をさせることができるようになります。

結論

今回は結構難しい内容でした。半分も理解できていないような気がします。(奥が深いなあ)

ただ、必要なデータをきちんと整形した状態で収集し、機械学習アルゴリズムを選択してしまえば、ルーチンワーク的にエッジコンピューティングの仕組みを作ることができると知ることができました。

今後の課題

今回のハンズオンの前提知識が

・EC2上のLinuxにKey pairを用いてSSHでログインすることができる
・Linuxコンソール上で一般的なファイル操作やディレクトリ操作ができる
・vi/vimでテキストファイルの編集ができる

などと言われていたのですが、プログラムは全部準備してくれていたので、vim使いません。
基本的なコマンドライン操作(cdとかlsとか)ができることは必須で、
EC2インスタンスにsshでログインできさえすればかなりOKでした。

今後もIT関連の知識について詳しく知りたい方に
開催予定イベントのサイトはこちらです。
【JAWS-UG KANSAI開催予定イベント】https://jawsugosaka.doorkeeper.jp/events/upcoming
【JAWS-UG関西】https://jawsugosaka.doorkeeper.jp/