SlideShare a Scribd company logo
1 of 16
RISC-VベースカスタムSoC開発ツールChipyardによる
ベイズニューラルネット向け学習アクセラレータ開発
@RISC-V Day Tokyo 2020 Virtual Booths 20/11/5
西田 圭吾
理化学研究所 生命機能科学研究センター 計算分子設計研究チーム リサーチアソシエイト
/ 大阪大学大学院 生命機能研究科 生命動態システム科学講座 博士一貫課程
深層学習の運用上の課題
• 学習データと異なる入力を受けた場合のふるまい
– 犬の識別を学習した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]
ふんわりと書いているのはまだ基礎研究段階という印象があるため。今後の発展に期待したいですが…
ベイズニューラルネット(ベイズNN)
• 訓練データ𝐷から得た重みパラメータ𝑤の不確実性を表現する事後分布𝑝(𝑤|𝐷)
を学習
– 重みのパラメータ𝑤に対して確率分布のパラメータ𝜃(平均𝜇や分散𝜎とか)を持つ
– 事前分布の選択次第で事後分布の表現する不確実性に変化が生じる
• 𝑤 = 𝜇 + 𝜎 ∗ 𝜀, 𝜀 ~ 𝑁(0, 𝐼) としてガウス事後分布を表現しBackpropagation法で
学習するBayes by Backprop(BbB)法[3]が実装的にシンプル
[3] Charles Blundell et. al., “Weight Uncertainty in Neural Networks.” ICML 2015
ニューラルネット
(NN)
ベイズニューラルネット
(ベイズNN)
重みの分布
(事後分布)
ニューラルネットとベイズニューラルネットの違い[3]
ベイズ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
ベイズ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
ベイズ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
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
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
ベイズ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 環境の確認
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 のフロアプラン
Gemminiからの主なベイズNNの学習向け拡張
Module Gemmini [8] BNNs Accelerator [ K.Nishida & M.Taiji ]
実行コントローラ 演算器の構成 シストリックアレイ ベクトルレーン (非RISC-V ISA)
転置回路 あり (現状)なし
乱数生成(RNG) なし あり (専用データフロー含む)
活性化関数の演算場所 実行コントローラ内 ベクター演算器内
活性化関数 Relu, Relu6 基本なんでも(多項式近似)
アキュームレータ スクラッチパッド内 ベクター演算器内 (register)
演算のバーストサイズ 固定 可変
Re-Order Buffer データ依存性の管理 サイズ固定 サイズ可変
(ベクトル-スカラ演算対応)
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
開発中…
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コア
アクセラレータ
Chipyardを使ってみて良かった点
• とにかく動くサンプルがたくさんある
– とりあえず実装の方法に困ったらいろんなプロジェクトを参考にできる
• プロジェクトの一つをテンプレート的に使ってハードウェアが動く状態のまま
独自拡張しながら開発できる
– Cで実行を確認しながらアクセラレータを徐々に開発できるのは楽
• アルゴリズムの検討からアクセラレータの設計、ソフトウェアの実装まで一人
で全体像を見渡すことが(頑張ればプロトタイプ程度の開発なら)できる
• Chipyardでツール群の依存関係が管理されていて変な苦労が無い
– Chipyardが出るまでは依存関係に苦しんで何度も環境構築で挫折…
– バージョンが上がるときに若干の依存関係の管理が抜けてたりするが、issueに直ぐ上
がっているのでそこまで問題は無さそう(今のところ)
Chipyardを使ってみて不満な点
• 実のところそこまでない
– RISC-Vエコシステムの構築がChipyardがリリースされるまであまりに辛過ぎて、
それと比べると多少の環境構築時のエラーは許容範囲
– 他にChipyardみたいなツールを使ったことが無いので感覚がわからないだけ?
• 不満があるとすればChipyardというより各ツールのバグや使い勝手
– これから改善されてくるはず
RISC-Vコミュニティによる継続的な開発が進むことで
かなり使いやすいフレームワークになる予感
まとめ
• ニューラルネットをベイズ化すると訓練データの特徴から離れたデータを
入力されてもある程度はロバストに動く
– ただし、学習に時間がかかる
• ベイズNN(BbB法)の学習の高速化には大量の乱数の生成と専用のデー
タフローに加えて確率分布計算の高速化が必須で専用ハードウェア化
• ベイズNNの学習を行うハードウェアをゼロから作成するのは大変なので
OSSのRISC-V SoC開発ツールChipyardを採用した
– Gemminiアクセラレータがテンプレート的に使うのに便利な感じ
• Chipyardの枠組みを利用して、ソフトウェア、アルゴリズム、ハードウェアの
検討および実装を進めている

