(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023006509
(43)【公開日】2023-01-18
(54)【発明の名称】ソフトウェア生成装置およびソフトウェア生成方法
(51)【国際特許分類】
G06N 3/02 20060101AFI20230111BHJP
G06F 8/30 20180101ALI20230111BHJP
G16Y 40/20 20200101ALI20230111BHJP
【FI】
G06N3/02
G06F8/30
G16Y40/20
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2021109142
(22)【出願日】2021-06-30
(71)【出願人】
【識別番号】517048278
【氏名又は名称】LeapMind株式会社
(74)【代理人】
【識別番号】100213104
【弁理士】
【氏名又は名称】市川 茂
(72)【発明者】
【氏名】前田 南樹
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC32
(57)【要約】 (修正有)
【課題】IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成して制御することが可能なソフトウェア生成装置及びソフトウェア生成方法を提供する。
【解決手段】ニューラルネットワーク生成装置は、ニューラルネットワーク実行モデル(NN実行モデル)を制御するためのソフトウェアを生成するソフトウェア生成装置であって、NN実行モデルにおいて動作する複数のレイヤを含むモデルに関する情報を解析し、解析手段の解析結果に基づいてモデルに含まれる複数のレイヤに対応するライフタイムを決定し、ライフタイムに基づいてソフトウェアを生成するソフトウェア生成部を備える。
【選択図】
図2
【特許請求の範囲】
【請求項1】
ニューラルネットワーク回路を制御するためのソフトウェアを生成するソフトウェア生成装置であって、
前記ニューラルネットワーク回路において動作する複数のレイヤを含むモデルに関する情報を解析する解析手段と、
前記解析手段の解析結果に基づいて前記モデルに含まれる前記複数のレイヤに対応するライフタイムを決定する決定手段と、
前記ライフタイムに基づいて前記ソフトウェアを生成する生成手段と、
を備えることを特徴とするソフトウェア生成装置。
【請求項2】
前記ソフトウェアは前記ニューラルネットワーク回路を制御するための複数のコマンドを含むことを特徴とする請求項1に記載のソフトウェア生成装置。
【請求項3】
前記ライフタイムは対応するレイヤにおいて前記ニューラルネットワーク回路に対してデータを入力するタイミングを1以上含むことを特徴とする請求項1または2に記載のソフトウェア生成装置。
【請求項4】
前記ソフトウェアは外部メモリ上に保持される前記データの配置情報を含み、
前記生成手段は前記配置情報を複数のライフタイムを割り付けたグループに基づいて生成することを特徴とする請求項1乃至3のいずれか1項に記載のソフトウェア生成装置。
【請求項5】
前記ライフタイムは対応するレイヤにおける演算期間に対応し、
前記複数のレイヤにおいて対応する少なくとも一部の演算期間は時間的に重複することを特徴とする請求項1乃至4のいずれか1項に記載のソフトウェア生成装置。
【請求項6】
前記ニューラルネットワーク回路は畳み込み演算を行う畳み込み演算回路と前記畳み込み演算の結果に基づく量以下演算を行う量子化演算回路を含み、
前記畳み込み演算回路と量子化演算回路はループ形状に構成されていることを特徴とする請求項1乃至5のいずれか1項に記載のソフトウェア生成装置。
【請求項7】
ニューラルネットワーク回路を制御するためのソフトウェアを生成するソフトウェア生成方法であって、
前記ニューラルネットワーク回路において動作する複数のレイヤを含むモデルに関する情報を解析する解析ステップと、
前記解析手段の解析結果に基づいて前記モデルに含まれる前記複数のレイヤに対応するライフタイムを決定する決定ステップと、
前記ライフタイムに基づいて前記ソフトウェアを生成する生成ステップと、
を備えることを特徴とするソフトウェア生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェア生成装置およびソフトウェア生成方法に関する。
【背景技術】
【0002】
近年、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている(特許文献1など)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
一方で、IoT機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等が使用されている。組み込み機器において畳み込みニューラルネットワークを効率的に動作させるため、組み込み機器のハードウェア構成に合わせたニューラルネットワークに係る演算を行う回路やモデルを生成することが望まれている。また、これらの回路やモデルを高効率かつ高速に動作させるソフトウェア生成方法が望まれている。
【0005】
上記事情を踏まえ、本発明は、IoT機器などの組み込み機器に組み込み可能であり、高効率かつ高速に動作させることができるニューラルネットワークに係る演算を行う回路やモデルを生成するソフトウェア生成装置およびニューラルネットワークに係る演算を行う回路やモデルを高効率かつ高速に動作させるためのソフトウェア生成方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク生成装置は、ニューラルネットワーク回路を制御するためのソフトウェアを生成するソフトウェア生成装置であって、前記ニューラルネットワーク回路において動作する複数のレイヤを含むモデルに関する情報を解析する解析手段と、前記解析手段の解析結果に基づいて前記モデルに含まれる前記複数のレイヤに対応するライフタイムを決定する決定手段と、前記ライフタイムに基づいて前記ソフトウェアを生成する生成手段とを備える。
【発明の効果】
【0007】
本発明のソフトウェア生成装置およびソフトウェア生成方法は、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成して制御できる。
【図面の簡単な説明】
【0008】
【
図1】実施形態に係るニューラルネットワーク生成装置を示す図である。
【
図2】同ニューラルネットワーク生成装置の演算部の入出力を示す図である。
【
図3】畳み込みニューラルネットワークの一例を示す図である。
【
図4】同畳み込みニューラルネットワークの畳み込み層が行う畳み込み演算を説明する図である。
【
図5】ニューラルネットワーク実行モデルの一例を示す図である。
【
図6】同ニューラルネットワーク実行モデルの動作例を示すタイミングチャートである。
【
図7】同ニューラルネットワーク生成装置の制御フローチャートである。
【
図8】生成される畳み込み演算回路の内部ブロック図である。
【
図9】同畳み込み演算回路の乗算器の内部ブロック図である。
【
図10】同乗算器の積和演算ユニットの内部ブロック図である。
【
図11】同畳み込み演算回路のアキュムレータ回路の内部ブロック図である。
【
図12】同アキュムレータ回路のアキュムレータユニットの内部ブロック図である。
【
図13】同畳み込み演算回路の制御回路のステート遷移図である。
【
図14】生成される量子化演算回路の内部ブロック図である。
【
図15】同量子化演算回路のベクトル演算回路と量子化回路の内部ブロック図である。
【
図16】同ベクトル演算回路の演算ユニットのブロック図である。
【
図17】同量子化回路の量子化ユニットの内部ブロック図である。
【
図18】生成されるDMACの内部ブロック図である。
【
図20】ニューラルネットワークの一例と従来のアロケーションの一例を示す図である。
【
図22】ニューラルネットワークの一例とアロケーションの一例を示す図である。
【発明を実施するための形態】
【0009】
(実施形態)
本発明の実施形態について、
図1から
図22を参照して説明する。
図1は、本実施形態に係るニューラルネットワーク生成装置300を示す図である。
【0010】
[ニューラルネットワーク生成装置300]
ニューラルネットワーク生成装置300は、IoT機器などの組み込み機器に組み込み可能な学習済みのニューラルネットワーク実行モデル100を生成する装置である。ニューラルネットワーク実行モデル100は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を組み込み機器において演算させるために生成されたソフトウェアやハードウェアモデルである。
【0011】
ニューラルネットワーク生成装置300は、CPU(Central Processing Unit)等のプロセッサとメモリ等のハードウェアを備えたプログラム実行可能な装置(コンピュータ)である。ニューラルネットワーク生成装置300の機能は、ニューラルネットワーク生成装置300においてニューラルネットワーク生成プログラムを実行することにより実現される。ニューラルネットワーク生成装置300は、記憶部310と、演算部320と、データ入力部330と、データ出力部340と、表示部350と、操作入力部360と、を備える。
【0012】
記憶部310は、ハードウェア情報HWと、ネットワーク情報NWと、学習データセットDSと、ニューラルネットワーク実行モデル100(以下、「NN実行モデル100」という)と、学習済みパラメータPMと、を記憶する。ハードウェア情報HW、学習データセットDSおよびネットワーク情報NWは、ニューラルネットワーク生成装置300に入力される入力データである。NN実行モデル100および学習済みパラメータPMは、ニューラルネットワーク生成装置300が出力する出力データである。なお、「学習済みのNN実行モデル100」は、NN実行モデル100および学習済みパラメータPMを含む。
【0013】
ハードウェア情報HWは、NN実行モデル100を動作させる組み込み機器(以降、「動作対象ハードウェア」という)の情報である。ハードウェア情報HWは、例えば、動作対象ハードウェアのデバイス種別、デバイス制約、メモリ構成、バス構成、動作周波数、消費電力、製造プロセス種別などである。デバイス種別は、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などの種別である。デバイス制約は、動作対象デバイスに含まれる演算器数の上限や回路規模の上限などである。メモリ構成は、メモリ種別やメモリ個数やメモリ容量や入出力データ幅である。バス構成は、バス種類、バス幅、バス通信規格、同一バス上の接続デバイスなどである。また、NN実行モデル100に複数のバリエーションが存在する場合、ハードウェア情報HWには使用するNN実行モデル100のバリエーションに関する情報が含まれる。
【0014】
ネットワーク情報NWは、CNN200の基本情報である。ネットワーク情報NWは、例えば、CNN200のネットワーク構成、入力データ情報、出力データ情報、量子化情報などである。入力データ情報は、画像や音声などの入力データ種別と、入力データサイズなどである。
【0015】
学習データセットDSは、学習に用いる学習データD1と、推論テストに用いるテストデータD2と、を有する。
【0016】
図2は、演算部320の入出力を示す図である。
演算部320は、実行モデル生成部321と、学習部322と、推論部323と、ハードウェア生成部324と、ソフトウェア生成部325と、を有する。演算部320に入力されるNN実行モデル100は、ニューラルネットワーク生成装置300以外の装置で生成されたものであってもよい。
【0017】
実行モデル生成部321は、ハードウェア情報HWおよびネットワーク情報NWに基づいてNN実行モデル100を生成する。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
【0018】
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。推論部323は、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。
【0019】
ハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。ニューラルネットワークハードウェアモデル400は、動作対象ハードウェアに実装可能なハードウェアモデルである。ニューラルネットワークハードウェアモデル400は、ハードウェア情報HWに基づいて、動作対象ハードウェアに最適化されている。ニューラルネットワークハードウェアモデル400は、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。ニューラルネットワークハードウェアモデル400は、NN実行モデル100をハードウェアに実装するために必要なパラメータリストやコンフィグレーションファイルであってもよい。パラメータリストやコンフィグレーションファイルは別途生成されたNN実行モデル100と組み合わせて使用される。
【0020】
以降の説明において、ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したものを、「ニューラルネットワークハードウェア600」という。
【0021】
ソフトウェア生成部325は、ネットワーク情報NWまたはNN実行モデル100に基づいて、ニューラルネットワークハードウェア600を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。なお、ソフトウェア500の形式としては、ソースコードの形式だけでなく、バイナリ形式であってもよい。
【0022】
データ入力部330には、学習済みのNN実行モデル100を生成するために必要なハードウェア情報HWやネットワーク情報NW等が入力される。ハードウェア情報HWやネットワーク情報NW等は、例えば所定のデータフォーマットで記載されたデータとして入力される。入力されたハードウェア情報HWやネットワーク情報NW等は、記憶部310に記憶される。ハードウェア情報HWやネットワーク情報NW等は、操作入力部360から使用者により入力または変更されてもよい。
【0023】
データ出力部340には、生成された学習済みのNN実行モデル100が出力される。例えば、生成されたNN実行モデル100と、学習済みパラメータPMとがデータ出力部340に出力される。
【0024】
表示部350は、LCDディスプレイ等の公知のモニタを有する。表示部350は、演算部320が生成したGUI(Graphical User Interface)画像やコマンド等を受け付けるためのコンソール画面などを表示できる。また、演算部320が使用者からの情報入力を必要とする場合、表示部350は操作入力部360から情報を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示できる。
【0025】
操作入力部360は、使用者が演算部320等に対しての指示を入力する装置である。操作入力部360は、タッチパネル、キーボード、マウス等の公知の入力デバイスである。操作入力部360の入力は、演算部320に送信される。
【0026】
演算部320の機能の全部または一部は、例えばCPU(Central Processing Unit)やGPU(Graphics Processing Unit)のような1つ以上のプロセッサがプログラムメモリに記憶されたプログラムを実行することにより実現される。ただし、演算部320の機能の全部または一部は、LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)、PLD(Programmable Logic Device)等のハードウェア(例えば回路部;circuity)により実現されてもよい。また、演算部320の機能の全部または一部は、ソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
【0027】
演算部320の機能の全部または一部は、クラウドサーバ等の外部機器に設けられたCPUやGPUやハードウェア等の外部アクセラレータを用いて実現されてもよい。演算部320は、例えばクラウドサーバ上の演算性能が高いGPUや専用ハードウェアを併用することで、演算部320の演算速度を向上させることができる。
【0028】
記憶部310は、フラッシュメモリ、EEPROM(Electrically Erasable Programmable Read-Only Memory)、ROM(Read-Only Memory)、またRAM(Random Access Memory)等により実現される。記憶部310の全部または一部はクラウドサーバ等の外部機器に設けられ、通信回線により演算部320等と接続させてもよい。
【0029】
[畳み込みニューラルネットワーク(CNN)200]
次に、CNN200について説明する。
図3は、CNN200の一例を示す図である。CNN200のネットワーク情報NWは、以下で説明するCNN200の構成に関する情報である。CNN200は、低ビットの重みwや量子化された入力データaを用いており、組み込み機器に組み込みやすい。
【0030】
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
【0031】
図4は、畳み込み層210が行う畳み込み演算を説明する図である。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
【0032】
畳み込み層210への入力データa(アクティベーションデータ、特徴マップともいう)は、画像データ等の多次元データである。本実施形態において、入力データaは、要素(x,y,c)からなる3次元テンソルである。CNN200の畳み込み層210は、低ビットの入力データaに対して畳み込み演算を行う。本実施形態において、入力データaの要素は、2ビットの符号なし整数(0,1,2,3)である。入力データaの要素は、例えば、4ビットや8ビット符号なし整数でもよい。
【0033】
CNN200に入力される入力データが、例えば32ビットの浮動小数点型など、畳み込み層210への入力データaと形式が異なる場合、CNN200は畳み込み層210の前に型変換や量子化を行う入力層をさらに有してもよい。
【0034】
畳み込み層210の重みw(フィルタ、カーネルともいう)は、学習可能なパラメータである要素を有する多次元データである。本実施形態において、重みwは、要素(i,j,c,d)からなる4次元テンソルである。重みwは、要素(i,j,c)からなる3次元テンソル(以降、「重みwo」という)をd個有している。学習済みのCNN200における重みwは、学習済みのデータである。CNN200の畳み込み層210は、低ビットの重みwを用いて畳み込み演算を行う。本実施形態において、重みwの要素は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
【0035】
畳み込み層210は、式1に示す畳み込み演算を行い、出力データfを出力する。式1において、sはストライドを示す。
図4において点線で示された領域は、入力データaに対して重みwoが適用される領域ao(以降、「適用領域ao」という)の一つを示している。適用領域aoの要素は、(x+i,y+j,c)で表される。
【0036】
【0037】
量子化演算層220は、畳み込み層210が出力する畳み込み演算の出力に対して量子化などを実施する。量子化演算層220は、プーリング層221と、Batch Normalization層222と、活性化関数層223と、量子化層224と、を有する。
【0038】
プーリング層221は、畳み込み層210が出力する畳み込み演算の出力データfに対して平均プーリング(式2)やMAXプーリング(式3)などの演算を実施して、畳み込み層210の出力データfを圧縮する。式2および式3において、uは入力テンソルを示し、vは出力テンソルを示し、Tはプーリング領域の大きさを示す。式3において、maxはTに含まれるiとjの組み合わせに対するuの最大値を出力する関数である。
【0039】
【0040】
【0041】
Batch Normalization層222は、量子化演算層220やプーリング層221の出力データに対して、例えば式4に示すような演算によりデータ分布の正規化を行う。式4において、uは入力テンソルを示し、vは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのCNN200において、αおよびβは学習済みの定数ベクトルである。
【0042】
【0043】
活性化関数層223は、量子化演算層220やプーリング層221やBatch Normalization層222の出力に対してReLU(式5)などの活性化関数の演算を行う。式5において、uは入力テンソルであり、vは出力テンソルである。式5において、maxは引数のうち最も大きい数値を出力する関数である。
【0044】
【0045】
量子化層224は、量子化パラメータに基づいて、プーリング層221や活性化関数層223の出力に対して例えば式6に示すような量子化を行う。式6に示す量子化は、入力テンソルuを2ビットにビット削減している。式6において、q(c)は量子化パラメータのベクトルである。学習済みのCNN200において、q(c)は学習済みの定数ベクトルである。式6における不等式「≦」は「<」であってもよい。
【0046】
【0047】
出力層230は、恒等関数やソフトマックス関数等によりCNN200の結果を出力する層である。出力層230の前段のレイヤは、畳み込み層210であってもよいし、量子化演算層220であってもよい。
【0048】
CNN200は、量子化された量子化層224の出力データが、畳み込み層210に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層210の畳み込み演算の負荷が小さい。
【0049】
[ニューラルネットワーク実行モデル100(NN実行モデル)100]
次に、NN実行モデル100について説明する。
図5は、NN実行モデル100の一例を示す図である。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
【0050】
NN実行モデル100は、第一メモリ1と、第二メモリ2と、DMAコントローラ3(以下、「DMAC3」ともいう)と、畳み込み演算回路4と、量子化演算回路5と、コントローラ6と、を備える。NN実行モデル100は、第一メモリ1および第二メモリ2を介して、畳み込み演算回路4と量子化演算回路5とがループ状に形成されていることを特徴とする。
【0051】
第一メモリ1は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第一メモリ1には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第一メモリ1は、畳み込み演算回路4の入力ポートと接続されており、畳み込み演算回路4は第一メモリ1からデータを読み出すことができる。また、第一メモリ1は、量子化演算回路5の出力ポートと接続されており、量子化演算回路5は第一メモリ1にデータを書き込むことができる。外部ホストCPUは、第一メモリ1に対するデータの書き込みや読み出しにより、NN実行モデル100に対するデータの入出力を行うことができる。
【0052】
第二メモリ2は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第二メモリ2には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第二メモリ2は、量子化演算回路5の入力ポートと接続されており、量子化演算回路5は第二メモリ2からデータを読み出すことができる。また、第二メモリ2は、畳み込み演算回路4の出力ポートと接続されており、畳み込み演算回路4は第二メモリ2にデータを書き込むことができる。外部ホストCPUは、第二メモリ2に対するデータの書き込みや読み出しにより、NN実行モデル100に対するデータの入出力を行うことができる。
【0053】
DMAC3は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと第二メモリ2との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。
【0054】
畳み込み演算回路4は、学習済みのCNN200の畳み込み層210における畳み込み演算を行う回路である。畳み込み演算回路4は、第一メモリ1に格納された入力データaを読み出し、入力データaに対して畳み込み演算を実施する。畳み込み演算回路4は、畳み込み演算の出力データf(以降、「畳み込み演算出力データ」ともいう)を第二メモリ2に書き込む。
【0055】
量子化演算回路5は、学習済みのCNN200の量子化演算層220における量子化演算の少なくとも一部を行う回路である。量子化演算回路5は、第二メモリ2に格納された畳み込み演算の出力データfを読み出し、畳み込み演算の出力データfに対して量子化演算(プーリング、Batch Normalization、活性化関数、および量子化のうち少なくとも量子化を含む演算)を行う。量子化演算回路5は、量子化演算の出力データ(以降、「量子化演算出力データ」ともいう)оutを第一メモリ1に書き込む。
【0056】
コントローラ6は、外部バスEBに接続されており、外部のホストCPUのスレーブとして動作する。コントローラ6は、パラメータレジスタや状態レジスタを含むレジスタ61を有している。パラメータレジスタは、NN実行モデル100の動作を制御するレジスタである。状態レジスタはセマフォSを含むNN実行モデル100の状態を示すレジスタである。外部ホストCPUは、コントローラ6を経由して、レジスタ61にアクセスできる。
【0057】
コントローラ6は、内部バスIBを介して、第一メモリ1と、第二メモリ2と、DMAC3と、畳み込み演算回路4と、量子化演算回路5と、接続されている。外部ホストCPUは、コントローラ6を経由して、各ブロックに対してアクセスできる。例えば、外部ホストCPUは、コントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する命令を指示することができる。また、DMAC3や畳み込み演算回路4や量子化演算回路5は、内部バスIBを介して、コントローラ6が有する状態レジスタ(セマフォSを含む)を更新できる。状態レジスタ(セマフォSを含む)は、DMAC3や畳み込み演算回路4や量子化演算回路5と接続された専用配線を介して更新されるように構成されていてもよい。
【0058】
NN実行モデル100は、第一メモリ1や第二メモリ2等を有するため、DRAMなどの外部メモリからのDMAC3によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
【0059】
図6は、NN実行モデル100の動作例を示すタイミングチャートである。NN実行モデル100は、複数のレイヤの多層構造であるCNN200の演算を、ループ状に形成された回路により演算する。NN実行モデル100は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。以下、
図6に示すニューラルネットワークハードウェア600の動作例を説明する。
【0060】
DMAC3は、レイヤ1(
図3参照)の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
【0061】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ1(
図3参照)の入力データaを読み出す。畳み込み演算回路4は、レイヤ1の入力データaに対してレイヤ1の畳み込み演算を行う。レイヤ1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0062】
量子化演算回路5は、第二メモリ2に格納されたレイヤ1の出力データfを読み出す。量子化演算回路5は、レイヤ1の出力データfに対してレイヤ2の量子化演算を行う。レイヤ2の量子化演算の出力データоutは、第一メモリ1に格納される。
【0063】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2の量子化演算の出力データоutを入力データaとしてレイヤ3の畳み込み演算を行う。レイヤ3の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0064】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2M-2(Mは自然数)の量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2M-2の量子化演算の出力データоutを入力データaとしてレイヤ2M-1の畳み込み演算を行う。レイヤ2M-1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0065】
量子化演算回路5は、第二メモリ2に格納されたレイヤ2M-1の出力データfを読み出す。量子化演算回路5は、2M-1レイヤの出力データfに対してレイヤ2Mの量子化演算を行う。レイヤ2Mの量子化演算の出力データоutは、第一メモリ1に格納される。
【0066】
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2Mの量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2Mの量子化演算の出力データоutを入力データaとしてレイヤ2M+1の畳み込み演算を行う。レイヤ2M+1の畳み込み演算の出力データfは、第二メモリ2に格納される。
【0067】
畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、
図3に示すCNN200の演算を進めていく。NN実行モデル100は、畳み込み演算回路4が時分割によりレイヤ2M-1の畳み込み演算とレイヤ2M+1を実施する。また、NN実行モデル100は、量子化演算回路5が時分割によりレイヤ2M-2の畳み込み演算とレイヤ2Mを実施する。そのため、NN実行モデル100は、レイヤごとに別々の畳み込み演算回路4と量子化演算回路5を実装する場合と比較して、回路規模が著しく小さい。
【0068】
なお、
図6においては、畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、
図3に示すCNN200の演算を進めていく例を示したが、これに限られるものではない。例えば、量子化演算回路5が時分割によりレイヤ2Mの量子化演算を行うのと並行して、畳み込み演算回路4がレイヤ2M+1を実施するよう制御してもよい。この動作により、より演算効率を高めることが可能となる。また、別の例として、連続しない二つのレイヤに対して並列した演算を行ってもよい。
【0069】
[ニューラルネットワーク生成装置300の動作]
次に、ニューラルネットワーク生成装置300の動作(ニューラルネットワーク制御方法)を、
図7に示すニューラルネットワーク生成装置300の制御フローチャートに沿って説明する。ニューラルネットワーク生成装置300は初期化処理(ステップS10)を実施した後、ステップS11を実行する。
【0070】
<ハードウェア情報取得工程(S11)>
ステップS11において、ニューラルネットワーク生成装置300は、動作対象ハードウェアのハードウェア情報HWを取得する(ハードウェア情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたハードウェア情報HWを取得する。ニューラルネットワーク生成装置300は、表示部350にハードウェア情報HWの入力に必要なGUI画像を表示させ、使用者にハードウェア情報HWを操作入力部360から入力させることでハードウェア情報HWを取得してもよい。
【0071】
ハードウェア情報HWは、具体的には、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ種別やメモリ容量や入出力データ幅を有する。
【0072】
取得されたハードウェア情報HWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS12を実行する。
【0073】
<ネットワーク情報取得工程(S12)>
ステップS12において、ニューラルネットワーク生成装置300は、CNN200のネットワーク情報NWを取得する(ネットワーク情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたネットワーク情報NWを取得する。ニューラルネットワーク生成装置300は、表示部350にネットワーク情報NWの入力に必要なGUI画像を表示させ、使用者にネットワーク情報NWを操作入力部360から入力させることでネットワーク情報NWを取得してもよい。
【0074】
ネットワーク情報NWは、具体的には、入力層や出力層230を含むネットワーク構成と、重みwや入力データaのビット幅を含む畳み込み層210の構成と、量子化情報を含む量子化演算層220の構成と、を有する。
【0075】
取得されたネットワーク情報NWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS13を実行する。
【0076】
<ニューラルネットワーク実行モデル生成工程(S13)>
ステップS13において、ニューラルネットワーク生成装置300の実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100を生成する(ニューラルネットワーク実行モデル生成工程)。
【0077】
ニューラルネットワーク実行モデル生成工程(NN実行モデル生成工程)は、例えば、畳み込み回路生成工程(S13-1)と、量子化回路生成工程(S13-2)と、DMAC生成工程(S13-3)と、を有する。なお、NN実行モデル生成工程として、一部または全部の回路を事前に生成し記憶部310などに記憶されたものを用いることで、当該工程の一部または全部を省略してもよい。また、ハードウェア情報HWまたはネットワーク情報NWなどに基づいて、事前に作成しておいた回路から選択により、NN実行モデル生成工程を実現してもよい。
【0078】
<畳み込み回路生成工程(S13-1)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の畳み込み回路4を生成する(畳み込み回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される畳み込み演算回路4のハードウェアモデルの一例を説明する。
【0079】
図8は、生成される畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
【0080】
重みメモリ41は、畳み込み演算に用いる重みwが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、畳み込み演算に必要な重みwを重みメモリ41に書き込む。
【0081】
図9は、乗算器42の内部ブロック図である。
乗算器42は、入力ベクトルAと重みマトリクスWとを乗算する。入力ベクトルAは、入力データaが分割されたデータであり、Bc個の要素を持つベクトルデータである。また、重みマトリクスWは、重みwが分割されたデータであり、Bc×Bd個の要素を持つマトリクスデータである。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとを乗算を並列して実施できる。
【0082】
乗算器42は、乗算に必要な入力ベクトルAと重みマトリクスWを、第一メモリ1および重みメモリ41から読み出して乗算を実施する。乗算器42は、Bd個の積和演算結果O(di)を出力する。
【0083】
図10は、積和演算ユニット47の内部ブロック図である。
積和演算ユニット47は、入力ベクトルAの要素A(ci)と、重みマトリクスWの要素W(ci,di)との乗算を実施する。また、積和演算ユニット47は、乗算結果と他の積和演算ユニット47の乗算結果S(ci,di)と加算する。積和演算ユニット47は、加算結果S(ci+1,di)を出力する。ciは0から(Bc-1)までのインデックスである。diは0から(Bd-1)までのインデックスである。要素A(ci)は、2ビットの符号なし整数(0,1,2,3)である。要素W(ci,di)は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
【0084】
積和演算ユニット47は、反転器(インバータ)47aと、セレクタ47bと、加算器47cと、を有する。積和演算ユニット47は、乗算器を用いず、反転器47aおよびセレクタ47bのみを用いて乗算を行う。セレクタ47bは、要素W(ci,di)が「0」の場合、要素A(ci)の入力を選択する。セレクタ47bは、要素W(ci,di)が「1」の場合、要素A(ci)を反転器により反転させた補数を選択する。要素W(ci,di)は、加算器47cのCarry-inにも入力される。加算器47cは、要素W(ci,di)が「0」のとき、S(ci,di)に要素A(ci)を加算した値を出力する。加算器47cは、W(ci,di)が「1」のとき、S(ci,di)から要素A(ci)を減算した値を出力する。
【0085】
図11は、アキュムレータ回路43の内部ブロック図である。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
【0086】
図12は、アキュムレータユニット48の内部ブロック図である。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
【0087】
加算器48aは、加算結果を第二メモリ2の同一アドレスに書き込む。マスク部48bは、初期化信号clearがアサートされた場合に、第二メモリ2からの出力をマスクし、要素O(di)に対する加算対象をゼロにする。初期化信号clearは、第二メモリ2に途中経過の部分和が格納されていない場合にアサートされる。
【0088】
乗算器42およびアキュムレータ回路43による畳み込み演算が完了すると、第二メモリに、Bd個の要素を持つ出力データf(x,y,do)が格納される。
【0089】
ステートコントローラ44は、乗算器42およびアキュムレータ回路43のステートを制御する。また、ステートコントローラ44は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ44は、命令キュー45と制御回路46とを有する。
【0090】
命令キュー45は、畳み込み演算回路4用の命令コマンドC4が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー45には、内部バスIB経由で命令コマンドC4が書き込まれる。
【0091】
制御回路46は、命令コマンドC4をデコードし、命令コマンドC4に基づいて乗算器42およびアキュムレータ回路43を制御するステートマシンである。制御回路46は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるCPUによって実装されていてもよい。
【0092】
図13は、制御回路46のステート遷移図である。
制御回路46は、命令キュー45に命令コマンドC4が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
【0093】
制御回路46は、デコードステートS2において、命令キュー45から出力される命令コマンドC3をデコードする。また、制御回路46は、コントローラ6のレジスタ61に格納されたセマフォSを読み出し、命令コマンドC4において指示された乗算器42やアキュムレータ回路43の動作を実行可能であるかを判定する。実行不能である場合(Not ready)、制御回路46は実行可能となるまで待つ(Wait)。実行可能である場合(ready)、制御回路46はデコードステートS2から実行ステートS3に遷移する。
【0094】
制御回路46は、実行ステートS3において、乗算器42やアキュムレータ回路43を制御して、乗算器42やアキュムレータ回路43に命令コマンドC4において指示された動作を実施させる。制御回路34は、乗算器42やアキュムレータ回路43の動作が終わると、命令キュー45から実行を終えた命令コマンドC4を取り除くとともに、コントローラ6のレジスタ61に格納されたセマフォSを更新する。制御回路46は、命令キュー45に命令がある場合(Not empty)、実行ステートS3からデコードステートS2に遷移する。制御回路46は、命令キュー45に命令がない場合(empty)、実行ステートS3からアイドルステートS1に遷移する。
【0095】
実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を決定する。ハードウェア情報HWとして生成するNN実行モデル100(ニューラルネットワークハードウェアモデル400、ニューラルネットワークハードウェア600)のハードウェア規模が含まれる場合、実行モデル生成部321は、指定された規模にあわせて畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を調整する。
【0096】
<量子化回路生成工程(S13-2)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の量子化回路5を生成する(量子化回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化回路5のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される量子化回路5のハードウェアモデルの一例を説明する。
【0097】
図14は、生成される量子化演算回路5の内部ブロック図である。
量子化演算回路5は、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53と、ステートコントローラ54と、を有する量子化演算回路5は、ベクトル演算回路52および量子化回路53に対する専用のステートコントローラ54を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
【0098】
量子化パラメータメモリ51は、量子化演算に用いる量子化パラメータqが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、量子化演算に必要な量子化パラメータqを量子化パラメータメモリ51に書き込む。
【0099】
図15は、ベクトル演算回路52と量子化回路53の内部ブロック図である。
ベクトル演算回路52は、第二メモリ2に格納された出力データf(x,y,do)に対して演算を行う。ベクトル演算回路52は、Bd個の演算ユニット57を有し、出力データf(x,y,do)に対して並列にSIMD演算を行う。
【0100】
図16は、演算ユニット57のブロック図である。
演算ユニット57は、例えば、ALU57aと、第一セレクタ57bと、第二セレクタ57cと、レジスタ57dと、シフタ57eと、を有する。演算ユニット57は、公知の汎用SIMD演算回路が有する他の演算器等をさらに有してもよい。
【0101】
ベクトル演算回路52は、演算ユニット57が有する演算器等を組み合わせることで、出力データf(x,y,do)に対して、量子化演算層220におけるプーリング層221や、Batch Normalization層222や、活性化関数層223の演算のうち少なくとも一つの演算を行う。
【0102】
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより加算できる。演算ユニット57は、ALU57aによる加算結果をレジスタ57dに格納できる。演算ユニット57は、第一セレクタ57bの選択によりレジスタ57dに格納されたデータに代えて「0」をALU57aに入力することで加算結果を初期化できる。例えばプーリング領域が2×2である場合、シフタ57eはALU57aの出力を2bit右シフトすることで加算結果の平均値を出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式2に示す平均プーリングの演算を実施できる。
【0103】
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより比較できる。
演算ユニット57は、ALU57aによる比較結果に応じて第二セレクタ57cを制御して、レジスタ57dに格納されたデータと要素f(di)の大きい方を選択できる。演算ユニット57は、第一セレクタ57bの選択により要素f(di)の取りうる値の最小値をALU57aに入力することで比較対象を最小値に初期化できる。本実施形態において要素f(di)は16bit符号付き整数であるので、要素f(di)の取りうる値の最小値は「0x8000」である。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式3のMAXプーリングの演算を実施できる。なお、MAXプーリングの演算ではシフタ57eは第二セレクタ57cの出力をシフトしない。
【0104】
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより減算できる。シフタ57eはALU57aの出力を左シフト(すなわち乗算)もしくは右シフト(すなわち除算)できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式4のBatch Normalizationの演算を実施できる。
【0105】
演算ユニット57は、第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)と第一セレクタ57bにより選択された「0」とをALU57aにより比較できる。演算ユニット57は、ALU57aによる比較結果に応じて要素f(di)と予めレジスタ57dに格納された定数値「0」のいずれかを選択して出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式5のReLU演算を実施できる。
【0106】
ベクトル演算回路52は、平均プーリング、MAXプーリング、Batch Normalization、活性化関数の演算およびこれらの演算の組み合わせを実施できる。ベクトル演算回路52は、汎用SIMD演算を実施できるため、量子化演算層220における演算に必要な他の演算を実施してもよい。また、ベクトル演算回路52は、量子化演算層220における演算以外の演算を実施してもよい。
【0107】
なお、量子化演算回路5は、ベクトル演算回路52を有してなくてもよい。量子化演算回路5がベクトル演算回路52を有していない場合、出力データf(x,y,do)は量子化回路53に入力される。
【0108】
量子化回路53は、ベクトル演算回路52の出力データに対して、量子化を行う。量子化回路53は、
図15に示すように、Bd個の量子化ユニット58を有し、ベクトル演算回路52の出力データに対して並列に演算を行う。
【0109】
図17は、量子化ユニット58の内部ブロック図である。
量子化ユニット58は、ベクトル演算回路52の出力データの要素in(di)に対して量子化を行う。量子化ユニット58は、比較器58aと、エンコーダ58bと、を有する。量子化ユニット58はベクトル演算回路52の出力データ(16ビット/要素)に対して、量子化演算層220における量子化層224の演算(式6)を行う。量子化ユニット58は、量子化パラメータメモリ51から必要な量子化パラメータq(th0,th1,th2)を読み出し、比較器58aにより入力in(di)と量子化パラメータqとの比較を行う。量子化ユニット58は、比較器58aによる比較結果をエンコーダ58bにより2ビット/要素に量子化する。式4におけるα(c)とβ(c)は、変数cごとに異なるパラメータであるため、α(c)とβ(c)を反映する量子化パラメータq(th0,th1,th2)はin(di)ごとに異なるパラメータである。
【0110】
量子化ユニット58は、入力in(di)を3つの閾値th0,th1,th2と比較することにより、入力in(di)を4領域(例えば、in≦th0,th0<in≦th1,th1<in≦th2,th2<in)に分類し、分類結果を2ビットにエンコードして出力する。量子化ユニット58は、量子化パラメータq(th0,th1,th2)の設定により、量子化と併せてBatch Normalizationや活性化関数の演算を行うこともできる。
【0111】
量子化ユニット58は、閾値th0を式4のβ(c)、閾値の差(th1―th0)および(th2―th1)を式4のα(c)として設定して量子化を行うことで、式4に示すBatch Normalizationの演算を量子化と併せて実施できる。(th1―th0)および(th2―th1)を大きくすることでα(c)を小さくできる。(th1―th0)および(th2―th1)を小さくすることで、α(c)を大きくできる。
【0112】
量子化ユニット58は、入力in(di)の量子化と併せて活性化関数のReLU演算を実施できる。例えば、量子化ユニット58は、in(di)≦th0およびth2<in(di)となる領域では出力値を飽和させる。量子化ユニット58は、出力が非線形とするように量子化パラメータqを設定することで活性化関数の演算を量子化と併せて実施できる。
【0113】
ステートコントローラ54は、ベクトル演算回路52および量子化回路53のステートを制御する。また、ステートコントローラ54は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ54は、命令キュー55と制御回路56とを有する。
【0114】
命令キュー55は、量子化演算回路5用の命令コマンドC5が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー55には、内部バスIB経由で命令コマンドC5が書き込まれる。
【0115】
制御回路56は、命令コマンドC5をデコードし、命令コマンドC5に基づいてベクトル演算回路52および量子化回路53を制御するステートマシンである。制御回路56は、畳み込み演算回路4のステートコントローラ44の制御回路46と同様の構成である。
【0116】
量子化演算回路5は、Bd個の要素を持つ量子化演算出力データを第一メモリ1に書き込む。なお、BdとBcの好適な関係を式7に示す。式7においてnは整数である。
【0117】
【0118】
実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化演算回路5における、プーリングの演算の有無および種類(平均プーリング、MAXプーリングなど)、Batch Normalizationの演算の有無および方式、活性化関数の演算の有無および方式(ReLU演算など)、量子化の方式(ビット数など)、およびその他の演算の有無を決定する。ハードウェア情報HWとして生成するNN実行モデル100(ニューラルネットワークハードウェアモデル400、ニューラルネットワークハードウェア600)のハードウェア規模が含まれる場合、実行モデル生成部321は、指定された規模にあわせて量子化演算回路5における演算器の構成を調整する。
【0119】
<DMAC生成工程(S13-3)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100のDMAC3を生成する(DMAC生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成されるDMAC3のハードウェアモデルの一例を説明する。
【0120】
図18は、生成されるDMAC3の内部ブロック図である。
DMAC3は、データ転送回路31と、ステートコントローラ32と、を有する。DMAC3は、データ転送回路31に対する専用のステートコントローラ32を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずにDMAデータ転送を実施できる。
【0121】
データ転送回路31は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと第二メモリ2との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。データ転送回路31のDMAチャンネル数は限定されない。例えば、第一メモリ1と第二メモリ2のそれぞれに専用のDMAチャンネルを有していてもよい。
【0122】
ステートコントローラ32は、データ転送回路31のステートを制御する。また、ステートコントローラ32は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ32は、命令キュー33と制御回路34とを有する。
【0123】
命令キュー33は、DMAC3用の命令コマンドC3が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー33には、内部バスIB経由で1つ以上の命令コマンドC3が書き込まれる。
【0124】
制御回路34は、命令コマンドC3をデコードし、命令コマンドC3に基づいて順次データ転送回路31を制御するステートマシンである。制御回路34は、畳み込み演算回路4のステートコントローラ44の制御回路46と同様の構成である。
【0125】
実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3における、DMAチャンネル数やデータバス幅などを決定する。
【0126】
例えば、実行モデル生成部321は、ホスト側の外部バスEBの仕様にあわせた仕様(データバス幅等)のDMAC3を生成する。データバス幅やDMAチャンネル数を増やすことで外部メモリと第一メモリ1や第二メモリ2とのデータ伝送速度を向上させることができる。
【0127】
<学習工程(S14)>
ステップS14において、ニューラルネットワーク生成装置300の学習部322および推論部323は、学習データセットDSを用いて、生成されたNN実行モデル100の学習パラメータを学習する(学習工程)。学習工程(S14)は、例えば、学習済みパラメータ生成工程(S14-1)と、推論テスト工程(S14-2)と、を有する。
【0128】
<学習工程:学習済みパラメータ生成工程(S14-1)>
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。学習済みパラメータPMは、学習済みの重みwおよび量子化パラメータq等である。
【0129】
例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、学習データD1は入力画像と教師データTとの組み合わせである。入力画像は、CNN200に入力される入力データaである。教師データTは、画像に撮像された被写体の種類や、画像における検出対象物の有無や、画像における検出対象物の座標値などである。
【0130】
学習部322は、公知の技術である誤差逆伝播法などによる教師あり学習によって、学習済みパラメータPMを生成する。学習部322は、入力画像に対するNN実行モデル100の出力と、入力画像に対応する教師データTと、の差分Eを損失関数(誤差関数)により求め、差分Eが小さくなるように重みwおよび量子化パラメータqを更新する。
【0131】
例えば重みwを更新する場合、重みwに関する損失関数の勾配が用いられる。勾配は、例えば損失関数を微分することにより算出される。誤差逆伝播法を用いる場合、勾配は逆伝番(backward)により算出される。
【0132】
学習部322は、勾配を算出して重みwを更新する際において、畳み込み演算に関連する演算を高精度化する。具体的には、NN実行モデル100が使用する低ビットの重みw(例えば1ビット)より高精度な32ビットの浮動小数点型の重みwが学習に使用される。また、NN実行モデル100の畳み込み演算回路4において実施する畳み込み演算が高精度化される。
【0133】
学習部322は、勾配を算出して重みwを更新する際において、活性化関数に関連する演算を高精度化する。具体的には、NN実行モデル100の量子化演算回路5において実施するReLU関数などの活性化関数より高精度なシグモンド関数が学習に使用される。
【0134】
一方、学習部322は、順伝搬(fоrward)により入力画像に対する出力データを算出する際においては、畳み込み演算および活性化関数に関連する演算を高精度化せず、NN実行モデル100に基づいた演算を実施する。重みwを更新する際に用いられた高精度な重みwは、ルックアップテーブル等により低ビット化される。
【0135】
学習部322は、勾配を算出して重みwを更新する際において、畳み込み演算および活性化関数に関連する演算を高精度化することにより、演算における中間データの精度低下を防止して、高い推論精度を実現できる学習済みパラメータPMを生成できる。
【0136】
一方、学習部322は、入力画像に対する出力データを算出する際において、順伝搬(fоrward)の演算を高精度化せず、NN実行モデル100に基づいた演算を実施する。そのため、学習部322が算出した出力データと、生成された学習済みパラメータPMを用いたNN実行モデル100の出力データと、が一致する。
【0137】
<学習工程:推論テスト工程(S14-2)>
推論部323は、学習部322が生成した学習済みパラメータPM、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、テストデータD2は、学習データD1同様に入力画像と教師データTとの組み合わせである。
【0138】
推論部323は、推論テストの進捗および結果を表示部350に表示する。推論テストの結果は、例えばテストデータD2に対する正解率である。
【0139】
<確認工程(S15)>
ステップS15において、ニューラルネットワーク生成装置300の推論部323は、操作入力部360から結果に関する確認を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示部350に表示させる。使用者は、推論テストの結果を許容するかを、操作入力部360から入力する。使用者が推論テストの結果を許容することを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、次にステップS16を実施する。使用者が推論テストの結果を許容しないことを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、再度ステップS12を実施する。なお、ニューラルネットワーク生成装置300はステップS11まで戻って、ハードウェア情報HWを使用者に再入力させてもよい。
【0140】
<出力工程(S16)>
ステップS16において、ニューラルネットワーク生成装置300のハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400などを生成する。
【0141】
<ソフトウェア生成工程(S17)>
ステップS17において、ニューラルネットワーク生成装置300のソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100などに基づいて、ニューラルネットワークハードウェア600(ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したもの)を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。また、ソフトウェア500は、ニューラルネットワークハードウェア600を動作または制御するための複数の形態のソフトウェアを含んでもよいし、動作または制御に用いるための命令コマンドやNN実行モデル100の一部の演算を実行するためのソフトウェアを含んでもよい。
【0142】
ソフトウェア生成工程(S17)は、例えば、入力データを演算する単位に合わせて分割する分割工程と、演算効率を高めるためにCNN200の一部を分割するネットワーク分割工程と、入力データをどのようにメモリ上に配置するかのアロケーション工程などを有する。
【0143】
<入力データ分割工程>
ソフトウェア生成部325は、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ容量や演算器の仕様やサイズ(BcやBd)などに基づいて、畳み込み層210の畳み込み演算の入力データaを部分テンソルに分割する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。
【0144】
さらに、ソフトウェア生成部325は、NN実行モデル100の畳み込み回路4に、分割された入力データaおよび重みwを展開する。
【0145】
また、ソフトウェア生成部325は、例えば、分割された入力データa(2・X・Y・Bcビット)が第一メモリ1に複数格納されるように入力データaを部分テンソルに分割する。ソフトウェア生成部325は、レイヤごとに入力データaを分割する。なお、ニューラルネットワークハードウェア600で演算しやすい単位とは、ニューラルネットワークハードウェア600で並列演算できる数、第一メモリ1または第二メモリ2の容量や帯域、消費電力量、演算周波数などに基づいて決定する。例えば、並列演算可能な数が多い場合には分割数としては少なくすることが好ましい。
【0146】
<ネットワーク分割工程>
ソフトウェア生成部325は、CNN200のネットワーク(レイヤ)を分割して、ループ状に形成された畳み込み演算回路4と量子化演算回路5とにマッピングする(ネットワーク分割工程)。
【0147】
ソフトウェア生成部325は、CNN200のネットワーク(レイヤ)の分割を、CNN200全体に対して実施する。ソフトウェア生成部325は、DMAC3による第一メモリ1と外部メモリとの間のメモリ転送が可能か限り少なくなるように、CNN200のネットワーク(レイヤ)の分割を実施する。
【0148】
また、CNN200に入力データaのテンソル形状を変更する演算が含まれている場合も、当該演算の前においてネットワーク(レイヤ)を分割する。入力データaのテンソル形状を変更する演算とは、例えば、入力データaの深さ方向(c方向)を短くして平面方向(xy方向)へ広げる演算や、テンソル(データ)の統合を行う演算などである。
【0149】
<アロケーション工程>
ソフトウェア生成部325は、分割された演算をニューラルネットワークハードウェア600に割り当てて実施させるソフトウェア500を生成する(アロケーション工程)。ソフトウェア生成部325は、アローション工程においてメモリ上にデータを配置するための配置情報を生成する。
【0150】
ここで、ソフトウェア生成部325が生成するソフトウェア500はニューラルネットワークハードウェア600を制御動作させるためのコマンド群を含むものとする。この場合、コマンド群にはNN実行モデル100などに基づいて
図5などで示した各回路を適切なタイミングで動作させるための複数の命令コマンドが含まれる。さらに、ニューラルネットワークハードウェア600以外の外部ホストCPUなどのプロセッサ上で動作するコマンドまたはソフトウェアも含まれる。当該コマンド群は、外部メモリ上に保存され、外部ホストCPUにより直接またはコントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する制御に用いられる。
【0151】
図19は、ニューラルネットワークハードウェア600が設けられるエッジデバイスの一例を表すブロック図である。エッジデバイスは外部ホストCPU700と、外部ホストCPU700に含まれるバッファメモリ710と、外部メモリ720と、ニューラルネットワークハードウェア600が含まれ、各ブロックは外部バスEBにより接続される。当該コマンド群は、外部メモリ720上に保存され、外部ホストCPU700により、またはニューラルネットワークハードウェア600に含まれるコントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する制御が行われる。言い換えれば、当該コマンド群は、ニューラルネットワークハードウェアモデル400の一部に相当する。そのため、当該コマンド群を適切なタイミングで実行することにより、エッジデバイス上でNN実行モデル100を適切に制御することとなる。
【0152】
また、
図19において、CNN200が処理する入力データを画像データ等の多次元データであるとする。このような大容量のデータをニューラルネットワークハードウェア600上で保持するためには大型のメモリが必要になり好ましくない。そのため、CNN200に含まれる各レイヤの入力データは、演算開始時には外部メモリ720に上に保持される。そして、分割された入力データを適宜読み出すことで、ニューラルネットワークハードウェア600の回路規模を抑えることができる。さらに、CNN200に含まれる各レイヤから出力される出力データも同様に、演算結果として外部メモリ720に保持される。なお、外部メモリ720に保持された出力データは次のレイヤにおける入力データとなる。
【0153】
本実施形態において、ニューラルネットワークハードウェア600へ入力データを入力する動作、及びニューラルネットワークハードウェア600から出力データを取得する動作において、それぞれのデータは外部ホストCPU700に含まれるバッファメモリ710を経由して外部メモリ720に対して読み出され、また書き込まれる。より詳細には、外部ホストCPU700は、演算を実行しようとする対象のレイヤに対応する入力データを外部メモリ720から取得し、演算の開始に合わせてバッファメモリ710に一時的に保存する。バッファメモリ710は一例として高速に読み書きが可能であるSRAMなどで構成される。また、外部ホストCPU700は、対象のレイヤにおける演算結果として出力されるデータを、一旦バッファメモリ710に保存した後に外部メモリ720へ書き込みを行う。このように、バッファメモリ710は一例として高速に読み書きが可能であるSRAMなどで構成される。
【0154】
ニューラルネットワークハードウェア600において処理される入力データが、画像データ等の多次元のデータ構造を有する場合、各レイヤで処理するデータ量は比較的に大きくなる。さらに、CNN200には複数のレイヤが含まれるため、ニューラルネットワークハードウェア600には繰り返しデータが入力されることとなる。その結果として、繰り返し演算結果を取得するためにバッファメモリ710への読み書きが繰り返し発生する。
【0155】
演算に用いられる各データは、高速に読み書き可能なバッファメモリ710上に保持され、繰り返し使用することで効率的な演算を行うことができる。そして、実行する演算の効率を高めるためには多くのデータをバッファメモリ710上に長期間保持することが好ましい。これはバッファメモリ710の使用量の増加につながっていた。そのため従来は、CNN200に含まれるレイヤの数が増えれば増えるほど多くのバッファメモリ710の容量が必要になっていた。
【0156】
高性能なバッファメモリ710の容量の増加は最終製品のコストや電力を引き上げるため、エッジデバイスなどの限られた演算資源を有効活用するには演算の効率を高めるだけではなく、バッファメモリ使用量も抑える必要があった。
【0157】
図20は、CNN200の一例(上図)と、それが動作するエッジデバイスにおけるバッファメモリ710に対する従来のアロケーション例(下図)を示す図である。本実施形態のCNN200は7層のレイヤと1層のポスト処理を含む。
【0158】
図20におけるCNN200の入力データは画像データであり、各レイヤには
図3で示した畳み込み演算と量子化演算をそれぞれ含む。入力データは、まずレイヤL
0に入力され、各レイヤで演算が行われる。そして、最終のレイヤL
6の出力データはポスト処理Pの入力になる。ここで、ポスト処理Pは出力データである結果画像を出力するための画像処理を含む。画像処理の一例として、黒レベル調整、ゲイン調整、色調整などを含む。また、画像処理以外の処理としてバウンディングボックスの処理などを含んでもよい。ポスト処理Pについては、処理の全てをニューラルネットワークハードウェア600上で実行される必要はなく、外部ホストCPU700などの外部の複数のプロセッサ上で実行するように構成してもよい。なお、外部ホストCPU700にてポスト処理Pを実行する場合には、処理の自由度を向上させることができる。
【0159】
図20におけるCNN200の各レイヤにおける処理を実行するために、外部ホストCPU700はバッファメモリ710を介して適切なタイミングで入力データをニューラルネットワークハードウェア600などに供給する。具体的には、まずレイヤL
0での演算の開始に合わせて、外部メモリ720からレイヤL
0の演算に必要なデータD
0を読み出してバッファメモリ710に格納する。そして、レイヤL
0における演算処理の実行期間に合わせてデータD
0を供給するためにバッファメモリ710上にデータD
0を保持する。
【0160】
次に、レイヤL0での演算と並列してレイヤL1での演算が開始される。そのため、この開始に合わせて、外部メモリ720からレイヤL1の演算に必要なデータD1を読み出してバッファメモリ710に格納する。そして、レイヤL1における演算処理の実行期間に合わせてデータD1を供給するためにバッファメモリ710上にデータD1を保持する。本実施形態において、レイヤL0での演算とレイヤL1での演算は少なくとも一部が並列で行われるため、データD0をバッファメモリ710で保持する期間と、データD1を保持する期間は重複する。なお、レイヤL0の出力データはデータD0の使用済み領域に上書きされるようにしてもよいし、直接外部メモリ720へ書き出してもよい。
【0161】
図20に示すように、各レイヤ演算に合わせてバッファメモリ710上に対応するデータを読み出し、演算が終了するまで保持する動作をCNN200の全てのレイヤに対して行う。具体的には、最終レイヤL
6の後の処理であるポスト処理Pが終了するまでデータDpを保持し、ポスト処理Pの演算結果を外部メモリ720へ書き込むことでCNN200の処理は終了する。
【0162】
図20に示すCNN200の各レイヤに対応するバッファメモリ710の制御において、レイヤL
nの演算はレイヤL
n+1の演算と並列に実行するため、データD
nはレイヤL
n+2の演算が開始するタイミングまでデータD
n+1とともにバッファメモリ上に保持する必要がある。
図20において、データD
nを読み出すタイミングを点線で示し、データD
nをバッファメモリ710上に保持する期間(以下、「ライフタイム」という。)を矩形で示している。
図20に示すCNN200においては、連続するレイヤ間では並列的に演算が行われるため、データD
nのライフタイムとデータD
n+1のライフタイムは時間的に重複する。なお、各データのライフタイムは各レイヤの演算期間と対応する。
【0163】
データD
nとデータD
n+1は異なるデータであることから、バッファメモリ710の同一のメモリ領域には保持できない。そのため、それぞれレイヤに対応した専用の領域を設ける必要がある。従来のアロケーションによれば、
図20に示したように、各レイヤの演算を効率に行うことを目的として、バッファメモリ710に多くのデータを配置することになるため、CNN200に含まれるレイヤの数に依存して、必要となるバッファメモリ710のメモリ容量が増加していた。
【0164】
次に、本実施形態にかかるアロケーションについて詳細に説明する。ソフトウェア生成部325は、ソフトウェア500を生成する工程に含まれるアロケーション工程において、バッファメモリ710の必要な使用量を下げるために、時間的に重複するライフタイムに基づいてバッファメモリ上でのアロケーションを行う。
【0165】
図21は、本実施形態におけるアロケーション工程に含まれるステップを説明するためのフローチャートである。当該フローチャートの各ステップはソフトウェア生成部325が実行する。
【0166】
処理が開始されると、ソフトウェア生成部325は、ステップS21において、ネットワーク情報NWまたはNN実行モデル100などに基づいて、対象となるCNN200に関する情報を取得する。具体的には、CNN200における各レイヤを決定し、決定した各レイヤに関する演算内容・順番、入力データの種類・サイズ、入力データの入力順番などを取得する。そして、処理を次のステップへ移す。
【0167】
ソフトウェア生成部325は、ステップS22において、ステップS21にて取得したCNN200に関する情報に基づいて、CNN200における各レイヤに対するライフタイムを決定する。具体的な決定方法として、例えば、ソフトウェア生成部325は、取得した複数の情報に基づいて、各レイヤでの演算をそれぞれ一つのノードとして、CNN200に対応する有向非巡回グラフを作成する。一例として、ネットワーク分割工程において分割した一つ以上の演算を一つのノードとして有向非巡回グラフを作成する。そして、それぞれのノードに対するトポロジカルオーダーを決定する。トポロジカルオーダーは、作成した有向非巡回グラフにおいて、グラフの向きを考慮し、ノードに対して入ってくる枝がないノードを任意で1つ選んで番号を付与し、当該ノードとこれにつながっている枝を除くなどの処理を繰り返すことで決定することができる。なお、本実施形態において、ソフトウェア生成部325が取得する複数の情報は、ニューラルネットワークモデルに関する情報に相当し、ソフトウェア生成部325は当該情報を解析する解析部に相当する。
【0168】
ソフトウェア生成部325は、さらにNN実行モデル100に対応する有向非巡回グラフにおけるトポロジカルオーダーと、ステップS21にて取得したCNN200に関する情報を用いることで、各レイヤにおける処理の開始時間及びライフタイムを決定する。そして、処理を次のステップへ移す。なお、本実施形態の処理の開始時間は必要なデータをバッファメモリ710上へロードまたはニューラルネットワークハードウェア600から取得するタイミングに基づいて決定される。開始時間は絶対的なタイミングである必要ななく、ノード間の相対的な順番として規定してもよい。また、ライフタイムは処理の開始時間及び所定のデータを入力する入力タイミング(複数回入力する場合には最後に入力するタイミング)に基づいて決定される。一例として、所定のノードにおいて、G回のデータの入力が必要な場合に、データ入力に必要な単位期間をTGとすれば、ライフタイムはGxTGとしてとして決定できる。言い換えれば、ライフタイムはデータを入力するためのタイミングを少なくとも1以上含み、レイヤ間の演算順と演算に必要な期間から決定することが可能である。また、ライフタイム終了時間は開始時間とライフタイムの期間から決定することが可能である。
【0169】
ソフトウェア生成部325は、ステップS23において、ステップS22にて決定したNN実行モデル100の各レイヤに対するライフタイムに基づいて、グループの割り付けを行う。グループの割り付けの一例として、対象となる複数のライフタイムに対して、ライフタイムの期間が重複しないものをグループとしてまとめることで割り付けることができる。より詳細には、二つのライフタイムを任意に指定した場合、一方のライフタイム終了時間ともう一方のライフタイム開始時間との比較を行う。この場合、一方のライフタイム終了時間がもう一方のライフタイムの開始時間より早く到来すれば、この二つのライフタイムをグループ化する。この処理を全てのライフタイムに対して行う(ステップS24)。この結果として、複数のグループが形成され、全てのライフタイムはいずれかのグループに割り付けられることとなる。
【0170】
ここで、ライフタイムをグループに割り付ける方法の一例として、任意に指定した二つのライフタイムにおける終了時間と開始時間に着目する。一方のライフタイム終了時間がもう一方のライフタイムの開始時間より早く到来すれば、この二つのライフタイム間に枝を張ることができる。これを全てのライフタイムに対して行った結果は閉路のない有向グラフとみなせる。言い換えれば、互いに重複しないライフタイムの集合と有向グラフ上の有向パスが一対一に対応する。したがって、ライフタイムのグループ割り付けは、有向グラフ上の互いに交わらない有向パスによって, 有向グラフの全ての頂点を覆うこと(以下、パス被覆)に対応する。そして、ライフタイムのグループ数最小のグループ分けは、有向グラフの最小パス被覆から求めることができる。
【0171】
ソフトウェア生成部325は、ステップS25において、ステップS24までに割り付けにより決定した各グループの処理順番を決定する。この決定に際しては、最も開始時間が早いレイヤを含むグループから順番に処理順番を決定すること好ましいが、これに限られるものではない。例えば、割り付けられているレイヤ数やポストプロセスの有無などで決定してもよい。そして、割り付けが終了したら、本フローチャートに関する処理を終了する。なお、本実施形態の効果として得られるメモリ使用量の低減については、主にグループ数に依存するためグループの順番に対する依存は低い。そのため、グループ間の処理順番は適宜変更することが可能である。なお、一例としてグループ数はニューラルネットワーク内での分岐数Rにも依存する。具体的には、本実施形態に係るライフタイムに基づくアロケーションを行うことで、グループの最大数は分岐数Rの2倍以内に抑えることができる。
【0172】
図22は、CNN200の一例(上図)と、それが動作するエッジデバイスにおけるバッファメモリ710の使用に関する本実施形態に係るアロケーション例(下図)を示す図である。なお、説明の簡略化のため、CNN200は
図20で示したものと同じ構成を有するものとする。
【0173】
本実施形態において
図22に示すように、ソフトウェア生成部325は、アロケーション工程において、時間的に重複するライフタイムを考慮して複数のグループ(例えば、グループ1とグループ2)に割り付けを行い、その後バッファメモリ上でのアロケーションを行う。より詳細には、各ライフタイムを解析し、各ライフタイムの開始時間と終了時間とを比較してパス被覆問題の解としてグループ化する。一例としてデータD
0の終了時間はデータD
2の開始時間よりも前に到来するため、この二つは同一グループに割り付けられ、データD
0の終了時間はデータD
1の開始時間よりも前に到来しないため、この二つは異なるグループに割り付けられる。
【0174】
本実施形態においては、データD0、データD2、データD4、データD6をグループ1とし、データD1、データD3、データD5、データD7、データDpをグループ2としてグループの割り付けが行われる。
【0175】
図22に示すように、バッファメモリ710のメモリ使用量は、グループの数に依存し、
図20の従来例と比較し、大幅に低減することができる。さらに本実施形態に係るアロケーションの効果として、ライフタイムに基づくグループへの割り付けを行うことで、レイヤ数の増加に依存することなく、メモリ使用量を抑えることができる。なお、本実施形態におけるライフタイムに基づくアロケーション工程は、
図20等で示したCNN200の形態に限らず、より多くのレイヤを備える場合や、2以上の分岐を含む場合などにも適用することができる。
【0176】
複数のレイヤを有するCNN200に対する従来のアロケーション工程においては、どの様なアロケーションを行うかは、ニューラルネットワーク内で繰り返えされる演算の複雑性から、ヒューリスティックなアロケーションに依存していた。そのため、ニューラルネットワークに関する演算に対して、適切なアロケーションを行うことが難しく、バッファ使用量を設計時点で見積もることは困難であった。しかし、本発明における時間的に重複するライフタイムをノードとして最小パス被覆を算出することで、適切なアロケーションを多項式時間で実行することが可能となるだけでなく、バッファ使用量を設計時点で見積もることができる。
【0177】
なお、本実施形態においては、ソフトウェア生成部325は、分割された演算をニューラルネットワークハードウェア600に割り当てて実施させるソフトウェア500を生成するアロケーション工程において、レイヤを対象として割り付ける例を示したが、これに限るものではない。例えば、一つのレイヤを分割した分割データを対象としてもよい。
【0178】
なお、本実施形態においては、対象となるメモリを外部ホストCPU700に設けられているバッファメモリ710としたが、これ以外のメモリをアロケーション工程の対象としてもよい。例えば、外部ホストCPU700上に複数のメモリが設けられている場合や、外部ホストCPU700とニューラルネットワークハードウェア600を中継する回路にメモリが設けられている場合などにおいて当該メモリを対象としてもよい。
【0179】
以上説明したように、本実施形態に係るニューラルネットワーク生成装置300によれば、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成および制御できる。
【0180】
以上、本発明の実施形態の一例について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
【0181】
(変形例1)
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
【0182】
(変形例2)
例えば、上記実施形態に記載のNN実行モデル100に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN実行モデル100に入力されるデータは、ニューラルネットワークハードウェアモデル400が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
【0183】
(変形例3)
NN実行モデル100が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
【0184】
上述した実施形態におけるプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
【0185】
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
【産業上の利用可能性】
【0186】
本発明は、ニューラルネットワークの生成に適用することができる。
【符号の説明】
【0187】
300 ニューラルネットワーク生成装置
200 畳み込みニューラルネットワーク(CNN)
100 ニューラルネットワーク実行モデル(NN実行モデル)
400 ニューラルネットワークハードウェアモデル
500 ソフトウェア
600 ニューラルネットワークハードウェア
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ
PM 学習済みパラメータ
DS 学習データセット
HW ハードウェア情報
NW ネットワーク情報