(57)【要約】  ニューラルネットワークシステムにおいて処理するための開示される方法およびシステムでは、ホストコンピュータシステム（４０２）が、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータ（２３８）と共有されるメモリ（２２６）に書き込む（６０２）。ホストコンピュータシステムは、さらに、複数の層単位命令を命令パッケージにアセンブルする（６１０）。各層単位命令は、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する。ホストコンピュータシステムは、入力データと命令パッケージとを共有メモリに書き込む（６１２、６１４）。ニューラルネットワークアクセラレータは、命令パッケージを共有メモリから読み取り（７０２）、命令パッケージの複数の層単位命令を処理する（７０２〜７１２）。【選択図】図６
2020537785.tif 000002
【特許請求の範囲】
【請求項１】
ホストコンピュータシステムによって、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリに書き込むことと、
前記ホストコンピュータシステムによって複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、前記ニューラルネットワークの前記複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、
前記ホストコンピュータシステムによって入力データと前記命令パッケージとを前記共有メモリに書き込むことと、
前記ニューラルネットワークアクセラレータによって前記命令パッケージを前記共有メモリから読み取ることと、
前記ニューラルネットワークアクセラレータによって前記命令パッケージの前記複数の層単位命令を処理することと
を含む方法。
【請求項２】
前記複数の重み行列を書き込むことが、前記複数の層単位命令を処理することの前に、前記複数の重み行列のすべてを前記共有メモリに書き込むことを含む、請求項１に記載の方法。
【請求項３】
前記複数の重み行列を書き込むことが、前記複数の層単位命令を処理することの前に、前記複数の重み行列のすべてを前記共有メモリ中の連続アドレス空間に書き込むことを含む、請求項１または請求項２に記載の方法。
【請求項４】
前記重み行列の前記共有メモリ中のベースアドレスを示すパラメータを、前記ホストコンピュータシステムから前記ニューラルネットワークアクセラレータに伝えることをさらに含む、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記複数の層単位命令を処理することが、
前記命令パッケージの第１の層単位命令を処理することと、その後に連続して前記命令パッケージの第２の層単位命令を処理することと、
前記第１の層単位命令を処理する際に、入力データを前記共有メモリの第１の部分から読み取り、出力データを前記共有メモリの第２の部分に書き込むことと、
前記第２の層単位命令を処理する際に、入力データを前記共有メモリの前記第２の部分から読み取り、出力データを前記共有メモリの前記第１の部分に書き込むことと
を含む、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記複数の層単位命令を処理することが、前記命令パッケージ中での出現の順に前記命令パッケージ中の前記複数の層単位命令を処理することを含む、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記複数の層単位命令を処理することが、命令パッケージ中のｎ個の命令について、命令ｉ＋１の実行を開始する前に命令ｉの実行を完了することを処理することを含み、１≦ｉ≦ｎである、請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記複数の層単位命令を処理することが、前記命令パッケージによって定義される状態機械のための有限状態機械遷移表を評価することを含む、請求項１から７のいずれか一項に記載の方法。
【請求項９】
共有メモリと、
前記共有メモリに接続されたホストコンピュータシステムであって、前記ホストコンピュータシステムが命令で構成され、前記命令は、実行されたとき、前記ホストコンピュータシステムに、
ニューラルネットワークの複数の層に関連する複数の重み行列を前記共有メモリに書き込むことと、
複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、前記ニューラルネットワークの前記複数の層のそれぞれの層の処理と、前記共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、
入力データと前記命令パッケージとを前記共有メモリに書き込むことと
を行わせる、ホストコンピュータシステムと、
前記共有メモリにおよび前記ホストコンピュータシステムに接続されたニューラルネットワークアクセラレータであって、前記ニューラルネットワークアクセラレータが、
前記命令パッケージを前記共有メモリから読み取ることと、
前記命令パッケージの前記複数の層単位命令を処理することと
を行うように構成された、ニューラルネットワークアクセラレータと
を備える、ニューラルネットワーク処理システム。
【請求項１０】
前記ホストコンピュータシステムに前記複数の重み行列を書き込むことを行わせる前記命令が、前記ニューラルネットワークアクセラレータによって前記複数の層単位命令を処理することの前に、前記ホストコンピュータシステムに前記複数の重み行列のすべてを前記共有メモリに書き込むことを行わせる命令を含む、請求項９に記載のニューラルネットワーク処理システム。
【請求項１１】
前記ホストコンピュータシステムに前記複数の重み行列を書き込むことを行わせる前記命令が、前記ニューラルネットワークアクセラレータによって前記複数の層単位命令を処理することの前に、前記ホストコンピュータシステムに前記複数の重み行列のすべてを前記共有メモリ中の連続アドレス空間に書き込むことを行わせる命令を含む、請求項９または請求項１０に記載のニューラルネットワーク処理システム。
【請求項１２】
前記ホストコンピュータシステムが命令でさらに構成され、前記命令が、実行されたとき、前記ホストコンピュータシステムに、前記重み行列の前記共有メモリ中のベースアドレスを示すパラメータを前記ニューラルネットワークアクセラレータに伝えることを行わせる、請求項９から１１のいずれか一項に記載のニューラルネットワーク処理システム。
【請求項１３】
前記複数の層単位命令を前記処理する際の前記ニューラルネットワークアクセラレータが、
前記命令パッケージの第１の層単位命令と第２の層単位命令とを連続して処理することと、
前記第１の層単位命令を処理する際に、入力データを前記共有メモリの第１の部分から読み取り、出力データを前記共有メモリの第２の部分に書き込むことと、
前記第２の層単位命令を処理する際に、入力データを前記共有メモリの前記第２の部分から読み取り、出力データを前記共有メモリの前記第１の部分に書き込むことと
を行うように構成された、請求項９から１２のいずれか一項に記載のニューラルネットワーク処理システム。
【請求項１４】
前記ホストコンピュータシステムに前記複数の層単位命令をアセンブルすることを行わせる前記命令が、前記ホストコンピュータシステムに、前記層単位命令のうちの１つまたは複数において、畳み込み、行列乗算、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを行わせる命令を含む、請求項９から１３のいずれか一項に記載のニューラルネットワーク処理システム。
【請求項１５】
前記複数の層単位命令を処理する際の前記ニューラルネットワークアクセラレータが、前記命令パッケージ中での出現の順に前記命令パッケージ中の前記複数の層単位命令を処理するようにさらに構成された、請求項１０に記載のニューラルネットワーク処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、ニューラルネットワーク処理に関する。
【背景技術】
【０００２】
機械学習は、コンピューティングシステムが、明示的にプログラムされることなしに働くことを引き起こす科学である。古典的な機械学習は、Ｋ平均クラスタリング、線形およびロジスティック回帰、確率的勾配降下法、相関ルール学習などを含む、様々なクラスタリングおよび分類技法を含む。深層学習は、機械学習におけるより新しい最先端領域である。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する機械学習アルゴリズムのクラスである。深層学習アルゴリズムは、教師なし（たとえば、パターン分析）であるか、または教師あり（たとえば、分類）であり得る。深層学習アルゴリズムは、（本明細書では「ニューラルネットワーク」と呼ばれる）人工ニューラルネットワーク（ＡＮＮ）の層を使用して実装され得る。
【０００３】
概して、ニューラルネットワークは、グラフ中で結合されたノード（すなわち、「ニューロン」）の集合である。ニューラルネットワーク中のノードは、重み付けされた入力の和を算出し、その和に随意のバイアスを加算する。ノードの出力は、（「活性化関数」と呼ばれる）最終的な和の関数である。例示的な活性化関数は、シグモイド関数、双曲線正接（ｔａｎｈ）関数、正規化線形ユニット（ＲｅＬＵ）関数、および恒等関数を含む。ニューラルネットワークモデルは、しばしば、特定のトポロジーと、対応する重みおよびバイアスとを定義するノードの層に編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
【０００４】
概して、ニューラルネットワークは、入力層と出力層とを含み、入力層と出力層との間の１つまたは複数の隠れ層を随意に含むことができる。深層学習アプリケーションにおいて使用されるニューラルネットワークは、典型的に、多くの隠れ層を含み、それにより、深層ニューラルネットワーク（ＤＮＮ）という用語が生じる。ニューラルネットワークの層は、密結合される（たとえば、層中の各ノードが前の層中のすべてのノードに全結合される）か、またはスパース結合され得る（たとえば、層中の各ノードが前の層中のノードの一部のみに結合される）。畳み込みニューラルネットワーク（ＣＮＮ）は、畳み込み層と呼ばれる、１つまたは複数のスパース結合された層を含む、ＤＮＮのタイプである。ＣＮＮは、画像またはビデオデータを処理するのに好適である。ＤＮＮの他のタイプは、音声およびテキストデータを処理するのに好適であるリカレントニューラルネットワーク（ＲＮＮ）を含む。
【０００５】
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、ソフトウェアから呼び出される関数を加速する回路を実装するために使用されている。ソフトウェアから呼び出される関数を加速する回路は、ハードウェアアクセラレータと呼ばれる。ハードウェアアクセラレータの例は、画像処理ソフトウェアから呼び出され得るＦＰＧＡ回路として実装される様々な画像フィルタを含む。
【０００６】
ＦＰＧＡベースの実装形態は、ホストコンピュータシステムによるＦＰＧＡアクセス可能メモリへの重みおよび入力データの転送と、ホストコンピュータシステムへの出力データの転送とを伴う。ホストコンピュータシステムとＦＰＧＡアクセラレータとの間のデータの転送は、性能を劣化させることがある。ＣＰＵまたはＧＰＵ上などの他の一般的に使用されるニューラルネットワーク（ＮＮ）実装形態と比較して、ＦＰＧＡベースの実装形態は、ＦＰＧＡ回路がＧＰＵよりも速くデータを処理し、プロセス中に消費する電力を少なくすることができるので、有利であり得る。
【発明の概要】
【０００７】
ニューラルネットワークシステムにおける処理の開示される方法は、ホストコンピュータシステムによって、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリに書き込むことを含む。ホストコンピュータシステムは、さらに、複数の層単位命令を命令パッケージにアセンブルする。各層単位命令は、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する。ホストコンピュータシステムは、入力データと命令パッケージとを共有メモリに書き込む。ニューラルネットワークアクセラレータは、命令パッケージを共有メモリから読み取り、命令パッケージの複数の層単位命令を処理する。
【０００８】
開示されるニューラルネットワーク処理システムは、共有メモリと、共有メモリに接続されたホストコンピュータシステムと、共有メモリに接続されたニューラルネットワークアクセラレータとを含む。ホストコンピュータシステムは命令で構成され、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの複数の層に関連する複数の重み行列を共有メモリに書き込むことを行わせる。ホストコンピュータシステムはまた、複数の層単位命令を命令パッケージにアセンブルするようにプログラムされる。各層単位命令は、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する。ホストコンピュータシステムは、入力データと命令パッケージとを共有メモリに書き込む。ニューラルネットワークアクセラレータは、命令パッケージを共有メモリから読み取り、命令パッケージの複数の層単位命令を処理するように構成される。
【０００９】
他の特徴は、以下の発明を実施するための形態および特許請求の範囲の考慮から認識されよう。
【００１０】
方法およびシステムの様々な態様および特徴は、以下の発明を実施するための形態を検討し、以下の図面を参照すると明らかになろう。
【図面の簡単な説明】
【００１１】
【図１】一例による、ニューラルネットワークを実装するためのシステムを示すブロック図である。
【図２】一例による、コンピューティングシステムを示すブロック図である。
【図３】一例による、アクセラレーション回路を示すブロック図である。
【図４】一実装形態による、例示的なニューラルネットワーク処理システムを示す図である。
【図５】図３に示されている例示的なニューラルネットワークアクセラレータの別のビューを示す図である。
【図６】層単位命令のパッケージを処理するためのニューラルネットワークアクセラレータを構成し、処理のために、重み、入力データ、および層単位命令のパッケージをニューラルネットワークアクセラレータに与えることにおいて、ＫＡインターフェースによって実施されるプロセスのフローチャートである。
【図７】ニューラルネットワーク命令のパッケージを処理することにおいて、ニューラルネットワークアクセラレータによって実施されるプロセスのフローチャートである。
【図８】５つのニューラルネットワーク層のための例示的な重み行列のアドレッシングおよび例示的な入出力バッファ（「Ｂ／Ｃバッファ」）のアドレッシングを示す図である。
【図９】一例による、プログラマブルＩＣを示すブロック図である。
【図１０】プログラマブルＩＣのＦＰＧＡ実装形態を示す図である。
【発明を実施するための形態】
【００１２】
以下の説明では、本明細書で提示される特定の例について説明するために、多数の具体的な詳細が記載される。しかしながら、１つまたは複数の他の例および／またはこれらの例の変形形態が、下記のすべての具体的な詳細なしに実施され得ることは、当業者に明らかであろう。他の事例では、本明細書の例の説明を不明瞭にしないように、よく知られている特徴は詳細に説明されていない。説明しやすいように、同じ要素または同じ要素の追加のインスタンスを指すために、異なる図において同じ参照番号が使用され得る。
【００１３】
開示される実装形態は、ホストコンピュータシステムとニューラルネットワークアクセラレータとを含むニューラルネットワーク処理システムに関連するオーバーヘッドおよびレイテンシを低減する。システムおよび方法は、ホストコンピュータシステムとニューラルネットワークアクセラレータとの間で共有されるメモリにおよびメモリからデータを転送することに関与するダイレクトメモリアクセス（ＤＭＡ）動作の数を最小限に抑える。ホストコンピュータシステムは、ニューラルネットワークアクセラレータによる処理の始動の前に、処理のためにニューラルネットワークのすべての層によって必要とされる入力データおよびパラメータのすべてをアセンブルし、共有メモリ中にデータおよびパラメータの集合を確立する。数個のＤＭＡ動作を用いて、ニューラルネットワークアクセラレータは、ニューラルネットワークを通る完全なパスのために必要とされるデータおよび構成パラメータを有し、それにより、オーバーヘッドおよびレイテンシを低減する。
【００１４】
開示される方法およびシステムは、畳み込みニューラルネットワーク（ＣＮＮ）、リカレントニューラルネットワーク（ＲＮＮ）、および行列乗算または畳み込みなどの動作を伴う他のニューラルネットワークに適用可能である。簡潔のために、ホストコンピュータシステムは「ホスト」と呼ばれることもあり、ニューラルネットワークアクセラレータは、同じくまたは代替的に、「アクセラレーション回路」、「カーネルアクセラレータ」または「カーネルアクセラレータ回路」と呼ばれることがある。
【００１５】
開示されるシステムおよび方法の例示的なアプリケーションは、畳み込みニューラルネットワーク（ＣＮＮ）である。ＣＮＮは、動作の層を有する有向グラフとして表され得る。各層は、ＣＯＮＶ（畳み込み）、または画像から列への変換（「ｉｍ２ｃｏｌ」）、一般的な行列乗算（「ＧＥＭＭ」）、活性化（たとえば、正規化線形ユニット、「ＲｅＬＵ」関数）、プーリング（たとえば、「最大プール」）、局所応答正規化（ＬＲＮ層）、および内積（たとえば、「全結合」（ＦＣ）層）など、１つまたは複数の動作を伴うことができる。各層への入力は、画像またはボイスサンプルなど、データと、トレーニングされた重みとであり、すべて行列として表される。開示されるシステムおよび方法では、ニューラルネットワークのすべての層ごとに処理されるべき、すべての重み行列、構成パラメータ、および入力データは、ニューラルネットワークアクセラレータが入力データのニューラルネットワーク処理を始動するより前に、ホストからニューラルネットワークアクセラレータに与えられる。
【００１６】
開示されるシステムおよび方法の１つの特徴では、ニューラルネットワークの異なる層において畳み込みまたは行列乗算において使用される別個の重み行列は、データの単一のブロックにマージされ、共有メモリの連続アドレス空間に記憶される。組み合わせられた重み行列は、ニューラルネットワークアクセラレータが、必要とされる重みに連続的にアクセスすることを可能にし、これは、不連続アドレスにアクセスするよりも効率的である。連続アドレス空間はまた、カーネルプロセッサがニューラルネットワークのある層の処理から次の層の処理に遷移するとき、新しい重み行列がロードされるのを待つ必要なしに、アクセスを可能にする。
【００１７】
別の特徴では、ホストコンピュータシステムは、ニューラルネットワークアクセラレータによる処理を制御するために、複数の層単位命令のパッケージを作成する。ニューラルネットワークアクセラレータによる処理は、それにより、ニューラルネットワークアプリケーションに従ってカスタマイズされ得る。さらに、層単位命令のパッケージは、ニューラルネットワークの層を通して入力データを処理することにおいて、ホストとニューラルネットワークアクセラレータとの間の対話の数を低減する。層単位命令のパッケージは、さらに、各層単位命令による適切な重み行列への高速参照を与えるために、重み行列のブロックへのオフセットを指定する。
【００１８】
バッファは、入力データ（「Ｂ行列」）および出力データ（「Ｃ行列」）を記憶するために、ニューラルネットワークの層間で共有される。共有「Ｂ／Ｃバッファ」は、ある層の結果を次の層の入力バッファにコピーする必要を回避することによって、メモリ要求を低減し、ニューラルネットワークアクセラレータの効率を改善する。ニューラルネットワークアクセラレータは、処理が、ある層から次の層に遷移するとき、Ｂ行列のために使用されるＢ／Ｃバッファの部分と、Ｃ行列のために使用されるＢ／Ｃバッファの部分との間を交互する。
【００１９】
次に図面を参照すると、図１は、一例による、ニューラルネットワークを実装するためのシステム１００を示すブロック図である。システム１００は、コンピュータシステム１０２と、１つまたは複数のコンピュータシステム１０８とを含む。コンピュータシステム１０２は、１つまたは複数の設計ツール１０４を与えるソフトウェアを実行するように構成された従来のコンピューティング構成要素を含む。各コンピュータシステム１０８は、１つまたは複数のニューラルネットワーク１１０を実装する。（１つまたは複数の）ニューラルネットワーク１１０は、アプリケーション１１２と、アクセラレーションライブラリ１１４と、１つまたは複数のハードウェアアクセラレータ１１６とを使用して実装される。
【００２０】
一例では、（１つまたは複数の）ハードウェアアクセラレータ１１６は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）など、プログラマブル集積回路（ＩＣ）を含む。アクセラレーションライブラリ１１４は、（１つまたは複数の）ハードウェアアクセラレータ１１６とインターフェースするためのアプリケーションプログラミングインターフェース（ＡＰＩ）を与える。アクセラレーションライブラリ１１４はまた、ニューラルネットワーク層および他のタイプのニューラルネットワーク構造のあらかじめ定義されたおよび最適化された実装形態を含む、ニューラルネットワーク関数を与えるライブラリを含むことができる。したがって、（１つまたは複数の）ニューラルネットワーク１１０は、（１つまたは複数の）ハードウェアアクセラレータ１１６において実装されるハードウェア部分、ならびにアクセラレーションライブラリ１１４において実装されるソフトウェア部分の両方を含むことができる。アプリケーション１１２は、（１つまたは複数の）ニューラルネットワーク１１６を実装するように（１つまたは複数の）ハードウェアアクセラレータ１１６をプログラムし、制御するためにアクセラレーションライブラリ１１４のＡＰＩを起動する。
【００２１】
設計者は、（１つまたは複数の）ニューラルネットワーク１１０を定義するために、（１つまたは複数の）設計ツール１０４と対話する。（１つまたは複数の）設計ツール１０４は、（１つまたは複数の）ハードウェアアクセラレータ１１６をプログラムするためのファイル（たとえば、ＦＰＧＡのための構成ビットストリーム）と、アクセラレーションライブラリ１１４を与えるファイルと、アプリケーション１１２を与えるファイルとを生成することができる。設計者は、レジスタ転送言語（ＲＴＬ）を使用して、あるいは、Ｃ、Ｃ＋＋、ＯｐｅｎＣＬなど、プログラミング言語、またはＲＴＬと（１つまたは複数の）プログラマブル言語との組合せを使用して、（１つまたは複数の）ニューラルネットワーク１１０のハードウェア部分を定義することができる。ユーザは、Ｃ、Ｃ＋＋、ＯｐｅｎＣＬなど、プログラミング言語を使用して、（１つまたは複数の）ニューラルネットワーク１１０のソフトウェア部分を定義することができる。（１つまたは複数の）設計ツール１０４は、（１つまたは複数の）ハードウェアアクセラレータ１１６をプログラムするためのファイルと、アクセラレーションライブラリ１１４のためのライブラリファイルとを生成するために、ソフトウェア定義されたニューラルネットワークをコンパイルする。設計者は、（１つまたは複数の）ニューラルネットワーク１１０のハードウェア部分およびソフトウェア部分を開発するのを支援するために、クラスライブラリ、テンプレートライブラリなどを与えるライブラリ１０６を活用することができる。
【００２２】
ユーザは、プログラミング言語（たとえば、Ｃ、Ｃ＋＋、Ｐｙｔｈｏｎなど）を使用して、アプリケーション１１２を定義することができる。ユーザは、Ｃａｆｆｅ、ＴｅｎｓｏｒＦｌｏｗ、ＭＸＮｅｔなど、ニューラルネットワークフレームワークおよびライブラリを活用することができる。
【００２３】
図２は、一例による、コンピューティングシステム１０８を示すブロック図である。コンピューティングシステム１０８は、ハードウェア２０４と、ハードウェア２０４上で実行するソフトウェア２０６とを含む。ハードウェア２０４は、処理システム２１０と、システムメモリ２１６と、ストレージデバイス（「ストレージ２１８」）と、ハードウェアアクセラレータ１１６とを含む。ソフトウェア２０６は、オペレーティングシステム（ＯＳ）２４４と、アクセラレーションライブラリ１１４と、アプリケーション１１２とを含む。処理システム２１０、システムメモリ２１６、およびストレージ２１８は、本明細書で参照されるホストコンピュータシステムを備える。
【００２４】
処理システム２１０は、マイクロプロセッサ２１２と、サポート回路２１４と、周辺バス２１５とを含む。マイクロプロセッサ２１２は、ｘ８６ベースプロセッサ、ＡＲＭ（登録商標）ベースプロセッサなど、任意のタイプの汎用中央処理ユニット（ＣＰＵ）であり得る。マイクロプロセッサ２１２は、１つまたは複数のコアと、関連する回路要素（たとえば、キャッシュメモリ、メモリ管理ユニット（ＭＭＵ）、割込みコントローラなど）とを含むことができる。マイクロプロセッサ２１２は、本明細書で説明される１つまたは複数の動作を実施するプログラムコードを実行するように構成され、それらのプログラムコードは、システムメモリ２１６および／またはストレージ２１８に記憶され得る。サポート回路２１４は、マイクロプロセッサ２１２と協働して、マイクロプロセッサ２１２、システムメモリ２１６、ストレージ２１８、ハードウェアアクセラレータ１１６、または任意の他の周辺デバイス間のデータフローを管理する、様々なデバイスを含む。たとえば、サポート回路２１４は、チップセット（たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど）、電圧調節器、ファームウェア（たとえば、ＢＩＯＳ）などを含むことができる。サポート回路２１４は、マイクロプロセッサ２１２と周辺バス２１５との間のデータフローを管理し、そこにハードウェアアクセラレータ１１６などの様々な周辺機器が接続される。いくつかの例では、マイクロプロセッサ２１２は、チップセット（たとえば、ノースブリッジ、サウスブリッジなど）の機能性の全部または実質的部分を吸収する、システムインパッケージ（ＳｉＰ）、システムオンチップ（ＳｏＣ）などであり得る。周辺バス２１５は、周辺構成要素相互接続エクスプレス（ＰＣＩｅ）など、拡張バス規格を実装することができる。本例では、処理システム２１０は、ハードウェアアクセラレータ１１６とは別個に示されている。以下でさらに説明される他の例では、処理システム２１０とハードウェアアクセラレータ１１６とは、システムオンチップ（ＳｏＣ）を使用して同じ集積回路（ＩＣ）上に実装され得る。
【００２５】
システムメモリ２１６は、実行可能な命令およびデータなど、情報が記憶され、取り出されることを可能にするデバイスである。システムメモリ２１６は、たとえば、ダブルデータレート（ＤＤＲ）ダイナミックＲＡＭ（ＤＲＡＭ）など、１つまたは複数のランダムアクセスメモリ（ＲＡＭ）モジュールを含むことができる。ストレージデバイス２１８は、ローカルストレージデバイス（たとえば、１つまたは複数のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク）、および／またはコンピューティングシステム１０８が１つまたは複数のネットワークデータストレージシステムと通信することを可能にするストレージインターフェースを含む。ハードウェア２０４は、グラフィックスカード、ユニバーサルシリアルバス（ＵＳＢ）インターフェースなど、コンピューティングシステムの様々な他の従来のデバイスおよび周辺機器を含むことができる。
【００２６】
ハードウェアアクセラレータ１１６は、プログラマブルＩＣ２２８と、不揮発性メモリ２２４と、ＲＡＭ２２６とを含む。プログラマブルＩＣ２２８は、ＦＰＧＡなど、またはＦＰＧＡを有するＳｏＣなどであり得る。ＮＶＭ２２４は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。ＲＡＭ２２６は、ＤＤＲ  ＤＲＡＭなどを含むことができる。プログラマブルＩＣ２２８は、ＮＶＭ２２４およびＲＡＭ２２６に連結される。プログラマブルＩＣ２２８は、処理システム２１０の周辺バス２１５にも連結される。
【００２７】
ＯＳ２４４は、Ｌｉｎｕｘ（登録商標）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｍａｃ  ＯＳ（登録商標）など、当技術分野において知られている任意のコモディティオペレーティングシステムであり得る。アクセラレーションライブラリ１１４は、ハードウェアアクセラレータ１１６のコマンドおよび制御のためのＡＰＩを与えるドライバおよびライブラリを含む。アプリケーション１１２は、（１つまたは複数の）ニューラルネットワークを実装するためにアクセラレーションライブラリ１１４のＡＰＩを起動する、マイクロプロセッサ２１２上で実行するソフトウェアを含む。
【００２８】
動作中、プログラマブルＩＣ２２８はアクセラレーション回路２３０で構成される。アクセラレーション回路２３０は、概して、ベースプラットフォーム２３０Ａとニューラルネットワークアクセラレータ２３０Ｂとを含む。たとえば、アクセラレーション回路２３０は、静的領域２３４とプログラマブル領域２３６とを使用して実装され得る。静的領域２３４は、周辺バス２１５と、ＮＶＭ２２４と、ＲＡＭ２２６とにインターフェースを与えるためのサポート回路２４０を含む。プログラマブル領域２３６は、１つまたは複数のニューラルネットワークアクセラレータ（「（１つまたは複数の）カーネル２３８」）を含むことができる。ベースプラットフォーム２３０Ａは静的領域２３４を使用して実装され、ニューラルネットワークアクセラレータ２３０Ｂはプログラマブル領域２３６を使用して実装される。別の例では、ベースプラットフォーム２３０Ａはまた、プログラマブル領域２３６の一部分を使用して実装され得る。したがって、いくつかの例では、プログラマブル領域２３６は、いくつかのインターフェース回路をも含む。いくつかの例では、アクセラレーション回路２３０は、それらの各々が個々に（１つまたは複数の）ニューラルネットワークアクセラレータ２３８で構成され得る、２つ以上のプログラマブル領域２３６を含むことができる。
【００２９】
静的領域２３４は、静的領域２３４の回路要素がプログラマブル領域２３６の再構成にわたって不変のままであるという点で「静的」である。一例では、サポート回路２４０は、ＰＣＩｅエンドポイント回路、ダイレクトメモリアクセス（ＤＭＡ）コントローラ、相互接続、メモリコントローラ、メモリインターフェース回路（たとえば、ＤＤＲインターフェース）、（部分再構成をサポートするための）デカップラ回路、フラッシュプログラマー、デバッグ回路などを含む。いくつかの例では、プログラマブル領域２３６は、サポート回路２４０のいずれをも含まない。他の例では、いくつかのサポート回路は、プログラマブル領域２３６において実装される。そのような場合、プログラマブル領域２３６は「拡張されたプログラマブル領域」と呼ばれることがある。いずれの場合も、一例では、ＰＣＩｅ回路およびＤＭＡ回路など、いくつかのサポート回路２４０は、常に、静的領域２３４中に存在する。
【００３０】
図３は、一例による、アクセラレーション回路２３０を示すブロック図である。アクセラレーション回路２３０は、サポート回路２４０とニューラルネットワークアクセラレータ２３８とを含む。本例では、サポート回路２４０は、ＰＣＩｅエンドポイント回路（「ＰＣＩｅエンドポイント３０２」）と、ＰＣＩｅ  ＤＭＡコントローラ３０４と、相互接続回路（「相互接続３０６」）と、メモリコントローラ３１０と、メモリインターフェース３１２とを含む。サポート回路２４０は、明快のために省略される他の回路（たとえば、デカップラ回路、デバッグ回路など）を含むことができる。ＰＣＩｅエンドポイント３０２は、周辺バス２１５への物理インターフェースを与える。ＰＣＩｅ  ＤＭＡコントローラ３０４は、ＲＡＭ２２６とニューラルネットワークアクセラレータ２３８とへのＤＭＡ動作を容易にする。相互接続３０６は、ＰＣＩｅ  ＤＭＡコントローラ３０４をメモリコントローラ３１０とニューラルネットワークアクセラレータ２３８とに連結する。メモリコントローラ３１０はメモリインターフェース３１２に連結される。メモリインターフェース３１２はＲＡＭ２２６に連結される。
【００３１】
動作中、アクセラレーションライブラリ１１４は、ＰＣＩｅ  ＤＭＡコントローラ３０４を通してＲＡＭ２２６に直接アクセスすることができる。アクセラレーションライブラリ１１４はまた、ＰＣＩｅ  ＤＭＡコントローラ３０４を通してニューラルネットワークアクセラレータ２３８にアクセスすることができる。ニューラルネットワークアクセラレータ２３８は、メモリコントローラ３１０を通してＲＡＭ２２６にアクセスすることができる。データは、システムメモリ２１６とＲＡＭ２２６との間のＤＭＡ動作を使用して、ソフトウェア２０６とニューラルネットワークアクセラレータ２３８との間で交換され得る。
【００３２】
本例では、ニューラルネットワークアクセラレータ２３８は、相互接続３０６と通信するためにインターフェース３３０、３３１、および３３２を使用する。特に、これらのインターフェースは、第１の読取りインターフェース３３０と、第２の読取りインターフェース３３１と、読取り／書込みインターフェース３３２とを含む。たとえば、読取りインターフェース３３０は、ニューラルネットワークアクセラレータ２３８を制御するための制御インターフェースとして使用され得る。読取りインターフェース３３１は、メモリインターフェース３１２のうちの第１のメモリインターフェースを通してＲＡＭ２２６から読み取るために使用され得る。読取り／書込みインターフェース３３２は、メモリインターフェース３１２のうちの第２のメモリインターフェースを通してＲＡＭ２２６から読取りおよびＲＡＭ２２６に書込みを行うために使用され得る。
【００３３】
ニューラルネットワークアクセラレータ２３８は、相互接続インターフェース３０４と、制御ロジック部３４２と、処理回路３４１とを含む。処理回路３４１は、フォーマッタ回路３４４（たとえば、ＩＭ２ＣＯＬ）と、回路（「読取り制御部３４６」）と、マルチプレクサ３５６と、先入れ先出し回路（「ＦＩＦＯ３５８」）と、行列乗算器アレイ３６２と、ＲｅＬＵスケーラ回路３６４と、プーリング回路３６６（たとえば、最大プール）と、マルチプレクサ３６８と、ＦＩＦＯ３５４と、書込み制御回路（「書込み制御部３５２」）と、キャッシュ３４８と、読取り制御回路（「読取り制御部３５０」）と、ＦＩＦＯ３６０とを含む。相互接続インターフェース３４０は、インターフェース３３０、３３１、および３３２と、制御ロジック部３４２と、処理回路３４１とに連結される。相互接続インターフェース３４０は、制御ロジック部３４２とインターフェース３３０との間の通信、ならびに処理回路３４１とインターフェース３３１および３３２との間の通信を容易にするための、スイッチ、クロック変換器などを含むことができる。
【００３４】
本例では、相互接続インターフェース３４０は、フォーマッタ回路３４４の入力と、読取り制御回路３４６の入力と、キャッシュ３４８の入力と、書込み制御回路３５２の入力とに連結される。フォーマッタ回路３４４の出力と、読取り制御回路３４６の出力とが、マルチプレクサ３５６の入力に連結される。マルチプレクサ３５６の出力がＦＩＦＯ３５８の入力に連結される。ＦＩＦＯ３５８の出力が行列乗算器アレイ３６２の第１の入力に連結される。キャッシュ３４８の出力が読取り制御回路３５０の入力に連結される。読取り制御回路３５０の出力がＦＩＦＯ３６０の入力に連結される。ＦＩＦＯ３６０の出力が行列乗算器アレイ３６２の第２の入力に連結される。行列乗算器アレイ３６２の出力がＲｅＬＵスケーラ３６４の入力に連結される。ＲｅＬＵスケーラ３６４の出力が、プーリング回路３６６の入力とマルチプレクサ３６８の入力とに連結される。プーリング回路３６６の出力がマルチプレクサ３６８の別の入力に連結される。マルチプレクサ３６８の出力がＦＩＦＯ３５４の入力に連結される。ＦＩＦＯ３５４の出力が書込み制御回路３５２に連結される。
【００３５】
動作中、行列乗算器アレイ３６２は、ニューラルネットワークを実装するための行列乗算動作を実施する。行列乗算器アレイ３６２の入力は、ＦＩＦＯ３５８から入力活性化行列を受信し、ＦＩＦＯ３６０から重み行列を受信する。入力活性化行列は、読取り制御回路３４６を使用してＲＡＭ２２６から直接読み取られ得る。代替的に、入力活性化はＲＡＭ２２６から読み取られ、行列乗算器アレイ３６２への入力のためにフォーマッタ回路３４４によって処理され得る。重み行列は、読取り制御回路３５０によってＲＡＭ２２６から読み取られ、キャッシュ３４８中にキャッシュされ得る。ＲｅＬＵスケーラ３６４は、活性化関数を実施し、行列乗算器アレイ３６２の出力をスケーリングすることができる。プーリング回路３６６は、行列乗算器アレイ３６２のスケーリングされた出力に対する最大プーリング関数を実装することができる。一例では、プーリング回路３６６は、ＣＬＢまたは他の構成可能なロジック部を使用して実装される。プーリング回路３６６の出力またはＲｅＬＵスケーラ３６４の出力のいずれかがＦＩＦＯ３５４に記憶され得る。書込み制御回路３５２は、ＦＩＦＯ中のデータをＲＡＭ２２６に書き込む。制御ロジック部３４２は、フォーマッタ回路３４４、読取り制御回路３４６、マルチプレクサ３５６および３６８、読取り制御回路３５０、ＲｅＬＵスケーラ３６４、プーリング回路３６６、ならびに書込み制御回路３５２など、処理回路３４１中の様々な回路を制御する。
【００３６】
図４は、一実装形態による、例示的なニューラルネットワーク処理システム４００を示す。システムは、ニューラルネットワークアクセラレータ２３８に通信可能に接続されたホストコンピュータシステム４０２を含む。ホストコンピュータシステム４０２は、図２に示されているように、処理システム２１０と、システムメモリ２１６と、ストレージ２１８とを含むことができる。ホストコンピュータシステム４０２は、詳細には、機械学習（ＭＬ）フレームワーク４１０とニューラルネットワークアクセラレータ（ＫＡ）インターフェース４１２とによってプログラムされる。図１のアプリケーション１１２に対応するＭＬフレームワークプログラムは、特定のニューラルネットワークアプリケーション、たとえば、画像または音声処理を指定し、図１の場合のようにアクセラレーションライブラリとして実装され得るＫＡインターフェースは、ＭＬフレームワークからのニューラルネットワーク処理についての要求に応答して、ニューラルネットワークアクセラレータ上でニューラルネットワーク動作を始動する。ニューラルネットワークアクセラレータ２３８はＲＡＭ４０６に連結され、ＲＡＭ４０６を通して、ホストとニューラルネットワークアクセラレータとが通信する。ニューラルネットワークアクセラレータは構成レジスタ４０８のセットを有する。構成レジスタは、ＲＡＭ２２６中のメモリバッファのアドレスと、一般的な行列乗算（ＧＥＭＭ）のための行列次元、および畳み込みのためのストライド／ウィンドウなど、ニューラルネットワーク動作のための構成パラメータとを記憶するために、ＫＡインターフェース４１２にとってアクセス可能である。
【００３７】
開示される手法は、特定のハードウェアプラットフォームに限定されない。しかしながら、当業者に基準系を与える目的で、ニューラルネットワークアクセラレータは、Ｘｉｌｉｎｘ，Ｉｎｃから入手可能である、ＫＩＮＴＥＸ（登録商標）  ＵＬＴＲＡＳＣＡＬＥ（商標）１１５デバイス上で実装され得る。ＲＡＭ２２６は、ニューラルネットワークアクセラレータとともにプリント回路板上に取り付けられたＤＤＲ  ＳＤＲＡＭである。ホスト４０２とＲＡＭとの間のインターフェースと、ホストとニューラルネットワークアクセラレータとの間のインターフェースとは、周辺構成要素相互接続エクスプレス（ＰＣＩＥ）である。ニューラルネットワークアクセラレータは、ホストメモリのうちのいくつかをＲＡＭと構成レジスタ４０８とにマッピングするために、ダイレクトメモリアクセス（ＤＭＡ）チャネルを使用する。ホストコンピュータシステム４０２は、ＭＬフレームワーク４１０とＫＡインターフェース４１２とを実行するのに好適な任意のコンピュータシステム、あるいはコンピュータシステムの組合せまたはネットワークであり得る。ＭＬフレームワークは、ＴｅｎｓｏｒＦｌｏｗ（商標）、Ｃａｆｆｅ、およびＭＸＮｅｔなど、プログラミングパッケージを使用して指定され得る。
【００３８】
ＫＡインターフェース４１２は、ニューラルネットワークアクセラレータ２３８による処理のために、ＭＬフレームワーク４１０からニューラルネットワーク要求を受信する。処理のためにニューラルネットワーク要求をニューラルネットワークアクセラレータにサブミットする前に、ＫＡインターフェースは、ニューラルネットワークの層に関連する重み行列を、ニューラルネットワークアクセラレータと共有されるＲＡＭ２２６に書き込む。重み行列のすべては、連続ブロックとして共有メモリに書き込まれ、これは、ＤＭＡ動作の数およびオーバーヘッドを低減し、ニューラルネットワークの層における畳み込みまたは行列乗算のために重みが必要とされるとき、ニューラルネットワークアクセラレータにとって重みが利用可能であることを確実にする。
【００３９】
ＭＬフレームワーク４１０からニューラルネットワーク要求を受信したことに応答して、ＫＡインターフェース４１２は、層単位命令のグループを命令パッケージにアセンブルし、命令パッケージをＲＡＭ２２６に書き込む。各層単位命令は、ニューラルネットワークのそれぞれの層の処理を指定する。さらに、各層単位命令は、共有メモリ中の組み合わせられた重み行列のベースアドレスからの重み行列のそれぞれのオフセットを指定する。ニューラルネットワークの各層の処理は、重み行列の各々にアクセスする。層単位命令はまた、異なる層における異なるニューラルネットワーク動作のための構成パラメータを指定する。たとえば、構成パラメータは、スケーリングファクタと、畳み込みウィンドウおよびストライドと、最大プール処理のための行列次元と、活性化関数とを指定することができる。構成パラメータは、さらに、ＲＡＭ中の命令パッケージのベースアドレスを含む。ニューラルネットワークの異なる層は、ニューラルネットワーク動作の異なるセットを伴うことができる。
【００４０】
ＫＡアクセラレータは、さらに、ニューラルネットワークアクセラレータの構成レジスタ４０８中に構成パラメータを確立する。構成パラメータは、重み行列のベースアドレスと、入出力データ行列のベースアドレスと、入出力データ行列のベースアドレスからのオフセットとを含む。重み行列は「Ａ」と呼ばれることがあり、入力データ行列は「Ｂ」と呼ばれることがあり、出力データ行列は「Ｃ」と呼ばれることがある。
【００４１】
命令のパッケージが処理される準備ができていることを示すＫＡインターフェース４１２からの信号に応答して、ニューラルネットワークアクセラレータ２３８は、命令パッケージからの層単位命令を順次に処理する。命令のパッケージは、プログラムまたは状態機械を効果的に指定し、そのプログラムまたは状態機械に従って、ニューラルネットワークアクセラレータは、ニューラルネットワークの層の指定された処理を実施する。
【００４２】
図５は、図３の例示的なニューラルネットワークアクセラレータ２３８の別のビューを示す。マージされた重み行列５２０が、ホストによって書き込まれ、ＲＡＭ２２６の連続アドレスに記憶される。例示的なアプリケーションでは、命令パッケージ５１６中の層単位命令は、ニューラルネットワークの層において実施されるべきニューラルネットワーク動作のセットと、スケーリング、最大プール次元、および活性化関数のための構成パラメータとを指定する。ニューラルネットワーク動作の異なるセットが、ニューラルネットワークアクセラレータによる特定の層単位処理を指示するために、命令パッケージ中の層単位命令のうちの異なる層単位命令において指定され得る。
【００４３】
命令パッケージ５１６からの層単位命令を処理することにおいて、ニューラルネットワークアクセラレータは、命令を順次に処理する。たとえば、第１の層単位命令が処理され、その後に連続して命令パッケージの第２の層単位命令を処理する。第１の層単位命令を処理することにおいて、ニューラルネットワークアクセラレータ２３８は、入力データをＲＡＭ２２６中のＢ／Ｃバッファ５１８の第１の部分から読み取り、出力データをＲＡＭ中のＢ／Ｃバッファの第２の部分に書き込む。第２の層単位命令を処理することにおいて、ニューラルネットワークアクセラレータは、入力データをＢ／Ｃバッファの第２の部分から読み取り、出力データをＢ／Ｃバッファの第１の部分に書き込む。ニューラルネットワークアクセラレータは、その後、各連続する層単位命令とともに、入力および出力データのために使用されるＢ／Ｃバッファの部分間を交互する。
【００４４】
ニューラルネットワークアクセラレータ２３８は、構成レジスタ４０８、（図３の読取りおよび書込み制御部を実装する）ディスパッチングおよびアドレッシング論理回路要素５０２、フォーマッタ回路３４４、畳み込みまたは行列乗算器回路要素３６２、正規化線形ユニット（ＲｅＬＵ）およびスケーリング回路３６４、プーリング回路要素３６６を含む。マルチプレクサ３５６および３６８は、指定されたニューラルネットワーク動作に従ってディスパッチおよびアドレッシングロジック部によって制御される。構成レジスタ中の構成データは、フォーマッタ回路、行列乗算器回路要素、ＲｅＬＵスケーリング回路、およびプーリング回路要素のための構成パラメータを与える。
【００４５】
ディスパッチおよびアドレッシング回路５０２は、層単位命令を命令パッケージ５１６から読み取り、作業要求において参照されるデータとともに、指定されたニューラルネットワーク動作を始動する。ディスパッチおよびアドレッシング回路は、層単位命令において指定されたパラメータに従って、ＲＡＭ２２６から読み取られた入力データと、フォーマッタ回路３４４からのフォーマットされたデータとの間で選択するように、マルチプレクサ３５６を制御する。フォーマッタ回路３４４は、入力データを、ＭＬフレームワークによって与えられるフォーマットから、畳み込みまたは行列乗算器回路３６２に好適なフォーマットに変える。たとえば、一実装形態では、フォーマッタ回路は、画像データを列データに変換する（ｉｍ２ｃｏｌ）。別の実装形態では、フォーマッタ回路は、行メジャー（ｒｏｗ−ｍａｊｏｒ）または列メジャー（ｃｏｌｕｍｎ−ｍａｊｏｒ）フォーマットを、算出アレイジオメトリに一致するカスタムハイブリッド行／列メジャーフォーマットに変える。畳み込みまたは行列乗算器回路要素３６２は、入力データと重み行列５２０からの選択された重み行列との間の行列乗算を実施する。一実装形態では、行列乗算回路３６２は、乗算器アキュムレータ回路のシストリックアレイである。ＲｅＬＵ回路３６４は、ニューラルネットワークのための活性化関数およびスケーリング関数を実装する。例示的なアプリケーションでは、プーリング回路３６６は、後続の層に課される計算要求を低減するために、畳み込み層間のデータの空間サイズを低減する。空間サイズの低減はまた、オーバーフィッティング（ｏｖｅｒｆｉｔｔｉｎｇ）を回避するのを助ける。例示的なアプリケーションでは、プーリング回路は最大プール関数を実装する。ディスパッチおよびアドレッシング回路は、Ｂ／Ｃバッファ５１８に出力行列として記憶するために、ＲｅＬＵおよびスケーリング回路３６４からのデータと、プーリング回路３６６からのデータとの間で選択するように、マルチプレクサ３６８を制御する。
【００４６】
図６は、層単位命令のパッケージを処理するためのニューラルネットワークアクセラレータを構成し、処理のために、重み、入力データ、および層単位命令のパッケージをニューラルネットワークアクセラレータに与えることにおいて、ＫＡインターフェースによって実施されるプロセスのフローチャートを示す。
【００４７】
ブロック６０２において、ＫＡインターフェースは、ニューラルネットワークの層の動作を実施するために必要とされる重み行列を集める。重み行列は、ＭＬフレームワーク４１０におけるニューラルネットワークの仕様から取得され得る。ニューラルネットワークの各層は、関連する重み行列を有する。ＫＡインターフェースは、重み行列の集合をＲＡＭ２２６の連続アドレス空間のブロック中に書き込む。
【００４８】
ＫＡインターフェース４１２は、ブロック６０４において、Ｂ／Ｃバッファのサイズを決定する。例示的な実装形態では、ＫＡインターフェースは、ＭＬフレームワーク４１０によって定められるニューラルネットワークの仕様をスキャンする。仕様をスキャンすることにおいて、ＫＡインターフェースは、ニューラルネットワークの異なる層におけるＢおよびＣ行列の定義を探索し、ＢおよびＣ行列の最大サイズを決定する。Ｂ／Ｃバッファのサイズは、ＢおよびＣ行列の最大サイズの２倍になるように算出される。ニューラルネットワークアクセラレータが、画像のバッチなど、入力データの複数のセットを処理する適用例では、Ｂ／Ｃバッファのサイズは、
２＊ｍａｘ（Ｂ，Ｃ）＊ｎｕｍ−ｓｅｔｓ
であり得る。
ここで、ｍａｘ（Ｂ，Ｃ）はＢおよびＣ行列の最大サイズであり、ｎｕｍ−ｓｅｔｓは、画像のＲＧＢチャネルなど、入力データのセットの数である。
【００４９】
ブロック６０６において、ＫＡインターフェースは、重み行列、命令パッケージ、およびＢ／ＣバッファのＲＡＭ２２６中のベースアドレスでニューラルネットワークアクセラレータを構成する。ニューラルネットワークアクセラレータは、ベースアドレスを構成レジスタ４０８に書き込むことによって構成され得る。
【００５０】
ブロック６０８におけるＫＡインターフェースは、ニューラルネットワークの層を通して（１つまたは複数の）入力データセットを実行するために、ＭＬフレームワークからコマンドを受信する。コマンドに応答して、ブロック６１０において、ＫＡインターフェースは、層単位命令を命令のパッケージにアセンブルし、層単位命令は、ＭＬフレームワークによって定義されるニューラルネットワークの仕様に基づいて生成される。たとえば、特定のアプリケーションでは、ＭＬフレームワークは、以下のように、層におけるニューラルネットワーク動作を定義する。
畳み込み１
ＲｅＬｕ１
最大プール１
畳み込み２
ＲｅＬｕ２
最大プール２
畳み込み３
ＲｅＬｕ３
畳み込み４
ＲｅＬｕ４
畳み込み５
ＲｅＬｕ５
最大プール５
ＦＣ６
ＦＣ７
ＦＣ８
ここで、各整数はニューラルネットワークにおける層を示す。層は、アルゴリズム説明では１から、特定の実装形態では０から番号付けされ得る。両方の説明は交換可能である。ニューラルネットワーク層の定義に基づいて、ＫＡインターフェースは、命令パッケージ中に含めるための層単位命令を準備する。たとえば、上記の例示的なニューラルネットワーク定義に基づくＡｌｅｘｎｅｔ畳み込みニューラルネットワークの層２のための層単位命令は、以下の通りである。
Ｍ：１９２
Ｎ：５８３２
Ｋ：１６００
ｓｃａｌｅＦＰＧＡＣ：２６
Ａ＿ｏｆｆｓｅｔ：２４５６７
ｄｏ  ｉｍ２ｃｏｌ：２
ｂａｔｃｈ  ｓｉｚｅ：８
ｉｍｇ  ｃｈ：６４  ｗ：２７  ｗ＿ｐａｄｄｅｄ：３２  ｈ：２７
ｏｕｔ  ｗ：２７  ｗ＿ｐａｄｄｅｄ：３２
ｍａｘｐｏｏｌ：２
ｒｅｌｕ：ｔｒｕｅ
【００５１】
例示的な層単位命令では、Ｍに関連する値は、重み行列Ａの行数と出力行列Ｃの行数とを指定する。Ｎに関連する値は、画像行列Ｂの列数と出力行列Ｃの列数とを指定する。Ｋに関連する値は、Ａの列とＢの行とを指定する。ｓｃａｌｅＦＰＧＡＣに関連する値は、層３において使用するために、層２からの算出された値をスケーリングするために使用されるスケーリングファクタを指定する。Ａ＿ｏｆｆｓｅｔに関連する値は、層２のための重み行列が見つけられる、重み行列５２０のベースアドレスからのオフセットを指定する。
【００５２】
パラメータ「ｄｏ  ｉｍ２ｃｏｌ：２」は、層２ジオメトリの画像から列へのフォーマッティングが実施されるべきであることを指定する。パラメータ「ｂａｔｃｈ  ｓｉｚｅ：８」は、入力データの８つのセットが処理されるべきであることを指定する。パラメータ「ｉｍｇ  ｃｈ：６４  ｗ：２７  ｗ＿ｐａｄｄｅｄ：３２  ｈ：２７」は、層２における入力データセット中のチャネルの数を指定する。パラメータ「ｏｕｔ  ｗ：２７  ｗ＿ｐａｄｄｅｄ：３２」は、算出アレイによって必要とされるデータサイズと整合させるための入力データのパディングを指定する。パラメータ「ｍａｘｐｏｏｌ：２」は、層２の最大プール動作が実施されるべきであることを指定する。パラメータ「ｒｅｌｕ：ｔｒｕｅ」は、層１のｒｅｌｕ動作が実施されるべきであることを指定する。
【００５３】
層単位命令が、ニューラルネットワークのすべての層についてアセンブルされると、ブロック６１２において、ＫＡインターフェースは、層単位命令のパッケージをＲＡＭ２２６に書き込む。ブロック６１４において、ＫＡインターフェースは、入力データをＲＡＭ中のＢ／Ｃバッファに書き込み、命令パッケージおよび入力データがＲＡＭに書き込まれると、ブロック６１６において、ＫＡインターフェースは、ニューラルネットワークを通して入力データを処理することを開始するようにニューラルネットワークアクセラレータにシグナリングする。ニューラルネットワークアクセラレータが処理の完了をシグナリングすることに応答して、ブロック６１８において、ＫＡインターフェースは、出力データをＲＡＭ中のＢ／Ｃバッファから読み取る。
【００５４】
図７は、ニューラルネットワーク命令のパッケージを処理することにおいて、ニューラルネットワークアクセラレータによって実施されるプロセスのフローチャートを示す。ブロック７０２において、ニューラルネットワークアクセラレータ２３８は、層単位命令を命令パッケージ５１６から読み取る。指定された重み行列と、入力および出力データのためのＢ／Ｃバッファへのアドレスとのアドレッシングが、ブロック７０４において、ニューラルネットワークアクセラレータによって確立される。重み行列のアドレスは、マージされた重み行列５２０のベースアドレス、および層単位命令によって指定されたオフセットとして決定される。
【００５５】
Ｂ／Ｃバッファは、入力データと出力データの両方を記憶するために使用され、ニューラルネットワークのある層からの出力データは、次の連続する層への入力データである。ベース入力アドレスは、現在の層のためのＢ／Ｃバッファ中の入力データのベースアドレスを参照し、ベース出力アドレスは、現在の層のためのＢ／Ｃバッファ中の出力データのベースアドレスを参照する。処理が、ある層から次の連続する層に遷移するとき、ベース入力アドレスのために使用されるアドレスと、ベース出力アドレスのために使用されるアドレスとがスワップされる。アドレススワッピング方式は、ニューラルネットワークアクセラレータをある層の処理から次の層の処理に遷移させるときのデータのコピーをなくす。
【００５６】
ブロック７０６において、ニューラルネットワークアクセラレータは、指定されたパラメータを使用して、層単位命令において指定されたニューラルネットワーク動作を実施する。上記に示された例示的な層単位命令では、畳み込み、行列乗算、ｉｍ２ｃｏｌ、最大プール、およびｒｅｌｕ動作が実施される。ニューラルネットワークアクセラレータは、決定ブロック７０８において、処理されるべきさらなる層単位命令があるか否かを決定する。さらなる層単位命令がある場合、ブロック７１０において、ニューラルネットワークアクセラレータは、次の命令を命令パッケージから読み取り、ブロック７０４に戻って、次の命令のためにセットアップする。さらなる層単位命令がない場合、入力データのニューラルネットワークアクセラレータ処理は完了し、ブロック７１２において、ニューラルネットワークアクセラレータは、完了をホストにシグナリングする。
【００５７】
図８は、０〜４と番号付けされた５つのニューラルネットワーク層のための、例示的な重み行列８０２のアドレッシングおよび例示的な入出力バッファ（「Ｂ／Ｃバッファ」）８０４のアドレッシングを示す。重み行列８０２のベースアドレスは「重みベース」とラベル付けされ、層０重みは重みベースから開始して、記憶される。層１〜４のための重み行列は、重みベースからのそれぞれのオフセットから開始して、記憶される。層１オフセットは「Ｌ１オフセット」である、層２オフセットは「Ｌ２オフセット」である、などである。Ｂ／Ｃバッファのベースアドレスは「Ｂ／Ｃベース」とラベル付けされ、これは、Ｂ／Ｃバッファの第１の部分のベースアドレスとして使用され、Ｂ／Ｃバッファの第２の部分のアドレスは、Ｂ／Ｃベース＋ＢＣオフセットにある。
【００５８】
ブロック８０６、８０８、８１０、８１２、および８１４は、それぞれ、層０〜４において、指定されたニューラルネットワーク動作を実施することにおいて、ニューラルネットワークアクセラレータ２３８によって実施される処理を表す。Ａ、Ｂ、およびＣは、各層へのアドレス入力を示す。Ａは重み行列のベースアドレスであり、Ｂは入力データ行列のベースアドレスであり、Ｃは出力データ行列のベースアドレスである。
【００５９】
層０の場合、重み行列のベースアドレスは重みベースであり、入力行列のベースアドレスはＢ／Ｃベースであり、出力行列のベースアドレスはＢ／Ｃベース＋ＢＣオフセットである。層１に移動すると、層１命令は、層１のための重み行列のオフセットとしてＬ１オフセットを指定し、層１のための重み行列のベースアドレスは、重みベース＋Ｌ１オフセットである。重み行列のベースアドレスは、層単位命令における指定されたオフセットに従って、各層における入力のために調整される。
【００６０】
Ｂ行列のアドレスとＣ行列のアドレスとは、層０から層１に遷移する際にスワップされ、層０からの出力は層１への入力になる。層０への入力のために使用されるＢ／Ｃバッファの部分は、層１からの出力のための部分になる。詳細には、入力行列のベースアドレスはＢ／Ｃベース＋ＢＣオフセットに変化し、出力行列のベースアドレスはＢ／Ｃベースに変化する。本例では、偶数番号の層は、Ｂ／Ｃベースに基づくＢ／Ｃバッファの部分からデータを入力し、Ｂ／Ｃベース＋ＢＣオフセットに基づくＢ／Ｃバッファの部分にデータを出力する。奇数番号の層は、Ｂ／Ｃベース＋ＢＣオフセットに基づくＢ／Ｃバッファの部分からデータを入力し、Ｂ／Ｃベースに基づくＢ／Ｃバッファの部分にデータを出力する。
【００６１】
図９は、一例による、プログラマブルＩＣ２２８を示すブロック図である。プログラマブルＩＣ２２８は、プログラマブルロジック部３と、構成ロジック部２５と、構成メモリ２６とを含む。プログラマブルＩＣ２２８は、ＮＶＭ２２４、ＲＡＭ２２６、および他の回路２９など、外部回路に連結され得る。プログラマブルロジック部３は、論理セル３０と、サポート回路３１と、プログラマブル相互接続３２とを含む。論理セル３０は、複数の入力の一般的な論理関数を実装するように構成され得る回路を含む。サポート回路３１は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用の回路を含む。論理セルとサポート回路３１とは、プログラマブル相互接続３２を使用して相互接続され得る。論理セル３０をプログラムするための情報と、サポート回路３１のパラメータを設定するための情報と、プログラマブル相互接続３２をプログラムするための情報とが、構成ロジック部２５によって構成メモリ２６に記憶される。構成ロジック部２５は、不揮発性メモリ２２４または任意の他のソース（たとえば、ＤＲＡＭ２２６または他の回路２９）から構成データを取得することができる。いくつかの例では、プログラマブルＩＣ２２８は処理システム２を含む。処理システム２は、（１つまたは複数の）マイクロプロセッサ、メモリ、サポート回路、ＩＯ回路などを含むことができる。たとえば、処理システム２は、処理システム２１０と同様の回路を含むことができる。いくつかの例では、処理システム２は、処理システム２１０の代わりに使用され得る。そのような場合、コンピューティングシステム１０８全体がプログラマブルＩＣ２２８を使用して実装され得、ソフトウェア２０６は処理システム２上で実行する。
【００６２】
図１０は、トランシーバ３７、構成可能論理ブロック（「ＣＬＢ」）３３、ランダムアクセスメモリブロック（「ＢＲＡＭ」）３４、入出力ブロック（「ＩＯＢ」）３６、構成およびクロッキングロジック部（「ＣＯＮＦＩＧ／ＣＬＯＣＫＳ」）４２、デジタル信号処理ブロック（「ＤＳＰ」）３５、特殊な入出力ブロック（「Ｉ／Ｏ」）４１（たとえば、構成ポートおよびクロックポート）、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視ロジック部などの他のプログラマブルロジック部３９を含む、多数の異なるプログラマブルタイルを含むプログラマブルＩＣ２２８のＦＰＧＡ実装形態を示す。ＦＰＧＡはまた、ＰＣＩｅインターフェース４０、アナログデジタル変換器（ＡＤＣ）３８などを含むことができる。
【００６３】
いくつかのＦＰＧＡでは、各プログラマブルタイルは、図１０の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素の入力および出力端子４８への接続を有する少なくとも１つのプログラマブル相互接続要素（「ＩＮＴ」）４３を含むことができる。各プログラマブル相互接続要素４３は、同じタイルまたは他のタイル中の（１つまたは複数の）隣接するプログラマブル相互接続要素の相互接続セグメント４９への接続をも含むことができる。各プログラマブル相互接続要素４３は、論理ブロック（図示せず）間の一般的なルーティングリソースの相互接続セグメント５０への接続をも含むことができる。一般的なルーティングリソースは、相互接続セグメント（たとえば、相互接続セグメント５０）のトラックを備える論理ブロック（図示せず）と、相互接続セグメントを接続するためのスイッチブロック（図示せず）との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント（たとえば、相互接続セグメント５０）は、１つまたは複数の論理ブロックにわたることができる。一般的なルーティングリソースとともにとられるプログラマブル相互接続要素４３は、示されているＦＰＧＡのためのプログラマブル相互接続構造（「プログラマブル相互接続」）を実装する。
【００６４】
例示的な一実装形態では、ＣＬＢ３３は、ユーザロジック部を実装するようにプログラムされ得る構成可能論理要素（「ＣＬＥ」）４４と、単一のプログラマブル相互接続要素（「ＩＮＴ」）４３とを含むことができる。ＢＲＡＭ３４は、１つまたは複数のプログラマブル相互接続要素に加えてＢＲＡＭ論理要素（「ＢＲＬ」）４５を含むことができる。典型的には、タイル中に含まれる相互接続要素の数は、タイルの高さに依存する。描かれている例では、ＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、他の数（たとえば、４つ）も使用され得る。ＤＳＰタイル３５は、適切な数のプログラマブル相互接続要素に加えてＤＳＰ論理要素（「ＤＳＰＬ」）４６を含むことができる。ＩＯＢ３６は、たとえば、プログラマブル相互接続要素４３の１つのインスタンスに加えて入出力論理要素（「ＩＯＬ」）４７の２つのインスタンスを含むことができる。当業者に明らかになるように、たとえばＩ／Ｏ論理要素４７に接続される実際のＩ／Ｏパッドは、典型的に、入出力論理要素４７のエリアに制限されない。
【００６５】
描かれている例では、ダイの中心の近くの水平方向のエリアが、構成、クロック、および他の制御ロジック部のために使用される。この水平方向のエリアまたは列から延びる垂直方向の列５１が、ＦＰＧＡの幅にわたってクロックおよび構成信号を分散させるために使用される。
【００６６】
図１０に示されているアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構築する規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび／または専用のロジック部であり得る。
【００６７】
図１０は、例示的なＦＰＧＡアーキテクチャを示すことを意図されているにすぎないことに留意されたい。たとえば、１つの行中の論理ブロックの数、行の相対幅、行の数および順序、行中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図１０の上部に含まれる相互接続／論理実装形態は、例にすぎない。たとえば、実際のＦＰＧＡでは、ユーザロジック部の効率的な実装を容易にするために、ＣＬＢが現れるところならどこでも、ＣＬＢの２つ以上の隣接する行が典型的に含まれるが、隣接するＣＬＢ行の数は、ＦＰＧＡの全体的なサイズによって変動する。
【００６８】
いくつかの非限定的な例が以下で提供される。
【００６９】
一例では、ニューラルネットワークシステムにおける処理の方法が提供され得る。そのような方法は、ホストコンピュータシステムによって、ニューラルネットワークの複数の層に関連する複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリに書き込むことと、ホストコンピュータシステムによって複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、ホストコンピュータシステムによって入力データと命令パッケージとを共有メモリに書き込むことと、
ニューラルネットワークアクセラレータによって命令パッケージを共有メモリから読み取ることと、ニューラルネットワークアクセラレータによって命令パッケージの複数の層単位命令を処理することとを含み得る。
【００７０】
あるそのような方法では、複数の重み行列を書き込むことは、複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリに書き込むことを含み得る。
【００７１】
あるそのような方法では、複数の重み行列を書き込むことは、複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリ中の連続アドレス空間に書き込むことを含み得る。
【００７２】
あるそのような方法は、重み行列の共有メモリ中のベースアドレスを示すパラメータを、ホストコンピュータシステムからニューラルネットワークアクセラレータに伝えることをさらに含み得る。
【００７３】
あるそのような方法では、複数の層単位命令を処理することは、第１の層単位命令を処理することと、その後に連続して命令パッケージの第２の層単位命令を処理することと、第１の層単位命令を処理することにおいて、入力データを共有メモリの第１の部分から読み取り、出力データを共有メモリの第２の部分に書き込むことと、第２の層単位命令を処理することにおいて、入力データを共有メモリの第２の部分から読み取り、出力データを共有メモリの第１の部分に書き込むこととを含み得る。
【００７４】
あるそのような方法は、共有バッファの第１の部分の共有メモリ中のアドレスを示す第１のパラメータと、共有バッファの第２の部分の共有バッファ中のオフセットを示す第２のパラメータとを、ホストコンピュータシステムからニューラルネットワークアクセラレータに伝えることをさらに含み得、複数の層単位命令を処理することは、第１の層単位命令を処理することと、その後に連続して命令パッケージの第２の層単位命令を処理することと、第１の層単位命令を処理することにおいて、入力データを共有バッファの第１の部分から読み取り、出力データを共有バッファの第２の部分に書き込むことと、第２の層単位命令を処理することにおいて、入力データを共有バッファの第２の部分から読み取り、出力データを共有バッファの第１の部分に書き込むこととを含み得る。
【００７５】
あるそのような方法は、ホストコンピュータシステムによって、ニューラルネットワークの仕様から、ニューラルネットワークの複数の層において参照される入力行列および出力行列のサイズの最大値に基づいて共有バッファのサイズを決定することをさらに含み得る。
【００７６】
あるそのような方法では、複数の層単位命令をアセンブルすることは、層単位命令のうちの１つまたは複数において、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを含み得る。
【００７７】
あるそのような方法では、複数の層単位命令のうちの第１の層単位命令と第２の層単位命令とは、ニューラルネットワーク動作の異なるセットを指定する。
【００７８】
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージ中での出現の順に命令パッケージ中の複数の層単位命令を処理することを含み得る。
【００７９】
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージ中のｎ個の命令について、命令ｉ＋１の実行を開始する前に命令ｉの実行を完了することを処理することを含み、１≦ｉ≦ｎであり得る。
【００８０】
あるそのような方法では、複数の層単位命令を処理することは、命令パッケージによって定義される状態機械のための有限状態機械遷移表を評価することを含み得る。
【００８１】
別の例では、ニューラルネットワーク処理システムが提供され得る。そのようなニューラルネットワーク処理システムは、共有メモリと、共有メモリに接続されたホストコンピュータシステムであって、ホストコンピュータシステムが命令で構成され得、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの複数の層に関連する複数の重み行列を共有メモリに書き込むことと、複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、入力データと命令パッケージとを共有メモリに書き込むこととを行わせる、ホストコンピュータシステムと、共有メモリにおよびホストコンピュータシステムに接続されたニューラルネットワークアクセラレータであって、ニューラルネットワークアクセラレータが、命令パッケージを共有メモリから読み取ることと、命令パッケージの複数の層単位命令を処理することとを行うように構成され得る、ニューラルネットワークアクセラレータとを含み得る。
【００８２】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の重み行列を書き込むことを行わせる命令は、ホストコンピュータシステムに、ニューラルネットワークアクセラレータによって複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリに書き込むことを行わせる命令を含み得る。
【００８３】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の重み行列を書き込むことを行わせる命令は、ホストコンピュータシステムに、ニューラルネットワークアクセラレータによって複数の層単位命令を処理することの前に、複数の重み行列のすべてを共有メモリ中の連続アドレス空間に書き込むことを行わせる命令を含み得る。
【００８４】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムは命令でさらに構成され得、命令は、実行されたとき、ホストコンピュータシステムに、重み行列の共有メモリ中のベースアドレスを示すパラメータをニューラルネットワークアクセラレータに伝えることを行わせる。
【００８５】
あるそのようなニューラルネットワーク処理システムでは、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージの第１の層単位命令と第２の層単位命令とを連続して処理することと、第１の層単位命令を処理することにおいて、入力データを共有メモリの第１の部分から読み取り、出力データを共有メモリの第２の部分に書き込むことと、第２の層単位命令を処理することにおいて、入力データを共有メモリの第２の部分から読み取り、出力データを共有メモリの第１の部分に書き込むこととを行うように構成され得る。
【００８６】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムは命令でさらに構成され得、命令は、実行されたとき、ホストコンピュータシステムに、ニューラルネットワークの仕様から、ニューラルネットワークの複数の層において参照される入力行列および出力行列のサイズの最大値に基づいて共有バッファのサイズを決定することと、共有バッファの第１の部分の共有メモリ中のアドレスを示す第１のパラメータと、共有バッファの第２の部分の共有バッファ中のオフセットを示す第２のパラメータとを、ニューラルネットワークアクセラレータに伝えることとを行わせ、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージの第１の層単位命令と第２の層単位命令とを連続して処理することと、第１の層単位命令を処理することにおいて、入力データを共有バッファの第１の部分から読み取り、出力データを共有バッファの第２の部分に書き込むことと、第２の層単位命令を処理することにおいて、入力データを共有バッファの第２の部分から読み取り、出力データを共有バッファの第１の部分に書き込むこととを行うようにさらに構成され得る。
【００８７】
あるそのようなニューラルネットワーク処理システムでは、ホストコンピュータシステムに、複数の層単位命令をアセンブルすることを行わせる命令は、ホストコンピュータシステムに、層単位命令のうちの１つまたは複数において、畳み込み、行列乗算、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを行わせる命令を含む。
【００８８】
あるそのようなニューラルネットワーク処理システムでは、複数の層単位命令を処理することにおけるニューラルネットワークアクセラレータは、命令パッケージ中での出現の順に命令パッケージ中の複数の層単位命令を処理するようにさらに構成され得る。
【００８９】
態様および特徴はいくつかの場合には個々の図で説明され得るが、組合せが明示的に示されないか、または組合せとして明示的に説明されなくても、ある図からの特徴は別の図の特徴と組み合わせられ得ることが諒解されよう。
【００９０】
方法およびシステムは、ニューラルネットワーク処理のための様々なシステムに適用可能であると考えられる。他の態様および特徴は、本明細書の考慮から当業者に明らかになろう。方法およびシステムは、ソフトウェアを実行するように構成された１つまたは複数のプロセッサとして、特定用途向け集積回路（ＡＳＩＣ）として、またはプログラマブル論理デバイス上のロジック部として実装され得る。明細書および図面は例としてのみ考慮されることが意図されており、本発明の真の範囲は以下の特許請求の範囲によって示される。
【図１】
2020537785.tif 000003
【図２】
2020537785.tif 000004
【図３】
2020537785.tif 000005
【図４】
2020537785.tif 000006
【図５】
2020537785.tif 000007
【図６】
2020537785.tif 000008
【図７】
2020537785.tif 000009
【図８】
2020537785.tif 000010
【図９】
2020537785.tif 000011
【図１０】
2020537785.tif 000012
【手続補正書】
【提出日】令和1年5月7日(2019.5.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホストコンピュータシステムによって、複数の重み行列を、ニューラルネットワークアクセラレータと共有されるメモリ中の連続アドレス空間に書き込むことと、
前記ホストコンピュータシステムによって複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、前記共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、
前記ホストコンピュータシステムによって入力データと前記命令パッケージとを前記共有メモリに書き込むことと、
前記ニューラルネットワークアクセラレータによってダイレクトメモリアクセス（ＤＭＡ）動作を介して前記共有メモリから前記命令パッケージの各層単位命令を読み取ることと、
前記ニューラルネットワークアクセラレータによって前記命令パッケージの前記複数の層単位命令の各層単位命令を処理することであって、前記処理することが、
前記層単位命令から、前記複数の重み行列のうちの重み行列のベースアドレスおよびオフセットを決定することと、
ＤＭＡを介して前記共有メモリから前記重み行列を読み取ることと
を含む、前記複数の層単位命令の各層単位命令を処理することと
を含む方法。
【請求項２】
前記複数の重み行列を書き込むことが、前記複数の層単位命令を処理することの前に、前記複数の重み行列のすべてを前記共有メモリに書き込むことを含む、請求項１に記載の方法。
【請求項３】
前記重み行列の前記共有メモリ中のベースアドレスを示すパラメータを、前記ホストコンピュータシステムから前記ニューラルネットワークアクセラレータに伝えることをさらに含む、請求項１または請求項２に記載の方法。
【請求項４】
前記複数の層単位命令を処理することが、
前記命令パッケージの第１の層単位命令を処理することと、その後に連続して前記命令パッケージの第２の層単位命令を処理することと、
前記第１の層単位命令を処理する際に、入力データを前記共有メモリの第１の部分から読み取り、出力データを前記共有メモリの第２の部分に書き込むことと、
前記第２の層単位命令を処理する際に、入力データを前記共有メモリの前記第２の部分から読み取り、出力データを前記共有メモリの前記第１の部分に書き込むことと
を含む、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記複数の層単位命令を処理することが、前記命令パッケージ中での出現の順に前記命令パッケージ中の前記複数の層単位命令を処理することを含む、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記複数の層単位命令を処理することが、命令パッケージ中のｎ個の命令について、命令ｉ＋１の実行を開始する前に命令ｉの実行を完了することを処理することを含み、１≦ｉ≦ｎである、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記複数の層単位命令を処理することが、前記命令パッケージによって定義される状態機械のための有限状態機械遷移表を評価することを含む、請求項１から６のいずれか一項に記載の方法。
【請求項８】
共有メモリと、
前記共有メモリに接続されたホストコンピュータシステムであって、前記ホストコンピュータシステムが命令で構成され、前記命令は、実行されたとき、前記ホストコンピュータシステムに、
複数の重み行列を前記共有メモリ中の連続アドレス空間に書き込むことと、
複数の層単位命令を命令パッケージにアセンブルすることであって、各層単位命令が、ニューラルネットワークの複数の層のそれぞれの層の処理と、前記共有メモリ中の重み行列のそれぞれのオフセットとを指定する、複数の層単位命令を命令パッケージにアセンブルすることと、
入力データと前記命令パッケージとを前記共有メモリに書き込むことと
を行わせる、ホストコンピュータシステムと、
前記共有メモリにおよび前記ホストコンピュータシステムに接続されたニューラルネットワークアクセラレータであって、前記ニューラルネットワークアクセラレータは、
前記命令パッケージの各層単位命令を前記共有メモリから読み取ることと、
前記命令パッケージの前記複数の層単位命令を処理することであって、前記処理することが、
前記層単位命令から、前記複数の重み行列のうちの重み行列のベースアドレスおよびオフセットを決定することと、
ＤＭＡを介して前記共有メモリから前記重み行列を読み取ることと
を含む、前記複数の層単位命令を処理することと
を行うように構成された、ニューラルネットワークアクセラレータと
を備える、ニューラルネットワーク処理システム。
【請求項９】
前記ホストコンピュータシステムに前記複数の重み行列を書き込むことを行わせる前記命令が、前記ニューラルネットワークアクセラレータによって前記複数の層単位命令を処理することの前に、前記ホストコンピュータシステムに前記複数の重み行列のすべてを前記共有メモリに書き込むことを行わせる命令を含む、請求項８に記載のニューラルネットワーク処理システム。
【請求項１０】
前記ホストコンピュータシステムが命令でさらに構成され、前記命令が、実行されたとき、前記ホストコンピュータシステムに、前記重み行列の前記共有メモリ中のベースアドレスを示すパラメータを、前記ニューラルネットワークアクセラレータに伝えることを行わせる、請求項８または９に記載のニューラルネットワーク処理システム。
【請求項１１】
前記複数の層単位命令を処理する際の前記ニューラルネットワークアクセラレータが、
前記命令パッケージの第１の層単位命令と第２の層単位命令とを連続して処理することと、
前記第１の層単位命令を処理する際に、入力データを前記共有メモリの第１の部分から読み取り、出力データを前記共有メモリの第２の部分に書き込むことと、
前記第２の層単位命令を処理する際に、入力データを前記共有メモリの前記第２の部分から読み取り、出力データを前記共有メモリの前記第１の部分に書き込むことと
を行うように構成された、請求項８から１０のいずれか一項に記載のニューラルネットワーク処理システム。
【請求項１２】
前記ホストコンピュータシステムに、前記複数の層単位命令をアセンブルすることを行わせる前記命令が、前記ホストコンピュータシステムに、前記層単位命令のうちの１つまたは複数において、畳み込み、行列乗算、スケーリング、最大プール次元、および活性化関数のための構成パラメータを指定することを行わせる命令を含む、請求項８から１１のいずれか一項に記載のニューラルネットワーク処理システム。
【請求項１３】
前記複数の層単位命令を処理する際の前記ニューラルネットワークアクセラレータが、前記命令パッケージ中での出現の順に前記命令パッケージ中の前記複数の層単位命令を処理するようにさらに構成された、請求項９に記載のニューラルネットワーク処理システム。
【国際調査報告】
2020537785.tif 000013
2020537785.tif 000014
2020537785.tif 000015