(57)【特許請求の範囲】
【請求項１】
コンピュータに操作を実行させるためのコンピュータによって実行可能な命令を含むコンピュータプログラムであって、
計算グラフ及びハードウェアチップの構成を取得することであって、
ニューラルネットワークの前記計算グラフは複数の層を有し、各層は複数のノード及び複数のエッジを有し、各ノードは数学的操作の表示を含み、
前記ハードウェアチップは前記数学的操作を実行するための少なくとも一つのモジュールとオンチップメモリとを含み、前記ハードウェアチップは、活性化データを格納する外部メモリと接続しつつ、層の対応する部分の前記活性化データに前記数学的操作を、層ごとに順次、実行することにより各層の部分で前記ニューラルネットワークの推論を実行することが可能である、
前記取得することと、
複数の層の推論を複数のグループに分割することであって、各グループは、各グループの層の対応する部分の前記数学的操作を、層ごとに順次、実行することにより前記ニューラルネットワークの推論を実行するための、前記ハードウェアチップによる少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む、前記分割することと、
前記ハードウェアチップが前記複数のグループの前記ニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成することと
を備えるコンピュータプログラム。
【請求項２】
前記推論を分割することは、
複数のグループ分割候補の各々に対して前記ハードウェアチップの少なくとも持続時間又はエネルギー消費の前記推定を決定するべく前記ハードウェアチップによる前記ニューラルネットワークの推論の実行をシミュレートすることと、
前記複数の層のうち同じ層の各グループ分割候補の少なくとも持続時間又はエネルギー消費の前記推定を比較することと
をさらに含み
各グループ分割候補は前記複数の層の一意な分割を特定する請求項１に記載のコンピュータプログラム。
【請求項３】
前記複数のグループ分割候補の各々は、前記複数の層の均等な分割を特定する請求項２に記載のコンピュータプログラム。
【請求項４】
前記推論を分割することは、
前記複数のグループ分割候補は、第１のグループ分割候補として単一層を特定し、第２のグループ分割候補として層の前のグループを特定し、かつ、第３のグループ分割候補として層の前記前のグループとともに前記単一層を特定することをさらに含み、
前記比較することは、（ｉ）前記第３のグループ分割候補の前記数学的操作を実行する少なくとも持続時間又はエネルギー消費の推定と、（ｉｉ）前記第１のグループ分割候補及び前記第２のグループ分割候補の前記数学的操作を実行する総持続時間及び総エネルギー消費の推定と、を比較することを含む
請求項２に記載のコンピュータプログラム。
【請求項５】
前記シミュレートすることは、
前記ハードウェアチップが各グループの層の対応する部分の前記数学的操作を、層ごとに順次、実行するための命令を生成することと、
各クロックサイクルの操作を特定しつつ前記ハードウェアチップのシミュレーション上で前記命令を実行することと
を含み、
前記ハードウェアチップのエネルギー消費の前記推定は、各操作に関連付けられた個別のエネルギー消費の和に基づき、持続時間の前記推定は、クロックサイクルの数に基づいている請求項２から４のいずれか１項に記載のコンピュータプログラム。
【請求項６】
複数の次元仕様候補の各々に対して前記ハードウェアチップの少なくとも持続時間又はエネルギー消費の前記推定を決定するべく、前記ハードウェアチップによる前記ニューラルネットワークの推論の実行をシミュレートすることと、
各次元仕様候補の少なくとも持続時間又はエネルギー消費の前記推定を比較することとによって、各層の前記部分の次元を決定することをさらに備え、
各次元仕様候補は前記オンチップメモリの容量及び前記ハードウェアチップの並列度に基づいている請求項１から５のいずれか１項に記載のコンピュータプログラム。
【請求項７】
前記ニューラルネットワークは畳み込みニューラルネットワークであり、各層の前記部分はタイルであり、
前記ハードウェアチップの前記少なくとも一つのモジュールは少なくとも一つの畳み込みモジュールを含む
請求項１から６のいずれか１項に記載のコンピュータプログラム。
【請求項８】
前記少なくとも一つの畳み込みモジュールは、少なくとも一つの専用のＤＷ（ｄｅｐｔｈ−ｗｉｓｅ）畳み込みモジュール及び少なくとも一つのＰＷ（ｐｏｉｎｔ−ｗｉｓｅ）畳み込みモジュールを含む請求項７に記載のコンピュータプログラム。
【請求項９】
前記少なくとも一つのモジュールは、活性化操作を実行するための少なくとも一つのモジュールと、前記活性化データを前記外部メモリから前記オンチップメモリ上に読み込むための少なくとも一つのモジュールと、活性化データを前記オンチップメモリから前記外部メモリへ格納するための少なくとも一つのモジュールと、前記畳み込みニューラルネットワークの重み付けを前記外部メモリから前記オンチップメモリへ読み込むための少なくとも一つのモジュールとをさらに含む請求項７又は８に記載のコンピュータプログラム。
【請求項１０】
前記ハードウェアチップに対する命令を生成することは、前記ハードウェアチップが、
前記外部メモリから各グループの最初の層の対応する部分の活性化データを取得し、
各グループの最後の層の対応する部分の前記数学的操作から得られた活性化データを外部メモリに記録する
ための命令を生成することをさらに含む請求項１から９のいずれか１項に記載のコンピュータプログラム。
【請求項１１】
前記ハードウェアチップに対して命令を生成することは、
複数のキューのうちのキューに各操作を割り当てること、及び
各キューの操作の実行を順序付けること
をさらに含む請求項１から１０のいずれか１項に記載のコンピュータプログラム。
【請求項１２】
前記ハードウェアチップに対して命令を生成することは、
前記ニューラルネットワークの推論の実行のためのデータに前記オンチップメモリの位置を割り振ること、及び、
前記ニューラルネットワークの推論を実行するために前記外部メモリへデータの退避をスケジューリングすること
をさらに含む請求項１から１１のいずれか１項に記載のコンピュータプログラム。
【請求項１３】
前記命令を生成することは、前記ハードウェアチップの前記少なくとも一つのモジュールがデータを前記外部メモリから前記割り振られた位置への読み込みを実行するための命令を生成することを含む請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記ハードウェアチップに対して命令を生成することは、従属性のある操作の相互の順序を保持するために注釈を付した同期フラグをさらに含む請求項１から１３のいずれか１項に記載のコンピュータプログラム。
【請求項１５】
前記ハードウェアチップに対する命令を生成することは、命令を２進表現に変換することをさらに含む  請求項１から１４のいずれか１項に記載のコンピュータプログラム。
【請求項１６】
前記ハードウェアチップは、複数のコア、前記数学的操作を実行するための前記少なくとも一つのモジュール及び前記複数のコア間に分配された前記オンチップメモリをさらに含み、
各コアは、コア間通信のため構成された少なくとも一つの送信機ブロック及び少なくとも一つの受信機ブロックを含み、
前記ハードウェアチップに対して命令を生成することは、前記コアに命令を分配することをさらに含む請求項１から１５のいずれか１項に記載のコンピュータプログラム。
【請求項１７】
前記ハードウェアチップは、マルチチップ構成の前記ハードウェアチップの第２のインスタンスと通信するよう構成された少なくとも一つの送信機ブロック及び少なくとも一つの受信機ブロックをさらに含む請求項１から１６のいずれか１項に記載のコンピュータプログラム。
【請求項１８】
コンピュータ実装される方法であって、
計算グラフ及びハードウェアチップの構成を取得することであって、
ニューラルネットワークの前記計算グラフは複数の層を有し、各層は複数のノードと複数のエッジとを有し、各ノードは数学的操作の表示を含み、
前記ハードウェアチップは前記数学的操作を実行するための少なくとも一つのモジュールとオンチップメモリとを含み、前記ハードウェアチップは活性化データを格納する外部メモリと接続しつつ、層の対応する部分の前記活性化データに前記数学的操作を、層ごとに順次、実行することにより各層の部分で前記ニューラルネットワークの推論を実行することが可能である、
前記取得することと、
前記複数の層の推論を複数のグループに分割することであって、各グループは、各グループの層の対応する部分の前記数学的操作を、層ごとに順次、実行することにより前記ニューラルネットワークの推論を実行するための、前記ハードウェアチップによる少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む、前記分割することと、
前記ハードウェアチップが前記複数のグループの前記ニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成することと
を備える方法。
【請求項１９】
計算グラフ及びハードウェアチップの構成を取得するよう構成された取得部であって、
ニューラルネットワークの前記計算グラフは複数の層を有し、各層は複数のノードと複数のエッジとを有し、各ノードは数学的操作の表示を含み、
前記ハードウェアチップは前記数学的操作を実行するための少なくとも一つのモジュールとオンチップメモリとを含み、前記ハードウェアチップは活性化データを格納する外部メモリと接続しつつ、層の対応する部分の前記活性化データに前記数学的操作を、層ごとに順次、実行することにより各層の部分で前記ニューラルネットワークの推論を実行することが可能である、
前記取得部と、
複数の層の推論を複数のグループに分割するよう構成された分割部であって、各グループは、各グループの層の対応する部分の前記数学的操作を、層ごとに順次、実行することにより前記ニューラルネットワークの推論を実行するための、前記ハードウェアチップによる少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む、分割部と、
前記ハードウェアチップが前記複数のグループの前記ニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成するよう構成された生成部と
を備える装置。
【請求項２０】
活性化データメモリと、
活性化データを外部メモリから前記活性化データメモリ上へ読み込むよう構成されたデータ読み込みモジュールと、
前記活性化データメモリからの活性化データを前記外部メモリ上に格納するよう構成されたデータ格納モジュールと、
重み付けメモリと、
重み値を外部メモリから前記重み付けメモリに読み込むよう構成された重み付け読み込みモジュールと、
蓄積メモリと、
前記活性化データメモリに格納された前記活性化データ及び前記重み付けメモリに格納された前記重み値に数学的操作を実行し、前記数学的操作から得られた値を前記蓄積メモリに格納するよう構成された複数の畳み込みモジュールと、
前記蓄積メモリに格納された前記値に活性化操作を実行し、得られた活性化データを前記活性化データメモリに格納するよう構成された複数の活性化モジュールと、
畳み込みニューラルネットワークの推論を実行すべく、前記外部メモリから、前記データ読み込みモジュール、前記データ格納モジュール、前記重み付け読み込みモジュール、前記複数の畳み込みモジュール及び前記複数の活性化モジュールへ命令を与えかつ同期させるよう構成された命令モジュールと
を備える装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はニューラルネットワーク推論のニューラルネットワークアクセラレータのハードウェア固有分割に関する。より具体的には、本発明は、持続時間及びエネルギー消費の推定に基づいて、ニューラルネットワークを層のグループに分割すること、及び／又は、各々の層を部分に分割すること、に関する。
【背景技術】
【０００２】
リアルタイムニューラルネットワーク（ＮＮ）推論は、自律自動車、ロボット工学、スマートフォン、可搬健康デバイス、監視などのようなアプリケーションに対するエッジデバイス上のコンピュータ映像又は発話タスクに対しておなじみとなりつつある。グーグルＴＰＵのような専用のＮＮ推論ハードウェアは、電力効率のよい推論を提供する主流方式になってきている。グーグルＴＰＵの効率は、ディープニューラルネットワーク（ＤＮＮ）の全層結合型のＰＷ（ｐｏｉｎｔ−ｗｉｓｅ）畳み込み及び圧縮に主に制約される。
【０００３】
一方で、モバイルネット的ＤＮＮアーキテクチャは、実行されるべき積和（ＭＡＣ）演算の数を格段に減少させるとともに、高い精度を実現し、結果的にＭＡＣ操作で費やす総待ち時間及びエネルギーがより低くなる。しかしながら、ＤＮＮのような推論をハードウェア上で加速するには、逆残余ボトルネック型ＤＮＮ層（Ｉｎｖｅｒｔｅｄ  Ｒｅｓｉｄｕａｌ  Ｂｏｔｔｌｅｎｅｃｋ  ｔｙｐｅ  ＤＮＮ  Ｌａｙｅｒｓ）、又は、同様に形成されたＰＷ（ｐｏｉｎｔ−ｗｉｓｅ）及びＤＷ（ｄｅｐｔｈ−ｗｉｓｅ）畳み込みＤＮＮ層の結合に対するサポートを必要とする。モバイルネット的アーキテクチャのようなサポートを有する効率的な推論システムを提供することは、エッジ演算アプリケーションに対してエネルギー効率的な次世代のハードウェア・ソフトウェアシステムを可能にするであろう。
【発明の概要】
【０００４】
本発明のある態様によれば、推論のハードウェア固有分割のための操作をコンピュータに実行させるためのコンピュータで実行可能な命令を含むコンピュータプログラムを提供する。操作は、計算グラフ及びハードウェアチップ構成を取得することを含む。ニューラルネットワークの計算グラフは複数の層を有する。各層は複数のノード及び複数のエッジを有する。各ノードは数学的操作の表現を含む。ハードウェアチップ構成は、数学的操作を実行するための少なくとも一つのモジュールとオンチップメモリとを含む。ハードウェアチップは、活性化データを格納している外部メモリと接続しつつ、層の対応する部分の活性化データに数学的操作を、層ごとに順次、実行することによって各層の部分でニューラルネットワークの推論を実行可能である。操作はさらに、複数の層の推論を複数のグループに分割することを含む。各グループは、各グループの層の対応する部分の数学的操作を、層ごとに順次、実行することにより、ハードウェアチップによるニューラルネットワークの推論を実行するための少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む。操作はさらに、ハードウェアチップが複数のグループのニューラルネットワークの推論を、グループごとに順次、実行する命令を生成することを含む。
【０００５】
この態様はさらに、コンピュータプログラムの命令を実行するプロセッサにより実行される方法、及び、当該方法を実行する装置を含んでよい。装置は、計算グラフ及びハードウェアチップ構成を取得するよう構成された取得部と、複数の層の推論を複数のグループに分割するよう構成された分割部と、ハードウェアチップが複数のグループの畳み込みニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成するよう構成された生成部とを含んでよい。
【０００６】
本発明のある態様によれば、活性化データメモリと、外部メモリからの活性化データを活性化データメモリ上に読み込むよう構成されたデータ読み込みモジュールと、活性化データメモリからの活性化データを外部メモリ上に格納するよう構成されたデータ格納モジュールとを含む装置が提供される。装置は、重み付けメモリ、及び、外部メモリからの重み値を活性化データメモリ上に読み込むよう構成された重み付け読み込みモジュールも含む。装置はさらに、蓄積メモリと、活性化データメモリに格納された活性化データ及び重み付けメモリに格納された重み値に数学的操作を実行し、数学的操作で得られた値を蓄積メモリ上に格納するよう構成された複数の畳み込みモジュールと、蓄積メモリに格納された値に活性化操作を実行し、得られた活性化データを活性化データメモリに格納するよう構成された複数の活性化モジュールとを含む。装置は、畳み込みニューラルネットワークの推論を実行すべく、外部メモリからデータ読み込みモジュール、データ格納モジュール、重み付け読み込みモジュール、複数の畳み込みモジュール及び複数の活性化モジュールへ命令を与えかつ同期させるよう構成された命令モジュールも含む。
【０００７】
上記の発明の概要の欄は、本発明の実施形態に必要な特徴の全てを列挙したものではない。上記された特徴群のサブコンビネーションもまた本発明となり得る。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施形態による、推論のハードウェア固有分割のための操作フローを示す。
【図２】本発明の実施形態による、ニューラルネットワーク推論を実行可能なハードウェアチップの例示的な構成を示す。
【図３】本発明の実施形態による、各層の部分でのニューラルネットワークの推論の実行の模式図を示す。
【図４】本発明の実施形態による、層の推論をグループに分割するための操作フローを示す。
【図５】本発明の実施形態による、ハードウェアチップ上の推論の実行をシミュレートするための操作フローを示す。
【図６】本願発明の別の実施形態による、推論のハードウェア固有分割のための操作フローを示す。
【図７】本願発明の別の実施形態による、ハードウェアチップが推論を実行するための命令を生成するための操作フローを示す。
【図８】本発明の実施形態による、ニューラルネットワーク推論を実行可能なマルチコアハードウェアチップの例示的な構成を示す。
【図９】本発明の実施形態による、ニューラルネットワーク推論を実行可能なマルチチップハードウェアの例示的な構成を示す。
【図１０Ａ】本発明の実施形態による、ＤＷ畳み込みモジュールの例示的な構成を示す。
【図１０Ｂ】本発明の実施形態による、ＤＷ畳み込みモジュールのためのチャネル毎パイプラインの例示的な構成を示す。
【図１１】本発明の実施形態による、ＰＷ畳み込みモジュールの例示的な構成を示す。
【図１２】本発明の実施形態による、推論のハードウェア固有分割に対する例示的なハードウェア構成を示す。
【発明を実施するための形態】
【０００９】
続いて、例示の本発明の実施形態が説明される。例示の実施形態は、特許請求の範囲に係る本発明を限定するものではなく、実施形態に記載された特徴の組み合わせは、必ずしも本発明に不可欠なものではない。
【００１０】
推論の実行の間に消費される総エネルギーのかなりの部分が外部メモリアクセスにおいて浪費され、外部メモリのスループットがより大きいほどより多くのエネルギー消費を必要とする、ということをここにおいて本発明者は見出した。
【００１１】
本発明の実施形態は、外部メモリアクセスの数を最小化しようとするものであってよく、概して、単位面積あたり単位秒あたり操作数テラ（ＴＯＰ／ｓ／Ａｒｅａ）で高い計算密度及びリソース稼働率を提供するものであってよい。例示的な実施形態は、ニューラルネットワーク層をグルーピングすることによって効率的なニューラルネットワーク推論を実行でき、それらの処理間で外部メモリアクセスを避けることができ、層で一つずつ処理して全中間データを外部メモリに格納するのと比較して外部メモリアクセスの総数を減少する、ＡＳＩＣやＦＰＧＡのようなハードウェアシステムによって推論を実行する命令を生成してもよい。これにより、固定のニューラルネットワークチップに近い性能と電力効率を有する様々なニューラルネットワークを取り扱う柔軟性、及び、モバイルネットバリエーションを含む、畳み込みニューラルネットワークのような様々なニューラルネットワークを取り扱える柔軟性がもたらされるであろう。
【００１２】
ここでの技術はオンチップメモリ内に入力層全体を入れ込むことができない条件において有益であろう。システム内の並列度を様々に改変することによって、ハードウェアチップは、自動化された設計・探索処理を用いることによってなど、ニューラルネットワークの特定のセット又はファミリー、及び、面積や電力などのリソース制約のセットに対してチューニングされ得る。ハードウェアは、スケーリングパラメータを調整することによって、電力が制限されたエッジデバイスからデータセンターまでスケーリングされ得る。外部メモリアクセスを減少することにより、実行の偶然性も減少できるであろう。
【００１３】
図１は、本発明の実施形態による、推論のニューラルネットワークアクセラレータのハードウェア固有分割のための操作フローを示す。操作フローは、特定のハードウェアチップ構成上の実行のために推論を分割する方法を提供してよい。
【００１４】
Ｓ１１０において、取得部は計算グラフ及びハードウェアチップ構成を取得する。計算グラフは複数の層を有するニューラルネットワークを示すものであって、各層は複数のノード及び複数のエッジを有し、各ノードは数学的操作の表現を含む。ハードウェアチップ構成は、数学的操作を実行する少なくとも一つのモジュールとオンチップメモリとを含む。ハードウェアチップは、活性化データを格納している外部メモリと接続しつつ、層の対応する部分の活性化データの数学的操作を、層ごとに順次、実行することによって、各層の部分でニューラルネットワークの推論を実行可能である。
【００１５】
Ｓ１２０において、分割部は、複数の層の推論を複数のグループに分割する。各グループは、各グループの層の対応する部分の数学的操作を、層ごとに順次、実行することによって、ニューラルネットワークの推論を実行するハードウェアチップによる少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む。
【００１６】
Ｓ１４０において、生成部は、ハードウェアチップが複数のグループのニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成する。
【００１７】
図２は、本発明の実施形態による、ニューラルネットワーク推論の実行が可能なハードウェアチップ２５０の例示的な構成を示す。ハードウェアチップ２５０は、ニューラルネットワークアクセラレータと呼ばれてもよい。この実施形態において、ハードウェアチップ２５０は特定用途向け集積回路（ＡＳＩＣ）である。ハードウェアチップ２５０のモジュールは、特定の機能を実行するよう構成された論理ゲートのグループであってよい。ハードウェアチップ２５０のメモリは、ＲＡＭ、フラッシュメモリ、又は、他の埋め込み型書き込み可能メモリであってよい。
【００１８】
ハードウェアチップ構成は、数学的操作を実行するための少なくとも一つのモジュールとオンチップメモリとを含む。この実施形態において、ハードウェアチップ２５０は外部メモリインターフェース２５２を含む。ハードウェアチップ２５０の少なくとも一つのモジュールは、少なくとも一つの畳み込みモジュール２６２、活性化操作を実行するための少なくとも一つのモジュール、活性化モジュール２６６、外部メモリから活性化データをオンチップメモリ上に読み込むための少なくとも一つのモジュール、データ読み込みモジュール２５８、オンチップメモリから外部メモリへ活性化データを格納する少なくとも一つのモジュール、データ格納モジュール２５９、畳み込みニューラルネットワークの重み付けを外部メモリからオンチップメモリへ読み込む少なくとも一つのモジュール、重み付け読み込みモジュール２５４、及び、これらのモジュールの命令を外部メモリから読み込むための少なくとも一つのモジュール、命令ＤＭＡモジュール２５６を含む。オンチップメモリは、重み付けメモリ２５５、活性化データメモリ２６０及び蓄積メモリ２６４を含む。
【００１９】
外部メモリインターフェース２５２は、ハードウェアチップ２５０、及びその中の様々なモジュール、がＤＲＡＭメモリ２０６、外部メモリとデータを交換することを可能にするよう構成されている。中央演算処理装置（ＣＰＵ）２０８は、アプリケーションの使用時にニューラルネットワーク推論を要求してよい。
【００２０】
重み付け読み込みモジュール２５４及びデータ読み込みモジュール２５８は、外部メモリインターフェース２５２を介して、ＤＲＡＭメモリ２０６のような外部メモリからデータを読み取りかつ読み込むように構成されている。重み付け読み込みモジュール２５４は、外部メモリから重み値を順次読み取り、そのようなデータを重み付けメモリ２５５上に読み込んでよい。
【００２１】
データ読み込みモジュール２５８は、外部メモリから入力値、活性化データなどを読み取り、かつ、そのようなデータを活性化データメモリ２６０上に読み込んでよい。データ格納モジュール２５９は、外部メモリインターフェース２５２を介して、活性化データを外部メモリ上に格納するよう構成されている。データ格納モジュール２５９は、活性化データを活性化データメモリ２６０から読み取り、そのようなデータをＤＲＡＭメモリ２０６上に格納してよい。データ読み込みモジュール２５８及びデータ格納モジュール２５９は、外部メモリに格納された活性化データの、矩形のサブ領域、ブロック又はタイルのような、部分で操作してもよい。データ読み込みモジュール２５８及びデータ格納モジュール２５９は、オンチップメモリの容量が不十分である場合に中間的な計算結果を外部メモリへ一時的に「退避」させる、スピル・フィル（ｓｐｉｌｌ−ｆｉｌｌ）として知られるタイプの操作に用いられてもよい。
【００２２】
重み付けメモリ２５５、活性化データメモリ２６０及び蓄積メモリ２６４は、ハードウェアチップ２５０のオンチップメモリの全てのブロックである。ハードウェアチップ構成は、オンチップメモリの各ブロックのバンクの数及び大きさを特定する。各ブロックは、１又は２ポートメモリバンクの組として編成されてよい。各ブロックは、対応する計算モジュール、読み込みモジュール及び格納モジュールにつながる読み取り書き込みポートを有してよい。ハードウェアチップ２５０は、外部メモリインターフェース２５２のようなオンチップメモリＩ／Ｏポートに接続するアービトレーション＆インターコネクトロジックをさらに含んでよい。ハードウェアチップ２５０の読み込及び格納モジュールは、オンチップメモリのメモリバンクへのロックを取得し、読み取り又は書き込みトランザクションの組を実行し、そして、もはや使用しなくなった場合にメモリバンクを解放するよう構成されてよい。このように、２つ又はそれ以上のモジュールは、異なるメモリバンクに並列にアクセスしてよい。
【００２３】
この例示的な実施形態において、ハードウェアチップ２５０は、畳み込みニューラルネットワークの推論を実行するように構成され、それで、各層の部分はタイルであり、ハードウェアチップ２５０は畳み込みモジュール２６２を含む。換言すれば、ハードウェアチップ２５０の少なくとも一つのモジュールは、少なくとも一つの畳み込みモジュールを含む。
【００２４】
畳み込みモジュール２６２は、活性化データメモリ２６０に格納されている入力値又は活性化データ及び重み付けメモリ２５５に格納されている重み値に数学的操作を実行するように構成されている。畳み込みモジュール２６２は、蓄積メモリ２６４に部分和を出力してもよいし、蓄積メモリ２６４に格納されている既存の部分和に蓄積を実行してもよい。畳み込みモジュール２６２は、高さ（ＫＨ）ｘ幅（ＫＷ）のカーネルサイズ、鉛直及び水平ストライド、拡張、パッディングなどのような、数学的操作の異なるパラメータに対する直接のサポートを提供してよい。ハードウェアチップ２５０のいくつかの実施形態において、畳み込みモジュール２６２は、少なくとも一つの専用のＤＷ畳み込みモジュール及び少なくとも一つのＰＷ畳み込みモジュールを含む。ハードウェアチップ２５０の他の実施形態において、畳み込みモジュール２６２は、汎用の畳み込みモジュールを含み、それは、モバイルネットアーキテクチャの逆残余ブロック（Ｉｎｖｅｒｔｅｄ  Ｒｅｓｉｄｕａｌ  Ｂｌｏｃｋｓ）などの、ＤＷ畳み込み及びＰＷ畳み込み層の組み合わせをサポートしてよい。
【００２５】
活性化モジュール２６６は、蓄積メモリ２６４に格納されている値に活性化操作を実行するように構成される。活性化モジュール２６６は、蓄積メモリ２６４から入力値を読み取って、計算結果を活性化データメモリ２６０に格納してよい。活性化モジュール２６６は、ＲｅＬＵ、ＬｅａｋｙＲｅＬＵ、Ｈジグモイド、Ｈ−Ｓｗｉｓｈなどのような活性化関数を提供するため、畳み込みモジュール２６２の数学的操作に続く、スカラ又はベクトル値の足し算、掛け算、割り算、平方根などを含む要素的な算術機能のような計算を実行してよい。活性化モジュール２６６は、ブランチの残余追加、再量子化、固定された窓サイズの組による最大値プーリングや平均値プーリングなどの局所プーリングをさらに実行してよい。
【００２６】
ハードウェアチップ２５０、及びその中の様々なモジュール、で実行される操作のパラメータは、メモリ重み付けメモリ２５５など別個のメモリ、専用メモリに格納され、又は、即時値として命令に埋め込まれてもよい。命令ＤＭＡモジュール２５６は、ハードウェアチップ２５０の様々なモジュールの命令を読み込むように構成されている。命令ＤＭＡモジュール２５６は、ハードウェアチップ２５０の様々なモジュールの命令を外部メモリからラウンドロビン式に読み込んでもよい。ハードウェアチップ２５０の命令インフラストラクチャは、命令を与え、かつ、同期させてよい。ハードウェアチップ２５０の命令インフラストラクチャは、命令ＤＭＡモジュール２５６に加えて、様々なモジュールの各々にエンコードされた命令を搬送するために、先入れ先出し（ＦＩＦＯ）メモリのような、モジュールの挙動を明示的に制御する少なくとも一つの命令キューを含んでもよい。
【００２７】
この実施形態においてハードウェアチップが畳み込みニューラルネットワークの推論を実行するよう構成されているが、他の実施形態は他の種類のニューラルネットワークの推論のハードウェア固有分割を実行してよい。活性化データメモリに取り付けられるデータ読み込みモジュール及びデータ格納モジュールに加えて、ハードウェアチップの他の実施形態は、蓄積メモリに取り付けうる読み込み及び格納モジュールの追加的な対を含んでよい。他の実施形態において、重み付け読み込みモジュールは、活性化モジュールパラメータを読み込むのにさらに用いられてもよい。
【００２８】
図３は、本発明の実施形態による、各層の部分でのニューラルネットワークの推論の実行の模式図を示す。この実施形態において、持続時間及びエネルギー消費の推定を含むいくつかのヒューリスティックに基づいて、畳み込みニューラルネットワークが層のグループに分割されている。各層は、高さ、幅及びチャネル、の３次元のタイルに分配されている。次元の大きさは、層のタイルが前の層からのタイルのサブセットを用いて処理できるように確立されている。ＰＷ畳み込みに対して、チャネル次元の全タイルは、それらの活性化データを処理するために必要とされる。ＤＷ畳み込みに対して、次の層の対応するタイルの活性化データを処理するのに一つのタイルで十分である。
【００２９】
ニューラルネットワークは、他の層のうちの例として順次的な層３０１、３０２、３０３及び３０４を含む。この実施形態で推論の実行をしている間、データ読み込みモジュール３５８は、外部メモリから外部メモリインターフェース３５２を介して入力値又は活性化データを読み取り、そのようなデータを活性化データメモリ３６０上に読み込む。データ格納モジュール３５９は活性化データメモリ３６０から活性化データを読み取り、そのようなデータを外部メモリインターフェース３５２を介して外部メモリ上に格納する。換言すれば、ハードウェアチップに対して命令を生成することは、さらに、ハードウェアチップが外部メモリから各グループの最初の層の対応する部分の活性化データを取得し、各グループの最後の層の対応する部分の数学的操作から得られた活性化データを外部メモリに記録するための命令を生成することを含む。
【００３０】
この実施形態において、層３０１、３０２、３０３及び３０４は単一グループに属しており、それが意味するのは、層３０１、３０２、３０３及び３０４の対応する部分の推論の実行の間に、活性化データは外部メモリから一度だけ読み込まれ、外部メモリに一度だけ格納されるということである。層３０１の高さ及び幅次元のタイル３０１Ａの活性化値を処理するために、十分な入力タイルがオンチップメモリ内に読み込まれなければならない。１ｘ１以外の畳み込み操作のデータ従属性から、次の層のタイルの面積は縮小する。したがって、最後の層を除く全てのタイルは、ＫｘＫ（等しい高さ及び幅）畳み込みカーネルに対して通常（Ｋ−１）／２だけオーバーラップし、それで演算の量が増加するであろう。したがって、ニューラルネットワークの計算グラフは、追加的な演算の量が中間層全体を外部メモリに格納するのに必要とされるメモリトランザクションの数とバランスするように層のグループに分割される。
【００３１】
タイル３０１Ａ及び３０１Ｂの両方の活性化データはタイル３０２Ａの活性化データを処理するのに必要とされるので、層３０１のタイル３０１Ａ及び３０１Ｂの活性化データが活性化データメモリ３６０に読み込まれる。タイル３０１Ａ及び３０１Ｂの活性化データは、層３０２のタイル３０２Ａ及び３０２Ｂの活性化データを与えるために処理され、それは活性化データメモリ３６０上に格納もされる。これは、すでに活性化データメモリ３６０に読み込まれた前の層の活性化データに基づいたタイルの活性化データの次の層の処理を可能にし、得られた活性化データは活性化データメモリにも格納される。
【００３２】
タイル３０２Ａ及び３０２Ｂの活性化データが活性化データメモリ３６０上に一旦読み込まれると、タイル３０１Ａ及び３０１Ｂの活性化データは次の活性化データのために活性化データメモリ３６０上のスペースを解放すべくクリアされてよい。当該処理及び取得（ｙｉｅｌｄｉｎｇ）は、当該グループ内でより深く移動する各層に対して繰り返される。次に、タイル３０２Ａ及び３０２Ｂの活性化データは、層３０３のタイル３０３Ａ及び３０３Ｂの活性化データを与えるために処理され、それは活性化データメモリ３６０上に読み込まれる。タイル３０３Ａ及び３０３Ｂの活性化データはさらに、層３０４のタイル３０４Ａ及び３０４Ｂの活性化データを与えるために処理され、それは活性化データメモリ３６０に読み込まれる。最後に、データ格納モジュール３５９は、タイル３０４Ａ及び３０４Ｂの活性化データを外部メモリインターフェース３５２を介して外部メモリ上に格納する。
【００３３】
この実施形態において、推論の実行は部分又はタイル、グループにも分割された。他の実施形態では、活性化データメモリが層全体に対して活性化データを読み込むに十分に大きい場合などには、各層への分配は必要とされないであろう。
【００３４】
図４は、本発明の実施形態による、図１のＳ１２０のような、層の推論をグループに分割するための操作フローを示す。この操作フローの中の操作は、分割部又はそれらに対応して名付けられたサブセクションにより実行されてよい。図１に記載されているように、計算グラフ及びハードウェアチップ構成が、層の推論をグループに分割するより前に取得される。
【００３５】
Ｓ４２２において、分割部又はそのサブセクションなどの準備部が複数のグループ分割候補を準備し、各グループ分割候補は複数の層の一意の分割を特定する。各グループが連続した層を持たなければならない前提で、グループ分割候補は、各層が属するグループを特定する。例えば、複数のグループ分割候補の各々は、複数の層の均等な分割を特定してよい。他の例として、複数のグループ分割候補の各々は、複数の層を単一層、２層、３層などのグループにランダムに分割することを特定してよい。グループ分割候補は、ニューラルネットワークのいくつかの層だけをも含んでもよく、それによってより細かい分割が解析可能になる。
【００３６】
Ｓ４３０において、シミュレート部は、グループ分割候補の一つに対してハードウェアチップの持続時間及びエネルギー消費の推定を決定すべく、ハードウェアチップによるニューラルネットワークの推論の実行をシミュレートする。反復が進むと、シミュレート部は、複数のグループ分割候補の各々に対して、ハードウェアチップの持続時間及びエネルギー消費の推定を決定すべく、ハードウェアチップによるニューラルネットワークの推論の実行をシミュレートする。
【００３７】
Ｓ４２４において、分割部又はそのサブセクションは、グループ分割候補の全てがシミュレートされたか否かを判断する。もしシミュレートされていない候補が残っていたら、操作フローはＳ４２８に進み、ここで新しいグループ分割候補がシミュレーションのために選択される。もし全てのグループ分割候補がシミュレートされているなら、操作フローはＳ４２６に進む。
【００３８】
Ｓ４２６において、分割部又はそのサブセクションなどの比較部は、複数の層のうちの同じ層の各グループ分割候補の持続時間及びエネルギー消費の推定を比較する。部分的なグループ分割候補が含まれているかもしれないが、公平な比較のため、推定は同じ層の推論実行性をカバーしなければならない。例えば、複数のグループ分割候補は、第１のグループ分割候補として単一層を、第２のグループ分割候補として層の前のグループを、第３のグループ分割候補として当該層の前のグループともに当該単一層を特定してもよい。そのような例において、公平な比較は、（ｉ）第３のグループ分割候補の数学的操作を実行するための持続時間及びエネルギー消費の推定と、（ｉｉ）第１のグループ分割候補及び第２のグループ分割候補の数学的操作を実行するための総持続時間及び総エネルギー消費の推定と、を比較することを含んでよい。この例は、ヒューリスティックアルゴリズムが層を意識したグルーピングを使用するような、層の推論をグループに分割する特定の実施形態に対して有用であろう。アルゴリズムは空のグループから開始して、次に第１の未グループ層がグループに追加される。シミュレート部はそれから、グループの推論、次の未グループ層の推論、及び、次の未グループ層が追加されたグループの推論の持続時間及びエネルギー消費を推定する。もし次の未グループ層が追加されたグループの推論が、グループの推論と次の未グループ層の推論との和よりも効率が良いならば、次の層に対して処理を繰り返す。しかし、次の未グループ層が追加されたグループの推論が、グループの推論と次の未グループ層の推論との和よりも効率が良くないならば、グループは次の未グループ層を含めず、処理は次の未グループ層だけのグループを考慮するように進む。この処理はネットワークの層の全てに対して繰り返される。
【００３９】
この実施形態はハードウェアチップによるニューラルネットワークの推論の実行をシミュレートするが、他の実施形態はハードウェアチップ上で直接ニューラルネットワークの推論を実行してもよい。そのような実施形態はシミュレーション環境を必要としなくてもよいが、全ての異なる候補に対して持続時間及びエネルギー消費を測定することは、シミュレーション環境下よりももっと時間を消費するであろう。
【００４０】
図５は、本発明の実施形態による、図４のＳ４３０のような、ハードウェアチップ上の推論の実行をシミュレートするための操作フローを示す。この操作フローの中の操作はシミュレート部又はそれに対応して名付けられたサブセクションによって実行されてよい。図４に記載されたように、グループ分割候補は推論の実行がシミュレートされる前に準備される。
【００４１】
Ｓ５３２において、生成部は、ハードウェアチップがグループ分割候補に従って推論を実行するための命令を生成する。換言すれば、生成部は、ハードウェアチップが各グループの層内の対応する部分の数学的操作を、層ごとに順次、実行するための命令を生成する。単にシミュレーションのためではあるが、図１のＳ１４０のような、実際のハードウェアチップに対するのと同じ態様で命令を生成してよい。命令生成操作のより詳細は、図７に関して記載される。
【００４２】
Ｓ５３４において、シミュレート部又はそのサブセクションなどの実行部は、ハードウェアチップのシミュレーション上の命令を実行する。これは、トラッキング、記録、又はさもなくば各クロックサイクル内の操作を特定すること、を含んでよい。特定される操作は、他のモジュールの操作と並列して何回も個別のモジュールで実行される、単純できめの細かい操作である。
【００４３】
Ｓ５３５において、シミュレート部又はそのサブセクションなどの和算部は、シミュレーション中のクロックサイクルの和を取る。シミュレーションは実際のハードウェアチップ上の推論よりも大いに速く走るが、ハードウェアチップのクロックサイクルの時間量はハードウェアチップの構成に基づいて決定され得る。例えば、もしハードウェアチップ構成が２ＧＨｚで走るなら、一秒で２０億クロックサイクル継続すると推定され得る。
【００４４】
Ｓ５３７において、シミュレート部又はそのサブセクションなどの割当部は、シミュレーションの各きめの細かい操作へのエネルギー消費を割り当てる。推論の実行は複雑な処理を含み得るが、それらの処理は、これらきめの細かい操作にブレイクダウンされ、それらの各々は、今回のシミュレーション又は同じハードウェアチップ上の同じきめの細かい操作の前のシミュレーションから計測されたエネルギー消費と関連付けられ得る。いくつかの実施形態において、ハードウェアチップの各きめの細かい操作と関連付けられたエネルギー消費は、シミュレーション環境の独立した入力ファイルから供給されてよい。
【００４５】
Ｓ５３８において、和算部は、シミュレーションのきめの細かい操作全てのエネルギー消費の和を取る。換言すれば、ハードウェアチップのエネルギー消費の推定は、各操作に関連付けられた個別のエネルギー消費の和に基づいており、持続時間の推定は、クロックサイクルの数に基づいている。
【００４６】
図６は、本願発明の別の実施形態による、推論のハードウェア固有分割のための操作フローを示す。この操作フローは、特定のハードウェアチップ構成上の実行に対する推論を分割する方法を提供してよい。
【００４７】
Ｓ６１０、Ｓ６２０及びＳ６４０で実行される操作は、図１に関して上記されたＳ１１０、Ｓ１２０及びＳ１４０で実行されるのと実質的に同様の操作である。上記で説明されたように、ハードウェアチップは各層の部分でニューラルネットワークの推論を実行可能である。いくつかの実施形態において、部分、又は、畳み込みニューラルネットワークの場合のタイル、の次元は予め定められている。しかしながら、この実施形態において、推論のハードウェア固有分割のための操作フローは、当該部分の次元を決定する操作を含む。
【００４８】
Ｓ６１２において、分割部又はそのサブセクションなどの決定部は、各層の部分の次元を決定する。いくつかの実施形態において、決定部は、複数の次元仕様候補の各々に対するハードウェアチップの持続時間及びエネルギー消費の推定を決定すべく、ハードウェアチップによりニューラルネットワークの推論の実行がシミュレートされることによって、各層の部分の次元を決定する。そのような実施形態において、各次元仕様候補は、オンチップメモリの容量及びハードウェアチップの並列度に基づいてよい。これらの実施形態のいくつかにおいて、各部分の次元の一つは、ハードウェアチップの並列度によって定義されてよく、他の次元は可変であり得る。一旦次元仕様候補全てがシミュレートされたら、シミュレート部又はそのサブセクションなどの比較部は、各次元仕様候補の持続時間及びエネルギー消費の推定を比較する。そして次元仕様候補の一つは、推論の実行に使用されるよう選択されてよい。この選択は持続時間又はエネルギー消費又は両方のバランスに基づいてよい。
【００４９】
この実施形態はハードウェアチップによるニューラルネットワークの推論の実行をシミュレートするが、他の実施形態は直接ハードウェアチップ上でニューラルネットワークの推論を実行してよい。そのような実施形態はシミュレーション環境を必要としなくてもよいが、持続時間及びエネルギー消費の測定はシミュレーション環境内よりも困難であろう。
【００５０】
図７は、本発明の実施形態による、図１のＳ１４０のような、ハードウェアチップが推論を実行するための命令を生成する操作フローを示す。この操作フローのうちの操作は、生成部又はこれに対応して名付けられたサブセクションによって実行されてよい。図１に記載されているように、ニューラルネットワークの層はグループに分割されている。
【００５１】
Ｓ７４１において、生成部又はそのサブセクションなどの割当部は、ハードウェアチップの各モジュールの各操作をキューに割り当てる。換言すれば、ハードウェアチップに対して命令を生成することは、各操作を複数のキューのうちのあるキューに割り当てることをさらに含む。計算グラフから開始し、各ノードはハードウェアチップの命令設定アーキテクチャ（ＩＳＡ）からの命令を表し、各エッジは層の一つの部分からの仮想バッファ保持データを表す。キューへの割り当て操作のため、仮想バッファの数は無制限である。各仮想バッファは、一意に、かつ、計算グラフの特定の値ひとつに関連づけられている。しかしながら、同じ物理バッファは、スケジュールされた計算グラフのオーバーラップしないライフタイムにわたって複数のエッジに割り当てられてよい。ハードウェアチップ上で計算グラフの命令を実行するために、グループの各入力部分に対する読み込み命令がなければならず、かつ、グループの各出力部分に対する格納命令がなければならない。推論の実行のシミュレーション中に特定される操作と同様に、各キューに割り当てられる操作は、個別のモジュールによって、他のモジュールの操作と並列して何回も実行される、単純できめの細かい操作である。各命令は複数のきめの細かい操作によって実現されてよい。キューは、１よりも多いモジュールによって実行される操作を有してもよい。システム内のあらゆるモジュールはそれ自身の線形の一連の命令を実行し、それは操作にブレイクダウンされ得る。推論の実行は、並列して走る順次的な処理のセットと考えられてよい。
【００５２】
換言すれば、ハードウェアチップに対して命令を生成することは、各キューでの操作の実行を順序付けることをさらに含む。各並列処理は複数メモリから読み取ってもよく、及び／又は、書き込んでもよい。処理の各命令は、多くのクロックサイクル中に多くのデータ要素の操作をもたらす。したがって、操作の正常な順序は、操作の従属性が満たされかつ必要なリソースが利用可能な時点で各操作が実行されることを確実にするためにクリティカルであろう。順序付け部は、実行時間を最小化、及び、データのポテンシャル退避の数を最小化するための順序を最適にしてもよい。
【００５３】
Ｓ７４４において、生成部又はそのサブセクションなどの割振り部は、データに対してハードウェアチップのオンチップメモリの位置を割り振る。換言すれば、ハードウェアチップに対して命令を生成することは、ニューラルネットワークの推論を実行するためのデータにオンチップメモリ内の位置を割り振ることをさらに含む。この実施形態において、命令を生成することは、ハードウェアチップの少なくとも一つのモジュールが外部メモリからのデータを割り振られた位置へ読み込むことを実行する命令を生成することを含んでもよい。そうするにあたり、ハードウェアチップにより推論が実行される前に命令を生成する目的で、割振り部は、仮想バッファをハードウェアチップのオンチップメモリの物理メモリ位置に置き換えてよい。
【００５４】
Ｓ７４５において、生成部又はそのサブセクションは、割り振りを必要とするデータの全てが利用可能なメモリに割り振り可能であるか否かを判断する。換言すれば、生成部は、各クロックサイクルに対して全ての必要なデータを保持する十分なメモリがあるか否かを判断する。もし１又は複数のクロックサイクルに対して必要なデータの全てに対して十分なメモリがないならば、操作フローはＳ７４６へ進み、ここでデータの１又は複数の退避が導入される。もし全てのクロックサイクルに対して必要なデータの全てに対して十分なメモリがあるならば、操作フローはＳ７４７へ進む。
【００５５】
Ｓ７４６において、生成部又はそのサブセクションなどの退避部は、外部メモリへのデータの退避を操作に導入する。層をグループに分割するように、各層の部分の次元は設定されるが、推論の実行は、全てのエッジの割り当てを実行するのに十分な物理メモリ位置がないときなど、特定のメモリが存在しているよりも多くの格納スペースを必要とするときに出くわすことがあろう。その場合に、オンチップメモリに現在格納されているデータのいくつか又は全てが一時的に外部メモリ上にオフロードされ、もっとすぐ必要とされるデータの格納のためにオンチップメモリがクリアされ得る。クリアされたデータは、それから、そのデータがさらなる処理のためにその後にもう一度必要になったときに、オンチップメモリ上に読み戻されるであろう。退避された値は、外部メモリへのデータの退避を最小化しようとして、すなわち、外部メモリアクセスの数を減少しようとして、選択される。一旦、退避が導入されると、それらは操作の順序の中にスケジュールされなければならず、それで、データの新しい退避が導入されるときはいつでも操作フローはＳ７４２に戻る。換言すれば、ハードウェアチップに対して命令を生成することは、ニューラルネットワークの推論を実行するために、外部メモリへデータの退避をスケジューリングすることをさらに含む。
【００５６】
Ｓ７４７において、生成部又はそのサブセクションなどの注釈部は、同期フラグに注釈を付す。換言すれば、ハードウェアチップに対して命令を生成することは、同期フラグに従属性のある操作の相互順序を保持する注釈を付すことをさらに含む。処理の各コンシューマー・プロデューサー対は、リードアフターライト（ＲＡＷ）及びライトアフターリード（ＷＡＲ）従属性同期に対するセマフォ／トークン・キューの対を有してよい。同じメモリを介して通信するモジュールのいかなるコンシューマー・プロデューサー対に対しても、ＲＡＷ及びＷＡＲに対するセマフォ／トークン・キューの各対の従属性がトラッキングされてよい。さらに、各命令は、特定の処理に対応するセマフォを増減するフラグのセットを有してよい。したがって、いくつかの実施形態において、タスクレベルの並列性を維持しつつデータハザードを避けるため、明示的、コンパイラガイドトークンベース同期機構が使用されてよい。
【００５７】
Ｓ ７４９において、生成部又はそのサブセクションなどの変換部は、命令を２進表現に変換する。換言すれば、ハードウェアチップに対する命令を生成することは、命令を２進表現に変換することをさらに含む。２進表現はハードウェアチップ上で走らせるのに適したフォーマットである。
【００５８】
図８は、本発明の実施形態による、ニューラルネットワーク推論を実行可能なマルチコアハードウェアチップ８５０の例示的な構成を示す。この実施形態において、ハードウェアチップ構成はさらに複数のコア８５１を含み、数学的操作を実行する少なくとも一つのモジュール及びオンチップメモリは複数のコアのうちに分配される。ハードウェアチップ構成はさらに、各コアがコア間通信のために構成された少なくとも一つの送信機ブロック８６７及び少なくとも一つの受信機ブロック８６８を含むことを示す。
【００５９】
マルチコアハードウェアチップ８５０は４つのコア８５１を含み、それらの各々は図２に関して上記したハードウェアチップ２５０と実質的に同様のものであり、同じモジュール及びメモリの全てを含むが、送信機ブロック８６７及び受信機ブロック８６８の、二つの追加的なブロックも有する。コア８５１の送信機ブロック８６７及び受信機ブロック８６８は１又は複数の書き込チャネル８６９を介して互いに連結されており、他のコアのメモリに書き込みアクセス可能であり、かつ、コアの読み込みモジュールが他のコアのメモリへ読み取りアクセスすることを可能としている。いくつかの実施形態において、それを介して開始側が他のコアのメモリ内部に最初にロックを取得しなければならず、次にデータの「バースト」伝送を実行しなければならないところの、回路スイッチ調停コア内相互接続を介して、データ交換が促進されてよい。他の実施形態はコア間通信を実行する他の構造を含んでよい。
【００６０】
ハードウェアチップに対して命令を生成することは、コア間に命令を分配することをさらに含む。ニューラルネットワークの推論を実行するのにマルチコアハードウェアチップ８５０を利用することによって、より多くの操作が並列に実行され得、持続時間がかなり減少するとともに、コアの間のデータ伝送の形での追加的なエネルギー消費をほとんど必要としない。例えば、マルチコアハードウェアチップ８５０は４つのコアを含むので、推論の実行の持続時間が約７５％減少すると期待することは不合理ではないであろう。マルチコアハードウェアチップ８５０の利用により、単一コアに対する電力密度の限界を超えて性能がさらにスケールアップ可能であろう。ハードウェアチップに対する命令が生成されるとき、コア間データ伝送のため追加的な命令が必要であるかもしれないが、独立した各コアに対する命令の生成は上記したものと実質的に同じままである。
【００６１】
図９は、本発明の実施形態による、ニューラルネットワーク推論を実行可能なマルチチップハードウェアの例示的な構成を示す。この実施形態において、ハードウェアチップ構成は、マルチチップハードウェア構成のハードウェアチップ９５０の第２のインスタンスと通信するよう構成された少なくとも一つの送信機ブロック９６７及び少なくとも一つの受信機ブロック９６８をさらに含む。
【００６２】
この実施形態のマルチチップハードウェアは４つのハードウェアチップ９５０を含み、それらの各々は、図８に関して上記した各コア８５１と実質的に同様の構成であり、同じモジュール及びメモリを全て含む。さらに、送信機ブロック９６７、受信機ブロック９６８及び書き込みチャネル９６９の構造及び機能は、図８の送信機ブロック８６７、受信機ブロック８６８及び書き込みチャネル８６９のそれと実質的に同様のものである。いくつかの実施形態において、各ハードウェアチップ９５０は４つの送信機ブロック及び４つの受信機ブロックを含み、それにより網目状又は２Ｄトーラストポロジーで接続されたハードウェアチップ９５０で任意サイズのマルチップ構成の形成を可能にしている。そのような実施形態において、そのような送信機及び受信機ブロックの実装のために、マルチチップ構成を形成するためにＦＰＧＡ及びＡＳＩＣでしばしば使用されるシアライザー／デシリアライザー（ＳｅｒＤｅｓ）インターフェースのような高スピードシリアルインターフェースが使用されてよい。
【００６３】
この実施形態において、各ハードウェアチップは同一である。しかしながら、他の実施形態において、マルチチップハードウェア構成のハードウェアチップは、異なる操作を実行するためのモジュールや異なる大きさのメモリなど、異なるコンポーネントを有してよい。これは異なるニューラルネットワークの推論を実行するのにチップが用られるからであってよい。異なる構成のチップを含むマルチチップハードウェア構成は、よりよいスケーラビリティにとって、及び、チップが複数のニューラルネットワークの推論を並列で実行するときに、有益であろう。さらなる実施形態において、マルチチップハードウェアの各ハードウェアチップは、図８のマルチコアハードウェアチップ８５０のような、マルチコアハードウェアチップでよい。
【００６４】
図１０Ａは、本発明の実施形態による、ＤＷ畳み込みモジュール１０６２の例示的な構成を示す。ＤＷ畳み込みモジュール１０６２は、キュー１０６２Ｑ、主シーケンサー１０６２ＭＳ、窓シーケンサー１０６２ＷＳ、活性化フィーダー１０６２ＡＦ、重み付けフィーダー１０６２ＷＦ、パイプラインコントローラー１０６２ＰＣ、畳み込みパイプライン１０６２ＣＰ、外部蓄積ロジック１０６２Ａ及び蓄積メモリインターフェース１０６２ＡＩを含む。
【００６５】
キュー１０６２Ｑは命令を受信及び送信する。キュー１０６２Ｑは、図２の命令ＤＭＡモジュール２５６などの命令ＤＭＡモジュールから命令を受信し、命令を主シーケンサー１０６２ＭＳに送信する。キュー１０６２Ｑは、ＦＩＦＯメモリ又は命令をキューするのに適したいかなる他のメモリであってよい。
【００６６】
主シーケンサー１０６２ＭＳは畳み込みのための制御パラメータをシーケンスする。主シーケンサー１０６２ＭＳは、キュー１０６２Ｑから命令を受信し、窓シーケンサー１０６２ＷＳに命令を出力してよい。主シーケンサー１０６２ＭＳは、ＫＨｘＫＷの畳み込みを１ｘ＜窓＞の大きさのより小さな畳み込みに分け、カーネル内の入力領域の順序に従って活性化データ及び重み値に対する命令を準備する。ここで＜窓＞はラインバッファ長さを決定するアーキテクチャーパラメータを指す。
【００６７】
窓シーケンサー１０６２ＷＳは、一つの１ｘ＜窓＞畳み込みのための制御パラメータをシーケンスする。窓シーケンサー１０６２ＷＳは、主シーケンサー１０６２ＭＳから命令を受信してよく、かつ、カーネル内の入力領域の順序に従った活性化データのデータシーケンスを活性化フィーダー１０６２ＡＦに、及び、カーネル内の入力領域の順序に従った重み値のデータシーケンスを重み付けフィーダー１０６２ＷＦに出力してよい。
【００６８】
活性化フィーダー１０６２ＡＦは、図２の活性化データメモリ２６０などの活性化データメモリからアクセスされた活性化データを、窓シーケンサー１０６２Ｓからのデータシーケンスに示された活性化データに従って、データメモリインターフェース１０６２ＤＩを介して畳み込みパイプライン１０６２ＣＰに与える。活性化フィーダー１０６２ＡＦは、活性化データメモリから、１ｘ＜窓＞計算に十分な活性化データを畳み込みパイプライン１０６２ＣＰのラインバッファ内へ読み出してよい。
【００６９】
重み付けフィーダー１０６２ＷＦは、図２の重み付けメモリ２５５などの重み付けメモリからアクセスされた重み値を、窓シーケンサー１０６２Ｓからのデータシーケンスに示された重み値に従って、重み付けメモリインターフェース１０６２ＷＩを介して畳み込みパイプライン１０６２ＣＰへ前もって読み込む。重み付けフィーダー１０６２ＷＦは、重み付けメモリから、１ｘ＜窓＞計算に十分な重み値を畳み込みパイプライン１０６２ＣＰの重み付けバッファ内へ読み出してよい。
【００７０】
パイプラインコントローラー１０６２ＰＣは畳み込みパイプライン１０６２ＣＰのデータ伝送操作を制御する。一旦、現在の活性化バッファコンテンツが処理されたら、パイプラインコントローラー１０６２ＰＣは、ラインバッファから畳み込みパイプライン１０６２ＣＰの活性化バッファへのデータのコピーを開始してよい。パイプラインコントローラー１０６２ＰＣは、畳み込みパイプライン１０６２ＣＰの各チャネルパイプライン１０６２ＣＨで実行される畳み込み演算を制御してよく、ここで、各チャネルパイプライン１０６２ＣＨはＤＷ畳み込み層への入力の一つのチャネルで操作する。
【００７１】
畳み込みパイプライン１０６２ＣＰは、活性化フィーダー１０６２ＡＦから与えられた活性化データ及び重み付けフィーダー１０６２ＷＦから前もって読み込まれた重み値に数学的操作を実行する。畳み込みパイプライン１０６２ＣＰはチャネルパイプライン１０６２ＣＨへ分割され、各チャネルパイプライン１０６２ＣＨは一つのチャネルに対して数学的操作を実行する。活性化フィーダー１０６２ＡＦ、重み付けフィーダー１０６２ＷＦ及びパイプラインコントローラー１０６２ＰＣと組み合わせて、畳み込みパイプラインは畳み込み演算を論理的に実行する。
【００７２】
外部蓄積ロジック１０６２Ａは畳み込みパイプライン１０６２ＣＰからデータを受信し、蓄積メモリインターフェース１０６２ＡＩを介して図２の蓄積メモリ２６４などの蓄積メモリにそのデータを格納する。蓄積ロジック１０６２Ａは、各チャネルパイプライン１０６２ＣＨに対する加算器１０６２Ｐを含む。蓄積ロジック１０６２Ａは、蓄積メモリのコンテンツと１ｘ＜窓＞畳み込みの結果とのＰＷな和算のために用いられてよい。
【００７３】
この実施形態において、３つの窓パイプラインで典型的に示された３つのチャネルがある。しかしながら、他の実施形態は異なる数のチャネルを有してよい。あり得るものの、この実施形態は主に簡易性のため３つのチャネルを示した。多くの実施形態は、現実的なアプリケーションに対応すべく少なくとも１６チャネルを含むだろう。
【００７４】
図１０Ｂは、本発明の実施形態による、ＤＷ畳み込みモジュールに対するチャネルパイプライン１０６２ＣＨの例示的な構成を示す。チャネルパイプライン１０６２ＣＨは、ラインバッファ１０６２ＬＢ、活性化バッファ１０６２ＡＢ、重み付けバッファ１０６２ＷＢ、複数の乗算器１０６２Ｘ、複数の加算器１０６２Ｐ、遅延レジスタ１０６２ＤＲ及び内部蓄積レジスタ１０６２ＩＡを含む。
【００７５】
ラインバッファ１０６２ＬＢは、活性化フィーダー１０６２ＡＦから受信した活性化データを格納する。ラインバッファ１０６２ＬＢは、一つのピクセルサイクルで活性化フィーダー１０６２ＡＦによって読み取られるごとに活性化データを格納するシフトレジスタを含んでよい。
【００７６】
活性化バッファ１０６２ＡＢは、ラインバッファ１０６２ＬＢから受信した活性化データを格納する。活性化バッファ１０６２ＡＢは、現行の畳み込み演算が適用される活性化データを格納する１セットのレジスタを含んでよい。
【００７７】
重み付けバッファ１０６２ＷＢは、重み付けフィーダー１０６２ＷＦから受信した重み値を格納する。重み付けバッファ１０６２ＷＢは、現行の畳み込み演算が適用される重み値を格納するシフトレジスタを含んでよい。
【００７８】
乗算器１０６２Ｘは、活性化バッファ１０６２ＡＢからの活性化データに重み付けバッファ１０６２ＷＢからの重み値を掛け合わせる。この実施形態で乗算器１０６２Ｘが３つあり、これは畳み込みカーネルの幅又は高さ次元の並列度が３であることを意味する。加算器１０６２Ｐは、集合的に加算木を形成し、それで活性化データと重み値との積をまとめて加算する。この処理の間、遅延レジスタ１０６２ＤＲは、加算木の一部とみなされるものでもあるが、加算木をバランスする。内部蓄積レジスタ１０６２ＩＡは、部分的な和を格納することにより加算を助ける。例えば、内部蓄積レジスタ１０６２ＩＡは、畳み込みフィルタの幅又は高さと同様に、バッファの窓の数、この実施形態では６つである、が並列度、ここでは３つ、よりも多いときに、部分的な和を蓄積するのに用いられてよい。
【００７９】
一旦、積が全て総和としてまとめて加算されると、総和は蓄積ロジック１０６２Ａに出力され、そして蓄積メモリインターフェース１０６２ＡＩを介して、図２の蓄積メモリ２６４などの蓄積メモリにそのデータが格納される。
【００８０】
図１１は、本発明の実施形態による、ＰＷ畳み込みモジュール１１６２の例示的な構成を示す。ＰＷ畳み込みモジュール１１６２は、キュー１１６２Ｑ、主シーケンサー１１６２Ｓ、重み付けメモリインターフェース１１６２ＷＩ、重み付けフィーダー１１６２ＷＦ、活性化フィーダー１１６２ＡＦ、データメモリインターフェース１１６２ＤＩ、シストリックアレイ１１６２Ｓ、蓄積ロジック１１６２Ａ及び蓄積メモリインターフェース１１６２ＡＩを含む。
【００８１】
キュー１１６２Ｑは、命令を受信及び送信する。キュー１１６２Ｑは、図２の命令ＤＭＡモジュール２５６のなどの命令ＤＭＡモジュールから命令を受信し、主シーケンサー１１６２Ｓにその命令を送信してよい。キュー１１６２Ｑは、ＦＩＦＯメモリ又は命令をキューイングするのに適した他のいかなるメモリであってよい。
【００８２】
主シーケンサー１１６２Ｓは畳み込みのための制御パラメータをシーケンスする。主シーケンサー１１６２Ｓは、キュー１１６２Ｑから命令を受信し、制御シーケンスを重み付けフィーダー１１６２ＷＦ及び活性化フィーダー１１６２ＡＦへ、各々キューを介して出力してよい。この実施形態において、主シーケンサー１１６２ＳはＫＨｘＫＷ畳み込みを一連の１ｘ１畳み込みに分け、それらが制御パラメータとして重み付けフィーダー１１６２ＷＦ及び活性化フィーダー１１６２ＡＦに与えられる。
【００８３】
重み付けフィーダー１１６２ＷＦは、主シーケンサー１１６２Ｓからの制御パラメータに示された活性化データに従って、図２の重み付けメモリ２５５などの重み付けメモリからアクセスされた重み値を、重み付けメモリインターフェース１１６２ＷＩを介してシストリックアレイ１１６２ＳＡに前もって読み込む。
【００８４】
活性化フィーダー１１６２ＡＦは、主シーケンサー１１６２Ｓからのデータシーケンスに示された活性化データに従って、図２の活性化データメモリ２６０などの活性化データメモリからアクセスされた活性化データを、データメモリインターフェース１１６２ＤＩを介してシストリックアレイ１１６２ＳＡに与える。
【００８５】
シストリックアレイ１１６２ＳＡは複数のＭＡＣ要素１１６２Ｍを含む。各ＭＡＣ要素１１６２Ｍは、重み付けフィーダー１１６２ＷＦからの重み値とともに計算開始前に、前もって読み込まれ、そして活性化フィーダー１１６２ＡＦからの活性化値を受信する。計算と重み値を前もって読み込むこととのオーバーラップを可能にすべく、マルチ重み付けバッファが用いられてよい。前のＭＡＣ要素１１６２Ｍから出力された活性化値と重み付けとの積が次のＭＡＣ要素１１６２Ｍに入力されるように、ＭＡＣ要素１１６２Ｍはアレイ状に配置されている。この実施形態において、あらゆるサイクルに対し、各ＭＡＣ要素１１６２Ｍは、前もって読み込まれた重み値１１６２Ｗで乗算された自身の左に隣接するＭＡＣ要素１１６２Ｍから出力された値であって、その積が自身の上に隣接するＭＡＣ要素１１６２Ｍから出力された値に加算された値、に等しい蓄積値を出力する。最下行のＭＡＣ要素１１６２Ｍは、それらの積を蓄積ロジック１１６２Ａに出力する。
【００８６】
蓄積ロジック１１６２Ａは、シストリックアレイ１１６２ＳＡから積を受信し、その積を、図２の蓄積メモリ２６４などの蓄積メモリに格納する。この実施形態において、主シーケンサー１１６２Ｓで必要とされる蓄積が書き込まれるべきメモリ位置の古い値を読み取るならば、蓄積ロジック１１６２Ａはそれを和によって新しい値に上書きするであろう。さもなくば、蓄積ロジック１１６２Ａは新しい値をそのまま書き込む。
【００８７】
ＰＷ畳み込みモジュール１１６２は、単一のＫＨｘＫＷ畳み込みを複数のＫＨｘＫＷ  １ｘ１畳み込みに分けることによってＰＷ畳み込みを実行するのに有用であろう。例えば、図２の蓄積メモリ２６４などの蓄積メモリのある領域に、４つの異なる１ｘ１畳み込みに対応して、２ｘ２畳み込みが代入されてよい。ＰＷ畳み込みモジュール１１６２は、各１ｘ１畳み込みを、ＭＡＣ要素の活性化値の行列とＭＡＣ要素の重み値の行列とのドット積として計算し、そしてその１ｘ１畳み込みの結果の和を取ってよい。
【００８８】
図１２は、本発明の実施形態による、推論のハードウェア固有分割のためのハードウェアの例示的な構成を示す。例示的ハードウェア構成は、装置１２９０を含み、それは、ネットワーク１２９８と通信するとともに、推論環境１２９６と相互作用する。装置１２９０は、業務用アプリケーションを実行し、それを使用するクライアントコンピューターをホストするサーバコンピュータ又はメインフレームコンピュータなどのホストコンピュータであってよく、その場合の装置１２９０は推論環境１２９６に直接接続されていなくてもよく、ネットワーク１２９８を介して端末デバイスを介して接続される。装置１２９０は、２つ又はそれ以上のコンピュータを含むコンピュータシステムであってよい。装置１２９０は、装置１２９０のユーザのためアプリケーションを実行するパーソナルコンピュータであってよい。
【００８９】
装置１２９０は、論理部１２７０、格納部１２８０、通信インターフェース１２９２及び入出力コントローラ１２９４を含む。論理部１２７０は、様々な部分の操作をプロセッサ又はプログラマブル回路に実行させるためにプロセッサ又はプログラマブル回路で実行可能なプログラム命令を集合的に格納している１又は複数のコンピュータ可読記憶媒体を含むコンピュータプログラムプロダクトであってよい。論理部１２７０は、あるいは、アナログもしくはデジタルプログラマブル回路、又はそれらのいずれかの組み合わせであり得る。論理部１２７０は、通信を介して相互作用する、物理的に切り離された記憶装置又は回路から構成され得る。格納部１２８０は、本書のプロセスの実行中に論理部１２７０がアクセスするための実行不能データを格納することができる不揮発性コンピュータ可読媒体であり得る。通信インターフェース１２９２は、格納部１２８０等の記録媒体に設けられた送信バッファ領域に格納され得る送信データを読み取り、読み取った送信データをネットワーク１２９８へ送信する、又はネットワーク１２９８から受信した受信データを、記録媒体に設けられた受信バッファ領域に書き込む。入出力コントローラ１２９４は、推論環境１２９６などの様々な入出力ユニットに、パラレルポート、シリアルポート、キーボードポート、マウスポート、モニターポート、及び、コマンドを受け入れたり情報を表示したりするそのようなもので接続する。推論環境１２９６は図２のハードウェアチップ２５０などニューラルネットワーク推論を実行できるハードウェアチップであってよく、又は、スマートフォンやスマートカー等など、それらもメモリと通信するハードウェアチップを含むような、プロセッサ及びメモリを有するコンピュータ又はそれと同様のデバイスであってよい。
【００９０】
論理部１２７０は、取得部１２７２、分割部１２７４及び生成部１２７７を含み、分割部１２７４はシミュレート部１２７５を含む。格納部１２８０は、計算グラフ１２８２、ハードウェアチップ構成１２８４、候補１２８６、シミュレーション環境１２８７及び命令１２８９を含む。
【００９１】
取得部１２７２は、推論のハードウェア固有分割に対する情報を取得する論理部１２７０の一部である。例えば、取得部１２７２は、計算グラフ及びハードウェアチップ構成を構成してよい。取得部１２７２は、取得された情報を計算グラフ１２８２及びハードウェアチップ構成１２８４として格納部１２８０に格納してよい。取得部１２７２は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【００９２】
分割部１２７４は、推論のハードウェア固有分割のための推論を分割する論理部１２７０の一部である。例えば、分割部１２７４は、ニューラルネットワークの複数の層の推論を複数のグループに分割するよう構成されてよく、各グループはハードウェアチップによってニューラルネットワークの推論を実行するための持続時間及びエネルギー消費の推定に基づいた数の順次的な層を含む。分割中に、分割部１２７４は計算グラフ１２８２、ハードウェアチップ構成１２８４及び候補１２８６にアクセスしてよい。分割部１２７４は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【００９３】
シミュレート部１２７５は、特定のハードウェアチップによるニューラルネットワークの推論の実行をシミュレートする論理部１２７０の一部である。例えば、シミュレート部１２７５は、複数のグループ分割候補の各々に対するハードウェアチップの持続時間及びエネルギー消費の推定を決定するべく当該ハードウェアチップによるニューラルネットワークの推論の実行をシミュレートするよう構成されてよい。シミュレート中、シミュレート部１２７５は、計算グラフ１２８２、ハードウェアチップ構成１２８４、候補１２８６、シミュレーション環境１２８７及び命令１２８９にアクセスしてよい。シミュレート部１２７５は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【００９４】
生成部１２７７は、推論のハードウェア固有分割ための命令を生成する論理部１２７０の一部である。例えば、生成部１２７７は、ハードウェアチップが複数のグループのニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成するよう構成されてよい。命令はシミュレート部１２７５によってなどの、シミュレーションのために用いられてよく、又は、ハードウェアチップに直接用いられてよい。命令の生成中、生成部１２７７は、計算グラフ１２８２、ハードウェアチップ構成１２８４、候補１２８６及び命令１２８９にアクセスしてよい。生成部１２７７は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【００９５】
他の実施形態において、装置は、ここでの処理を実行するために論理的機能を処理することができるいかなる他のデバイスであってよい。装置は、入力、出力及び全ての情報が直接接続された環境において、ネットワークに接続される必要はなくてよい。論理部及び記憶部は完全に切り離された装置である必要はなく、１又は複数のコンピュータ可読媒体を共有し得る。例えば、記憶部は、論理セクションによってアクセスされる、コンピュータが実行可能な命令及びデータの両方を記憶するハードドライブであってよく、論理セクションは、中央処理装置（ＣＰＵ）及びランダムアクセスメモリ（ＲＡＭ）の組み合わせであってよく、論理セクションでは、本書のプロセスの実行中にＣＰＵによって実行されるために、コンピュータが実行可能な命令が全体的に又は部分的に複製され得る。
【００９６】
装置がコンピュータである実施形態において、当該コンピュータにインストールされるプログラムは、当該コンピュータに、本発明の実施形態の装置又はそれらの１又は複数のセクション（モジュール、コンポーネント、要素などを含む）として機能させ、又は、それらに関連付けられた操作を実行させ、及び／又は、当該コンピュータに本発明の実施形態の処理又はそれらのステップを実行させ得る。上記プログラムはプロセッサによって実行され、コンピュータに、本書に記載のフロー図及びブロック図のブロックの一部又は全てに関連付けられた特定の操作を実行させ得る。
【００９７】
本発明の様々な実施形態は、ブロックが（１）操作が実行されるプロセスのステップ、又は（２）操作を実行する役割を果たす装置のセクションを表し得るフロー図及びブロック図を参照して、説明することができる。あるステップ及びセクションは、専用回路、コンピュータ可読媒体上に記憶されたコンピュータ可読命令が供給されているプログラマブル回路、及び／又はコンピュータ可読媒体上に記憶されたコンピュータ可読命令が供給されているプロセッサによって実装され得る。専用回路は、デジタル及び／又はアナログハードウェア回路を含んでいてよく、集積回路（ＩＣ）及び／又は個別の回路を含み得る。プログラマブル回路は、論理ＡＮＤ、ＯＲ、ＸＯＲ、ＮＡＮＤ、ＮＯＲ、及び他の論理演算、フリップ−フロップ、レジスタ、メモリ素子等、例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブル論理アレイ（ＰＬＡ）等などを含む再構成可能なハードウェア回路を含み得る。
【００９８】
本発明は、システム、方法、及び／又は、コンピュータプログラムプロダクトであり得る。コンピュータプログラム製品は、プロセッサに本発明の態様を実現させるためのコンピュータ可読プログラム命令を有する（１又は複数の）コンピュータ可読記憶媒体を含んでよい。
【００９９】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持及び保存できる有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、ただしこれに限定されないが、電気的格納デバイス、磁気的格納デバイス、光学的格納デバイス、電磁気的格納デバイス、半導体格納デバイス、又は、それらの任意の好適な組み合わせであってよい。コンピュータ可読記憶媒体のより詳細な例の非限定的リストは以下を含む：ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、消去可能プログミング可能リードオンリメモリ（ＥＰＲＯＭ又はフラッシュメモリ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）ポータブルコンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、デジタルバーサタイルディスク（ＤＶＤ）、メモリスティック、フロッピディスク、パンチカードや、その上に記録された命令を有する溝内の突起構造などの機械的に暗号化されたデバイス、それらの任意の好適な組み合わせ。コンピュータ可読記憶媒体は、ここで用いられる場合において、ラジオ波や他の自由に伝搬する電磁波、導波管や他の伝送媒体を介して伝搬する電磁波（例えば光ファイバケーブルを透過する光パルス）、又は、電線を介して伝送される電気信号、などの一時的な信号それ自体と解釈されるべきでない。
【０１００】
ここで記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から対応する計算・処理デバイス又は外部コンピュータ若しくは外部格納デバイスへ、例えばインターネット、ローカルエリアネットワーク、ワイドエリアネットワーク及び／又は無線ネットワークなどのネットワークを介して、ダウンロードされ得る。ネットワークは、銅送信ケーブル、光送信ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ及び／又はエッジサーバーを備えてよい。各計算・処理デバイスのネットワークアダプターカード又はネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、各々の計算・処理デバイス内のコンピュータ可読記憶媒体に格納するためのコンピュータ可読プログラム命令を送る。
【０１０１】
本発明の操作を遂行するコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャー（ＩＳＡ）命令、機械的命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のオブジェクト指向プログラミング言語、及び、"Ｃ"プログラミング言語や同様のプログラミング言語など従来の手続きプログラミング言語を含む、１又は複数ののプログラミング言語のいずれかの組み合わせで書かれたソースコード又はオブジェクトコードのいずれかであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全て実行され得るか、スタンドアロンのソフトウェアパッケージとして部分的にユーザのコンピュータ上で実行され得るか、部分的にユーザのコンピュータ上で、部分的にリモートコンピュータ上で実行され得るか、又は、リモートコンピュータ又はサーバ上で全て実行され得る。後者のシナリオにおいて、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）又はワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通してユーザのコンピュータに接続されてもよく、又は外部コンピュータ（例えばインターネットサービスプロバイダを用いてインターネットを通して）接続が行われてもよい。いくつかの実施形態において、例えば、プログミング可能論理回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）又はプログラマブル論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するため、電子回路を適合させるコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行してよい。
【０１０２】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。その様な変更又は改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【０１０３】
特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における操作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、及び図面中の操作フローに関して、便宜上「まず、」、「次に、」等のフレーズを用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【要約】      （修正有）【課題】効率的なニューラルネットワーク推論システムを提供する。【解決手段】推論において、ニューラルネットワークアクセラレータのハードウェア固有分割は、計算グラフ及びハードウェアチップ構成を取得することを含む操作によって実行される。操作はさらに、複数の層の推論を複数のグループに分割することを含む。各グループは、各グループの層の対応する部分の活性化データに数学的操作を、層ごとに順次、実行することによりニューラルネットワークの推論を実行するための、ハードウェアチップによる少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む。操作はさらに、ハードウェアチップが複数のグループのニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成することを含む。【選択図】図１【図１】
0006834097.tif 000002
【図２】
0006834097.tif 000003
【図３】
0006834097.tif 000004
【図４】
0006834097.tif 000005
【図５】
0006834097.tif 000006
【図６】
0006834097.tif 000007
【図７】
0006834097.tif 000008
【図８】
0006834097.tif 000009
【図９】
0006834097.tif 000010
【図１０Ａ】
0006834097.tif 000011
【図１０Ｂ】
0006834097.tif 000012
【図１１】
0006834097.tif 000013
【図１２】
0006834097.tif 000014