1.6K Views
March 30, 22
スライド概要
フィックスターズならではの「FPGA」に関する高速化手法、 効率的な開発ノウハウ、苦労話などについてお話しいたします。
<講演内容>
1、TVM/VTA の仕組みから学ぶ (第一回) :Versatile Tensor Accelerator (VTA) アーキテクチャ紹介
本シリーズでは深層学習向けのコンパイラスタックである Apache TVM とオープンなアーキテクチャである VTA を題材に、FPGA だけでなくソフトウェアも含めたシステムデザインについて学びを深めることを狙っています。
第一回となる本講演では TVM と VTA について論文や公開ドキュメントなどを読み解き詳しく解説します。
2、Intel Nios V/mを使った組み込みシステム開発
Nios V/mは、Quartus Prime Pro 21.3から追加されたRISC-Vベースのソフトコアプロセッサです。
Intel社純正のRISC-VプロセッサということでBSPや周辺IPドライバはNiosIIと同様のサポートがあり、さらにRISC-Vの恩恵を受けてオープンなエコシステムを利用可能、という魅力があります。
エコシステムにはコンパイラ、デバッガ、OSを含み、RISC-V向け情報は急速に増えていますので、Nios V/mにも適用しやすくなっています。
この流れに乗り遅れないように、今回、Nios V/mを用いた組み込みシステムの開発フローを試行して、リアルタイムOS(FreeRTOS)を動作させることにもチャレンジしましたので紹介致します。
・当社技術ブログ 記事: https://proc-cpuinfo.fixstars.com/
・フィックスターズグループ/セミナー一覧: https://www.fixstars.com/ja/seminar
・フィックスターズのFPGAシステム開発: https://www.fixstars.com/ja/services/fpga
フィックスターズは、コンピュータの性能を最大限に引き出すソフトウェア開発のスペシャリストです。車載、産業機器、金融、医療など、幅広い分野での開発経験があります。また、ディープラーニングや機械学習などの最先端技術にも力を入れています。 並列化や最適化技術を駆使して、マルチコアCPU、GPU、FPGA、量子アニーリングマシンなど、さまざまなハードウェアでソフトウェアを高速化するサービスを提供しています。さらに、長年の経験から培ったハードウェアの知識と最適化ノウハウを活かし、高精度で高性能なアルゴリズムの開発も行っています。 ・開催セミナー一覧:https://www.fixstars.com/ja/seminar ・技術ブログ :https://proc-cpuinfo.fixstars.com/
Fixstars Corporation www.fixstars.com 実践的!FPGA開発セミナー vol.8 2022/03/30 18:00~ Copyright © Fixstars Group Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com TVM/VTA の仕組みから学ぶ (第一回) : Versatile Tensor Accelerator (VTA) アーキテクチャ紹介 Copyright © Fixstars Group Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com Who we are Keisuke KAMAHORI 釜堀 恵輔 ソリューション第四事業部 エンジニア Shinya KAJI 写真 梶 信也 ソリューション第四事業部 事業部長 Copyright © Fixstars Group 3
Fixstars Corporation www.fixstars.com アジェンダ • TVM とは? • VTA アーキテクチャ概説 • VTA を試す 4 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 背景 • ドメイン特化アーキテクチャの時代 • ソフトウェアとどう連携するのかが課題 • • 例: Xilinx AI Engine TVM/VTA: 深層学習モデルをソフトウェアからハードウェアへ簡単にデプロイできるフレーム ワーク • フルスタック最適化を行うためのテンプレート的なフレームワークという設計思想 • FPGAのみならず、SW/HW全体のシステムを学ぶのに役立つ 5 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com TVM とは • • • オープンソースの深層学習用コンパイラスタック 様々な深層学習フレームワーク (Tensorflow, PyTorch, etc.) から、ハードウェア (CPU, GPU, アクセラレータ) に最適化されたコードを生成 深層学習処理用の中間表現を提供: アルゴリズムレベル (計算グラフ) の最適化とハードウェ ア特有の最適化 6 Copyright © Fixstars Group https://tvm.apache.org/2017/08/17/tvm-release-announcement
Fixstars Corporation www.fixstars.com VTA (Versatile Tensor Accelerator) とは • • TVM を FPGA 上で動かすための、カスタマイズ可能なアーキテクチャ ハードウェアとソフトウェアの同時最適化を目指す 7 Copyright © Fixstars Group https://tvm.apache.org/vta
Fixstars Corporation www.fixstars.com VTA のアーキテクチャ • • • 4つのモジュールからなる RISC 的プロセッサ FETCH モジュールが命令を読み込み、他の3つへ振り分ける メモリアクセスと計算の分離 8 Copyright © Fixstars Group https://tvm.apache.org/docs/topic/vta/index.html
Fixstars Corporation www.fixstars.com 命令セットアーキテクチャ (ISA) • • タスクレベル ISA: 4種類の命令 FETCH モジュールによって他の3つに振り分けられる 9 Copyright © Fixstars Group https://tvm.apache.org/docs/topic/vta/index.html
Fixstars Corporation www.fixstars.com COMPUTE モジュール • • GEMM コア: 入力 × 重みの行列演算を行う 1サイクルに行列乗算1回が基本 10 Copyright © Fixstars Group https://tvm.apache.org/docs/topic/vta/index.html
Fixstars Corporation www.fixstars.com COMPUTE モジュール • • ALU コア: 行列の要素ごとの算術演算を行う 活性化関数やプーリングなどに使われる 11 Copyright © Fixstars Group https://tvm.apache.org/docs/topic/vta/index.html
Fixstars Corporation www.fixstars.com LOAD / STORE モジュール • • 2次元行列単位で DMA を行う 畳み込み演算などの際に、データをレイアウトしなおす必要がなくなる 12 Copyright © Fixstars Group https://tvm.apache.org/docs/topic/vta/index.html
Fixstars Corporation www.fixstars.com ハードウェアのカスタマイズ・JIT ランタイム • • • ハードウェアのビット幅、データ型などはカスタマイズ可能 機械語に互換性はないため、JIT ランタイムが命令を変換する GEMM コアのサイズに影響する LOG_BATCH, LOG_BLOCK が特に重要と思われる 13 Copyright © Fixstars Group https://tvm.apache.org/docs/topic/vta/dev/config.html
Fixstars Corporation www.fixstars.com VTA を試す:VTA の導入 基本的な流れは公式ドキュメントにて詳しく説明されています https://tvm.apache.org/docs//topic/vta/install.html 1. VTA シミュレータのインストール 2. FPGA ボードのセットアップ 3. ビットストリームの生成 a. b. a. b. Xilinx Pynq FPGA (PYNQ-Z1 など) Intel DE10 FPGA Xilinx FPGA 向けには Vivado 2020.1 (WebPACK で OK) Intel FPGA 向けには Quartus Prime 18.1 (Quartus Prime Lite で OK) 参照 URL: https://digilent.com/shop/pynq-z1-python-productivity-for-zynq-7000-arm-fpga-soc/ https://www.intel.com/content/www/us/en/developer/topic-technology/edge-5g/hardware/fpga-de10-nano.html Copyright © Fixstars Group 14
Fixstars Corporation www.fixstars.com VTA を試す:VTA の導入 - 1. VTA シミュレータのインストール • まずは TVM をインストールする必要があります • • • • VTA をカスタマイズできます • • ソースからビルドします 環境を汚したくない人は Docker を使いましょう VTA Functional Simulation Library を有効にする必要があります 各種ターゲットボード向けに設定ファイルが公開されています (Ultra96 や ZCU104 向けの設定ファイルもあります) https://github.com/apache/tvm-vta/tree/main/config 昨今の半導体不足で FPGA ボードが手元にない人が TVM/VTA を試すにはオススメ! (たまたま社内に PYNQ-Z1 と DE10-Nano がありましたが・・・) 15 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com VTA を試す:VTA の導入 - 2. FPGA ボードのセットアップ • PYNQ (Xilinx) もしくは DE10 (Intel) を使います • • 今回のセミナー向けには Intel DE10-Nano を使ってみました Angstrom Linux のブートイメージを microSD に書き込みます • お約束の dd 書き込みです • ターミナルエミュレータで DE10-Nano にログイン • minicom や screen など • 必要な Python モジュールを追加する • • numpy, attrs など DE10-Nano 向けの Native ビルド環境を導入する • Intel SoC FPGA Embedded Development Suite (SoC EDS) 16 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com VTA を試す:VTA の導入 - 3. ビットストリームの生成 • PYNQ (Xilinx) もしくは DE10 (Intel) を使います • 今回のセミナー向けには Intel DE10-Nano を使ってみました • Intel Quartus Prime Lite 18.1 とデバイスファイル (Cyclone V) をインストール します • ビットストリームの生成は make コマンドで楽々実行できます • `make ip` : IP 生成 • `make` : フルデザイン生成 • しばし待ちます • 環境によりますが 1 時間ほど 17 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com VTA を試す:VTA の実行 • VTA チュートリアルが多く公開されています https://tvm.apache.org/docs//topic/vta/tutorials/index.html [ 行列積の VTA サンプル ] ● 推論処理性能に大きく関わる行列積の演算 性能を味わうことができます [ 画像分類の VTA サンプル ] ● ResNet を用いた画像分類 ● 余談:Tiger Cat に詳しくなれます! 18 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com VTA を試す:VTA の実行 • Intel DE10-Nano で実行してみます $ python deploy_classification.py Execution statistics: inp_load_nbytes : wgt_load_nbytes : acc_load_nbytes : uop_load_nbytes : out_store_nbytes: gemm_counter : alu_counter : resnet18_v1 #1: #2: #3: #4: #5: 5549568 12763136 6051840 22864 2433536 6623232 699328 prediction for sample 0 tiger cat Egyptian cat tabby, tabby cat lynx, catamount weasel が得られる(はずです!) 19 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 今回のまとめ • 深層学習システムをフルスタックに最適化するフレームワークである TVM/VTA について紹介した • ハードウェアのみならずシステム全体のアーキテクチャ構成を学ぶ上で最適の題材 • FPGA ボードを使って VTA を動かす手順について紹介した (実機動作確認結果は次回にまとめてお伝えします!) 20 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 次回以降の予告 • VTA を各種 • VTA をカスタマイズして深層学習推論処理を最適化する方法 • VTA 最新情報を追いかける • FPGA ボードに搭載して性能評価した結果 VTA++: Expanded Design Space Exploration with an Enhanced Versatile Tensor Accelerator 21 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 参考文献 • • • VTA 公式ドキュメント https://tvm.apache.org/docs/topic/vta/index.html Moreau, T., Chen, T., Vega, L., Roesch, J., Yan, E., Zheng, L., ... & Krishnamurthy, A. (2019). A hardware–software blueprint for flexible deep learning specialization. IEEE Micro, 39(5), 8-16. Banerjee, S., Burns, S., Cocchini, P., Davare, A., Jain, S., Kirkpatrick, D., ... & Yang, Z. (2021). A Highly Configurable Hardware/Software Stack for DNN Inference Acceleration. arXiv preprint arXiv:2111.15024. 22 Copyright © Fixstars Group https://tvm.apache.org/docs/topic/vta/index.html
Fixstars Corporation www.fixstars.com Intel Nios V/mを使った 組み込みシステム開発 Copyright © Fixstars Group Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com Who I am Ryuji NISHIDA 写真 西田 竜之 ソリューション第四事業部 シニアエンジニア 24 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 自己紹介 ● 西田竜之 ○ FPGAを用いたシステム開発に従事 ○ ハードウェア開発をメインに担当 ○ 略歴 ■ 半導体ベンダ ● サーバー向けASIC開発 ■ 映像事務機メーカー ● 高画質エンジンLSI 映像機器向けFPGA開発 ■ フィックスターズ ● FPGAを用いた高速取引金融システム ● OpenCLによるアプリの高速化 Copyright © Fixstars Group 25
Fixstars Corporation www.fixstars.com アジェンダ 1. Intel Nios-V/m プロセッサとは 1.1. 特徴、仕様 1.2. デザイン構築&開発フロー 1.3. ベンチマーク 2. RTOS on Nios-V/m 2.1. FreeRTOSの移植方法 2.2. サンプルデモ実行 3. まとめ 26 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com Nios-V/m プロセッサとは ● RISC-Vベースのソフトコアプロセッサ ○ Quartus Prime Pro v21.3 ~ ○ Cyclone 10, Arria 10, Stratix 10, Agilex シリーズ ○ 無償 IP(ライセンスダウンロードは必要) ● 用途・特徴 ○ Nios II/e の代替性能 ○ 組み込みシステム用途 FPGA内の制御に有用 ○ BSP(HAL、デバイスドライバ)はツールから出力 → FPGAハードとシームレスに開発できる ○ ツールチェーンはRISC-V向けのものが使用可能 → ソフト開発環境が自由に選べる Copyright © Fixstars Group 27
Fixstars Corporation www.fixstars.com Nios-V/m プロセッサとは ● プロセッサ仕様 ○ RV32 IA 命令サポート ○ パイプライン:5ステージ Fetch → Decode → Execute → Memory → Write Back ○ タイマを内蔵 ○ MMUなし ○ カスタム命令サポートなし ※ 「Nios® V Processor Reference Manual」より抜粋 Source: https://www.intel.com/content/www/us/en/docs/programmable/683632/21-4-21-1-1/processor-architecture.html Copyright © Fixstars Group 28
Fixstars Corporation www.fixstars.com 開発フロー ● 試行に使用した実行環境 ○ Quartus Prime Pro 21.4 ○ CentOS 7.9 ○ Intel PAC D5005 Stratix 10(1SX280HN2F43E2) ※クロックとJTAGポートのみ使用 ○ クロスコンパイラ xpack-riscv-none-embed-gcc v10.2.0-1.2 Intel PAC D5005 参照URL https://www.intel.co.jp/content/www/jp/ja/products/details/fpga/platforms/pac/d5005/resource.html Copyright © Fixstars Group 29
Fixstars Corporation www.fixstars.com 開発フロー ● Nios II開発フローと同等 ● ソフトウェアビルド ○ CLI実行が基本 EclipseベースのSBTは不使用 ○ CMake を使ったビルド手法を 利用する ※CMakefile.txt のひな形は 出力される 30 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 開発フロー ● ハードウェア開発 ○ Platform Designerで各種IPを接続し、システムを構成する 今回、クイックスタートガイドに従った基本構成で実施 ○ Nios-V/m のIP設定項目は最低限のみ存在する clock 100MHz reset は、In-system source and probe で制御する Example Designから RAMサイズを512KBに増加 31 jtag経由でシリアル通信 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 開発フロー ● BSP生成 ○ .qsys ファイルからシステム 情報を抽出し、BSPを生成する ○ コマンドライン niosv-bsp -c --quartus-project=<.qpf file> --qsys=s<.qsys file> --type=hal <BSP setting output> ○ BSP Editor でGUI操作も可能 もとはNiosII SBT に含まれて いた機能 Platform Designerの一機能に 変更されている 今回、デフォルトから一点、修正 (jtag_uart を割り込みベースの動作 にさせないため) 32 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 開発フロー [CMakeList.txt] ● CMakeList.txt 生成 サブディレクトリ以下の CMakeList.txtを用いてビ ルドする コマンドライン ○ niosv-app --bsp-dir=<bsp dir> --app-dir=<app dir> --srcs=<source dir> --elf-name=<elf file name> このファイル内で RISC-Vツールチェーンが 指定されている ソースコードを指定 CMake 依存関係を解決してMakefile を自動生成する ○ ● ビルド実行 → .elf 生成 ※CMake の基本的なビルド方法 $ $ $ $ $ cd <CMakeList.txt dir> mkdir build cd build cmake .. make 33 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 開発フロー ● 実行&デバッグ ○ .sof焼き込み後、ダウンロード niosv-download <.elf file> ○ OpenOCD接続&GDBデバッグ $ openocd-cfg-gen niosv-m.cfg $ openocd -f niosv-m.cfg ← OpenOCD用設定ファイル生成 ← OpenOCDサーバー起動 $ riscv64-unknown-elf-gdb build/hello.elf ← OpenOCDサーバーに接続 ※デバッガでGUI操作が必要な場合、Visual Studio Codeも利用可能 Git 連携、CMake 拡張により、Eclipseより使い勝手がいい印象 34 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com 開発フロー(参考) ● 現時点でのデバッガ不具合 ● ○ GDB 実行すると、$a0 レジスタ(関数呼び出しの第一引数の格納)が 書き変わり所望の動作ができず、デバッグできない ○ xpack ツールチェーン以外のツール(crosstool-ng, riscv-gnu-toolchain) をビルドして使用しても解消せず → ハード不具合? or GNUツールバグ? (現状、printf デバッグしか手がない状況。。。) RISC-V系ツールチェーンのビルド ○ ○ ツールチェーンのビルドが CentOS7.9 非対応 要求ツールバージョンが揃わない ⇒ docker 上で ubuntu 20.04を起動して実行 Quartusは、host上のインストールディレクトリをマウント(-v オプション) USB-JTAG は --privileged オプションでコンテナから使用可能 Copyright © Fixstars Group 35
Fixstars Corporation www.fixstars.com ベンチマーク ● Nios II/e vs. Nios-V/m ○ 合成条件 ■ ■ ○ Nios II/e はNios-V/m と同等の構成 外部にTimerを追加 Optimization ModeはBalance (デフォルト) 使用リソース比較 ● ● ロジックは Nios-V/mの方が大きい (3.7倍) 一方、RAMリソースは逆転している (内部リソースの実装方法の差?) 36 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com ベンチマーク ● Nios II/e vs. Nios-V/m ○ Fmax … clock周波数を1GHzに設定し、slack値から算出 ○ Dhrystone演算ベンチマーク 整数演算性能を計測 ※ただし、Nios II のDhrystone 結果 はIntel社提供の値で代用 ● ● ● Copyright © Fixstars Group Fmaxは両者でおおむね同等 Intel社ベンチ―マークではFmax 300MHz超であるが、通常の合成条件で は250MHz程度 worst slack pathはともにCPU-RAM間の パス 整数演算は、Nios-V の方が高速 (4.3倍) Nios-VもIntel社ベンチ―マーク性能通り の結果が得られている 37
Fixstars Corporation www.fixstars.com RTOS on Nios-V/m ● RTOS ○ ○ ● 組み込み用途、特にネットワークスタックが必要となるIOT分野で広く使用される Amazon FreeRTOS ○ ○ ○ ○ ● 時間制約のある処理(リアルタイム)を、複数タスク並行に実行(OS) オープンソースRTOSの一つ 2003年から公開、2017年にAmazonが買収 AWS IOTサービスへの接続環境として提供されている 様々なMCUへの移植がされている(ARM, RISC-V, MicroBlaze, NiosII, etc.) MITライセンスになり、ユーザーが増加中 AWSと接続可能なIOTデバイスの開発が容易になる FPGA での利用 ○ ネットワークスタックを使いたい場合に、Linux + SOC-FPGA の選択肢のみでは不都合 な点もある(コスト、消費電力、起動時間、etc.) Copyright © Fixstars Group 38
Fixstars Corporation www.fixstars.com RTOS on Nios-V/m ● FreeRTOS ○ GitHubリポジトリ ■ ■ ■ FreeRTOS(本家?) https://github.com/FreeRTOS/FreeRTOS Amazon FreeRTOS https://github.com/aws/amazon-freertos Amazon FreeRTOS = FreeRTOS カーネル(sumodule) + IOTライブラリ群 ○ 使用したリポジトリ … FreeRTOS 2021.12.00 ※tag付けされている最新 ○ RISC-V porting情報 https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html 39 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com FreeRTOS 移植方法 ● Nios-V デザイン、BSPは前述のデザインをそのまま使用する ● RISC-V用portingデータの編集 ○ FreeRTOS/FreeRTOS/Source/portable/GCC/RISC-V 以下のアセンブラコードを使用する ○ 移植用の設定変更を、FreeRTOSConfig.h ファイルの#defineで行う ■ タイマレジスタアドレスを変更 Nios-V/m の bsp/system.h を参照して編集 ○ Nios-V/m用の割り込みハンドラを指定する -DportasmHANDLE_INTERRUPT=alt_irq_hander 40 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com FreeRTOS 移植方法 ● FreeRTOS 用CMakeList.txt を準備 ○ mainブランチからもってくる(2021.12.00 ブランチにはない) ○ Source, portable ディレクトリ以下のsubmoduleとして指定する ● Demoサンプルを利用 ○ FreeRTOS/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC を流用 ○ 単純なデモアプリケーション(main_blinky)を使用する 2プロセスを起動して、プロセス間でメッセージを送受信し、 表示するデモ 41 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com RTOS on Nios-V/m ● サンプルデモ実行 ● ● 左側ターミナルで リセット実行 右側ターミナルに 2プロセス間通信した 結果が出力される 42 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com まとめ ● Intel Nios-V/m プロセッサを用いた開発フローを紹介した RISC-Vのエコシステムを利用可能であり、開発しやすい環境を整えることができる ● Nios II/e との比較を行った 結果、リソースは増加するものの、整数演算性能が性能アップ(4倍超)となっていることを確認し た ● Nios-V/m デザインにFreeRTOSを移植し、シンプルなデモが動作することを確認した。 ● 今後(できたらいいな、、) ○ ネットワークスタックの移植 ○ その他のRTOS(Zephyr)のチャレンジ ○ etc. 43 Copyright © Fixstars Group
Fixstars Corporation www.fixstars.com Thank You お問い合わせ窓口 : [email protected] Copyright © Fixstars Group Copyright © Fixstars Group