【解決手段】推論において、ニューラルネットワークアクセラレータのハードウェア固有分割は、計算グラフ及びハードウェアチップ構成を取得することを含む操作によって実行される。操作はさらに、複数の層の推論を複数のグループに分割することを含む。各グループは、各グループの層の対応する部分の活性化データに数学的操作を、層ごとに順次、実行することによりニューラルネットワークの推論を実行するための、ハードウェアチップによる少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む。操作はさらに、ハードウェアチップが複数のグループのニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成することを含む。
複数の次元仕様候補の各々に対して前記ハードウェアチップの少なくとも持続時間又はエネルギー消費の前記推定を決定するべく、前記ハードウェアチップによる前記ニューラルネットワークの推論の実行をシミュレートすることと、
各次元仕様候補の少なくとも持続時間又はエネルギー消費の前記推定を比較することと
によって、各層の前記部分の次元を決定することをさらに備え、
各次元仕様候補は前記オンチップメモリの容量及び前記ハードウェアチップの並列度に基づいている請求項1から5のいずれか1項に記載のコンピュータプログラム。
前記少なくとも一つの畳み込みモジュールは、少なくとも一つの専用のDW(depth−wise)畳み込みモジュール及び少なくとも一つのPW(point−wise)畳み込みモジュールを含む請求項7に記載に記載のコンピュータプログラム。
前記少なくとも一つのモジュールは、活性化操作を実行するための少なくとも一つのモジュールと、前記活性化データを前記外部メモリから前記オンチップメモリ上に読み込むための少なくとも一つのモジュールと、活性化データを前記オンチップメモリから前記外部メモリへ格納するための少なくとも一つのモジュールと、前記畳み込みニューラルネットワークの重み付けを前記外部メモリから前記オンチップメモリへ読み込むための少なくとも一つのモジュールとをさらに含む請求項7又は8に記載のコンピュータプログラム。
前記命令を生成することは、前記ハードウェアチップの前記少なくとも一つのモジュールがデータを前記外部メモリから前記割り振られた位置への読み込みを実行するための命令を生成することを含む請求項12に記載のコンピュータプログラム。
前記ハードウェアチップに対して命令を生成することは、従属性のある操作の相互の順序を保持するために注釈を付した同期フラグをさらに含む請求項1から13のいずれか1項に記載のコンピュータプログラム。
前記ハードウェアチップに対する命令を生成することは、命令を2進表現に変換することをさらに含む 請求項1から14のいずれか1項に記載のコンピュータプログラム。
前記ハードウェアチップは、複数のコア、前記数学的操作を実行するための前記少なくとも一つのモジュール及び前記複数のコア間に分配された前記オンチップメモリをさらに含み、
各コアは、コア間通信のため構成された少なくとも一つの送信機ブロック及び少なくとも一つの受信機ブロックを含み、
前記ハードウェアチップに対して命令を生成することは、前記コアに命令を分配することをさらに含む請求項1から15のいずれか1項に記載のコンピュータプログラム。
前記ハードウェアチップ構成は、マルチチップ構成の前記ハードウェアチップの第2のインスタンスと通信するよう構成された少なくとも一つの送信機ブロック及び少なくとも一つの受信機ブロックをさらに含む請求項1から16のいずれか1項に記載のコンピュータプログラム。
【発明を実施するための形態】
【0009】
続いて、例示の本発明の実施形態が説明される。例示の実施形態は、特許請求の範囲に係る本発明を限定するものではなく、実施形態に記載された特徴の組み合わせは、必ずしも本発明に不可欠なものではない。
【0010】
推論の実行の間に消費される総エネルギーのかなりの部分が外部メモリアクセスにおいて浪費され、外部メモリのスループットがより大きいほどより多くのエネルギー消費を必要とする、ということをここにおいて本発明者は見出した。
【0011】
本発明の実施形態は、外部メモリアクセスの数を最小化しようとするものであってよく、概して、単位面積あたり単位秒あたり操作数テラ(TOP/s/Area)で高い計算密度及びリソース稼働率を提供するものであってよい。例示的な実施形態は、ニューラルネットワーク層をグルーピングすることによって効率的なニューラルネットワーク推論を実行でき、それらの処理間で外部メモリアクセスを避けることができ、層で一つずつ処理して全中間データを外部メモリに格納するのと比較して外部メモリアクセスの総数を減少する、ASICやFPGAのようなハードウェアシステムによって推論を実行する命令を生成してもよい。これにより、固定のニューラルネットワークチップに近い性能と電力効率を有する様々なニューラルネットワークを取り扱う柔軟性、及び、モバイルネットバリエーションを含む、畳み込みニューラルネットワークのような様々なニューラルネットワークを取り扱える柔軟性がもたらされるであろう。
【0012】
ここでの技術はオンチップメモリ内に入力層全体を入れ込むことができない条件において有益であろう。システム内の並列度を様々に改変することによって、ハードウェアチップは、自動化された設計・探索処理を用いることによってなど、ニューラルネットワークの特定のセット又はファミリー、及び、面積や電力などのリソース制約のセットに対してチューニングされ得る。ハードウェアは、スケーリングパラメータを調整することによって、電力が制限されたエッジデバイスからデータセンターまでスケーリングされ得る。外部メモリアクセスを減少することにより、実行の偶然性も減少できるであろう。
【0013】
図1は、本発明の実施形態による、推論のニューラルネットワークアクセラレータのハードウェア固有分割のための操作フローを示す。操作フローは、特定のハードウェアチップ構成上の実行のために推論を分割する方法を提供してよい。
【0014】
S110において、取得部は計算グラフ及びハードウェアチップ構成を取得する。計算グラフは複数の層を有するニューラルネットワークを示すものであって、各層は複数のノード及び複数のエッジを有し、各ノードは数学的操作の表現を含む。ハードウェアチップ構成は、数学的操作を実行する少なくとも一つのモジュールとオンチップメモリとを含む。ハードウェアチップは、活性化データを格納している外部メモリと接続しつつ、層の対応する部分の活性化データの数学的操作を、層ごとに順次、実行することによって、各層の部分でニューラルネットワークの推論を実行可能である。
【0015】
S120において、分割部は、複数の層の推論を複数のグループに分割する。各グループは、各グループの層の対応する部分の数学的操作を、層ごとに順次、実行することによって、ニューラルネットワークの推論を実行するハードウェアチップによる少なくとも持続時間又はエネルギー消費の推定に基づく数の順次的な層を含む。
【0016】
S140において、生成部は、ハードウェアチップが複数のグループのニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成する。
【0017】
図2は、本発明の実施形態による、ニューラルネットワーク推論の実行が可能なハードウェアチップ250の例示的な構成を示す。ハードウェアチップ250は、ニューラルネットワークアクセラレータと呼ばれてもよい。この実施形態において、ハードウェアチップ250は特定用途向け集積回路(ASIC)である。ハードウェアチップ250のモジュールは、特定の機能を実行するよう構成された論理ゲートのグループであってよい。ハードウェアチップ250のメモリは、RAM、フラッシュメモリ、又は、他の埋め込み型書き込み可能メモリであってよい。
【0018】
ハードウェアチップ構成は、数学的操作を実行するための少なくとも一つのモジュールとオンチップメモリとを含む。この実施形態において、ハードウェアチップ250は外部メモリインターフェース252を含む。ハードウェアチップ250の少なくとも一つのモジュールは、少なくとも一つの畳み込みモジュール262、活性化操作を実行するための少なくとも一つのモジュール、活性化モジュール266、外部メモリから活性化データをオンチップメモリ上に読み込むための少なくとも一つのモジュール、データ読み込みモジュール258、オンチップメモリから外部メモリへ活性化データを格納する少なくとも一つのモジュール、データ格納モジュール259、畳み込みニューラルネットワークの重み付けを外部メモリからオンチップメモリへ読み込む少なくとも一つのモジュール、重み付け読み込みモジュール254、及び、これらのモジュールの命令を外部メモリから読み込むための少なくとも一つのモジュール、命令DMAモジュール256を含む。オンチップメモリは、重み付けメモリ255、活性化データメモリ260及び蓄積メモリ264を含む。
【0019】
外部メモリインターフェース252は、ハードウェアチップ250、及びその中の様々なモジュール、がDRAMメモリ206、外部メモリとデータを交換することを可能にするよう構成されている。中央演算処理装置(CPU)208は、アプリケーションの使用時にニューラルネットワーク推論を要求してよい。
【0020】
重み付け読み込みモジュール254及びデータ読み込みモジュール258は、外部メモリインターフェース252を介して、DRAMメモリ206のような外部メモリからデータを読み取りかつ読み込むように構成されている。重み付け読み込みモジュール254は、外部メモリから重み値を順次読み取り、そのようなデータを重み付けメモリ255上に読み込んでよい。
【0021】
データ読み込みモジュール258は、外部メモリから入力値、活性化データなどを読み取り、かつ、そのようなデータを活性化データメモリ260上に読み込んでよい。データ格納モジュール259は、外部メモリインターフェース252を介して、活性化データを外部メモリ上に格納するよう構成されている。データ格納モジュール259は、活性化データを活性化データメモリ260から読み取り、そのようなデータをDRAMメモリ206上に格納してよい。データ読み込みモジュール258及びデータ格納モジュール259は、外部メモリに格納された活性化データの、矩形のサブ領域、ブロック又はタイルのような、部分で操作してもよい。データ読み込みモジュール258及びデータ格納モジュール259は、オンチップメモリの容量が不十分である場合に中間的な計算結果を外部メモリへ一時的に「退避」させる、スピル・フィル(spill−fill)として知られるタイプの操作に用いられてもよい。
【0022】
重み付けメモリ255、活性化データメモリ260及び蓄積メモリ264は、ハードウェアチップ250のオンチップメモリの全てのブロックである。ハードウェアチップ構成は、オンチップメモリの各ブロックのバンクの数及び大きさを特定する。各ブロックは、1又は2ポートメモリバンクの組として編成されてよい。各ブロックは、対応する計算モジュール、読み込みモジュール及び格納モジュールにつながる読み取り書き込みポートを有してよい。ハードウェアチップ250は、外部メモリインターフェース252のようなオンチップメモリI/Oポートに接続するアービトレーション&インターコネクトロジックをさらに含んでよい。ハードウェアチップ250の読み込及び格納モジュールは、オンチップメモリのメモリバンクへのロックを取得し、読み取り又は書き込みトランザクションの組を実行し、そして、もはや使用しなくなった場合にメモリバンクを解放するよう構成されてよい。このように、2つ又はそれ以上のモジュールは、異なるメモリバンクに並列にアクセスしてよい。
【0023】
この例示的な実施形態において、ハードウェアチップ250は、畳み込みニューラルネットワークの推論を実行するように構成され、それで、各層の部分はタイルであり、ハードウェアチップ250は畳み込みモジュール262を含む。換言すれば、ハードウェアチップ250の少なくとも一つのモジュールは、少なくとも一つの畳み込みモジュールを含む。
【0024】
畳み込みモジュール262は、活性化データメモリ260に格納されている入力値又は活性化データ及び重み付けメモリ255に格納されている重み値に数学的操作を実行するように構成されている。畳み込みモジュール262は、蓄積メモリ264に部分和を出力してもよいし、蓄積メモリ264に格納されている既存の部分和に蓄積を実行してもよい。畳み込みモジュール262は、高さ(KH)x幅(KW)のカーネルサイズ、鉛直及び水平ストライド、拡張、パッディングなどのような、数学的操作の異なるパラメータに対する直接のサポートを提供してよい。ハードウェアチップ250のいくつかの実施形態において、畳み込みモジュール262は、少なくとも一つの専用のDW畳み込みモジュール及び少なくとも一つのPW畳み込みモジュールを含む。ハードウェアチップ250の他の実施形態において、畳み込みモジュール262は、汎用の畳み込みモジュールを含み、それは、モバイルネットアーキテクチャの逆残余ブロック(Inverted Residual Blocks)などの、DW畳み込み及びPW畳み込み層の組み合わせをサポートしてよい。
【0025】
活性化モジュール266は、蓄積メモリ264に格納されている値に活性化操作を実行するように構成される。活性化モジュール266は、蓄積メモリ264から入力値を読み取って、計算結果を活性化データメモリ260に格納してよい。活性化モジュール266は、ReLU、LeakyReLU、Hジグモイド、H−Swishなどのような活性化関数を提供するため、畳み込みモジュール262の数学的操作に続く、スカラ又はベクトル値の足し算、掛け算、割り算、平方根などを含む要素的な算術機能のような計算を実行してよい。活性化モジュール266は、ブランチの残余追加、再量子化、固定された窓サイズの組による最大値プーリングや平均値プーリングなどの局所プーリングをさらに実行してよい。
【0026】
ハードウェアチップ250、及びその中の様々なモジュール、で実行される操作のパラメータは、メモリ重み付けメモリ255など別個のメモリ、専用メモリに格納され、又は、即時値として命令に埋め込まれてもよい。命令DMAモジュール256は、ハードウェアチップ250の様々なモジュールの命令を読み込むように構成されている。命令DMAモジュール256は、ハードウェアチップ250の様々なモジュールの命令を外部メモリからラウンドロビン式に読み込んでもよい。ハードウェアチップ250の命令インフラストラクチャは、命令を与え、かつ、同期させてよい。ハードウェアチップ250の命令インフラストラクチャは、命令DMAモジュール256に加えて、様々なモジュールの各々にエンコードされた命令を搬送するために、先入れ先出し(FIFO)メモリのような、モジュールの挙動を明示的に制御する少なくとも一つの命令キューを含んでもよい。
【0027】
この実施形態においてハードウェアチップが畳み込みニューラルネットワークの推論を実行するよう構成されているが、他の実施形態は他の種類のニューラルネットワークの推論のハードウェア固有分割を実行してよい。活性化データメモリに取り付けられるデータ読み込みモジュール及びデータ格納モジュールに加えて、ハードウェアチップの他の実施形態は、蓄積メモリに取り付けうる読み込み及び格納モジュールの追加的な対を含んでよい。他の実施形態において、重み付け読み込みモジュールは、活性化モジュールパラメータを読み込むのにさらに用いられてもよい。
【0028】
図3は、本発明の実施形態による、各層の部分でのニューラルネットワークの推論の実行の模式図を示す。この実施形態において、持続時間及びエネルギー消費の推定を含むいくつかのヒューリスティックに基づいて、畳み込みニューラルネットワークが層のグループに分割されている。各層は、高さ、幅及びチャネル、の3次元のタイルに分配されている。次元の大きさは、層のタイルが前の層からのタイルのサブセットを用いて処理できるように確立されている。PW畳み込みに対して、チャネル次元の全タイルは、それらの活性化データを処理するために必要とされる。DW畳み込みに対して、次の層の対応するタイルの活性化データを処理するのに一つのタイルで十分である。
【0029】
ニューラルネットワークは、他の層のうちの例として順次的な層301、302、303及び304を含む。この実施形態で推論の実行をしている間、データ読み込みモジュール358は、外部メモリから外部メモリインターフェース352を介して入力値又は活性化データを読み取り、そのようなデータを活性化データメモリ360上に読み込む。データ格納モジュール359は活性化データメモリ360から活性化データを読み取り、そのようなデータを外部メモリインターフェース352を介して外部メモリ上に格納する。換言すれば、ハードウェアチップに対して命令を生成することは、さらに、ハードウェアチップが外部メモリから各グループの最初の層の対応する部分の活性化データを取得し、各グループの最後の層の対応する部分の数学的操作から得られた活性化データを外部メモリに記録するための命令を生成することを含む。
【0030】
この実施形態において、層301、302、303及び304は単一グループに属しており、それが意味するのは、層301、302、303及び304の対応する部分の推論の実行の間に、活性化データは外部メモリから一度だけ読み込まれ、外部メモリに一度だけ格納されるということである。層301の高さ及び幅次元のタイル301Aの活性化値を処理するために、十分な入力タイルがオンチップメモリ内に読み込まれなければならない。1x1以外の畳み込み操作のデータ従属性から、次の層のタイルの面積は縮小する。したがって、最後の層を除く全てのタイルは、KxK(等しい高さ及び幅)畳み込みカーネルに対して通常(K−1)/2だけオーバーラップし、それで演算の量が増加するであろう。したがって、ニューラルネットワークの計算グラフは、追加的な演算の量が中間層全体を外部メモリに格納するのに必要とされるメモリトランザクションの数とバランスするように層のグループに分割される。
【0031】
タイル301A及び301Bの両方の活性化データはタイル302Aの活性化データを処理するのに必要とされるので、層301のタイル301A及び301Bの活性化データが活性化データメモリ360に読み込まれる。タイル301A及び301Bの活性化データは、層302のタイル302A及び302Bの活性化データを与えるために処理され、それは活性化データメモリ360上に格納もされる。これは、すでに活性化データメモリ360に読み込まれた前の層の活性化データに基づいたタイルの活性化データの次の層の処理を可能にし、得られた活性化データは活性化データメモリにも格納される。
【0032】
タイル302A及び302Bの活性化データが活性化データメモリ360上に一旦読み込まれると、タイル301A及び301Bの活性化データは次の活性化データのために活性化データメモリ360上のスペースを解放すべくクリアされてよい。当該処理及び取得(yielding)は、当該グループ内でより深く移動する各層に対して繰り返される。次に、タイル302A及び302Bの活性化データは、層303のタイル303A及び303Bの活性化データを与えるために処理され、それは活性化データメモリ360上に読み込まれる。タイル303A及び303Bの活性化データはさらに、層304のタイル304A及び304Bの活性化データを与えるために処理され、それは活性化データメモリ360に読み込まれる。最後に、データ格納モジュール359は、タイル304A及び304Bの活性化データを外部メモリインターフェース352を介して外部メモリ上に格納する。
【0033】
この実施形態において、推論の実行は部分又はタイル、グループにも分割された。他の実施形態では、活性化データメモリが層全体に対して活性化データを読み込むに十分に大きい場合などには、各層への分配は必要とされないであろう。
【0034】
図4は、本発明の実施形態による、
図1のS120のような、層の推論をグループに分割するための操作フローを示す。この操作フローの中の操作は、分割部又はそれらに対応して名付けられたサブセクションにより実行されてよい。
図1に記載されているように、計算グラフ及びハードウェアチップ構成が、層の推論をグループに分割するより前に取得される。
【0035】
S422において、分割部又はそのサブセクションなどの準備部が複数のグループ分割候補を準備し、各グループ分割候補は複数の層の一意の分割を特定する。各グループが連続した層を持たなければならない前提で、グループ分割候補は、各層が属するグループを特定する。例えば、複数のグループ分割候補の各々は、複数の層の均等な分割を特定してよい。他の例として、複数のグループ分割候補の各々は、複数の層を単一層、2層、3層などのグループにランダムに分割することを特定してよい。グループ分割候補は、ニューラルネットワークのいくつかの層だけをも含んでもよく、それによってより細かい分割が解析可能になる。
【0036】
S430において、シミュレート部は、グループ分割候補の一つに対してハードウェアチップの持続時間及びエネルギー消費の推定を決定すべく、ハードウェアチップによるニューラルネットワークの推論の実行をシミュレートする。反復が進むと、シミュレート部は、複数のグループ分割候補の各々に対して、ハードウェアチップの持続時間及びエネルギー消費の推定を決定すべく、ハードウェアチップによるニューラルネットワークの推論の実行をシミュレートする。
【0037】
S424において、分割部又はそのサブセクションは、グループ分割候補の全てがシミュレートされたか否かを判断する。もしシミュレートされていない候補が残っていたら、操作フローはS428に進み、ここで新しいグループ分割候補がシミュレーションのために選択される。もし全てのグループ分割候補がシミュレートされているなら、操作フローはS426に進む。
【0038】
S426において、分割部又はそのサブセクションなどの比較部は、複数の層のうちの同じ層の各グループ分割候補の持続時間及びエネルギー消費の推定を比較する。部分的なグループ分割候補が含まれているかもしれないが、公平な比較のため、推定は同じ層の推論実行性をカバーしなければならない。例えば、複数のグループ分割候補は、第1のグループ分割候補として単一層を、第2のグループ分割候補として層の前のグループを、第3のグループ分割候補として当該層の前のグループともに当該単一層を特定してもよい。そのような例において、公平な比較は、(i)第3のグループ分割候補の数学的操作を実行するための持続時間及びエネルギー消費の推定と、(ii)第1のグループ分割候補及び第2のグループ分割候補の数学的操作を実行するための総持続時間及び総エネルギー消費の推定と、を比較することを含んでよい。この例は、ヒューリスティックアルゴリズムが層を意識したグルーピングを使用するような、層の推論をグループに分割する特定の実施形態に対して有用であろう。アルゴリズムは空のグループから開始して、次に第1の未グループ層がグループに追加される。シミュレート部はそれから、グループの推論、次の未グループ層の推論、及び、次の未グループ層が追加されたグループの推論の持続時間及びエネルギー消費を推定する。もし次の未グループ層が追加されたグループの推論が、グループの推論と次の未グループ層の推論との和よりも効率が良いならば、次の層に対して処理を繰り返す。しかし、次の未グループ層が追加されたグループの推論が、グループの推論と次の未グループ層の推論との和よりも効率が良くないならば、グループは次の未グループ層を含めず、処理は次の未グループ層だけのグループを考慮するように進む。この処理はネットワークの層の全てに対して繰り返される。
【0039】
この実施形態はハードウェアチップによるニューラルネットワークの推論の実行をシミュレートするが、他の実施形態はハードウェアチップ上で直接ニューラルネットワークの推論を実行してもよい。そのような実施形態はシミュレーション環境を必要としなくてもよいが、全ての異なる候補に対して持続時間及びエネルギー消費を測定することは、シミュレーション環境下よりももっと時間を消費するであろう。
【0040】
図5は、本発明の実施形態による、
図4のS430のような、ハードウェアチップ上の推論の実行をシミュレートするための操作フローを示す。この操作フローの中の操作はシミュレート部又はそれに対応して名付けられたサブセクションによって実行されてよい。
図4に記載されたように、グループ分割候補は推論の実行がシミュレートされる前に準備される。
【0041】
S532において、生成部は、ハードウェアチップがグループ分割候補に従って推論を実行するための命令を生成する。換言すれば、生成部は、ハードウェアチップが各グループの層内の対応する部分の数学的操作を、層ごとに順次、実行するための命令を生成する。単にシミュレーションのためではあるが、
図1のS140のような、実際のハードウェアチップに対するのと同じ態様で命令を生成してよい。命令生成操作のより詳細は、
図7に関して記載される。
【0042】
S534において、シミュレート部又はそのサブセクションなどの実行部は、ハードウェアチップのシミュレーション上の命令を実行する。これは、トラッキング、記録、又はさもなくば各クロックサイクル内の操作を特定すること、を含んでよい。特定される操作は、他のモジュールの操作と並列して何回も個別のモジュールで実行される、単純できめの細かい操作である。
【0043】
S535において、シミュレート部又はそのサブセクションなどの和算部は、シミュレーション中のクロックサイクルの和を取る。シミュレーションは実際のハードウェアチップ上の推論よりも大いに速く走るが、ハードウェアチップのクロックサイクルの時間量はハードウェアチップの構成に基づいて決定され得る。例えば、もしハードウェアチップ構成が2GHzで走るなら、一秒で20億クロックサイクル継続すると推定され得る。
【0044】
S537において、シミュレート部又はそのサブセクションなどの割当部は、シミュレーションの各きめの細かい操作へのエネルギー消費を割り当てる。推論の実行は複雑な処理を含み得るが、それらの処理は、これらきめの細かい操作にブレイクダウンされ、それらの各々は、今回のシミュレーション又は同じハードウェアチップ上の同じきめの細かい操作の前のシミュレーションから計測されたエネルギー消費と関連付けられ得る。いくつかの実施形態において、ハードウェアチップの各きめの細かい操作と関連付けられたエネルギー消費は、シミュレーション環境の独立した入力ファイルから供給されてよい。
【0045】
S538において、和算部は、シミュレーションのきめの細かい操作全てのエネルギー消費の和を取る。換言すれば、ハードウェアチップのエネルギー消費の推定は、各操作に関連付けられた個別のエネルギー消費の和に基づいており、持続時間の推定は、クロックサイクルの数に基づいている。
【0046】
図6は、本願発明の別の実施形態による、推論のハードウェア固有分割のための操作フローを示す。この操作フローは、特定のハードウェアチップ構成上の実行に対する推論を分割する方法を提供してよい。
【0047】
S610、S620及びS640で実行される操作は、
図1に関して上記されたS110、S120及びS140で実行されるのと実質的に同様の操作である。上記で説明されたように、ハードウェアチップは各層の部分でニューラルネットワークの推論を実行可能である。いくつかの実施形態において、部分、又は、畳み込みニューラルネットワークの場合のタイル、の次元は予め定められている。しかしながら、この実施形態において、推論のハードウェア固有分割のための操作フローは、当該部分の次元を決定する操作を含む。
【0048】
S612において、分割部又はそのサブセクションなどの決定部は、各層の部分の次元を決定する。いくつかの実施形態において、決定部は、複数の次元仕様候補の各々に対するハードウェアチップの持続時間及びエネルギー消費の推定を決定すべく、ハードウェアチップによりニューラルネットワークの推論の実行がシミュレートされることによって、各層の部分の次元を決定する。そのような実施形態において、各次元仕様候補は、オンチップメモリの容量及びハードウェアチップの並列度に基づいてよい。これらの実施形態のいくつかにおいて、各部分の次元の一つは、ハードウェアチップの並列度によって定義されてよく、他の次元は可変であり得る。一旦次元仕様候補全てがシミュレートされたら、シミュレート部又はそのサブセクションなどの比較部は、各次元仕様候補の持続時間及びエネルギー消費の推定を比較する。そして次元仕様候補の一つは、推論の実行に使用されるよう選択されてよい。この選択は持続時間又はエネルギー消費又は両方のバランスに基づいてよい。
【0049】
この実施形態はハードウェアチップによるニューラルネットワークの推論の実行をシミュレートするが、他の実施形態は直接ハードウェアチップ上でニューラルネットワークの推論を実行してよい。そのような実施形態はシミュレーション環境を必要としなくてもよいが、持続時間及びエネルギー消費の測定はシミュレーション環境内よりも困難であろう。
【0050】
図7は、本発明の実施形態による、
図1のS140のような、ハードウェアチップが推論を実行するための命令を生成する操作フローを示す。この操作フローのうちの操作は、生成部又はこれに対応して名付けられたサブセクションによって実行されてよい。
図1に記載されているように、ニューラルネットワークの層はグループに分割されている。
【0051】
S741において、生成部又はそのサブセクションなどの割当部は、ハードウェアチップの各モジュールの各操作をキューに割り当てる。換言すれば、ハードウェアチップに対して命令を生成することは、各操作を複数のキューのうちのあるキューに割り当てることをさらに含む。計算グラフから開始し、各ノードはハードウェアチップの命令設定アーキテクチャ(ISA)からの命令を表し、各エッジは層の一つの部分からの仮想バッファ保持データを表す。キューへの割り当て操作のため、仮想バッファの数は無制限である。各仮想バッファは、一意に、かつ、計算グラフの特定の値ひとつに関連づけられている。しかしながら、同じ物理バッファは、スケジュールされた計算グラフのオーバーラップしないライフタイムにわたって複数のエッジに割り当てられてよい。ハードウェアチップ上で計算グラフの命令を実行するために、グループの各入力部分に対する読み込み命令がなければならず、かつ、グループの各出力部分に対する格納命令がなければならない。推論の実行のシミュレーション中に特定される操作と同様に、各キューに割り当てられる操作は、個別のモジュールによって、他のモジュールの操作と並列して何回も実行される、単純できめの細かい操作である。各命令は複数のきめの細かい操作によって実現されてよい。キューは、1よりも多いモジュールによって実行される操作を有してもよい。システム内のあらゆるモジュールはそれ自身の線形の一連の命令を実行し、それは操作にブレイクダウンされ得る。推論の実行は、並列して走る順次的な処理のセットと考えられてよい。
【0052】
換言すれば、ハードウェアチップに対して命令を生成することは、各キューでの操作の実行を順序付けることをさらに含む。各並列処理は複数メモリから読み取ってもよく、及び/又は、書き込んでもよい。処理の各命令は、多くのクロックサイクル中に多くのデータ要素の操作をもたらす。したがって、操作の正常な順序は、操作の従属性が満たされかつ必要なリソースが利用可能な時点で各操作が実行されることを確実にするためにクリティカルであろう。順序付け部は、実行時間を最小化、及び、データのポテンシャル退避の数を最小化するための順序を最適にしてもよい。
【0053】
S744において、生成部又はそのサブセクションなどの割振り部は、データに対してハードウェアチップのオンチップメモリの位置を割り振る。換言すれば、ハードウェアチップに対して命令を生成することは、ニューラルネットワークの推論を実行するためのデータにオンチップメモリ内の位置を割り振ることをさらに含む。この実施形態において、命令を生成することは、ハードウェアチップの少なくとも一つのモジュールが外部メモリからのデータを割り振られた位置へ読み込むことを実行する命令を生成することを含んでもよい。そうするにあたり、ハードウェアチップにより推論が実行される前に命令を生成する目的で、割振り部は、仮想バッファをハードウェアチップのオンチップメモリの物理メモリ位置に置き換えてよい。
【0054】
S745において、生成部又はそのサブセクションは、割り振りを必要とするデータの全てが利用可能なメモリに割り振り可能であるか否かを判断する。換言すれば、生成部は、各クロックサイクルに対して全ての必要なデータを保持する十分なメモリがあるか否かを判断する。もし1又は複数のクロックサイクルに対して必要なデータの全てに対して十分なメモリがないならば、操作フローはS746へ進み、ここでデータの1又は複数の退避が導入される。もし全てのクロックサイクルに対して必要なデータの全てに対して十分なメモリがあるならば、操作フローはS747へ進む。
【0055】
S746において、生成部又はそのサブセクションなどの退避部は、外部メモリへのデータの退避を操作に導入する。層をグループに分割するように、各層の部分の次元は設定されるが、推論の実行は、全てのエッジの割り当てを実行するのに十分な物理メモリ位置がないときなど、特定のメモリが存在しているよりも多くの格納スペースを必要とするときに出くわすことがあろう。その場合に、オンチップメモリに現在格納されているデータのいくつか又は全てが一時的に外部メモリ上にオフロードされ、もっとすぐ必要とされるデータの格納のためにオンチップメモリがクリアされ得る。クリアされたデータは、それから、そのデータがさらなる処理のためにその後にもう一度必要になったときに、オンチップメモリ上に読み戻されるであろう。退避された値は、外部メモリへのデータの退避を最小化しようとして、すなわち、外部メモリアクセスの数を減少しようとして、選択される。一旦、退避が導入されると、それらは操作の順序の中にスケジュールされなければならず、それで、データの新しい退避が導入されるときはいつでも操作フローはS742に戻る。換言すれば、ハードウェアチップに対して命令を生成することは、ニューラルネットワークの推論を実行するために、外部メモリへデータの退避をスケジューリングすることをさらに含む。
【0056】
S747において、生成部又はそのサブセクションなどの注釈部は、同期フラグに注釈を付す。換言すれば、ハードウェアチップに対して命令を生成することは、同期フラグに従属性のある操作の相互順序を保持する注釈を付すことをさらに含む。処理の各コンシューマー・プロデューサー対は、リードアフターライト(RAW)及びライトアフターリード(WAR)従属性同期に対するセマフォ/トークン・キューの対を有してよい。同じメモリを介して通信するモジュールのいかなるコンシューマー・プロデューサー対に対しても、RAW及びWARに対するセマフォ/トークン・キューの各対の従属性がトラッキングされてよい。さらに、各命令は、特定の処理に対応するセマフォを増減するフラグのセットを有してよい。したがって、いくつかの実施形態において、タスクレベルの並列性を維持しつつデータハザードを避けるため、明示的、コンパイラガイドトークンベース同期機構が使用されてよい。
【0057】
S 749において、生成部又はそのサブセクションなどの変換部は、命令を2進表現に変換する。換言すれば、ハードウェアチップに対する命令を生成することは、命令を2進表現に変換することをさらに含む。2進表現はハードウェアチップ上で走らせるのに適したフォーマットである。
【0058】
図8は、本発明の実施形態による、ニューラルネットワーク推論を実行可能なマルチコアハードウェアチップ850の例示的な構成を示す。この実施形態において、ハードウェアチップ構成はさらに複数のコア851を含み、数学的操作を実行する少なくとも一つのモジュール及びオンチップメモリは複数のコアのうちに分配される。ハードウェアチップ構成はさらに、各コアがコア間通信のために構成された少なくとも一つの送信機ブロック867及び少なくとも一つの受信機ブロック868を含むことを示す。
【0059】
マルチコアハードウェアチップ850は4つのコア851を含み、それらの各々は
図2に関して上記したハードウェアチップ250と実質的に同様のものであり、同じモジュール及びメモリの全てを含むが、送信機ブロック867及び受信機ブロック868の、二つの追加的なブロックも有する。コア851の送信機ブロック867及び受信機ブロック868は1又は複数の書き込チャネル869を介して互いに連結されており、他のコアのメモリに書き込みアクセス可能であり、かつ、コアの読み込みモジュールが他のコアのメモリへ読み取りアクセスすることを可能としている。いくつかの実施形態において、それを介して開始側が他のコアのメモリ内部に最初にロックを取得しなければならず、次にデータの「バースト」伝送を実行しなければならないところの、回路スイッチ調停コア内相互接続を介して、データ交換が促進されてよい。他の実施形態はコア間通信を実行する他の構造を含んでよい。
【0060】
ハードウェアチップに対して命令を生成することは、コア間に命令を分配することをさらに含む。ニューラルネットワークの推論を実行するのにマルチコアハードウェアチップ850を利用することによって、より多くの操作が並列に実行され得、持続時間がかなり減少するとともに、コアの間のデータ伝送の形での追加的なエネルギー消費をほとんど必要としない。例えば、マルチコアハードウェアチップ850は4つのコアを含むので、推論の実行の持続時間が約75%減少すると期待することは不合理ではないであろう。マルチコアハードウェアチップ850の利用により、単一コアに対する電力密度の限界を超えて性能がさらにスケールアップ可能であろう。ハードウェアチップに対する命令が生成されるとき、コア間データ伝送のため追加的な命令が必要であるかもしれないが、独立した各コアに対する命令の生成は上記したものと実質的に同じままである。
【0061】
図9は、本発明の実施形態による、ニューラルネットワーク推論を実行可能なマルチチップハードウェアの例示的な構成を示す。この実施形態において、ハードウェアチップ構成は、マルチチップハードウェア構成のハードウェアチップ950の第2のインスタンスと通信するよう構成された少なくとも一つの送信機ブロック967及び少なくとも一つの受信機ブロック968をさらに含む。
【0062】
この実施形態のマルチチップハードウェアは4つのハードウェアチップ950を含み、それらの各々は、
図8に関して上記した各コア851と実質的に同様の構成であり、同じモジュール及びメモリを全て含む。さらに、送信機ブロック967、受信機ブロック968及び書き込みチャネル969の構造及び機能は、
図8の送信機ブロック867、受信機ブロック868及び書き込みチャネル869のそれと実質的に同様のものである。いくつかの実施形態において、各ハードウェアチップ950は4つの送信機ブロック及び4つの受信機ブロックを含み、それにより網目状又は2Dトーラストポロジーで接続されたハードウェアチップ950で任意サイズのマルチップ構成の形成を可能にしている。そのような実施形態において、そのような送信機及び受信機ブロックの実装のために、マルチチップ構成を形成するためにFPGA及びASICでしばしば使用されるシアライザー/デシリアライザー(SerDes)インターフェースのような高スピードシリアルインターフェースが使用されてよい。
【0063】
この実施形態において、各ハードウェアチップは同一である。しかしながら、他の実施形態において、マルチチップハードウェア構成のハードウェアチップは、異なる操作を実行するためのモジュールや異なる大きさのメモリなど、異なるコンポーネントを有してよい。これは異なるニューラルネットワークの推論を実行するのにチップが用られるからであってよい。異なる構成のチップを含むマルチチップハードウェア構成は、よりよいスケーラビリティにとって、及び、チップが複数のニューラルネットワークの推論を並列で実行するときに、有益であろう。さらなる実施形態において、マルチチップハードウェアの各ハードウェアチップは、
図8のマルチコアハードウェアチップ850のような、マルチコアハードウェアチップでよい。
【0064】
図10Aは、本発明の実施形態による、DW畳み込みモジュール1062の例示的な構成を示す。DW畳み込みモジュール1062は、キュー1062Q、主シーケンサー1062MS、窓シーケンサー1062WS、活性化フィーダー1062AF、重み付けフィーダー1062WF、パイプラインコントローラー1062PC、畳み込みパイプライン1062CP、外部蓄積ロジック1062A及び蓄積メモリインターフェース1062AIを含む。
【0065】
キュー1062Qは命令を受信及び送信する。キュー1062Qは、
図2の命令DMAモジュール256などの命令DMAモジュールから命令を受信し、命令を主シーケンサー1062MSに送信する。キュー1062Qは、FIFOメモリ又は命令をキューするのに適したいかなる他のメモリであってよい。
【0066】
主シーケンサー1062MSは畳み込みのための制御パラメータをシーケンスする。主シーケンサー1062MSは、キュー1062Qから命令を受信し、窓シーケンサー1062WSに命令を出力してよい。主シーケンサー1062MSは、KHxKWの畳み込みを1x<窓>の大きさのより小さな畳み込みに分け、カーネル内の入力領域の順序に従って活性化データ及び重み値に対する命令を準備する。ここで<窓>はラインバッファ長さを決定するアーキテクチャーパラメータを指す。
【0067】
窓シーケンサー1062WSは、一つの1x<窓>畳み込みのための制御パラメータをシーケンスする。窓シーケンサー1062WSは、主シーケンサー1062MSから命令を受信してよく、かつ、カーネル内の入力領域の順序に従った活性化データのデータシーケンスを活性化フィーダー1062AFに、及び、カーネル内の入力領域の順序に従った重み値のデータシーケンスを重み付けフィーダー1062WFに出力してよい。
【0068】
活性化フィーダー1062AFは、
図2の活性化データメモリ260などの活性化データメモリからアクセスされた活性化データを、窓シーケンサー1062Sからのデータシーケンスに示された活性化データに従って、データメモリインターフェース1062DIを介して畳み込みパイプライン1062CPに与える。活性化フィーダー1062AFは、活性化データメモリから、1x<窓>計算に十分な活性化データを畳み込みパイプライン1062CPのラインバッファ内へ読み出してよい。
【0069】
重み付けフィーダー1062WFは、
図2の重み付けメモリ255などの重み付けメモリからアクセスされた重み値を、窓シーケンサー1062Sからのデータシーケンスに示された重み値に従って、重み付けメモリインターフェース1062WIを介して畳み込みパイプライン1062CPへ前もって読み込む。重み付けフィーダー1062WFは、重み付けメモリから、1x<窓>計算に十分な重み値を畳み込みパイプライン1062CPの重み付けバッファ内へ読み出してよい。
【0070】
パイプラインコントローラー1062PCは畳み込みパイプライン1062CPのデータ伝送操作を制御する。一旦、現在の活性化バッファコンテンツが処理されたら、パイプラインコントローラー1062PCは、ラインバッファから畳み込みパイプライン1062CPの活性化バッファへのデータのコピーを開始してよい。パイプラインコントローラー1062PCは、畳み込みパイプライン1062CPの各チャネルパイプライン1062CHで実行される畳み込み演算を制御してよく、ここで、各チャネルパイプライン1062CHはDW畳み込み層への入力の一つのチャネルで操作する。
【0071】
畳み込みパイプライン1062CPは、活性化フィーダー1062AFから与えられた活性化データ及び重み付けフィーダー1062WFから前もって読み込まれた重み値に数学的操作を実行する。畳み込みパイプライン1062CPはチャネルパイプライン1062CHへ分割され、各チャネルパイプライン1062CHは一つのチャネルに対して数学的操作を実行する。活性化フィーダー1062AF、重み付けフィーダー1062WF及びパイプラインコントローラー1062PCと組み合わせて、畳み込みパイプラインは畳み込み演算を論理的に実行する。
【0072】
外部蓄積ロジック1062Aは畳み込みパイプライン1062CPからデータを受信し、蓄積メモリインターフェース1062AIを介して
図2の蓄積メモリ264などの蓄積メモリにそのデータを格納する。蓄積ロジック1062Aは、各チャネルパイプライン1062CHに対する加算器1062Pを含む。蓄積ロジック1062Aは、蓄積メモリのコンテンツと1x<窓>畳み込みの結果とのPWな和算のために用いられてよい。
【0073】
この実施形態において、3つの窓パイプラインで典型的に示された3つのチャネルがある。しかしながら、他の実施形態は異なる数のチャネルを有してよい。あり得るものの、この実施形態は主に簡易性のため3つのチャネルを示した。多くの実施形態は、現実的なアプリケーションに対応すべく少なくとも16チャネルを含むだろう。
【0074】
図10Bは、本発明の実施形態による、DW畳み込みモジュールに対するチャネルパイプライン1062CHの例示的な構成を示す。チャネルパイプライン1062CHは、ラインバッファ1062LB、活性化バッファ1062AB、重み付けバッファ1062WB、複数の乗算器1062X、複数の加算器1062P、遅延レジスタ1062DR及び内部蓄積レジスタ1062IAを含む。
【0075】
ラインバッファ1062LBは、活性化フィーダー1062AFから受信した活性化データを格納する。ラインバッファ1062LBは、一つのピクセルサイクルで活性化フィーダー1062AFによって読み取られるごとに活性化データを格納するシフトレジスタを含んでよい。
【0076】
活性化バッファ1062ABは、ラインバッファ1062LBから受信した活性化データを格納する。活性化バッファ1062ABは、現行の畳み込み演算が適用される活性化データを格納する1セットのレジスタを含んでよい。
【0077】
重み付けバッファ1062WBは、重み付けフィーダー1062WFから受信した重み値を格納する。重み付けバッファ1062WBは、現行の畳み込み演算が適用される重み値を格納するシフトレジスタを含んでよい。
【0078】
乗算器1062Xは、活性化バッファ1062ABからの活性化データに重み付けバッファ1062WBからの重み値を掛け合わせる。この実施形態で乗算器1062Xが3つあり、これは畳み込みカーネルの幅又は高さ次元の並列度が3であることを意味する。加算器1062Pは、集合的に加算木を形成し、それで活性化データと重み値との積をまとめて加算する。この処理の間、遅延レジスタ1062DRは、加算木の一部とみなされるものでもあるが、加算木をバランスする。内部蓄積レジスタ1062IAは、部分的な和を格納することにより加算を助ける。例えば、内部蓄積レジスタ1062IAは、畳み込みフィルタの幅又は高さと同様に、バッファの窓の数、この実施形態では6つである、が並列度、ここでは3つ、よりも多いときに、部分的な和を蓄積するのに用いられてよい。
【0079】
一旦、積が全て総和としてまとめて加算されると、総和は蓄積ロジック1062Aに出力され、そして蓄積メモリインターフェース1062AIを介して、
図2の蓄積メモリ264などの蓄積メモリにそのデータが格納される。
【0080】
図11は、本発明の実施形態による、PW畳み込みモジュール1162の例示的な構成を示す。PW畳み込みモジュール1162は、キュー1162Q、主シーケンサー1162S、重み付けメモリインターフェース1162WI、重み付けフィーダー1162WF、活性化フィーダー1162AF、データメモリインターフェース1162DI、シストリックアレイ1162S、蓄積ロジック1162A及び蓄積メモリインターフェース1162AIを含む。
【0081】
キュー1162Qは、命令を受信及び送信する。キュー1162Qは、
図2の命令DMAモジュール256のなどの命令DMAモジュールから命令を受信し、主シーケンサー1162Sにその命令を送信してよい。キュー1162Qは、FIFOメモリ又は命令をキューイングするのに適した他のいかなるメモリであってよい。
【0082】
主シーケンサー1162Sは畳み込みのための制御パラメータをシーケンスする。主シーケンサー1162Sは、キュー1162Qから命令を受信し、制御シーケンスを重み付けフィーダー1162WF及び活性化フィーダー1162AFへ、各々キューを介して出力してよい。この実施形態において、主シーケンサー1162SはKHxKW畳み込みを一連の1x1畳み込みに分け、それらが制御パラメータとして重み付けフィーダー1162WF及び活性化フィーダー1162AFに与えられる。
【0083】
重み付けフィーダー1162WFは、主シーケンサー1162Sからの制御パラメータに示された活性化データに従って、
図2の重み付けメモリ255などの重み付けメモリからアクセスされた重み値を、重み付けメモリインターフェース1162WIを介してシストリックアレイ1162SAに前もって読み込む。
【0084】
活性化フィーダー1162AFは、主シーケンサー1162Sからのデータシーケンスに示された活性化データに従って、
図2の活性化データメモリ260などの活性化データメモリからアクセスされた活性化データを、データメモリインターフェース1162DIを介してシストリックアレイ1162SAに与える。
【0085】
シストリックアレイ1162SAは複数のMAC要素1162Mを含む。各MAC要素1162Mは、重み付けフィーダー1162WFからの重み値とともに計算開始前に、前もって読み込まれ、そして活性化フィーダー1162AFからの活性化値を受信する。計算と重み値を前もって読み込むこととのオーバーラップを可能にすべく、マルチ重み付けバッファが用いられてよい。前のMAC要素1162Mから出力された活性化値と重み付けとの積が次のMAC要素1162Mに入力されるように、MAC要素1162Mはアレイ状に配置されている。この実施形態において、あらゆるサイクルに対し、各MAC要素1162Mは、前もって読み込まれた重み値1162Wで乗算された自身の左に隣接するMAC要素1162Mから出力された値であって、その積が自身の上に隣接するMAC要素1162Mから出力された値に加算された値、に等しい蓄積値を出力する。最下行のMAC要素1162Mは、それらの積を蓄積ロジック1162Aに出力する。
【0086】
蓄積ロジック1162Aは、シストリックアレイ1162SAから積を受信し、その積を、
図2の蓄積メモリ264などの蓄積メモリに格納する。この実施形態において、主シーケンサー1162Sで必要とされる蓄積が書き込まれるべきメモリ位置の古い値を読み取るならば、蓄積ロジック1162Aはそれを和によって新しい値に上書きするであろう。さもなくば、蓄積ロジック1162Aは新しい値をそのまま書き込む。
【0087】
PW畳み込みモジュール1162は、単一のKHxKW畳み込みを複数のKHxKW 1x1畳み込みに分けることによってPW畳み込みを実行するのに有用であろう。例えば、
図2の蓄積メモリ264などの蓄積メモリのある領域に、4つの異なる1x1畳み込みに対応して、2x2畳み込みが代入されてよい。PW畳み込みモジュール1162は、各1x1畳み込みを、MAC要素の活性化値の行列とMAC要素の重み値の行列とのドット積として計算し、そしてその1x1畳み込みの結果の和を取ってよい。
【0088】
図12は、本発明の実施形態による、推論のハードウェア固有分割のためのハードウェアの例示的な構成を示す。例示的ハードウェア構成は、装置1290を含み、それは、ネットワーク1298と通信するとともに、推論環境1296と相互作用する。装置1290は、業務用アプリケーションを実行し、それを使用するクライアントコンピューターをホストするサーバコンピュータ又はメインフレームコンピュータなどのホストコンピュータであってよく、その場合の装置1290は推論環境1296に直接接続されていなくてもよく、ネットワーク1298を介して端末デバイスを介して接続される。装置1290は、2つ又はそれ以上のコンピュータを含むコンピュータシステムであってよい。装置1290は、装置1290のユーザのためアプリケーションを実行するパーソナルコンピュータであってよい。
【0089】
装置1290は、論理部1270、格納部1280、通信インターフェース1292及び入出力コントローラ1294を含む。論理部1270は、様々な部分の操作をプロセッサ又はプログラマブル回路に実行させるためにプロセッサ又はプログラマブル回路で実行可能なプログラム命令を集合的に格納している1又は複数のコンピュータ可読記憶媒体を含むコンピュータプログラムプロダクトであってよい。論理部1270は、あるいは、アナログもしくはデジタルプログラマブル回路、又はそれらのいずれかの組み合わせであり得る。論理部1270は、通信を介して相互作用する、物理的に切り離された記憶装置又は回路から構成され得る。格納部1280は、本書のプロセスの実行中に論理部1270がアクセスするための実行不能データを格納することができる不揮発性コンピュータ可読媒体であり得る。通信インターフェース1292は、格納部1280等の記録媒体に設けられた送信バッファ領域に格納され得る送信データを読み取り、読み取った送信データをネットワーク1298へ送信する、又はネットワーク1298から受信した受信データを、記録媒体に設けられた受信バッファ領域に書き込む。入出力コントローラ1294は、推論環境1296などの様々な入出力ユニットに、パラレルポート、シリアルポート、キーボードポート、マウスポート、モニターポート、及び、コマンドを受け入れたり情報を表示したりするそのようなもので接続する。推論環境1296は
図2のハードウェアチップ250などニューラルネットワーク推論を実行できるハードウェアチップであってよく、又は、スマートフォンやスマートカー等など、それらもメモリと通信するハードウェアチップを含むような、プロセッサ及びメモリを有するコンピュータ又はそれと同様のデバイスであってよい。
【0090】
論理部1270は、取得部1272、分割部1274及び生成部1277を含み、分割部1274はシミュレート部1275を含む。格納部1280は、計算グラフ1282、ハードウェアチップ構成1284、候補1286、シミュレーション環境1287及び命令1289を含む。
【0091】
取得部1272は、推論のハードウェア固有分割に対する情報を取得する論理部1270の一部である。例えば、取得部1272は、計算グラフ及びハードウェアチップ構成を構成してよい。取得部1272は、取得された情報を計算グラフ1282及びハードウェアチップ構成1284として格納部1280に格納してよい。取得部1272は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【0092】
分割部1274は、推論のハードウェア固有分割のための推論を分割する論理部1270の一部である。例えば、分割部1274は、ニューラルネットワークの複数の層の推論を複数のグループに分割するよう構成されてよく、各グループはハードウェアチップによってニューラルネットワークの推論を実行するための持続時間及びエネルギー消費の推定に基づいた数の順次的な層を含む。分割中に、分割部1274は計算グラフ1282、ハードウェアチップ構成1284及び候補1286にアクセスしてよい。分割部1274は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【0093】
シミュレート部1275は、特定のハードウェアチップによるニューラルネットワークの推論の実行をシミュレートする論理部1270の一部である。例えば、シミュレート部1275は、複数のグループ分割候補の各々に対するハードウェアチップの持続時間及びエネルギー消費の推定を決定するべく当該ハードウェアチップによるニューラルネットワークの推論の実行をシミュレートするよう構成されてよい。シミュレート中、シミュレート部1275は、計算グラフ1282、ハードウェアチップ構成1284、候補1286、シミュレーション環境1287及び命令1289にアクセスしてよい。シミュレート部1275は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【0094】
生成部1277は、推論のハードウェア固有分割ための命令を生成する論理部1270の一部である。例えば、生成部1277は、ハードウェアチップが複数のグループのニューラルネットワークの推論を、グループごとに順次、実行するための命令を生成するよう構成されてよい。命令はシミュレート部1275によってなどの、シミュレーションのために用いられてよく、又は、ハードウェアチップに直接用いられてよい。命令の生成中、生成部1277は、計算グラフ1282、ハードウェアチップ構成1284、候補1286及び命令1289にアクセスしてよい。生成部1277は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連付けられた名前によって呼ばれてよい。
【0095】
他の実施形態において、装置は、ここでの処理を実行するために論理的機能を処理することができるいかなる他のデバイスであってよい。装置は、入力、出力及び全ての情報が直接接続された環境において、ネットワークに接続される必要はなくてよい。論理部及び記憶部は完全に切り離された装置である必要はなく、1又は複数のコンピュータ可読媒体を共有し得る。例えば、記憶部は、論理セクションによってアクセスされる、コンピュータが実行可能な命令及びデータの両方を記憶するハードドライブであってよく、論理セクションは、中央処理装置(CPU)及びランダムアクセスメモリ(RAM)の組み合わせであってよく、論理セクションでは、本書のプロセスの実行中にCPUによって実行されるために、コンピュータが実行可能な命令が全体的に又は部分的に複製され得る。
【0096】
装置がコンピュータである実施形態において、当該コンピュータにインストールされるプログラムは、当該コンピュータに、本発明の実施形態の装置又はそれらの1又は複数のセクション(モジュール、コンポーネント、要素などを含む)として機能させ、又は、それらに関連付けられた操作を実行させ、及び/又は、当該コンピュータに本発明の実施形態の処理又はそれらのステップを実行させ得る。上記プログラムはプロセッサによって実行され、コンピュータに、本書に記載のフロー図及びブロック図のブロックの一部又は全てに関連付けられた特定の操作を実行させ得る。
【0097】
本発明の様々な実施形態は、ブロックが(1)操作が実行されるプロセスのステップ、又は(2)操作を実行する役割を果たす装置のセクションを表し得るフロー図及びブロック図を参照して、説明することができる。あるステップ及びセクションは、専用回路、コンピュータ可読媒体上に記憶されたコンピュータ可読命令が供給されているプログラマブル回路、及び/又はコンピュータ可読媒体上に記憶されたコンピュータ可読命令が供給されているプロセッサによって実装され得る。専用回路は、デジタル及び/又はアナログハードウェア回路を含んでいてよく、集積回路(IC)及び/又は個別の回路を含み得る。プログラマブル回路は、論理AND、OR、XOR、NAND、NOR、及び他の論理演算、フリップ−フロップ、レジスタ、メモリ素子等、例えばフィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理アレイ(PLA)等などを含む再構成可能なハードウェア回路を含み得る。
【0098】
本発明は、システム、方法、及び/又は、コンピュータプログラムプロダクトであり得る。コンピュータプログラム製品は、プロセッサに本発明の態様を実現させるためのコンピュータ可読プログラム命令を有する(1又は複数の)コンピュータ可読記憶媒体を含んでよい。
【0099】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持及び保存できる有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、ただしこれに限定されないが、電気的格納デバイス、磁気的格納デバイス、光学的格納デバイス、電磁気的格納デバイス、半導体格納デバイス、又は、それらの任意の好適な組み合わせであってよい。コンピュータ可読記憶媒体のより詳細な例の非限定的リストは以下を含む:ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログミング可能リードオンリメモリ(EPROM又はフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)ポータブルコンパクトディスクリードオンリメモリ(CD−ROM)、デジタルバーサタイルディスク(DVD)、メモリスティック、フロッピディスク、パンチカードや、その上に記録された命令を有する溝内の突起構造などの機械的に暗号化されたデバイス、それらの任意の好適な組み合わせ。コンピュータ可読記憶媒体は、ここで用いられる場合において、ラジオ波や他の自由に伝搬する電磁波、導波管や他の伝送媒体を介して伝搬する電磁波(例えば光ファイバケーブルを透過する光パルス)、又は、電線を介して伝送される電気信号、などの一時的な信号それ自体と解釈されるべきでない。
【0100】
ここで記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から対応する計算・処理デバイス又は外部コンピュータ若しくは外部格納デバイスへ、例えばインターネット、ローカルエリアネットワーク、ワイドエリアネットワーク及び/又は無線ネットワークなどのネットワークを介して、ダウンロードされ得る。ネットワークは、銅送信ケーブル、光送信ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ及び/又はエッジサーバーを備えてよい。各計算・処理デバイスのネットワークアダプターカード又はネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、各々の計算・処理デバイス内のコンピュータ可読記憶媒体に格納するためのコンピュータ可読プログラム命令を送る。
【0101】
本発明の操作を遂行するコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャー(ISA)命令、機械的命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++等のオブジェクト指向プログラミング言語、及び、"C"プログラミング言語や同様のプログラミング言語など従来の手続きプログラミング言語を含む、1又は複数ののプログラミング言語のいずれかの組み合わせで書かれたソースコード又はオブジェクトコードのいずれかであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全て実行され得るか、スタンドアロンのソフトウェアパッケージとして部分的にユーザのコンピュータ上で実行され得るか、部分的にユーザのコンピュータ上で、部分的にリモートコンピュータ上で実行され得るか、又は、リモートコンピュータ又はサーバ上で全て実行され得る。後者のシナリオにおいて、リモートコンピュータは、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを通してユーザのコンピュータに接続されてもよく、又は外部コンピュータ(例えばインターネットサービスプロバイダを用いてインターネットを通して)接続が行われてもよい。いくつかの実施形態において、例えば、プログミング可能論理回路、フィールドプログラマブルゲートアレイ(FPGA)又はプログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行するため、電子回路を適合させるコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行してよい。
【0102】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。その様な変更又は改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【0103】
特許請求の範囲、明細書、及び図面中において示した装置、システム、プログラム、及び方法における操作、手順、ステップ、及び段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、及び図面中の操作フローに関して、便宜上「まず、」、「次に、」等のフレーズを用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
複数の次元仕様候補の各々に対して前記ハードウェアチップの少なくとも持続時間又はエネルギー消費の前記推定を決定するべく、前記ハードウェアチップによる前記ニューラルネットワークの推論の実行をシミュレートすることと、
各次元仕様候補の少なくとも持続時間又はエネルギー消費の前記推定を比較することとによって、各層の前記部分の次元を決定することをさらに備え、
各次元仕様候補は前記オンチップメモリの容量及び前記ハードウェアチップの並列度に基づいている請求項1から5のいずれか1項に記載のコンピュータプログラム。
前記少なくとも一つの畳み込みモジュールは、少なくとも一つの専用のDW(depth−wise)畳み込みモジュール及び少なくとも一つのPW(point−wise)畳み込みモジュールを含む請求項7に記載のコンピュータプログラム。
前記少なくとも一つのモジュールは、活性化操作を実行するための少なくとも一つのモジュールと、前記活性化データを前記外部メモリから前記オンチップメモリ上に読み込むための少なくとも一つのモジュールと、活性化データを前記オンチップメモリから前記外部メモリへ格納するための少なくとも一つのモジュールと、前記畳み込みニューラルネットワークの重み付けを前記外部メモリから前記オンチップメモリへ読み込むための少なくとも一つのモジュールとをさらに含む請求項7又は8に記載のコンピュータプログラム。
前記命令を生成することは、前記ハードウェアチップの前記少なくとも一つのモジュールがデータを前記外部メモリから前記割り振られた位置への読み込みを実行するための命令を生成することを含む請求項12に記載のコンピュータプログラム。
前記ハードウェアチップに対して命令を生成することは、従属性のある操作の相互の順序を保持するために注釈を付した同期フラグをさらに含む請求項1から13のいずれか1項に記載のコンピュータプログラム。
前記ハードウェアチップに対する命令を生成することは、命令を2進表現に変換することをさらに含む 請求項1から14のいずれか1項に記載のコンピュータプログラム。
前記ハードウェアチップは、複数のコア、前記数学的操作を実行するための前記少なくとも一つのモジュール及び前記複数のコア間に分配された前記オンチップメモリをさらに含み、
各コアは、コア間通信のため構成された少なくとも一つの送信機ブロック及び少なくとも一つの受信機ブロックを含み、
前記ハードウェアチップに対して命令を生成することは、前記コアに命令を分配することをさらに含む請求項1から15のいずれか1項に記載のコンピュータプログラム。