ディープラーニングアルゴリズムのハードウェア実装技術
Hardware Implementation Technology of Deep Learning Algorithms

山

野

龍

佑

戸

川

智

史

一

倉

孝

宏

藤

澤

慎

也

Ryusuke YAMANO

Satoshi TOGAWA

Takahiro ICHIKURA

Shinya FUJISAWA

佐

浅

杉

高前田

藤

啓

介

Keisuke SATO

井

佑

樹

Yuki ASAI

田克行

Katsuyuki SUGITA

要旨

伸

内

野

浩

志

Hiroshi UCHINO也

Shinya TAKAMAEDA

Abstract

Internet of Things（IoT）の普及に伴い，IoT デバイ

スに求められる機能はますます高度になっている。特に機械学習アルゴリズムを利用したソリューションの社会実装に対する期待が高まっており，スマートカメラを代表とする画像IoTデバイスへのDeep Learning（DL）推論機能の組み込みが急務である。

tions required of IoT devices are becoming increasingly
sophisticated. In particular, expectations are rising for thesocial implementation of solutions using machine learningalgorithms. For those reasons incorporating Deep Learning(DL) inference functions into IoT imaging devices such as

筆者らは Field Programmable Gate Array（FPGA）を搭載した画像IoTデバイスにDL推論専用のハードウェ
アであるアクセラレーターを実装するため，学習済み

DL モデルから回路を生成する高位合成コンパイラー「NNgen」

With the spread of the Internet of Things (IoT), the func-を共同開発してきた。NNgenを利用するこ

1）
, 2）

smart cameras are urgent need.
In order to implement a hardware accelerator dedicated to
DL inference on an IoT imaging device equipped with a Field
Programmable Gate Array (FPGA), the authors have jointly
developed “NNgen” 1), 2), a high-level synthesis compiler thatとにより，これまではハードウェア記述言語（HDL）を

generates a circuit from a trained DL model.

年以上を要していた開発期間を数日にまで縮めることがlanguage (HDL), NNgen shortens the development period

直接記述して開発を行った場合，数ヵ月から長ければ半可能となった。これにより，日進月歩の DL アルゴリズ
ムの進化に追随しながら，ハードウェアの深い知識がな
いエンジニアでも FPGA を搭載した画像 IoT デバイスに

DL アクセラレーターを効率的に実装することが可能となった。さらに，NNgenはよりスピーディーな技術進化を目指して Open Source Software（OSS）として公開しており，現在はコミュニティーによる開発が進められている。今後は世界中のユーザーから機能改善のアイ

In comparison with directly writing a hardware description
from several months or more than half a year to several days.
While keeping up with ever evolving DL algorithms, engineers can implement DL accelerators on IoT imaging devices
equipped with FPGA, without deep knowledge of hardware.
Furthermore, for speedy technological progress, NNgen has
been released as Open Source Software (OSS) and is currently under development by the community. In the future,
we expect that users all over the world will propose ideas

デアや実装が提案されることが期待される。

and implementations for function improvement.

な流れを説明した後，NNgenのDLアクセラレーターのDL inference circuit. Then we introduce the NNgen internal

本稿では DL モデルから回路を生成するまでの一般的構成，DLアクセラレーターを生成する仕組み，及びハードウェアが専門でないエンジニアでも NNgen を利用でIn this article, we first explain the general flow to generatearchitecture and mechanism, and the tool NNXT for nonhardware engineers to use NNgen.

きるようにする NNXT というツールを紹介する。

＊ IoT サービス開発統括部＊＊東京大学＊＊＊ IoT サービス開発統括部

アーキテクチャ開発部
エッジコントローラ開発部

KONICA MINOLTA TECHNOLOGY REPORT VOL. 18 (2021)

129

1

クセラレーターを生成するツールはほかにも実用化されはじめにて一般的に利用可能になりつつあるが，NNgen では回

画像 IoT デバイス上での DL 推論機能を実装するため，路規模が DL モデルの規模及び演算の並列度によって決

コニカミノルタは CPU，GPU，Application Specific

定されるため，要求性能の制約及びハードウェアリソー

Integrated Circuit（ASIC）はもちろんのことながらスと処理時間のトレードオフ関係から最適なアーキテク

FPGA を活用した DL 推論高速化技術の蓄積を進めてきチャを探索することができる。また，回路を生成する