More Related Content

What's hot

BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんや
Takuya ASADA
 
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
mmitti
 
20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント
magoroku Yamamoto
 

What's hot (20)

fpgax #11+TFUG ハード部:DNN専用ハードについて語る会-2019-02-02 MN-coreについて 金子 紘也
fpgax #11+TFUG ハード部:DNN専用ハードについて語る会-2019-02-02 MN-coreについて 金子 紘也fpgax #11+TFUG ハード部:DNN専用ハードについて語る会-2019-02-02 MN-coreについて 金子 紘也
fpgax #11+TFUG ハード部:DNN専用ハードについて語る会-2019-02-02 MN-coreについて 金子 紘也
 
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作  Beginner for UserLAnd a...
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作   Beginner for UserLAnd a...はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作   Beginner for UserLAnd a...
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作  Beginner for UserLAnd a...
 
BHyVeってなんや
BHyVeってなんやBHyVeってなんや
BHyVeってなんや
 
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
IoT 時代における省電力長距離無線通信(LPWA)の選び方と LoRaWAN や Sigfox の活用方法
IoT 時代における省電力長距離無線通信(LPWA)の選び方とLoRaWAN や Sigfox の活用方法IoT 時代における省電力長距離無線通信(LPWA)の選び方とLoRaWAN や Sigfox の活用方法
IoT 時代における省電力長距離無線通信(LPWA)の選び方と LoRaWAN や Sigfox の活用方法
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざい
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介
 
Wiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムWiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラム
 
LoRaWAN と日本のIoT無線通信システム
LoRaWAN と日本のIoT無線通信システムLoRaWAN と日本のIoT無線通信システム
LoRaWAN と日本のIoT無線通信システム
 
20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント
 

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

Summercamp2020 group4
Summercamp2020 group4Summercamp2020 group4
Summercamp2020 group4
openrtm
 
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
OSgeo Japan
 

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

OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
 
Openhard150114
Openhard150114Openhard150114
Openhard150114
 
Vitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモVitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモ
 
Summercamp2020 group4
Summercamp2020 group4Summercamp2020 group4
Summercamp2020 group4
 
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
災害監視無人機システムと 災害監視無人機システムとFOSS4Gとの関わり ((独)宇宙航空研究開発機構 都甲 様)
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出
 
2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source
 
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugJAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
 
160705-w01 RTミドルウエア講習会・早稲田大
160705-w01 RTミドルウエア講習会・早稲田大160705-w01 RTミドルウエア講習会・早稲田大
160705-w01 RTミドルウエア講習会・早稲田大
 
RISC-V の現況と Esperanto Technologies のアプローチ
RISC-V の現況と Esperanto Technologies のアプローチRISC-V の現況と Esperanto Technologies のアプローチ
RISC-V の現況と Esperanto Technologies のアプローチ
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
 
Osc2010 Do LT
Osc2010 Do LTOsc2010 Do LT
Osc2010 Do LT
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 
Mt basic as-os_on_danbot
Mt basic as-os_on_danbotMt basic as-os_on_danbot
Mt basic as-os_on_danbot
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
 
2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド
2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド
2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
 

Recently uploaded

研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
 

Recently uploaded (12)

