(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-17
(45)【発行日】2024-05-27
(54)【発明の名称】ニューラル・ネットワーク処理要素
(51)【国際特許分類】
G06N 3/063 20230101AFI20240520BHJP
G06F 17/10 20060101ALI20240520BHJP
【FI】
G06N3/063
G06F17/10 A
(21)【出願番号】P 2020562166
(86)(22)【出願日】2019-04-25
(86)【国際出願番号】 CA2019050525
(87)【国際公開番号】W WO2019213745
(87)【国際公開日】2019-11-14
【審査請求日】2022-03-31
(32)【優先日】2018-05-08
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung-ro,Yeongtong-gu,Suwon-si,Gyeonggi-do,Republic of Korea
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】モショボス,アンドレアス
(72)【発明者】
【氏名】シャリフィモハダム,セイエ
(72)【発明者】
【氏名】マーモウド,モスタファ
【審査官】青木 重徳
(56)【参考文献】
【文献】国際公開第2017/201627(WO,A1)
【文献】特表2016-522495(JP,A)
【文献】米国特許第09836691(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/063
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
活性化表現のセットを受け取るために活性化メモリとインターフェースする活性化メモリ・インターフェースと、
重み表現のセットを受け取るために重みメモリとインターフェースする重みメモリ・インターフェースと、
出力表現のセットを作るために活性化表現の前記セットおよび重み表現の前記セットを処理するために1ホット符号器、ヒストグラマ、アライナ、リデューサ、および累算副要素を実施するように構成された処理要素と
を含む、ニューラル・ネットワーク・アクセラレータ・タイル。
【請求項2】
前記活性化メモリ・インターフェースは、活性化1オフセット対のセットとして前記処理要素に活性化表現の前記セットを提供するように構成され、前記重みメモリ・インターフェースは、重み1オフセット対のセットとして前記処理要素に重み表現の前記セットを提供するように構成される、請求項1に記載のアクセラレータ・タイル。
【請求項3】
前記処理要素は、指数副要素を実施するようにさらに構成される、請求項2に記載のアクセラレータ・タイル。
【請求項4】
前記指数副要素は、1オフセット対積のセットを作るために活性化1オフセット対の前記セットおよび重み1オフセット対の前記セットを組み合わせるように構成される、請求項3に記載のアクセラレータ・タイル。
【請求項5】
前記指数副要素は、大きさ加算器のセットおよび符号ゲートの対応するセットを含み、大きさ加算器および符号ゲートの1対は、1オフセット対積の前記セットの各1オフセット対積を提供するためのものである、請求項4に記載のアクセラレータ・タイル。
【請求項6】
前記1ホット符号器は、1ホット符号器入力のセットの1ホット符号化を実行する復号器のセットを含む、請求項1に記載のアクセラレータ・タイル。
【請求項7】
前記ヒストグラマは、ヒストグラマ入力のセットを値によってソートするように構成される、請求項2に記載のアクセラレータ・タイル。
【請求項8】
前記アライナは、縮小されるシフトされた入力のセットを提供するためにアライナ入力のセットをシフトするように構成される、請求項2に記載のアクセラレータ・タイル。
【請求項9】
前記リデューサは、リデューサ入力のセットを部分和に縮小するために加算器ツリーを含む、請求項2に記載のアクセラレータ・タイル。
【請求項10】
前記累算副要素は、アキュムレータを含み、複数のサイクルにわたって積を累算するために部分和を受け取り、前記部分和を前記アキュムレータに加算するように構成される、請求項2に記載のアクセラレータ・タイル。
【請求項11】
前記処理要素は、連結器を実装するようにさらに構成される、請求項1に記載のアクセラレータ・タイル。
【請求項12】
前記連結器は、部分積を作るために前記アライナおよび前記リデューサによってシフトされ、縮小されるグループ化されたカウントのセットを作るために連結器入力のセットを連結するために提供される、請求項11に記載のアクセラレータ・タイル。
【請求項13】
ニューラル・ネットワーク部分積を作る方法であって、前記方法は、活性化メモリ・インターフェースと重みメモリ・インターフェースと処理要素とを含むニューラル・ネットワーク・アクセラレータ・タイルによって実行され、
活性化表現のセットを受け取ることと、
重み表現のセットを受け取ることであって、各重み表現は、活性化表現の前記セットの活性化表現に対応する、受け取ることと、
部分結果のセットを作るために、各重み表現をそれに対応する活性化表現と組み合わせることによって、重み表現の前記セットを活性化表現の前記セットと組み合わせることと、
1ホット表現のセットを作るために、部分結果の前記セットを符号化することと、
1ホット表現の前記セットをヒストグラム・バケット・カウントのセットに累算することと、
ヒストグラム・バケット・カウントの前記セットのカウントを前記カウントのサイズに従って整列させることと、
前記ニューラル・ネットワーク部分積を作るためにヒストグラム・バケット・カウントの前記セットの前記整列されたカウントを縮小することと
を含む方法。
【請求項14】
積を累算するために前記ニューラル・ネットワーク部分積をアキュムレータに出力することをさらに含む、請求項
13に記載の方法。
【請求項15】
前記積を活性化メモリに出力することをさらに含む、請求項
14に記載の方法。
【請求項16】
各活性化表現は、活性化大きさおよび活性化符号の活性化対として受け取られ、各重み表現は、重み大きさおよび重み符号の重み対として受け取られる、請求項
13に記載の方法。
【請求項17】
ヒストグラム・バケット・カウントの前記セットの前記カウントを整列させる前に、ヒストグラム・バケット・カウントの前記セットの前記カウントをグループ化されたカウントのセットに再帰的にグループ化することと、ヒストグラム・バケット・カウントの前記セットの代わりに整列され縮小されるグループ化されたカウントの前記セットを提供することとをさらに含む、請求項
16に記載の方法。
【請求項18】
重み表現の前記セットの重み表現を活性化表現の前記セットの活性化表現と組み合わせることは、複数のサイクルにわたって実行される、請求項
13に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、全般的にはニューラル・ネットワークに関し、具体的には、ニューラル・ネットワークの処理要素の実施に関する。
【背景技術】
【0002】
現代のコンピューティング・ハードウェアは、エネルギ制約されている。計算を実行するのに必要なエネルギの削減は、性能改善においてしばしば必須である。
【0003】
たとえば、畳み込みニューラル・ネットワークによって推論中に実行される計算の多くは、2D畳み込みに起因する。2D畳み込みは、作業のほとんどが活性化および重みの乗算に起因する、多数の積和演算を含む。これらの乗算の多くが、無効である。
【0004】
ニューラル・ネットワークのトレーニング、実行、または他の使用は、しばしば、膨大な量の計算の実行を含む。より少ない計算の実行は、通常、時間効率およびエネルギ効率などの効率をもたらす。
【発明の概要】
【0005】
本発明の一態様では、活性化表現のセットを受け取るために活性化メモリとインターフェースする活性化メモリ・インターフェースと、重み表現のセットを受け取るために重みメモリとインターフェースする重みメモリ・インターフェースと、出力表現のセットを作るために活性化表現のセットおよび重み表現のセットを処理するために1ホット符号器、ヒストグラマ、アライナ、リデューサ、および累算副要素を実施するように構成された処理要素とを含む、ニューラル・ネットワーク・アクセラレータ・タイルが提供される。
【0006】
本発明の一態様では、ニューラル・ネットワーク部分積を作る方法であって、活性化表現のセットを受け取ることと、重み表現のセットを受け取ることであって、各重み表現は、活性化表現のセットの活性化表現に対応する、受け取ることと、部分結果のセットを作るために、各重み表現をそれに対応する活性化表現と組み合わせることによって、重み表現のセットを活性化表現のセットと組み合わせることと、1ホット表現のセットを作るために、部分結果のセットを符号化することと、1ホット表現のセットをヒストグラム・バケット・カウントのセットに累算することと、ヒストグラム・バケット・カウントのセットのカウントをそのサイズに従って整列させることと、ニューラル・ネットワーク部分積を作るためにヒストグラム・バケット・カウントのセットの整列されたカウントを縮小することとを含む方法が提供される。
【0007】
本願による他の態様および特徴は、添付図面に関連して本発明の実施形態の以下の説明を再検討する時に、当業者に明白になろう。
【0008】
本発明の原理は、本発明の原理および態様を組み込んだ1つまたは複数の例示的実施形態の図示によって提供される添付図面を参照することによってよりよく理解され得る。
【図面の簡単な説明】
【0009】
【
図1】ネットワークのセットにまたがる8つの例の計算配置の平均作業削減を比較する1組の棒グラフである。
【
図3A-3C】3つの例の処理エンジンを示す概略図である。
【
図4A】一実施形態による処理要素を示す概略図である。
【
図4B】一実施形態による処理要素の一部を示す概略図である。
【
図5A-5B】実施形態による連結ユニットを示す概略図である。
【
図6】一実施形態によるアクセラレータ・タイルを示す概略図である。
【
図7A-7B】例のアクセラレータ・タイル構成を示す概略図である。
【
図8】複数のネットワークにまたがる例のタイル構成のセットの性能を比較する棒グラフである。
【
図9】例のアクセラレータ・タイル構成を示す概略図である。
【
図10】例のアクセラレータ・タイル構成を示す概略図である。
【発明を実施するための形態】
【0010】
同様の符号は、図の同様のまたは対応する要素を示した。
【0011】
以下の説明およびそこで説明される実施形態は、本発明の原理の特定の実施形態の1つまたは複数の例の実例として提供される。これらの例は、これらの原理のおよび本発明の、限定ではなく説明の目的で提供される。説明では、同様の部分は、本明細書および図面全体を通じて同一のそれぞれの参照番号を用いてマークされる。図面は、必ずしも原寸通りではなく、いくつかの場合に、本発明のある種の特徴をより明瞭に示すために、比率が誇張されている場合がある。
【0012】
この説明は、画像分類モデルの推論中に実行される作業の量など、実行される作業の量を削減するために乗算をビットレベルまで分解するアクセラレータに関する。そのような削減は、実行時間を改善し、エネルギ効率を改善することができる。
【0013】
この説明は、ディープ・ニューラル・ネットワーク(DNN)推論の実行時間およびエネルギ効率を改善することのできるアクセラレータにさらに関する。ただし、いくつかの実施形態では、作業削減潜在能力の一部が、低コストで単純でエネルギ効率の良い設計を与えるために放棄される。
【0014】
多くの近代コンピューティング・ハードウェアが、エネルギ制約されているので、計算を実行するのに必要なエネルギの量を削減する技法の開発は、しばしば、性能改善のために必須である。たとえば、推論中にほとんどの畳み込みニューラル・ネットワークによって実行される大量の作業は、2D畳み込みに起因する。これらの畳み込みは、大量の積和演算を伴い、この積和演算に関して、ほとんどの作業は、活性化Aおよび重みWの乗算に起因する。無効な演算の個数の削減が、エネルギ効率を大幅に改善する可能性がある。
【0015】
様々な計算配置が、A×W乗算をより単純な演算の集合に分解するために提案されてきた。たとえば、AおよびWが、16b固定小数点数である場合に、A×Wに、256個の1b×1b乗算または16個の16b×1b乗算としてアプローチすることができる。
【0016】
図1は、8つの例の計算配置のセットを試験する際に使用される6つのモデルのそれぞれに1つの、6つの棒グラフを含む。各棒グラフは、8つの比較される計算配置に関する作業の潜在的な削減を比較する。
【0017】
各棒グラフの左端の棒1100は、活性化が0である場合に乗算を回避する第1の計算配置を表し、畳み込みニューラル・ネットワークで発生する0活性化の相対的に大きい分数によって動機を与えられた値ベースのアクセラレータの第1世代を表す(たとえば、これによって参照によって組み込まれる、J.Albericio、P.Judd、T.Hetherington、T.Aamodt、N.Enright Jerger、およびA.Moshovos、“CNVLUTIN:Ineffectual-Neuron-Free Deep Neural Network Computing”、in Proceedings of the International Symposium on Computer Architecture、2016年を参照されたい)。
【0018】
各グラフの左から2番目の棒1200は、活性化または重みのいずれかが0である場合に乗算をスキップする第2の計算配置を表し、シナプス接続の大きい分数が枝刈りされたスパース・モデルをターゲットとするアクセラレータを表す(たとえば、これによって参照によって組み込まれる、A.Parashar、M.Rhu、A.Mukkara、A.Puglielli、R.Venkatesan、B.Khailany、J.Emer、S.W.Keckler、およびW.J.Dally、“Scnn: An accelerator for compressed-sparse convolutional neural networks”、in Proceedings of the 44th Annual International Symposium on Computer Architecture、ISCA’17、(米国ニューヨーク州ニューヨーク)、27~40頁、ACM、2017年を参照されたい)。
【0019】
左から3番目および4番目の棒1300および1400は、精度をターゲットとする、それぞれ第3および第4の計算配置を表す。棒1300によって表される3番目の計算配置は、活性化の精度をターゲットとし(たとえば、両方がこれによって参照によって組み込まれる、P.Judd、J.Albericio、T.Hetherington、T.Aamodt、およびA.Moshovos、“Stripes: Bit-serial Deep Neural Network Computing”、in Proceedings of the 49th Annual IEEE/ACM International Symposium on Microarchitecture、MICRO-49、2016年と、A.Delmas、P.Judd、S.Sharify、およびA.Moshovos、“Dynamic stripes: Exploiting the dynamic precision requirements of activation values in neural networks”、CoRR、vol.abs/1706.00504、2017年を参照されたい)、棒1400によって表される4番目の計算配置は、活性化および重みの精度をターゲットとする(たとえば、これによって参照によって組み込まれる、S.Sharify、A.D.Lascorz、P.Judd、およびA.Moshovos、“Loom: Exploiting weight and activation precisions to accelerate convolutional neural networks”、CoRR、vol.abs/1706.07853、2017年を参照されたい)。
【0020】
乗算がビットレベルで分解される場合に、作業削減のさらなる可能性が存在する。たとえば、これらの乗算が16b固定小数点値に対して動作すると仮定すると、乗算は、下の式(1)によって与えられる。
【数1】
【0021】
上の式(1)では、AiおよびWiは、それぞれAおよびWのビットである。個々の256個の単一ビット乗算まで分解された時に、AiおよびWiが非0である乗算だけが有効である。
【0022】
左から5番目および6番目の棒1500および1600は、それぞれ、乗算を単一ビット乗算に分解する、5番目および6番目の計算配置を表す。棒1500によって表される5番目の計算配置は、活性化ビットが0である場合に単一ビット乗算をスキップする(たとえば、これによって参照によって組み込まれる、J.Albericio、A.Delmas、P.Judd、S.Sharify、G.O’Leary、R.Genov、およびA.Moshovos、“Bit-pragmatic deep neural network computing”、in Proceedings of the 50th Annual IEEE/ACM International Symposium on Microarchitecture、MICRO-50 ’17、382~394頁、2017年を参照されたい)。棒1600によって表される6番目の配置は、活性化または重みビットのいずれかが0である場合に単一ビット乗算をスキップする。
【0023】
しかし、いくつかの配置では、AおよびWを、ビット・ベクトルとして表すのではなく、2またはより大きい基数項の符号付きべきとしてブース符号化することができる。左から7番目および8番目の棒1700および1800は、それぞれ7番目および8番目の計算配置を表し、ここで、値は、ビット・ベクトルとして表されるのではなく、2またはより大きい基数項の符号付きべきとしてブース符号化される。棒1700によって表される7番目の配置は、活性化値をブース符号化し、棒1800によって表される8番目の配置は、活性化値と重み値との両方をブース符号化する。重みによる活性化の乗算は、下の式(2)によって与えられる。
【数2】
【0024】
上の式(2)では、At
iおよびWt
jは、±2
xの形である。位置表現に関して、At
iとWt
jとの両方が非0であるそれらの積だけが、有効である。したがって、
図1は、ブース符号化された活性化の無効な項がスキップされる場合の作業の潜在的削減を1700に示し(たとえば、上で参照によって組み込まれる、J.Albericio、A.Delmas、P.Judd、S.Sharify、G.O’Leary、R.Genov、およびA.Moshovos、“Bit-pragmatic deep neural network computing”、in Proceedings of the 50th Annual IEEE/ACM International Symposium on Microarchitecture、MICRO-50’17、382~394頁、2017年を参照されたい)、ブース符号化された活性化およびブース符号化された重みの無効な項がスキップされる場合の作業の潜在的削減を1800に示す。
【0025】
図1によって示されるように、ブース符号化された活性化および重みの有効な項など、有効な項だけを計算するハードウェア・アクセラレータは、計算作業を大幅に削減する可能性を有する。多くの実施形態で、ブース符号化された計算をターゲットとする構成を使用して、ビット・ベクトル表現を計算することもできる。
【0026】
計算配置を、畳み込みニューラル・ネットワーク(「CNN」)などのニューラル・ネットワークの実施態様で使用することができる。CNNは、通常、複数の畳み込み層およびそれに続く少数の全結合層からなり、画像処理では、動作時間のほとんどは、3D畳み込み演算が入力活性化に適用され、出力活性化を作る畳み込み層の処理に費やされる。畳み込み層の例を
図2に示し、
図2は、c×x×y入力活性化ブロック2100およびN個のc×h×kフィルタのセット2200を示す。層は、ウィンドウ2300などの入力活性化2400のc×h×k部分配列(または「ウィンドウ」)によってこれらのN個のフィルタ(f
0、f
1、…、f
N-1と表される)のそれぞれのドット積を作って、単一のo
h×o
k出力活性化2400を生成する。N個のフィルタおよび活性化ウィンドウの畳み込みは、N個のo
h×o
k出力をもたらし、これが、次の層の入力に渡される。活性化ウィンドウおよびフィルタの畳み込みは、一定のストライドSを有するスライディング・ウィンドウの形で行われる。全結合層は、フィルタおよび入力活性化が同一の次元を有する(x=hおよびy=k)畳み込み層として実施することができる。
【0027】
16b固定小数点の活性化および重みを使用するものなどのデータ並列エンジンが、ニューラル・ネットワークの実施での使用に関して提案された(たとえば、これによって参照によって組み込まれる、Y.Chen、T.Luo、S.Liu、S.Zhang、L.He、J.Wang、L.Li、T.Chen、Z.Xu、N.Sun、およびO.Temam、“Dadiannao: A machine-learning supercomputer”、in Microarchitecture(MICRO)、2014 47th Annual IEEE/ACM International Symposium on、609~622頁、2014年12月に開示されたDaDianNaoアクセラレータを参照されたい)。BASEエンジンと称するそのようなエンジンの例では、8つの内積ユニット(IP)が設けられ、そのそれぞれが、16個の入力活性化および16個の重みを入力として受け入れる。8個のIPが使用される場合に、16個の入力活性化を、8個すべてのIPにブロードキャストすることができ、各IPは、それ自体の16個の重みを受け取ることができ、すべてのサイクルに、各IPは、その16個の対応する重みによって16個の入力活性化を乗算し、これらを、16個の32b入力加算器ツリーを使用して、単一の部分出力活性化に縮小する。部分結果を複数のサイクルにわたって累算して、最終的な出力活性化を生成することができる。活性化メモリが活性化を提供することができ、重みメモリが重みを提供することができる。
【0028】
データ並列エンジンの変形形態を使用して、
図3に示された例など、上で議論した計算配置を実施することができる。
【0029】
図3Aは、毎サイクルに2つの4b活性化/重み対を乗算し、単一の4b出力活性化を生成することを示す、ビット並列エンジン3100の単純化された概略図である。4bおよび他のビット・サイズが、例としてこの説明の様々な部分で使用されるが、他の実施形態では他のサイズを使用することができる。エンジン3100のスループットは、2つの4b×4b積毎サイクルである。
【0030】
図3Bは、ビット直列エンジン3200の単純化された概略図である(たとえば、上で参照によって組み込まれる、S.Sharify、A.D.Lascorz、P.Judd、およびA.Moshovos、“Loom: Exploiting weight and activation precisions to accelerate convolutional neural networks”、CoRR、vol.abs/1706.07853、2017年を参照されたい)。ビット並列エンジン3100のスループットと一致するために、エンジン3200は、すべてのサイクルに8つの入力活性化および8つの重みを処理し、32個の1b×1b積を作る。活性化と重みとの両方がビット直列に処理されるので、エンジン3200は、P
a×P
wサイクルで16個の出力活性化をもたらし、ここで、P
aおよびP
wは、それぞれ活性化精度および重み精度である。その結果、エンジン3200は、
【数3】
だけエンジン3100をしのぐ。
図3Bに示されているように、活性化と重みとの両方を3ビットで表現できるので、
図3Aのエンジン3100に対するエンジン3200のスピードアップは、1.78倍である。それでも、エンジン3200は、いくつかの無効な項を処理し、たとえば、最初のサイクルでは、32個の1b×1b積のうちの27個は、0であり、したがって無効である。
【0031】
図3Cは、活性化と重みとの両方が2の本質的なべき(または「1オフセット」)のベクトルとして表現されるエンジン3300の単純化された概略図である。たとえば、A
0=(110)は、その1オフセットのベクトルA
0=(2,1)として表現される。すべてのサイクルに、各処理要素(「PE」)は、入力活性化の4b1オフセットおよび重みの4b1オフセットを受け入れ、これらを加算して、出力活性化の対応する積項のべきを作る。エンジン3300は、活性化および重みを項直列に処理するので、各PEが出力活性化の積項を作るのにt
a×t
wサイクルを要し、ここで、t
aおよびt
wは、対応する入力活性化および重みの1オフセットの個数である。このエンジンは、Tサイクル後に活性化および重みの1オフセットの次のセットを処理し、ここで、Tは、すべてのPEの中で最大のt
a×t
wである。
図3Cの例では、最大のTは、PE(1,0)からのA
0=(2,1)およびW
0
1=(2,1,0)の対に対応する6である。したがって、エンジン3300は、6サイクル後に活性化および重みの次のセットを処理し始めることができ、
図3Aのビット並列エンジン3100に対して2.67倍のスピードアップを達成する。
【0032】
本発明のいくつかの実施形態は、入力活性化と重みとの両方の必須のビットのみを処理することによって、入力活性化と重みとの積を作るのに必要な計算を最小化するように設計されている。いくつかの実施形態では、入力活性化および重みは、必須ビットのみを含む表現にオンザフライで変換され、各サイクルにつき必須ビットの1つの対すなわち1つの活性化ビットおよび1つの重みビットを処理する。
【0033】
いくつかの実施形態では、ハードウェア・アクセラレータは、必須ビットが1オフセット、通常の位置表現、非固定小数点表現、または必須ビットの他の表現のどの形で処理されようと、必須ビットだけを処理するために提供され得る。
【0034】
必須ビットが1オフセットの形で処理される実施形態では、アクセラレータは、各活性化または重みをその1オフセットのリスト(on,…,o0)として表現することができる。各1オフセットは、(符号、大きさ)対として表現される。たとえば、0010(2)のブース符号化を有する活性化A=-2(10)=1110(2)は、(-,1)として表現され、A=7(10)=0111(2)は、((+,3),(-,0))として表現される。符号は、単一のビットを使用して符号化され得、たとえば、0が「+」を表し、1が「-」を表す。
【0035】
いくつかの実施形態では、重みW=(W
terms)および入力活性化A=(A
terms)は、それぞれ、(符号、大きさ)対、それぞれ(s
i,t
i)および(s’
i,t’
i)として表現され、積は、下の式(3)に示されているように計算される。
【数4】
【0036】
完全なA×W積を単一のサイクルで処理するのではなく、式(3)を実施すると、アクセラレータは、入力活性化Aの単一のt’項および重みWの単一のt項の各積を個別に処理する。これらの項は2のべきなので、その積も2のべきになる。したがって、式(3)を実施する実施形態は、まず対応する指数t’+tを加算することができる。単一の積が毎サイクルに処理される場合に、2t’+t個の最終的な値を、復号器を介して計算することができる。複数の項対が毎サイクルに処理される場合に、実施形態は、例示的実施形態を参照して下でさらに説明するように、個々の2t’+t個の積を計算するのに項対あたり1つの復号器を使用し、すべてを累算するのに効率的な加算器ツリーを使用することができる。
【0037】
図4Aは、ニューラル・ネットワークを実施するエンジンまたは計算配置内で使用され得るものなどの実施形態の例示的な処理要素(PE)4000の概略図である。PE 4000は、6つのステップを実施し、各ステップは、処理副要素を使用して実施される。いくつかの実施形態では、下で説明するPE 4000の副要素など、処理要素の様々な副要素を、様々なハードウェア実施態様およびソフトウェア実施態様を用いて合併しまたは分割することができる。処理要素4000は、16個の入力活性化A
0,…,A
15によって16個の重みW
0,…,W
15を乗算するようにセット・アップされる。
【0038】
第1の副要素は、指数副要素4100であり、これは、16個の4b重み1オフセットt0,…,t15およびその16個の対応する符号ビットs0,…,s15を、16個の4ビット活性化1オフセットt’0,…,t’15およびその符号s’0,…,s’15と一緒に受け入れ、16個の1オフセット対積を計算する。すべての1オフセットが2のべきなので、その積も2のべきになる。したがって、16個の活性化をその対応する重みによって乗算するために、PE 4000は、その1オフセットを加算して5ビット指数(t0+t’0),…,(t15+t’15)を生成し、16個のXORゲートを使用して積の符号を判定する。
【0039】
第2の副要素は、1ホット符号器4200である。活性化および重みのi番目の対(i∈{0,…,15})に関して、1ホット符号器4200は、5ビット指数結果(t
i+t’
i)をそれに対応する1ホット・フォーマット(1つの「1」ビットおよび31個の「0」ビットを有する32ビット数)に変換する5b-32b復号器を介して
【数5】
を計算する。復号器出力の第j位置の単一の「1」ビットは、対応する積の符号(
図4Aに示されたE
isign)に応じて+2
jまたは-2
jのいずれかの値に対応する。
【0040】
第3の副要素は、復号器出力値のヒストグラムの同等物を生成するヒストグラマ4300である。ヒストグラマ4300は、1ホット符号器4200からの16個の32b数を、32個の2のべきがあるので20,…,231の値に対応する32個のバケットN0,…,N31に累算する。1ホット符号器4200からとられるこれらの数の符号Eisignも、考慮に入れられる。これに従って、各バケットは、対応する値を有した入力の個数のカウントを含む。各バケットが16個の符号付き入力を有するので、結果のカウントは、-16から16までの範囲内であり、したがって、2の補数を使って6ビットで表現される。
【0041】
第4および第5の副要素は、それぞれアライナ4400およびリデューサ4500である。
図4Aに示されているように、アライナ4400は、カウントをその重みに従ってシフトし、すべてを31+6=37bに変換し、リデューサは、32入力の加算器ツリーを使用して、32個の6bカウントを最終出力に縮小する。
【0042】
縮小の後の、第6の副要素は、累算副要素4600である。累算副要素4600は、リデューサ4500から部分和を受け入れる。その後、累算副要素4600は、アキュムレータ内に保持される任意の部分和と共に、新たに受け取った部分和を累算する。この形で、毎サイクルに1オフセットの1つの有効な対ずつ、完全なA×W積を複数のサイクルにわたって計算することができる。
【0043】
いくつかの実施形態では、副要素設計は、処理される情報の構造をよりよく利用できる場合がある。たとえば、
図4Bは、連結器、アライナ、およびリデューサ副要素4700の概略図である。いくつかの実施形態では、PE 4000のアライナ4400とリデューサ4500との両方が、連結器4710、アライナ4720、およびリデューサ4730を含む連結器、アライナ、およびリデューサ副要素4700によって置換される。
【0044】
PE 4000のアライナ4400およびリデューサ4500を連結器、アライナ、およびリデューサ副要素4700に置換することは、PE 4000に新たな連結器を追加するという効果を有し、その新たな連結器は、副要素4710である。新たな連結器の追加は、アライナおよびリデューサをより小さくより効率的にするなど、アライナおよびリデューサに対する変更、アライナ副要素4720を実施するためのアライナ4400に対する反映する変更、およびリデューサ副要素4730を実施するためのリデューサ4500に対する反映する変更をも可能にする。
【0045】
32個の6bカウントをシフトし、加算するのではなく、連結器、アライナ、およびリデューサ副要素4700は、
図4Bに示されているようにこれらをグループ化し、連結することによって、各カウントの相対重み付けを活用することによってコストおよびエネルギを削減することを目指す。たとえば、N
0およびN
6を加算するのではなく、これらは単純に連結される。というのは、これらが、「1」であるオーバーラップするビットを有しないことが保証されるからである。その後、連結された値は、6入力加算器ツリーを介して加算されて、累算副要素4600に入力される38b部分和を作る。
【0046】
連結器、アライナ、およびリデューサ副要素4700は、アライナ4400およびリデューサ4500を使用して可能なものよりエネルギ効率および面積効率のよい加算器ツリーを実施し、ヒストグラマ4300の出力が「1」であるオーバーラップするビットを有しない数のグループを含むという事実を利用する。
【0047】
一例として、第6の6b入力
【数6】
を第0の6b入力
【数7】
と共に考慮されたい。アライナ4400およびリデューサ4500の加算器を使用すると、第6の入力N
6は、6ビットだけシフトされなければならず、これは、結果の6つの最下位ビットとして6つの0を追加することになる。この場合に、6つシフトされたN
6とN
0との両方が1であるビットを有するビット位置はない。したがって、(N
6 << 6)とN
0との加算は、
図5Aに連結ユニット5100として概略的に示され、下の計算(4)に数値的に示されるように、N
0の符号に基づいてN
6およびN
0または(N
6-1)およびN
0のいずれかを連結することと同等である。
【数8】
1)
【数9】
が0である場合には、
【数10】
2)そうではなく、
【数11】
が1である場合には、
【数12】
【0048】
したがって、このプロセスは、(i MOD 6)が等しいN
iをグループ化することによって、再帰的に適用される。すなわち、第iの入力は、第(i+6)、第(i+12)などの入力と連結される。
図5Bの例の連結ユニット5200は、(i MOD 6)=0であるN
iのスタックとして再帰的連結を実施するが、他の実施形態では他の実施態様が可能である。上で説明した16積ユニットに関して、積は、下の描写(5)の6つのグループ化されたカウントを作る。
【数13】
【0049】
最終的な部分和は、下の式(6)によって与えられる。
【数14】
【0050】
ハードウェア・アクセラレータ・タイル6000を、
図6に示す。タイル6000は、
図4のPE 4000など、すべてのサイクルで入力活性化の16個のウィンドウおよびK=8個のフィルタを処理するPEの2D配列である。同一の列に沿ったPEは、同一の入力活性化を共有し、同一の行に沿ったPEは、同一の重みを受け取る。すべてのサイクルに、PE(i,j)は、第jのウィンドウからの各入力活性化から次の1オフセットを受け取り、第iのフィルタからの対応する重みの1オフセットによってこれを乗算する。タイル6000は、すべてのPEが16個の活性化およびそれに対応する重みの現在のセットの項の処理を終了した時に、活性化および重みの次のセットの処理を開始する。
【0051】
タイル6000などのタイルが、活性化と重みとの両方を項直列に処理するので、BASE構成と一致するために、タイルは、より多数のフィルタまたはウィンドウを同時に処理しなければならない。ワースト・ケースで、各活性化および重みは16個の項を有し、したがって、タイル6000などのタイルは、BASEのピーク計算帯域幅と一致するために8×16=128個のフィルタを並列に処理しなければならない。しかし、
図1に示されているように、16倍多数のフィルタを用いると、タイル6000などのタイルを使用するいくつかの例の実施態様の性能は、BASE性能より2桁以上改善される。さらに、実施形態は、変更されたブース符号化を使用し、項のワースト・ケースを重みまたは活性化あたり8つに削減することができる。
【0052】
図7Aおよび
図7Bは、その性能が
図8で比較される複数のハードウェア・アクセラレータ構成の概略図である。
図7Bに示されているように、BASE構成7100は、約2000本のワイヤを使用して、1フィルタあたり16個の重みを有する8つのフィルタを処理することができる。
図7Aに示されているように、タイル6000などのタイルを使用して、構成7200は、128本のワイヤを使用して8つのフィルタを処理することができ、構成7300は、256本のワイヤを使用して16個のフィルタを処理することができ、構成7400は、512本のワイヤを使用して32個のフィルタを処理することができ、構成7500は、約1000本のワイヤを使用して64個のフィルタを処理することができる。
図7の各構成で、活性化ワイヤの個数は、256にセットされる。他の実施形態では、フィルタおよび重みワイヤの個数を固定し、活性化ウィンドウおよび活性化ワイヤの個数を増やすなど、他の構成を使用することができる。
【0053】
図8は、
図7に示された構成7100から7500の性能を比較する。
図8の棒グラフは、6つのモデルのそれぞれの4つの棒グラフのセットとして構成7100に対する構成7200から7500の相対性能改善を示し、6つのモデルは、棒の各セットの下で識別される。構成7200の相対改善は、各セットの左端の棒として示され、構成7300の相対改善は、各セットの左から2番目の棒として示され、構成7400の相対改善は、各セットの左から3番目の棒として示され、構成7500の相対改善は、各セットの右端の棒として示されている。
【0054】
本発明の実施形態のシミュレーションは、そのような実施形態が、実行時間、エネルギ効率、および面積効率の改善を与えることを示す。カスタム・サイクル精密シミュレータが、試験される実施形態の実行時間をモデル化するのに使用された。設計のポスト・レイアウト・シミュレーションが、エネルギ結果および面積結果を試験するのに使用された。Synopsys Design Compiler(たとえば、これによって参照によって組み込まれる、Synopsys、“Design Compiler”、http://www.synopsys.com/Tools/Implementation/RTLSynthesis/DesignCompiler/Pagesを参照されたい)が、TSMC 65nmライブラリを用いる設計を合成するのに使用された。レイアウトは、合成結果を使用して、Cadence Innovus(たとえば、これによって参照によって組み込まれる、Cadence、“Encounter rtl compiler”、https://www.cadence.com/content/cadencewww/global/en_US/home/training/all-courses/84441.htmlを参照されたい)を用いて作られた。Intel PSG ModelSimが、パワー・ナンバーを報告するためにデータ駆動アクティビティ・ファクタを生成するのに使用された。すべての設計のクロック周波数は、1GHzにセットされた。ABin SRAMバッファおよびAbout SRAMバッファが、CACTI(たとえば、これによって参照によって組み込まれる、N.MuralimanoharおよびR.Balasubramonian、“Cacti 6.0: A tool to understand large caches”、2015年を参照されたい)を用いてモデル化され、活性化メモリおよび重みメモリが、Destiny(たとえば、これによって参照によって組み込まれる、M.Poremba、S.Mittal、D.Li、J.Vetter、およびY.Xie、“Destiny: A tool for modeling emerging 3d nvm and edram caches”、in Design,Automation Test in Europe Conference Exhibition(DATE)、2015、1543~1546頁、2015年3月を参照されたい)を用いてeDRAMとしてモデル化された。
【0055】
図8は、示されたネットワーク・アーキテクチャを使用して比較された、表1の100%相対TOP-1正確性精度プロファイルを有する畳み込み層に関するBASE構成7100に対する相対的な構成7200から7500の性能を示す(たとえば、これによって参照によって組み込まれる、Yang、Tien-Ju、およびChen、Yu-HsinおよびSze、Vivienne、“Designing Energy-Efficient Convolutional Neural Networks using Energy-Aware Pruning”、in IEEE Conference on Computer Vision and Pattern Recognition(CVPR)、2017年を参照されたい)。
【表1】
【0056】
いくつかの実施形態では、さらなる利益が、減らされた精度を有するように設計されたモデル、「1」であるビットの個数を減らす代替数値表現を使用するモデル、または増やされた重みもしくは活性化スパーシティを有するモデルなど、ある種のモデルを有する本発明の実施形態の使用から生じる。しかし、本発明の実施形態は、密ネットワークと疎ネットワークとの両方をターゲットにし、必須項だけを処理することによって性能を改善する。
【0057】
図8に示されているように、平均して、構成7200は、2倍を超えて構成7100をしのぎ、疎ネットワークであるAlexNet-Sparseに関して、構成7100に対して3倍のスピードアップを達成する。
図8に示されているように、構成7300から7500は、構成7100に対してそれぞれ4.8倍、9.6倍、および18.3倍のスピードアップをもたらす。
【0058】
構成7100に対する相対的な構成7200から7500のエネルギ効率を、下の表2に示す。タイル6000などのタイルを使用する構成は、より少ないオンチップ・メモリを必要とし、重みおよび活性化ごとにより少ないビットを通信し、全体的なエネルギ効率は、一般により高い。
【表2】
【0059】
ポスト・レイアウト測定が、構成7100から7500の面積を測定するのに使用された。構成7200は、構成7100の面積の1.78倍を必要とし、2.4倍の平均スピードアップを達成する。7300の面積オーバーヘッドは3.56倍であり、7400の面積オーバーヘッドは7.08倍であり、7500の面積オーバーヘッドは14.15倍であるが、構成7100に対する実行時間改善は、それぞれ平均して4.2倍、8.4倍、および16倍である。したがって、タイル6000などのタイルは、構成7100よりよい性能対面積スケーリングを提供する。
【0060】
タイルまたはアクセラレータによって処理される活性化/重み対の個数を変更することができる。一部のプロセッサ要素は、毎サイクルに、すべてが同一の出力活性化に寄与する16個の活性化/重み対を処理する。一部のプロセッサ要素は、毎サイクルに16個以外の対を処理する。一部のアクセラレータ実施形態は、同一のまたは異なる構成の複数のタイルまたはプロセッサ要素を組み合わせる。
図9は、8×4グリッドに編成された32個のプロセッサ要素9100を含むタイル9000の概略図である。入力スクラッチパッドすなわち小さいローカル・メモリが、活性化入力および重み入力を提供し、活性化パッド9200が、活性化入力を提供し、重みパッド9300が、重み入力を提供する。いくつかの層では、活性化パッド9200が重み入力を提供し、重みパッド9300が活性化入力を提供する。第3のスクラッチパッドであるストレージ・パッド9400は、部分的なまたは完全な出力ニューロンを記憶するのに使用される。
【0061】
バス9110が、処理要素9100をストレージ・パッド9400に接続するために処理要素9100の行ごとに設けられる。部分和が、一時に処理要素の1列ずつ、プロセッサ要素グリッドから読み出され、アキュムレータ9500内に累算され、その後、ストレージ・パッド9400に書き込まれる。共通バス9800を介して処理要素グリッドを排出するのに十分な時間がある。活性化/重み対入力の単一のグループの処理さえ、通常は複数のサイクルにわたって実行され、通常、部分和を読み出す必要が生じる前に、複数の活性化/重み対グループが処理され得るので、これは、処理要素の他の列がまだその対応する活性化および重みを処理している間に、処理要素の各列が、その出力を排出するために共通バス9800に順次アクセスするのに十分な時間を提供する。
【0062】
タイル9000は、入力スクラッチパッドと処理要素グリッドとの間に符号器9600を含み、1つの符号器が、各入力スクラッチパッドに対応する。符号器9600は、値を一連の項に変換する。オプションのコンポーザ列9700が、8b処理要素を維持しながら16b算術の空間構成のサポートを提供する。タイル9000は、空間および時間での活性化および重みの再利用を可能にし、タイル9000にメモリ階層の残りから活性化および重みを供給するのに必要な接続またはワイヤの個数を最小化する。
【0063】
たとえば、タイル9000は、毎サイクルに活性化の4つのウィンドウおよび8つのフィルタを進めることができる。この場合に、重みパッド9300は、フィルタあたり16個の重みを供給し、活性化パッド9200は、ウィンドウあたり16個の対応する活性化を供給する。同一の列に沿った処理要素9100は、同一の入力活性化を共有し、同一の行に沿った処理要素9100は、同一の入力重みを共有する。各PEが毎サイクルに活性化の単一の項および重みの単一の項を処理できるので、符号器9600は、毎サイクルに1項の速度で入力値を項に変換する。各サイクルに、行「i」列「j」の処理要素は、j番目のウィンドウからの入力活性化をi番目のフィルタからの重みによって乗算する。すべての活性化項が現在の重み項を乗算された後に、次の重み項が作られる。処理要素は、すべての対応する活性化項をもう一度サイクルして、これらに新しい重み項を乗算する。すべての重み項および活性化項が処理された後に、積が完成する。3つの活性化項および4つの重み項がある場合には、少なくとも12サイクルが必要である。合計で、タイル9000は、同時に4つのウィンドウ、1ウィンドウあたり16個の活性化、および8つのフィルタすなわち、4×16×8個の活性化/重み対を処理する。
【0064】
実際には、項の個数は、重み値および活性化値にまたがって変化し、その結果、いくつかの処理要素が、その積を作るために他の処理要素より多数のサイクルを必要とする。タイル9000は、すべての現在処理されている活性化/重み対を暗黙のうちにグループとして扱い、異なるグループにまたがって処理を同期化し、タイル9000は、すべての処理要素が現在のグループのすべての項の処理を終了した時に、次のグループの処理を開始する。しかし、これは、多少のスピードアップ可能性を放棄する。
【0065】
いくつかの実施形態では、計算は、16個の独立のグループで進行することを許される。たとえば、第1の同期化グループは、A0,A16,A24,…,A48および重みW0,W16,…,W112を含み、第2のグループは、A1,A17,A25,…,A49および重みW1,W17,…,W113を含み、残りの14個のグループに関しても同様である。グループがグリッドにわたって櫛様パターンを物理的に形成するので、この例を櫛同期化(comb synchronization)と称する。ブース符号器9600の入力のバッファのセットを使用して、グループがお互いの前でスライドすることを可能にすることができる。
【0066】
一部のニューラル・ネットワークは、いくつかの層のみに関して16bのデータ幅または精度を必要とした。一部のニューラル・ネットワークは、活性化のみに関して16bのデータ幅または精度を必要とし、少数の値が、8bより多くを必要とする。いくつかの実施形態では、タイルは、すべての層およびすべての値にまたがって要求されるワーストケース・データ幅をサポートする。しかし、いくつかの実施形態では、タイルは、空間、時間、または空間と時間との両方でのデータ型構成をサポートする。
【0067】
たとえば、タイル設計は、活性化およびオプションで重みに関して、8b処理要素を介する16b計算を可能にすることができる。ただし、他のビット幅を使用することもできる。タイル設計は、その層の一部のみに関して8bより多くを必要とするニューラル・ネットワークに有用である可能性がある。
【0068】
空間構成タイルを、
図10に示す。タイル10000は、複数のまだ変更されていない8b処理要素を使用する。空間構成タイルは、16b値を有する層を処理する時には必ず、余分な処理要素を必要とする。タイル10000は、8bおよび8b、16bおよび8b、ならびに16bおよび16bという重みと活性化との組合せをサポートするように拡張するために、8b処理要素の2×2グリッド10100である。正規化されたピーク計算スループットは、それぞれ1、1/2、および1/4である。16bおよび8bの計算をサポートするために、活性化項は、下位バイトおよび上位バイトに対応する項に分割され、この下位バイトおよび上位バイトは、2つの隣接する処理要素(「PE」)列によってそれぞれ処理される。
【0069】
図10に示された例では、PE(0,0)およびPE(0,1)は、A
0およびA
1の下位バイトを処理し、PE(1,0)およびPE(1,1)は、上位バイトを処理する。行0および1は、それぞれ、前と同様にフィルタ0および1を処理する。処理は、累算副要素4600がデータ・ブロックの上位バイトおよび下位バイトの和を累算し終えるまで進行する。最後に、部分和レジスタが、一時に1列ずつ排出される。コンポーザ列10200が、グリッドの出力に追加される。列0の部分和が読み出される時には、その部分和は、それぞれの一時レジスタ(「tmp」)10300に取り込まれる。次のサイクルに、列1の部分和が、出力バスに現れる。コンポーザ10200の行ごとの加算器が、2つの半分を加算し、最終的な部分和を作る。この例は、2×2グリッドを示すが、この概念は、より大きい処理要素グリッドに変更なしであてはまる。グリッドが、一時に1列ずつ部分和を出力するのに行ごとの共通バスを使用するので、単一のコンポーザ列で十分である。図示されていないが、コンポーザは、新しいセットを導入するのではなく累算列加算器を再利用することができる。一般に、16b活性化のサポートは、2つの隣接する行ごとのプロセッサ要素を必要とする。
【0070】
タイル10000は、重みを2つの行に沿って分割することによって、16b重みをもサポートする。これは、下位バイトおよび上位バイトの4つの組合せのうちの1つにそれぞれ割り当てられた4つの処理要素を必要とする。
図10では、PE(0,0)、PE(1,0)、PE(0,1)、およびPE(1,1)が、それぞれ(A
L,W
L)、(A
H,W
L)、(A
L,W
H)、および(A
H,W
D)を計算する。コンポーザ列内の第2レベル加算器が、適当に行1を0パディングすることによって行からの結果を組み合わせる世話をする。
【0071】
時間構成タイルを使用することもできる。時間構成タイルは、時間構成処理要素を使用する。時間構成処理要素の実施形態を、
図11に示す。処理要素11000は、ネイティブ16b処理要素より低い面積コストで、8b演算と16b演算との両方をサポートする。時間構成タイルは、16b値を処理しなければならない時には必ず、余分なサイクルを必要とする。
【0072】
処理要素11000は、上位バイトおよび下位バイトに属する項への活性化および重みの項の分割と、これらの項の時間的に別々の処理とを可能にする。前ステージ加算器からの出力は、適当に0をパディングされ、拡張精度部分和に加算される。処理される活性化項および重み項のソースに基づく3つのケースすなわち、両方が下位バイトに属する(L/L)、両方が上位バイトに属する(H/H)、または一方が上位バイトに属し、他方が下位バイトに属する(H/LまたはL/H)がある。マルチプレクサ11100が、適当にパディングされた値を選択する。マルチプレクサの選択信号を、タイル内のすべての処理要素の間で共有することができる。8b値の処理は、オーバーヘッドをこうむらない。16b活性化および8b重み(またはその逆)の処理は、1つの余分なサイクルを必要とするが、16bの重みおよび活性化の処理は、3つの余分なサイクルを必要とする。しかし、この時間オーバーヘッドを支払わなければならないのは、処理要素11000を有するタイルに関して実際に16bを必要とする値がある時に限られる。
【0073】
時間構成タイルは、すべての層に関してリソースを予約せず、8bより多くを必要とする値は少数である可能性があるので、空間構成タイルより、処理要素あたりの高いスループットを達成すると期待することができる。しかし、時間構成タイルは、より大きい処理要素と、ブース符号器でのより洗練された制御とを必要とする。一実施形態では、16bへの時間拡張が可能な8b処理要素は、ネイティブ16b処理要素と比較して、22%小さい。いくつかの実施形態では、重みに関する空間構成および活性化に関する時間構成など、空間設計と時間設計との組合せを使用することができる。
【0074】
いくつかのネットワークで、いくつかの層(特に最初の層)に関して、プロファイリングによって判定される必要なデータ型は、時々8bをわずかに超える。たとえば、9bまたは10bが必要であるとわかる。いくつかの実施形態では、これらの層またはネットワークの実行は、未変更の8b処理要素およびブース符号器への些細な変更を用いて可能である。たとえば、第9ビットを必要とする値の処理の場合すなわち、そのビットが1である場合である。8b処理要素は、+27までの計算だけをサポートするので、ブース符号器は、+27を2回送ることによって、効果的に+28を合成することができる。重要なことに、これは、第9ビットが1である必要がある値(9bではすべてが負の値)に関してのみ必要である。追加の利益として、この柔軟性は、ある種のネットワークに関して量子化をより簡単にする。
【0075】
上で提示した実施形態は、値間ビットレベル並列性を活用する。しかし、いくつかの実施形態は、値内ビットレベル並列性を活用し、それを行うために、ビット並列ハードウェアとは異なって活用する。これが可能であるのは、値の項が時間的ではなく空間的に処理される場合であっても処理要素が正しい結果を作るからである。たとえば、2つの入力レーンが、重みごとに割り当てられ、ブース符号器が、毎サイクルに2つまでの項を出力するように変更される場合である。これは、アクセラレータが、値の中のビットレベル並列性を活用することをも可能にし、これは、同期化オーバーヘッドを削減するのに有用である可能性がある。値の中のビットレベル並列性の活用は、それぞれすべての列、行、または行と列との両方に充てんするための重み、活性化、または活性化と重みとの両方の十分な再利用がない場合に、層の利用を改善するのにも有用である可能性がある。これは、たとえば、重みの再利用がない全結合層にあてはまる。この最適化は、全結合層が通常はメモリに束縛されるので、エネルギ効率を助ける。これは、奥行き分離可能な畳み込み層にも有用である。値の中のビットレベル並列性の活用は、すべての行を充てんするのに十分なフィルタがない時にも有用である可能性がある。これは、従来のビット並列ユニットによって活用される値内ビットレベル並列性とは異なり、従来のビット並列ユニットは、値に関わりなくすべてのビットを処理するが、本アクセラレータの実施形態は、有効なビットだけを処理する。
【0076】
空間構成可能な処理要素を有する8bアクセラレータの性能と、ネイティブ16b処理要素を有するアクセラレータの性能とを比較した。8b空間構成可能処理要素は、8bおよび16bの重みおよび活性化をサポートし、8bアクセラレータは、16bアクセラレータと同一の計算面積を使用するようにスケール・アップされた。試験は、GoogleNet-SモデルおよびResnet50-Sモデルを使用して行われた。8b空間構成可能処理アクセラレータは、8bを越える精度を要求した層だけに関して必要とされた複数の処理要素を使用した。8b空間構成可能処理アクセラレータは、ネイティブ16bアクセラレータより高速であり、GoogleNet-Sに関して1.4倍、Resnet50-Sに関して1.2倍高速であった。
【0077】
他の実施形態では、重みワイヤの増加した個数など、他の構成を使用することができる。いくつかの実施形態では、フィルタの個数の増加のみによるスケール・アップによって平均化されたフィルタ間アンバランスに起因するなど、性能が劣線形に改善する。いくつかの実施形態では、同時に処理される活性化の個数を、重みの個数の増加の代わりにまたはこれに加えて増やすことができる。最小限のバッファリング構成との構成設計の組合せ(たとえば、上で参照によって組み込まれた、J.Albericio、A.Delmas、P.Judd、S.Sharify、G.O’Leary、R.Genov、およびA.Moshovos、“Bit-pragmatic deep neural network computing”、in Proceedings of the 50th Annual IEEE/ACM International Symposium on Microarchitecture、MICRO-50’17、382~394頁、2017年を参照されたい)も、活性化にまたがるアンバランスを低減することができる。他の実施形態では、活性化メモリおよび重みメモリを、タイルに沿って分散させ、またはタイルのすべてもしくはグループの間で共有することができる。
【0078】
本発明の実施形態は、圧縮手法(たとえば、これによって参照によって組み込まれる、A.Delmas、S.Sharify、P.Judd、M.Nikolic、およびA.Moshovos、“Dpred: Making typical activation values matter in deep learning computing”、CoRR、vol.abs/1804.06732、2018年を参照されたい)と互換であり、実用的なオフチップ・メモリ構成およびインターフェースと共に良好に動作すると期待することができる。
【0079】
上の説明および関連する図面の諸部分が、ハードウェアの使用を説明しまたは暗示する場合があるが、いくつかの実施形態は、GPU(グラフィック処理ユニット)などのプロセッサ上にソフトウェアでエミュレートされ得、同様の性能強化を生じることができることに留意されたい。さらに、様々な構成要素を、専用とし、共有し、分散させ、または他の構成要素と組み合わせることができ、たとえば、活性化表現および重み表現を供給する活性化メモリおよび重みメモリを、様々な実施形態で専用とし、共有し、分散させ、または組み合わせることができる。
【0080】
本発明の様々な実施形態を詳細に説明した。上で説明した最良の態様の変更またはこれに対する追加を、本発明の性質、趣旨、または範囲から逸脱せずに行うことができるので、本発明は、これらの詳細に意限定されるのではなく、添付の特許請求の範囲のみによって限定される。