More Related Content
Similar to Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths (20)
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
- 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]
ふんわりと書いているのはまだ基礎研究段階という印象があるため。今後の発展に期待したいですが…
- 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
- 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
- 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コア
アクセラレータ