Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 2 自己紹介 GMOペパボ株式会社 取締役CTO 栗林 健太郎 Kentaro Kuribayashi 近況 JAISTで社会人学生をやっています。現在は、修論をだ

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

    ④ 機械学習 ⑤ パラメタ転送 ⑥ 学習済みモデルによる推論 学習済みパラメタのデバイスへの効率的な更新 (Pratipadのユースケースのひとつ) センシングデータの効率的な処理と集約 (Pratipad[1]が提供するデータフロー基盤) [1] 栗林 健太郎, 三宅 悠介, 力武 健次, 篠田 陽一, IoTシステムの双方向データフローにおける設計と実装の複雑さを解消する手法の提案, インターネットと運用技術シン ポジウム論文集, 2021, pp.48-55, Nov 2021.
  3. 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つのノードを起動してノード間通信を確立する 推論用ノード ノード間通信の確立
  4. 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 初期値のランダムなパラメタで推論すると当然うまくいかない 推論用ノード 学習用ノードからパ ラメタを取得する関 数
  5. 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 学習用ノードで、データセットに基づいて機械学習させる 学習用ノード
  6. 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 学習用ノードからパ ラメタを取得する関 数
  7. 11 今回の取り組みでわかったこと • 学習用ノードと推論用ノードを分ける構成を採ることは可能 • 学習用ノードで学習したパラメタを、 Elixirのノード間通信を通じて配布できる • 配布されたパラメタを用いて、学習済みモデルによって期待通りに推論ができた 今後に向けて:

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