Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Edge Computing 「あらゆるものが考える」世界を作るのに必要な技術

#StudyAIchiでの発表資料です
https://connpass.com/event/134720/

  • Login to see the comments

Edge Computing 「あらゆるものが考える」世界を作るのに必要な技術

  1. 1. Edge Computing 「あらゆるものが考える」世界を作るのに必要な技術 @hokekiyoo 2019.09.07 AIchi勉強会 Vol. 1
  2. 2. Ref • 前職 : 機械学習・データ分析の研究 • 退職エントリが一大ムーブメントとなりましたね • 現職 : 作業着着て、CTOやってます • 工場向けのIoTシステム作ってます • メインの業務は通訳です • 趣味 : ブログやってます • 旅とか、理系ネタとか、勉強の記録とか • 『理系ネタを全力で』やった結果、本が出ました • 『一人アドベントカレンダー』やりがちです About Me. 本 : 身近な数学―数学で世界への見方が変わる! ブログ : PROCRASIST
  3. 3. Ref IoT : Internet of Things M2M:モノ同士で完結P2P:ヒト同士で完結 IoT あらゆるものが つながる 最近流行りの「IoT」ってなに?どう使うの?
  4. 4. エッジコンピューティング あらゆるものが つながる あらゆるものが 考える
  5. 5. エッジコンピューティングとは 数百kB~数MB 推論 1,2,3,4,2, … , 3,4,1,2,3 統計処理 100個のデータ {名前 : hokekiyoo} 匿名化 数kB ねこ 平均: 2,5, 標準偏差: 1.3 2つの統計量 {xxx : yyy} アップロードするデータ取得したデータ
  6. 6. エッジコンピューティング vs 普通のコンピューティング 精度 リソース 耐久性 コスト 帯域 電力 拘束条件付き最適化
  7. 7. エッジコンピューティングに必要なもの 処理の 高速化 遠隔での モデル更新
  8. 8. エッジコンピューティングに必要なもの 処理の 高速化 遠隔での モデル更新 モデルの軽量化と ハードウェア最適化
  9. 9. Ref 精度とともに増えるモデルのパラメータ エッジでは、 高速かつ精度良く動かすチューニングが必要 SQLML : Convolutional Network 画像分類タスクでの誤答率と層の数
  10. 10. • ソフトウェア側の工夫 : モデル軽量化 • 枝刈り (pruning) • 量子化 (quantization) • 蒸留 (distillation) • ※モデルを軽くすることで、正規化され、汎化性能があがるという話もある 1. 推論処理の高速化 Ref LeapMindのディープラーニングモデル圧縮技術による低消費電力なシステム上での高速推論 SageMaker Neo Day21. エッジでディープラーニングを可能にする「モデル圧縮」技術 • ハードウェアに最適化させる • Amazon SageMaker Neo • 学習モデルはそのままで、実行デバイスに合わせて最適化してコンパイル • FPGAを使うとかもある
  11. 11. Ref 枝刈り (pruning) 関係の薄い 結合を0にする 入出力いずれか 0のところを消去 Learning both Weights and Connections for Efficient Neural Networks (NIPS2015)
  12. 12. 9倍の圧縮率で 同等orそれ以上の精度
  13. 13. 量子化 (quantization) 重みを1 or -1 にする ※重みを量子化する方法 (i) Deterministic ቊ +1 if 𝑤 > 0 −1 otherwise (ⅱ) Probablistic ቊ +1 with 𝑝 = 𝜎(𝑤) −1 with 1 − 𝑝 𝜎 = max 0, min 1, 𝑥 + 1 2 ※ハードシグモイドという Ref BinaryConnect: Training Deep Neural Networks with binary weights during propagations
  14. 14. Ref 蒸留(Distillation) Teacher : 強いモデル Student : 弱いモデル 入力データ ねこ いぬ へび 確率的に結果を算出 (クロスエントロピーなど) 結果を予測 (確率論的 or 決定論的) ねこ いぬ へび 2つの結果を合わせて 誤差を算出 Back Propagationにより重みを更新 Teacherの推論結果からわかることを 暗黙知としてStudentに伝える! 例 : 犬と猫は割と近い etc… Distilling the Knowledge in a Neural Network Deep Learningにおける知識の蒸留 | Code Craft House
  15. 15. Ref • Intel製のオープンソース • 裏はPyTorchで動いている • yamlで軽量化のスケジューリングができる • 例 : 「30 回目から100回目にかけて枝刈りをして。」 • ドキュメントもかなり充実していて、読むだけで勉強になる モデル軽量化専門のライブラリ : Distiller DistillerでDeepLearningのモデルを軽量化: Gradual Pruning編 github : Distiller
  16. 16. yamlファイル やってみた(Distiller Example) version: 1 pruners: conv1_pruner: class: 'AutomatedGradualPruner' initial_sparsity : 0.15 final_sparsity: 0.3 weights: [conv1.weight] (中略) policies: - pruner: instance_name : 'conv1_pruner' starting_epoch: 1 ending_epoch: 100 frequency: 2 (後略) conv1の重みを 1回目から100回目まで 2回に1回ずつ 0.3になるまで 枝刈りしてね before after NNZ : Number of Non Zero
  17. 17. エッジコンピューティングに必要なもの 処理を 軽くする 遠隔での モデル更新 エッジの推論と クラウドの学習の分離
  18. 18. なぜ、分ける必要があるのか? はじめから完璧を目指すより 変化に強い仕組みを作るほうが良い 実世界の要請 学習をどんどん進めて精度を上げて 季節によって気温が変わるから、 その考慮もして あ、でもコストは抑えてね
  19. 19. つよいコンピュータが必要 つよくないコンピュータ つよいコンピュータ 推論 学習 データを転送 モデルを転送 推論 推論
  20. 20. • 物理世界と結合 • センサーにより、現実世界のデータを集められる • 柔軟な設計 • 複数端末から一斉にデータを集めて学習する • 自信がない画像だけuploadして再学習とか • 異常検知 : 時期によって正常系が変化するときとかのモデルのチューニング • エッジはリアルタイム、クラウド部分はバッチ処理 • 画像をアップロードするのは深夜にすると、コストが下がるとか こんなことができるようになる
  21. 21. クラウドの力を借りよう
  22. 22. つくったもの 結果を通知 Ans : ネコ 自信がない結果は 保存、再度勉強 再学習して つよくなる ラズパイ で推論 写真を撮る
  23. 23. • Raspi環境作り • Raspiカメラの設定 • greengrassの導入 • DRL(DeepLearning Runtime)のインストール • AWSの環境作り • Greengrass, AWS IoTの設定 • Lambdaの設計、AWS IoTとの紐付け • S3バケットの作成 • 学習モデルの作成 • Lv0. pre-trainedモデルを持ってくる(SageMakerNeo) • Lv1. 作ったモデルをupdate • モデルを作る(PyTorch) • モデルをコンパイルする(SageMakerNeo:Compile Job) • モデルをデプロイする(S3, aws greengrass) • Lv2. モデルの軽量化(Distiller) • Lv3 アノテーションの仕組みを作る(自作 or Ground Truth) • Lv4. 再学習・コンパイル・デプロイを一気通貫(SageMaker) レシピ cf ※今回は遠隔デプロイにAWSのGreengrassを使ったが、 githubでも遠隔デプロイできるようになるらしい
  24. 24. • ネットワークつながってる? • エッジで動いているLambdaのログを見るためには、sshでつないでおきたい • greengrasssdが起動しているか確認する。起動時に立ち上がるようにして おくと良い • エッジのLambdaから外にはアクセスできない?requestはできないので一 度AWSまで飛ばしてからうんぬんすることになる • まず、エラーログがどこに出るかわからない。それを把握する。 • greengrass Lambdaなら/var/…以下 • AWS IoTはデプロイ結果に情報が出てくる。 • ただしgreengrasssdが起動していないと永遠に進行中 • Lambdaはcloudwatchから • 各種要件を満たすかちゃんとチェックする • さすがに”Imcompatible”はどうしようもない… • pytorchでinputの形式を探るにはverboseをTrueにすればよい • ラズパイの容量もチェックしておく。起動できなくなっちゃう • エッジ端末のアーキテクチャ • Pythonのバージョンは正しい? • インストールするソフトウェア(DRL, )のバージョンは正しい? • AWS sagemakerでは使えないバージョンがある(pytorch1.1.0は未対応、 座して待つ) • エッジは一昔遅れがちかもしれない • センサやカメラを選ぶときに、その端末に適合しているかをチェックする めちゃエラーでた 使った時間の8割位はエラーの対処 ※そのうち出たエラー集を記事にしておきます。 • 権限周りはAWSにっとって一番面倒で、一番重要 • permissionとかAuthとかでるときはこれ • IAMポリシーを把握する • greengrassに証明書を埋め込むことを忘れずにね • 通信(MQTT) : greengrassのsubscriptionへの登録を忘れずに • Lambda->raspiリソース : greengrassのリソースへの登録を忘れずに • greengrassからS3へのアクセス権限を付与しないと学習モデル引っ張っ てこれないよ。firehoseとかもそう • 文字コード/json serializeはエンジニア能力いる • 画像をMQTTで送るので、エンコード/デコードしたい時が来る • base64わからん • np.float()はだめなのでfloatにキャストしてやろう • python2はデフォルトで日本語できないよ。 • AWSの使い方わからん • 特有のエラーがでるので、トラブルシューティンか見る • Lambdaの使い方がわからないと、はじめアップロードすらままならなかっ たりする • sagemakerも、それ様に「型」が決まっていたりする • greengrassでLambdaを使ってもらうところ • Document読もうな・英語は辛いけど
  25. 25. つくったアーキテクチャ AWS Cloud greengrass Edge Client IoT Core Lambda sagemaker sagemaker neo S3
  26. 26. つくったアーキテクチャ 写真 遠隔デプロイ・ モデルの更新 ローカルで推論 クラウドに結果を送信 特定の推論結果 で発火 自信のあるタスクは Slackに通知 自信のないデータを 再学習用に保存 学習 モデル軽量化 モデル保存 エッジ端末向け にコンパイル AWS Cloud greengrass Edge Client IoT Core Lambda sagemaker sagemaker neo S3
  27. 27. demo
  28. 28. AWS Cloud 今後の目標 greengrass Edge Client
  29. 29. • IoT/エッジコンピューティングは拘束条件付最適化 • ITの総合格闘技 • 札束で殴るのが難しい • ゆえに楽しい、アイディア勝負みたいなところもある • 適材適所で、リソースをうまく使う • AWSなどのクラウドを用いると良い • 物理デバイス×AIは来るぞ • 現実世界との結合がIoTの肝 • エッジコンピューティングが広がる土壌ができつつある • あらゆるものがつながる⇨あらゆるものが考える まとめ
  30. 30. ご清聴ありがとうございました! ※詳しくはwebで

×