た。CPU や GPU と比較して，FPGA や ASIC は消費電力

ツールの中にはベンダーロックインしているものもあり，

3）当たりの演算性能が高いデバイスとして知られている 。

その点NNgenは特定のFPGAベンダーによらず幅広いデ

また，機械学習を利用した IoT サービス開発／運用にはバイスをターゲットに DL アクセラレーターを生成する

学習データの収集やモデルの学習，更新等，一筋縄ではことができる。

いかないノウハウが必要であるが，ASIC は Proof of

しかしながら，研究開発者が NNgen を利用して DL ア

Concept（PoC）やサービス運用時にアルゴリズムの改良

プリケーションを構築するためにはモデルの最適化や量やDLモデルの更新に対応することが難しい。FPGAであ子化，デバイスドライバー開発等の課題が残る。そこでれば回路を変更することが可能なため，サービス開発／

コニカミノルタは DL モデルの軽量化，量子化，及び運用のフェーズを問わず適時改良を加えることが可能でNNgen による HDL 生成までを自動化し，デバイスドラ

ある。

イバー，アプリケーション開発のためのライブラリーを

しかしながら，アプリケーション実装にはソフトウェ

まとめた NNXT というツールを開発している。

アのみならず HDL をはじめとする論理回路設計の知識

本稿では，DL モデルから HDL を生成するフローとしが要求されるため，FPGAを利用したDL推論機能の実装て，モデル最適化，量子化について説明した後，NNgenは容易ではない。また，DLアルゴリズムの進歩は目覚まの全体構成，NNgen による DL モデル構築方法，高速化

しく，サービスを継続する限り DL モデルの更新は必ずの並列演算モデルを説明する。次にアプリケーションと発生する。このような事情から人の手でHDLを記述してして実装するためのデバイスドライバー及びライブラ開発を行うのは工数的に現実的ではなく，高位合成コンリーについて説明する。最後にOSS開発について今後のパイラーを利用して HDL を自動生成することが一般的期待を述べ，まとめとする。

になりつつある。C/C++高位合成コンパイラーを利用することによりソフトウェアとしてアルゴリズムを開発し，C/C++ ソースコードから HDL を生成することも可能と2

ハードウェア実装までの流れなっているが，DL の研究開発分野においては，ソフト

Fig. 2 にハードウェア実装までの流れを示す。DL モデ

ウェアではなく DL モデルの記述により成果が共有されルによって，生成されるハードウェアやパラメーターにるケースが多い。また，多くの場合 Python で開発され違いがあるものの，基本的なワークフローを図のようにており，C/C++ 高位合成コンパイラーを利用する場合，一般化することができる。コニカミノルタではビジネス

DL モデルを改めて C/C++ 表現として実装する工数が別適用への Turn Around Time（TAT）短縮のため，これ途必要となるといった特有の問題がある。

らの各工程を自動化するためのツール「NNXT」を開発

上記の問題を解決するため，DL モデルから HDL を自した。NNXTはCaffe 4）及びONNX 5）フォーマットの学習

1）2）
動生成する高位合成ツール「NNgen」
を共同開発して済みモデルを入力として量子化したパラメーターと DL

きた。Fig. 1 は，NNgen を利用することにより，C/C++

アクセラレーターのFPGA回路データ（bitstream）を自高位合成コンパイラーによる開発と比べて大幅に開発期

動的に生成する。以降の節で各工程について説明する。

間を短縮できることを示している。DL モデルから DL ア

NNXT については 5 章で説明する。

Fig. 1 D evelopment flow comparison with vender HLS (High Level Synthesis).
By using NNgen, the development period can be greatly shortened compared to development using a C/C++ high-level synthesis compiler.

130

KONICA MINOLTA TECHNOLOGY REPORT VOL. 18 (2021)

Parameter

されたプログラムを実行することによりアプリケーショ
Quantized parameter

HDL

Synthesis,
place & route

NNgen Acc.
generationModelstructure

Quantization

Model optimization

Trainedmodel

めのパラメーターが埋め込まれている。ユーザーは生成ができる。NNgen の詳細は次章で説明する。
2. 4

FPGA data

Fig. 2 H ardware implementation process.
We have developed the tool “NNXT” to automate each of theseprocesses in order to shorten the Turn Around Time (TAT) for business applications.

2. 1ンに最適な DL アクセラレーターの HDL を生成すること

