FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

TensorFlow Lite on RISC-Vの論文を読む

知り合いの人からCARRV 2019 (Third Workshop on Computer Architecture Research with RISC-V)でTensorFlow Lite on RISC-Vの発表があったと聞いたので、さっそく論文をダウンロードしてみた。

carrv.github.io

https://carrv.github.io/2019/papers/carrv2019_paper_7.pdf

きちんと読んだわけではなく流し読みなので、詳細まで把握したわけではないけれど、ざっと流し読みをした。

この人たちは、TensorFlow LiteをRISC-Vアーキテクチャで動かすために、まずはRISC-Vのベクトル命令をTensorFlowのソースコードに移植した。 次に命令セットシミュレータを拡張してDeep Learningのテストパタンを動かし、ARMと比べてどの程度の性能が出たのか調査した。

まず、

  1. Intrinsicを使って、TensorFlowのコードでRISC-Vのベクトル命令に変換できるところを書き直した。以下の表に示すベクトル命令を用いて移植を行った。
f:id:msyksphinz:20190808231708p:plain
RISC-V移植のために使用したベクトル命令。

どうもTensorFlow Liteにはreference_optoptimized_optという2つのソースコードの分類があって、

  • reference_optはポータブルな実装、つまり汎用命令しか使ってはいけないのかな?
  • optimized_optはハードウェア実装に依存した実装にしてよい。つまりアクセラレータとか使っても良いのかな?

という分類らしい。

まずはソースコード移植 → コンパイル → シミュレータでシミュレーション(Spike-ISSを改造) → 実行命令数比較

となるらしい。まだ現物のハードウェアで実行したわけではなさそうだから、Commited Instruction、つまり命令数での比較となっている。 命令数比較ならば、ベクトル命令を導入すれば命令数としては短くなるのは当たり前で、その比較はどうだろう...?という気分になる。

f:id:msyksphinz:20190808233104p:plain
TensorFlow Lite on RISC-Vの移植フロー

その結果、最適化をすると命令数的にはARMに勝った。そりゃそうだろ。命令数だもん。

f:id:msyksphinz:20190808233230p:plain
ARMとRISC-VのTensorFlow Liteの実行命令数比較。

とりあえず、移植できたというのは大きな成果なのかなという印象。あとは、

  • 現物ハードウェアで動作させる。
  • 性能を上げる

といったところが課題かな。