部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 

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

  • 1. RISC-VベースカスタムSoC開発ツールChipyardによる ベイズニューラルネット向け学習アクセラレータ開発 @RISC-V Day Tokyo 2020 Virtual Booths 20/11/5 西田 圭吾 理化学研究所 生命機能科学研究センター 計算分子設計研究チーム リサーチアソシエイト / 大阪大学大学院 生命機能研究科 生命動態システム科学講座 博士一貫課程
  • 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. ベイズニューラルネット(ベイズNN) • 訓練データ𝐷から得た重みパラメータ𝑤の不確実性を表現する事後分布𝑝(𝑤|𝐷) を学習 – 重みのパラメータ𝑤に対して確率分布のパラメータ𝜃(平均𝜇や分散𝜎とか)を持つ – 事前分布の選択次第で事後分布の表現する不確実性に変化が生じる • 𝑤 = 𝜇 + 𝜎 ∗ 𝜀, 𝜀 ~ 𝑁(0, 𝐼) としてガウス事後分布を表現しBackpropagation法で 学習するBayes by Backprop(BbB)法[3]が実装的にシンプル [3] Charles Blundell et. al., “Weight Uncertainty in Neural Networks.” ICML 2015 ニューラルネット (NN) ベイズニューラルネット (ベイズNN) 重みの分布 (事後分布) ニューラルネットとベイズニューラルネットの違い[3]
  • 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. ベイズ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. ベイズ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. 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. 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. ベイズ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. 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. Gemminiからの主なベイズNNの学習向け拡張 Module Gemmini [8] BNNs Accelerator [ K.Nishida & M.Taiji ] 実行コントローラ 演算器の構成 シストリックアレイ ベクトルレーン (非RISC-V ISA) 転置回路 あり (現状)なし 乱数生成(RNG) なし あり (専用データフロー含む) 活性化関数の演算場所 実行コントローラ内 ベクター演算器内 活性化関数 Relu, Relu6 基本なんでも(多項式近似) アキュームレータ スクラッチパッド内 ベクター演算器内 (register) 演算のバーストサイズ 固定 可変 Re-Order Buffer データ依存性の管理 サイズ固定 サイズ可変 (ベクトル-スカラ演算対応)
  • 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. 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. Chipyardを使ってみて良かった点 • とにかく動くサンプルがたくさんある – とりあえず実装の方法に困ったらいろんなプロジェクトを参考にできる • プロジェクトの一つをテンプレート的に使ってハードウェアが動く状態のまま 独自拡張しながら開発できる – Cで実行を確認しながらアクセラレータを徐々に開発できるのは楽 • アルゴリズムの検討からアクセラレータの設計、ソフトウェアの実装まで一人 で全体像を見渡すことが(頑張ればプロトタイプ程度の開発なら)できる • Chipyardでツール群の依存関係が管理されていて変な苦労が無い – Chipyardが出るまでは依存関係に苦しんで何度も環境構築で挫折… – バージョンが上がるときに若干の依存関係の管理が抜けてたりするが、issueに直ぐ上 がっているのでそこまで問題は無さそう(今のところ)
  • 15. Chipyardを使ってみて不満な点 • 実のところそこまでない – RISC-Vエコシステムの構築がChipyardがリリースされるまであまりに辛過ぎて、 それと比べると多少の環境構築時のエラーは許容範囲 – 他にChipyardみたいなツールを使ったことが無いので感覚がわからないだけ? • 不満があるとすればChipyardというより各ツールのバグや使い勝手 – これから改善されてくるはず RISC-Vコミュニティによる継続的な開発が進むことで かなり使いやすいフレームワークになる予感
  • 16. まとめ • ニューラルネットをベイズ化すると訓練データの特徴から離れたデータを 入力されてもある程度はロバストに動く – ただし、学習に時間がかかる • ベイズNN(BbB法)の学習の高速化には大量の乱数の生成と専用のデー タフローに加えて確率分布計算の高速化が必須で専用ハードウェア化 • ベイズNNの学習を行うハードウェアをゼロから作成するのは大変なので OSSのRISC-V SoC開発ツールChipyardを採用した – Gemminiアクセラレータがテンプレート的に使うのに便利な感じ • Chipyardの枠組みを利用して、ソフトウェア、アルゴリズム、ハードウェアの 検討および実装を進めている