論理合成と配置配線

論理合成と配置配線の工程では，NNgenを用いて生成したHDLを入力として，bitstreamを生成する。bitstream
は，FPGA ベンダーより提供されるツールを用いて，論理合成（Synthesis）と配置配線（Place & Route）を実行することで生成する。論理合成と配置配線の設定や実行方法，使用する FPGA のベンダーや種類及び FPGA が搭載されている環境によって異なる。それら全てに対応することは困難であるため，NNXTでは開発環境の構築
や ア プ リ ケ ー シ ョ ン 開 発 が 比 較 的 容 易 な Xilinx 社 のモデル最適化

モデル最適化の工程では，DLモデルを入力として2つの処理を行い，最適化したDLモデル構造とパラメーター

Zynq UltraScale+が使用されている以下のFPGAボードに対応している。

を生成する。1 つ目はモデル内に Batch Normalization層が含まれる場合にこの層の計算を Convolution 層に統対応 FPGA ボード：合する。この操作は演算回数削減による推論高速化と固● Xilinx 社 ZCU102, ZCU104

定小数点演算の丸め誤差を抑制している。2 つ目は入力● Avnet 社 Ultra96, Ultra96v2

データの値域が ±1 になるよう，値域に合わせた正規化処理を追加する。次節で説明する量子化処理では，小数点位置を考慮することなく計算できるように，計算単位

3NNgen について毎の入力及び出力も値域が ±1 となるようにしている。

Fig. 3 にNNgenの概要図を示す。NNgenは基本機能とそのため，最初の計算単位への入力となる入力データのし て ONNX モ デ ル か ら 内 部 で DL モ デ ル を 構 築 す る

値域を ±1 にするこの処理を行っている。

Application Programming Interface（API）と，直接DLモデルを構築する API を提供している。

2. 2

量子化

DL アルゴリズム開発において学習時は浮動小数点演算を用いることが一般的である。組み込み機器への実装
では推論時のパラメーターを量子化し整数演算に置き換える。これにより，パラメーターサイズの削減によるデータ転送の高速化，通信量削減による省電力化及び演算器を構成するリソース削減による並列度の向上を図っている。量子化工程では，最適化した DL モデルの構造とパラメーターを入力とした量子化処理を行い量子化されたパラメーターを生成する。量子化精度は精度重視の
16 bit と処理速度重視の 8 bit の 2 種類から選択可能である。量子化は一般的に Post Training Quantization と呼ばれる方式で行う。アルゴリズムはコニカミノルタが独自開発したものを使用している。画像分類，物体認識及び関節点推定のモデルにおいて，16 bit では浮動小数点演算と同等の精度を確認している。8 bit では多少の劣化はあるものの，他社同等以上の精度を達成している。
2. 3

NNgen による HDL 生成

NNgenによるHDL生成の工程では，最適化したDLモデル構造を入力として，HDL を生成する Python のソー
スコードを出力する。このプログラムには演算器の並列度やメモリーサイズなど HDL 生成時に制約を加えるた

Fig. 3 NNgen overview.
Since NNgen can output the generated HDL as an IP-XACT format
IP package, it can be easily incorporated into the system by utilizing the interconnect automatic wiring function and automatic
address mapping function that are installed as standard in recent
FPGA development tools.

KONICA MINOLTA TECHNOLOGY REPORT VOL. 18 (2021)

131コニカミノルタでは 2 章で説明したモデル最適化及び述し，コントローラーを構築することが可能な Thread

量子化の処理を独自で開発しているため，後者の API を

モジュールを用いて DL 推論に必要な畳み込み等の各種利用して最適化後の DL モデルから得られる情報を用い演算ユニットを構築している。

た独自の DL モデル構築機能を開発している。
NNgenは生成するHDLをIP-XACT形式のIPパッケー

3. 2

ジとして出力することが可能であるため，最近の FPGA

高速化の並列演算モデル

Fig. 4 にNNgenでの3×3畳み込み層の並列演算モデル

開発ツールに標準搭載されているインターコネクト自動を示す。図中（a）は並列度の指定を行わない場合の 3×3配線機能や自動アドレスマッピング機能を活用して容易

畳み込み演算器の構成を示している。図からわかるようにシステムに組み込むことが可能である。

にカーネルはループアンローリングされ，常に並列で積和演算を行う構成となっている。カーネルをアンローリ

