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

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

▶ ザイリンクス インコーポレイテッドの特許一覧

特許7196167ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理
<>
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図1
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図2
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図3
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図4
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図5
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図6
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図7
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図8
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図9
  • 特許-ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-16
(45)【発行日】2022-12-26
(54)【発明の名称】ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理
(51)【国際特許分類】
   G06N 3/063 20060101AFI20221219BHJP
   G06F 17/16 20060101ALI20221219BHJP
【FI】
G06N3/063
G06F17/16 S
【請求項の数】 13
(21)【出願番号】P 2020521412
(86)(22)【出願日】2018-10-16
(65)【公表番号】
(43)【公表日】2020-12-24
(86)【国際出願番号】 US2018056112
(87)【国際公開番号】W WO2019079319
(87)【国際公開日】2019-04-25
【審査請求日】2021-10-14
(31)【優先権主張番号】15/785,800
(32)【優先日】2017-10-17
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110002077
【氏名又は名称】園田・小林弁理士法人
(72)【発明者】
【氏名】ウン, アーロン
(72)【発明者】
【氏名】ドゥレー, エリオット
(72)【発明者】
【氏名】ギャセミ, エーサン
(72)【発明者】
【氏名】テン, ショウ
(72)【発明者】
【氏名】ゼイダ, インドリフ
(72)【発明者】
【氏名】ウー, ヨンジュン
(72)【発明者】
【氏名】セトル, ショーン
(72)【発明者】
【氏名】シラサオ, アンシュ
【審査官】北川 純次
(56)【参考文献】
【文献】米国特許出願公開第2016/0342890(US,A1)
【文献】米国特許出願公開第2016/0335120(US,A1)
【文献】特表2016-536679(JP,A)
【文献】QIU, Jiantao, 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,2016年02月,pages 26-35,[検索日 2022.11.07], インターネット:<URL:https://dl.acm.org/doi/10.1145/2847263.2847265>,<DOI: 10.1145/2847263.2847265>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/06-3/10
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
ホストコンピュータシステムによって、複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリ中の連続アドレス空間に書き込むことと、
前記ホストコンピュータシステムによって複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、前記共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、
前記ホストコンピュータシステムによって入力データと前記命令パッケージとを前記共有メモリに書き込むことと、
前記ニューラルネットワークアクセラレータによってダイレクトメモリアクセス(DMA)動作を介して前記共有メモリから前記命令パッケージの各層単位命令を読み取ることと、
前記ニューラルネットワークアクセラレータによって前記命令パッケージの前記複数の層単位命令の各層単位命令を処理することであって、前記処理することが、
前記層単位命令から、前記複数の重み行列のうちの重み行列のベースアドレスおよびオフセットを決定することと、
DMAを介して前記共有メモリから前記重み行列を読み取ることと
を含む、前記複数の層単位命令の各層単位命令を処理することと
を含む方法。
【請求項2】
前記複数の重み行列を書き込むことが、前記複数の層単位命令を処理することの前に、前記複数の重み行列のすべてを前記共有メモリに書き込むことを含む、請求項1に記載の方法。
【請求項3】
前記重み行列の前記共有メモリ中のベースアドレスを示すパラメータを、前記ホストコンピュータシステムから前記ニューラルネットワークアクセラレータに伝えることをさらに含む、請求項1または請求項2に記載の方法。
【請求項4】
前記複数の層単位命令を処理することが、
前記命令パッケージの第1の層単位命令を処理することと、その後に連続して前記命令パッケージの第2の層単位命令を処理することと、
前記第1の層単位命令を処理する際に、入力データを前記共有メモリの第1の部分から読み取り、出力データを前記共有メモリの第2の部分に書き込むことと、
前記第2の層単位命令を処理する際に、入力データを前記共有メモリの前記第2の部分から読み取り、出力データを前記共有メモリの前記第1の部分に書き込むことと
を含む、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記複数の層単位命令を処理することが、前記命令パッケージ中での出現の順に前記命令パッケージ中の前記複数の層単位命令を処理することを含む、請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記複数の層単位命令を処理することが、命令パッケージ中のn個の命令について、命令i+1の実行を開始する前に命令iの実行を完了することを処理することを含み、1≦i≦nである、請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記複数の層単位命令を処理することが、前記命令パッケージによって定義される状態機械のための有限状態機械遷移表を評価することを含む、請求項1から6のいずれか一項に記載の方法。
【請求項8】
共有メモリと、
前記共有メモリに接続されたホストコンピュータシステムであって、前記ホストコンピュータシステムが命令で構成され、前記命令は、実行されたとき、前記ホストコンピュータシステムに、
複数の重み行列を前記共有メモリ中の連続アドレス空間に書き込むことと、
複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、前記共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、
入力データと前記命令パッケージとを前記共有メモリに書き込むことと
を行わせる、ホストコンピュータシステムと、
前記共有メモリにおよび前記ホストコンピュータシステムに接続されたニューラルネットワークアクセラレータであって、前記ニューラルネットワークアクセラレータは、
前記命令パッケージの各層単位命令を前記共有メモリから読み取ることと、
前記命令パッケージの前記複数の層単位命令を処理することであって、前記処理することが、
前記層単位命令から、前記複数の重み行列のうちの重み行列のベースアドレスおよびオフセットを決定することと、
DMAを介して前記共有メモリから前記重み行列を読み取ることと
を含む、前記複数の層単位命令を処理することと
を行うように構成された、ニューラルネットワークアクセラレータと
を備える、ニューラルネットワーク処理システム。
【請求項9】
前記ホストコンピュータシステムに前記複数の重み行列を書き込むことを行わせる前記命令が、前記ニューラルネットワークアクセラレータによって前記複数の層単位命令を処理することの前に、前記ホストコンピュータシステムに前記複数の重み行列のすべてを前記共有メモリに書き込むことを行わせる命令を含む、請求項8に記載のニューラルネットワーク処理システム。
【請求項10】
前記ホストコンピュータシステムが命令でさらに構成され、前記命令が、実行されたとき、前記ホストコンピュータシステムに、前記重み行列の前記共有メモリ中のベースアドレスを示すパラメータを、前記ニューラルネットワークアクセラレータに伝えることを行わせる、請求項8または9に記載のニューラルネットワーク処理システム。
【請求項11】
前記複数の層単位命令を処理する際の前記ニューラルネットワークアクセラレータが、
前記命令パッケージの第1の層単位命令と第2の層単位命令とを連続して処理することと、
前記第1の層単位命令を処理する際に、入力データを前記共有メモリの第1の部分から読み取り、出力データを前記共有メモリの第2の部分に書き込むことと、
前記第2の層単位命令を処理する際に、入力データを前記共有メモリの前記第2の部分から読み取り、出力データを前記共有メモリの前記第1の部分に書き込むことと
を行うように構成された、請求項8から10のいずれか一項に記載のニューラルネットワーク処理システム。
【請求項12】
前記ホストコンピュータシステムに、前記複数の層単位命令をアセンブルすることを行わせる前記命令が、前記ホストコンピュータシステムに、前記層単位命令のうちの1つまたは複数において、畳み込み、行列乗算、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを行わせる命令を含む、請求項8から11のいずれか一項に記載のニューラルネットワーク処理システム。
【請求項13】
前記複数の層単位命令を処理する際の前記ニューラルネットワークアクセラレータが、前記命令パッケージ中での出現の順に前記命令パッケージ中の前記複数の層単位命令を処理するようにさらに構成された、請求項9に記載のニューラルネットワーク処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、ニューラルネットワーク処理に関する。
【背景技術】
【0002】
機械学習は、コンピューティングシステムが、明示的にプログラムされることなしに働くことを引き起こす科学である。古典的な機械学習は、K平均クラスタリング、線形およびロジスティック回帰、確率的勾配降下法、相関ルール学習などを含む、様々なクラスタリングおよび分類技法を含む。深層学習は、機械学習におけるより新しい最先端領域である。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する機械学習アルゴリズムのクラスである。深層学習アルゴリズムは、教師なし(たとえば、パターン分析)であるか、または教師あり(たとえば、分類)であり得る。深層学習アルゴリズムは、(本明細書では「ニューラルネットワーク」と呼ばれる)人工ニューラルネットワーク(ANN)の層を使用して実装され得る。
【0003】
概して、ニューラルネットワークは、グラフ中で結合されたノード(すなわち、「ニューロン」)の集合である。ニューラルネットワーク中のノードは、重み付けされた入力の和を算出し、その和に随意のバイアスを加算する。ノードの出力は、(「活性化関数」と呼ばれる)最終的な和の関数である。例示的な活性化関数は、シグモイド関数、双曲線正接(tanh)関数、正規化線形ユニット(ReLU)関数、および恒等関数を含む。ニューラルネットワークモデルは、しばしば、特定のトポロジーと、対応する重みおよびバイアスとを定義するノードの層に編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
【0004】
概して、ニューラルネットワークは、入力層と出力層とを含み、入力層と出力層との間の1つまたは複数の隠れ層を随意に含むことができる。深層学習アプリケーションにおいて使用されるニューラルネットワークは、典型的に、多くの隠れ層を含み、それにより、深層ニューラルネットワーク(DNN)という用語が生じる。ニューラルネットワークの層は、密結合される(たとえば、層中の各ノードが前の層中のすべてのノードに全結合される)か、またはスパース結合され得る(たとえば、層中の各ノードが前の層中のノードの一部のみに結合される)。畳み込みニューラルネットワーク(CNN)は、畳み込み層と呼ばれる、1つまたは複数のスパース結合された層を含む、DNNのタイプである。CNNは、画像またはビデオデータを処理するのに好適である。DNNの他のタイプは、音声およびテキストデータを処理するのに好適であるリカレントニューラルネットワーク(RNN)を含む。
【0005】
フィールドプログラマブルゲートアレイ(FPGA)は、ソフトウェアから呼び出される関数を加速する回路を実装するために使用されている。ソフトウェアから呼び出される関数を加速する回路は、ハードウェアアクセラレータと呼ばれる。ハードウェアアクセラレータの例は、画像処理ソフトウェアから呼び出され得るFPGA回路として実装される様々な画像フィルタを含む。
【0006】
FPGAベースの実装形態は、ホストコンピュータシステムによるFPGAアクセス可能メモリへの重みおよび入力データの転送と、ホストコンピュータシステムへの出力データの転送とを伴う。ホストコンピュータシステムとFPGAアクセラレータとの間のデータの転送は、性能を劣化させることがある。CPUまたはGPU上などの他の一般的に使用されるニューラルネットワーク(NN)実装形態と比較して、FPGAベースの実装形態は、FPGA回路がGPUよりも速くデータを処理し、プロセス中に消費する電力を少なくすることができるので、有利であり得る。
【発明の概要】
【0007】
ニューラルネットワークシステムにおける処理の開示される方法は、ホストコンピュータシステムによって、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリに書き込むことを含む。ホストコンピュータシステムは、さらに、複数の層単位命令を命令パッケージにアセンブルする。各層単位命令は、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する。ホストコンピュータシステムは、入力データと命令パッケージとを共有メモリに書き込む。ニューラルネットワークアクセラレータは、命令パッケージを共有メモリから読み取り、命令パッケージの複数の層単位命令を処理する。
【0008】
開示されるニューラルネットワーク処理システムは、共有メモリと、共有メモリに接続されたホストコンピュータシステムと、共有メモリに接続されたニューラルネットワークアクセラレータとを含む。ホストコンピュータシステムは命令で構成され、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの複数の層に関連する複数の重み行列を共有メモリに書き込むことを行わせる。ホストコンピュータシステムはまた、複数の層単位命令を命令パッケージにアセンブルするようにプログラムされる。各層単位命令は、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する。ホストコンピュータシステムは、入力データと命令パッケージとを共有メモリに書き込む。ニューラルネットワークアクセラレータは、命令パッケージを共有メモリから読み取り、命令パッケージの複数の層単位命令を処理するように構成される。
【0009】
他の特徴は、以下の発明を実施するための形態および特許請求の範囲の考慮から認識されよう。
【0010】
方法およびシステムの様々な態様および特徴は、以下の発明を実施するための形態を検討し、以下の図面を参照すると明らかになろう。
【図面の簡単な説明】
【0011】
図1】一例による、ニューラルネットワークを実装するためのシステムを示すブロック図である。
図2】一例による、コンピューティングシステムを示すブロック図である。
図3】一例による、アクセラレーション回路を示すブロック図である。
図4】一実装形態による、例示的なニューラルネットワーク処理システムを示す図である。
図5図3に示されている例示的なニューラルネットワークアクセラレータの別のビューを示す図である。
図6】層単位命令のパッケージを処理するためのニューラルネットワークアクセラレータを構成し、処理のために、重み、入力データ、および層単位命令のパッケージをニューラルネットワークアクセラレータに与えることにおいて、KAインターフェースによって実施されるプロセスのフローチャートである。
図7】ニューラルネットワーク命令のパッケージを処理することにおいて、ニューラルネットワークアクセラレータによって実施されるプロセスのフローチャートである。
図8】5つのニューラルネットワーク層のための例示的な重み行列のアドレッシングおよび例示的な入出力バッファ(「B/Cバッファ」)のアドレッシングを示す図である。
図9】一例による、プログラマブルICを示すブロック図である。
図10】プログラマブルICのFPGA実装形態を示す図である。
【発明を実施するための形態】
【0012】
以下の説明では、本明細書で提示される特定の例について説明するために、多数の具体的な詳細が記載される。しかしながら、1つまたは複数の他の例および/またはこれらの例の変形形態が、下記のすべての具体的な詳細なしに実施され得ることは、当業者に明らかであろう。他の事例では、本明細書の例の説明を不明瞭にしないように、よく知られている特徴は詳細に説明されていない。説明しやすいように、同じ要素または同じ要素の追加のインスタンスを指すために、異なる図において同じ参照番号が使用され得る。
【0013】
開示される実装形態は、ホストコンピュータシステムとニューラルネットワークアクセラレータとを含むニューラルネットワーク処理システムに関連するオーバーヘッドおよびレイテンシを低減する。システムおよび方法は、ホストコンピュータシステムとニューラルネットワークアクセラレータとの間で共有されるメモリにおよびメモリからデータを転送することに関与するダイレクトメモリアクセス(DMA)動作の数を最小限に抑える。ホストコンピュータシステムは、ニューラルネットワークアクセラレータによる処理の始動の前に、処理のためにニューラルネットワークのすべての層によって必要とされる入力データおよびパラメータのすべてをアセンブルし、共有メモリ中にデータおよびパラメータの集合を確立する。数個のDMA動作を用いて、ニューラルネットワークアクセラレータは、ニューラルネットワークを通る完全なパスのために必要とされるデータおよび構成パラメータを有し、それにより、オーバーヘッドおよびレイテンシを低減する。
【0014】
開示される方法およびシステムは、畳み込みニューラルネットワーク(CNN)、リカレントニューラルネットワーク(RNN)、および行列乗算または畳み込みなどの動作を伴う他のニューラルネットワークに適用可能である。簡潔のために、ホストコンピュータシステムは「ホスト」と呼ばれることもあり、ニューラルネットワークアクセラレータは、同じくまたは代替的に、「アクセラレーション回路」、「カーネルアクセラレータ」または「カーネルアクセラレータ回路」と呼ばれることがある。
【0015】
開示されるシステムおよび方法の例示的なアプリケーションは、畳み込みニューラルネットワーク(CNN)である。CNNは、動作の層を有する有向グラフとして表され得る。各層は、CONV(畳み込み)、または画像から列への変換(「im2col」)、一般的な行列乗算(「GEMM」)、活性化(たとえば、正規化線形ユニット、「ReLU」関数)、プーリング(たとえば、「最大プール」)、局所応答正規化(LRN層)、および内積(たとえば、「全結合」(FC)層)など、1つまたは複数の動作を伴うことができる。各層への入力は、画像またはボイスサンプルなど、データと、トレーニングされた重みとであり、すべて行列として表される。開示されるシステムおよび方法では、ニューラルネットワークのすべての層ごとに処理されるべき、すべての重み行列、構成パラメータ、および入力データは、ニューラルネットワークアクセラレータが入力データのニューラルネットワーク処理を始動するより前に、ホストからニューラルネットワークアクセラレータに与えられる。
【0016】
開示されるシステムおよび方法の1つの特徴では、ニューラルネットワークの異なる層において畳み込みまたは行列乗算において使用される別個の重み行列は、データの単一のブロックにマージされ、共有メモリの連続アドレス空間に記憶される。組み合わせられた重み行列は、ニューラルネットワークアクセラレータが、必要とされる重みに連続的にアクセスすることを可能にし、これは、不連続アドレスにアクセスするよりも効率的である。連続アドレス空間はまた、カーネルプロセッサがニューラルネットワークのある層の処理から次の層の処理に遷移するとき、新しい重み行列がロードされるのを待つ必要なしに、アクセスを可能にする。
【0017】
別の特徴では、ホストコンピュータシステムは、ニューラルネットワークアクセラレータによる処理を制御するために、複数の層単位命令のパッケージを作成する。ニューラルネットワークアクセラレータによる処理は、それにより、ニューラルネットワークアプリケーションに従ってカスタマイズされ得る。さらに、層単位命令のパッケージは、ニューラルネットワークの層を通して入力データを処理することにおいて、ホストとニューラルネットワークアクセラレータとの間の対話の数を低減する。層単位命令のパッケージは、さらに、各層単位命令による適切な重み行列への高速参照を与えるために、重み行列のブロックへのオフセットを指定する。
【0018】
バッファは、入力データ(「B行列」)および出力データ(「C行列」)を記憶するために、ニューラルネットワークの層間で共有される。共有「B/Cバッファ」は、ある層の結果を次の層の入力バッファにコピーする必要を回避することによって、メモリ要求を低減し、ニューラルネットワークアクセラレータの効率を改善する。ニューラルネットワークアクセラレータは、処理が、ある層から次の層に遷移するとき、B行列のために使用されるB/Cバッファの部分と、C行列のために使用されるB/Cバッファの部分との間を交互する。
【0019】
次に図面を参照すると、図1は、一例による、ニューラルネットワークを実装するためのシステム100を示すブロック図である。システム100は、コンピュータシステム102と、1つまたは複数のコンピュータシステム108とを含む。コンピュータシステム102は、1つまたは複数の設計ツール104を与えるソフトウェアを実行するように構成された従来のコンピューティング構成要素を含む。各コンピュータシステム108は、1つまたは複数のニューラルネットワーク110を実装する。(1つまたは複数の)ニューラルネットワーク110は、アプリケーション112と、アクセラレーションライブラリ114と、1つまたは複数のハードウェアアクセラレータ116とを使用して実装される。
【0020】
一例では、(1つまたは複数の)ハードウェアアクセラレータ116は、フィールドプログラマブルゲートアレイ(FPGA)など、プログラマブル集積回路(IC)を含む。アクセラレーションライブラリ114は、(1つまたは複数の)ハードウェアアクセラレータ116とインターフェースするためのアプリケーションプログラミングインターフェース(API)を与える。アクセラレーションライブラリ114はまた、ニューラルネットワーク層および他のタイプのニューラルネットワーク構造のあらかじめ定義されたおよび最適化された実装形態を含む、ニューラルネットワーク関数を与えるライブラリを含むことができる。したがって、(1つまたは複数の)ニューラルネットワーク110は、(1つまたは複数の)ハードウェアアクセラレータ116において実装されるハードウェア部分、ならびにアクセラレーションライブラリ114において実装されるソフトウェア部分の両方を含むことができる。アプリケーション112は、(1つまたは複数の)ニューラルネットワーク116を実装するように(1つまたは複数の)ハードウェアアクセラレータ116をプログラムし、制御するためにアクセラレーションライブラリ114のAPIを起動する。
【0021】
設計者は、(1つまたは複数の)ニューラルネットワーク110を定義するために、(1つまたは複数の)設計ツール104と対話する。(1つまたは複数の)設計ツール104は、(1つまたは複数の)ハードウェアアクセラレータ116をプログラムするためのファイル(たとえば、FPGAのための構成ビットストリーム)と、アクセラレーションライブラリ114を与えるファイルと、アプリケーション112を与えるファイルとを生成することができる。設計者は、レジスタ転送言語(RTL)を使用して、あるいは、C、C++、OpenCLなど、プログラミング言語、またはRTLと(1つまたは複数の)プログラマブル言語との組合せを使用して、(1つまたは複数の)ニューラルネットワーク110のハードウェア部分を定義することができる。ユーザは、C、C++、OpenCLなど、プログラミング言語を使用して、(1つまたは複数の)ニューラルネットワーク110のソフトウェア部分を定義することができる。(1つまたは複数の)設計ツール104は、(1つまたは複数の)ハードウェアアクセラレータ116をプログラムするためのファイルと、アクセラレーションライブラリ114のためのライブラリファイルとを生成するために、ソフトウェア定義されたニューラルネットワークをコンパイルする。設計者は、(1つまたは複数の)ニューラルネットワーク110のハードウェア部分およびソフトウェア部分を開発するのを支援するために、クラスライブラリ、テンプレートライブラリなどを与えるライブラリ106を活用することができる。
【0022】
ユーザは、プログラミング言語(たとえば、C、C++、Pythonなど)を使用して、アプリケーション112を定義することができる。ユーザは、Caffe、TensorFlow、MXNetなど、ニューラルネットワークフレームワークおよびライブラリを活用することができる。
【0023】
図2は、一例による、コンピューティングシステム108を示すブロック図である。コンピューティングシステム108は、ハードウェア204と、ハードウェア204上で実行するソフトウェア206とを含む。ハードウェア204は、処理システム210と、システムメモリ216と、ストレージデバイス(「ストレージ218」)と、ハードウェアアクセラレータ116とを含む。ソフトウェア206は、オペレーティングシステム(OS)244と、アクセラレーションライブラリ114と、アプリケーション112とを含む。処理システム210、システムメモリ216、およびストレージ218は、本明細書で参照されるホストコンピュータシステムを備える。
【0024】
処理システム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と周辺バス215との間のデータフローを管理し、そこにハードウェアアクセラレータ116などの様々な周辺機器が接続される。いくつかの例では、マイクロプロセッサ212は、チップセット(たとえば、ノースブリッジ、サウスブリッジなど)の機能性の全部または実質的部分を吸収する、システムインパッケージ(SiP)、システムオンチップ(SoC)などであり得る。周辺バス215は、周辺構成要素相互接続エクスプレス(PCIe)など、拡張バス規格を実装することができる。本例では、処理システム210は、ハードウェアアクセラレータ116とは別個に示されている。以下でさらに説明される他の例では、処理システム210とハードウェアアクセラレータ116とは、システムオンチップ(SoC)を使用して同じ集積回路(IC)上に実装され得る。
【0025】
システムメモリ216は、実行可能な命令およびデータなど、情報が記憶され、取り出されることを可能にするデバイスである。システムメモリ216は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)など、1つまたは複数のランダムアクセスメモリ(RAM)モジュールを含むことができる。ストレージデバイス218は、ローカルストレージデバイス(たとえば、1つまたは複数のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク)、および/またはコンピューティングシステム108が1つまたは複数のネットワークデータストレージシステムと通信することを可能にするストレージインターフェースを含む。ハードウェア204は、グラフィックスカード、ユニバーサルシリアルバス(USB)インターフェースなど、コンピューティングシステムの様々な他の従来のデバイスおよび周辺機器を含むことができる。
【0026】
ハードウェアアクセラレータ116は、プログラマブルIC228と、不揮発性メモリ224と、RAM226とを含む。プログラマブルIC228は、FPGAなど、またはFPGAを有するSoCなどであり得る。NVM224は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。RAM226は、DDR DRAMなどを含むことができる。プログラマブルIC228は、NVM224およびRAM226に連結される。プログラマブルIC228は、処理システム210の周辺バス215にも連結される。
【0027】
OS244は、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)など、当技術分野において知られている任意のコモディティオペレーティングシステムであり得る。アクセラレーションライブラリ114は、ハードウェアアクセラレータ116のコマンドおよび制御のためのAPIを与えるドライバおよびライブラリを含む。アプリケーション112は、(1つまたは複数の)ニューラルネットワークを実装するためにアクセラレーションライブラリ114のAPIを起動する、マイクロプロセッサ212上で実行するソフトウェアを含む。
【0028】
動作中、プログラマブルIC228はアクセラレーション回路230で構成される。アクセラレーション回路230は、概して、ベースプラットフォーム230Aとニューラルネットワークアクセラレータ230Bとを含む。たとえば、アクセラレーション回路230は、静的領域234とプログラマブル領域236とを使用して実装され得る。静的領域234は、周辺バス215と、NVM224と、RAM226とにインターフェースを与えるためのサポート回路240を含む。プログラマブル領域236は、1つまたは複数のニューラルネットワークアクセラレータ(「(1つまたは複数の)カーネル238」)を含むことができる。ベースプラットフォーム230Aは静的領域234を使用して実装され、ニューラルネットワークアクセラレータ230Bはプログラマブル領域236を使用して実装される。別の例では、ベースプラットフォーム230Aはまた、プログラマブル領域236の一部分を使用して実装され得る。したがって、いくつかの例では、プログラマブル領域236は、いくつかのインターフェース回路をも含む。いくつかの例では、アクセラレーション回路230は、それらの各々が個々に(1つまたは複数の)ニューラルネットワークアクセラレータ238で構成され得る、2つ以上のプログラマブル領域236を含むことができる。
【0029】
静的領域234は、静的領域234の回路要素がプログラマブル領域236の再構成にわたって不変のままであるという点で「静的」である。一例では、サポート回路240は、PCIeエンドポイント回路、ダイレクトメモリアクセス(DMA)コントローラ、相互接続、メモリコントローラ、メモリインターフェース回路(たとえば、DDRインターフェース)、(部分再構成をサポートするための)デカップラ回路、フラッシュプログラマー、デバッグ回路などを含む。いくつかの例では、プログラマブル領域236は、サポート回路240のいずれをも含まない。他の例では、いくつかのサポート回路は、プログラマブル領域236において実装される。そのような場合、プログラマブル領域236は「拡張されたプログラマブル領域」と呼ばれることがある。いずれの場合も、一例では、PCIe回路およびDMA回路など、いくつかのサポート回路240は、常に、静的領域234中に存在する。
【0030】
図3は、一例による、アクセラレーション回路230を示すブロック図である。アクセラレーション回路230は、サポート回路240とニューラルネットワークアクセラレータ238とを含む。本例では、サポート回路240は、PCIeエンドポイント回路(「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に連結される。
【0031】
動作中、アクセラレーションライブラリ114は、PCIe DMAコントローラ304を通してRAM226に直接アクセスすることができる。アクセラレーションライブラリ114はまた、PCIe DMAコントローラ304を通してニューラルネットワークアクセラレータ238にアクセスすることができる。ニューラルネットワークアクセラレータ238は、メモリコントローラ310を通してRAM226にアクセスすることができる。データは、システムメモリ216とRAM226との間のDMA動作を使用して、ソフトウェア206とニューラルネットワークアクセラレータ238との間で交換され得る。
【0032】
本例では、ニューラルネットワークアクセラレータ238は、相互接続306と通信するためにインターフェース330、331、および332を使用する。特に、これらのインターフェースは、第1の読取りインターフェース330と、第2の読取りインターフェース331と、読取り/書込みインターフェース332とを含む。たとえば、読取りインターフェース330は、ニューラルネットワークアクセラレータ238を制御するための制御インターフェースとして使用され得る。読取りインターフェース331は、メモリインターフェース312のうちの第1のメモリインターフェースを通してRAM226から読み取るために使用され得る。読取り/書込みインターフェース332は、メモリインターフェース312のうちの第2のメモリインターフェースを通してRAM226から読取りおよびRAM226に書込みを行うために使用され得る。
【0033】
ニューラルネットワークアクセラレータ238は、相互接続インターフェース304と、制御ロジック部342と、処理回路341とを含む。処理回路341は、フォーマッタ回路344(たとえば、IM2COL)と、回路(「読取り制御部346」)と、マルチプレクサ356と、先入れ先出し回路(「FIFO358」)と、行列乗算器アレイ362と、ReLUスケーラ回路364と、プーリング回路366(たとえば、最大プール)と、マルチプレクサ368と、FIFO354と、書込み制御回路(「書込み制御部352」)と、キャッシュ348と、読取り制御回路(「読取り制御部350」)と、FIFO360とを含む。相互接続インターフェース340は、インターフェース330、331、および332と、制御ロジック部342と、処理回路341とに連結される。相互接続インターフェース340は、制御ロジック部342とインターフェース330との間の通信、ならびに処理回路341とインターフェース331および332との間の通信を容易にするための、スイッチ、クロック変換器などを含むことができる。
【0034】
本例では、相互接続インターフェース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に連結される。
【0035】
動作中、行列乗算器アレイ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中の様々な回路を制御する。
【0036】
図4は、一実装形態による、例示的なニューラルネットワーク処理システム400を示す。システムは、ニューラルネットワークアクセラレータ238に通信可能に接続されたホストコンピュータシステム402を含む。ホストコンピュータシステム402は、図2に示されているように、処理システム210と、システムメモリ216と、ストレージ218とを含むことができる。ホストコンピュータシステム402は、詳細には、機械学習(ML)フレームワーク410とニューラルネットワークアクセラレータ(KA)インターフェース412とによってプログラムされる。図1のアプリケーション112に対応するMLフレームワークプログラムは、特定のニューラルネットワークアプリケーション、たとえば、画像または音声処理を指定し、図1の場合のようにアクセラレーションライブラリとして実装され得るKAインターフェースは、MLフレームワークからのニューラルネットワーク処理についての要求に応答して、ニューラルネットワークアクセラレータ上でニューラルネットワーク動作を始動する。ニューラルネットワークアクセラレータ238はRAM226に連結され、RAM226を通して、ホストとニューラルネットワークアクセラレータとが通信する。ニューラルネットワークアクセラレータは構成レジスタ408のセットを有する。構成レジスタは、RAM226中のメモリバッファのアドレスと、一般的な行列乗算(GEMM)のための行列次元、および畳み込みのためのストライド/ウィンドウなど、ニューラルネットワーク動作のための構成パラメータとを記憶するために、KAインターフェース412にとってアクセス可能である。
【0037】
開示される手法は、特定のハードウェアプラットフォームに限定されない。しかしながら、当業者に基準系を与える目的で、ニューラルネットワークアクセラレータは、Xilinx,Incから入手可能である、KINTEX(登録商標) ULTRASCALE(商標)115デバイス上で実装され得る。RAM226は、ニューラルネットワークアクセラレータとともにプリント回路板上に取り付けられたDDR SDRAMである。ホスト402とRAMとの間のインターフェースと、ホストとニューラルネットワークアクセラレータとの間のインターフェースとは、周辺構成要素相互接続エクスプレス(PCIE)である。ニューラルネットワークアクセラレータは、ホストメモリのうちのいくつかをRAMと構成レジスタ408とにマッピングするために、ダイレクトメモリアクセス(DMA)チャネルを使用する。ホストコンピュータシステム402は、MLフレームワーク410とKAインターフェース412とを実行するのに好適な任意のコンピュータシステム、あるいはコンピュータシステムの組合せまたはネットワークであり得る。MLフレームワークは、TensorFlow(商標)、Caffe、およびMXNetなど、プログラミングパッケージを使用して指定され得る。
【0038】
KAインターフェース412は、ニューラルネットワークアクセラレータ238による処理のために、MLフレームワーク410からニューラルネットワーク要求を受信する。処理のためにニューラルネットワーク要求をニューラルネットワークアクセラレータにサブミットする前に、KAインターフェースは、ニューラルネットワークの層に関連する重み行列を、ニューラルネットワークアクセラレータと共有されるRAM226に書き込む。重み行列のすべては、連続ブロックとして共有メモリに書き込まれ、これは、DMA動作の数およびオーバーヘッドを低減し、ニューラルネットワークの層における畳み込みまたは行列乗算のために重みが必要とされるとき、ニューラルネットワークアクセラレータにとって重みが利用可能であることを確実にする。
【0039】
MLフレームワーク410からニューラルネットワーク要求を受信したことに応答して、KAインターフェース412は、層単位命令のグループを命令パッケージにアセンブルし、命令パッケージをRAM226に書き込む。各層単位命令は、ニューラルネットワークのそれぞれの層の処理を指定する。さらに、各層単位命令は、共有メモリ中の組み合わせられた重み行列のベースアドレスからの重み行列のそれぞれのオフセットを指定する。ニューラルネットワークの各層の処理は、重み行列の各々にアクセスする。層単位命令はまた、異なる層における異なるニューラルネットワーク動作のための構成パラメータを指定する。たとえば、構成パラメータは、スケーリングファクタと、畳み込みウィンドウおよびストライドと、最大プール処理のための行列次元と、活性化関数とを指定することができる。構成パラメータは、さらに、RAM中の命令パッケージのベースアドレスを含む。ニューラルネットワークの異なる層は、ニューラルネットワーク動作の異なるセットを伴うことができる。
【0040】
KAアクセラレータは、さらに、ニューラルネットワークアクセラレータの構成レジスタ408中に構成パラメータを確立する。構成パラメータは、重み行列のベースアドレスと、入出力データ行列のベースアドレスと、入出力データ行列のベースアドレスからのオフセットとを含む。重み行列は「A」と呼ばれることがあり、入力データ行列は「B」と呼ばれることがあり、出力データ行列は「C」と呼ばれることがある。
【0041】
命令のパッケージが処理される準備ができていることを示すKAインターフェース412からの信号に応答して、ニューラルネットワークアクセラレータ238は、命令パッケージからの層単位命令を順次に処理する。命令のパッケージは、プログラムまたは状態機械を効果的に指定し、そのプログラムまたは状態機械に従って、ニューラルネットワークアクセラレータは、ニューラルネットワークの層の指定された処理を実施する。
【0042】
図5は、図3の例示的なニューラルネットワークアクセラレータ238の別のビューを示す。マージされた重み行列520が、ホストによって書き込まれ、RAM226の連続アドレスに記憶される。例示的なアプリケーションでは、命令パッケージ516中の層単位命令は、ニューラルネットワークの層において実施されるべきニューラルネットワーク動作のセットと、スケーリング、最大プール次元、および活性化関数のための構成パラメータとを指定する。ニューラルネットワーク動作の異なるセットが、ニューラルネットワークアクセラレータによる特定の層単位処理を指示するために、命令パッケージ中の層単位命令のうちの異なる層単位命令において指定され得る。
【0043】
命令パッケージ516からの層単位命令を処理することにおいて、ニューラルネットワークアクセラレータは、命令を順次に処理する。たとえば、第1の層単位命令が処理され、その後に連続して命令パッケージの第2の層単位命令を処理する。第1の層単位命令を処理することにおいて、ニューラルネットワークアクセラレータ238は、入力データをRAM226中のB/Cバッファ518の第1の部分から読み取り、出力データをRAM中のB/Cバッファの第2の部分に書き込む。第2の層単位命令を処理することにおいて、ニューラルネットワークアクセラレータは、入力データをB/Cバッファの第2の部分から読み取り、出力データをB/Cバッファの第1の部分に書き込む。ニューラルネットワークアクセラレータは、その後、各連続する層単位命令とともに、入力および出力データのために使用されるB/Cバッファの部分間を交互する。
【0044】
ニューラルネットワークアクセラレータ238は、構成レジスタ408、(図3の読取りおよび書込み制御部を実装する)ディスパッチングおよびアドレッシング論理回路要素502、フォーマッタ回路344、畳み込みまたは行列乗算器回路要素362、正規化線形ユニット(ReLU)およびスケーリング回路364、プーリング回路要素366を含む。マルチプレクサ356および368は、指定されたニューラルネットワーク動作に従ってディスパッチおよびアドレッシングロジック部によって制御される。構成レジスタ中の構成データは、フォーマッタ回路、行列乗算器回路要素、ReLUスケーリング回路、およびプーリング回路要素のための構成パラメータを与える。
【0045】
ディスパッチおよびアドレッシング回路502は、層単位命令を命令パッケージ516から読み取り、作業要求において参照されるデータとともに、指定されたニューラルネットワーク動作を始動する。ディスパッチおよびアドレッシング回路は、層単位命令において指定されたパラメータに従って、RAM226から読み取られた入力データと、フォーマッタ回路344からのフォーマットされたデータとの間で選択するように、マルチプレクサ356を制御する。フォーマッタ回路344は、入力データを、MLフレームワークによって与えられるフォーマットから、畳み込みまたは行列乗算器回路362に好適なフォーマットに変える。たとえば、一実装形態では、フォーマッタ回路は、画像データを列データに変換する(im2col)。別の実装形態では、フォーマッタ回路は、行メジャー(row-major)または列メジャー(column-major)フォーマットを、算出アレイジオメトリに一致するカスタムハイブリッド行/列メジャーフォーマットに変える。畳み込みまたは行列乗算器回路要素362は、入力データと重み行列520からの選択された重み行列との間の行列乗算を実施する。一実装形態では、行列乗算回路362は、乗算器アキュムレータ回路のシストリックアレイである。ReLU回路364は、ニューラルネットワークのための活性化関数およびスケーリング関数を実装する。例示的なアプリケーションでは、プーリング回路366は、後続の層に課される計算要求を低減するために、畳み込み層間のデータの空間サイズを低減する。空間サイズの低減はまた、オーバーフィッティング(overfitting)を回避するのを助ける。例示的なアプリケーションでは、プーリング回路は最大プール関数を実装する。ディスパッチおよびアドレッシング回路は、B/Cバッファ518に出力行列として記憶するために、ReLUおよびスケーリング回路364からのデータと、プーリング回路366からのデータとの間で選択するように、マルチプレクサ368を制御する。
【0046】
図6は、層単位命令のパッケージを処理するためのニューラルネットワークアクセラレータを構成し、処理のために、重み、入力データ、および層単位命令のパッケージをニューラルネットワークアクセラレータに与えることにおいて、KAインターフェースによって実施されるプロセスのフローチャートを示す。
【0047】
ブロック602において、KAインターフェースは、ニューラルネットワークの層の動作を実施するために必要とされる重み行列を集める。重み行列は、MLフレームワーク410におけるニューラルネットワークの仕様から取得され得る。ニューラルネットワークの各層は、関連する重み行列を有する。KAインターフェースは、重み行列の集合をRAM226の連続アドレス空間のブロック中に書き込む。
【0048】
KAインターフェース412は、ブロック604において、B/Cバッファのサイズを決定する。例示的な実装形態では、KAインターフェースは、MLフレームワーク410によって定められるニューラルネットワークの仕様をスキャンする。仕様をスキャンすることにおいて、KAインターフェースは、ニューラルネットワークの異なる層におけるBおよびC行列の定義を探索し、BおよびC行列の最大サイズを決定する。B/Cバッファのサイズは、BおよびC行列の最大サイズの2倍になるように算出される。ニューラルネットワークアクセラレータが、画像のバッチなど、入力データの複数のセットを処理する適用例では、B/Cバッファのサイズは、
2*max(B,C)*num-sets
であり得る。
ここで、max(B,C)はBおよびC行列の最大サイズであり、num-setsは、画像のRGBチャネルなど、入力データのセットの数である。
【0049】
ブロック606において、KAインターフェースは、重み行列、命令パッケージ、およびB/CバッファのRAM226中のベースアドレスでニューラルネットワークアクセラレータを構成する。ニューラルネットワークアクセラレータは、ベースアドレスを構成レジスタ408に書き込むことによって構成され得る。
【0050】
ブロック608におけるKAインターフェースは、ニューラルネットワークの層を通して(1つまたは複数の)入力データセットを実行するために、MLフレームワークからコマンドを受信する。コマンドに応答して、ブロック610において、KAインターフェースは、層単位命令を命令のパッケージにアセンブルし、層単位命令は、MLフレームワークによって定義されるニューラルネットワークの仕様に基づいて生成される。たとえば、特定のアプリケーションでは、MLフレームワークは、以下のように、層におけるニューラルネットワーク動作を定義する。
畳み込み1
ReLu1
最大プール1
畳み込み2
ReLu2
最大プール2
畳み込み3
ReLu3
畳み込み4
ReLu4
畳み込み5
ReLu5
最大プール5
FC6
FC7
FC8
ここで、各整数はニューラルネットワークにおける層を示す。層は、アルゴリズム説明では1から、特定の実装形態では0から番号付けされ得る。両方の説明は交換可能である。ニューラルネットワーク層の定義に基づいて、KAインターフェースは、命令パッケージ中に含めるための層単位命令を準備する。たとえば、上記の例示的なニューラルネットワーク定義に基づくAlexnet畳み込みニューラルネットワークの層2のための層単位命令は、以下の通りである。
M:192
N:5832
K:1600
scaleFPGAC:26
A_offset:24567
do im2col:2
batch size:8
img ch:64 w:27 w_padded:32 h:27
out w:27 w_padded:32
maxpool:2
relu:true
【0051】
例示的な層単位命令では、Mに関連する値は、重み行列Aの行数と出力行列Cの行数とを指定する。Nに関連する値は、画像行列Bの列数と出力行列Cの列数とを指定する。Kに関連する値は、Aの列とBの行とを指定する。scaleFPGACに関連する値は、層3において使用するために、層2からの算出された値をスケーリングするために使用されるスケーリングファクタを指定する。A_offsetに関連する値は、層2のための重み行列が見つけられる、重み行列520のベースアドレスからのオフセットを指定する。
【0052】
パラメータ「do im2col:2」は、層2ジオメトリの画像から列へのフォーマッティングが実施されるべきであることを指定する。パラメータ「batch size:8」は、入力データの8つのセットが処理されるべきであることを指定する。パラメータ「img ch:64 w:27 w_padded:32 h:27」は、層2における入力データセット中のチャネルの数を指定する。パラメータ「out w:27 w_padded:32」は、算出アレイによって必要とされるデータサイズと整合させるための入力データのパディングを指定する。パラメータ「maxpool:2」は、層2の最大プール動作が実施されるべきであることを指定する。パラメータ「relu:true」は、層1のrelu動作が実施されるべきであることを指定する。
【0053】
層単位命令が、ニューラルネットワークのすべての層についてアセンブルされると、ブロック612において、KAインターフェースは、層単位命令のパッケージをRAM226に書き込む。ブロック614において、KAインターフェースは、入力データをRAM中のB/Cバッファに書き込み、命令パッケージおよび入力データがRAMに書き込まれると、ブロック616において、KAインターフェースは、ニューラルネットワークを通して入力データを処理することを開始するようにニューラルネットワークアクセラレータにシグナリングする。ニューラルネットワークアクセラレータが処理の完了をシグナリングすることに応答して、ブロック618において、KAインターフェースは、出力データをRAM中のB/Cバッファから読み取る。
【0054】
図7は、ニューラルネットワーク命令のパッケージを処理することにおいて、ニューラルネットワークアクセラレータによって実施されるプロセスのフローチャートを示す。ブロック702において、ニューラルネットワークアクセラレータ238は、層単位命令を命令パッケージ516から読み取る。指定された重み行列と、入力および出力データのためのB/Cバッファへのアドレスとのアドレッシングが、ブロック704において、ニューラルネットワークアクセラレータによって確立される。重み行列のアドレスは、マージされた重み行列520のベースアドレス、および層単位命令によって指定されたオフセットとして決定される。
【0055】
B/Cバッファは、入力データと出力データの両方を記憶するために使用され、ニューラルネットワークのある層からの出力データは、次の連続する層への入力データである。ベース入力アドレスは、現在の層のためのB/Cバッファ中の入力データのベースアドレスを参照し、ベース出力アドレスは、現在の層のためのB/Cバッファ中の出力データのベースアドレスを参照する。処理が、ある層から次の連続する層に遷移するとき、ベース入力アドレスのために使用されるアドレスと、ベース出力アドレスのために使用されるアドレスとがスワップされる。アドレススワッピング方式は、ニューラルネットワークアクセラレータをある層の処理から次の層の処理に遷移させるときのデータのコピーをなくす。
【0056】
ブロック706において、ニューラルネットワークアクセラレータは、指定されたパラメータを使用して、層単位命令において指定されたニューラルネットワーク動作を実施する。上記に示された例示的な層単位命令では、畳み込み、行列乗算、im2col、最大プール、およびrelu動作が実施される。ニューラルネットワークアクセラレータは、決定ブロック708において、処理されるべきさらなる層単位命令があるか否かを決定する。さらなる層単位命令がある場合、ブロック710において、ニューラルネットワークアクセラレータは、次の命令を命令パッケージから読み取り、ブロック704に戻って、次の命令のためにセットアップする。さらなる層単位命令がない場合、入力データのニューラルネットワークアクセラレータ処理は完了し、ブロック712において、ニューラルネットワークアクセラレータは、完了をホストにシグナリングする。
【0057】
図8は、0~4と番号付けされた5つのニューラルネットワーク層のための、例示的な重み行列802のアドレッシングおよび例示的な入出力バッファ(「B/Cバッファ」)804のアドレッシングを示す。重み行列802のベースアドレスは「重みベース」とラベル付けされ、層0重みは重みベースから開始して、記憶される。層1~4のための重み行列は、重みベースからのそれぞれのオフセットから開始して、記憶される。層1オフセットは「L1オフセット」である、層2オフセットは「L2オフセット」である、などである。B/Cバッファのベースアドレスは「B/Cベース」とラベル付けされ、これは、B/Cバッファの第1の部分のベースアドレスとして使用され、B/Cバッファの第2の部分のアドレスは、B/Cベース+BCオフセットにある。
【0058】
ブロック806、808、810、812、および814は、それぞれ、層0~4において、指定されたニューラルネットワーク動作を実施することにおいて、ニューラルネットワークアクセラレータ238によって実施される処理を表す。A、B、およびCは、各層へのアドレス入力を示す。Aは重み行列のベースアドレスであり、Bは入力データ行列のベースアドレスであり、Cは出力データ行列のベースアドレスである。
【0059】
層0の場合、重み行列のベースアドレスは重みベースであり、入力行列のベースアドレスはB/Cベースであり、出力行列のベースアドレスはB/Cベース+BCオフセットである。層1に移動すると、層1命令は、層1のための重み行列のオフセットとしてL1オフセットを指定し、層1のための重み行列のベースアドレスは、重みベース+L1オフセットである。重み行列のベースアドレスは、層単位命令における指定されたオフセットに従って、各層における入力のために調整される。
【0060】
B行列のアドレスとC行列のアドレスとは、層0から層1に遷移する際にスワップされ、層0からの出力は層1への入力になる。層0への入力のために使用されるB/Cバッファの部分は、層1からの出力のための部分になる。詳細には、入力行列のベースアドレスはB/Cベース+BCオフセットに変化し、出力行列のベースアドレスはB/Cベースに変化する。本例では、偶数番号の層は、B/Cベースに基づくB/Cバッファの部分からデータを入力し、B/Cベース+BCオフセットに基づくB/Cバッファの部分にデータを出力する。奇数番号の層は、B/Cベース+BCオフセットに基づくB/Cバッファの部分からデータを入力し、B/Cベースに基づくB/Cバッファの部分にデータを出力する。
【0061】
図9は、一例による、プログラマブルIC228を示すブロック図である。プログラマブルIC228は、プログラマブルロジック部3と、構成ロジック部25と、構成メモリ26とを含む。プログラマブルIC228は、NVM224、RAM226、および他の回路29など、外部回路に連結され得る。プログラマブルロジック部3は、論理セル30と、サポート回路31と、プログラマブル相互接続32とを含む。論理セル30は、複数の入力の一般的な論理関数を実装するように構成され得る回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用の回路を含む。論理セルとサポート回路31とは、プログラマブル相互接続32を使用して相互接続され得る。論理セル30をプログラムするための情報と、サポート回路31のパラメータを設定するための情報と、プログラマブル相互接続32をプログラムするための情報とが、構成ロジック部25によって構成メモリ26に記憶される。構成ロジック部25は、不揮発性メモリ224または任意の他のソース(たとえば、DRAM226または他の回路29)から構成データを取得することができる。いくつかの例では、プログラマブルIC228は処理システム2を含む。処理システム2は、(1つまたは複数の)マイクロプロセッサ、メモリ、サポート回路、IO回路などを含むことができる。たとえば、処理システム2は、処理システム210と同様の回路を含むことができる。いくつかの例では、処理システム2は、処理システム210の代わりに使用され得る。そのような場合、コンピューティングシステム108全体がプログラマブルIC228を使用して実装され得、ソフトウェア206は処理システム2上で実行する。
【0062】
図10は、トランシーバ37、構成可能論理ブロック(「CLB」)33、ランダムアクセスメモリブロック(「BRAM」)34、入出力ブロック(「IOB」)36、構成およびクロッキングロジック部(「CONFIG/CLOCKS」)42、デジタル信号処理ブロック(「DSP」)35、特殊な入出力ブロック(「I/O」)41(たとえば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視ロジック部などの他のプログラマブルロジック部39を含む、多数の異なるプログラマブルタイルを含むプログラマブルIC228のFPGA実装形態を示す。FPGAはまた、PCIeインターフェース40、アナログデジタル変換器(ADC)38などを含むことができる。
【0063】
いくつかのFPGAでは、各プログラマブルタイルは、図10の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含むことができる。各プログラマブル相互接続要素43は、同じタイルまたは他のタイル中の(1つまたは複数の)隣接するプログラマブル相互接続要素の相互接続セグメント49への接続をも含むことができる。各プログラマブル相互接続要素43は、論理ブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続をも含むことができる。一般的なルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックを備える論理ブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は、1つまたは複数の論理ブロックにわたることができる。一般的なルーティングリソースとともにとられるプログラマブル相互接続要素43は、示されているFPGAのためのプログラマブル相互接続構造(「プログラマブル相互接続」)を実装する。
【0064】
例示的な一実装形態では、CLB33は、ユーザロジック部を実装するようにプログラムされ得る構成可能論理要素(「CLE」)44と、単一のプログラマブル相互接続要素(「INT」)43とを含むことができる。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のエリアに制限されない。
【0065】
描かれている例では、ダイの中心の近くの水平方向のエリアが、構成、クロック、および他の制御ロジック部のために使用される。この水平方向のエリアまたは列から延びる垂直方向の列51が、FPGAの幅にわたってクロックおよび構成信号を分散させるために使用される。
【0066】
図10に示されているアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構築する規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用のロジック部であり得る。
【0067】
図10は、例示的なFPGAアーキテクチャを示すことを意図されているにすぎないことに留意されたい。たとえば、1つの行中の論理ブロックの数、行の相対幅、行の数および順序、行中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図10の上部に含まれる相互接続/論理実装形態は、例にすぎない。たとえば、実際のFPGAでは、ユーザロジック部の効率的な実装を容易にするために、CLBが現れるところならどこでも、CLBの2つ以上の隣接する行が典型的に含まれるが、隣接するCLB行の数は、FPGAの全体的なサイズによって変動する。
【0068】
いくつかの非限定的な例が以下で提供される。
【0069】
一例では、ニューラルネットワークシステムにおける処理の方法が提供され得る。そのような方法は、ホストコンピュータシステムによって、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリに書き込むことと、ホストコンピュータシステムによって複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、ホストコンピュータシステムによって入力データと命令パッケージとを共有メモリに書き込むことと、
ニューラルネットワークアクセラレータによって命令パッケージを共有メモリから読み取ることと、ニューラルネットワークアクセラレータによって命令パッケージの複数の層単位命令を処理することとを含み得る。
【0070】
あるそのような方法では、複数の重み行列を書き込むことは、複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリに書き込むことを含み得る。
【0071】
あるそのような方法では、複数の重み行列を書き込むことは、複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリ中の連続アドレス空間に書き込むことを含み得る。
【0072】
あるそのような方法は、重み行列の共有メモリ中のベースアドレスを示すパラメータを、ホストコンピュータシステムからニューラルネットワークアクセラレータに伝えることをさらに含み得る。
【0073】
あるそのような方法では、複数の層単位命令を処理することは、第1の層単位命令を処理することと、その後に連続して命令パッケージの第2の層単位命令を処理することと、第1の層単位命令を処理することにおいて、入力データを共有メモリの第1の部分から読み取り、出力データを共有メモリの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有メモリの第2の部分から読み取り、出力データを共有メモリの第1の部分に書き込むこととを含み得る。
【0074】
あるそのような方法は、共有バッファの第1の部分の共有メモリ中のアドレスを示す第1のパラメータと、共有バッファの第2の部分の共有バッファ中のオフセットを示す第2のパラメータとを、ホストコンピュータシステムからニューラルネットワークアクセラレータに伝えることをさらに含み得、複数の層単位命令を処理することは、第1の層単位命令を処理することと、その後に連続して命令パッケージの第2の層単位命令を処理することと、第1の層単位命令を処理することにおいて、入力データを共有バッファの第1の部分から読み取り、出力データを共有バッファの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有バッファの第2の部分から読み取り、出力データを共有バッファの第1の部分に書き込むこととを含み得る。
【0075】
あるそのような方法は、ホストコンピュータシステムによって、ニューラルネットワークの仕様から、ニューラルネットワークの複数の層において参照される入力行列および出力行列のサイズの最大値に基づいて共有バッファのサイズを決定することをさらに含み得る。
【0076】
あるそのような方法では、複数の層単位命令をアセンブルすることは、層単位命令のうちの1つまたは複数において、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを含み得る。
【0077】
あるそのような方法では、複数の層単位命令のうちの第1の層単位命令と第2の層単位命令とは、ニューラルネットワーク動作の異なるセットを指定する。
【0078】
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージ中での出現の順に命令パッケージ中の複数の層単位命令を処理することを含み得る。
【0079】
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージ中のn個の命令について、命令i+1の実行を開始する前に命令iの実行を完了することを処理することを含み、1≦i≦nであり得る。
【0080】
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージによって定義される状態機械のための有限状態機械遷移表を評価することを含み得る。
【0081】
別の例では、ニューラルネットワーク処理システムが提供され得る。そのようなニューラルネットワーク処理システムは、共有メモリと、共有メモリに接続されたホストコンピュータシステムであって、ホストコンピュータシステムが命令で構成され得、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの複数の層に関連する複数の重み行列を共有メモリに書き込むことと、複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、入力データと命令パッケージとを共有メモリに書き込むこととを行わせる、ホストコンピュータシステムと、共有メモリにおよびホストコンピュータシステムに接続されたニューラルネットワークアクセラレータであって、ニューラルネットワークアクセラレータが、命令パッケージを共有メモリから読み取ることと、命令パッケージの複数の層単位命令を処理することとを行うように構成され得る、ニューラルネットワークアクセラレータとを含み得る。
【0082】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の重み行列を書き込むことを行わせる命令は、ホストコンピュータシステムに、ニューラルネットワークアクセラレータによって複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリに書き込むことを行わせる命令を含み得る。
【0083】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の重み行列を書き込むことを行わせる命令は、ホストコンピュータシステムに、ニューラルネットワークアクセラレータによって複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリ中の連続アドレス空間に書き込むことを行わせる命令を含み得る。
【0084】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムは命令でさらに構成され得、命令は、実行されたとき、ホストコンピュータシステムに、重み行列の共有メモリ中のベースアドレスを示すパラメータをニューラルネットワークアクセラレータに伝えることを行わせる。
【0085】
あるそのようなニューラルネットワーク処理システムでは、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージの第1の層単位命令と第2の層単位命令とを連続して処理することと、第1の層単位命令を処理することにおいて、入力データを共有メモリの第1の部分から読み取り、出力データを共有メモリの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有メモリの第2の部分から読み取り、出力データを共有メモリの第1の部分に書き込むこととを行うように構成され得る。
【0086】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムは命令でさらに構成され得、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの仕様から、ニューラルネットワークの複数の層において参照される入力行列および出力行列のサイズの最大値に基づいて共有バッファのサイズを決定することと、共有バッファの第1の部分の共有メモリ中のアドレスを示す第1のパラメータと、共有バッファの第2の部分の共有バッファ中のオフセットを示す第2のパラメータとを、ニューラルネットワークアクセラレータに伝えることとを行わせ、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージの第1の層単位命令と第2の層単位命令とを連続して処理することと、第1の層単位命令を処理することにおいて、入力データを共有バッファの第1の部分から読み取り、出力データを共有バッファの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有バッファの第2の部分から読み取り、出力データを共有バッファの第1の部分に書き込むこととを行うようにさらに構成され得る。
【0087】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の層単位命令をアセンブルすることを行わせる命令は、ホストコンピュータシステムに、層単位命令のうちの1つまたは複数において、畳み込み、行列乗算、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを行わせる命令を含む。
【0088】
あるそのようなニューラルネットワーク処理システムでは、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージ中での出現の順に命令パッケージ中の複数の層単位命令を処理するようにさらに構成され得る。
【0089】
態様および特徴はいくつかの場合には個々の図で説明され得るが、組合せが明示的に示されないか、または組合せとして明示的に説明されなくても、ある図からの特徴は別の図の特徴と組み合わせられ得ることが諒解されよう。
【0090】
方法およびシステムは、ニューラルネットワーク処理のための様々なシステムに適用可能であると考えられる。他の態様および特徴は、本明細書の考慮から当業者に明らかになろう。方法およびシステムは、ソフトウェアを実行するように構成された1つまたは複数のプロセッサとして、特定用途向け集積回路(ASIC)として、またはプログラマブル論理デバイス上のロジック部として実装され得る。明細書および図面は例としてのみ考慮されることが意図されており、本発明の真の範囲は以下の特許請求の範囲によって示される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10