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.
RISC-VベースカスタムSoC開発ツールChipyardによる
ベイズニューラルネット向け学習アクセラレータ開発
@RISC-V Day Tokyo 2020 Virtual Booths 20/11/5
西田 圭吾
理化学研究所 生命機能科...
深層学習の運用上の課題
• 学習データと異なる入力を受けた場合のふるまい
– 犬の識別を学習したNNに猫の入力を与えたら?
– 運用中のカメラのピントがずれたり天候が悪い状況になったら?
• 破滅的忘却(Catastrophic Forgett...
ベイズニューラルネット(ベイズNN)
• 訓練データ𝐷から得た重みパラメータ𝑤の不確実性を表現する事後分布𝑝(𝑤|𝐷)
を学習
– 重みのパラメータ𝑤に対して確率分布のパラメータ𝜃(平均𝜇や分散𝜎とか)を持つ
– 事前分布の選択次第で事後分布の...
ベイズNN(BbB法)での未知データ入力の簡単なテスト
Copyright © 2017 Ali Gholamihttps://en.wikipedia.org/wiki/MNIST_database
MNISTデータセット notMNISTデ...
ベイズNN(BbB法)の学習時間
RISC-VコアのQEMU実行(RV64GCコア)
重みのサンプリング(主に推論時)や確率分布の評価(推論・学習時)に膨大な計算コストがかかる
• RISC-Vのエミュレータを利用したMLPとBbBの学習
にお...
ベイズNN(BbB法)向けの学習アクセラレータに必要な機能
重みのサンプリングの効率化
– 𝑤 = 𝜇 + 𝜎 ∗ 𝜀, 𝜀 ~ 𝑁(0, 𝐼)の計算をベクトルで一気に処理
– 専用の乱数生成器(RNG)と演算器までのデータフローを作りこむ
–...
Chipyard
• UC Berkeleyが主導で開発しているシステムオンチップ(SoC)開発ツール[7]
– ハードウェア構成言語Chisel(Scalaのドメイン特化言語)で主に構成されている
– オープンソースソフトウェア(OSS) h...
FireMarshal 環境
FireMarshal Chipyardのソフトウェア実行ツール
• RISC-Vをベースとするワークロード生成ツール
– RISC-Vでのソフトウェアの実行ターゲットを簡単に切り替えられるラッパー
– QEMUや...
ベイズNNのRISC-V SoC向けソフトウェア開発フロー
1. 非RISC-Vコア上でのベイズNNの実装(C, Pytorch(Python))
QEMU
✓ターゲットアルゴリズムの一般的な実装
Pytorch実装とC実装での実行結果を比較し...
Gemmini: RISC-V シストリックアレイ コプロセッサ[8]
[8] H. Genc et. al., “Gemmini: An Agile Systolic Array Generator Enabling Systematic E...
Gemminiからの主なベイズNNの学習向け拡張
Module Gemmini [8] BNNs Accelerator [ K.Nishida & M.Taiji ]
実行コントローラ 演算器の構成 シストリックアレイ ベクトルレーン (非R...
ChipyardによるベイズNNの学習アクセラレータ開発
RISC-V Core
L2$
DRAM
L1$
Scratchpad
with Accum mem
RF
ALU
Frontend Re-Order
Buffer
Store
cntl...
for(int epoch = 0; epoch < num_epoch; epoch++) {
shuffle_array_rng(rng, index_random, train_dataset.size);
for(int iter = ...
Chipyardを使ってみて良かった点
• とにかく動くサンプルがたくさんある
– とりあえず実装の方法に困ったらいろんなプロジェクトを参考にできる
• プロジェクトの一つをテンプレート的に使ってハードウェアが動く状態のまま
独自拡張しながら開...
Chipyardを使ってみて不満な点
• 実のところそこまでない
– RISC-Vエコシステムの構築がChipyardがリリースされるまであまりに辛過ぎて、
それと比べると多少の環境構築時のエラーは許容範囲
– 他にChipyardみたいなツー...
まとめ
• ニューラルネットをベイズ化すると訓練データの特徴から離れたデータを
入力されてもある程度はロバストに動く
– ただし、学習に時間がかかる
• ベイズNN(BbB法)の学習の高速化には大量の乱数の生成と専用のデー
タフローに加えて確率...
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
What to Upload to SlideShare
Next

0

Share

Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths

RISC-V Day Tokyo 2020 Virtual Boothsスライド http://riscv-association.jp/riscv-day-tokyo-2020/

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths

  1. 1. RISC-VベースカスタムSoC開発ツールChipyardによる ベイズニューラルネット向け学習アクセラレータ開発 @RISC-V Day Tokyo 2020 Virtual Booths 20/11/5 西田 圭吾 理化学研究所 生命機能科学研究センター 計算分子設計研究チーム リサーチアソシエイト / 大阪大学大学院 生命機能研究科 生命動態システム科学講座 博士一貫課程
  2. 2. 深層学習の運用上の課題 • 学習データと異なる入力を受けた場合のふるまい – 犬の識別を学習したNNに猫の入力を与えたら? – 運用中のカメラのピントがずれたり天候が悪い状況になったら? • 破滅的忘却(Catastrophic Forgetting) – 新しいタスクの学習を続けると昔に学習したタスクを忘れる • 例) 犬の識別を学習した後に猫の識別の学習をすると犬の識別ができなくなってたりする – ストリームデータを扱う学習のような継続学習(Continual Learning)で重要になる 考え方 [2] Sayna Ebrahimi et. al., “Uncertainty-guided Continual Learning with Bayesian Neural Networks .” ICLR 2020 [1] Yaniv Ovadia et. al., “Can You Trust Your Model's Uncertainty? Evaluating Predictive Uncertainty Under Dataset Shift.” NIPS 2019 ベイズニューラルネットが今後これらの課題を解決する候補に挙がる[1][2] ふんわりと書いているのはまだ基礎研究段階という印象があるため。今後の発展に期待したいですが…
  3. 3. ベイズニューラルネット(ベイズNN) • 訓練データ𝐷から得た重みパラメータ𝑤の不確実性を表現する事後分布𝑝(𝑤|𝐷) を学習 – 重みのパラメータ𝑤に対して確率分布のパラメータ𝜃(平均𝜇や分散𝜎とか)を持つ – 事前分布の選択次第で事後分布の表現する不確実性に変化が生じる • 𝑤 = 𝜇 + 𝜎 ∗ 𝜀, 𝜀 ~ 𝑁(0, 𝐼) としてガウス事後分布を表現しBackpropagation法で 学習するBayes by Backprop(BbB)法[3]が実装的にシンプル [3] Charles Blundell et. al., “Weight Uncertainty in Neural Networks.” ICML 2015 ニューラルネット (NN) ベイズニューラルネット (ベイズNN) 重みの分布 (事後分布) ニューラルネットとベイズニューラルネットの違い[3]
  4. 4. ベイズNN(BbB法)での未知データ入力の簡単なテスト Copyright © 2017 Ali Gholamihttps://en.wikipedia.org/wiki/MNIST_database MNISTデータセット notMNISTデータセット ネットワークの最大出力値(Confidence)の閾値 τ 閾値τ以上のネットワーク出力に おける正答率(Accuracy) [4] Balaji Lakshminarayanan et. al., “Simple and Scalable Predictive Uncertainty Estimation using Deep Ensembles.” NIPS 2017 独自拡張 ベイズNNによって学習されたモデルは未知のデータセットの入力が 混ざることによる正答率の低下がMLPと比べて抑えられる傾向 閾値によってnotMNISTによる 影響をほぼ除けない範囲 0.9以上の出力に限れば 正答率が40%からおよそ 70%程度に改善する • MNISTデータセットでモデルを学習 – 4層の全結合NN(MLP) – 4層のベイズ全結合NN (MLP, BbB法) • 学習時と同じデータと異なるデータを入力 – 既知のデータセット MNIST 10,000データ – 未知のデータセット notMNIST 20,000データ • 正答率-信頼度カーブで評価[4] – Accuracy vs Confidence curves – サンプリングサイズ 5 (ベイズモデル平均化(BMA)法) – ベイズNNの改良にもチャレンジしているものの 今のところ改善は軽微 MLPの ベイズ化 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 0.8 0.6 0.4 0.2 0.0 BbB MLP
  5. 5. ベイズNN(BbB法)の学習時間 RISC-VコアのQEMU実行(RV64GCコア) 重みのサンプリング(主に推論時)や確率分布の評価(推論・学習時)に膨大な計算コストがかかる • RISC-Vのエミュレータを利用したMLPとBbBの学習 における実行サイクル数の比較 – Cフルスクラッチ実装 • 条件 – 入力層: 28x28 – 中間層: 128 x 2層 – 出力層: 10 – バッチサイズ: 8 – 学習則: SGD – 事前分布(BbBのみ): 混合ガウス(Scale Mixture)[3] – サンプルサイズ(BbBのみ): 1 MLPのベイズ化によって追加で必要になる処理 専用ハードウェア化のターゲット replace Sample+KL forward update backward bayesgrad
  6. 6. ベイズNN(BbB法)向けの学習アクセラレータに必要な機能 重みのサンプリングの効率化 – 𝑤 = 𝜇 + 𝜎 ∗ 𝜀, 𝜀 ~ 𝑁(0, 𝐼)の計算をベクトルで一気に処理 – 専用の乱数生成器(RNG)と演算器までのデータフローを作りこむ – ベイズNNの推論をターゲットとしたハードウェア(HW)アクセラレータと本質的には変わらない[5][6] • 学習時の行列積計算やベクトル計算を想定してHWを設計するかしないかの違い(デジタル計算機の場合) 確率分布の数値計算の高速化 – 事後分布と事前分布のKullback-Leibler計算(分布間の距離計算)でモンテカルロサンプリングによる 期待値計算が必要 – BbB法[3]では事前分布に混合ガウシアンを採用しているため計算コストが高い(推論のみだと不要) • 特にここのBackpropagationが重い – テーブルによる近似計算で対応(Chebyshev多項式近似) [5] R. Cai et. al., “VIBNN: Hardware Acceleration of Bayesian Neural.” ASPLOS 2018 [6] Y. Hirayama et. al., “A Hardware-efficient Weight Sampling Circuit for Bayesian Neural Networks.” IJNC 2020 Chebyshev多項式近似HW
  7. 7. Chipyard • UC Berkeleyが主導で開発しているシステムオンチップ(SoC)開発ツール[7] – ハードウェア構成言語Chisel(Scalaのドメイン特化言語)で主に構成されている – オープンソースソフトウェア(OSS) https://github.com/ucb-bar/chipyard • ハードウェア – RISC-Vコア、アクセラレータ、キャッシュ型メモリシステム、各種周辺回路 • ハードウェア環境 – RISC-Vエミュレート環境、ASWのF1インスタンスによるFPGA実行環境 – ASIC向けのツールもあり(使ったこと無いですが) • ソフトウェア – クロスコンパイル環境、RISC-Vのテスト環境、 アクセラレータのソフトウェアサンプル • など © Copyright 2017-2020, The Regents of the University of California [7] A. Amid et. al., “Chipyard: Integrated Design, Simulation, and Implementation Framework for Custom SoCs.” MICRO 2020
  8. 8. FireMarshal 環境 FireMarshal Chipyardのソフトウェア実行ツール • RISC-Vをベースとするワークロード生成ツール – RISC-Vでのソフトウェアの実行ターゲットを簡単に切り替えられるラッパー – QEMUやRISC-V ISAシミュレータ(Spike)、RTLシミュレーションとしてAWSのF1インスタンス による起動(Firesim)の切り替えとLinux、ベアメタル実行サポート – Verilatorによる実行は今のところ正式にない • RTLをシミュレーションしたければFireMarshalの利用だとAWS上のFPGAを使うしかない • FireMarshalのフローを流用してベアメタルで実行させるといった工夫はできる QEMU, spike simulator Firesim easy to switch コンパイルフローを流用 Verilator
  9. 9. ベイズNNのRISC-V SoC向けソフトウェア開発フロー 1. 非RISC-Vコア上でのベイズNNの実装(C, Pytorch(Python)) QEMU ✓ターゲットアルゴリズムの一般的な実装 Pytorch実装とC実装での実行結果を比較して実装を間違えていないか検証 2. FireMarshal環境によるRISC-Vへの移植 5. FPGA上でアクセラレータを実行 4. アクセラレータへの移植 Verilator Rocket with Acc SoC アクセラレータの単体テスト作成含む 3. FPGA 環境の確認
  10. 10. Gemmini: RISC-V シストリックアレイ コプロセッサ[8] [8] H. Genc et. al., “Gemmini: An Agile Systolic Array Generator Enabling Systematic Evaluations of Deep-Learning Architectures.” arXiv 2019 • 深層学習の推論向けに開発されたシストリックアレイ のアクセラレータ – Chipyardに組み込まれているアクセラレータの一つ – 専用のインターフェース(RoCCインターフェース)から制御 • UC Berkeleyで開発されているRISC-Vコア(Rocket, BOOM) でサポートされているインターフェース – ASIC化された実績あり • Chipyardの利用を前提としてメンテナンスされている – HW構成がシンプルかつソフトウェアサンプルが充実 • テンプレート的に使いやすい – Rocket SoCのNoCであるTileLinkと結合済み • アクセラレータ内でのデータ依存性の管理回路やアクセ ラレータ内外でのDMA実装をゼロから作る必要なし • 個人的にかなり助かった部分 Gemmini SoC Gemmini SoC のフロアプラン
  11. 11. Gemminiからの主なベイズNNの学習向け拡張 Module Gemmini [8] BNNs Accelerator [ K.Nishida & M.Taiji ] 実行コントローラ 演算器の構成 シストリックアレイ ベクトルレーン (非RISC-V ISA) 転置回路 あり (現状)なし 乱数生成(RNG) なし あり (専用データフロー含む) 活性化関数の演算場所 実行コントローラ内 ベクター演算器内 活性化関数 Relu, Relu6 基本なんでも(多項式近似) アキュームレータ スクラッチパッド内 ベクター演算器内 (register) 演算のバーストサイズ 固定 可変 Re-Order Buffer データ依存性の管理 サイズ固定 サイズ可変 (ベクトル-スカラ演算対応)
  12. 12. ChipyardによるベイズNNの学習アクセラレータ開発 RISC-V Core L2$ DRAM L1$ Scratchpad with Accum mem RF ALU Frontend Re-Order Buffer Store cntl Load cntl Execute cntl Mesh Gemmini RISC-V co-processor [8] Transposer RISC-V Core L2$ DRAM L1$ Scratchpad RF ALU Frontend Re-Order Buffer Store cntl Load cntl Execute cntl Vector Proposed Bayesian Neural Networks Training Accelerator [ K.Nishida & M.Taiji ] PEs Accum Reg Gauss Reduction Tree Elementary Functions Acc Systolic Array FPU RNG Chipyard Framework, Designing and Evaluating RISC-V full-system Hardware [7] Original expansion Major Changes 開発中…
  13. 13. for(int epoch = 0; epoch < num_epoch; epoch++) { shuffle_array_rng(rng, index_random, train_dataset.size); for(int iter = 0; iter < num_iter; iter++) { for(int j = 0; j < batch_size; j++) { int idx = index_random[iter * batch_size + j]; for(int k = 0; k < N_IN; k++) { batch[j][k] = train_dataset.data[idx*N_IN+k]; } for(int k = 0; k < N_OUT; k++) { t[j][k] = train_dataset.target[idx*N_OUT+k]; } } for(int s = 0; s < num_sample; s++){ sampling_layers(true); forward_propagation((elem_t *)batch); backward_propagation((elem_t *)t, (elem_t *)batch); } update_all_layers(lr); init_grad(); validation(epoch, iter, 1, (elem_t *)batch, (elem_t *)t, batch_size, N_IN, N_OUT, batch_size); } validation(epoch, -1, 0, test_dataset.data, test_dataset.target, test_dataset.size, N_IN, N_OUT, batch_size); } カスタムSoCにおけるBbB法の実行割り当て • 基本的にC言語で書いていけばRISC-V SoCは動かせる – アクセラレータでの動作はイントリンシック (RISC-Vカスタム命令)で記述 • 学習時に行うデータセットのシャッフ ル以外は基本的にアクセラレータ内 で実行 • elem_t 型 – アクセラレータへ渡すデータの型 • Gemminiで採用されている方法 – RISC-Vコアはint型でデータ幅のみ認識 – アクセラレータ内では実装されている データ型(float32 or bfloat)で計算される RISC-Vコア アクセラレータ
  14. 14. Chipyardを使ってみて良かった点 • とにかく動くサンプルがたくさんある – とりあえず実装の方法に困ったらいろんなプロジェクトを参考にできる • プロジェクトの一つをテンプレート的に使ってハードウェアが動く状態のまま 独自拡張しながら開発できる – Cで実行を確認しながらアクセラレータを徐々に開発できるのは楽 • アルゴリズムの検討からアクセラレータの設計、ソフトウェアの実装まで一人 で全体像を見渡すことが(頑張ればプロトタイプ程度の開発なら)できる • Chipyardでツール群の依存関係が管理されていて変な苦労が無い – Chipyardが出るまでは依存関係に苦しんで何度も環境構築で挫折… – バージョンが上がるときに若干の依存関係の管理が抜けてたりするが、issueに直ぐ上 がっているのでそこまで問題は無さそう(今のところ)
  15. 15. Chipyardを使ってみて不満な点 • 実のところそこまでない – RISC-Vエコシステムの構築がChipyardがリリースされるまであまりに辛過ぎて、 それと比べると多少の環境構築時のエラーは許容範囲 – 他にChipyardみたいなツールを使ったことが無いので感覚がわからないだけ? • 不満があるとすればChipyardというより各ツールのバグや使い勝手 – これから改善されてくるはず RISC-Vコミュニティによる継続的な開発が進むことで かなり使いやすいフレームワークになる予感
  16. 16. まとめ • ニューラルネットをベイズ化すると訓練データの特徴から離れたデータを 入力されてもある程度はロバストに動く – ただし、学習に時間がかかる • ベイズNN(BbB法)の学習の高速化には大量の乱数の生成と専用のデー タフローに加えて確率分布計算の高速化が必須で専用ハードウェア化 • ベイズNNの学習を行うハードウェアをゼロから作成するのは大変なので OSSのRISC-V SoC開発ツールChipyardを採用した – Gemminiアクセラレータがテンプレート的に使うのに便利な感じ • Chipyardの枠組みを利用して、ソフトウェア、アルゴリズム、ハードウェアの 検討および実装を進めている

RISC-V Day Tokyo 2020 Virtual Boothsスライド http://riscv-association.jp/riscv-day-tokyo-2020/

Views

Total views

771

On Slideshare

0

From embeds

0

Number of embeds

7

Actions

Downloads

0

Shares

0

Comments

0

Likes

0

×