3. 1

ングして並列演算を行うために 9-port RAM が必要とな

NNgen の構成

NNgen は Veriloggen6）7）と い う Verilog HDL の メ タる。NNgen では FPGA のブロック RAM をダブルバッ

プログラミングライブラリーを用いて構築している。

ファリング付きの9-Bank RAMとして構築する。NNgen

Veriloggenを用いることにより，Verilog HDLをPython

で は 画 像 の 入 力 チ ャ ネ ル（ich）， 高 さ（height），幅

上の domain-specific language（DSL）として表現する（width）と出力チャネル（och）に対して演算の並列度ことが可能である。また，Veriloggen は Verilog 構文木を上げることができる。

の表現のみならず Python の持つ表現力を生かしたより

各ループの並列演算は List 1 の疑似コードで表現でき高位な表現で，Finite State Machine（FSM）やデータフ

る。各並列度の指定によりストリーム演算器及び RAM

ローを実装可能なプログラミングパラダイムを導入しての構成が変化する。図中では各並列度を変更した場合のいる。特に NNgen では，データフロー演算を Python の回路の増分は赤色で示す。par_col 指定して並列度を上式として記述し，演算パイプラインとしてハードウェア

げる場合，図中（b）の構成となり，畳み込み用のストを構築することが可能な Stream モジュールがある。さリーム演算器が内部で 2 ストリームになるよう複製されらに Stream モジュールによって構築された各演算器及る。それに伴い，och出力用のRAMも並列でデータを受

びメモリー，バス転送の調停を Python の関数として記け取れるように複製される。

width

width

w3

ich

w0

w4

w1

och last

w5

w2

ich

w4

ich

och2

h0, h0, h0,
w0 w1 w2

k0

h1, h1, h1,
w0 w1 w2

k3

k4

k5

h2, h2, h2,
w0 w1 w2

k6

k7

k8

k1

och

k2

och

w0

w6

w5

w1

w2

och last

w7

ich

w3

h0, h0, h0, h0,
w0 w1 w2 w3

och1

h1, h1, h1, h1,
w0 w1 w2 w3
h2, h2, h2, h2,
w0 w1 w2 w3

och0

12-bank RAM as line buffer
for input feature tensor

9-bank RAM as line buffer 9-bank RAM RAM for bias RAM for scale RAM for as line buffer
for input featurefor kernel weightfor output feature

och
x
width
par_col

och2
k0

k1

k2

k3

k4

k5

k6

k7

k8

och

och

och1
och0

9-bank RAM
RAM for bias RAM for scale RAM for as line buffer
for kernel weightfor output featurestreamstream(conv1)(conv2)stream (conv3)
substreams

stream(conv1)streamstream(conv2)(conv3)
substreams
adder acc
tree

adder
tree

add mul rshift cmp(a) Default archtecture for 3x3 conv2d calculator in NNgenacc

add mul rshift cmp

adder acc
tree

add mul rshift cmp(b) Archtecture for 3x3 conv2d calculator with par_col parallelization

par_ichwidth

par_ichwidth width

och lastich
par_ich w3 w3

w4 w4

w5 w5

w0 w0

w1 w1

w2 w2

och

h0, h0, h0, h0, h0, h0,
w0 w0 w1 w1 w2 w2

k0

k0

k1 k1

k2

k2

h1, h1, h1, h1, h1, h1,
w0 w0 w1 w1 w2 w2

och2

k3

k3

k4 k4

k5

k5

och1

h2, h2, h2, h2, h2, h2,
w0 w0 w1 w1 w2 w2

ich0 ich1

9-bank RAM as line buffer
for input feature

och
x
width

ich
par_ich

k6

k6

k7 k7

ich0 ich1

k8

k8

och

och0

9-bank RAM
for kernel weight

RAM for bias RAM for scale RAM for as line buffer
for output feature

w3

ich

w0

w4

w1

w5

w2

och
par_ochxwidth

och lastich

par_ochh0, h0, h0,
w1 w2
w0

k0

k1

k0

k1

k2

h1, h1, h1,
w0
w1 w2

k3

k4

k5

k3

k4

k5

h2, h2, h2,
w0
w1 w2

k6

k7

k8

k6

k7

k8

9-bank RAM as line buffer
for input feature

k2

och2

och0

och3

och1

