(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-16
(45)【発行日】2022-12-26
(54)【発明の名称】複数のプロセッサおよびニューラルネットワークアクセラレータを有するニューラルネットワーク処理システム
(51)【国際特許分類】
G06N 3/063 20060101AFI20221219BHJP
【FI】
G06N3/063
(21)【出願番号】P 2020521420
(86)(22)【出願日】2018-09-26
(86)【国際出願番号】 US2018052831
(87)【国際公開番号】W WO2019079006
(87)【国際公開日】2019-04-25
【審査請求日】2021-09-22
(32)【優先日】2017-10-17
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】テン,シャオ
(72)【発明者】
【氏名】ウン,アーロン
(72)【発明者】
【氏名】シラサオ,アシシュ
(72)【発明者】
【氏名】ディレイ,エリオット
【審査官】金田 孝之
(56)【参考文献】
【文献】米国特許出願公開第2016/0210167(US,A1)
【文献】国際公開第2016/077393(WO,A1)
【文献】Jiantao Qiu et al.,Going Deeper with Embedded FPGA Platform for Convolutional Neural Network,Proceedings of the 2016 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays,The Association for Computing Machinery,2016年02月,Pages 26-35,<DOI: 10.1145/2847263.2847265>
【文献】Yangyang Zhao et al.,PIE: A Pipeline Energy-Efficient Accelerator for Inference Process in Deep Neural Networks,2016 IEEE 22nd International Conference on Parallel and Distributed Systems (ICPADS),IEEE,2016年12月,Pages 1067-1074,ISSN: 1521-9097 <DOI: 10.1109/ICPADS.2016.0141>
【文献】大場 百香,マルチコアニューラルネットワークアクセラレータにおけるデータ転送のブロードキャスト化,電子情報通信学会技術研究報告,一般社団法人電子情報通信学会,2017年03月02日,Vol. 116, No. 510,pp. 165-170,ISSN: 0913-5685
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00- 3/10
(57)【特許請求の範囲】
【請求項1】
畳み込みニューラルネットワーク処理システムであって、
共有メモリと、
前記共有メモリに結合された少なくとも1つのニューラルネットワークアクセラレータとを備え、前記少なくとも1つのニューラルネットワークアクセラレータは、入力データセットに対してニューラルネットワークの層の第1のサブセットの演算を実行し、
前記層の第1のサブセットの前記演算の実行時に中間データセットを生成し、前記中間データセットを前記共有メモリの共有メモリキューに格納するように構成されており、前記ニューラルネットワーク処理システムはさらに、
前記共有メモリに結合され第1のプロセッサ要素と第2のプロセッサ要素とを有するホストコンピュータシステムを備え、
前記第1のプロセッサ要素は、前記第1のプロセッサ要素に動作を実行させる命令を実行するように構成されており、前記動作は、
入力データを前記少なくとも1つのニューラルネットワークアクセラレータに与えることと、
前記少なくとも1つのニューラルネットワークアクセラレータに対し、前記入力データセットに対する前記ニューラルネットワークの前記層の第1のサブセットの前記演算を実行するようシグナリングすること
と、
システム起動またはランタイムパラメータが前記第1のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断することと、
前記システム起動またはランタイムパラメータが前記第1のプロセッサ要素を構成していることに応じて、前記中間データセットを第1のフォーマットから第2のフォーマットに変換することとを含み、
前記第2のプロセッサ要素は、前記第2のプロセッサ要素に動作を実行させる命令を実行するように構成されており、前記動作は、
前記中間データセットを前記共有メモリキューから読み出すことと、
前記ニューラルネットワークアクセラレータが別の入力データセットに対して前記ニューラルネットワークの前記層の第1のサブセットの前記演算を実行している間に、前記中間データセットに対して前記ニューラルネットワークの層の第2のサブセットの演算を実行し出力データセットを生成すること
と、
システム起動またはランタイムパラメータが前記第2のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断することと、
前記システム起動またはランタイムパラメータが前記第2のプロセッサ要素を構成していることに応じて、前記中間データセットを前記1のフォーマットから前記第2のフォーマットに変換することとを含み、
前記層の第1のサブセットは畳み込み層およびマックスプーリング層を含み、前記層の第2のサブセットは全結合層を含む、ニューラルネットワーク処理システム。
【請求項2】
前記第1のプロセッサ要素に、前記入力データを前記少なくとも1つのニューラルネットワークアクセラレータに与えることを実行させる命令は、前記第1のプロセッサ要素に、第1の時間に第1の入力データセットを、第1の時間よりも後の第2の時間に第2の入力データセットを、前記少なくとも1つのニューラルネットワークアクセラレータに与えることを実行させ、
前記第2のプロセッサ要素に、前記層の第2のサブセットの前記演算を実行させる命令は、前記第2のプロセッサ要素に、前記少なくとも1つのニューラルネットワークアクセラレータが前記第2の入力データセットに対して前記ニューラルネットワークの前記層の第1のサブセットの前記演算を実行するのと並行して、前記第1の入力データセットに対して前記層の第2のサブセットの前記演算を実行させる命令を含む、請求項1に記載のニューラルネットワーク処理システム。
【請求項3】
前記第2のプロセッサ要素に、前記中間データセットを前記共有メモリキューから読み出すことを実行させる命令は、前記第2のプロセッサ要素に、前記読み出しの後に前記共有メモリキューが空であることを前記第1のプロセッサ要素に対してシグナリングすることを実行させる命令を含む、請求項1に記載のニューラルネットワーク処理システム。
【請求項4】
前記第1のプロセッサ要素はさらに、前記少なくとも1つのニューラルネットワークアクセラレータが前記入力データに対する前記ニューラルネットワークの前記層の第1のサブセットの実行を完了したときに前記共有メモリキューが満杯であることを前記第2のプロセッサ要素に対してシグナリングすることを前記第1のプロセッサ要素に実行させる命令を、実行するように構成されており、
前記第2のプロセッサ要素は、前記第1のプロセッサ要素からの前記シグナリングに応じて前記中間データセットを前記共有メモリキューから読み出すことを前記第2のプロセッサ要素に実行させる命令を、実行するように構成されている、請求項3に記載のニューラルネットワーク処理システム。
【請求項5】
前記第1のフォーマットは列優先フォーマットであり、前記第2のフォーマットは行優先フォーマットである、請求項1に記載のニューラルネットワーク処理システム。
【請求項6】
前記層の第2のサブセットはソフトマックス層を含む、請求項
1に記載のニューラルネットワーク処理システム。
【請求項7】
方法であって、
ホストコンピュータシステムの第1のプロセッサ要素が、入力データをニューラルネットワークアクセラレータに与えるステップと、
前記第1のプロセッサ要素が、前記入力データに対して
畳み込みニューラルネットワークの層の第1のサブセットの演算を実行するよう前記ニューラルネットワークアクセラレータに対してシグナリングするステップと、
前記ニューラルネットワークアクセラレータが、前記入力データセットに対して前記ニューラルネットワークの前記層の第1のサブセットの前記演算を実行するステップと、
前記ニューラルネットワークアクセラレータが
前記層の第1のサブセットの前記演算の実行時に中間データセットを生成するステップと、
前記ニューラルネットワークアクセラレータが前記中間データセットを共有メモリの共有メモリキューに格納するステップと、
前記第1のプロセッサ要素が、システム起動またはランタイムパラメータが前記第1のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断するステップと、
前記システム起動またはランタイムパラメータが前記第1のプロセッサ要素を構成していることに応じて、前記第1のプロセッサ要素が前記中間データセットを第1のフォーマットから第2のフォーマットに変換するステップと、
前記ホストコンピュータシステムの第2のプロセッサ要素が、前記中間データセットを前記共有メモリキューから読み出すステップと、
前記第2のプロセッサ要素が、システム起動またはランタイムパラメータが前記第1のプロセッサ要素を前記中間データを変換するように構成しているか否かを判断するステップと、
前記システム起動またはランタイムパラメータが前記第2のプロセッサ要素を構成していることに応じて、前記第2のプロセッサ要素が前記中間データセットを前記1のフォーマットから前記第2のフォーマットに変換するステップと、
前記ニューラルネットワークアクセラレータが別の入力データセットに対して前記ニューラルネットワークの前記層の第1のサブセットの前記演算を実行している間に、前記第2のプロセッサ要素が前記中間データセットに対して前記ニューラルネットワークの層の第2のサブセットの演算を実行するステップと、
前記第2のプロセッサ要素が出力データを生成するステップとを含
み、
前記層の第1のサブセットは畳み込み層およびマックスプーリング層を含み、前記層の第2のサブセットは全結合層を含む、方法。
【請求項8】
前記入力データを前記ニューラルネットワークアクセラレータに与えるステップは、前記第1のプロセッサ要素が、第1の時間に第1の入力データセットを、第1の時間よりも後の第2の時間に第2の入力データセットを、前記ニューラルネットワークアクセラレータに与えるステップを含み、
前記層の第2のサブセットの前記演算を実行するステップは、前記ニューラルネットワークアクセラレータが前記第2の入力データセットに対して前記ニューラルネットワークの前記層の第1のサブセットの前記演算を実行するのと並行して、前記第1の入力データセットに対して前記層の第2のサブセットの前記演算を実行するステップを含む、請求項
7に記載の方法。
【請求項9】
前記中間データセットを前記共有メモリキューから読み出すステップは、前記読み出しの後に前記共有メモリキューが空であることを前記第1のプロセッサ要素に対してシグナリングするステップを含む、請求項
8に記載の方法。
【請求項10】
前記第1のプロセッサ要素が、前記ニューラルネットワークアクセラレータが前記入力データに対する前記ニューラルネットワークの前記層の第1のサブセットの実行を完了したときに前記共有メモリキューが満杯であることを前記第2のプロセッサ要素に対してシグナリングするステップと、
前記第2のプロセッサ要素が、前記第1のプロセッサ要素からの前記シグナリングに応じて前記中間データセットを前記共有メモリキューから読み出すステップとをさらに含む、請求項
7に記載の方法。
【請求項11】
前記第1のフォーマットは列優先フォーマットであり、前記第2のフォーマットは行優先フォーマットである、請求項10に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は概してニューラルネットワーク処理システムに関する。
【背景技術】
【0002】
背景
機械学習は、明示的にプログラムされていなくとも動作するようコンピューティングシステムを誘導する科学である。古典的な機械学習は、K平均クラスタリング、線形回帰およびロジスティック回帰、確率的勾配降下法、相関規則学習などを含むさまざまなクラスタリングおよび分類技術を含む。深層学習は、機械学習におけるより新しいフロンティアである。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する、ある種の機械学習アルゴリズムである。深層学習アルゴリズムは、教師なし(たとえばパターン分析)または教師あり(たとえば分類)アルゴリズムとすることができる。深層学習アルゴリズムは、人工ニューラルネットワーク(artificial neural network)(ANN)(本明細書では「ニューラルネットワーク」と呼ぶ)の層を使用して実装することができる。
【0003】
一般的に、ニューラルネットワークは、グラフで接続されたノード(すなわち「ニューロン」)の集まりである。ニューラルネットワーク内のノードは、重み付けされた入力の合計を計算し、その合計に任意選択のバイアスを加算する。このノードの出力は、最終的な総和の関数(「活性化関数」と呼ばれる)である。活性化関数の例は、シグモイド関数、双曲線正接(tanh)関数、正規化線形ユニット(Rectified Linear Unit)(ReLU)関数、および恒等関数を含む。ニューラルネットワークモデルは多くの場合ノードの層に組織され、これが特定のトポロジーならびに対応する重みおよびバイアスを定める。重みおよびバイアスはネットワークパラメータと呼ばれる。
【0004】
一般的に、ニューラルネットワークは、入力層と出力層とを含み、任意で入力層と出力層との間に1つ以上の隠れ層を含み得る。深層学習用途で使用されるニューラルネットワークは、典型的には多数の隠れ層を含み、このことからディープニューラルネットワーク(deep neural network)(DNN)という用語が生まれている。ニューラルネットワークの層は、密に接続することができる(たとえばある層の各ノードは前の層のすべてのノードに完全に接続される)、または疎に接続することができる(たとえばある層の各ノードは前の層のノードの一部にのみ接続される)。畳み込みニューラルネットワーク(convolutional neural network)(CNN)は、畳み込み層と呼ばれる疎に接続された1つ以上の層を含むDNNの一種である。CNNは、画像またはビデオデータの処理によく適している。その他の種類のDNNは、音声およびテキストデータの処理によく適している回帰型ニューラルネットワーク(recurrent neural network)(RNN)を含む。
【発明の概要】
【発明が解決しようとする課題】
【0005】
フィールドプログラマブルゲートアレイ(FPGA)は、ソフトウェアから呼び出された機能を加速させる回路を実装するために使用されてきた。ソフトウェアから呼び出された機能を加速させる回路はハードウェアアクセラレータと呼ばれる。ハードウェアアクセラレータの例は、画像処理ソフトウェアから呼び出すことができるFPGA回路として実装される各種画像フィルタを含む。ハードウェアアクセラレータが、当該ハードウェアアクセラレータを起動するソフトウェアを実行するホストコンピュータシステムを有するシステムにおいて有益であるためには、ハードウェアアクセラレータが提供するパフォーマンスの向上が、ホストコンピュータシステムとハードウェアアクセラレータとの間でデータを移動させることに伴う処理オーバーヘッドよりも大きくなければならない。ホストコンピュータシステムとハードウェアアクセラレータとの間でデータを移動させるのに要する時間が、ハードウェアアクセラレータではなくホストコンピュータシステムが動作を実行するのに要する時間よりも長い場合、より優れた実装は、ハードウェアアクセラレータなしで、ホストコンピュータシステムを含み得る。また、ホストコンピュータシステムを待つ間ハードウェアアクセラレータがアイドルである場合、ハードウェアアクセラレータが提供する総合的なパフォーマンスの利点は少なくなる。
【課題を解決するための手段】
【0006】
概要
開示されているニューラルネットワーク処理システムは、共有メモリと、少なくとも1つのニューラルネットワークアクセラレータと、ホストコンピュータシステムとを備える。ニューラルネットワークアクセラレータは、入力データセットに対してニューラルネットワークの層の第1のサブセットの演算を実行し、中間データセットを生成し、中間データセットを共有メモリの共有メモリキューに格納するように、構成されている。ホストコンピュータシステムは、第1のプロセッサ要素と第2のプロセッサ要素とを有する。第1のプロセッサ要素は、入力データをニューラルネットワークアクセラレータに与えることと、ニューラルネットワークアクセラレータに対し、入力データセットに対するニューラルネットワークの層の第1のサブセットの演算を実行するようシグナリングすることとを第1のプロセッサ要素に実行させる命令を、実行するように構成されている。第2のプロセッサ要素は、中間データセットを共有メモリキューから読み出すことと、ニューラルネットワークアクセラレータが別の入力データセットに対してニューラルネットワークの層の第1のサブセットの演算を実行している間に、中間データセットに対してニューラルネットワークの層の第2のサブセットの演算を実行し出力データセットを生成することとを第2のプロセッサ要素に実行させる命令を、実行するように構成されている。
【0007】
いくつかの実施形態において、第1のプロセッサ要素に、入力データを少なくとも1つのニューラルネットワークアクセラレータに与えることを実行させる命令は、第1のプロセッサ要素に、第1の時間に第1の入力データセットを、第1の時間よりも後の第2の時間に第2の入力データセットを、少なくとも1つのニューラルネットワークアクセラレータに与えることを実行させてもよい。第2のプロセッサ要素に、層の第2のサブセットの演算を実行させる命令は、第2のプロセッサ要素に、少なくとも1つのニューラルネットワークアクセラレータが第2の入力データセットに対してニューラルネットワークの層の第1のサブセットの演算を実行するのと並行して、第1の入力データセットに対して層の第2のサブセットの演算を実行させる命令を含み得る。
【0008】
いくつかの実施形態において、第2のプロセッサ要素に、中間データセットを共有メモリキューから読み出すことを実行させる命令は、第2のプロセッサ要素に、読み出しの後に共有メモリキューが空であることを第1のプロセッサ要素に対してシグナリングすることを実行させる命令を含み得る。
【0009】
いくつかの実施形態において、第1のプロセッサ要素はさらに、少なくとも1つのニューラルネットワークアクセラレータが入力データに対するニューラルネットワークの層の第1のサブセットの実行を完了したときに共有メモリキューが満杯であることを第2のプロセッサ要素に対してシグナリングすることを第1のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。第2のプロセッサ要素は、第1のプロセッサ要素からのシグナリングに応じて中間データセットを共有メモリキューから読み出すことを第2のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【0010】
いくつかの実施形態において、第1のプロセッサ要素はさらに、中間データセットを第1のフォーマットから第2のフォーマットに変換することを第1のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【0011】
いくつかの実施形態において、第2のプロセッサ要素はさらに、中間データセットを第1のフォーマットから第2のフォーマットに変換することを第2のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【0012】
いくつかの実施形態において、第1のプロセッサ要素はさらに、第1のプロセッサ要素または第2のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断することと、第1のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、中間データセットを第1のフォーマットから第2のフォーマットに変換することとを、第1のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。第2のプロセッサ要素はさらに、第1のプロセッサ要素または第2のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断することと、第2のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、中間データセットを第1のフォーマットから第2のフォーマットに変換することとを、第2のプロセッサ要素に実行させる命令を、実行するように構成されていてもよい。
【0013】
いくつかの実施形態において、ニューラルネットワークは畳み込みニューラルネットワークであってもよい。
【0014】
いくつかの実施形態において、層の第1のサブセットは畳み込み層およびマックスプーリング層を含み得る。また、層の第2のサブセットは全結合層を含み得る。
【0015】
いくつかの実施形態において、層の第2のサブセットはソフトマックス層を含み得る。
いくつかの実施形態において、少なくとも1つのニューラルネットワークアクセラレータは、フィールドプログラマブルゲートアレイおよびグラフィック処理ユニットを含み得る。
【0016】
開示されている方法は、ホストコンピュータシステムの第1のプロセッサ要素が、入力データをニューラルネットワークアクセラレータに与えるステップを含む。第1のプロセッサ要素は、入力データに対してニューラルネットワークの層の第1のサブセットの演算を実行するようニューラルネットワークアクセラレータに対してシグナリングし、ニューラルネットワークアクセラレータは、入力データセットに対してニューラルネットワークの層の第1のサブセットの演算を実行する。ニューラルネットワークアクセラレータは中間データセットを生成し、中間データセットを共有メモリの共有メモリキューに格納する。ホストコンピュータシステムの第2のプロセッサ要素が、中間データセットを共有メモリから読み出し、ニューラルネットワークアクセラレータが別の入力データセットに対してニューラルネットワークの層の第1のサブセットの演算を実行している間に、中間データセットに対してニューラルネットワークの層の第2のサブセットの演算を実行する。第2のプロセッサ要素は出力データを生成する。
【0017】
いくつかの実施形態において、入力データをニューラルネットワークアクセラレータに与えるステップは、第1のプロセッサ要素が、第1の時間に第1の入力データセットを、第1の時間よりも後の第2の時間に第2の入力データセットを、ニューラルネットワークアクセラレータに与えるステップを含み得る。層の第2のサブセットの演算を実行するステップは、ニューラルネットワークアクセラレータが第2の入力データセットに対してニューラルネットワークの層の第1のサブセットの演算を実行するのと並行して、第1の入力データセットに対して層の第2のサブセットの演算を実行するステップを含み得る。
【0018】
いくつかの実施形態において、中間データセットを共有メモリキューから読み出すステップは、読み出しの後に共有メモリキューが空であることを第1のプロセッサ要素に対してシグナリングするステップを含み得る。
【0019】
いくつかの実施形態において、この方法は、第1のプロセッサ要素が、ニューラルネットワークアクセラレータが入力データに対するニューラルネットワークの層の第1のサブセットの実行を完了したときに共有メモリキューが満杯であることを第2のプロセッサ要素に対してシグナリングするステップと、第2のプロセッサ要素が、第1のプロセッサ要素からのシグナリングに応じて中間データセットを共有メモリキューから読み出すステップとをさらに含み得る。
【0020】
いくつかの実施形態において、この方法は、第1のプロセッサ要素が中間データセットを第1のフォーマットから第2のフォーマットに変換するステップをさらに含み得る。
【0021】
いくつかの実施形態において、この方法は、第2のプロセッサ要素が中間データセットを第1のフォーマットから第2のフォーマットに変換するステップをさらに含み得る。
【0022】
いくつかの実施形態において、この方法は、第1のプロセッサ要素が、第1のプロセッサ要素または第2のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断するステップと、第1のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、第1のプロセッサ要素が、中間データセットを第1のフォーマットから第2のフォーマットに変換するステップをさらに含み得る。加えて、この方法はまた、第2のプロセッサ要素が、第1のプロセッサ要素または第2のプロセッサ要素のいずれが変換を実行するように構成されることが割り当てられているかを判断するステップと、第2のプロセッサ要素が変換を実行するよう割り当てられているという判断に応じて、第2のプロセッサ要素が、中間データセットを第1のフォーマットから第2のフォーマットに変換するステップとを含み得る。
【0023】
いくつかの実施形態において、ニューラルネットワークは畳み込みニューラルネットワークであってもよい。
【0024】
いくつかの実施形態において、層の第1のサブセットは畳み込み層およびマックスプーリング層を含み得る。また、層の第2のサブセットは全結合層を含み得る。
【0025】
その他の特徴は、以下の詳細な説明および請求項を検討することによって認識されるであろう。
【0026】
上記方法およびシステムの各種局面および特徴は、以下の詳細な説明を再考し図面を参照すると明らかになるであろう。
【図面の簡単な説明】
【0027】
【
図1】一例に係るニューラルネットワークを実装するためのシステムを示すブロック図である。
【
図2】一例に係るコンピューティングシステムを示すブロック図である。
【
図3】一例に係るアクセラレーション回路を示すブロック図である。
【
図4】ある実装例に係る具体例としてのニューラルネットワーク処理システムを示す図である。
【
図5】
図3に示される具体例としてのニューラルネットワークアクセラレータの別の図を示す。
【
図6】ニューラルネットワーク処理システムを、第1のプロセッサ要素とニューラルネットワークアクセラレータと第2のプロセッサ要素との間のデータフローおよび制御シグナリングとともに示す図である。
【
図7】プロデューサコンポーネントおよびコンシューマプロセッサによる入力データセットの並列パイプライン処理を示す図である。
【
図8】ニューラルネットワーク処理システムにおいてプロデューサとしてともに動作する第1のプロセッサ要素およびニューラルネットワークアクセラレータが実行するプロセスのフローチャートを示す図である。
【
図9】ニューラルネットワーク処理システムにおいてコンシューマとして動作する第2のプロセッサ要素が実行するプロセスのフローチャートを示す図である。
【
図10】別の具体例としての実装例に係るニューラルネットワーク処理システムを示す図である。
【
図11】一例に係るプログラマブルICを示すブロック図である。
【
図12】プログラマブルICのFPGA実装例を示す図である。
【発明を実施するための形態】
【0028】
以下の説明では、本明細書で提示する具体例を説明するために数多くの具体的な詳細事項を記載する。しかしながら、その他の1つ以上の例および/またはこれらの例の変形が以下の具体的な詳細事項すべてがなくても実施され得ることは、当業者にとって明らかなはずである。他の場合において、周知の特徴は、本明細書における例の説明が不明瞭になることを避けるべく、詳細に記載していない。説明し易くするために、同一の参照番号を異なる図面で使用して同一要素または同一要素のその他の例を示す場合がある。
【0029】
開示されている方法およびシステムは、畳み込みニューラルネットワーク(CNN)、回帰型ニューラルネットワーク(RNN)、および行列乗算または畳み込み等の演算を伴うその他のニューラルネットワークに適用することができる。CNNは、演算の層を有する有向グラフとして表すことができる。各層は、CONV(Convolution)(畳み込み)、または画像から列への変換(image-to-column conversion)(「im2col」)、汎用行列乗算(general matrix multiplication)(「GEMM」)、活性化(たとえば正規化線形ユニット、「RELU」関数)、プーリング(たとえば「maxpool」)、局所応答正規化(local response normalization)(LRN層)、および内積(たとえば「全結合」(fully connected)(FC)層)等の、1つ以上の演算を必要とし得る。各層への入力は、すべて行列で表される、画像または音声サンプルおよび訓練された重み等のデータである。
【0030】
開示されている実装例は、ホストコンピュータシステムとニューラルネットワークアクセラレータとを含むニューラルネットワーク処理システムに適している。ホストコンピュータシステムは、ニューラルネットワーク処理の全体的な流れを制御するソフトウェアを実行し、ニューラルネットワークアクセラレータは、ニューラルネットワークの選択された層における演算のためのハードウェアアクセラレータである。簡潔にするために、ホストコンピュータシステムを「ホスト」と呼ぶこともあり、ニューラルネットワークアクセラレータを代わりに「アクセラレーション回路」、「カーネルアクセラレータ」または「カーネルアクセラレータ回路」と呼ぶこともある、または代わりにそう呼ぶことがある。
【0031】
発明者らは、CNNのような用途では、CNNのいくつかの層をニューラルネットワークアクセラレータ上で実装し他の層をホスト上で実装することにより、パフォーマンスの利点を実現できることを発見した。しかしながら、CNNの順伝播のいくつかの演算がホスト上で実行されるとき、ニューラルネットワークアクセラレータはアイドルの場合があり、これはニューラルネットワークアクセラレータの利用効率および演算効率を低下させる。開示されている方法およびシステムは、ニューラルネットワークアクセラレータによるアイドリングをほぼ排除しユーザ設定可能パラメータを提供することにより、ホストとニューラルネットワークアクセラレータとの間で作業負荷のバランスを取り、パフォーマンスを改善する。
【0032】
開示されている手法では、ニューラルネットワークアクセラレータのアイドル時間を短縮するために、ホストの第1のプロセッサ要素とニューラルネットワークアクセラレータとが、ホストの第2のプロセッサ要素と、パイプライン化される。第1のプロセッサ要素およびニューラルネットワークアクセラレータはともにプロデューサとして機能し、ニューラルネットワークの層の第1のサブセットのニューラルネットワーク演算を実行する。第2のプロセッサ要素は、ニューラルネットワークアクセラレータからの処理済みのデータのコンシューマとして機能し、ニューラルネットワークの層の第2のサブセットの演算を実行する。第1のプロセッサ要素および第2のプロセッサ要素は、共有メモリキューの調整された使用を通じて協働でニューラルネットワークアクセラレータをビジー状態に保つ。本明細書で使用する「プロセッサ要素」は、コンピュータシステムのプロセッサコア、異種プロセッサ回路、または1つ以上のプロセッサコアもしくはプロセッサ回路上で実行されるスレッドであってもよい。
【0033】
次に図面を参照すると、
図1は、一例に係るニューラルネットワークを実装するためのシステム100を示すブロック図である。システム100は、コンピュータシステム102と、1つ以上のコンピュータシステム108とを含む。コンピュータシステム102は、1つ以上の設計ツール104を提供するソフトウェアを実行するように構成された従来のコンピューティングコンポーネントを含む。各コンピュータシステム108は1つ以上のニューラルネットワーク110を実装する。ニューラルネットワーク110は、アプリケーション112、アクセラレーションライブラリ114、および1つ以上のハードウェアアクセレレータ116を用いて実装される。
【0034】
一例において、ハードウェアアクセラレータ116は、フィールドプログラマブルゲートアレイ(FPGA)等のプログラマブル集積回路(IC)を含む。アクセラレーションライブラリ114は、ハードウェアアクセラレータ116とやり取りするためのアプリケーションプログラミングインターフェイス(application programming interface)(API)を提供する。アクセラレーションライブラリ114は、ニューラルネットワーク層および他の種類のニューラルネットワーク構造の予め定められ最適化された実装を含む、ニューラルネットワーク機能を提供するライブラリを含むこともできる。したがって、ニューラルネットワーク110は、ハードウェアアクセラレータ116において実装されるハードウェア部分と、アクセラレーションライブラリ114において実装されるソフトウェア部分との両方を含むことができる。アプリケーション112は、アクセラレーションライブラリ114のAPIを呼び出して、ハードウェアアクセラレータ116をプログラムおよび制御することにより、ニューラルネットワーク116を実装する。
【0035】
設計者は、設計ツール104とやり取りすることによってニューラルネットワーク110を定義する。設計ツール104は、ハードウェアアクセラレータ116をプログラミングするためのファイル(たとえばFPGAのためのコンフィギュレーションビットストリーム)、アクセラレーションライブラリ114を提供するファイル、およびアプリケーション112を提供するファイルを生成することができる。設計者は、レジスタ転送言語(register transfer language)(RTL)を用いて、またはC、C++、OpenCLなどのようなプログラミング言語を用いて、またはRTLとプログラマブル言語との組み合わせを用いて、ニューラルネットワーク110のハードウェア部分を定義することができる。ユーザは、C、C++、OpenCLなどのようなプログラミング言語を用いてニューラルネットワーク110のソフトウェア部分を定義することができる。設計ツール104は、ソフトウェア定義ニューラルネットワークをコンパイルすることにより、ハードウェアアクセラレータ116をプログラミングするためのファイルおよびアクセラレーションライブラリ114のためのライブラリファイルを生成する。設計者は、クラスライブラリ、テンプレートライブラリなどを提供するライブラリ106を用いることにより、ニューラルネットワーク110のハードウェア部分およびソフトウェア部分の開発を支援することができる。
【0036】
ユーザは、プログラミング言語(たとえばC、C++、Pythonなど)を用いてアプリケーション112を定義することができる。ユーザは、Caffe、TensorFlow(商標)、MXNetなどのようなニューラルネットワークフレームワークおよびライブラリを利用することができる。
【0037】
図2は、一例に係るコンピューティングシステム108を示すブロック図である。コンピューティングシステム108は、ハードウェア204と、ハードウェア204上で実行されるソフトウェア206とを含む。ハードウェア204は、処理システム210と、システムメモリ216と、ストレージデバイス(「ストレージ218」)と、ハードウェアアクセラレータ116とを含む。ソフトウェア206は、オペレーティングシステム(OS)244と、アクセラレーションライブラリ114と、アプリケーション112とを含む。処理システム210、システムメモリ216、およびストレージ218は、本明細書に記載のホストコンピュータシステムを構成する。
【0038】
処理システム210は、マイクロプロセッサ212と、サポート回路214と、周辺バス215とを含む。マイクロプロセッサ212は、x86ベースのプロセッサ、ARM(登録商標)ベースのプロセッサなどのような、任意の種類の汎用中央処理装置(CPU)とすることができる。マイクロプロセッサ212は、1つ以上のコアと、対応付けられた回路(たとえばキャッシュメモリ、メモリ管理ユニット(MMU)、割り込みコントローラなど)とを含み得る。マイクロプロセッサ212は、本明細書に記載の1つ以上の動作を実行しシステムメモリ216および/またはストレージ218に格納することができるプログラムコードを実行するように構成されている。サポート回路214は、マイクロプロセッサ212と協働することによりマイクロプロセッサ212、システムメモリ216、ストレージ218、ハードウェアアクセラレータ116、または任意の他の周辺デバイスの間のデータフローを管理する各種デバイスを含む。たとえば、サポート回路214は、チップセット(たとえばノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど)、電圧レギュレータ、ファームウェア(たとえばBIOS)などを含み得る。サポート回路214は、マイクロプロセッサ212と、ハードウェアアクセラレータ116等の各種周辺機器が接続される周辺バス215との間のデータフローを管理する。いくつかの例において、マイクロプロセッサ212は、チップセット(たとえばノースブリッジ、サウスブリッジなど)の機能の全部または実質的な部分を吸収する、システムインパッケージ(System-in-Package)(SiP)、システムオンチップ(System-on-Chip)(SoC)などであってもよい。周辺バス215は、周辺コンポーネント相互接続エクスプレス(Peripheral Component Interconnect Express)(PCIe)等の拡張バス規格を実装することができる。この例において、処理システム210はハードウェアアクセラレータ116から分離されたものとして示されている。以下でさらに説明するその他の例では、処理システム210およびハードウェアアクセラレータ116を、システムオンチップ(SoC)を用いて同一の集積回路(IC)上に実装することができる。
【0039】
システムメモリ216は、実行可能な命令およびデータ等の情報を格納し取り出すことを可能にするデバイスである。システムメモリ216は、たとえばダブルデータレート(double-data rate)(DDR)ダイナミックRAM(DRAM)等の1つ以上のランダムアクセスメモリ(RAM)モジュールを含み得る。ストレージデバイス218は、ローカルストレージデバイス(たとえば1つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク)および/またはコンピューティングシステム108が1つ以上のネットワークデータストレージシステムと通信することを可能にするストレージインターフェイスを含む。ハードウェア204は、グラフィックカード、ユニバーサルシリアルバス(USB)インターフェイスなどのような、コンピューティングシステムのさまざまなその他の従来のデバイスおよび周辺機器を含み得る。
【0040】
ハードウェアアクセラレータ116は、プログラマブルIC228と、不揮発性メモリ(non-volatile memory)(NVM)224と、RAM226とを含む。プログラマブルIC228は、FPGAなどであってもよい、または、FPGAなどを有するSoCであってもよい。NVM224は、フラッシュメモリなどのような任意の種類の不揮発性メモリを含み得る。RAM226は、DDR DRAMなどを含み得る。プログラマブルIC228は、NVM224およびRAM226に結合される。プログラマブルIC228はまた、処理システム210の周辺バス215に結合される。
【0041】
OS244は、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)などのような、当該技術で周知の任意のコモディディオペレーティングシステムであればよい。アクセラレーションライブラリ114は、ハードウェアアクセラレータ116のコマンドおよび制御のためのAPIを提供するドライバおよびライブラリを含む。アプリケーション112は、ニューラルネットワークを実装するためにアクセラレーションライブラリ114のAPIを呼び出すマイクロプロセッサ212上で実行されるソフトウェアを含む。
【0042】
動作時、プログラマブルIC228はアクセラレーション回路230で構成される。アクセラレーション回路230は一般的にベースプラットフォーム230Aとニューラルネットワークアクセラレータ230Bとを含む。たとえば、アクセラレーション回路230は、スタティック領域234とプログラマブル領域236とを用いて実装することができる。スタティック領域234は、周辺バス215、NVM224、およびRAM226へのインターフェイスを提供するためのサポート回路240を含む。プログラマブル領域236は、1つ以上のニューラルネットワークアクセラレータ(「カーネル238」)を含み得る。ベースプラットフォーム230Aはスタティック領域234を用いて実装し、ニューラルネットワークアクセラレータ230Bはプログラマブル領域236を用いて実装する。別の例において、ベースプラットフォーム230Aは、プログラマブル領域236の一部を用いて実装することもできる。したがって、いくつかの例において、プログラマブル領域236はいくつかのインターフェイス回路も含む。いくつかの例において、アクセラレーション回路230は、各々をニューラルネットワークアクセラレータ238で個別に構成することができる2つ以上のプログラマブル領域236を含み得る。
【0043】
スタティック領域234は、その回路がプログラマブル領域236の再構成にわたって一定のままであるという点で「スタティック」である。一例において、サポート回路240は、PCIeエンドポイント回路、ダイレクトメモリアクセス(DMA)コントローラ、相互接続、メモリコントローラ、メモリインターフェイス回路(たとえばDDRインターフェイス)、デカップラ回路(部分的再構成をサポートする)、フラッシュプログラマ、デバッグ回路などを含む。いくつかの例において、プログラマブル領域236はサポート回路240のうちのいずれも含んでいない。他の例において、いくつかのサポート回路はプログラマブル領域236に実装される。そのような場合、プログラマブル領域236は「拡張されたプログラマブル領域」と呼ぶことができる。いずれの場合でも、一例において、PCIe回路およびDMA回路等のいくつかのサポート回路240は常にスタティック領域234に存在する。
【0044】
図3は、一例に係るアクセラレーション回路230を示すブロック図である。アクセラレーション回路230は、サポート回路240とニューラルネットワークアクセラレータ238とを含む。この例において、サポート回路240は、PCIeエンドポイント回路302と、PCIe DMAコントローラ304と、相互接続回路306と、メモリコントローラ310と、メモリインターフェイス312とを含む。サポート回路240は、明確にするために省略されている他の回路(たとえばデカップラ回路、デバッグ回路など)を含み得る。PCIeエンドポイント302は、周辺バス215への物理インターフェイスを提供する。PCIe DMAコントローラ304は、RAM226およびニューラルネットワークアクセラレータ238へのDMA動作を容易にする。相互接続306は、PCIe DMAコントローラ304をメモリコントローラ310およびニューラルネットワークアクセラレータ238に結合する。メモリコントローラ310はメモリインターフェイス312に結合される。メモリインターフェイス312はRAM226に結合される。
【0045】
動作時、アクセラレーションライブラリ114は、PCIe DMAコントローラ304を介して直接RAM226にアクセスすることができる。アクセラレーションライブラリ114はまた、PCIe DMAコントローラ304を介してニューラルネットワークアクセラレータ238にアクセスすることもできる。ニューラルネットワークアクセラレータ238は、メモリコントローラ310を介してRAM226にアクセスすることができる。データは、システムメモリ216とRAM226との間のDMA動作を用いて、ソフトウェア206とニューラルネットワークアクセラレータ238との間でやり取りすることができる。
【0046】
この例において、ニューラルネットワークアクセラレータ238は、インターフェイス330、331、および332を用いて相互接続306と通信する。特に、これらのインターフェイスは、第1の読出インターフェイス330と、第2の読出インターフェイス331と、読出/書込インターフェイス332とを含む。たとえば、読出インターフェイス330は、ニューラルネットワークアクセラレータ238を制御するための制御インターフェイスとして使用することができる。読出インターフェイス331は、メモリインターフェイス312のうちの第1のメモリインターフェイスを介してRAM226から読み出すために使用することができる。読出/書込インターフェイス332は、メモリインターフェイス312のうちの第2のメモリインターフェイスを介してRAM226から読み出しおよび書き込みをするために使用することができる。
【0047】
ニューラルネットワークアクセラレータ238は、相互接続インターフェイス340と、制御ロジック342と、処理回路341とを含む。処理回路341は、フォーマッタ回路344回路(たとえばIM2COL)と、読出制御回路346と、マルチプレクサ356と、先入れ先出し回路(「FIFO358」)と、行列乗算器アレイ362と、ReLUスケーラ回路364と、プーリング回路366(たとえばmaxpool)と、マルチプレクサ368と、FIFO354と、書込制御回路352と、キャッシュ348と、読出制御回路350と、FIFO360とを含む。相互接続インターフェイス340は、インターフェイス330、331および332と、制御ロジック342と、処理回路341とに結合される。相互接続インターフェイス340は、制御ロジック342とインターフェイス330との間の通信、ならびに処理回路341とインターフェイス331および332との間の通信を容易にするために、スイッチ、クロックコンバータなどを含み得る。
【0048】
この例において、相互接続インターフェイス340は、フォーマッタ回路344、読出制御回路346、キャッシュ348、および書込制御回路352それぞれの入力に結合される。フォーマッタ回路344および読出制御回路346それぞれの出力は、マルチプレクサ356の入力に結合される。マルチプレクサ356の出力は、FIFO358の入力に結合される。FIFO358の出力は、行列乗算器アレイ362の第1の入力に結合される。キャッシュ348の出力は、読出制御回路350の入力に結合される。読出制御回路350の出力は、FIFO360の入力に結合される。FIFO360の出力は、行列乗算器アレイ362の第2の入力に結合される。行列乗算器アレイ362の出力は、ReLUスケーラ364の入力に結合される。ReLUスケーラ364の出力は、プーリング回路366の入力およびマルチプレクサ368の入力に結合される。プーリング回路366の出力は、マルチプレクサ368の別の入力に結合される。マルチプレクサ368の出力は、FIFO354の入力に結合される。FIFO354の出力は、書込制御回路352に結合される。
【0049】
動作時、行列乗算器アレイ362は、ニューラルネットワークを実装するための行列乗算演算を実行する。行列乗算器アレイ362の入力は、FIFO358からの入力活性化行列と、FIFO360からの重み行列とを受ける。入力活性化行列は、読出制御回路346を用いてRAM226から直接読み出すことができる。これに代えて、入力活性化をRAM226から読み出し、行列乗算器アレイ362に入力するためにフォーマッタ回路344によって処理してもよい。重み行列は、読出制御回路350によってRAM226から読み出され、キャッシュ348にキャッシュされてもよい。ReLUスケーラ364は、活性化関数を実行し、行列乗算器アレイ362の出力をスケーリングすることができる。プーリング回路366は、行列乗算器アレイ362のスケーリングされた出力に対して最大プーリング関数を実現できる。一例において、プーリング回路366はCLBまたは他のコンフィギュラブルロジックを用いて実装される。プーリング回路366またはReLUスケーラ364いずれかの出力を、FIFO354に格納することができる。書込制御回路352は、FIFOのデータをRAM226に書き込む。制御ロジック342は、フォーマッタ回路344、読出制御回路346、マルチプレクサ356および368、読出制御回路350、ReLUスケーラ364、プーリング回路366、および書込制御回路352等の、処理回路341内のさまざまな回路を制御する。
【0050】
図4は、ある実装例に係る具体例としてのニューラルネットワーク処理システム400を示す。このシステムは、ニューラルネットワークアクセラレータ238に通信可能に結合されたホストコンピュータシステム402を含む。ホストコンピュータシステム402は、
図2に示されるように、処理システム210、システムメモリ216、およびストレージ218を含み得る。ホストコンピュータシステム402は、機械学習(ML)フレームワーク410およびニューラルネットワークアクセラレータ(KA)インターフェイス412によって特別にプログラムされる。
図1のアプリケーション112に対応するMLフレームワークプログラムは、特定のニューラルネットワークアプリケーション、たとえば画像または音声処理を指定し、
図1のようにアクセラレーションライブラリとして実装することができるKAインターフェイスは、MLフレームワークからのニューラルネットワーク処理を求める要求に応じて、ニューラルネットワークアクセラレータ238上でニューラルネットワーク演算を開始する。ニューラルネットワークアクセラレータ238はRAM226に結合され、ホストとニューラルネットワークアクセラレータとはRAMを介して通信する。ニューラルネットワークアクセラレータは一組のコンフィギュレーションレジスタ408を有する。コンフィギュレーションレジスタは、メモリバッファのアドレスをRAM226に格納するため、ならびに、汎用行列乗算(GEMM)のための行列次元および畳み込みのためのストライド/ウィンドウ等の、ニューラルネットワーク演算のためのコンフィギュレーションパラメータを格納するために、KAインターフェイス412にアクセスすることができる。
【0051】
KAインターフェイス412は、ホスト402上で実行する2つのプロセッサ要素として動作する。第1のプロセッサ要素はニューラルネットワークアクセラレータとともに演算を開始し、第2のプロセッサ要素はニューラルネットワークアクセラレータからの出力データを用いてニューラルネットワーク処理を完了する。第1および第2のプロセッサ要素ならびにニューラルネットワークアクセラレータは、RAM226内の共有メモリキュー(図示せず)から動作する。第1のプロセッサ要素は、処理すべきデータをニューラルネットワークアクセラレータに入力し、ニューラルネットワークアクセラレータは、指定されたニューラルネットワーク演算をこの入力データに対して実行し、出力データを共有メモリキューに格納する。第1のプロセッサ要素は、共有メモリキューが、処理されたデータで満杯であることを第2のプロセッサ要素に対してシグナリングする。第2のプロセッサ要素は、処理されたデータを共有メモリキューから読み出し、その後、共有キューが空であることを第1のプロセッサ要素に対してシグナリングする。第1のプロセッサ要素は、共有メモリキューが空であるというシグナルを受けると、別のデータセットをニューラルネットワークアクセラレータに入力することができる。ニューラルネットワークアクセラレータが次の入力データセットを処理している間、第2のプロセッサ要素は、前の入力データセットから得た、処理されたデータに対し、残りのニューラルネットワーク演算を実行する。
【0052】
開示されている手法は、どの特定のハードウェアプラットフォームにも限定されない。しかしながら、当業者に基準系を提供することを目的として、ニューラルネットワークアクセラレータは、Xilinx社から入手可能なKINTEX(登録商標) ULTRASCALE(商標)115デバイス上に実装することができる。RAM226は、ニューラルネットワークアクセラレータとともにプリント回路基板に搭載されたDDR SDRAMであり、RAMは、ニューラルネットワークアクセラレータにデータを入力するための1つのRAMおよびニューラルネットワークアクセラレータからの出力データを格納するための別のRAM等の、複数のRAMデバイスを含み得る。ホスト402とRAMとの間、およびホストとニューラルネットワークアクセラレータとの間のインターフェイスは、周辺コンポーネント相互接続エクスプレスPCIEである。ニューラルネットワークアクセラレータは、ダイレクトメモリアクセス(DMA)チャネルを用いて、ホストメモリの一部をRAMおよびコンフィギュレーションレジスタ408にマッピングする。ホストコンピュータシステム402は、MLフレームワーク410およびKAインターフェイス412を実行するのに適した任意のコンピュータシステムまたはコンピュータシステムの組み合わせもしくはネットワークとすることができる。MLフレームワークは、TensorFlow(商標)、Caffe、およびMXNet等のプログラミングパッケージを用いて指定することができる。
【0053】
KAインターフェイス412は、ニューラルネットワークアクセラレータ238による処理のためのニューラルネットワーク要求をMLフレームワーク410から受ける。処理のためにニューラルネットワーク要求をニューラルネットワークアクセラレータに送信する前に、KAインターフェイスは、ニューラルネットワークアクセラレータと共有するRAM226に、ニューラルネットワークの層に対応付けられた重み行列を書き込む。すべての重み行列を連続ブロックとして共有メモリに書き込むことにより、DMA動作の数およびオーバーヘッドを低減し、ニューラルネットワークの層における畳み込みまたは行列乗算のために重みが必要なときにニューラルネットワークアクセラレータが重みを確実に利用できるようにする。
【0054】
MLフレームワーク410からニューラルネットワーク要求を受けたことに応じて、KAインターフェイス412は、層ごとの命令のグループをアセンブルして命令パッケージにし、この命令パッケージをRAM226に書き込む。層ごとの各命令は、ニューラルネットワークのそれぞれの層の処理を指定する。加えて、層ごとの各命令は、共有メモリ内の組み合わされた重み行列のベースアドレスからの重み行列のそれぞれのオフセットを指定する。ニューラルネットワークの各層の処理は、重み行列のうちの対応する1つの行列にアクセスする。層ごとの命令はまた、異なる層における異なるニューラルネットワーク演算のためのコンフィギュレーションパラメータを指定する。たとえば、コンフィギュレーションパラメータは、スケーリングファクタ、畳み込みウィンドウおよびストライド、マックスプール(maxpool)処理のための行列次元、および活性化関数を指定することができる。コンフィギュレーションパラメータはさらに、RAM内の命令パッケージのベースアドレスを含む。ニューラルネットワークの異なる層は、ニューラルネットワーク演算の異なるセットを必要とする可能性がある。
【0055】
KAインターフェイス412はさらに、ニューラルネットワークアクセラレータ238のコンフィギュレーションレジスタ408にコンフィギュレーションパラメータを設定する。コンフィギュレーションパラメータは、重み行列のベースアドレス、入出力データ行列のベースアドレス、および入出力データ行列のベースアドレスからのオフセットを含む。重み行列を「A」と呼び、入力データ行列を「B」と呼び、出力データ行列を「C」と呼ぶことがある。
【0056】
命令のパッケージが処理できる状態であることを示すKAインターフェイス412からの信号に応じて、ニューラルネットワークアクセラレータ238は、命令パッケージからの層ごとの命令を逐次的に処理する。命令のパッケージは、ニューラルネットワークアクセラレータがニューラルネットワークの層の指定された処理を実行するときに従うプログラムまたはステートマシンを効果的に指定する。
【0057】
図5は、
図3の、具体例としてのニューラルネットワークアクセラレータ238の別の図を示す。マージされた重み行列520は、ホストによって書き込まれ、RAM226の連続アドレスに格納される。具体例としての応用例において、命令パッケージ516内の層ごとの命令は、ニューラルネットワークの層において実行されるべきニューラルネットワーク演算のセット、ならびに、スケーリング、マックスプール次元、および活性化関数のためのコンフィギュレーションパラメータを指定する。ニューラルネットワーク演算の異なるセットを命令パッケージ内の層ごとの命令のうちの異なる命令において指定することにより、ニューラルネットワークアクセラレータによる層ごとの特定の処理を指示することができる。
【0058】
命令パッケージ516からの層ごとの命令を処理する際、ニューラルネットワークアクセラレータは命令を逐次的に処理する。たとえば、第1の層ごとの命令を処理し、続いて、命令パッケージの第2の層ごとの命令を処理する。第1の層ごとの命令を処理する際、ニューラルネットワークアクセラレータ238は、RAM226内のB/Cバッファ518の第1の部分から入力データを読み出し、RAM内のB/Cバッファの第2の部分へ出力データを書き込む。第2の層ごとの命令を処理する際、ニューラルネットワークアクセラレータは、B/Cバッファの第2の部分から入力データを読み出し、B/Cバッファの第1の部分へ出力データを書き込む。ニューラルネットワークアクセラレータはその後、連続する層ごとの命令ごとに、入力データおよび出力データのために使用するB/Cバッファの部分を交互に使用する。
【0059】
ニューラルネットワークアクセラレータ238は、コンフィギュレーションレジスタ408と、ディスパッチおよびアドレッシングロジック回路502(
図3の読出および書込制御を実現する)と、フォーマッタ回路344と、畳み込みまたは行列乗算器回路362と、正規化線形ユニット(ReLU)およびスケーリング回路364と、プーリング回路366とを含む。マルチプレクサ356および368は、指定されたニューラルネットワーク演算に従いディスパッチおよびアドレッシングロジックによって制御される。コンフィギュレーションレジスタ内のコンフィギュレーションデータは、フォーマッタ回路、行列乗算器回路、ReLUスケーリング回路、およびプーリング回路のコンフィギュレーションパラメータを提供する。
【0060】
ディスパッチおよびアドレッシング回路502は、命令パッケージ516から層ごとの命令を読み出し、作業要求において参照されるデータを用いて指定されたニューラルネットワーク演算を開始する。ディスパッチおよびアドレッシング回路は、マルチプレクサ356を制御して、層ごとの命令において指定されたパラメータに従い、RAM226から読み出された入力データとフォーマッタ回路344からのフォーマットされたデータとの間で選択を行う。フォーマッタ回路344は、入力データを、MLフレームワークから提供されたフォーマットから、畳み込みまたは行列乗算器回路362に適したフォーマットに変換する。たとえば、ある実装例において、フォーマッタ回路は、画像データを列データに変換する(im2col)。別の実装例において、フォーマッタ回路は、行優先または列優先フォーマットを、計算アレイジオメトリに一致するカスタムハイブリッド行/列優先フォーマットに変換する。畳み込みまたは行列乗算器回路362は、入力データと、重み行列520から選択された重み行列との間の行列乗算を実行する。ある実装例において、行列乗算回路362は、乗算器-アキュムレータ回路のシストリックアレイである。ReLU回路364は、ニューラルネットワークに対する活性化関数およびスケーリング関数を実現する。具体例としての応用例において、プーリング回路366は、後続の層に課される計算要件を減じるために、畳み込み層間のデータの空間サイズを縮小する。空間サイズの縮小は、過剰適合を回避するのにも役立つ。具体例としての応用例において、プーリング回路は、マックスプール関数を実現する。ディスパッチおよびアドレッシング回路は、マルチプレクサ368を制御することにより、ReLUおよびスケーリング回路364からのデータと、B/Cバッファ518に出力行列として格納するためのプーリング回路366からのデータとの間で選択を行う。
【0061】
図6は、ニューラルネットワーク処理システムを、第1のプロセッサ要素602とニューラルネットワークアクセラレータ238と第2のプロセッサ要素604との間のデータフローおよび制御シグナリングとともに示す。番号が付された円はこのシステム内で機能および制御が実行される順序を示し、破線はデータおよび制御信号の流れを表す。第1のプロセッサ要素602が第2のプロセッサ要素604からキュー空信号を受けると(1)、第1のプロセッサ要素は、ニューラルネットワークアクセラレータ238による処理のために入力データセット610をRAM608に反映することができる(2)。第1のプロセッサ要素は、入力データセットをRAMに書き込むと、入力データセットに対する指定されたニューラルネットワーク演算の実行を開始するようニューラルネットワークアクセラレータにシグナリングする(3)。
【0062】
ニューラルネットワークアクセラレータは、RAM608から入力データセット610を読み出し(4)、ニューラルネットワーク演算の指定されたサブセットを実行する。畳み込みニューラルネットワークの具体例としての実装例において、ニューラルネットワークアクセラレータは、畳み込み層、ReLU、およびマックスプーリング層の演算を実行する。ニューラルネットワークアクセラレータは、全結合層の演算を実行することもできる。しかしながら、パフォーマンスを改善するために、第2のプロセッサ要素604が全結合層の演算を実行する。ニューラルネットワークアクセラレータは、RAM612内の共有メモリキュー614に出力データを格納し、処理が完了すると、完了したことを第1のプロセッサ要素602に対してシグナリングする(6)。ニューラルネットワークアクセラレータからの出力データは、第2のプロセッサ要素604が出力データをさらに処理する実装例においては中間データセットとみなすことができる。RAM608および612は、実装要件に応じて、
図5に示されるような単一のRAM226であってもよく、または物理的に別々のRAMであってもよい。
【0063】
いくつかの実装例において、ニューラルネットワークの層の処理全体を、第1のプロセッサ要素または第2のプロセッサ要素のいずれがニューラルネットワークアクセラレータからの出力データのデータ変換を実行するかについてのユーザ設定を通じて、第1のプロセッサ要素と第2のプロセッサ要素との間で均等化することができる。ニューラルネットワークアクセラレータによるアイドリングは、第1のプロセッサ要素と第2のプロセッサ要素との間で処理を均等化することによって最小にすることができる。ニューラルネットワークアクセラレータの利用は、ホストの処理とニューラルネットワークアクセラレータの処理とが等しくなる方向に向かうほど大きくなる。データフォーマットが、ホストが入力データを受けるときのデータフォーマットと異なる場合、データ変換は、ニューラルネットワークアクセラレータがより効率的にニューラルネットワーク演算を実行した結果である。データフォーマット変換が実行される理由は、ホストデータフォーマットが確立されたMLフレームワークフォーマット(たとえばMXNetの行優先)に従う一方で、ニューラルネットワークアクセラレータはパフォーマンスを最大にするためにカスタムフォーマットを使用できることにある。たとえば、ニューラルネットワークアクセラレータは、ニューラルネットワークアクセラレータおよびその行列乗算器のアーキテクチャに基づいて、列優先フォーマット、画像行フォーマット、または別のフォーマットを使用することができる。
【0064】
ユーザが、データ変換を実行するように第1のプロセッサ要素602を構成した場合、第1のプロセッサ要素は、共有メモリキュー614内の出力データを変換し(6.5)、次いで、キューが満杯であることを第2のプロセッサ要素604にシグナリングする(7)。第1のプロセッサ要素からキュー満杯信号を受けたことに応じて、第2のプロセッサ要素は、共有メモリキューの内容をRAM612内の別のワークスペースにコピーし(8)、次いで、共有メモリキューが空であることを第1のプロセッサ要素にシグナリングする(1)。共有メモリキューが空であることを第2のプロセッサ要素がシグナリングすると、前の入力データセットについてニューラルネットワークアクセラレータが生成した出力データに対して第2のプロセッサ要素がニューラルネットワークの層の指定されたサブセットの演算を実行している間に、第1のプロセッサ要素は、処理のために別のデータセットをニューラルネットワークアクセラレータに入力することができる。ユーザが、データ変換を実行するように第2のプロセッサ要素を構成した場合、第2のプロセッサ要素は、共有メモリキューからコピーされた出力データを変換する(8.5)。畳み込みニューラルネットワークの実装例において、第2のプロセッサ要素はソフトマックス層の演算を実行する。しかしながら、ニューラルネットワークアクセラレータが実装しない任意の層(たとえばReLUおよびマックスプール)の演算を実行するように第2のプロセッサ要素をプログラムできることが認識されるであろう。
【0065】
図7は、プロデューサコンポーネント702(プロセッサ要素602およびニューラルネットワークアクセラレータ238)およびコンシューマプロセッサ604による入力データセットの並列パイプライン処理を示す。先に述べたように、第2の/コンシューマプロセッサは、共有メモリキューが空であるときに第1の/プロデューサプロセッサにシグナリングし、第1のプロセッサ要素は、共有メモリキューが満杯であるときに第2のプロセッサ要素にシグナリングする。第1のプロセッサ要素は、共有メモリキューが空であるときに入力データセットの処理を開始することができ、第2のプロセッサ要素は、共有メモリキューが満杯であるときにニューラルネットワークアクセラレータからの出力データの処理を開始することができる。細線に重ねられた太い線分は関連するコンポーネントによるアクティブな処理を表し、細線は時間の経過を表す。
【0066】
入力データセットと、共有メモリキューが空であることを第2のプロセッサ要素604がシグナリングしたこととに応じて、線分704によって表されるように、第1のプロセッサ要素は第1のデータセットをニューラルネットワークアクセラレータに入力し、ニューラルネットワークアクセラレータはニューラルネットワークの層のサブセットの演算を実行する。ニューラルネットワークアクセラレータおよび第1のプロセッサ要素が入力データセットの処理を完了すると、線706によって示されるように、第1のプロセッサ要素は共有メモリキューが満杯であることを第2のプロセッサ要素にシグナリングする。満杯信号に応じて、線708によって示されるように、第2のプロセッサ要素は、共有メモリキューから別のメモリワークスペースに出力データを直ちにコピーし、データのコピー後に、キューが空であることを第1のプロセッサ要素にシグナリングする。
【0067】
キュー空信号と、次のデータセットが利用可能であることとに応じて、線分710によって表されるように、第1のプロセッサ要素は次のデータセットをニューラルネットワークアクセラレータに入力し、ニューラルネットワークアクセラレータはニューラルネットワークの層のサブセットの演算を実行する。ニューラルネットワークアクセラレータが次の入力データセットを処理する間、線分712によって示されるように、第2のプロセッサ要素は第1の入力データセットから得られた出力データに対してニューラルネットワークの層の別のサブセットの演算を、並行して実行する。すなわち、第1のプロセッサ要素およびニューラルネットワークアクセラレータが入力データセットNを処理するのと並行して、第2のプロセッサ要素は、ニューラルネットワークアクセラレータによる入力データセットN-1の処理から得られた出力データを処理し、入力データセットの順序は、N-1、N、N+1などである。
【0068】
図8は、ニューラルネットワーク処理システムにおいてプロデューサとしてともに動作する第1のプロセッサ要素およびニューラルネットワークアクセラレータが実行するプロセスのフローチャートを示す。判断ブロック802において、第1のプロセッサ要素は、継続する前に、第2のプロセッサ要素からの空信号によって示されるように共有メモリキューが空になるまで待つ。共有メモリキューが空であることを第2のプロセッサ要素がシグナリングしたことに応じて、第1のプロセッサ要素はブロック804に進み、入力データセットを読み出し、ニューラルネットワークアクセラレータと共有するメモリに入力データセットを書き込む。第1のプロセッサ要素は、入力データセットが処理に利用可能である場合ニューラルネットワークアクセラレータにシグナリングし、ブロック806において、ニューラルネットワークアクセラレータが完了をシグナリングするのを待つ。
【0069】
判断ブロック808は、ユーザが、データ変換を実行するように第1のプロセッサ要素を構成したか否かを確認する。ユーザは、第1のプロセッサ要素または第2のプロセッサ要素のいずれかを、たとえばシステム起動時またはシステムランタイム中にパラメータ値を入力することなどによって、データ変換を実行するように構成することができる。ユーザが第1のプロセッサ要素をデータ変換を実行するものとして指定した場合、ブロック810で、第1のプロセッサ要素は、共有メモリキュー内の出力データを変換し、変換後に、ブロック812で、キューが満杯であることを第2のプロセッサ要素にシグナリングする。ユーザが第2のプロセッサ要素をデータ変換を実行するものとして指定した場合、第1のプロセッサ要素はブロック810をスキップする。第1のプロセッサ要素はブロック802に戻り、第2のプロセッサ要素が共有メモリキューを空にするのを待つ。
【0070】
図9は、ニューラルネットワーク処理システムにおいてコンシューマとして動作する第2のプロセッサ要素が実行するプロセスのフローチャートを示す。判断ブロック902において、第2のプロセッサ要素は、継続する前に、第1のプロセッサ要素からの満杯信号によって示されるように共有メモリキューが満杯になるまで待つ。共有メモリキューが満杯であることを第1のプロセッサ要素がシグナリングしたことに応じて、第2のプロセッサ要素は、ブロック904に進み共有メモリキューから別個のメモリワークスペースにデータをコピーする。データをコピーした後、第2のプロセスは、共有メモリキューが空であることを第1のプロセスにシグナリングする。
【0071】
判断ブロック906は、ユーザが、データ変換を実行するように第2のプロセッサ要素を構成したか否かを確認する。ユーザが第2のプロセッサ要素をデータ変換を実行するものとして指定した場合、ブロック908において、第2のプロセッサ要素は、別個のワークスペース内の出力データを所望のフォーマットに変換する。ユーザが第1のプロセッサ要素をデータ変換を実行するものとして指定した場合、第2のプロセスはブロック908の処理をスキップする。
【0072】
ブロック910において、第2のプロセッサ要素は、ニューラルネットワークの層のサブセットの演算を実行する。一例としての実装例において、第2のプロセッサ要素に割り当てられた層のサブセットは、全結合層およびソフトマックス層を含む。
【0073】
ブロック912において、第2のプロセッサ要素は、出力データをパースし、パースしたデータをMLフレームワークに返す。たとえば、第2のプロセッサ要素は、出力データをパースし、出力データを人間が読むことができる形式に変換することができる。
【0074】
図10は、別の具体例としての実装例に係る、処理回路の異種クラスタを有するニューラルネットワーク処理システム922を示す。システム922は、CPUと、フィールドプログラマブルゲートアレイ(FPGA)回路926と、ニューラルネットワークアクセラレータとして動作するグラフィック処理ユニット(GPU)928とを含む。CPUは、データ準備、分岐を伴う制御動作、アクセラレータへの送信に適さないメモリバウンド動作を処理する。FPGAは、カスタムメモリ階層からも利益を得る計算集約型ジョブを処理する。GPUは、大きな計算集約型タスクを処理する。
【0075】
FPGA回路926は、計算が多数の層に分散されているニューラルネットワークのためのニューラルネットワークアクセラレータとして有益であり、各層の計算要件は、GPU928を十分に利用し続けるには不十分である。カスタムオンチップメモリは、小さな層間で移動するときのデータ局所性を保証し、それによって計算を著しく加速するのに役立ち得る。
【0076】
GPU928は、各層の計算要件がGPUをビジーな状態に保つとともにGPUのプロセッサ要素とメモリとの間のデータ転送に対する依存度を低い状態に保つニューラルネットワークのためのニューラルネットワークアクセラレータとして有益である。
【0077】
図11は、一例に係るプログラマブルIC228を示すブロック図である。プログラマブルIC228は、プログラマブルロジック3と、コンフィギュレーションロジック25と、コンフィギュレーションメモリ26とを含む。プログラマブルIC228は、NVM224、RAM226、および他の回路29等の外部回路に結合することができる。プログラマブルロジック3は、ロジックセル30と、サポート回路31と、プログラマブル相互接続32とを含む。ロジックセル30は、複数の入力の一般的な論理関数を実装するように構成することができる回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどのような、専用回路を含む。ロジックセル30およびサポート回路31は、プログラマブル相互接続32を用いて相互接続することができる。ロジックセル30をプログラムするため、サポート回路31のパラメータを設定するため、および、プログラマブル相互接続32をプログラムするための情報は、コンフィギュレーションロジック25によってコンフィギュレーションメモリ26に格納される。コンフィギュレーションロジック25は、不揮発性メモリ224からまたは任意の他のソースから(たとえばDRAM226または他の回路29から)、コンフィギュレーションデータを取得することができる。いくつかの例において、プログラマブルIC228は処理システム2を含む。処理システム2は、マイクロプロセッサ、メモリ、サポート回路、IO回路などを含み得る。たとえば、処理システム2は、処理システム210と同様の回路を含み得る。いくつかの例において、処理システム2は、
図2の処理システム210の代わりに使用することができる。そのような場合、
図2のコンピューティングシステム108全体を、ソフトウェア206が処理システム2上で実行されるプログラマブルIC228を用いて実装することができる。
【0078】
図12は、多数の異なるプログラマブルタイルを含むプログラマブルIC228のFPGA実装例を示し、上記プログラマブルタイルは、トランシーバ37、コンフィギュラブルロジックブロック(「CLB」)33、ランダムアクセスメモリブロック(「BRAM」)34、入出力ブロック(「IOB」)36、コンフィギュレーションおよびクロッキングロジック(「CONFIG/CLOCKS」)42、デジタル信号処理ブロック(「DSP」)35、専用入出力ブロック(「I/O」)41(たとえばコンフィギュレーションポートおよびクロックポート)、ならびに、デジタルクロックマネージャ、アナログデジタル変換器、システムモニタリングロジックなどのようなその他のプログラマブルロジック39を含む。FPGAはまた、PCIeインターフェイス40、アナログデジタル変換器(ADC)38などを含み得る。
【0079】
いくつかのFPGAにおいて、各プログラマブルタイルは、
図12の上部に含まれる例によって示されるように、同じタイル内のプログラマブルロジック要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含み得る。各プログラマブル相互接続要素43はまた、同じタイルまたは他のタイル内の隣接するプログラマブル相互接続要素の相互接続セグメント49への接続を含み得る。各プログラマブル相互接続要素43はまた、ロジックブロック間の汎用ルーティングリソース(図示せず)の相互接続セグメント50への接続を含み得る。汎用ルーティングリソースは、相互接続セグメント(たとえば相互接続セグメント50)のトラックを含むロジックブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含み得る。汎用ルーティングリソースの相互接続セグメント(たとえば相互接続セグメント50)は、1つ以上のロジックブロックにまたがることができる。プログラマブル相互接続要素43は、汎用ルーティングリソースとともに、示されているFPGAのためのプログラマブル相互接続構造(「プログラマブル相互接続」)を実現する。
【0080】
ある実装例において、CLB33は、ユーザロジックに加えて単一のプログラマブル相互接続要素(「INT」)43を実装するようにプログラムすることができるコンフィギュラブルロジック要素(「CLE」)44を含み得る。BRAM34は、1つ以上のプログラマブル相互接続要素に加えてBRAMロジック要素(「BRL」)45を含み得る。典型的に、タイルに含まれる相互接続要素の数は、タイルの高さによって決まる。図示されている例において、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば4つ)を用いてもよい。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えてDSPロジック要素(「DSPL」)46を含み得る。IOB36は、たとえば、プログラマブル相互接続要素43の1つのインスタンスに加えて、入出力ロジック要素(「IOL」)47の2つのインスタンスを含み得る。当業者には明らかなように、たとえばI/Oロジック要素47に接続される実際のI/Oパッドは、典型的には入出力ロジック要素47の領域に限定されない。
【0081】
図示されている例において、ダイの中心付近の水平領域が、コンフィギュレーション、クロック、および他の制御ロジックに使用される。この水平領域または列から延びる垂直列51は、FPGAの幅にわたってクロックおよびコンフィギュレーション信号を分配するために使用される。
【0082】
図12に示されるアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構成する規則的な列構造を壊す追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび/または専用ロジックとすることができる。
【0083】
なお、
図12は、具体例としてのFPGAアーキテクチャだけを示すことを意図している。たとえば、ある行内のロジックブロックの数、行の相対的な幅、行の数および順序、行に含まれるロジックブロックの種類、ロジックブロックの相対的なサイズ、および
図12の上部に含まれる相互接続/ロジックの実装例は、具体例にすぎない。たとえば、実際のFPGAにおいては、ユーザロジックの効率的な実装を容易にするためにCLBが現れる場所には必ずCLBの2つ以上の隣接する行が含まれるのが典型的であるが、隣接するCLB行の数はFPGAの全体的なサイズによって変化する。
【0084】
当業者は、1つ以上のプロセッサとプログラムコードで設定されたメモリ構成とを含む、さまざまな代替コンピューティング構成が、本明細書で開示されているプロセスおよびデータ構造をホストするのに適していることを理解するであろう。加えて、プロセスは、磁気もしくは光ディスクもしくはテープ、電子記憶装置、またはネットワーク上のアプリケーションサービス等の、さまざまなコンピュータ読取可能記憶媒体または配信チャネルを介して提供されてもよい。
【0085】
局面および特徴は場合によっては個々の図面に示されることがあるが、1つの図面の特徴を、別の図面の特徴と、その組み合わせが明示的に示されていないまたは組み合わせとして明示的に説明されていない場合であっても、組み合わせることができることが、理解されるであろう。
【0086】
本方法およびシステムは、さまざまなニューラルネットワーク処理システムに適用可能であると考えられる。当業者にとって、他の局面および特徴は、本明細書の検討から明らかであろう。本明細書および図面は例にすぎないとみなされ本発明の真の範囲は以下の特許請求の範囲によって示されることが意図されている。