IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

<>
  • -演算回路、演算方法、及びプログラム 図1
  • -演算回路、演算方法、及びプログラム 図2
  • -演算回路、演算方法、及びプログラム 図3
  • -演算回路、演算方法、及びプログラム 図4
  • -演算回路、演算方法、及びプログラム 図5
  • -演算回路、演算方法、及びプログラム 図6
  • -演算回路、演算方法、及びプログラム 図7
  • -演算回路、演算方法、及びプログラム 図8
  • -演算回路、演算方法、及びプログラム 図9
  • -演算回路、演算方法、及びプログラム 図10
  • -演算回路、演算方法、及びプログラム 図11
  • -演算回路、演算方法、及びプログラム 図12
  • -演算回路、演算方法、及びプログラム 図13
  • -演算回路、演算方法、及びプログラム 図14
  • -演算回路、演算方法、及びプログラム 図15
  • -演算回路、演算方法、及びプログラム 図16
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-12
(45)【発行日】2024-11-20
(54)【発明の名称】演算回路、演算方法、及びプログラム
(51)【国際特許分類】
   G06F 17/10 20060101AFI20241113BHJP
   G06N 3/063 20230101ALI20241113BHJP
   G06N 3/0464 20230101ALI20241113BHJP
【FI】
G06F17/10 A
G06N3/063
G06N3/0464
【請求項の数】 7
(21)【出願番号】P 2022567947
(86)(22)【出願日】2020-12-09
(86)【国際出願番号】 JP2020045854
(87)【国際公開番号】W WO2022123687
(87)【国際公開日】2022-06-16
【審査請求日】2023-04-03
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】110001634
【氏名又は名称】弁理士法人志賀国際特許事務所
(72)【発明者】
【氏名】大森 優也
(72)【発明者】
【氏名】中村 健
(72)【発明者】
【氏名】小林 大祐
(72)【発明者】
【氏名】新田 高庸
【審査官】田中 幸雄
(56)【参考文献】
【文献】国際公開第2019/215907(WO,A1)
【文献】米国特許出願公開第2019/0108436(US,A1)
【文献】特開2018-28908(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06N 3/063
G06N 3/0464
(57)【特許請求の範囲】
【請求項1】
複数のチャネルとして供給される入力特徴マップ情報と、複数のチャネルとして供給される係数情報と、の畳み込み演算を行う演算回路であって、
出力チャネルを基準とし、少なくとも2つの出力特徴マップのチャネルを含むセットと、
少なくとも3以上のサブ演算回路と、を備え、
前記セットごとに、少なくとも2つの前記サブ演算回路を割り当て、
前記セットに含まれる前記サブ演算回路は、前記セットに含まれる前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行し、
前記係数情報にゼロ行列が発生した場合、その畳み込み演算を行うサブ演算回路が、前記セットに含まれる前記出力特徴マップのチャネルと入力特徴マップのチャネルとから、次に供給される前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行し、
畳み込み演算された結果を、前記出力特徴マップのチャネルごとに出力する、
演算回路。
【請求項2】
前記サブ演算回路は、前記入力特徴マップ情報のチャネルごとに演算された結果得られた前記入力特徴マップのチャネルごとの畳み込み演算結果に対し、前記入力特徴マップのチャネルごとの畳み込み演算結果の和を前記出力特徴マップのチャネルごとに出力する、
請求項1に記載の演算回路。
【請求項3】
前記係数情報にゼロ行列が発生した場合、その畳み込み演算を行うサブ演算回路は、前記セットに含まれる前記出力特徴マップのチャネルと前記入力特徴マップのチャネルから次に供給される前記係数情報と前記入力特徴マップ情報の畳み込み演算の処理を実行する場合も前記係数情報にゼロ行列が発生した場合に、前記セットに含まれる前記出力特徴マップのチャネルと前記入力特徴マップのチャネルからさらに次に供給される前記係数情報と前記入力特徴マップ情報の畳み込み演算の処理を実行する、
請求項1または請求項2に記載の演算回路。
【請求項4】
前記セットごとに、チャネル数未満の前記サブ演算回路を割り当てる、
請求項1から請求項3のうちの1つに記載の演算回路。
【請求項5】
推論時に得られたカーネルデータの各値に基づいて、前記セットに対応する前記サブ演算回路の割り当てを行うことで、前記セットに割り当てるチャネルを最適化する、
請求項1から請求項4のうちの1つに記載の演算回路。
【請求項6】
出力チャネルを基準とする、少なくとも2つの出力特徴マップのチャネルを含むセットと、少なくとも3以上のサブ演算回路と、を備える演算回路に、複数のチャネルとして供給される入力特徴マップ情報と、係数情報と、の畳み込み演算を実行させる演算方法であって、
前記セットごとに、少なくとも2つの前記サブ演算回路を割り当させ、
前記セットに含まれる前記サブ演算回路に、前記セットに含まれる前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行させ、
前記係数情報にゼロ行列が発生した場合、その畳み込み演算を行うサブ演算回路に、前記セットに含まれる前記出力特徴マップのチャネルと入力特徴マップのチャネルとから、次に供給される前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行させ、
畳み込み演算された結果を、前記出力特徴マップのチャネルごとに出力させる、
演算方法。
【請求項7】
出力チャネルを基準とする、少なくとも2つの出力特徴マップのチャネルを含むセットと、少なくとも3以上のサブ演算回路と、を備える演算回路に、複数のチャネルとして供給される入力特徴マップ情報と、係数情報と、の畳み込み演算を実行させるプログラムであって、
前記プログラムは、前記演算回路に、
前記セットごとに、少なくとも2つの前記サブ演算回路を割り当させ、
前記セットに含まれる前記サブ演算回路に、前記セットに含まれる前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行させ、
前記係数情報にゼロ行列が発生した場合、その畳み込み演算を行うサブ演算回路に、前記セットに含まれる前記出力特徴マップのチャネルと入力特徴マップのチャネルとから、次に供給される前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算回路、演算方法、及びプログラムの技術に関する。
【背景技術】
【0002】
学習済みのCNN(Convolutional Neural Network)を用いて推論を行う場合、またはCNNを学習する場合は、畳み込み層で畳み込み処理を行うが、この畳み込み処理は積和演算処理を繰り返し行うことと等しい。CNN推論においては、上記の積和演算(以下、「MAC演算」ともいう)が全体処理量の大部分を占める。ハードウェアとしてCNN推論エンジンを実装する場合においても、MAC演算回路の演算効率・実装効率が、ハードウェア全体に大きな影響を与える。
【0003】
畳み込み層では、前層の結果の特徴マップデータである入力特徴マップデータiFmapに対し、重み係数であるKernelを畳み込み処理することで、出力特徴マップデータoFmapを得る。入力特徴マップデータiFmap、出力特徴マップデータoFmapは、それぞれ複数チャネルからなりたつ。それぞれiCH_num(入力チャネル数)、oCH_num(出力チャネル数)とする。チャネル間でKernelの畳み込みを行うため、Kernelは(iCH_num×oCH_num)相当のチャネル数をもつ。
図13は、畳み込み層のイメージ図である。図13の例では、iCH_num=2の入力特徴マップiFmapから、oCH_num=3の出力特徴マップデータoFmapを生成する畳み込み層を示している。
【0004】
このような畳み込み層の処理をハードウェアとして実装する場合は、並列化によりスループットを向上させるために、oCH_num並列のMAC演算器を用意して、同一の入力チャネル番号に対するカーネルMAC処理を並列で行い、この処理をiCH_num回繰り返すような並列手法が用いられることが多い。
【0005】
図14は、MAC演算回路例と処理の流れの一例を示す図である。図14の構成では、例えばiCH_num=5の入力特徴マップデータiFmapから、oCH_num=4の出力特徴マップデータoFmapを生成する畳み込み層である。この場合は、例えば、MAC演算器910は4並列用意し、MAC演算器910を5回動かす。また、各MAC演算器910には、それぞれ出力特徴マップデータoFmapの演算結果一時格納用のメモリ920が必要である。メモリ920は、oCHm(mは0から3の整数)用の4個のメモリ921~924が必要である。図14のように、(n+1)回目(nは0から4の整数)の処理では、入力特徴マップデータiFmapとしてはiCHnのiFmapデータが4つのMAC演算器911~914に供給される。重み係数データKernelとしては、iCHn&oCH0のカーネルデータがMAC演算器911に供給され、iCHn&oCH1のカーネルデータがMAC演算器912に供給され、iCHn&oCH2のカーネルデータがMAC演算器913に供給され、iCHn&oCH3のカーネルデータがMAC演算器914に供給される。なお、各層の最初時には、各メモリ内のデータは0に初期化されている。なお,入力チャネル番号がnかつ出力チャネル番号がmとなる、ある1チャネルのカーネルデータを、「iCHn&oCHmのカーネルデータ」と表す。
【0006】
iCH0の畳み込み演算が行われる1回目の処理では、MAC演算器911は、iCH0*oCH0の畳み込み積算を行い、メモリ921に演算結果を加算して格納される。MAC演算器912は、iCH0*oCH1の畳み込み積算を行い、メモリ922に演算結果を加算して格納する。MAC演算器913は、iCH0*oCH2の畳み込み積算を行い、メモリ923に演算結果を加算して格納する。MAC演算器914は、iCH0*oCH3の畳み込み積算を行い、メモリ924に演算結果を加算して格納される。なお、入力チャネル番号がn(iCHn)の入力チャネルに対し入力チャネル番号がnかつ出力チャネル番号がm(iCHn&oCHm)のカーネルデータの畳み込み演算を行うことで出力チャネル番号がm(oCHm)の出力チャネルを得ることを、「iCHn*oCHm」と表す。
【0007】
続いて、2回目の処理では、iCH1の入力特徴マップデータiFmapがMAC演算器911~914に供給され、各MAC演算器によるKernelの積和演算処理が行われる。演算結果は、メモリ921~924にiCH0とiCH1の畳み込み結果が加算されて格納される。すなわち、iCH1の畳み込み演算が行われる2回目の処理では、メモリ921にiCH0*oCH0+iCH1*oCH0の積和演算結果が格納され、メモリ922にiCH0*oCH1+iCH1*oCH1の積和演算結果が格納され、メモリ923にiCH0*oCH2+iCH1*oCH2の積和演算結果が格納され、メモリ924にiCH0*oCH3+iCH1*oCH3の積和演算結果が格納される。
【0008】
5回目の処理では、iCH4の入力特徴マップデータiFmapがMAC演算器911~914に供給され、各MAC演算器によるKernelの積和演算処理が行われる。演算結果は、メモリ921~924にiCH0からiCH4までの畳み込み結果が加算されて格納される。このような処理では、この最終的な演算結果が出力特徴マップデータoFmapとなるため、メモリ920のデータを本畳み込み層のoFmap結果として確定する。なお、次の層が再度畳み込み層の場合は、上記出力特徴マップデータoFmapを次層の入力特徴マップデータiFmapとして同様の処理を進める。図14のような構成では、共通の入力特徴マップデータiFmapについて同時に積和演算を行うことができ、並列化によるスループット向上が容易である。また、図14のような構成では、演算器とメモリが1対1対であり、各iCHでの演算結果を演算部付随のメモリデータに加算していくだけで最終的な畳み込み結果を得られるため、回路構成が簡素である。
【先行技術文献】
【非特許文献】
【0009】
【文献】Norman P. Jouppi, Cliff Young等,” In-Datacenter Performance Analysis of a Tensor Processing Unit TM”, the 44th International Symposium on Computer Architecture (ISCA),2017
【発明の概要】
【発明が解決しようとする課題】
【0010】
一方で、入力特徴マップデータiFmapやKernelの入力データは、一部が0となるような場合も少なからずある。そのような場合、積和演算は(0を掛ける処理なので)不要となる。特にカーネルデータは、一般に各チャネルが3×3・1×1等のFmapよりも小さいサイズであるため、チャネルのカーネルデータが丸ごと0(ゼロ行列)となるチャネルとなる場合がある。
【0011】
図15は、スパース性のあるカーネルデータを示す図である。図15において、ハッチングされている四角951は0ではないカーネルデータを表し、ハッチングされていない四角952はスパースであるKernelデータを表す。図15では、Kernelデータ20チャネル中の8チャネルがゼロ行列のスパースである。演算処理では、i,ii,iii,iv,vの順番でKernelデータが使用される。また、MAC演算器911がoCH0のカーネルデータ961の処理に割り当てられ、MAC演算器912がoCH1のカーネルデータ962の処理に割り当てられ、MAC演算器913がoCH2のカーネルデータ963の処理に割り当てられ、MAC演算器914がoCH4のカーネルデータ964の処理に割り当てられる。
【0012】
図16は、スパース性のあるカーネルデータが供給される場合の処理の流れの例を示す図である。
iCH0の畳み込み演算が行われる1回目の処理では、iCH0&oCH1のカーネルデータと、iCH0&oCH2のカーネルデータがゼロ行列であるため、メモリ922とメモリ923に格納されるデータに0が加算されるだけである。このため、MAC演算器912とMAC演算器913は、演算不要である。しかしながら、MAC演算器911とMAC演算器914の計算を省略できないため、図14等に示した従来技術によるハードウェア構成では、これらの演算が終わるのをMAC演算器912とMAC演算器913は待たないといけないので、MAC演算器912とMAC演算器913が無駄になっている。
このように入力データに、このようにスパース性がある場合、従来技術では、十分な演算高速化が期待できないという問題があった。
【0013】
上記事情に鑑み、本発明は、ニューラルネットワークの畳み込み層における積和演算処理において、重み係数の一部がゼロ行列であるような場合に、ハードウェア規模の増大を抑えながら効率的な演算高速化を可能とすることができる技術の提供を目的としている。
【課題を解決するための手段】
【0014】
本発明の一態様は、複数のチャネルとして供給される入力特徴マップ情報と、複数のチャネルとして供給される係数情報と、の畳み込み演算を行う演算回路であって、出力チャネルを基準とし、少なくとも2つの前記出力特徴マップのチャネルを含むセットと、少なくとも3以上のサブ演算回路と、を備え、前記セットごとに、少なくとも2つの前記サブ演算回路を割り当て、前記セットに含まれる前記サブ演算回路は、前記セットに含まれる前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行し、前記出力特徴マップの特定チャネルがゼロ行列となる場合、その畳み込み演算を行うサブ演算回路が、前記セットに含まれる前記出力特徴マップのチャネルと入力特徴マップのチャネルとから、次に供給される前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行し、畳み込み演算された結果を、前記出力特徴マップのチャネルごとに出力する、演算回路である。
【0015】
本発明の一態様は、出力チャネルを基準とする、少なくとも2つの出力特徴マップのチャネルを含むセットと、少なくとも3以上のサブ演算回路と、を備える演算回路に、複数のチャネルとして供給される入力特徴マップ情報と、係数情報と、の畳み込み演算を実行させる演算方法であって、前記セットごとに、少なくとも2つの前記サブ演算回路を割り当させ、前記セットに含まれる前記サブ演算回路に、前記セットに含まれる前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行させ、前記出力特徴マップの特定チャネルがゼロ行列となる場合、その畳み込み演算を行うサブ演算回路に、前記セットに含まれる前記出力特徴マップのチャネルと入力特徴マップのチャネルとから、次に供給される前記係数情報と前記入力特徴マップ情報との畳み込み演算の処理を実行させ、畳み込み演算された結果を、前記出力特徴マップのチャネルごとに出力させる、演算方法である。
【0016】
本発明の一態様は、上述のうち1つに記載の演算回路をコンピュータに実現させる、プログラムである。
【発明の効果】
【0017】
本発明により、ニューラルネットワークの畳み込み層における積和演算処理において、重み係数の一部がゼロ行列であるような場合に、ハードウェア規模の増大を抑えながら効率的な演算高速化を可能とすることが可能となる。
【図面の簡単な説明】
【0018】
図1】実施形態の演算回路を示す図である。
図2】カーネルデータの20チャネル中に8チャネルがスパースな行列となる場合の例を示す図である。
図3】実施形態におけるMAC演算器の割り当て例を示す図である。
図4】実施形態に係るカーネルデータで用いる処理順番例を示す図である。
図5】実施形態に係るカーネルデータにスパースが発生した場合の1回目の処理例を示す図である。
図6】実施形態に係るカーネルデータにスパースが発生した場合の2回目の処理例を示す図である。
図7】実施形態に係るカーネルデータにスパースが発生した場合の3回目の処理例を示す図である。
図8】実施形態に係るMAC演算器の割り当てと構成例を示す図である。
図9】k=1の場合のカーネルデータのセットに対するMAC演算器の割り振りを示す図である。
図10】k=4の場合のカーネルデータのセットに対するMAC演算器の割り振りを示す図である。
図11】実施形態に係る演算回路の処理手順例のフローチャートである。
図12】変形例におけるカーネルデータのセットに対するMAC演算器の割り振りの最適化手順のフローチャートである。
図13】畳み込み層のイメージ図である。
図14】MAC演算回路例と処理の流れの一例を示す図である。
図15】スパース性のあるカーネルデータを示す図である。
図16】スパース性のあるカーネルデータが供給される場合の処理の流れの例を示す図である。
【発明を実施するための形態】
【0019】
本発明の実施形態について、図面を参照して詳細に説明する。なお、本実施形態の手法は、例えば、学習済みのCNNを用いて推論を行う場合、またはCNNを学習する場合等に適用可能である。
【0020】
<演算回路の構成例>
図1は、本実施形態の演算回路を示す図である。図1のように、演算回路1は、サブ演算回路10と、演算結果一時格納用のメモリ20とを備える。
サブ演算回路10は、MAC演算器macA(サブ演算回路)と、MAC演算器macB(サブ演算回路)と、MAC演算器macC(サブ演算回路)と、MAC演算器macD(サブ演算回路)とを備える。
メモリ20は、oCH0用メモリ21と、oCH1用メモリ22と、oCH2用メモリ23と、oCH3用メモリ24とを備える。
【0021】
演算回路1は、CNNの畳み込み層における演算回路である。演算回路1は、重さ係数であるカーネルデータ(係数情報)を、いくつかの出力チャネルを含む複数セットに分けておく。なお、演算回路1は、2つ以上のセットに属するチャネルが存在しないようにセットを分けておく。そして、演算回路1は、それぞれのセットにセット内チャネル数分のMAC演算器を割り当てる。また、MAC演算器には、入力特徴マップデータiFmapと、重み係数データ(カーネルデータ)kernelとが供給される。
【0022】
なお、図1では、4つのMAC演算器と4つのメモリを備える例を示したが、演算回路1は、3つ以上のMAC演算器と3つ以上のメモリを備えていればよく、5つ以上のMAC演算器と5つ以上のメモリを備えていてもよい。なお、MAC演算器の個数とメモリの個数は、一致している。
【0023】
なお、演算回路1は、CPU(Central Processing Unit)等のプロセッサーとメモリ、または演算回路とメモリとを用いて構成される。演算回路1は、例えば、プロセッサーがプログラムを実行することによって、MAC演算器として機能する。なお、演算回路1の各機能の全て又は一部は、ASIC(Application Specific Integrated Circuit)やPLD(Programmable Logic Device)やFPGA(Field Programmable Gate Array)等のハードウェアを用いて実現されても良い。上記のプログラムは、コンピュータ読み取り可能な記録媒体に記録されても良い。コンピュータ読み取り可能な記録媒体とは、例えばフレキシブルディスク、光磁気ディスク、ROM、CD-ROM、半導体記憶装置(例えばSSD:Solid State Drive)等の可搬媒体、コンピュータシステムに内蔵されるハードディスクや半導体記憶装置等の記憶装置である。上記のプログラムは、電気通信回線を介して送信されてもよい。
【0024】
<スパース性を有する入力データ例>
次に、カーネルデータにスパースが有る場合を、図2図3図15を用いて説明する。
図2は、カーネルデータの20チャネル中に8チャネルがスパースな行列となる場合の例を示す図である。図2において、ハッチングされている四角101はスパース行列ではないカーネルデータを表し、ハッチングされていない四角102はスパース行列であるカーネルデータを表す。なお、実施形態において、スパースなカーネルデータのチャネルとは、ゼロ行列となるチャネルに加え、データの大半がゼロで意味のあるものは少数に限られるような行列となるチャネルも含むようにしてもよい。スパースなカーネルデータは、iCH0&oCH1、iCH0&oCH2、iCH1&oCH1、iCH2&oCH2、iCH3&oCH1、iCH3&oCH2、iCH3&oCH3、およびiCH4&oCH1である。
【0025】
従来の並列処理時としては、図15のようにi,ii,iii,iv,vの順番でカーネルデータが使用されていた。また、従来は、図15のように各MAC演算器がoCHmのカーネルデータの処理に割り当てられていた。
【0026】
これに対して、本実施形態では、複数のoCHmを1セットとしてまとめ、1セットに複数のMAC演算器を割り当てる。図3は、本実施形態におけるMAC演算器の割り当て例を示す図である。図3の例では、2つのoCHmを1セットとした例である。第1のセット201(セット0)は、oCH0とoCH1のセットである。第2のセット202(セット1)は、oCH2とoCH3のセットである。なお、演算装置1は、カーネルデータに含まれる出力のチャネルを基準とする、少なくとも2つの出力特徴マップのチャネルを含むセットとする。
このように本実施形態のセットは、入力特徴マップデータにおける入力特徴マップのチャネルと出力特徴マップのチャネルとを基準に構成されている。
【0027】
さらに、本実施形態では、従来のようにiCH0、iCH1、・・・のような固定された処理順番では無く、カーネルデータのスパースに応じて同一セット内で適応的に積和演算処理を行っていくことで、処理の高速化を実現する。
【0028】
<カーネルデータの処理順番>
次に、カーネルデータで用いる処理順番例を説明する。
図4は、本実施形態に係るカーネルデータで用いる処理順番例を示す図である。
演算回路1は、カーネルデータの第1のセット201(セット0)において、カーネルデータiCH0&oCH0、iCH0&oCH1、iCH1&oCH0、iCH1&oCH1、iCH2&oCH0、iCH2&oCH1、iCH3&oCH0、iCH3&oCH1、iCH4&oCH0、iCH4&oCH1の順番で使用する。
【0029】
演算回路1は、カーネルデータの第2のセット202(セット1)において、カーネルデータiCH0&oCH2、iCH0&oCH3、iCH1&oCH2、iCH1&oCH3、iCH2&oCH2、iCH2&oCH3、iCH3&oCH2、iCH3&oCH3、iCH4&oCH2、iCH4&oCH3の順番で使用する。
【0030】
(1回目の処理)
次に、カーネルデータにスパースが発生した場合の1回目の処理例を、図4図5を用いて説明する。
図5は、本実施形態に係るカーネルデータにスパースが発生した場合の1回目の処理例を示す図である。なお、カーネルデータの第1のセット201(図3)の処理には、第1のペア11のMAC演算器macAと、MAC演算器macBと割り当てられる。カーネルデータの第2のセット202(図3)の処理には、第1のペア12のMAC演算器macCとMAC演算器macDとが割り当てられる。また、MAC演算器macA~MAC演算器macDそれぞれには、入力特徴マップデータiFmapからデータ(iCH0とiCH1)が供給される。
【0031】
演算回路1は、カーネルデータの各セット内でスパース行列となるカーネルデータのチャネルが存在する場合、当該セット内の次のカーネルデータと特徴マップの畳み込み演算を、当該スパース行列となるカーネルデータが割り当てられるはずだったMAC演算器を用いて演算を行う。
なお、図5において、MAC演算器からoCHmへの鎖線の矢印は、カーネルデータを飛ばしたためメモリへの加算を行わないことを表している。
【0032】
第1のセット201では、カーネルデータiCH0&oCH1がゼロ行列であるため、演算不要である。このため、演算回路1は、1回目の処理において、カーネルデータiCH0&oCH0に対しては演算を行うが、カーネルデータiCH0&oCH1を飛ばして第1のセット201内で1つ先のカーネルデータiCH1&oCH0に対して演算を行う。
【0033】
これにより、図5のように、MAC演算器macAは、iCH0*oCH0の畳み込み積算結果をoCH0用メモリ21に加算して格納する。MAC演算器macBは、iCH1*oCH0の畳み込み積算結果をoCH0用メモリ21に加算して格納する。
【0034】
この結果、oCH0用メモリ21には、iCH0*oCH0+iCH1*oCH0の演算結果が格納される。oCH1用メモリ22には、演算結果が加算されず初期値0のままである。
【0035】
第2のセット202では、カーネルデータiCH0&oCH2がゼロ行列であるため、演算不要である。このため、演算回路1は、カーネルデータiCH0&oCH2を第2のセット202内で飛ばして、1つ先(1チャネル分スキップ)のカーネルデータiCH0&oCH3の演算と、さらに1つ先のカーネルデータiCH1&oCH2の、畳み込み演算を行う。
【0036】
これにより、図5のように、MAC演算器macCは、iCH0*oCH3の畳み込み積算結果をoCH3用メモリ24に加算して格納する。MAC演算器macDは、iCH1*oCH2の畳み込み積算結果をoCH2用メモリ23に加算して格納する。
【0037】
この結果、oCH2用メモリ23には、iCH1*oCH2の演算結果が格納される。oCH3用メモリ24には、iCH0*oCH3の演算結果が格納される。
【0038】
(2回目の処理)
次に、カーネルデータにスパースが発生した場合の2回目の処理例を、図4図6を用いて説明する。
図6は、本実施形態に係るカーネルデータにスパースが発生した場合の2回目の処理例を示す図である。
【0039】
2回目の処理において、第1のセット201では、カーネルデータiCH1&oCH1がゼロ行列である。このため、演算回路1は、カーネルデータiCH1&oCH1を第1のセット201内で飛ばして1つ先のカーネルデータiCH2&oCH0に対して演算を行い、カーネルデータiCH2&oCH1に対して演算を行う。
【0040】
これにより、図6のように、MAC演算器macAは、iCH2*oCH0の畳み込み積算結果をoCH0用メモリ21に加算して格納する。MAC演算器macBは、iCH2*oCH1の畳み込み積算結果をoCH0用メモリ21に加算して格納する。
【0041】
この結果、oCH0用メモリ21には、iCH0*oCH0+iCH1*oCH0+iCH2*oCH0の演算結果が格納される。oCH1用メモリ22には、iCH2*oCH1の演算結果が格納される。
【0042】
図6のように、MAC演算器macCは、iCH1*oCH3の畳み込み積算結果をoCH3用メモリ24に加算して格納する。
また、第2のセット202では、カーネルデータiCH2&oCH2がゼロ行列である。このため、演算回路1は、カーネルデータiCH1&oCH3に対して演算を行い、カーネルデータiCH2&oCH2を第2のセット202内で飛ばして1つ先のカーネルデータiCH2&oCH3に対して演算を行う。MAC演算器macDは、iCH2*oCH3の畳み込み積算結果をoCH3用メモリ24に加算して格納する。
【0043】
この結果、oCH2用メモリ23の格納される演算結果には、新たな加算はされず,iCH1*oCH2の演算結果が格納されたままとなる。oCH3用メモリ24には、iCH0*oCH3+iCH1*oCH3+iCH2*oCH3の演算結果が格納される。
【0044】
(3回目の処理)
次に、カーネルデータにスパースが発生した場合の3回目の処理例を、図4図7を用いて説明する。
図7は、本実施形態に係るカーネルデータにスパースが発生した場合の3回目の処理例を示す図である。
【0045】
3回目の処理において、第1のセット201では、カーネルデータiCH3&oCH1がゼロ行列である。このため、演算回路1は、カーネルデータiCH3&oCH0に対して演算を行い、カーネルデータiCH3&oCH1を第1のセット201内で飛ばして1つ先のカーネルデータiCH4&oCH0に対して演算を行う。
【0046】
これにより、図6のように、MAC演算器macAは、iCH3*oCH0の畳み込み積算結果をoCH0用メモリ21に加算して格納する。MAC演算器macBは、iCH4*oCH0の畳み込み積算結果をoCH0用メモリ21に加算して格納する。
【0047】
この結果、oCH0用メモリ21には、iCH0*oCH0+iCH1*oCH0+iCH2*oCH0+iCH2*oCH0+iCH4*oCH0の演算結果が格納される。oCH1用メモリ22に格納される演算結果には、新たな加算がされず、iCH2*oCH1の結果が格納されている。なお、図6のように、第1のセット201では、カーネルデータiCH4&oCH1がゼロ行列であるため、第1のセット201の処理は、上記3回で終了する。
【0048】
図6のように、第2のセット202では、カーネルデータiCH3&oCH2とカーネルデータiCH3&oCH3とがゼロ行列である。
このため、演算回路1は、カーネルデータiCH2&oCH2を第2のセット202内で飛ばして2つ先(2チャネル分スキップ)のカーネルデータiCH4&oCH2に対して演算を行い、カーネルデータiCH4&oCH3に対して演算を行う。MAC演算器macCは、iCH4*oCH2の畳み込み積算結果をoCH2用メモリ23に加算して格納する。MAC演算器macDは、iCH4*oCH3の畳み込み積算結果をoCH3用メモリ24に加算して格納する。
【0049】
この結果、oCH2用メモリ23には、iCH1*oCH2+iCH4*oCH2の演算結果が格納される。oCH3用メモリ24には、iCH0*oCH3+iCH1*oCH3+iCH2*oCH3+iCH4*oCH3の演算結果が格納される。第2のセット202の処理は、上記3回で終了する。
【0050】
このように、本実施形態では、各oCHにおけるiCH0からiCH4までの畳み込み演算結果が、各メモリに格納される。演算回路1は、メモリに格納される演算結果が最終的な演算結果、すなわち出力特徴マップデータoFmapとなるため、メモリのデータを畳み込み層結果とする。
【0051】
しかしながら、従来の手法では、5回の処理が必要であった。これに対して、本実施形態によれば3回の処理で済むため、例では処理時間を40%削減でき大きな演算高速化が達成することができる。
【0052】
なお、本実施形態では、MAC演算器に複数の入力チャネルの入力特徴マップデータiFmapデータを供給する必要があるため、入力データのバス幅は従来より大きくなるが、バス幅を従来のn倍にすればnチャネルにまたがる入力特徴マップデータiFmapを供給できる。また、本実施形態では、nを十分大きくすることで、入力特徴マップデータiFmapデータ供給力の不足でスキップができないという状況を抑えることができる。しかし十分大きくした場合は、バス幅拡大による回路規模増大などがネックとなるため、例えば以下のような制限を加えるようにしてもよい。
【0053】
・制限1.n=2として2チャネルまで入力特徴マップデータiFmapデータを供給できる。
・制限2.(n+1)チャネル以上の入力特徴マップデータiFmapが必要となるようなスキップ処理はしないで待つ。
【0054】
図4から図7までの例であれば、n=2以上あればスキップ処理が制限されることは全く、n+1=3チャネルの入力特徴マップデータの同時供給が必要となることはない。また、n=2,3程度でも、あまりスキップ処理が制限されない場合も多いと考えられる。
【0055】
<カーネルデータのセットに対するMAC演算器の割り振り>
次に、カーネルデータのセットに対するMAC演算器の割り振りを説明する。図8は、本実施形態に係るk=2の場合のカーネルデータのセットに対するMAC演算器の割り振りを示す図である。1セット内のoCHの個数をkとする。
【0056】
例えば図8のように、oCH0とoCH1を1セットとしてMAC演算器macAとMAC演算器macBの2回路を割り当てる場合、MAC演算器macAが行う演算結果は、oCH0のmac演算結果なのか、oCH1の積和演算結果なのかが処理毎に変わる。このため、メモリとMAC演算器とが1対1対応ではなく、図8のように1つのMAC演算器から2つのメモリへの配線が必要となる。メモリから見れば、例えば、2つのMAC演算器からどちらを選ぶかのセレクタ回路と配線が必要となる。
【0057】
(kが小さい場合)
kが小さい場合は、図9のように、例えばk=1の最小の場合、各セット13~16に1つのoCHnが割り当てられるので、セット数とoCH_numとが等しい。図9は、k=1の場合のMAC演算器とメモリとの対応例を示す図である。なお、図9の例において、カーネルデータは、図5であり、ゼロ行列がある。そして、この例でも、ゼロ行列の場合は、スキップして先のカーネルデータを処理する。
【0058】
このため、MAC演算器macAはiCH0*oCH0の畳み込み演算を行って演算結果を加算してoCH0用メモリ21に格納し、MAC演算器macBは0+iCH2*oCH1の畳み込み演算を行って演算結果を加算してoCH1用メモリ22に格納する。MAC演算器macCは0+iCH1*oCH2の畳み込み演算を行って演算結果を加算してoCH2用メモリ23に格納し、MAC演算器macDはiCH0*oCH3の畳み込み演算を行って演算結果を加算してoCH3用メモリ24に格納する。
【0059】
k=1の場合は、例えばoCH1は5つ中4つスパースだが、oCH0は全くスパースがない。このため、oCH1担当のMAC演算器macBは、4回のスキップがあるため1回の処理で演算が終了されるが、oCH0担当のMac演算器macAは全くスキップできず5回の処理が必要である。このように、k=1の場合は、該当出力チャネルにおける1つ先の入力チャネルの積和演算を行うと、特定の出力チャネルだけMAC演算器が先に進んでしまうことが多い。このため、図5図9の例におけるk=1の場合は、この畳み込み層の処理としては、結局、MAC演算器macAの演算終了まで待つこととなり、結果として5回の処理において全く高速化できない。
【0060】
なお、カーネルデータは、出力チャネルによるスパース性の偏りが大きい傾向にある。すなわち、ある出力チャネルのカーネルデータはスパースばかりになるが、別の出力チャネルのカーネルデータはほぼスパースがない、というような状況が比較的多い。
このため、k=1のようにkが小さすぎる場合は、スパースが少ないセットの演算終了まで待つ必要があり十分な高速化が期待できない場合がある。従って、kは2以上が好ましい。
【0061】
(kが大きい場合)
kが大きい場合、例えばk=oCH_numの最大でありk=4の場合は、図10のように、セット17の数は1つであり、1つのセットに全oCHが割り当たることとなる。図10は、k=4の場合のカーネルデータのセットに対するMAC演算器の割り振りを示す図である。
【0062】
K=oCH_numの場合は、カーネルデータでスパースとなると、任意の出力チャネルでMACを繰り上げ可能となる、この場合は、最大限カーネルデータを詰めてMAC演算器に配置できるため、高速化の観点では最大化が可能である.
【0063】
一方、MAC演算器が全てのoCHの演算をする可能性があるため、MAC演算器とメモリとの対応関係は、全結合状態の配線が必要である。図9の例では、MAC演算器側メモリ側とで4×4の全結合状態の配線が必要である。
この配線により、oCH0用メモリ21~oCH3用24側には、oCH_num個のMAC演算器のどの演算結果を受け取るべきかを毎回決定するためのoCH_num個選択のセレクタ回路が必要となる。昨今のCNNの畳み込み層では、oCH_numの数が数十~数百となる場合が多いため、oCH_num個の全結合状態の配線・セレクタ回路を実装するのは、回路面積や消費電力としてハードウェア上のネックがある。このため、kの値は、大きすぎないことが望ましい。
【0064】
このため、本実施形態では、kの値を、例えば2以上、最大値未満に設定しておく。
【0065】
<処理手順例>
次に、処理手順例を説明する。
図11は、本実施形態に係る演算回路の処理手順例のフローチャートである。
【0066】
演算回路1は、各セットそれぞれの出力チャネルの組を事前決定しておくことでMAC演算器の割り当てを行う。なお、演算回路1は、セットごとに、少なくとも2つのMAC演算器(サブ演算回路)を割り当てる(ステップS1)。
【0067】
演算回路1は、各メモリの値を0に初期化する(ステップS2)。
【0068】
演算回路1は、カーネルデータから演算に用いるデータを選択する(ステップS3)。
【0069】
演算回路1は、選択したカーネルデータがゼロ行列であるか否かを判別する(ステップS4)。演算回路1は、選択したカーネルデータがゼロ行列であると判別した場合(ステップS4;YES)、ステップS5の処理に進める。演算回路1は、選択したカーネルデータがゼロ行列ではないと判別した場合(ステップS4;NO)、ステップS6の処理に進める。
【0070】
演算回路1は、選択したカーネルデータをスキップして1つ先のカーネルデータを再選択する。なお、演算回路1は、再選択したカーネルデータに対してもゼロ行列であるか否かを判別し、再選択したカーネルデータもゼロ行列の場合、再度スキップして1つ先のカーネルデータを再選択する(ステップS5)。
【0071】
演算回路1は、スキップの有無とスキップ回数に基づいて、MAC演算器が演算した演算結果を格納するメモリを決定する(ステップS6)。
【0072】
MAC演算器それぞれは、カーネルデータを用いて畳み込み積算を行う(ステップS7)。
【0073】
MAC演算器それぞれは、演算結果を加算してメモリに格納する(ステップS8)。
【0074】
演算回路1は、全てのカーネルデータの演算を終了したか否かを判別する(ステップS9)。演算回路1は、全てのカーネルデータの演算を終了したと判別した場合(ステップS9;YES)、処理を終了する。演算回路1は、全てのカーネルデータの演算を終了していないと判別した場合(ステップS9;NO)、ステップS3の処理に戻す。
【0075】
なお、図11を用いて説明した処理手順は一例であり、これに限らない。例えば、演算回路1は、スキップの有無とスキップ回数に基づいてMAC演算器が演算した演算結果を格納するメモリを決定する手順を、カーネルデータの選択時や再選択時に行うようにしてもよい。また,カーネルデータは、学習によって得られるものであり、推論処理の実行時には事前に判明しているものである。このため、処理では、スキップの有無やメモリ決定手順を、推論処理前に事前決定しておくことも可能である。
【0076】
なお、上述した実施例では、CNNの畳み込み層におけるMAC演算処理の例を説明したが、本実施形態の手法は他のネットワークに適用することも可能である。
【0077】
以上のように、本実施形態では、複数のoCH(重み係数)を1つのセットとして、セットごとに複数のMAC演算器を割り当てるようにした。
これにより、本実施形態によれば、CNNに代表される畳み込みニューラルネットワークがもつ畳み込み処理をハードウェアに実装する際に起こりうる回路における待ちを解消することができるので、演算の高速化を行うことができる。
【0078】
<変形例>
上述したように、カーネルデータのセットに対するMAC演算器の割り振り、すなわちチャネルの割り当てにおいて、kが小さすぎると効率的に演算速度を高速化できず、kが大きすぎると回路面積の増大が無視できないものとなる。Kの値は、演算器とメモリ間の配線などのハードウェア構成にかかわるものであるため、ハードウェア設計時に決定されるものであって,推論処理時には変更は不可能である。一方で、各セットに出力チャネルを割り当てるかは、ハードウェア構成にかかわるものではなく、推論処理時に任意に変更可能となるものである。
このため、演算回路1は、推論時に得られたカーネルデータの各値に基づいて、各セットそれぞれの出力チャネルの組を事前決定しておくことで、ハードウェア設計時に決定されたkに対して最大限の推論処理高速化が可能となるようにMAC演算器の割り当てを最適化するようにしてもよい。
【0079】
図12は、変形例におけるカーネルデータのセットに対するMAC演算器の割り振りの最適化手順のフローチャートである。
【0080】
演算回路1は、推論時に得られたカーネルデータの各値を確認する(ステップS101)。
【0081】
演算回路1は、カーネルデータの組数を決定し、カーネルデータとMAC演算器の割り当てを行う。演算回路1は、例えばカーネルデータに含まれるゼロ行列の個数、分布等に基づいて各セット内に含まれる出力チャネルの組を決定し、カーネルデータの組とMAC演算器の割り当てを行うようにしてもよい。または、演算回路1は、カーネルデータをゼロスキップしながら処理を進めた場合に、各セット内のMAC演算器の演算回数に偏りが少ないように各セットに含まれる出力チャネルの組を決定し、実際の畳み込み演算は行う前にカーネルデータとMAC演算器の割り当てを行うようにしてもよい(ステップS102)。
【0082】
演算回路1は、各セット内に含まれる出力チャネルの組を決定し、カーネルデータとMAC演算器の割り当てが最適化出来たか否かを判別する。演算回路1は、例えば、MAC演算器の演算回数の差が所定値以内であれば最適化出来たと判別する(S103)。演算回路1は、最適化できた場合(ステップS103;YES)、処理を終了する。演算回路1は、最適化できていない場合(ステップS103;NO)、ステップS102の処理に戻す。
【0083】
なお、図12を用いて説明した最適化手順後に、演算回路1は、図11の演算処理を行う。また、図12を用いて説明した最適化処理の手順や方法は一例であり、これに限らない。
【0084】
以上のように、変形例では、カーネルデータとMAC演算器の割り当ての最適化、すなわちセットに割り当てるチャネルを最適化するようにした。
【0085】
これにより、変形例によれば、さらなる演算の高速化を行うことができる。
【0086】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【産業上の利用可能性】
【0087】
本発明は、各種の推論処理装置に適用可能である。
【符号の説明】
【0088】
1…演算回路、10…サブ演算回路、20…メモリ、macA,macB,macC,macD…MAC演算器、21…oCH0用メモリ21、22…oCH1用メモリ、23…oCH2用メモリ、24…oCH3用メモリ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16