$30 off During Our Annual Pro Sale. View Details »

Elixirで構成された3層構造からなるIoTシステムにおける分散機械学習・推論実行基盤へ向けて / Toward a Distributed Machine Learning Infrastructure for IoT Systems in Elixir

Elixirで構成された3層構造からなるIoTシステムにおける分散機械学習・推論実行基盤へ向けて / Toward a Distributed Machine Learning Infrastructure for IoT Systems in Elixir

Kentaro Kuribayashi

January 20, 2022
Tweet

More Decks by Kentaro Kuribayashi

Other Decks in Technology

Transcript

  1. Elixirで構成された3層構造からなる IoTシステムにおける 分散機械学習・推論実行基盤へ向けて 栗林 健太郎 / GMO PEPABO inc. 2022.01.20

    K-Ruby#28 LT&もくもく会 1
  2. 2 自己紹介 GMOペパボ株式会社 取締役CTO 栗林 健太郎 Kentaro Kuribayashi 近況 JAISTで社会人学生をやっています。現在は、修論をだ

    いたい書き上げたところ。そろそろ次の研究テーマの準 備をしなければということで、ちょっとさわりについて話し ます。4月からは博士後期課程に進む予定。 • GitHub: @kentaro • Twitter: @kentaro
  3. 3 目指している世界 クラウド層で機械学習したパラメタをデバイス層に配布し推論に用いる 環境 ① センシング ② データ中継・処理 ③ データ集約

    ④ 機械学習 ⑤ パラメタ転送 ⑥ 学習済みモデルによる推論 学習済みパラメタのデバイスへの効率的な更新 (Pratipadのユースケースのひとつ) センシングデータの効率的な処理と集約 (Pratipad[1]が提供するデータフロー基盤) [1] 栗林 健太郎, 三宅 悠介, 力武 健次, 篠田 陽一, IoTシステムの双方向データフローにおける設計と実装の複雑さを解消する手法の提案, インターネットと運用技術シン ポジウム論文集, 2021, pp.48-55, Nov 2021.
  4. 4 今回の予備実験 • やりたいこと:デバイス層、エッジ層、クラウド層をまたがった学習済みパラメタの配布と、配 布されたパラメタを用いた学習済みモデルによる推論の実施 • 今回試すこと:層をまたいで起動しているものと見立てた 2つのElixirノード間で、学習済み モデルをノード間通信で配布した上で推論 Elixirのノード間通信で学習済みパラメタを配布し、それを用いて推論する

    学習用ノード 推論用ノード ① パラメタ配布要求 ② パラメタ配布 ③ パラメタを用いた 学習済みモデルによる推論 機械学習 ※ 実際には、学習用ノードから pushする構成を検討している
  5. 5 利用する機械学習モデル(?) 機械学習モデルはなんでもいいので、今回はFizzBuzzモデル[2]を使う [2] Elixir/Nxを使ってFizzBuzzをディープラーニングで解く https://zenn.dev/kentarok/articles/2402ff378dd6e8

  6. 6 Elixirノードの準備 $ iex --sname learner -S mix iex(learner@keyaki)1> {:ok,

    pid} = Learner.start_link() {:ok, #PID<0.226.0>} $ iex --sname predictor -S mix iex(predictor@keyaki)1> Node.connect(:learner@keyaki) true iex(predictor@keyaki)2> Predictor.start_link() {:ok, #PID<0.222.0>} 学習用ノード 学習用・推論用の2つのノードを起動してノード間通信を確立する 推論用ノード ノード間通信の確立
  7. 7 初期状態での推論 iex(predictor@keyaki)3> params = Predictor.retrieve_params() iex(predictor@keyaki)4> Predictor.predict(params) 1: prediction:

    Buzz, answer: 1, matched?: false 2: prediction: Buzz, answer: 2, matched?: false 3: prediction: Buzz, answer: Fizz, matched?: false … 98: prediction: Buzz, answer: 98, matched?: false 99: prediction: Buzz, answer: Fizz, matched?: false 100: prediction: Buzz, answer: Buzz, matched?: true ================ Accuracy: 0.14 初期値のランダムなパラメタで推論すると当然うまくいかない 推論用ノード 学習用ノードからパ ラメタを取得する関 数
  8. 8 学習用ノードでの学習 iex(learner@keyaki)2> GenServer.cast(pid, :learn) … epoch 50, batch 192

    epoch 50, batch 193 epoch 50, batch 194 epoch 50, batch 195 epoch 50, batch 196 epoch 50, batch 197 epoch 50, batch 198 epoch 50, batch 199 学習用ノードで、データセットに基づいて機械学習させる 学習用ノード
  9. 9 学習済みモデルを用いた推論 iex(predictor@keyaki)5> params = Predictor.retrieve_params() iex(predictor@keyaki)6> Predictor.predict(params) 1: prediction:

    1, answer: 1, matched?: true 2: prediction: 2, answer: 2, matched?: true 3: prediction: Fizz, answer: Fizz, matched?: true … 98: prediction: 98, answer: 98, matched?: true 99: prediction: Fizz, answer: Fizz, matched?: true 100: prediction: Buzz, answer: Buzz, matched?: true ================ Accuracy: 1.0 学習済みモデルを用いて精度の高い推論ができた 推論用ノード ※ ここで利用しているモデルは一種のジョークモデルなので、Accuracyの適切性については気にしないでくださいw 学習用ノードからパ ラメタを取得する関 数
  10. 10 用語の補足 モデル自体は学習用も推論用も同じ。配布しているのは学習済みパラメタ パラメタ モデル 学習済みモデル このパラメタを学習用ノードで学習して、 推論用ノードに配布している https://github.com/kentaro/elixir_remote_learning_demo/blob/ main/lib/learner.ex#L8-L13

    https://github.com/kentaro/nx_fizzbuzz/blob/main/lib/nx_fizzbu zz/model.ex#L42-L50
  11. 11 今回の取り組みでわかったこと • 学習用ノードと推論用ノードを分ける構成を採ることは可能 • 学習用ノードで学習したパラメタを、 Elixirのノード間通信を通じて配布できる • 配布されたパラメタを用いて、学習済みモデルによって期待通りに推論ができた 今後に向けて:

    • より規模の大きいデバイス層、エッジ層、クラウド層の 3層構造のIoTシステムで同様の仕組 みを実現する • パラメタの効率的な配布のために、エッジ層に Pratipadを利用する 今回の実装コードは https://github.com/kentaro/elixir_remote_learning_demo/ をご覧ください。 3層構造からなるIoTシステムにおいて、学習・推論を分けて実行できそう
  12. 12 Thank You! Thank You!