9-bank RAM
for kernel weightoch
par_ochoch0 och1

RAM for bias

ochpar_ochoch0 och1

RAM for scale

och0 och1

RAM for as line buffer
for output featurestreamstream(conv1)(conv2)stream (conv3)
substreams

stream(conv1)streamstream(conv2)(conv3)
substreams

adder
tree

adde
adder acc
tree

acc
acc

add mul rshift cmp
add mul rshift cmp

add mul rshift cmp(c) Archtecture for 3x3 conv2d calculator with par_ich parallelization(d) Archtecture for 3x3 conv2d calculator with par_och parallelization

Fig. 4 P arallel computing model.The 3×3 convolutional layer parallel computing model. The configuration of the stream calculator and RAM changes depending on the designation of the degree of parallelism. In the figure, the increment in the circuit when the degree of parallelism is changed is shown in red.

132

KONICA MINOLTA TECHNOLOGY REPORT VOL. 18 (2021)

par_row を指定した場合は par_col では width 方向にの引数とほぼ同じ意味を持つ。12–13 行目は畳み込み演

増えたインデックスがheight方向に増えるのみであるた算の結果を入力とした max pooling 演算の定義である。

め説明は省略する。par_ich を指定して並列度を上げる

15–22 行目は 6–13 行目と同様に 13 行目 max pooling 演

場合，図中（c）の構成となる。9-Bank RAMはich方向

算の結果を入力とした畳み込み演算，そして再度 maxに出力を増やすためにバス幅を増やし，複数chを同時に

pooling 演算を行うネットワークを定義している。ここ

出力できる構成となる。そのうえで，ストリーム演算器

までのコードで畳み込み層と max pooling 層を 2 層ずつが増えるのではなく，増えた分の ich データを処理する

持つ畳み込みネットワークの定義が完了する。最終的にためにストリーム内部の積和演算器を増やし adder-tree

DL アクセラレーターの出力として受け取りたい層をも大きくして一度に畳み込めるデータ数を増やす。

44–45 行目の ng.to_ipxact 関数にリストとして与えることにより，HDL が生成される。サンプルコード内ではList 1 Pseudocode representing convolution calculator for parallel compute.
















