(58)【調査した分野】(Int.Cl.,DB名)
それぞれが畳み込み層における出力チャネルの1チャネルの畳み込み演算を行い出力チャネル数よりも少ない数の複数の演算器が1チャネル分の畳み込み演算を行っているときに、前記複数の演算器が使用している重みデータが格納されている記憶手段とは異なる記憶手段に、前記複数の演算器が次に実行する畳み込み演算で使用する重みデータを転送する畳み込み演算処理方法であって、
前記複数の演算器が出力チャネルの1チャネル分の畳み込み演算を行っているときに使用している重みデータを記憶している前記記憶手段の参照回数を計数し、計数値が出力チャネルの1チャネル分の畳み込み演算の総参照回数である[入力チャネル数×特徴量データサイズ÷前記演算部の数]に達したら、前記複数の演算器が使用する重みデータの読み出し先の前記記憶手段を切り替える
ことを特徴とする畳み込み演算処理方法。
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、特許文献1に記載されているように、演算器が参照するデータの入力がボトルネックになり、並列演算の性能が活用されないという課題がある。
【0006】
特に、CNNでは、各畳み込み層での演算が完了する度に、フィルタ係数である重みデータが変更される。重みデータの更新に時間がかかると、演算処理が中断される時間が長くなる。また、処理がCNNにおける深い層(出力層に近い層)に進むほど、特徴量データの量に対して、相対的に、重みデータの量の割合が高くなる。その結果、演算器の稼働率はさらに低下する。
【0007】
また、例えば、演算器における演算に必要な特徴量データと重みデータとを揃えて、直接、メモリから演算器に入力するように構成された場合には、冗長に同じ特徴量データと重みデータとが演算器に転送されことがある。そのような場合には、結果として、メモリ帯域が狭くなる。
【0008】
本発明は、メモリを有し、複数の演算器が設けられた畳み込み演算処理装置において、演算器の稼働率を向上させることを目的とする。
【課題を解決するための手段】
【0009】
本発明による畳み込み演算処理装置は、それぞれが畳み込み層における出力チャネルの1チャネルの畳み込み演算を行う複数の演算器と、複数の演算器が使用する重みデータを格納する2つの第1の記憶手段とを含み、演算器の数は、出力チャネル数よりも少なく、複数の演算器が畳み込み演算を行っているときに、複数の演算器が使用している重みデータが格納されている第1の記憶手段とは異なる方の第1の記憶手段に、複数の演算器が次に実行する畳み込み演算で使用する重みデータを転送するデータ転送機構
を含
み、複数の演算器が出力チャネルの1チャネル分の畳み込み演算を行っているときに第1の記憶手段の参照回数を計数し、計数値が出力チャネルの1チャネル分の畳み込み演算の総参照回数に達したら、複数の演算器が使用する重みデータの読み出し先の第1の記憶手段を切り替える切替機構をさらに含み、複数の演算器の各々は複数の演算部を有し、総参照回数は、[入力チャネル数×特徴量データサイズ÷前記演算部の数]である。
【0010】
本発明による畳み込み演算処理方法は、それぞれが畳み込み層における出力チャネルの1チャネルの畳み込み演算を行い出力チャネル数よりも少ない数の複数の演算器が1チャネル分の畳み込み演算を行っているときに、複数の演算器が使用している重みデータが格納されている記憶手段とは異なる記憶手段に、複数の演算器が次に実行する畳み込み演算で使用する重みデータを転送
し、複数の演算器が出力チャネルの1チャネル分の畳み込み演算を行っているときに使用している重みデータを記憶している記憶手段の参照回数を計数し、計数値が出力チャネルの1チャネル分の畳み込み演算の総参照回数である[入力チャネル数×特徴量データサイズ÷前記演算部の数]に達したら、複数の演算器が使用する重みデータの読み出し先の記憶手段を切り替える。
【発明の効果】
【0011】
本発明によれば、CNNにおいて、演算器の稼働率が向上する。
【発明を実施するための形態】
【0013】
以下、本発明の実施形態を図面を参照して説明する。
【0014】
図1は、畳み込み演算処理装置(以下、演算処理装置という。)の構成例を示すブロック図である。なお、
図1には、メモリ100,300も示されている。
【0015】
メモリ100には、演算処理装置200に入力されるデータが記憶される。メモリ100に記憶されるデータとして、入力特徴量データ101と重みデータ102とがある。なお、メモリ100に、CNNへの入力データが保存されることもある(演算処理装置が第1層の畳み込み層に相当する場合)。
【0016】
演算処理装置200は、それぞれが畳み込み演算を行う複数の畳み込み演算器203A,203B,203C,・・・,203Nを有する。畳み込み演算器203A,203B,203C,・・・,203Nの数N(N:2以上の自然数)は、出力チャネルの総数よりも少なく、並列演算の対象である出力チャネル数に相当する。各々の畳み込み演算器203A,203B,203C,・・・,203Nは、複数の出力チャネルにおける1チャネルの畳み込み演算を実行する。例えば、演算器203Aがチャネル#1の畳み込み演算を実行し、演算器203Bがチャネル#2の畳み込み演算を実行し、演算器203Cがチャネル#3の畳み込み演算を実行し、演算器203Nがチャネル#Nの畳み込み演算を実行する。
【0017】
各々の畳み込み演算器203A,203B,203C,・・・,203Nは、複数の演算部211を含む。演算部211の数は、一例として、1チャネルの重みの数(フィルタの行数×列数)である。なお、演算処理装置200には、演算器の出力の和を演算する加算器も存在するが、加算器は、
図1において記載省略されている。
【0018】
メモリ100に保存されている入力特徴量データ101は、DMA(Direct Memory Access)機能を有するDMAモジュール(DMAコントローラ)201によって、ラインバッファ202に転送される。畳み込み演算器203A,203B,203C,・・・,203Nは、ラインバッファ202から特徴量データを入力する。
【0019】
メモリ100に保存されている重みデータ102は、DMAモジュール203によって、データキャッシュ(キャッシュメモリ)204に転送される。畳み込み演算器203A,203B,203C,・・・,203Nは、データキャッシュ204から重みデータを入力する。
【0020】
なお、CNNの特徴の一つとして、重み共有がある。すなわち、重みデータは、チャネル毎に、複数の特徴量データで共有される。したがって、データキャッシュ204に重みデータが設定されたら、処理対象のチャネルの処理が完了するまで、重みデータは、データキャッシュ204に保存される。
【0021】
畳み込み演算器203A,203B,203C,・・・,203Nの演算結果は、次層への特徴量データ(出力特徴量データ)としてメモリ300に保存される。
【0022】
図2は、CNNの演算例を示す説明図である。
図2に示す例では、2×2×(128チャネル)の重みフィルタ(以下、フィルタという。)が使用されている(
図2(B)参照)。
図2には、入力された特徴量データは4×4×(128チャネル)であり(
図2(A)参照)、ストライドが1である。畳み込み演算が実行された結果、3×3×(1チャネル)の出力特徴量データが得られた例が示されている(
図2(C)参照)。なお、
図2(A),(C)における各数値は特徴量を示し、
図2(B)における各数値は重みを示す。
【0023】
図3は、演算処理装置200の処理例を説明するための説明図である。
図3には、多層のCNNのうちの浅い層401における2層と、深い層402における1層とが模式的に示されている。浅い層401は入力層に近い層である。
図3には、第1層と第2層とが例示されている。また、深い層402における第M層が例示されている。
【0024】
上述したように、処理がCNNにおける深い層402に進むほど、入出力の特徴量データサイズが小さくなり、相対的に、フィルタサイズ403が大きくなる。
【0025】
以下の説明では、フィルタサイズ403が大きい第M層を対象とする。
【0026】
本実施形態では、
図3に示すように、Nチャネル(N<総出力チャネル数)分の畳み込み演算が並列実行される。なお、Nチャネルにおける各々のチャネルの特徴量データについて畳み込み演算が実行されている間、フィルタにおける各重みは不変である。以下、チャネル#1〜#Nを第1チャネル群といい、チャネル#(N+1)〜#2Nを第2チャネル群という。
【0027】
図4および
図5を参照して、本実施形態の演算処理装置200の第M層の処理を説明する。
図4は、演算処理装置200の処理例を説明するためのブロック図である。
図5は、演算処理装置200の処理の流れの一例を示す説明図である。
【0028】
図4に示すように、メモリ100に、第M層の入力特徴量データ101が格納されている。入力特徴量データ101には、第1チャネル群用の特徴量データ101Aと第2チャネル群用の特徴量データ101Bとが含まれている。また、メモリ100には、第M層の各チャネル用の重みデータ102も格納されている。重みデータ102には、第1チャネル群用の重みデータ102Aと第2チャネル群用の重みデータ102Bとが含まれている。
【0029】
図4に示す例では、データキャッシュ204は、2つのキャッシュメモリ204A,204Bを含む。キャッシュメモリ204Aは、第1チャネル群用の重みデータ102Aを一時記憶する。キャッシュメモリ204Bは、第2チャネル群用の重みデータ102Bを一時記憶する。なお、一般的に表現すると、演算装置210が第L(L:自然数)チャネル群についての演算を行っているときに、キャッシュメモリ204Aに、第Lチャネル群用の重みデータが記憶され、キャッシュメモリ204Bに、第(L+1)チャネル群用の重みデータが転送される。
【0030】
なお、畳み込み演算器203A,203B,203C,・・・,203Nが含まれるブロックを演算装置210とする。
【0031】
前層での処理が完了すると、メモリ100に、第M層の入力特徴量データ101が用意されている。また、メモリ100に、第M層で使用される重みデータ102Aが用意されている。DMAモジュール203は、DMAで、
図5(A)に示すように、重みデータ102Aをキャッシュメモリ204Aに転送する(ステップS1)。
【0032】
なお、演算処理装置200において、メモリ100、演算処理装置200、およびメモリ300の制御を司る制御器(図示せず)が設けられ、制御器が、演算処理装置200における各ブロックに処理開始のトリガを与えるようにしてもよい。
【0033】
DMAモジュール201は、
図5(C)に示すように、第1チャネル群用の特徴量データ101Aをラインバッファ202に転送する(ステップS2)。また、各々の畳み込み演算器203A,203B,203C,・・・,203Nは、
図5(B),(D)に示すように、キャッシュメモリ204Aから、自身が担当するチャネルの重みデータすなわちフィルタを読み出しつつ(ステップS3)、ラインバッファ202から第1チャネル群用の特徴量データ101Aを順次読み出して、畳み込み演算をパイプライン処理で実行する(ステップS4)。演算結果は、メモリ300に転送される。
【0034】
畳み込み演算器203A,203B,203C,・・・,203Nが、第1チャネル群に関する演算を実行しているときに、DMAモジュール203は、DMAで、第2チャネル群用の重みデータ102Bをキャッシュメモリ204Bに転送する(ステップS5)。
【0035】
図5(C)に示すように、第1チャネル群用の特徴量データ101Aがラインバッファ202に転送された後、DMAモジュール201は、第2チャネル群用の特徴量データ101Bをラインバッファ202に転送する(ステップS6)。また、各々の畳み込み演算器203A,203B,203C,・・・,203Nは、キャッシュメモリ204Bから、自身が担当するチャネルの重みデータすなわちフィルタを読み出しつつ(ステップS7)、ラインバッファ202から第1チャネル群用の特徴量データ101Aを順次読み出して、第2チャネル群に関する畳み込み演算をパイプライン処理で実行する(ステップS8)。
【0036】
その後、演算処理装置200は、第M層における全ての出力チャネルに関する畳み込み演算処理が完了するまで、上記の処理を繰り返し実行する(ステップS9)。
【0037】
本実施形態では、演算装置210が第Lチャネル群について、キャッシュメモリ204Aに記憶されている重みデータを使用して畳み込み演算処理を実行しているときに、次チャネル群(第(L+1)チャネル群)で使用される重みデータがキャッシュメモリ204Bに用意される。したがって、演算処理対象のチャネルが代わるときに、重みデータの更新に要する時間が短縮される。
【0038】
また、演算装置210が第Lチャネル群について畳み込み演算処理を完了したときに、直ちに、使用するキャッシュメモリを切り替えることができる。
【0039】
演算装置210が処理開始から処理終了までにキャッシュメモリ204Aの内容(重みデータ)を参照する回数(総参照回数)は、[入力チャネル数×特徴量データサイズ(縦)×特徴量データサイズ(横)÷演算部211の数](入力チャネル数、特徴量データサイズ(縦)および特徴量データサイズ(横)に関して
図3参照:演算部211の数に関して
図4参照)である。
【0040】
例えば、演算処理装置200に参照回数を計数する計数機構を設け、参照回数が総参照回数に達したら、例えば制御器(制御器が設けられている場合)が、演算装置210に対してキャッシュメモリの切り替えを指示することによって、使用するキャッシュメモリは、直ちに切り替えられる(ステップS10)。
【0041】
また、演算処理装置200は、Nチャネル分の畳み込み演算処理を並列実行するので、第1チャネル群用の重みデータ102Aを使用した処理の次の処理で使用される第2チャネル群用の重みデータ102Bの、メモリ100における格納位置は容易に特定可能である。したがって、制御器(制御器が設けられている場合)は、DMAモジュール203に対して、迅速に、次の処理で使用される第2チャネル群用の重みデータ102Bの転送開始指示を行うことができる。
【0042】
さらに、キャッシュメモリ204Aに記憶されるN個のチャネルの各々に対応する重みデータおよびキャッシュメモリ204Bに記憶されるN個の各々に対応する重みデータは、それぞれ、1つのチャネル群に対する畳み込み演算処理が完了するまで変更されることはない。したがって、データキャッシュ204が設けられたことによってメモリ100のメモリ帯域を狭めることができる効果に加えて、さらに、その効果を高めることができる。
【0043】
また、キャッシュメモリ204A,204Bには全チャネル数分の重みデータが同時に存在せず、Nチャネル数分の重みデータが存在すればよいので、キャッシュメモリ204A,204Bのサイズが節約される。
【0044】
上記の実施形態では、演算器数が限られ、かつ、メモリ帯域が広くない場合でも、演算器の稼働率を高くすることができる。換言すれば、限られた演算器数とメモリ容量およびメモリ帯域とで、演算器の稼働率を高くすることができる。
【0045】
上記の実施形態では、特徴量データの量に対して相対的に重みデータの量の割合が高くなる深い層402が演算処理装置200の処理対象とされたが、浅い層401を対象として上記の実施形態を適用することも可能である。
【0046】
なお、演算装置210は、例えば、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array )、またはASIC(Application Specific Integrated Circuit )で構築可能である。
【0047】
図6は、畳み込み演算処理装置の概要を示すブロック図である。畳み込み演算処理装置10は、それぞれが畳み込み層における出力チャネルの1チャネルの畳み込み演算を行う複数の演算器11(実施形態では、演算器203A〜203Nで実現される。)と、複数の演算器11が使用する重みデータを格納する2つの第1の記憶手段12(実施形態では、キャッシュメモリ204A,204Bで実現される。)とを備え、演算器11の数は、出力チャネル数よりも少なく、複数の演算器11が畳み込み演算を行っているときに、複数の演算器11が使用している重みデータが格納されている第1の記憶手段12とは異なる方の第1の記憶手段12に、複数の演算器11が次に実行する畳み込み演算で使用する重みデータを転送するデータ転送機構13(実施形態では、DMAモジュール203)をさらに備える。
【0048】
畳み込み演算処理装置10は、複数の演算器11が使用する特徴量データを格納する第2の記憶手段(実施形態では、ラインバッファ202で実現される。)を備えていてもよい。
【0049】
畳み込み演算処理装置10は、複数の演算器11が1チャネル分の畳み込み演算を行っているときに第1の記憶手段12の参照回数を計数し、計数値が1チャネル分の畳み込み演算の総参照回数に達したら、複数の演算器11が使用する重みデータの読み出し先の第1の記憶手段12を切り替える切替機構(実施形態では、計数機構および制御器で実現される。)を備えていてもよい。