JP7196167B2 - ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 - Google Patents

ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 Download PDF

Info

Publication number
JP7196167B2
JP7196167B2 JP2020521412A JP2020521412A JP7196167B2 JP 7196167 B2 JP7196167 B2 JP 7196167B2 JP 2020521412 A JP2020521412 A JP 2020521412A JP 2020521412 A JP2020521412 A JP 2020521412A JP 7196167 B2 JP7196167 B2 JP 7196167B2
Authority
JP
Japan
Prior art keywords
layer
neural network
instructions
processing
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020521412A
Other languages
English (en)
Other versions
JP2020537785A (ja
JP2020537785A5 (ja
Inventor
アーロン ウン,
エリオット ドゥレー,
エーサン ギャセミ,
ショウ テン,
インドリフ ゼイダ,
ヨンジュン ウー,
ショーン セトル,
アンシュ シラサオ,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xilinx Inc filed Critical Xilinx Inc
Publication of JP2020537785A publication Critical patent/JP2020537785A/ja
Publication of JP2020537785A5 publication Critical patent/JP2020537785A5/ja
Application granted granted Critical
Publication of JP7196167B2 publication Critical patent/JP7196167B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Advance Control (AREA)
  • Image Analysis (AREA)
  • Complex Calculations (AREA)

Description

本開示は、一般に、ニューラルネットワーク処理に関する。
機械学習は、コンピューティングシステムが、明示的にプログラムされることなしに働くことを引き起こす科学である。古典的な機械学習は、K平均クラスタリング、線形およびロジスティック回帰、確率的勾配降下法、相関ルール学習などを含む、様々なクラスタリングおよび分類技法を含む。深層学習は、機械学習におけるより新しい最先端領域である。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する機械学習アルゴリズムのクラスである。深層学習アルゴリズムは、教師なし(たとえば、パターン分析)であるか、または教師あり(たとえば、分類)であり得る。深層学習アルゴリズムは、(本明細書では「ニューラルネットワーク」と呼ばれる)人工ニューラルネットワーク(ANN)の層を使用して実装され得る。
概して、ニューラルネットワークは、グラフ中で結合されたノード(すなわち、「ニューロン」)の集合である。ニューラルネットワーク中のノードは、重み付けされた入力の和を算出し、その和に随意のバイアスを加算する。ノードの出力は、(「活性化関数」と呼ばれる)最終的な和の関数である。例示的な活性化関数は、シグモイド関数、双曲線正接(tanh)関数、正規化線形ユニット(ReLU)関数、および恒等関数を含む。ニューラルネットワークモデルは、しばしば、特定のトポロジーと、対応する重みおよびバイアスとを定義するノードの層に編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
概して、ニューラルネットワークは、入力層と出力層とを含み、入力層と出力層との間の1つまたは複数の隠れ層を随意に含むことができる。深層学習アプリケーションにおいて使用されるニューラルネットワークは、典型的に、多くの隠れ層を含み、それにより、深層ニューラルネットワーク(DNN)という用語が生じる。ニューラルネットワークの層は、密結合される(たとえば、層中の各ノードが前の層中のすべてのノードに全結合される)か、またはスパース結合され得る(たとえば、層中の各ノードが前の層中のノードの一部のみに結合される)。畳み込みニューラルネットワーク(CNN)は、畳み込み層と呼ばれる、1つまたは複数のスパース結合された層を含む、DNNのタイプである。CNNは、画像またはビデオデータを処理するのに好適である。DNNの他のタイプは、音声およびテキストデータを処理するのに好適であるリカレントニューラルネットワーク(RNN)を含む。
フィールドプログラマブルゲートアレイ(FPGA)は、ソフトウェアから呼び出される関数を加速する回路を実装するために使用されている。ソフトウェアから呼び出される関数を加速する回路は、ハードウェアアクセラレータと呼ばれる。ハードウェアアクセラレータの例は、画像処理ソフトウェアから呼び出され得るFPGA回路として実装される様々な画像フィルタを含む。
FPGAベースの実装形態は、ホストコンピュータシステムによるFPGAアクセス可能メモリへの重みおよび入力データの転送と、ホストコンピュータシステムへの出力データの転送とを伴う。ホストコンピュータシステムとFPGAアクセラレータとの間のデータの転送は、性能を劣化させることがある。CPUまたはGPU上などの他の一般的に使用されるニューラルネットワーク(NN)実装形態と比較して、FPGAベースの実装形態は、FPGA回路がGPUよりも速くデータを処理し、プロセス中に消費する電力を少なくすることができるので、有利であり得る。
ニューラルネットワークシステムにおける処理の開示される方法は、ホストコンピュータシステムによって、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリに書き込むことを含む。ホストコンピュータシステムは、さらに、複数の層単位命令を命令パッケージにアセンブルする。各層単位命令は、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する。ホストコンピュータシステムは、入力データと命令パッケージとを共有メモリに書き込む。ニューラルネットワークアクセラレータは、命令パッケージを共有メモリから読み取り、命令パッケージの複数の層単位命令を処理する。
開示されるニューラルネットワーク処理システムは、共有メモリと、共有メモリに接続されたホストコンピュータシステムと、共有メモリに接続されたニューラルネットワークアクセラレータとを含む。ホストコンピュータシステムは命令で構成され、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの複数の層に関連する複数の重み行列を共有メモリに書き込むことを行わせる。ホストコンピュータシステムはまた、複数の層単位命令を命令パッケージにアセンブルするようにプログラムされる。各層単位命令は、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する。ホストコンピュータシステムは、入力データと命令パッケージとを共有メモリに書き込む。ニューラルネットワークアクセラレータは、命令パッケージを共有メモリから読み取り、命令パッケージの複数の層単位命令を処理するように構成される。
他の特徴は、以下の発明を実施するための形態および特許請求の範囲の考慮から認識されよう。
方法およびシステムの様々な態様および特徴は、以下の発明を実施するための形態を検討し、以下の図面を参照すると明らかになろう。
一例による、ニューラルネットワークを実装するためのシステムを示すブロック図である。 一例による、コンピューティングシステムを示すブロック図である。 一例による、アクセラレーション回路を示すブロック図である。 一実装形態による、例示的なニューラルネットワーク処理システムを示す図である。 図3に示されている例示的なニューラルネットワークアクセラレータの別のビューを示す図である。 層単位命令のパッケージを処理するためのニューラルネットワークアクセラレータを構成し、処理のために、重み、入力データ、および層単位命令のパッケージをニューラルネットワークアクセラレータに与えることにおいて、KAインターフェースによって実施されるプロセスのフローチャートである。 ニューラルネットワーク命令のパッケージを処理することにおいて、ニューラルネットワークアクセラレータによって実施されるプロセスのフローチャートである。 5つのニューラルネットワーク層のための例示的な重み行列のアドレッシングおよび例示的な入出力バッファ(「B/Cバッファ」)のアドレッシングを示す図である。 一例による、プログラマブルICを示すブロック図である。 プログラマブルICのFPGA実装形態を示す図である。
以下の説明では、本明細書で提示される特定の例について説明するために、多数の具体的な詳細が記載される。しかしながら、1つまたは複数の他の例および/またはこれらの例の変形形態が、下記のすべての具体的な詳細なしに実施され得ることは、当業者に明らかであろう。他の事例では、本明細書の例の説明を不明瞭にしないように、よく知られている特徴は詳細に説明されていない。説明しやすいように、同じ要素または同じ要素の追加のインスタンスを指すために、異なる図において同じ参照番号が使用され得る。
開示される実装形態は、ホストコンピュータシステムとニューラルネットワークアクセラレータとを含むニューラルネットワーク処理システムに関連するオーバーヘッドおよびレイテンシを低減する。システムおよび方法は、ホストコンピュータシステムとニューラルネットワークアクセラレータとの間で共有されるメモリにおよびメモリからデータを転送することに関与するダイレクトメモリアクセス(DMA)動作の数を最小限に抑える。ホストコンピュータシステムは、ニューラルネットワークアクセラレータによる処理の始動の前に、処理のためにニューラルネットワークのすべての層によって必要とされる入力データおよびパラメータのすべてをアセンブルし、共有メモリ中にデータおよびパラメータの集合を確立する。数個のDMA動作を用いて、ニューラルネットワークアクセラレータは、ニューラルネットワークを通る完全なパスのために必要とされるデータおよび構成パラメータを有し、それにより、オーバーヘッドおよびレイテンシを低減する。
開示される方法およびシステムは、畳み込みニューラルネットワーク(CNN)、リカレントニューラルネットワーク(RNN)、および行列乗算または畳み込みなどの動作を伴う他のニューラルネットワークに適用可能である。簡潔のために、ホストコンピュータシステムは「ホスト」と呼ばれることもあり、ニューラルネットワークアクセラレータは、同じくまたは代替的に、「アクセラレーション回路」、「カーネルアクセラレータ」または「カーネルアクセラレータ回路」と呼ばれることがある。
開示されるシステムおよび方法の例示的なアプリケーションは、畳み込みニューラルネットワーク(CNN)である。CNNは、動作の層を有する有向グラフとして表され得る。各層は、CONV(畳み込み)、または画像から列への変換(「im2col」)、一般的な行列乗算(「GEMM」)、活性化(たとえば、正規化線形ユニット、「ReLU」関数)、プーリング(たとえば、「最大プール」)、局所応答正規化(LRN層)、および内積(たとえば、「全結合」(FC)層)など、1つまたは複数の動作を伴うことができる。各層への入力は、画像またはボイスサンプルなど、データと、トレーニングされた重みとであり、すべて行列として表される。開示されるシステムおよび方法では、ニューラルネットワークのすべての層ごとに処理されるべき、すべての重み行列、構成パラメータ、および入力データは、ニューラルネットワークアクセラレータが入力データのニューラルネットワーク処理を始動するより前に、ホストからニューラルネットワークアクセラレータに与えられる。
開示されるシステムおよび方法の1つの特徴では、ニューラルネットワークの異なる層において畳み込みまたは行列乗算において使用される別個の重み行列は、データの単一のブロックにマージされ、共有メモリの連続アドレス空間に記憶される。組み合わせられた重み行列は、ニューラルネットワークアクセラレータが、必要とされる重みに連続的にアクセスすることを可能にし、これは、不連続アドレスにアクセスするよりも効率的である。連続アドレス空間はまた、カーネルプロセッサがニューラルネットワークのある層の処理から次の層の処理に遷移するとき、新しい重み行列がロードされるのを待つ必要なしに、アクセスを可能にする。
別の特徴では、ホストコンピュータシステムは、ニューラルネットワークアクセラレータによる処理を制御するために、複数の層単位命令のパッケージを作成する。ニューラルネットワークアクセラレータによる処理は、それにより、ニューラルネットワークアプリケーションに従ってカスタマイズされ得る。さらに、層単位命令のパッケージは、ニューラルネットワークの層を通して入力データを処理することにおいて、ホストとニューラルネットワークアクセラレータとの間の対話の数を低減する。層単位命令のパッケージは、さらに、各層単位命令による適切な重み行列への高速参照を与えるために、重み行列のブロックへのオフセットを指定する。
バッファは、入力データ(「B行列」)および出力データ(「C行列」)を記憶するために、ニューラルネットワークの層間で共有される。共有「B/Cバッファ」は、ある層の結果を次の層の入力バッファにコピーする必要を回避することによって、メモリ要求を低減し、ニューラルネットワークアクセラレータの効率を改善する。ニューラルネットワークアクセラレータは、処理が、ある層から次の層に遷移するとき、B行列のために使用されるB/Cバッファの部分と、C行列のために使用されるB/Cバッファの部分との間を交互する。
次に図面を参照すると、図1は、一例による、ニューラルネットワークを実装するためのシステム100を示すブロック図である。システム100は、コンピュータシステム102と、1つまたは複数のコンピュータシステム108とを含む。コンピュータシステム102は、1つまたは複数の設計ツール104を与えるソフトウェアを実行するように構成された従来のコンピューティング構成要素を含む。各コンピュータシステム108は、1つまたは複数のニューラルネットワーク110を実装する。(1つまたは複数の)ニューラルネットワーク110は、アプリケーション112と、アクセラレーションライブラリ114と、1つまたは複数のハードウェアアクセラレータ116とを使用して実装される。
一例では、(1つまたは複数の)ハードウェアアクセラレータ116は、フィールドプログラマブルゲートアレイ(FPGA)など、プログラマブル集積回路(IC)を含む。アクセラレーションライブラリ114は、(1つまたは複数の)ハードウェアアクセラレータ116とインターフェースするためのアプリケーションプログラミングインターフェース(API)を与える。アクセラレーションライブラリ114はまた、ニューラルネットワーク層および他のタイプのニューラルネットワーク構造のあらかじめ定義されたおよび最適化された実装形態を含む、ニューラルネットワーク関数を与えるライブラリを含むことができる。したがって、(1つまたは複数の)ニューラルネットワーク110は、(1つまたは複数の)ハードウェアアクセラレータ116において実装されるハードウェア部分、ならびにアクセラレーションライブラリ114において実装されるソフトウェア部分の両方を含むことができる。アプリケーション112は、(1つまたは複数の)ニューラルネットワーク116を実装するように(1つまたは複数の)ハードウェアアクセラレータ116をプログラムし、制御するためにアクセラレーションライブラリ114のAPIを起動する。
設計者は、(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を活用することができる。
ユーザは、プログラミング言語(たとえば、C、C++、Pythonなど)を使用して、アプリケーション112を定義することができる。ユーザは、Caffe、TensorFlow、MXNetなど、ニューラルネットワークフレームワークおよびライブラリを活用することができる。
図2は、一例による、コンピューティングシステム108を示すブロック図である。コンピューティングシステム108は、ハードウェア204と、ハードウェア204上で実行するソフトウェア206とを含む。ハードウェア204は、処理システム210と、システムメモリ216と、ストレージデバイス(「ストレージ218」)と、ハードウェアアクセラレータ116とを含む。ソフトウェア206は、オペレーティングシステム(OS)244と、アクセラレーションライブラリ114と、アプリケーション112とを含む。処理システム210、システムメモリ216、およびストレージ218は、本明細書で参照されるホストコンピュータシステムを備える。
処理システム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)上に実装され得る。
システムメモリ216は、実行可能な命令およびデータなど、情報が記憶され、取り出されることを可能にするデバイスである。システムメモリ216は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)など、1つまたは複数のランダムアクセスメモリ(RAM)モジュールを含むことができる。ストレージデバイス218は、ローカルストレージデバイス(たとえば、1つまたは複数のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク)、および/またはコンピューティングシステム108が1つまたは複数のネットワークデータストレージシステムと通信することを可能にするストレージインターフェースを含む。ハードウェア204は、グラフィックスカード、ユニバーサルシリアルバス(USB)インターフェースなど、コンピューティングシステムの様々な他の従来のデバイスおよび周辺機器を含むことができる。
ハードウェアアクセラレータ116は、プログラマブルIC228と、不揮発性メモリ224と、RAM226とを含む。プログラマブルIC228は、FPGAなど、またはFPGAを有するSoCなどであり得る。NVM224は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。RAM226は、DDR DRAMなどを含むことができる。プログラマブルIC228は、NVM224およびRAM226に連結される。プログラマブルIC228は、処理システム210の周辺バス215にも連結される。
OS244は、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)など、当技術分野において知られている任意のコモディティオペレーティングシステムであり得る。アクセラレーションライブラリ114は、ハードウェアアクセラレータ116のコマンドおよび制御のためのAPIを与えるドライバおよびライブラリを含む。アプリケーション112は、(1つまたは複数の)ニューラルネットワークを実装するためにアクセラレーションライブラリ114のAPIを起動する、マイクロプロセッサ212上で実行するソフトウェアを含む。
動作中、プログラマブル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を含むことができる。
静的領域234は、静的領域234の回路要素がプログラマブル領域236の再構成にわたって不変のままであるという点で「静的」である。一例では、サポート回路240は、PCIeエンドポイント回路、ダイレクトメモリアクセス(DMA)コントローラ、相互接続、メモリコントローラ、メモリインターフェース回路(たとえば、DDRインターフェース)、(部分再構成をサポートするための)デカップラ回路、フラッシュプログラマー、デバッグ回路などを含む。いくつかの例では、プログラマブル領域236は、サポート回路240のいずれをも含まない。他の例では、いくつかのサポート回路は、プログラマブル領域236において実装される。そのような場合、プログラマブル領域236は「拡張されたプログラマブル領域」と呼ばれることがある。いずれの場合も、一例では、PCIe回路およびDMA回路など、いくつかのサポート回路240は、常に、静的領域234中に存在する。
図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に連結される。
動作中、アクセラレーションライブラリ114は、PCIe DMAコントローラ304を通してRAM226に直接アクセスすることができる。アクセラレーションライブラリ114はまた、PCIe DMAコントローラ304を通してニューラルネットワークアクセラレータ238にアクセスすることができる。ニューラルネットワークアクセラレータ238は、メモリコントローラ310を通してRAM226にアクセスすることができる。データは、システムメモリ216とRAM226との間のDMA動作を使用して、ソフトウェア206とニューラルネットワークアクセラレータ238との間で交換され得る。
本例では、ニューラルネットワークアクセラレータ238は、相互接続306と通信するためにインターフェース330、331、および332を使用する。特に、これらのインターフェースは、第1の読取りインターフェース330と、第2の読取りインターフェース331と、読取り/書込みインターフェース332とを含む。たとえば、読取りインターフェース330は、ニューラルネットワークアクセラレータ238を制御するための制御インターフェースとして使用され得る。読取りインターフェース331は、メモリインターフェース312のうちの第1のメモリインターフェースを通してRAM226から読み取るために使用され得る。読取り/書込みインターフェース332は、メモリインターフェース312のうちの第2のメモリインターフェースを通してRAM226から読取りおよびRAM226に書込みを行うために使用され得る。
ニューラルネットワークアクセラレータ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との間の通信を容易にするための、スイッチ、クロック変換器などを含むことができる。
本例では、相互接続インターフェース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に連結される。
動作中、行列乗算器アレイ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中の様々な回路を制御する。
図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にとってアクセス可能である。
開示される手法は、特定のハードウェアプラットフォームに限定されない。しかしながら、当業者に基準系を与える目的で、ニューラルネットワークアクセラレータは、Xilinx,Incから入手可能である、KINTEX(登録商標) ULTRASCALE(商標)115デバイス上で実装され得る。RAM226は、ニューラルネットワークアクセラレータとともにプリント回路板上に取り付けられたDDR SDRAMである。ホスト402とRAMとの間のインターフェースと、ホストとニューラルネットワークアクセラレータとの間のインターフェースとは、周辺構成要素相互接続エクスプレス(PCIE)である。ニューラルネットワークアクセラレータは、ホストメモリのうちのいくつかをRAMと構成レジスタ408とにマッピングするために、ダイレクトメモリアクセス(DMA)チャネルを使用する。ホストコンピュータシステム402は、MLフレームワーク410とKAインターフェース412とを実行するのに好適な任意のコンピュータシステム、あるいはコンピュータシステムの組合せまたはネットワークであり得る。MLフレームワークは、TensorFlow(商標)、Caffe、およびMXNetなど、プログラミングパッケージを使用して指定され得る。
KAインターフェース412は、ニューラルネットワークアクセラレータ238による処理のために、MLフレームワーク410からニューラルネットワーク要求を受信する。処理のためにニューラルネットワーク要求をニューラルネットワークアクセラレータにサブミットする前に、KAインターフェースは、ニューラルネットワークの層に関連する重み行列を、ニューラルネットワークアクセラレータと共有されるRAM226に書き込む。重み行列のすべては、連続ブロックとして共有メモリに書き込まれ、これは、DMA動作の数およびオーバーヘッドを低減し、ニューラルネットワークの層における畳み込みまたは行列乗算のために重みが必要とされるとき、ニューラルネットワークアクセラレータにとって重みが利用可能であることを確実にする。
MLフレームワーク410からニューラルネットワーク要求を受信したことに応答して、KAインターフェース412は、層単位命令のグループを命令パッケージにアセンブルし、命令パッケージをRAM226に書き込む。各層単位命令は、ニューラルネットワークのそれぞれの層の処理を指定する。さらに、各層単位命令は、共有メモリ中の組み合わせられた重み行列のベースアドレスからの重み行列のそれぞれのオフセットを指定する。ニューラルネットワークの各層の処理は、重み行列の各々にアクセスする。層単位命令はまた、異なる層における異なるニューラルネットワーク動作のための構成パラメータを指定する。たとえば、構成パラメータは、スケーリングファクタと、畳み込みウィンドウおよびストライドと、最大プール処理のための行列次元と、活性化関数とを指定することができる。構成パラメータは、さらに、RAM中の命令パッケージのベースアドレスを含む。ニューラルネットワークの異なる層は、ニューラルネットワーク動作の異なるセットを伴うことができる。
KAアクセラレータは、さらに、ニューラルネットワークアクセラレータの構成レジスタ408中に構成パラメータを確立する。構成パラメータは、重み行列のベースアドレスと、入出力データ行列のベースアドレスと、入出力データ行列のベースアドレスからのオフセットとを含む。重み行列は「A」と呼ばれることがあり、入力データ行列は「B」と呼ばれることがあり、出力データ行列は「C」と呼ばれることがある。
命令のパッケージが処理される準備ができていることを示すKAインターフェース412からの信号に応答して、ニューラルネットワークアクセラレータ238は、命令パッケージからの層単位命令を順次に処理する。命令のパッケージは、プログラムまたは状態機械を効果的に指定し、そのプログラムまたは状態機械に従って、ニューラルネットワークアクセラレータは、ニューラルネットワークの層の指定された処理を実施する。
図5は、図3の例示的なニューラルネットワークアクセラレータ238の別のビューを示す。マージされた重み行列520が、ホストによって書き込まれ、RAM226の連続アドレスに記憶される。例示的なアプリケーションでは、命令パッケージ516中の層単位命令は、ニューラルネットワークの層において実施されるべきニューラルネットワーク動作のセットと、スケーリング、最大プール次元、および活性化関数のための構成パラメータとを指定する。ニューラルネットワーク動作の異なるセットが、ニューラルネットワークアクセラレータによる特定の層単位処理を指示するために、命令パッケージ中の層単位命令のうちの異なる層単位命令において指定され得る。
命令パッケージ516からの層単位命令を処理することにおいて、ニューラルネットワークアクセラレータは、命令を順次に処理する。たとえば、第1の層単位命令が処理され、その後に連続して命令パッケージの第2の層単位命令を処理する。第1の層単位命令を処理することにおいて、ニューラルネットワークアクセラレータ238は、入力データをRAM226中のB/Cバッファ518の第1の部分から読み取り、出力データをRAM中のB/Cバッファの第2の部分に書き込む。第2の層単位命令を処理することにおいて、ニューラルネットワークアクセラレータは、入力データをB/Cバッファの第2の部分から読み取り、出力データをB/Cバッファの第1の部分に書き込む。ニューラルネットワークアクセラレータは、その後、各連続する層単位命令とともに、入力および出力データのために使用されるB/Cバッファの部分間を交互する。
ニューラルネットワークアクセラレータ238は、構成レジスタ408、(図3の読取りおよび書込み制御部を実装する)ディスパッチングおよびアドレッシング論理回路要素502、フォーマッタ回路344、畳み込みまたは行列乗算器回路要素362、正規化線形ユニット(ReLU)およびスケーリング回路364、プーリング回路要素366を含む。マルチプレクサ356および368は、指定されたニューラルネットワーク動作に従ってディスパッチおよびアドレッシングロジック部によって制御される。構成レジスタ中の構成データは、フォーマッタ回路、行列乗算器回路要素、ReLUスケーリング回路、およびプーリング回路要素のための構成パラメータを与える。
ディスパッチおよびアドレッシング回路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を制御する。
図6は、層単位命令のパッケージを処理するためのニューラルネットワークアクセラレータを構成し、処理のために、重み、入力データ、および層単位命令のパッケージをニューラルネットワークアクセラレータに与えることにおいて、KAインターフェースによって実施されるプロセスのフローチャートを示す。
ブロック602において、KAインターフェースは、ニューラルネットワークの層の動作を実施するために必要とされる重み行列を集める。重み行列は、MLフレームワーク410におけるニューラルネットワークの仕様から取得され得る。ニューラルネットワークの各層は、関連する重み行列を有する。KAインターフェースは、重み行列の集合をRAM226の連続アドレス空間のブロック中に書き込む。
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チャネルなど、入力データのセットの数である。
ブロック606において、KAインターフェースは、重み行列、命令パッケージ、およびB/CバッファのRAM226中のベースアドレスでニューラルネットワークアクセラレータを構成する。ニューラルネットワークアクセラレータは、ベースアドレスを構成レジスタ408に書き込むことによって構成され得る。
ブロック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
例示的な層単位命令では、Mに関連する値は、重み行列Aの行数と出力行列Cの行数とを指定する。Nに関連する値は、画像行列Bの列数と出力行列Cの列数とを指定する。Kに関連する値は、Aの列とBの行とを指定する。scaleFPGACに関連する値は、層3において使用するために、層2からの算出された値をスケーリングするために使用されるスケーリングファクタを指定する。A_offsetに関連する値は、層2のための重み行列が見つけられる、重み行列520のベースアドレスからのオフセットを指定する。
パラメータ「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動作が実施されるべきであることを指定する。
層単位命令が、ニューラルネットワークのすべての層についてアセンブルされると、ブロック612において、KAインターフェースは、層単位命令のパッケージをRAM226に書き込む。ブロック614において、KAインターフェースは、入力データをRAM中のB/Cバッファに書き込み、命令パッケージおよび入力データがRAMに書き込まれると、ブロック616において、KAインターフェースは、ニューラルネットワークを通して入力データを処理することを開始するようにニューラルネットワークアクセラレータにシグナリングする。ニューラルネットワークアクセラレータが処理の完了をシグナリングすることに応答して、ブロック618において、KAインターフェースは、出力データをRAM中のB/Cバッファから読み取る。
図7は、ニューラルネットワーク命令のパッケージを処理することにおいて、ニューラルネットワークアクセラレータによって実施されるプロセスのフローチャートを示す。ブロック702において、ニューラルネットワークアクセラレータ238は、層単位命令を命令パッケージ516から読み取る。指定された重み行列と、入力および出力データのためのB/Cバッファへのアドレスとのアドレッシングが、ブロック704において、ニューラルネットワークアクセラレータによって確立される。重み行列のアドレスは、マージされた重み行列520のベースアドレス、および層単位命令によって指定されたオフセットとして決定される。
B/Cバッファは、入力データと出力データの両方を記憶するために使用され、ニューラルネットワークのある層からの出力データは、次の連続する層への入力データである。ベース入力アドレスは、現在の層のためのB/Cバッファ中の入力データのベースアドレスを参照し、ベース出力アドレスは、現在の層のためのB/Cバッファ中の出力データのベースアドレスを参照する。処理が、ある層から次の連続する層に遷移するとき、ベース入力アドレスのために使用されるアドレスと、ベース出力アドレスのために使用されるアドレスとがスワップされる。アドレススワッピング方式は、ニューラルネットワークアクセラレータをある層の処理から次の層の処理に遷移させるときのデータのコピーをなくす。
ブロック706において、ニューラルネットワークアクセラレータは、指定されたパラメータを使用して、層単位命令において指定されたニューラルネットワーク動作を実施する。上記に示された例示的な層単位命令では、畳み込み、行列乗算、im2col、最大プール、およびrelu動作が実施される。ニューラルネットワークアクセラレータは、決定ブロック708において、処理されるべきさらなる層単位命令があるか否かを決定する。さらなる層単位命令がある場合、ブロック710において、ニューラルネットワークアクセラレータは、次の命令を命令パッケージから読み取り、ブロック704に戻って、次の命令のためにセットアップする。さらなる層単位命令がない場合、入力データのニューラルネットワークアクセラレータ処理は完了し、ブロック712において、ニューラルネットワークアクセラレータは、完了をホストにシグナリングする。
図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オフセットにある。
ブロック806、808、810、812、および814は、それぞれ、層0~4において、指定されたニューラルネットワーク動作を実施することにおいて、ニューラルネットワークアクセラレータ238によって実施される処理を表す。A、B、およびCは、各層へのアドレス入力を示す。Aは重み行列のベースアドレスであり、Bは入力データ行列のベースアドレスであり、Cは出力データ行列のベースアドレスである。
層0の場合、重み行列のベースアドレスは重みベースであり、入力行列のベースアドレスはB/Cベースであり、出力行列のベースアドレスはB/Cベース+BCオフセットである。層1に移動すると、層1命令は、層1のための重み行列のオフセットとしてL1オフセットを指定し、層1のための重み行列のベースアドレスは、重みベース+L1オフセットである。重み行列のベースアドレスは、層単位命令における指定されたオフセットに従って、各層における入力のために調整される。
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バッファの部分にデータを出力する。
図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上で実行する。
図10は、トランシーバ37、構成可能論理ブロック(「CLB」)33、ランダムアクセスメモリブロック(「BRAM」)34、入出力ブロック(「IOB」)36、構成およびクロッキングロジック部(「CONFIG/CLOCKS」)42、デジタル信号処理ブロック(「DSP」)35、特殊な入出力ブロック(「I/O」)41(たとえば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視ロジック部などの他のプログラマブルロジック部39を含む、多数の異なるプログラマブルタイルを含むプログラマブルIC228のFPGA実装形態を示す。FPGAはまた、PCIeインターフェース40、アナログデジタル変換器(ADC)38などを含むことができる。
いくつかのFPGAでは、各プログラマブルタイルは、図10の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含むことができる。各プログラマブル相互接続要素43は、同じタイルまたは他のタイル中の(1つまたは複数の)隣接するプログラマブル相互接続要素の相互接続セグメント49への接続をも含むことができる。各プログラマブル相互接続要素43は、論理ブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続をも含むことができる。一般的なルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックを備える論理ブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は、1つまたは複数の論理ブロックにわたることができる。一般的なルーティングリソースとともにとられるプログラマブル相互接続要素43は、示されているFPGAのためのプログラマブル相互接続構造(「プログラマブル相互接続」)を実装する。
例示的な一実装形態では、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のエリアに制限されない。
描かれている例では、ダイの中心の近くの水平方向のエリアが、構成、クロック、および他の制御ロジック部のために使用される。この水平方向のエリアまたは列から延びる垂直方向の列51が、FPGAの幅にわたってクロックおよび構成信号を分散させるために使用される。
図10に示されているアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構築する規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用のロジック部であり得る。
図10は、例示的なFPGAアーキテクチャを示すことを意図されているにすぎないことに留意されたい。たとえば、1つの行中の論理ブロックの数、行の相対幅、行の数および順序、行中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図10の上部に含まれる相互接続/論理実装形態は、例にすぎない。たとえば、実際のFPGAでは、ユーザロジック部の効率的な実装を容易にするために、CLBが現れるところならどこでも、CLBの2つ以上の隣接する行が典型的に含まれるが、隣接するCLB行の数は、FPGAの全体的なサイズによって変動する。
いくつかの非限定的な例が以下で提供される。
一例では、ニューラルネットワークシステムにおける処理の方法が提供され得る。そのような方法は、ホストコンピュータシステムによって、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリに書き込むことと、ホストコンピュータシステムによって複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、ホストコンピュータシステムによって入力データと命令パッケージとを共有メモリに書き込むことと、
ニューラルネットワークアクセラレータによって命令パッケージを共有メモリから読み取ることと、ニューラルネットワークアクセラレータによって命令パッケージの複数の層単位命令を処理することとを含み得る。
あるそのような方法では、複数の重み行列を書き込むことは、複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリに書き込むことを含み得る。
あるそのような方法では、複数の重み行列を書き込むことは、複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリ中の連続アドレス空間に書き込むことを含み得る。
あるそのような方法は、重み行列の共有メモリ中のベースアドレスを示すパラメータを、ホストコンピュータシステムからニューラルネットワークアクセラレータに伝えることをさらに含み得る。
あるそのような方法では、複数の層単位命令を処理することは、第1の層単位命令を処理することと、その後に連続して命令パッケージの第2の層単位命令を処理することと、第1の層単位命令を処理することにおいて、入力データを共有メモリの第1の部分から読み取り、出力データを共有メモリの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有メモリの第2の部分から読み取り、出力データを共有メモリの第1の部分に書き込むこととを含み得る。
あるそのような方法は、共有バッファの第1の部分の共有メモリ中のアドレスを示す第1のパラメータと、共有バッファの第2の部分の共有バッファ中のオフセットを示す第2のパラメータとを、ホストコンピュータシステムからニューラルネットワークアクセラレータに伝えることをさらに含み得、複数の層単位命令を処理することは、第1の層単位命令を処理することと、その後に連続して命令パッケージの第2の層単位命令を処理することと、第1の層単位命令を処理することにおいて、入力データを共有バッファの第1の部分から読み取り、出力データを共有バッファの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有バッファの第2の部分から読み取り、出力データを共有バッファの第1の部分に書き込むこととを含み得る。
あるそのような方法は、ホストコンピュータシステムによって、ニューラルネットワークの仕様から、ニューラルネットワークの複数の層において参照される入力行列および出力行列のサイズの最大値に基づいて共有バッファのサイズを決定することをさらに含み得る。
あるそのような方法では、複数の層単位命令をアセンブルすることは、層単位命令のうちの1つまたは複数において、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを含み得る。
あるそのような方法では、複数の層単位命令のうちの第1の層単位命令と第2の層単位命令とは、ニューラルネットワーク動作の異なるセットを指定する。
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージ中での出現の順に命令パッケージ中の複数の層単位命令を処理することを含み得る。
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージ中のn個の命令について、命令i+1の実行を開始する前に命令iの実行を完了することを処理することを含み、1≦i≦nであり得る。
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージによって定義される状態機械のための有限状態機械遷移表を評価することを含み得る。
別の例では、ニューラルネットワーク処理システムが提供され得る。そのようなニューラルネットワーク処理システムは、共有メモリと、共有メモリに接続されたホストコンピュータシステムであって、ホストコンピュータシステムが命令で構成され得、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの複数の層に関連する複数の重み行列を共有メモリに書き込むことと、複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、入力データと命令パッケージとを共有メモリに書き込むこととを行わせる、ホストコンピュータシステムと、共有メモリにおよびホストコンピュータシステムに接続されたニューラルネットワークアクセラレータであって、ニューラルネットワークアクセラレータが、命令パッケージを共有メモリから読み取ることと、命令パッケージの複数の層単位命令を処理することとを行うように構成され得る、ニューラルネットワークアクセラレータとを含み得る。
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の重み行列を書き込むことを行わせる命令は、ホストコンピュータシステムに、ニューラルネットワークアクセラレータによって複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリに書き込むことを行わせる命令を含み得る。
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の重み行列を書き込むことを行わせる命令は、ホストコンピュータシステムに、ニューラルネットワークアクセラレータによって複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリ中の連続アドレス空間に書き込むことを行わせる命令を含み得る。
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムは命令でさらに構成され得、命令は、実行されたとき、ホストコンピュータシステムに、重み行列の共有メモリ中のベースアドレスを示すパラメータをニューラルネットワークアクセラレータに伝えることを行わせる。
あるそのようなニューラルネットワーク処理システムでは、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージの第1の層単位命令と第2の層単位命令とを連続して処理することと、第1の層単位命令を処理することにおいて、入力データを共有メモリの第1の部分から読み取り、出力データを共有メモリの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有メモリの第2の部分から読み取り、出力データを共有メモリの第1の部分に書き込むこととを行うように構成され得る。
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムは命令でさらに構成され得、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの仕様から、ニューラルネットワークの複数の層において参照される入力行列および出力行列のサイズの最大値に基づいて共有バッファのサイズを決定することと、共有バッファの第1の部分の共有メモリ中のアドレスを示す第1のパラメータと、共有バッファの第2の部分の共有バッファ中のオフセットを示す第2のパラメータとを、ニューラルネットワークアクセラレータに伝えることとを行わせ、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージの第1の層単位命令と第2の層単位命令とを連続して処理することと、第1の層単位命令を処理することにおいて、入力データを共有バッファの第1の部分から読み取り、出力データを共有バッファの第2の部分に書き込むことと、第2の層単位命令を処理することにおいて、入力データを共有バッファの第2の部分から読み取り、出力データを共有バッファの第1の部分に書き込むこととを行うようにさらに構成され得る。
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の層単位命令をアセンブルすることを行わせる命令は、ホストコンピュータシステムに、層単位命令のうちの1つまたは複数において、畳み込み、行列乗算、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを行わせる命令を含む。
あるそのようなニューラルネットワーク処理システムでは、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージ中での出現の順に命令パッケージ中の複数の層単位命令を処理するようにさらに構成され得る。
態様および特徴はいくつかの場合には個々の図で説明され得るが、組合せが明示的に示されないか、または組合せとして明示的に説明されなくても、ある図からの特徴は別の図の特徴と組み合わせられ得ることが諒解されよう。
方法およびシステムは、ニューラルネットワーク処理のための様々なシステムに適用可能であると考えられる。他の態様および特徴は、本明細書の考慮から当業者に明らかになろう。方法およびシステムは、ソフトウェアを実行するように構成された1つまたは複数のプロセッサとして、特定用途向け集積回路(ASIC)として、またはプログラマブル論理デバイス上のロジック部として実装され得る。明細書および図面は例としてのみ考慮されることが意図されており、本発明の真の範囲は以下の特許請求の範囲によって示される。

Claims (13)

  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に記載のニューラルネットワーク処理システム。
JP2020521412A 2017-10-17 2018-10-16 ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 Active JP7196167B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/785,800 2017-10-17
US15/785,800 US11620490B2 (en) 2017-10-17 2017-10-17 Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
PCT/US2018/056112 WO2019079319A1 (en) 2017-10-17 2018-10-16 NEURONAL MULTICOUCHE NETWORK PROCESSING BY A NEURONAL NETWORK ACCELERATOR USING CONTAINED HOST COMMUNICATION WEIGHTS AND A LAYERED INSTRUCTION PACKAGE

Publications (3)

Publication Number Publication Date
JP2020537785A JP2020537785A (ja) 2020-12-24
JP2020537785A5 JP2020537785A5 (ja) 2021-11-25
JP7196167B2 true JP7196167B2 (ja) 2022-12-26

Family

ID=64110172

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020521412A Active JP7196167B2 (ja) 2017-10-17 2018-10-16 ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理

Country Status (6)

Country Link
US (1) US11620490B2 (ja)
EP (1) EP3698296B1 (ja)
JP (1) JP7196167B2 (ja)
KR (1) KR102578508B1 (ja)
CN (1) CN111226231A (ja)
WO (1) WO2019079319A1 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
US11386644B2 (en) * 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
US10565285B2 (en) * 2017-12-18 2020-02-18 International Business Machines Corporation Processor and memory transparent convolutional lowering and auto zero padding for deep neural network implementations
US11250107B2 (en) * 2019-07-15 2022-02-15 International Business Machines Corporation Method for interfacing with hardware accelerators
US11573828B2 (en) * 2019-09-16 2023-02-07 Nec Corporation Efficient and scalable enclave protection for machine learning programs
US11501145B1 (en) * 2019-09-17 2022-11-15 Amazon Technologies, Inc. Memory operation for systolic array
KR102463123B1 (ko) * 2019-11-29 2022-11-04 한국전자기술연구원 뉴럴 네트워크 가속기의 효율적인 제어, 모니터링 및 소프트웨어 디버깅 방법
US11132594B2 (en) 2020-01-03 2021-09-28 Capital One Services, Llc Systems and methods for producing non-standard shaped cards
US11182159B2 (en) 2020-02-26 2021-11-23 Google Llc Vector reductions using shared scratchpad memory
CN111461315A (zh) * 2020-03-31 2020-07-28 中科寒武纪科技股份有限公司 计算神经网络的方法、装置、板卡及计算机可读存储介质
CN111461316A (zh) * 2020-03-31 2020-07-28 中科寒武纪科技股份有限公司 计算神经网络的方法、装置、板卡及计算机可读存储介质
US11783163B2 (en) * 2020-06-15 2023-10-10 Arm Limited Hardware accelerator for IM2COL operation
CN112613605A (zh) * 2020-12-07 2021-04-06 深兰人工智能(深圳)有限公司 神经网络加速控制方法、装置、电子设备及存储介质
CN112580787B (zh) * 2020-12-25 2023-11-17 北京百度网讯科技有限公司 神经网络加速器的数据处理方法、装置、设备及存储介质
CN113326479A (zh) * 2021-05-28 2021-08-31 哈尔滨理工大学 一种基于fpga的k均值算法的实现方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160335120A1 (en) 2015-05-11 2016-11-17 Auviz Systems, Inc. ACCELERATING ALGORITHMS & APPLICATIONS ON FPGAs
JP2016536679A (ja) 2013-10-11 2016-11-24 クゥアルコム・インコーポレイテッドQualcomm Incorporated ニューラルシミュレータ用の共有メモリアーキテクチャ
US20160342890A1 (en) 2015-05-21 2016-11-24 Google Inc. Batch processing in a neural network processor

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6346825B1 (en) 2000-10-06 2002-02-12 Xilinx, Inc. Block RAM with configurable data width and parity for use in a field programmable gate array
EP3000030A4 (en) * 2013-05-22 2017-07-05 Neurala Inc. Methods and apparatus for iterative nonspecific distributed runtime architecture and its application to cloud intelligence
US10417555B2 (en) * 2015-05-29 2019-09-17 Samsung Electronics Co., Ltd. Data-optimized neural network traversal
CN108292241B (zh) * 2015-10-28 2022-05-24 谷歌有限责任公司 处理计算图
US9875104B2 (en) * 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
CN107239823A (zh) * 2016-08-12 2017-10-10 北京深鉴科技有限公司 一种用于实现稀疏神经网络的装置和方法
US10802992B2 (en) * 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
US10489702B2 (en) * 2016-10-14 2019-11-26 Intel Corporation Hybrid compression scheme for efficient storage of synaptic weights in hardware neuromorphic cores
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10949736B2 (en) * 2016-11-03 2021-03-16 Intel Corporation Flexible neural network accelerator and methods therefor
CN110050267B (zh) * 2016-12-09 2023-05-26 北京地平线信息技术有限公司 用于数据管理的系统和方法
GB2568776B (en) * 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016536679A (ja) 2013-10-11 2016-11-24 クゥアルコム・インコーポレイテッドQualcomm Incorporated ニューラルシミュレータ用の共有メモリアーキテクチャ
US20160335120A1 (en) 2015-05-11 2016-11-17 Auviz Systems, Inc. ACCELERATING ALGORITHMS & APPLICATIONS ON FPGAs
US20160342890A1 (en) 2015-05-21 2016-11-24 Google Inc. Batch processing in a neural network processor

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
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>

Also Published As

Publication number Publication date
KR20200069338A (ko) 2020-06-16
EP3698296A1 (en) 2020-08-26
KR102578508B1 (ko) 2023-09-13
EP3698296B1 (en) 2024-07-17
WO2019079319A1 (en) 2019-04-25
JP2020537785A (ja) 2020-12-24
US20190114529A1 (en) 2019-04-18
CN111226231A (zh) 2020-06-02
US11620490B2 (en) 2023-04-04

Similar Documents

Publication Publication Date Title
JP7196167B2 (ja) ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理
JP7196168B2 (ja) 複数のプロセッサおよびニューラルネットワークアクセラレータを有するニューラルネットワーク処理システム
US11429848B2 (en) Host-directed multi-layer neural network processing via per-layer work requests
EP3698313B1 (en) Image preprocessing for generalized image processing
US11568218B2 (en) Neural network processing system having host controlled kernel acclerators
US10515135B1 (en) Data format suitable for fast massively parallel general matrix multiplication in a programmable IC
KR102650299B1 (ko) 대규모 병렬 소프트웨어로 정의된 하드웨어 시스템에서의 정적 블록 스케줄링
US10354733B1 (en) Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
US10984500B1 (en) Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US11204747B1 (en) Re-targetable interface for data exchange between heterogeneous systems and accelerator abstraction into software instructions
KR20200037303A (ko) 뉴럴 네트워크들의 아키텍처 최적화된 트레이닝
US10943039B1 (en) Software-driven design optimization for fixed-point multiply-accumulate circuitry
US11036827B1 (en) Software-defined buffer/transposer for general matrix multiplication in a programmable IC
KR102697368B1 (ko) 일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱
US20210209462A1 (en) Method and system for processing a neural network

Legal Events

Date Code Title Description
A529 Written submission of copy of amendment under article 34 pct

Free format text: JAPANESE INTERMEDIATE CODE: A529

Effective date: 20200605

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211014

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211014

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221025

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20221115

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221214

R150 Certificate of patent or registration of utility model

Ref document number: 7196167

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150