FRQYG LQW ;LQW .LQW < ^ 7KHIROORZLQJORRSVFRQVXPHHDFKFORFNF\FOHV 
IRU LQWR RRFKSDUBRFKR RSDUBRFKIRU LQWK KKHLJKWSDUBURZK KSDUBURZIRU LQWZ ZZLGWKSDUBFROZ ZSDUBFROIRU LQWL LLFKSDUBLFKL LSDUBLFK 7KHIROORZLQJORRSVDUHXQURROHG
DQGFRQVXPHMXVWRQHF\FOH 
IRU LQWSR SRSDUBRFKSR 
IRU LQWSK SKSDUBURZSK 
IRU LQWSZ SZSDUBFROSZ 
IRU LQWSL SLSDUBLFKSL 
IRU LQWNK NKNKVL]HNK IRU LQWNZ NZNZVL]HNZ<>KHLJKW ZLGWK RSR ZLGWK KSK  ZSZ @ ;>ZLGKW KSKNK LFK ZSZNZ  LSL @
.> RSR NKVL]H NZVL]HNK NZVL]HNZ@`

par_ochを指定して並列度を上げる場合，図中（d）の構成となる。och を並列で出力するために重みデータが入っている 9-Bank RAM とストリーム演算器が複製され，同時に各 och に対応した bias 及び scale 値を格納す
る RAM も複製される。
それぞれの並列度は複合して指定することが可能であり，並列数は par_och × par_row × par_col × par_ich ×
khsize × kwsizeとして表現できる。演算対象データのサイズによって最適な並列度の組み合わせが変わってくるため，FPGAへの論理合成トライアルを行い各DLモデルに最適な構成を探索する。
3. 3

DL モデル実装方法

List 2 に浅い畳み込みネットワークをNNgenで実装するサンプルコードを示す。サンプルコードについて前半
1–22 行と後半 23–45 行目に分けて説明する。
NNgenはDLモデルを構築するためにtensorflow1.0 8）の関数を参考にした DL モデル定義関数を用意している。
コードの前半はそれらの関数を利用して DL モデルを構築している。1行目はNNgenのモジュール名をngに置き換えている。4–22行目でDLモデル構築を行っている。4行目は畳み込みネットワークへの入力データの定義である。6–7 行目は畳み込み演算に必要な重みデータと bias
データの定義である。9行目は4行目で定義した入力データと 6–7 行目で定義したデータを入力とした畳み込み演算の定義である。畳み込み演算の定義と同時にアクティ
ベーション関数についても引数内で ReLU を指定している。これらの引数の内容はtensorflow1.0のconv2d関数

21–22 行目の max pooling の演算結果を最終出力として受け取りたいので，変数 pool2_layer をリストとして与えている。
List 2 Sample code to generate a DL accelerator for a shallow convolutional network.
It is possible to generate HDL for DL accelerator with code only up
to the 22nd line. However, as NNgen accelerates each definedlayer, it is possible to specify an option to create a circuit performs
parallel calculation via the attribute member function.














































LPSRUWQQJHQDVQJ&11GHILQLWLRQLQSXWBOD\HU QJSODFHKROGHU QJLQW
VKDSH >@ 
FRQYBILOWHU QJYDULDEOH QJLQWVKDSH >@ 
FRQYBELDV QJYDULDEOH QJLQWVKDSH >@ 
FRQYBOD\HU QJFRQYG 
LQSXWBOD\HUFRQYBILOWHUVWULGHV >@ELDV FRQYBELDVDFWBIXQF QJUHOX

SRROBOD\HU QJPD[BSRRO 
FRQYBOD\HUNVL]H >@VWULGHV >@ 
FRQYBILOWHU QJYDULDEOH QJLQWVKDSH >@ 
FRQYBELDV QJYDULDEOH QJLQWVKDSH >@ 
FRQYBOD\HU QJFRQYG 
SRROBOD\HUFRQYBILOWHUVWULGHV >@ELDV FRQYBELDVDFWBIXQF QJUHOX

SRROBOD\HU QJPD[BSRRO 
FRQYBOD\HUNVL]H >@VWULGHV >@ 
$WWULEXWH 3DUDOOHOLVP 
FRQYBOD\HUDWWULEXWH SDUBLFK SDUBRFK  
SRROBOD\HUDWWULEXWH SDU  
FRQYBOD\HUDWWULEXWH SDUBLFK SDUBRFK  
SRROBOD\HUDWWULEXWH SDU  
$WWULEXWH 5$0VL]H 
FRQYBOD\HUDWWULEXWH 
LQSXWBUDPBVL]H 
ILOWHUBUDPBVL]H 
ELDVBUDPBVL]H 
VFDOHBUDPBVL]H 
RXWBUDPBVL]H 

FRQYBOD\HUDWWULEXWH 
LQSXWBUDPBVL]H 
ILOWHUBUDPBVL]H 
ELDVBUDPBVL]H 
VFDOHBUDPBVL]H 
RXWBUDPBVL]H P QJWRBLS[DFW >SRROBOD\HU@DFFHOHUDWRUBLS 

KONICA MINOLTA TECHNOLOGY REPORT VOL. 18 (2021)

133

次に23–43行目の説明をする。22行目までのコードだ
けで DL アクセラレーターの HDL を生成することが可能

5

NNXT についてであるが，NNgen は定義した各層に対して高速化を行

DLアクセラレーターを用いたシステム開発にはDLモ

うため，attributeメンバー関数を介して並列計算を行う

デルからのハードウェア生成のみならず，量子化，デバ回路を生成させるオプションを指定することができる。

イスドライバー開発，ライブラリー開発等の課題がある。

24 行目では最初に定義した畳み込み層に並列数としてコニカミノルタではそれらの課題を解決するための開発

ich 方向に 2 並列，och 方向に 2 並列で演算を行う回路を支援ツール「NNXT」を開発し，ハードウェアの深い知生成するように指定している。これにより最初の3×3畳識がないエンジニアが DL を活用したアプリケーション

み込み演算は 3×3×2×2=36 並列で積和演算を行うストを組み込むことができる環境を提供している。本章では，リーム演算器として構築される。また，畳み込み層の様

NNXT の構成要素について述べる。

にローカルメモリーを多用する層についてはメモリーサ
イズを制限するサイズ指定オプションを記述することが可能である。これにより FPGA リソースで不足しがちな

5. 1

ソフトウェアスタック

DL アクセラレーターの制御にはレジスター操作・メブロック RAM を制限した回路を生成することができる。

モリー操作を伴うため，不適切な操作はシステムをク

この際，入力データあるいは出力データのラインメモ

ラッシュさせる。そこでハードウェア技術者でなくともリー，重みデータのメモリーのいずれかについて実際のDL アクセラレーターを気軽に活用できる環境を構築す

データが乗りきらないサイズになった場合，データ転送るために，DL アクセラレーターを制御するデバイスド回数が増えるが，各メモリーの足りるサイズにまで och

ライバー・ライブラリーを実装した。Fig. 5 に，NNXTのループを自動で分割することができる。

が提供するソフトウェアスタックを示す。

4

User application

性能評価
コニカミノルタは NNXT 及び NNgen を利用して物体検出アルゴリズムであるyolov3 tiny 9）の高速化を実現した。組み込み向けプロセッサー，ARM Cortex A53 4 コ

libnnxt
Linux

ア 1.2 GHz 上で動作させる場合，約 0.3 fps で動作する。
FPGA 上の DL アクセラレーターを利用した高速化の評
価を次に示す。Table 1 論理合成条件および NNgen の並
列度の設定，Table 2 に量子化後の yolov3 tiny の精度及び速度性能，Table 3 にリソース使用量を示す。
Table 1 E valuation conditions.
Logic synthesis conditions and settings for NNgen degree ofparallelism.
Synthesis tool
Target FPGAFrequency
AXI4 bus width
Data type
Parallelization

Xilinx Vivado 2018.3
Avnet Ultra96v2 (Xilinx ZU3EG)
300 MHz
64 bit8 bit
288 (3x3 conv2d, par ich=8, par och=4)

Table 2 I nference performance evaluation.
Accuracy and speed performance of the yolov3 tiny algorithm
after quantization. When operating on an ARM Cortex A53 4-core
1.2 GHz, it operates at about 0.3 fps (before quantization), while
it achieves an operating speed of 18 fps (after quantization) on
the FPGA.
DL modelmAP-50mAP-75Inference speed

yolov3 tiny
20.2
8.8
18 fps134

DL accelerator driver

Zynq UltraScale+ MPSoC
CPU

FPGA
DL accelerator

Fig. 5 Software stack for using DL accelerator.
As the library has a mode that emulates the calculation of the
DL accelerator on the CPU, development is possible without anactual FPGA.

デバイスドライバー・ライブラリーに要求される操作は以下である。
●アルゴリズム差し替え・bitstream 書き換え・パラメーター転送●推論・入力データ転送
・推論開始要求・推論終了通知・出力データ転送
NNXTはこれらの操作を隠蔽，抽象化したデバイスドライバー・ライブラリーを提供している。NNXT では特Table 3 Resource usage.
Total LUT
Total FFRAMB18
RAMB36
DSP48

Inference API
DL accelerator emulator

54783
102650122
16320に利用頻度の高い 2 つの FPGA 製品シリーズ向けに対応している。ライブラリーには DL アクセラレーターの演算を CPU でエミュレートするモードを備えており，FPGAの実機がなくとも開発が可能である。CPUによるエミュ

KONICA MINOLTA TECHNOLOGY REPORT VOL. 18 (2021)

レーションは推論速度が遅いが，アルゴリズム開発およとNNXTを利用することにより，短いTATでソフトウェ

び量子化演算の精度検証に利用することができる。このアとハードウェアを縦断したアプリケーション開発を行ため FPGA 実機を持たないアルゴリズム開発者やソフトうことが可能となることを示した。特にNNXTを利用すウェア開発者が円滑に開発を進めるのに役立てている。

ることで，DLアルゴリズムをFPGAに実装するほとんどのフローを自動化することができ，DL アルゴリズムの5. 2

研究者をはじめ，利用者の間口を広げることが可能とハードウェア生成の自動化

NNXT は 2 章で述べた一連のハードウェア化作業を自なった。また，一般的な物体検出アルゴリズムに適応し動化する機能を備えている。モデルの違いにより生じる

た場合の性能評価を行い，CPUへの実装と比べて大幅な細かな作業の違いをツールで吸収することで，一連のプ性能向上が可能であることを示した。
NNgen は DL アクセラレーターの性能向上，及び新たロセスを自動化した。
コニカミノルタでは早い時期から DL 研究開発に取りな DL アルゴリズムへの応用に向けた改良を目指し OSS

組んできたため，初期から DL アルゴリズム開発で利用として開発を続けている。今後もアカデミアと協力しなされているDLフレームワークCaffeを活用しており，ソがら NNgen 開発の成果を社会に還元し，コニカミノル

フトウェア資源の蓄積がある。DL アルゴリズム開発にタとしてますます DL テクノロジーの社会実装を加速さ

おいて OSS 版の Caffe にはない演算機能やアルゴリズムせていきたい。

については，独自に Caffe を拡張することにより機能を実現してきた。NNXT では派生した Caffe 環境や今後の新たなDLフレームワークで構築されたDLモデルの処理を自動化フローに取り入れることを可能にするため，モデルの処理を行う環境の Docker 10）対応を実現した。また，NNXT の 配 布 に も Docker を 積 極 活 用 し て い る。
NNXT 自体も Docker イメージとして配布を行うことで，統一したユーザー環境を少ない手間で構築することを可能にした。
なお，NNXT用のコンテナーとCaffe用のコンテナーの
2 つを協調動作させる必要がある。複数コンテナーの協調動作には一般的に「Docker Compose」というツールが利用される。しかしNNXTではユーザー環境に依存する項目が増えることを避けるために，「Docker Outside
Of Docker」と呼ばれる，コンテナー内からさらに別のコンテナーを起動する手法を用いた。
5. 3

Web アプリ化と社内展開

更にNNXTではコマンドラインツールの利用に不慣れな開発者のアプリケーション開発を容易にするため，
NNXT環境をクラウド上に構築し，Webアプリケーショ
ンとしても提供している。Webアプリケーションは初心者向けの位置付けとして提供している。そのため，設定可能な項目を利用頻度の高いオプションに限定するなど
UIを簡素化し，アプリケーション開発までのフローを可能な限り短縮することを可能にしている。コニカミノル
タでは，この Web アプリケーションを用いた DL アクセ●参考文献
1） Takamaeda-Yamazaki, Shinya. “NNgen: A Fully-Customizable
Hardware Synthesis Compiler for Deep Neural Network”.
https://github.com/NNgen/nngen.
2） 高前田 伸也，藤澤 慎也，藤崎 修一，“ディープニューラルネッ
トワークのモデル特化ハードウェア合成コンパイラ”. 第2回機械学習工学研究会（MLSE 夏合宿 2019）論文集 pp.24–29
3） Ovtcharov, Kalin, et al.“Accelerating deep convolutional neuralnetworks using specialized hardware.”Microsoft Research
Whitepaper 2.11. (2015)4） Jia, Yangqing et al. “Caffe: Convolutional Architecture for Fast
Feature Embedding”. arXiv preprint arXiv: 1408. 5093, (2014).
https://caffe.berkeleyvision.org
5） Bai, Junjie et al. (2019) “ONNX: Open Neural Network
Exchange”. https://onnx.ai6） Shinya Takamaeda-Yamazaki. “Pyverilog: A Python-based
Hardware Design Processing Toolkit for Verilog HDL”, 11th
International Symposium on Applied Reconfigurable
Computing (ARC 2015) (Poster), Lecture Notes in Computer
Science, Vol.9040/2015, pp.451–460. (2015)
7） Takamaeda-Yamazaki, Shinya. “Veriloggen: A Mixed-Paradigm
Hardware Construction Framework”. https://github.com/
PyHDI/veriloggen
8） Martín Abadi et al. “TensorFlow: Large-Scale Machine
Learning on Heterogeneous Systems” (2015). https://www.
tensorflow.org/
9） Redmon, Joseph and Farhadi, Ali. “YOLOv3: An Incremental
Improvement” (2018). https://pjreddie.com/darknet/yolo/10）Merkel, Dirk. “Docker: lightweight linux containers forconsistent development and deployment” Linux journal,
239, p.2, (2014)

ラレーターに関する社内研修コースを開講しており，社
内事業部向けの周知・活用を推進している。

6

まとめ
ハードウェアの世界においては DL アルゴリズムの進化に追随しながら DL アクセラレーターを短期間で開発
し，なおかつ継続して改良を行うというのは資金的，工数的な観点から現実的ではなかった。本稿では NNgen

KONICA MINOLTA TECHNOLOGY REPORT VOL. 18 (2021)

135