(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-21
(45)【発行日】2024-05-29
(54)【発明の名称】複数の入力データセットのための処理
(51)【国際特許分類】
G06N 3/063 20230101AFI20240522BHJP
【FI】
G06N3/063
【外国語出願】
(21)【出願番号】P 2022113941
(22)【出願日】2022-07-15
(62)【分割の表示】P 2020551487の分割
【原出願日】2019-03-19
【審査請求日】2022-07-15
(32)【優先日】2018-03-22
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-03-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506329306
【氏名又は名称】アマゾン テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】100137969
【氏名又は名称】岡部 憲昭
(74)【代理人】
【識別番号】100104824
【氏名又は名称】穐場 仁
(74)【代理人】
【識別番号】100121463
【氏名又は名称】矢口 哲也
(72)【発明者】
【氏名】ヴァントリーズ,ダナ ミシェル
(72)【発明者】
【氏名】ディアマント,ロン
(72)【発明者】
【氏名】ヴォルペ,トーマス エー.
(72)【発明者】
【氏名】ファン,ランディ
【審査官】山田 辰美
(56)【参考文献】
【文献】Yongming Shen, et al.,Maximizing CNN Accelerator Efficiency Throug h Resource Partitioning,Proceedings of 2017 ACM/IEEE 44th Annual Inter national Symposium on Computer Architecture (ISCA),米国,IEEE,2017年06月28日,p.535-p.547,https://ieeexplore.ieee.org/document/8192499
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/063
(57)【特許請求の範囲】
【請求項1】
状態バッファとして構成されたメモリデバイスと、
前記メモリデバイスと結合され、処理要素の配列を備える計算エンジンであって、前記処理要素の前記配列の各々が加算器および乗算器を備える、計算エンジンと
を備える、集積回路であって、
前記計算エンジンが、
ニューラルネットワークの第2の層に関連付けられた重みの第1のセットを前記状態バッファから取得することと、
第1のデータの第2の層出力を生成するために、重みの前記第1のセットと前記第1のデータとの間で加算および乗算の第1のセットを実行することと、
前記第1のデータの前記第2の層出力が生成された後、前記ニューラルネットワークの第1の層に関連付けられた重みの第2のセットを前記状態バッファから取得することと、
第2のデータの第1の層出力を生成するために、重みの前記第2のセットと前記第2のデータとの間で加算および乗算の第2のセットを実行することと、
前記第2のデータの第2の層出力を生成するために、重みの前記第1のセットと前記第2のデータの前記第1の層出力との間で加算および乗算の第3のセットを実行することと、
前記ニューラルネットワークの第3の層に関連付けられた重みの第3のセットを前記状態バッファから取得することと、
前記第1のデータを処理した第1の結果を生成するために、重みの前記第3のセットと前記第1のデータの前記第2の層出力との間で加算および乗算の第4のセットを実行することと、
前記第2のデータを処理した第2の結果を生成するために、重みの前記第3のセットと前記第2のデータの前記第2の層出力との間で加算および乗算の第5のセットを実行することと
を行うように構成され、
加算および乗算の前記第4のセット、ならびに加算および乗算の前記第5のセットが、前記処理要素の前記配列の異なる部分によって実行され、
前記
第2の層が前記第1の層の出力を受け取り、前記第3の層が前記第2の層の出力を受け取る、
集積回路。
【請求項2】
前記計算エンジンが、
前記第1のデータの前記第2の層出力を前記状態バッファに格納することと、
重みの前記第3のセットと、前記状態バッファから取得された前記第1のデータの前記第2の層出力との間で加算および乗算の前記第4のセットを実行することと
を行うようにさらに構成される、請求項1に記載の集積回路。
【請求項3】
前記計算エンジンが、加算および乗算の前記第4のセットならびに加算および乗算の前記第5のセットを実質的に並行して実行するように構成される、請求項1または2に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【0001】
[0001]人工ニューラルネットワークは、生体ニューラルネットワークに基づくアーキテクチャを有するコンピューティングシステムである。人工ニューラルネットワークは、トレーニングデータを使用して、特定の計算タスクを実行する方法について学習するためにトレーニングすることができる。たとえば、トレーニングデータは、所定のオブジェクトに関連付けられた画像データを含んでよい。訓練された人工ニューラルネットワークは、(たとえば、様々な場所で、様々な時間に、様々な人によってキャプチャされ、様々な情報を搬送する)様々なコンテキストを表す複数の画像(または複数の画像セット)を処理して、画像または画像セットが所定のオブジェクトの画像データを含むかどうかを判定することができる。
【発明の概要】
【課題を解決するための手段】
【0002】
[0002]ニューラルネットワークは処理ノードのセットを含んでよい。各処理ノードは、入力データの一部を処理して出力を生成することができ、最終的な決定は、処理ノードのセットの出力の組合せに基づいて生成することができる。処理の一部として、各処理ノードは、たとえば浮動小数点の乗算および加算などの算術演算のセットを実行することができる。処理ノードの算術演算は、グラフィック処理ユニット(GPU)などの高速算術演算用に最適化された回路およびデータ経路によって実行されてよい。
【図面の簡単な説明】
【0003】
【
図1】本明細書に開示される技法を使用して画像を処理する例示的なデータ処理デバイスを示す図である。
【
図2A】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【
図2B】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【
図2C】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【
図2D】本開示のいくつかの態様による、本明細書に開示される技法を使用する予測モデルの簡略ブロック図である。
【
図3A】本開示のいくつかの態様による、
図2の予測モデルを実装するための装置の内部構成要素のうちのいくつかについての簡略ブロック図である。
【
図3B】本開示のいくつかの態様による、
図2の予測モデルを実装するための装置の内部構成要素のうちのいくつかについての簡略ブロック図である。
【
図3C】本開示のいくつかの態様による、
図2の予測モデルを実装するための装置の内部構成要素のうちのいくつかについての簡略ブロック図である。
【
図4】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理を実行するようにコンピューティングシステムを動作させる例示的なシーケンスを示す図である。
【
図5】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理を実行するようにコンピューティングシステムを動作させる例示的なシーケンスを示す図である。
【
図6】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理を実行するようにコンピューティングシステムを動作させる方法の例示的なフローチャートである。
【
図7A】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【
図7B】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【
図7C】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【
図7D】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【
図7E】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【
図7F】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【
図7G】本開示のいくつかの態様による、複数のデータセットの多層ニューラルネットワーク処理をスケジュールするスケジューリング方式の一例を示す図である。
【
図8】本開示のいくつかの態様による、計算エンジンの動作をスケジュールする例示的なフロー図である。
【
図9】本開示のいくつかの態様による、コンピューティングデバイスの一例を示す図である。
【発明を実施するための形態】
【0004】
[0011]以下の説明では、様々な実施形態が記載される。説明の目的で、実施形態を完全に理解するために具体的な構成および詳細が示される。しかしながら、実施形態が具体的な詳細なしに実践されてよいことも当業者には明らかであろう。さらに、記載されている実施形態を不明瞭にしないために、周知の特徴が省略または簡略化される場合がある。
【0005】
[0012]本開示の実施形態は、複数のコンテキストについての多層ニューラルネットワーク用の計算を実行するように計算エンジンを動作させる方法に関する。多層ニューラルネットワークは、第1のニューラルネットワーク層、第1のニューラルネットワーク層からデータを受け取る第2のニューラルネットワーク層、および第2のニューラルネットワーク層からデータを受け取る第3のニューラルネットワーク層を含んでよい。一例では、計算エンジンは、第1のコンテキストについての計算を実行するために第1のニューラルネットワーク層として構成さすることができ、次いで、第1のコンテキストについての計算を実行するために第2のニューラルネットワーク層として構成することができ、第1のコンテキストについての第2のニューラルネットワーク層計算の出力を格納することができる。次いで、計算エンジンは、第2のコンテキストについての計算を実行するために第1のニューラルネットワーク層にもう一度切り替えることができ、次いで、第2のコンテキストについての計算を実行するために第2のニューラルネットワーク層として構成することができる。第2のコンテキストについての第2のニューラルネットワーク層計算の出力は、格納することができる。次いで、計算エンジンは、第1のコンテキストについての計算と第2のコンテキストについての計算を並行して実行するために、第3のニューラルネットワーク層として構成することができる。
【0006】
[0013]本開示の実施形態はまた、複数のコンテキストについての多層ニューラルネットワーク計算を実行するための計算エンジンにおける動作をスケジュールする方法に関する。上記の例を参照すると、スケジューリング方法は、様々なコンテキストについての様々なニューラルネットワーク層の計算用の実行バッチを決定することを含んでよい。スケジューリングは、最高レベルのニューラルネットワーク層(たとえば、第3のニューラルネットワーク層)から開始し、最高レベルのニューラルネットワーク層用の1つまたは複数の実行バッチを決定することができる。次いで、下層(たとえば、第2のニューラルネットワーク層)用の1つまたは複数の実行バッチを決定し、最高レベルのニューラルネットワーク層用の実行バッチの前にスケジュールすることができる。実行バッチの決定は、利用可能なバッファスペースに基づくことができる。バッファがすべてのコンテキストについての1つのニューラルネットワーク層の計算に必要なスペースを提供することができない場合、計算は複数のバッチに分割することができ、分割は、(将来の実行バッチに提供されるべき)以前の実行バッチから生成された出力データ、ならびに実行中のバッチの入出力データを格納するのに十分なスペースを、バッファが提供することができるように実行することができる、
【0007】
[0014]人工ニューラルネットワーク(本明細書では、以下「ニューラルネットワーク」)は、複数の処理ノードを含んでよい。深層ニューラルネットワーク(DNN)の場合、処理ノードは、たとえば、入力層、いくつかの(隠れ層としても知られる)中間層、および出力層を含む層に分割することができる。入力層の各処理ノードは、入力セットの要素を受け取り、出力に対する要素の影響度を示すために、重みで要素をスケーリングする。中間層内の処理ノードは、入力層の各処理ノードから受け取ったスケーリングされた要素を組み合わせて、中間出力のセットを計算することができる。たとえば、中間層内の各処理ノードは、要素と重みの積の合計を計算し、次いで、その合計に活性化関数を適用することによって中間出力を生成することができる。1つの中間層の各処理ノードからの中間出力は、次の中間層の中間出力を決定するために、投票の影響を示す重みに関連付けられた活性化された投票(または投票なし)と見なされてよい。出力層は、最終中間層からのスケーリングされた中間出力の合計を生成し、スケーリングされた中間出力の合計がしきい値を超えるかどうかに基づいて、バイナリ出力(たとえば、「はい」または「いいえ」)を生成することができる。層間のスケーリングされた要素の組合せに起因して、上位層(たとえば、出力層、出力層の直前の中間層など)のサイズは、通常、下位層(たとえば、入力層、入力層の直後の中間層など)のサイズよりも小さい。
【0008】
[0015]以下で説明されるように、処理ノードは、グラフィック処理ユニット(GPU)などの高速算術演算用に最適化された回路およびデータ経路によって実装されてよい。たとえば、回路は、データ経路を介して一緒にリンクされた計算ユニットの配列を含んでよい。計算ユニットは、バッファから1つまたは複数の重みおよび1つまたは複数の入力を取得して、スケーリング演算(たとえば、重みのセットによる入力のスケーリング)および/または加算演算(たとえば、別の計算ユニットから受け取ったスケーリングされた入力の組合せ)を実行することができる。多層ニューラルネットワーク処理を実行するために、データ経路は、様々なニューラルネットワーク層に関連付けられた様々な重みおよび入力のセットを様々な時間に様々なバッファから取得し、計算を実行するために計算ユニットに重みおよび入力を転送するように構成することができる。たとえば、第1の時間期間では、計算ユニットは入力層として構成されてよく、データ経路は、バッファから重みの第1のセットおよび入力データセットを取得し、重みの第1のセットおよび入力データセットを計算ユニットに転送するように構成されてよい。計算ユニットは、スケーリングおよび組合せ演算を実行して、中間出力の第1のセットを計算し、重みおよび入力データセットから別々に中間出力の第1のセットをバッファに格納して、計算ユニットに配信されるべき重みおよび入力データセットの上書きを回避することができる。第2の時間期間では、計算ユニットは、中間出力の第2のセットを計算するために第1の中間層として構成されてよく、データ経路は、中間出力の第1のセットおよび重みの第2のセットをバッファから取得し、中間出力の第1のセットおよび重みの第2のセットを計算ユニットに送信して計算を実行するように構成することができる。計算ユニットが出力層のための計算を実行するまで、処理を繰り返すことができる。
【0009】
[0016]そのような構成は、ニューラルネットワーク処理を実行するために必要な計算ユニットの数を削減することができるが、計算ユニットの利用率は処理中に低下する可能性がある。たとえば、上述されたように、上位層のサイズは、通常、下位層のサイズよりも小さい。計算ユニットの配列が入力データの単一セットに対してニューラルネットワーク処理を実行するように構成された場合、データが下位層から上位層に伝播するにつれて、計算に関与する計算ユニットの数が減少する可能性がある。上位層のための計算が実行されているときに、下位層のための計算に含まれた計算ユニットのいくつかはアイドルになってよく、計算ユニットの利用率の低下につながる。
【0010】
[0017]より高い利用率を達成するために、計算ユニットの配列は、ロックステップ方式で複数の入力データセット(または様々なコンテキストに関連付けられた入力データ)を処理するように構成することができる。たとえば、計算ユニットの配列は、コンテキストごとの下位層(たとえば、入力層、下位中間層など)のための計算を順次実行するように構成することができ、下位層のための計算は、より大きい入力データセットおよび重みセットを含み、より多くの計算ユニットおよびより多くのバッファスペースを必要とする場合がある。下位層の計算が完了した後、計算結果をバッファに格納することができる。次いで、計算ユニットの配列は、バッファに格納された下位層の計算結果に基づいて、次の層(たとえば、上位中間層、出力層など)の複数のコンテキストについての並列計算を実行するように構成することができる。次の層のための計算は、より小さい入力データセットおよび重みセットを含んでよく、より少ない数の計算ユニットによって処理することができ、バッファは、より多数のコンテキストの次の層計算用の入出力データを収容することもできる。
【0011】
[0018]そのような構成は比較的高い利用率を維持することができるが、ニューラルネットワークの特定の層のための計算結果全体を格納して、次の層のための計算に中間出力を提供するために、大きいバッファが必要とされる場合がある。上位層の計算についての利用率をさらに向上させるために、計算ユニットの配列に多数のデータセットが入力されると、バッファの必要なサイズがさらに増大する可能性がある。バッファを実装するために、より多数のメモリユニットおよび関連するインターフェース回路が必要とされる場合がある。これらはすべて、消費電力ならびにチップスペースを増大させる可能性があり、それは、ニューラルネットワークアーキテクチャを使用する計算および問題解決のためのコンピューティングデバイスおよびアプリケーションの導入を大幅に制限する可能性がある。
【0012】
[0019]本開示の実施形態は、複数のコンテキストについての多層ニューラルネットワーク用の計算を実行するように計算エンジンを動作させる方法に関する。一例では、方法は、計算エンジンを使用して、第1のコンテキストが第1のデータを生成するための第1のニューラルネットワーク層に関連付けられた第1の計算タスクを実行することと、計算エンジンを使用して、第1のデータに基づいて、第1のコンテキストが第2のデータを生成するための第2のニューラルネットワーク層に関連付けられた第2の計算タスクを実行することと、メモリデバイスに第2のデータを格納することと、計算エンジンを使用して、第2のコンテキストが第3のデータを生成するための第1のニューラルネットワーク層に関連付けられた第3の計算タスクを実行することと、計算エンジンを使用して、第3のデータに基づいて、第2のコンテキストが第4のデータを生成するための第2のニューラルネットワーク層に関連付けられた第4の計算タスクを実行することと、メモリデバイスに第4のデータを格納することと、計算エンジンを使用して、メモリデバイスに格納された第2のデータおよび第4のデータに基づいて、第5の計算タスクおよび第6の計算タスクを並列に実行することであって、第5の計算タスクおよび第6の計算タスクが、それぞれ、第1のコンテキストおよび第2のコンテキストについての第3のニューラルネットワーク層に関連付けられる、実行することとを含む。
【0013】
[0020]本開示の実施形態はまた、複数のコンテキストについての多層ニューラルネットワーク計算を実行するための計算エンジンにおける動作をスケジュールする方法に関する。上記の例を参照すると、スケジューリング方法は、第5の計算タスクおよび第6の計算タスクを含む第1の実行バッチを決定することと、メモリデバイスが第2の計算タスクの入力データおよび出力データならびに第4の計算タスクの出力データを格納するのに十分な容量を有することに基づいて、第2の計算タスクを含む第2の実行バッチおよび第4の計算タスクを含む第3の実行バッチを決定することであって、第2の実行バッチと第3の実行バッチの両方が第1の実行バッチの前に実行される、決定することと、メモリが第1の計算タスクの入力データおよび出力データならびに第4の計算タスクの出力データを格納するのに十分な容量を有することに基づいて、第2の実行バッチと第3の実行バッチとの間で実行されるべき第1の計算タスクを含む第4の実行バッチを決定することとを含んでよい。第1、第2、第3、および第4の実行バッチは、上述された複数のコンテキストについての多層ニューラルネットワーク計算の例示的な方法を実行するために、上記で決定された順序に従って実行することができる。
【0014】
[0021]前述のロックステップ方式と比較すると、本開示の実施形態は、計算の中間出力を格納するためのより小さいバッファで動作することができる。説明のための例として、ロックステップ方式では、計算エンジンは、第1のコンテキストと第2のコンテキストの両方についての第1のニューラルネットワーク層計算を完了し、次いで、第1のコンテキストと第2のコンテキストの両方についての第2のニューラルネットワーク層計算の実行に進むことができ、第1のコンテキストと第2のコンテキストの両方についての第3のニューラルネットワーク層計算がその後に続く。計算エンジンは、第2のコンテキストがその後に続く第1のコンテキストについての第1のニューラルネットワーク層計算を実行することができる。バッチ処理をサポートするために、バッファは、第2のコンテキストの進行中の第1のニューラルネットワーク層計算の入出力を格納するための第1の格納スペース、ならびに(第2のコンテキストの第1のニューラルネットワーク層計算が完了した後、第1のコンテキストの第2のニューラルネットワーク層計算への入力として提供されるべき)第1のコンテキストの完了した第1のニューラルネットワーク層計算の出力を格納するための第2の格納スペースを提供する必要がある。
【0015】
[0022]一方、本開示の実施形態では、計算エンジンは、第1のコンテキストについての第1のニューラルネットワーク層計算および第2のニューラルネットワーク層計算を完了し、第1のコンテキストの第2のニューラルネットワーク層出力を格納し、次いで、第2のコンテキストについての第1のニューラルネットワーク層計算の実行に進むことができる。第2のコンテキストについての第1のニューラルネットワーク層計算をサポートするために、バッファは、(上述されたロックステップ方式の説明のための例において必要な第1の格納スペースと同一の)第1の格納スペースを、第2のコンテキストについての第1のニューラルネットワーク層計算の入力データおよび出力データに提供する必要があり得る。バッファはまた、第1のコンテキストの完了された第2のニューラルネットワーク層計算の出力を格納するために第2の格納スペースを提供する必要がある。この場合の第2の格納スペースは、上述されたロックステップ方式の例の第2の格納スペースよりも小さい可能性がある。これは、第2のニューラルネットワーク層のサイズが、通常、第1のニューラルネットワーク層のサイズよりも小さく、第2のニューラルネットワーク層の出力データサイズも、通常、第1のニューラルネットワーク層の出力データサイズよりも小さいからである。したがって、計算エンジンが層を通って進行するにつれて、中間結果を格納するためにより小さいバッファを使用することができる。
【0016】
[0023]本開示の実施形態では、様々な入力データセットについての計算は、バッファ使用量を削減しながら、(たとえば、複数の入力データセットについての同時上位層計算を可能にすることにより)計算リソースの利用率を最大化するように配置することができる。結果として、計算をサポートするためにより小さいメモリデバイスを使用することができ、それにより、チップスペースおよび消費電力を削減することができる。
【0017】
[0024]
図1は、本明細書に開示される技法を使用してデータシーケンスを処理する例示的な分類器デバイス100を示す。分類器デバイス100は、たとえば、データシーケンスに含まれる情報を予測し、予測に基づいて所定の機能を実行するために、ソフトウェアアプリケーション102および予測モデル103を動作させるコンピューティングデバイスであり得る。たとえば、分類器デバイス100は、画像から特定のオブジェクト(たとえば、テキスト、人など)を識別するために提供される画像認識サービスの一部であり得る。画像認識サービスは単に説明のための例として提供され、本明細書に開示される技法は、たとえば、テキストベースのデータ処理(たとえば、検索クエリの処理)、オーディオデータ処理などを含む他のデータ処理アプリケーションに使用できることが理解される。
【0018】
[0025]画像認識サービスは、マルチテナント計算サービスシステムにおいて提供することができる。マルチテナント計算サービスシステムは、通常、データをホストすることができる複数のサーバを含んでよく、仮想マシンインスタンスまたはベアメタルインスタンス(たとえば、サーバハードウェア上で直接実行されるオペレーティングシステム)などのインスタンスを実行するために、複数のクライアントまたは組織によって使用することができる。ベアメタルまたは仮想マシンなどのインスタンスでは、マルチテナント計算サービスシステムは、クライアントがそれらを必要とするときにクライアントに割り当てられ、リソースが他のクライアントに再割当てすることができるように、それらが不要になったときに閉鎖されてよい。本開示では、「テナント」、「クライアント」、および「顧客」という用語は、交換可能に使用されてよいが、そのような用語は、必ずしも任意の特定のビジネス協定の存在を意味するものではない。「インスタンス」という用語は、たとえば、サーバハードウェア上で直接、または仮想マシンとして実行されるインスタンスを指す場合がある。様々なタイプのインスタンスは、一般に、様々なハードウェア機能および/またはハードウェアの配置(たとえば、様々な量の利用可能なメモリおよび/または処理ハードウェア)に対応する。
図1の例では、マルチテナント計算サービスシステムは、クライアントが画像認識サービスを必要とするときにそれを提供し、画像認識サービスをサポートするリソース(たとえば、ソフトウェアアプリケーション102へのアクセス、およびソフトウェアアプリケーション102を処理するための基礎となるハードウェアリソース)が他のクライアントに再割当てすることができるように、それが不要になったときにそれを閉鎖することができる。
【0019】
[0026]
図1に示されたように、ソフトウェアアプリケーション102は、ユーザから画像104のピクセルデータを受け取ることができる。画像104はピクセルの配列を含んでよい。ソフトウェアアプリケーション102は、ピクセルデータに対して分析を実行し、画像104に描写された1つまたは複数のオブジェクト106を予測することができる。分析は、たとえば、ピクセルデータを所定の画像特徴のセットと比較することを含んでよい。以下でより詳細に説明されるように、ソフトウェアアプリケーション102は、予測モデル203を利用して、画像104のピクセルデータに基づいてスコアのセットを計算することができる。スコアのセットは、たとえば、画像104が所定の画像特徴を含む可能性を表すことができる。次いで、ソフトウェアアプリケーション102は、スコアに基づいて、画像104のコンテンツに関する他の情報を特定することができる。たとえば、スコアに基づいて、ソフトウェアアプリケーション102は、画像104がパンダの画像であると判断することができる。
【0020】
[0027]予測モデル103は、人工ニューラルネットワークの形態であり得る。人工ニューラルネットワークは複数の処理ノードを含んでよく、各処理ノードは、入力ピクセルデータの一部を処理するか、または他の処理ノードからの中間出力をさらに処理するように構成される。
図2Aは、本明細書に開示される技法を使用する予測モデル103の一例を示す。
図2Aの例では、予測モデル103は、深層ニューラルネットワーク(DNN)、畳み込みニューラルネットワーク(CNN)などの多層ニューラルネットワークであってよい。予測モデル103は、入力層207、中間層209および211を含む一組の中間層、ならびに(
図2Aには示されていない)出力層を含んでよい。
【0021】
[0028]層207は、画像104の様々な部分を表すピクセルデータを処理することができる。
図2Aの例では、層207は、画像104のピクセルデータを処理することができる。層207の各処理ノードは、画像104内の所定のピクセルに対応するピクセル値(たとえば、x
0、x
1、x
2、…x
n)を受信し、受信されたピクセル値をもつ1つまたは複数の重みを層209に送信するように割り当てられる。予測モデル203がDNNである場合、層207の各処理ノードには、行列W1に基づいて定義された重みのセットを割り当てることができる。層207の各処理ノードは、受信されたたピクセル値および割り当てられた重みを層209の各処理ノードに送信することができる。予測モデル103がCNNである場合、層207の処理ノードのグループは重みのセットを共有することができ、各グループは、処理ノードのグループによって受信された重みのセットおよびピクセル値を層209の単一処理ノードに送信することができる。
【0022】
[0029]層209は、層207からのスケーリングされた出力を処理して、中間出力のセットを生成することができる。たとえば、層209の処理ノード210aが層207内のn個の処理ノードに接続されていると仮定すると、処理ノード210aは、以下の式に基づいて層207から受信されたスケーリングされた出力の合計を生成することができる。
【0023】
【0024】
[0031]ここで、Sum210aは、処理ノード210aによって生成された合計を表す。W1i×xiは、層207の処理ノードによる関連する重み(たとえば、W10)との特定のピクセル値(たとえば、x0)のスケーリングを表す。予測モデル203がDNNである場合、層209の各処理ノードは、層207の各処理ノードからのピクセル値のスケーリングに基づいて合計を生成し、次いで、スケーリングされたピクセル値を合計することにより合計(たとえば、Sum210a)を生成することができる。合計は、いくつかの要素(たとえば、ピクセル値)を含む入力ベクトルと重みベクトル(たとえば、W1)との間の内積を表すこともできる。
【0025】
[0032]一方、予測モデル103がCNNである場合、層209の各処理ノードは、層207の処理ノードのグループからのピクセル値のスケーリングに基づいて合計を生成することができる。合計は、ピクセル値のグループと重み値を含むフィルタとの間の畳み込み結果を表すことができる。
図2Bは、層209が実行することができる畳み込み演算の一例を示す。
図2Bでは、フィルタ230は重みの2次元配列を含んでよい。フィルタ230の重みは、画像から検出されるべきいくつかの特徴に対するピクセルの空間分布を表すことができる。2次元配列は、R行の高さおよびS列の幅を有することができ、通常、Hピクセルの高さおよびWピクセルの幅をもつ入力画像よりも小さい。各重みは、同じR行およびS列をもつピクセル値の長方形ブロック内のピクセルにマッピングされてよい。層209の処理ノード(たとえば、処理ノード210a)は、入力層207の処理ノードのグループから、入力画像からのピクセルの第1の長方形ブロックに対応するピクセル値のグループ240を受け取り、式1に従って、フィルタ230の各重みとグループ240内の対応する各ピクセルとの間の乗算結果の合計に基づいて畳み込み出力242を生成して、フィルタ230によって表される行列とグループ240によって表される行列との間の内積を生成することができる。層209の別の処理ノードは、入力層207の処理ノードの別のグループから、入力画像からのピクセルの第2の長方形ブロックに対応するピクセル値のグループ244を受け取り、式1に従って、フィルタ230の各重みとグループ244内の対応する各ピクセルとの間の乗算結果の合計に基づいて畳み込み出力246を生成して、フィルタ230の行列とグループ240によって表される行列との間の内積を生成することもできる。いくつかの例では、
図2Bの各畳み込み出力(たとえば、畳み込み出力242、畳み込み出力246など)は、層209の処理ノードの出力に対応することができる。いくつかの例では、入力画像内のピクセルデータは、ピクセルが特定の特徴に対応する同じフィルタ(またはフィルタの同じセット)によって処理されることを示すために、入力特徴マップと呼ばれる場合がある。畳み込み出力は、出力がフィルタを用いて入力特徴マップを処理した結果であることを示すために、出力特徴マップと呼ばれる場合がある。
【0026】
[0033]
図2Bに示されたように、畳み込み演算は、第2の長方形ブロックが入力画像内の第1の長方形ブロックと重複するか、またはそうでない場合隣接するように、スライディングウィンドウ内に配置することができる。たとえば、
図2Bの例では、Dは、畳み込み演算ごとのスライディングウィンドウのストライドの距離(ピクセル単位)であってよく、その結果、グループ244に対応するピクセルのブロックは、グループ240に対応するピクセルのブロックから距離D(ピクセル単位)に位置してよく、ピクセルの次のブロックも、グループ244から同じ距離Dに位置してよい。層209の他の処理ノードは、他の長方形ブロックに対応するピクセルのグループを受け取り、他の中間出力を生成することもできる。畳み込み出力は、E行の高さおよびF列の幅をもつ畳み込み出力配列280の一部であり得る。畳み込み出力の配列は、入力画像よりも小さい高さおよび小さい幅をもつことができる。畳み込み出力の長方形ブロックはさらにグループ化することができ、畳み込み出力のグループとフィルタ重みの別のセットとの間の層211において畳み込み演算を実行して、畳み込み出力の別のセットを生成することができる。
【0027】
[0034]いくつかの例では、畳み込み演算は、複数の画像と複数のフィルタとの間で実行することができる。たとえば、
図2Cを参照すると、C個のフィルタ260のセットは、数(C)の画像270に対応することができ、畳み込み演算は、フィルタ260のセットの各フィルタと画像270の対応する画像上のピクセルのブロックとの間で実行することができる。フィルタ画像ペアごとの畳み込み結果は、以下のように畳み込み出力を生成するために合計することができる。
【0028】
【0029】
[0036]ここで、畳み込み演算は画像(またはピクセル配列)XC
eD+r,fD+sを含み、それは、eD+rの水平ピクセル座標およびfD+sの垂直ピクセル座標を有する数(C)の画像370内の、インデックスcの画像にあるピクセルの値を参照してよい。Dはスライディングウィンドウのストライド距離であるが、eおよびfは畳み込み出力配列内の出力の位置に対応し、畳み込み出力配列は特定のスライディングウィンドウに対応することもできる。さらに、rおよびsはスライディングウィンドウ内の特定の位置に対応する。(r,s)位置にあるピクセルおよびインデックスcの画像は、同じ(r,s)位置にある同じインデックスcの対応するフィルタ内の重みWc
r,sに対応することもできる。式2は、畳み込み出力0e,fを計算するために、((e,f)によってインデックス付けされた)スライディングウィンドウ内の各ピクセルが対応する重みWc
r,sで乗算されてよいことを示す。画像セット内の画像の各々についての各スライディングウィンドウ内の乗算積の部分合計を計算することができ、次いで、画像セットのすべての画像についての部分合計の合計を計算することができる。
【0030】
[0037]その上、いくつかの例では、フィルタの複数のセットは、画像のセットで畳み込み演算を実行して、畳み込み出力配列のセットを生成するために使用することができ、各畳み込み出力配列はフィルタのセットに対応する。たとえば、フィルタの複数のセットは、画像のセットから検出されるべき複数の画像特徴に対応することができ、各畳み込み出力配列は、画像のセットからの画像特徴ごとの検出結果に対応する。たとえば、M個のセットのフィルタがM個の畳み込み出力配列を生成するためにC個の画像に適用される場合、式2は以下のように更新することができる。
【0031】
【0032】
[0039]ここで、畳み込み出力0e,f
mおよび重みWc,m
r,sは、M個のセットのフィルタの1つに対応するインデックスmを有する。
【0033】
[0040]
図2Dは、M個のセットのフィルタ(M=2)で畳み込まれるべきC個のセットの入力データセット(C=3)の一例を示す。入力データの各セットはピクセルグループのエントリに対応する。たとえば、ピクセルグループ282、286、および290の各々は、1つの入力データセットに対応してよい。M個のセットのフィルタの各々は、C個のセットの入力ピクセル配列に対応するC個のフィルタのセットを含む。
図2Dの例では、2つのフィルタセットが存在し、第1のフィルタセットは、フィルタ配列284a、284b、および284cを含み、第2のフィルタセットは、フィルタ配列288a、288b、および288cを含む。畳み込み演算は、M個のセットの出力データセットを生成し、各出力データセットは畳み込み出力配列に対応する。
図2Dの例では、2つの畳み込み出力配列294および296が生成される。各畳み込み出力配列は、フィルタの(M個のセットのうちの)1つのセットを入力ピクセル配列と畳み込むことに対応する。たとえば、畳み込み出力配列294の第1の要素O
0,0
0は、ピクセルグループ282とフィルタ配列284aとの間のドット積、ピクセルグループ286とフィルタ配列284bとの間のドット積、およびピクセルグループ290とフィルタ配列284cとの間のドット積の合計によって生成することができる。
【0034】
[0041]
図2Aを再び参照すると、層209の1つの処理ノードは、1つの畳み込み出力配列を生成するように構成されてよく、層209の処理ノードのセットMは、畳み込み出力配列のセットMに対応することができる。層209の処理ノードは、たとえば、活性化関数で各畳み込み出力を後処理して、層209についての最終出力を生成することもできる。活性化関数は、畳み込み出力(またはサブサンプル)を、畳み込み出力(またはサブサンプル)を上位層に転送するかどうかの判断に変換することができる。判断の生成は、生体ニューロンの発火に類似する可能性がある。活性化関数の一例は、以下の式に従って定義された整流線形ユニット(ReLu)であり得る。
【0035】
[0042]ReLu(y)=max(0,y) (式4)
【0036】
[0043]層209の処理ノード(たとえば、処理ノード210a)は、式4に基づいて中間出力を生成するために、ReLu関数で畳み込み出力サブサンプルを処理することができる。加えて、層209の処理ノードは、中間出力の数を削減するために、プーリング動作などの他の後処理動作を実行することもできる。層209は、後処理された中間出力を層211に提供することができ、層211は、フィルタの様々なセットに基づいて追加の畳み込み演算を実行することができる。層211の各処理ノードからの出力は、他のより高い中間層、または(
図2Aには示されていない)出力層に転送されてよい。出力層は、たとえば、特定の画像特徴が
図2Aの画像104(または
図2Dの入力ピクセル配列のセットによって表された画像のセット)に含まれる確率を表す出力ベクトルを形成して、特定のコンテキストに関連付けられた画像または画像のセットがパンダの画像を含むかどうかを判定することができる。たとえば、出力ベクトルは、パンダの鼻オブジェクトに関連付けられた基準ベクトル、またはパンダに関連付けられた基準ベクトルと比較され、比較結果に基づいて判断をもたらすことができる。モデル103の複数のインスタンスは、複数のコンテキストに関連付けられた複数の画像(または画像の複数のセット)を処理して、コンテキストの各々についての判断をもたらすために使用することができる。
【0037】
[0044]
図3Aは、本開示のいくつかの実施形態による装置300を示す。装置300は、コンピュータシステム、たとえば、ホストサーバの一部であってよい。装置300は、マルチテナント計算サービスシステムの一部であってよく、計算サービスに計算リソースおよびメモリリソースを提供するために、(
図3Aには示されていない)ホストデバイスと通信することができる。たとえば、
図1を再び参照すると、装置300は、予測モデル103を用いた計算に計算リソースおよびメモリリソースを提供することができる。ホストデバイスは、ソフトウェアアプリケーション102を動作させ、装置300と通信して、予測モデル103を用いた計算に基づいて1つまたは複数の画像認識タスクを実行することができる。ホストデバイスは、複数のコンテキストに関連付けられた複数の画像データセットを送信し、複数の画像データセットを装置300に提供することができ、装置300は複数の出力を生成して、たとえば、複数の画像データセットの各々が所定のオブジェクトを含むかどうかを予測することができる。
【0038】
[0045]
図3Aの例では、装置300は、相互接続318を介して、メモリ312に結合されたニューラルネットワークプロセッサ302、ダイレクトメモリアクセス(DMA)コントローラ316、およびホストインターフェース314を含んでよい。より詳細に説明されるように、ニューラルネットワークプロセッサ302は、予測モデル103を用いた計算をサポートするために計算リソースを提供することができる。メモリ312は、ホストデバイスから受信された命令、入力データ(たとえば、
図2Dのピクセルグループ282、286、および290)、ならびに重み(たとえば、フィルタ配列284a、284b、284c、288a、288b、および288c)を格納するように構成されてよい。メモリ312はまた、ニューラルネットワークプロセッサ302の出力(たとえば、
図2Dの畳み込み出力配列294および296)を格納するように構成されてよい。メモリ312は、任意の適切なメモリ、たとえば、ダイナミックランダムアクセスメモリ(DRAM)、同期型DRAM(SDRAM)、ダブルデータレートDRAM(DDR DRAM)、ストレージクラスメモリ(SCM)、フラスメモリデバイスなどを含んでよい。
【0039】
[0046]DMAコントローラ316は、ニューラルネットワークプロセッサ302とホストデバイスとの間でデータを転送するためにDMA動作を実行するように構成されてよい。たとえば、上述されたように、ホストデバイスは、命令、入力データ、および重みをメモリ312に格納することができる。ホストデバイスは、格納された命令、データ、および重みのメモリアドレスを(たとえば、メモリ記述子の形態で)ニューラルネットワークプロセッサ302に提供することができる。次いで、ニューラルネットワークプロセッサ302は、ホストデバイスによって提供されたメモリアドレスに基づいて、格納された命令、データ、および重みを取得することができる。ニューラルネットワークプロセッサ302はまた、メモリ312に計算結果(たとえば、1つまたは複数の画像認識判断)を格納し、格納された結果のメモリアドレスをホストデバイスに提供することができる。
【0040】
[0047]ホストインターフェース314は、ホストデバイスとニューラルネットワークプロセッサ302との間の通信を可能にするように構成されてよい。たとえば、ホストインターフェース314は、ホストデバイスとニューラルネットワークプロセッサ302との間で、格納されたデータ(たとえば、入力データ、重み、計算結果など)のメモリアドレスを含むメモリ記述子を送信するように構成されてよい。ホストインターフェース314は、たとえば、周辺装置相互接続エクスプレス(PCIe)インターフェース、またはホストデバイスと通信するための任意の適切なインターフェースを含んでよい。
【0041】
[0048]ニューラルネットワークプロセッサ302は、予測モデル103の1つまたは複数のインスタンスを用いた計算をサポートするために計算リソースを提供することができる。
図3Aの例では、ニューラルネットワークプロセッサ302は、状態バッファ322、計算エンジン324、出力バッファ328、ポストプロセッサ329、および計算コントローラ330を含んでよい。
【0042】
[0049]状態バッファ322は、計算エンジン324における計算に使用されるデータのキャッシングを提供するように構成されてよい。状態バッファ322にキャッシュされたデータは、たとえば、メモリ312から取得された入力データおよび重み、ならびに計算エンジン324における計算の中間出力を含んでよい。キャッシングは、計算エンジン324のパフォーマンスに対する(たとえば、メモリ312、DMAコントローラ316、相互接続318などにおける待ち時間によって引き起こされる)メモリアクセスのボトルネックの影響を低減することができる。状態バッファ322は、重みのセットを計算エンジン324に事前フェッチし、次いで、入力データを順次ストリームとして計算エンジン324にフェッチするように計算コントローラ330によって制御することができ、計算エンジン324は、計算を実行し、中間出力データの順次ストリームを生成する。中間出力データのストリームは、出力バッファ328において収集され、ポストプロセッサ329によって後処理することができる。中間出力データの後処理されたストリームは、状態バッファ322に格納することができる。中間出力データは、たとえば、計算エンジン324にまだフェッチされていない入力データの上書きを回避するために、入力データおよび重みが格納された場所とは別の状態バッファ322の場所に格納することができる。状態バッファ322は、オンチップメモリデバイスであり得、たとえば、スタティックランダムアクセスメモリ(SRAM)を含んでよい。
【0043】
[0050]計算エンジン324は、ニューラルネットワーク計算に含まれる1つまたは複数の算術演算を実行するように構成された一組の回路を含んでよい。たとえば、計算エンジン324は、上述されたように、関連する重みを用いて入力データのスケーリングを実行する一組の乗算器と、ドット積および畳み込み結果を表す乗算結果の合計を生成する一組の加算器とを含んでよい。計算エンジン324は、状態バッファ322からスケーリングに使用される重みを取得することができる。以下でより詳細に説明されるように、計算エンジン324は、状態バッファ322から、または出力バッファ328から、スケーリングされるべき入力を取得することができる。
【0044】
[0051]いくつかの例では、計算エンジン324は、状態バッファ322に格納された重みのサイズを削減するために、様々なニューラルネットワーク層のための計算を順次実行するように(たとえば、計算コントローラ330によって)制御されてよい。たとえば、計算エンジン324は、1つの時間期間内に1つのニューラルネットワーク層(たとえば、層207)のための算術演算を実行し、次いで、次の時間期間内に次のニューラルネットワーク層(たとえば、層209)のための算術演算を実行するように制御されてよい。そのような構成では、状態バッファ322は、計算エンジン324における算術演算をサポートするために、複数のニューラルネットワーク層のための重みの複数のセットをキャッシュする代わりに、1つのニューラルネットワーク層のための重みのセットを事前フェッチしキャッシュすることができる。結果として、状態バッファ322に必要なサイズを削減することができ、ニューラルネットワークプロセッサ302のチップサイズならびに電力消費も削減することができる。一方、上述されたように、状態バッファ322は、計算のために入力データを出力データで上書きすることを回避するために、1つのコンテキスト(たとえば、画像、画像のセット、オーディオデータ、またはコンテキストに関連付けられた他のデータ)についての少なくとも1つのニューラルネットワーク層計算の計算用の入力データ(および重み)と出力データの両方に格納スペースを提供する必要がある。
【0045】
[0052]
図3Bは、計算エンジン324の内部構造の一例を示す。計算エンジン324は、複数の行および列に配置された処理要素(PE)の配列を含んでよい。1つの行内のPEは、内部行バスXBUS
INTERNALを介して互いに接続されるが、PE11、21、31、…x1の各々は、外部行バスXBUS
EXTERNALを介して外部回路に接続される。その上、1つの列内のPEは、内部列バスYBUS
INTERNALを介して互いに接続され、PE11、12、13、…1yの各々は、外部列バスYBUS
EXTERNALを介して外部回路に接続される。以下でより詳細に説明されるように、外部行バスXBUS
EXTERNALおよび外部列バスYBUS
EXTERNALは、特定のニューラルネットワーク層のための計算演算をスケーリングするために、たとえば、状態バッファ322および出力バッファ328からPE配列にデータを提供するように構成可能である。
【0046】
[0053]いくつかの構成では、PEの各列は、予測モデル103の1つの処理ノード(たとえば、処理ノード208a、210a、212aなどのうちの1つ)に対してスケーリングおよび合計計算を実行することができるが、PEの各行は、1つの入力データセットについてのスケーリングおよび合計計算を実行することができる。説明のための例として、層209のための計算を実行するために、第1の行のPE11、12、13、…1yの各々は、XBUS
EXTERNALから
図2Dのピクセルグループ282のピクセル値を受け取ることができる。また、第1の列のPE11、21、31、…x1の各々は、フィルタセット284a、284b、および284cの要素を受け取り、
図2Dの畳み込み出力配列294の出力を生成することができる。その上、第2の行のPE21、22、23、…2yの各々は、XBUS
EXTERNALから
図2Dのピクセルグループ286のピクセル値を受け取ることができるが、第2の列のPE12、22、32、…x2の各々は、
図2Dの畳み込み出力配列296の出力を生成するために、フィルタセット288a、288b、および288cの要素を受け取ることができる。PEの各々は、受け取ったピクセル値と受け取った重みとの間の乗算関数を実行して、乗算結果を生成する乗算器を含む。その上、PEの各々は、PEの1つの列内に乗算結果を累積する加算器も含む。たとえば、PE11は、第1のピクセル値および第1の重みに基づいて第1の乗算結果を生成し、YBUSを介してPE21に第1の乗算結果を渡す。PE21は、第2のピクセル値および第2の重みに基づいて第2の乗算結果を生成し、第2の乗算結果を加算して部分合計を生成し、別のYBUSを介してPE31に部分合計を渡す。PE11、21、および31と同じ列内の他のPEも乗算および累算を実行する。次いで、PEx1は、畳み込み出力242を生成し、YBUS
EXTERNALを介して畳み込み出力を送信することができる。
【0047】
[0054]いくつかの構成では、計算エンジン324のPEは、予測モデル103の複数のインスタンスを実装するために使用することができる。たとえば、少数の処理ノードおよび少数の入力データを用いて上位レベルの層を処理するとき、同じ行のPEは、(様々な位置、時間に、様々な人々によってキャプチャされた様々な画像もしくは画像の様々なセットに対応する、またはその他の方法で様々な情報を搬送する)様々なコンテキストの入力データセットを処理するために使用することができる。たとえば、PE11は、第1のコンテキストの1つの入力データセットを処理するように構成されてよいが、PE12は、第2のコンテキストの別の入力データセットを処理するように構成されてよい。PE11とPE12の両方は、重みの同じセットを格納し、重みの同じセットを入力データに適用することができる。(PE11、21、…x1を含む)第1の列は、第1のコンテキストの複数の入力データセットを処理するように構成されてよいが、(PE12、22、…x2を含む)第2の列は、第2のコンテキストの複数の入力データセットを処理するように構成されてよい。
【0048】
[0055]
図3Cは、PE340の内部構造の一例を示し、PE340は
図3Bに記載されたPEのうちのいずれか1つであり得る。PE340は、スプリッタ350、乗算器353、および加算器356を含んでよい。スプリッタ350は、入力XBUS(たとえば、XBUS
INPUT)からデータのセットを受け取り、入力値および重みを抽出することができる。たとえば、PE11は、XBUS
INから、PE11だけでなく同じ行の他のPE向けの入力値および重みのセットを受け取ることができる。PE11のスプリッタ350は、XBUS
IN上のデータからPE11向けの入力値(たとえば、IN351)および重み値(たとえば、W352)を抽出し、抽出された値を乗算器353に提供して、乗算結果(たとえば、M354)を生成することができる。加算器356は、入力YBUS(たとえば、YBUS
INPUT)を介して同じ列内の前のPEから受け取った部分合計を乗算結果(たとえば、M354)に加算して部分合計を生成し、出力YBUS(たとえば、YBUS
OUTPUT)を介して同じ列内の次のPEに部分合計を送信することができる。PEは、出力XBUS(XBUS
OUTPUT)を介して、同じ行内の次のPEにXBUS
INのデータを転送することもできる。
【0049】
[0056]
図3Aを再び参照すると、ニューラルネットワークプロセッサ302は、出力バッファ328およびポストプロセッサ329をさらに含む。出力バッファ328は、計算エンジン324の出力を格納する一組のレジスタを含む。ポストプロセッサ329は、計算エンジン324の出力に対して1つまたは複数の活性化関数(たとえば、ReLu関数)を適用する回路(たとえば、マッピングテーブルとして構成されたマルチプレクサ回路)を含んでよい。ポストプロセッサ329はまた、プーリング動作を実行して出力のサイズを削減する回路を含んでよい。ポストプロセッサ329は、後処理された出力を状態バッファ322に格納することができる。
【0050】
[0057]計算コントローラ330は、XBUSEXTERNALおよびYBUSEXTERNALを介して計算エンジン324に提供される入力データおよび重みを決定して、計算エンジン324における計算を制御することができる。たとえば、計算コントローラ330は、様々な時間に、各ニューラルネットワーク層に関連付けられた入力データおよび重みを提供することにより、各ニューラルネットワーク層のための計算を順次実行するように、計算エンジン324を制御することができる。説明のための例として、第1のステップとして、計算コントローラ330は、層209におけるスケーリング演算に関連付けられた入力ピクセルデータおよび重みを取得し、XBUSEXTERNALを介して計算エンジン324に入力ピクセルデータおよび重みを供給することができる。次いで、計算エンジン324は出力を生成し、YBUSEXTERNALを介して活性化エンジン326に出力を供給して、層209の各処理ノードに対応する中間出力のセット(たとえば、first_intermediate_output210a)を生成することができる。中間出力は出力バッファ328に格納することができる。
後続の計算が次の層(たとえば、層211)にある同じ入力データセットについてである場合、計算コントローラ330は、出力バッファ328に格納された中間出力を取得し、層211における計算を開始するために、状態バッファ322からXBUSEXTERNALを介して計算エンジン324に、中間出力ならびに重みの新しいセットを供給することができる。一方、中間出力が後続の計算に使用されない場合、計算コントローラ330は、中間出力を状態バッファ322に格納することができる。プロセスは、出力層における計算が完了するまで層ごとに繰り返すことができる。計算の順序は、以下に記載される予定のスケジューリング方式を動作させるスケジューラモジュール332によって決定することができる。
【0051】
[0058]上述されたように、DNNおよびCNNでは、より高いレベルの中間層のサイズは、通常、より低いレベルの中間層のサイズよりも小さい。したがって、ニューラルネットワーク計算がニューラルネットワーク層を通って出力層に向かって進むにつれて、層のための計算に使用される計算リソースは時間とともに減少する可能性がある。
図3Bの例を参照すると、層209は、計算エンジン324内のPE列の数と同じ数の処理ノードを含んでよい。したがって、層209のための計算を実行するとき、計算エンジン324内のあらゆる列が計算に関与し、PEの各列が層209の1つの処理ノードに対応する出力を生成する。しかしながら、層211が層209の処理ノードの半分のみを有する場合、PEの列の半分は計算に必要ではなく、アイドルであってよく、計算エンジン324の不十分な利用率につながる。計算エンジン324の利用率を向上させるために、計算コントローラ330は、上述されたように、複数の入力データセット(たとえば、複数の画像または他のコンテキスト)を処理し、複数の入力データセットに対して複数の出力を生成するように計算エンジン324を制御することができる。
【0052】
[0059]次に
図4を参照すると、
図4は、複数の入力データセットを処理するために計算エンジン324を動作させるシーケンス400の一例を示す。左側のブロックは計算エンジン324における計算のシーケンスを示すが、右側のブロックは、状態バッファ322に格納された中間出力の対応するシーケンスを示す。状態バッファ322における重みの格納は
図4に示されていない。
【0053】
[0060]いくつかの例では、シーケンス400は、ロックステップ方式で計算エンジン324を動作させるように実行することができる。たとえば、より低いレベルのニューラルネットワーク層のための計算は、入力データセットごとに(計算リソース要件が実質的であり、計算エンジン324が完全に利用されているとき)順次実行することができる。(様々なコンテキストの)すべての入力データセットについての1つのニューラルネットワーク層のための計算が完了した後、計算エンジン324は、次いで、次のニューラルネットワーク層のための計算を実行する。計算リソース要件が低減されたより高いレベルのニューラルネットワーク層に計算が到達すると、計算コントローラ330は、入力データセットについて並列計算を実行して、計算エンジン324の利用率を維持することができる。本明細書に記載され、図に描写されたように、「C-1」は第1のコンテキストを指してよく、「C-2」は第2のコンテキストを指してよく、「C-3」は第3のコンテキストを指してよく、「C-4」は第4のコンテキストを指してよい。
【0054】
[0061]T0において、計算コントローラ330は、C-1についてのL0ニューラルネットワーク層(たとえば、層209)計算を実行するように計算エンジン324を制御することができ、それにより、計算エンジン324が完全に利用されるようになる。T0において、状態バッファ322は、C-1 L0計算のための入力データ(および重み)ならびにC-1 L0計算の出力データを格納するために格納スペースを提供する必要がある。
【0055】
[0062]T1において、C-1についてのL0ニューラルネットワーク層計算が完了した後、計算コントローラ330は、C-1についてのL0計算の出力データを状態バッファ322に格納し、次いで、C-2についてのL0ニューラルネットワーク層計算を実行するように計算エンジン324を制御することができる。T1において、状態バッファ322は、C-2についての進行中のL0計算の入力データおよび出力データ、ならびにC-1についての完了したL0計算の出力データを格納するために格納スペースを提供する必要がある。
【0056】
[0063]T2において、計算コントローラ330は、C-3についてのL0ニューラルネットワーク層計算を実行するように計算エンジン324を制御することができる。T2において、状態バッファ322は、C-3についての進行中のL0計算の入力データおよび出力データ、ならびにC-1およびC-2についての完了したL0計算の出力データを格納するために格納スペースを提供する必要がある。
【0057】
[0064]T3において、計算コントローラ330は、C-4についてのL0ニューラルネットワーク層計算を実行するように計算エンジン324を制御することができる。T3において、状態バッファ322は、C-4についての進行中のL0計算の入力データおよび出力データ、ならびにC-1、C-2、およびC-3についての完了したL0計算の出力データを格納するために格納スペースを提供する必要がある。
【0058】
[0065]T4において、計算コントローラ330は、L1ニューラルネットワーク層計算(たとえば、層211)を実行するように計算エンジン324を切り替えることができる。計算コントローラ330は、C-1およびC-2についてのL1計算を並行して実行するように計算エンジン324を制御することができる。T4において、状態バッファ322は、C-1およびC-2についての進行中のL1計算の出力データ、ならびにC-1、C-2、C-3、およびC-4についての完了したL0計算の出力データを格納するために格納スペースを提供する必要がある。T4において格納されるデータの合計サイズは、シーケンス400の他の段階と比較して最大であり得る。
【0059】
[0066]T5において、計算コントローラ330は、C-3およびC-4についてのL1計算を実行するように計算エンジン324を制御することができる。T5において、状態バッファ322は、C-3およびC-4についての進行中のL1計算の出力データ、ならびにC-3およびC-4についての完了したL0計算の出力データを格納するために格納スペースを提供する必要がある。C-1およびC-2についてのL1計算がT5において完了し、それらの出力データは必要とされないので、C-1およびC-2についての完了したL0計算の出力データは、削除(またはC-3およびC-4についてのL1計算の出力データによって上書き)することができる。
【0060】
[0067]T6において、計算コントローラ330は、L2ニューラルネットワーク層計算(たとえば、出力層)を実行するように計算エンジン324を切り替えることができる。計算コントローラ330は、C-1、C-2、C-3、およびC-4についてのL2計算を並行して実行するように計算エンジン324を制御することができる。T6において、状態バッファ322は、C-1、C-2、C-3、およびC-4についての進行中のL2計算の出力データ、ならびにそれらの計算用の入力データ(たとえば、C-1、C-2、C-3、およびC-4についてのL1計算の出力データ)を格納するために格納スペースを提供する必要がある。
【0061】
[0068]
図4の動作のシーケンスにより、計算エンジン324がフル稼働で維持されることが可能になるが、時間T4などの複数のコンテキストについての低レベルのニューラルネットワーク(たとえば、L0)計算の出力を格納するために、大きい状態バッファ322が必要である。それらの中間出力は、通常、サイズが大きく、格納用にかなりの量のオンチップメモリスペースを必要とする。
【0062】
[0069]次に
図5を参照すると、
図5は、複数の入力データセットを処理するために計算エンジン324を動作させるシーケンス500の一例を示す。シーケンス500は、非ロックステップ方式で計算エンジン324を動作させるように実行することができる。左側のブロックは計算エンジン324における計算のシーケンスを示すが、右側のブロックは、状態バッファ322に格納された中間出力の対応するシーケンスを示す。状態バッファ322における重みの格納は
図5に示されていない。
【0063】
[0070]T0において、計算コントローラ330は、C-1についてのL0ニューラルネットワーク層(たとえば、層209)計算を実行するように計算エンジン324を制御することができ、それにより、計算エンジン324が完全に利用されるようになる。T0において、状態バッファ322は、C-1 L0計算のための入力データ(および重み)ならびにC-1 L0計算の出力データを格納するために格納スペースを提供する必要がある。
【0064】
[0071]T1において、C-1についてのL0ニューラルネットワーク層計算が完了した後、計算コントローラ330は、C-1についてのL0計算の出力データを状態バッファ322に格納し、次いで、C-2についてのL0ニューラルネットワーク層計算を実行するように計算エンジン324を制御することができる。T1において、状態バッファ322は、C-2についての進行中のL0計算の入力データおよび出力データ、ならびにC-1についての完了したL0計算の出力データを格納するために格納スペースを提供する必要がある。
【0065】
[0072]T2において、計算コントローラ330は、C-1およびC-2についてのL1ニューラルネットワーク層計算(たとえば、層211)を実行するように計算エンジン324を切り替えることができる。T2において、状態バッファ322は、進行中のL1計算用の入力データ(たとえば、C-1およびC-2についてのL0計算の出力データ)、ならびにL1計算によって生成された出力データを格納するために格納スペースを提供する必要がある。
【0066】
[0073]T3において、計算コントローラ330は、C-3についてのL0ニューラルネットワーク層計算を実行するように計算エンジン324をもう一度切り替えることができる。T3において、状態バッファ322は、C-1およびC-2についての完了したL1計算の出力データ、ならびにC-3についての進行中のL0計算用の入力データおよび出力データを格納するために格納スペースを提供する必要がある。
【0067】
[0074]T4において、計算コントローラ330は、C-4についてのL0ニューラルネットワーク層計算を実行するように計算エンジン324を制御することができる。T4において、状態バッファ322は、C-1およびC-2についての完了したL1計算の出力データ、C-3についての完了したL0計算の出力データ、ならびにC-4についての進行中のL0計算用の入力データおよび出力データを格納するために格納スペースを提供する必要がある。シーケンス400のT4と比較して、より少ないコンテキストについての(通常、上位のニューラルネットワーク層よりも大きい)L0出力データを格納することにより、状態バッファ322の必要なサイズを削減することができる。
【0068】
[0075]T5において、計算コントローラ330は、C-3およびC-4についてのL1ニューラルネットワーク計算を並行して実行するように計算エンジン324を制御することができる。T5において、状態バッファ322は、C-1およびC-2についての完了したL1計算の出力データ、ならびにC-3およびC-4についての進行中のL1計算用の入力データおよび出力データを格納するために格納スペースを提供する必要がある。C-3およびC-4についての進行中のL1計算用の入力データは、C-3およびC-4についての完了したL0計算の出力データを含む。
【0069】
[0076]T6において、計算コントローラ330は、L2ニューラルネットワーク層計算(たとえば、出力層)を実行するように計算エンジン324を切り替えることができる。計算コントローラ330は、C-1、C-2、C-3、およびC-4についてのL2計算を並行して実行するように計算エンジン324を制御することができる。T6において、状態バッファ322は、C-1、C-2、C-3、およびC-4についての進行中のL2計算の出力データ、ならびにそれらの計算用の入力データ(たとえば、C-1、C-2、C-3、およびC-4についてのL1計算の出力データ)を格納するために格納スペースを提供する必要がある。
【0070】
[0077]
図6は、本開示のいくつかの態様による、多層ニューラルネットワーク内の様々なコンテキストに関連付けられた複数のデータセットを処理するためのプロセス600の例示的なフロー図を示す。多層ニューラルネットワークは、第1のニューラルネットワーク層(たとえば、層209)、第1のニューラルネットワーク層に依存する第2のニューラルネットワーク層(たとえば、層211)、および第2のニューラルネットワーク層に依存する第3のニューラルネットワーク層(たとえば、出力層)を含んでよい。プロセスは、たとえば、計算コントローラ330および計算エンジン324などの、上述された様々なシステムによって実装されてよい。
【0071】
[0078]動作602において、計算エンジン(たとえば、計算エンジン324)は、第1のニューラルネットワーク層として構成され、(たとえば、第1のコンテキストの)第1のデータセットを処理して、第1のデータセットの第1の層出力を生成することができる。
【0072】
[0079]動作604において、計算エンジンは、第1のニューラルネットワーク層として構成されている間、(たとえば、第2のコンテキストの)第2のデータセットを処理して、第2のデータセットの第1の層出力を生成することができる。
【0073】
[0080]動作606において、計算エンジンは、第2のニューラルネットワーク層として構成され、第1のデータセットの第1の層出力および第2のデータセットの第1の層出力を処理して、それぞれ、(第1のコンテキストの)第1のデータセットの第2の層出力および(第2のコンテキストの)第2のデータセットの第2の層出力を生成することができる。
【0074】
[0081]動作608において、計算エンジンは、動作606において第1のデータセットの第2の層出力および第2のデータセットの第2の層出力の生成後、第1のニューラルネットワーク層に戻るように構成され、計算エンジンは、(たとえば、第3のコンテキストの)第3のデータセットを処理して、第3のデータセットの第1の層出力を生成することができる。
【0075】
[0082]動作610において、計算エンジンは、第1のニューラルネットワーク層として構成されている間、(たとえば、第4のコンテキストの)第4のデータセットを処理して、第4のデータセットの第1の層出力を生成することができる。
【0076】
[0083]動作612において、計算エンジンは、第2のニューラルネットワークとして構成することができ、(第3のコンテキストの)第3のデータセットの第1の層出力および(第4のコンテキストの)第4のデータセットの第1の層出力を処理して、それぞれ、第3のデータセットの第2の層出力および第4のデータセットの第2の層出力を生成することができる。
【0077】
[0084]動作614において、計算エンジンは、第3のニューラルネットワークとして構成することができ、(第1のコンテキストの)第1のデータセットの第2の層出力、(第2のコンテキストの)第2のデータセットの第2の層出力、(第3のコンテキストの)第3のデータセットの第2の層出力、および(第4のコンテキストの)第4のデータセットの第2の層出力を処理して、それぞれ、第1のデータセットの第3の層出力、第2のデータセットの第3の層出力、第3のデータセットの第3の層出力、および第4のデータセットの第3の層出力を生成することができる。
【0078】
[0085]いくつかの例では、(たとえば、
図4の)ロックステップシーケンスから(たとえば、
図5の)非ロックステップシーケンスへの計算の順序の再配置は、スケジューリング方式に基づいてよい。スケジューリング方式は、実行バッチのシーケンスを決定するために使用することができ、各実行バッチは、ニューラルネットワーク層が計算エンジン324において並列に実行するための1つまたは複数の計算タスクを含む。各計算タスクはコンテキストについて実行することができ、実行バッチの各々は様々な時間に実行される。スケジューリング方式の目的は、状態バッファ322において利用可能なスペースの制約ならびに層間データ依存性の下で、各実行バッチサイズ(たとえば、実行される並列計算タスクの数)を最大化することであり得る。
【0079】
[0086]いくつかの例では、計算コントローラ330のスケジューラモジュール332は、グラフ削減方式を適用して、様々なコンテキストについての様々なニューラルネットワーク層の計算間の依存性のグラフを決定することができる。次いで、スケジューラモジュール332は、より高いニューラルネットワーク層の計算から始めてグラフをトラバースし、計算タスクのシーケンスを決定することができる。決定は、状態バッファがサポートすることができる並列計算タスクの数、および層間データ依存性に基づくことができる。上述されたように、ニューラルネットワーク層のいくつかの計算タスクの並列実行をサポートするために、状態バッファは、いくつかの計算タスクの入力データと出力データの両方を格納するのに十分な容量を有する必要である。第1のニューラルネットワーク層(たとえば、
図2Aの層211)用の第1の実行バッチサイズを決定した後、スケジューラモジュール332は、依存性グラフをトラバースし、状態バッファが、第1のニューラルネットワーク層に入力データを提供する第2のニューラルネットワーク層(たとえば、
図2Aの層209)のためのいくつかの計算タスクをサポートすることができるかどうかを判定することができる。状態バッファが第2のニューラルネットワーク層のためのいくつかの計算タスクをサポートすることができない場合、スケジューラは、第2のニューラルネットワーク層用のいくつかの計算タスクを複数の実行バッチに分割することができる。複数の実行バッチの決定は、状態バッファが以前の実行バッチの出力データならびに進行中の実行バッチの入出力データを格納するのに十分な容量を有するという制約下で、各実行バッチ内の第2のニューラルネットワーク層用の並列計算タスクの数を最大化することであり得る。第2のニューラルネットワーク層用の実行バッチを決定した後、スケジューラは、依存性グラフをトラバースして、第2のニューラルネットワーク層用の入力データを提供する第3のニューラルネットワーク(たとえば、
図2Aの層207)用の計算タスクを決定することができ、上述された状態バッファ容量の制約下で、実行バッチを決定動作まで繰り返す。
【0080】
[0087]次に、
図7A~
図7Gを参照すると、
図7A~
図7Gはスケジューリング方式の一例を示す。
図7Aは、
図4および
図5のコンテキストC-1、C-2、C-3、およびC-4についてのニューラルネットワーク層計算の依存性グラフの例を示す。この例では、計算エンジン324が同時に実行することができる計算タスクの数に対する制約を課さず、唯一の制約は層間依存性および状態バッファの容量から生じると想定することができる。この説明のための例では、状態バッファのサイズは2単位であり得る。
【0081】
[0088]
図7Aの例では、各バブル(すなわち、円)は、ニューラルネットワーク層の計算タスクまたはコンテキスト用の外部入力に対応することができ、バブル内の数字は、計算タスクによって生成されるべき出力データのサイズ、または外部入力データのサイズを示す。出力データ(または外部入力データ)のサイズは、状態バッファのサイズに関連し、両方とも同じ単位である。各実行バッチは、同じニューラルネットワーク層の1つまたは複数のバブルを含むことができる。ペアのバブルは、方向がデータの依存性を示すそれぞれの矢印によってリンクされる。矢印に隣接する数字は、ニューラルネットワーク層の計算タスクに使用される重み値のサイズを示すことができる。重み値は、1つの実行バッチ内のバブル間で共有することができる。コンテキストC-1の依存性グラフを参照すると、L0(ニューラルネットワーク層0)計算タスクは、外部入力として0.5単位のサイズの画像データ、および0.3単位のサイズの重みを入力データとして受け取ることができる。L0計算タスクは、0.3単位のサイズの出力データを生成することができる。L1(ニューラルネットワーク層1)計算タスクは、(0.3単位のサイズの)L0計算タスクの出力データおよび0.25単位のサイズの重みを入力データとして受け取ることができる。さらに、L2(ニューラルネットワーク層2)計算タスクは、(0.2単位のサイズの)L1計算タスクの出力データおよび0.1単位のサイズの重みを入力データとして受け取ることができる。その上、L2計算タスクは0.1単位のサイズの出力データを生成することができる。
【0082】
[0089]
図7Bは、スケジューリング動作702を示す。動作702において、スケジューラは、L2計算のための第1のバッチサイズを決定する。C-1、C-2、C-3、およびC-4についての同時L2計算をサポートするために、状態バッファは、同時L2計算の入力データおよび出力データを格納する容量を有する必要がある。入力データは、0.8単位(0.2×4)の合計サイズおよび0.1単位の共有重みを有する4つのコンテキスト用のL1出力データを含むが、出力データサイズは0.4単位(0.1×4)である。必要な容量は1.3単位(0.8+0.4+0.1)であり、それは状態バッファの容量(2単位)を下回る。これに基づいて、スケジューラは、時刻T1において実行されるべき第1の実行バッチに、4つのコンテキストすべてについてのL2計算タスクを含めることができる。
【0083】
[0090]
図7Cおよび
図7Dは、スケジューリング動作704を示す。動作704において、スケジューラは、4つのコンテキストのL1計算が第2の実行バッチ内で実行できるかどうかを判定する。スケジューラは、状態バッファが4つのコンテキストすべてについての同時L1計算の入力データおよび出力データを格納する容量を有するかどうかを判定することができる。
図7Cを参照すると、入力データは、1.2単位(0.3×4)の合計サイズおよび0.25単位のサイズの共有重みを有する4つのコンテキスト用のL0出力データを含むが、出力データサイズは0.8単位(0.2×4)である。必要な容量は2.25単位(1.2+0.8+0.25)であり、それは状態バッファの容量を超える。この判定に基づいて、スケジューラはL1計算を2つ以上の実行バッチに分割することができる。たとえば、スケジューラは、状態バッファがその実行バッチ内のいくつかのL1計算タスクの入力データおよび出力データ、ならびに以前の実行バッチのL1計算タスクの出力データを格納するのに十分な容量を有することに基づいて、実行バッチに含めることができるL1計算タスクの数を決定することができる。
【0084】
[0091]説明のための例として、
図7Dを参照すると、スケジューラは、C-2およびC-3についてのL1計算タスクを含む第2の実行バッチ、およびC-1およびC-2についてのL1計算タスクを含む第3の実行バッチを決定することができる。第3の実行バッチは、第2の実行バッチの前に実行されるべきである。第2の実行バッチの合計入出力データサイズは1.25単位(0.2×2+0.3×2+0.25)であり得るが、第3の実行バッチの出力データサイズは0.4単位(0.2×2)である。合計データサイズ(1.65単位)が状態バッファの容量よりも小さいことに基づいて、スケジューラは、時間T2に第2の実行バッチをスケジュールし、時間T3に第3の実行バッチをスケジュールする。
【0085】
[0092]
図7Eおよび
図7Fは、スケジューリング動作706を示す。動作706において、スケジューラは、(第2の実行バッチに入力データを提供するために)C-2およびC-3についてのL0計算が単一のバッチとして並列に実行できるかどうかを判定する。
図7Eを参照すると、(状態バッファがC-1、C-2、C-3、およびC-4についてのL0計算の出力を格納する必要があることを回避するために)時間T1とT2との間に実行されるべき、C-2およびC-3についての並列L0計算をサポートするために、状態バッファは、C-2およびC-3についての並列L0計算の入力出力データ、ならびに第3の実行バッチの出力データを格納する必要がある。C-2およびC-3についてのL0計算の合計入出力データサイズは1.9単位(0.5×2+0.3×2+0.3)であるが、第3の実行バッチの出力データサイズは0.4単位である。合計データサイズ(2.3単位)が状態バッファの容量を超えることに基づいて、スケジューラは、L0計算を2つのバッチに分割するように決定する。たとえば、
図7Fを参照すると、スケジューラは、C-4についてのL0計算を含む第4の実行バッチ、およびC-3についてのL0計算を含む第5の実行バッチを決定することができる。スケジューラはまた、それらのすべてが2単位の合計データサイズを有する、(1.3単位のデータサイズを有する)第4の実行バッチ用の入力データおよび出力データ、(0.3単位のデータサイズを有する)第5の実行バッチ用の出力データ、ならびに(0.4単位のデータサイズを有する)第3の実行バッチの出力データを格納するのに十分な容量を状態バッファが有すると判断することができる。次いで、スケジューラは、時間T4に第4の実行バッチをスケジュールし、時間T5に第5の実行バッチをスケジュールすることができる。
【0086】
[0093]
図7Gは、スケジューリング動作708を示す。動作708において、スケジューラは、(第3の実行バッチに入力データを提供するために)C-1およびC-2についてのL0計算が単一のバッチとして並列に実行できるかどうかを判定する。
図7Gを参照すると、動作702~706において決定された実行バッチの前に実行されるべきC-1およびC-2についての並列L0計算をサポートするために、状態バッファは、C-1およびC-2についての並列L0計算用の入出力データを格納する必要がある。C-1およびC-2についてのL0計算の合計入出力データサイズは1.9単位(0.5×2+0.3×2+0.3)であり、それは状態バッファの容量を下回る。次いで、スケジューラは、C-1およびC-2についてのL0計算を第6の実行バッチに含め、T6に第6の実行バッチをスケジュールすることができる。
【0087】
[0094]
図8は、メモリデバイス(たとえば、状態バッファ322)と結合された計算エンジン(たとえば、計算エンジン324)における動作をスケジュールするためのプロセス800の例示的なフロー図を示す。プロセスは、たとえば、ニューラルネットワークプロセッサ302のスケジューラモジュール332などの上述された様々なシステムによって実装されてよい。
【0088】
[0095]動作802において、スケジューラモジュールは、実行されるべき計算タスクのセットを決定することができ、計算タスクのセットは、第1の計算タスク、第2の計算タスク、第3の計算タスク、および第4の計算タスクを含み、第3の計算タスクおよび第4のタスクは、それぞれ、第1の計算タスクの入力データおよび第2の計算タスクの入力データを生成する。
【0089】
[0096]動作804において、スケジューリングモジュールは、状態バッファが第1の計算タスクと第2の計算タスクの両方の入出力データを保持するのに十分な容量を有することに基づいて、第1の計算タスクおよび第2の計算タスクを含む第1の実行バッチを決定することができる。
【0090】
[0097]動作806において、スケジューリングモジュールは、メモリデバイスが第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するかどうかを判定することができる。メモリデバイスが(動作808において)第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有する場合、スケジューリングモジュールは、動作810において、第3の計算タスクおよび第4の計算タスクを含む第2の実行バッチを決定し、第1の実行バッチの前に実行されるように第2の実行バッチをスケジュールすることができる。
【0091】
[0098]一方、メモリデバイスが(動作808において)第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量をもたないが、(動作812において)第3の計算タスクの出力データならびに第4の計算タスクの入力データおよび出力データを保持するのに十分な容量を有する場合、スケジューリングモジュールは、動作814において、第3の計算タスクを含む第3の実行バッチを決定することができる。スケジューリングモジュールはまた、動作816において、第4の計算タスクを含む第4の実行バッチを決定することができる。スケジューリングモジュールは、第3の実行バッチが最初に実行され、その後に第4の実行バッチが実行され、その後に第1の実行バッチが実行されるようにスケジュールすることができる。
【0092】
[0099]例示的なプロセス800では、第1の計算タスクおよび第2の計算タスクは、それぞれ、第1のコンテキストおよび第2のコンテキストについての第2のニューラルネットワーク層計算タスクであってよい。その上、第3の計算タスクおよび第4の計算タスクは、それぞれ、第1のコンテキストおよび第2のコンテキストについての第1のニューラルネットワーク層計算タスクであってよい。
【0093】
[0100]
図9は、コンピューティングデバイス900の一例を示す。コンピューティングデバイス900の機能性および/またはいくつかの構成要素は、制限なしに、本開示の他の場所で開示される他の実施形態とともに制限なしに使用されてよい。コンピューティングデバイス900は、計算を実行してタスクの処理を容易にすることができる。説明のための例として、コンピューティングデバイス900は、マルチテナント計算サービスシステムにおけるサーバの一部であり得る。コンピューティングデバイス900の様々なハードウェアリソースおよびソフトウェアリソース(たとえば、画像認識サービスの提供に関連付けられたハードウェアリソースおよびソフトウェアリソース)は、要求に応じてクライアントに割り当てることができる。
【0094】
[0101]一例では、コンピューティングデバイス900は、処理ロジック902、バスインターフェースモジュール908、メモリ910、およびネットワークインターフェースモジュール912を含んでよい。これらのモジュールは、ハードウェアモジュール、ソフトウェアモジュール、またはハードウェアとソフトウェアの組合せであってよい。いくつかの例では、モジュールは、本開示の範囲から逸脱することなく、構成要素またはエンジンと交換可能に使用されてよい。コンピューティングデバイス900は、本明細書には図示されていない追加のモジュールを含んでよい。いくつかの実装形態では、コンピューティングデバイス900は、より少ないモジュールを含んでよい。いくつかの実装形態では、1つまたは複数のモジュールは、1つのモジュールに組み合わされてよい。1つまたは複数のモジュールは、通信チャネル914を介して互いに通信していてよい。通信チャネル914は、1つまたは複数のバス、メッシュ、マトリクス、ファブリック、これらの通信チャネルの組合せ、またはいくつかの他の適切な通信チャネルを含んでよい。
【0095】
[0102]処理ロジック902は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、システムオンチップ(SoC)、ネットワーク処理ユニット(NPU)、命令を実行するように構成されたプロセッサ、または論理演算および浮動小数点演算を実行するように構成された任意の他の回路を含んでよい、1つまたは複数の集積回路を含んでよい。処理ロジック1102に含まれてよいプロセッサの例には、ARM(登録商標)、MIPS(登録商標)、AMD(登録商標)、Intel(登録商標)、Qualcomm(登録商標)などによって開発されたプロセッサが含まれてよい。いくつかの実装形態では、プロセッサは複数の処理コアを含んでよく、各処理コアは、他の処理コアとは無関係に命令を実行するように構成されてよい。さらに、いくつかの実装形態では、各プロセッサまたは処理コアは、複数の処理スレッド間の論理的な分離を維持しながら、同じプロセッサまたは処理コア上で命令を実行する複数の処理スレッドを実装することができる。プロセッサまたは処理コア上で実行されるそのような処理スレッドは、個別の論理プロセッサまたは処理コアとしてソフトウェアに公開されてよい。いくつかの実装形態では、複数のプロセッサ、処理コア、または同じコア上で実行される処理スレッドは、たとえば、バス、レベル1(L1)キャッシュ、および/またはレベル2(L2)キャッシュなどの特定のリソースを共有することができる。処理ロジック902によって実行される命令は、たとえば、コンピュータプログラムの形態で、コンピュータ可読記憶媒体に記憶されてよい。コンピュータ可読記憶媒体は非一時的であってよい。場合によっては、コンピュータ可読媒体はメモリ910の一部であってよい。処理ロジック902はまた、たとえば、SoC302などを含む人工ニューラルネットワーク計算を実行するためのハードウェア回路を含んでよい。
【0096】
[0103]処理ロジック902へのアクセスは、クライアントによって要求されたパーソナルアシスタントサービスを提供するために、クライアントに許可することができる。たとえば、コンピューティングデバイス900は、画像認識ソフトウェアアプリケーションを実行することができる仮想マシンをホストすることができる。画像認識ソフトウェアアプリケーションは、実行時に、処理ロジック902にアクセスして、たとえば、画像に含まれるオブジェクトを予測することができる。別の例として、処理ロジック902へのアクセスはまた、クライアントデバイス(たとえば、リモートコンピュータ、スマートフォンなど)上で実行される画像認識ソフトウェアアプリケーションが、画像の認識を実行するために処理ロジック902に直接アクセスすることができる、ベアメタルインスタンスの一部として許可することができる。
【0097】
[0104]メモリ910は、揮発性もしくは不揮発性、または揮発性および不揮発性の両方のタイプのメモリを含んでよい。メモリ910は、たとえば、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、および/またはいくつかの他の適切な記憶媒体を含んでよい。場合によっては、メモリ910の一部またはすべてがコンピューティングデバイス900の内部にあってよく、他の場合には、メモリの一部またはすべてがコンピューティングデバイス900の外部にあってよい。メモリ910は、処理ロジック902によって実行されると、コンピューティングデバイス900にネットワーク機能を提供する命令を実行するための実行環境を提供する、実行可能命令を含むオペレーティングシステムを記憶することができる。メモリ910はまた、たとえば、人工ニューラルネットワーク計算を実行するためのソフトウェアアプリケーションを記憶することができる。たとえば、メモリ910は、上記の式1~4の計算に関連するソフトウェアルーチンを記憶することができる。処理ロジック902がFPGAの形態である場合、メモリ910は、処理ロジック902の様々な論理回路構成要素を表すネットリストデータを記憶することができる。
【0098】
[0105]バスインターフェースモジュール908は、外部通信媒体を介して、ホストデバイスおよび/またはコンピューティングシステム内の他の構成要素などの外部エンティティとの通信を可能にすることができる。バスインターフェースモジュール908は、ケーブル、ソケット、ポート、または外部通信媒体への他の接続に接続するための物理インターフェースを含んでよい。バスインターフェースモジュール908は、着信および発信のトランザクションを管理するハードウェアおよび/またはソフトウェアをさらに含んでよい。バスインターフェースモジュール908は、周辺装置相互接続(PCI)ベースのプロトコル、不揮発性メモリエクスプレス(NVMe)、アドバンストホストコントローラインターフェース(AHCI)、スモールコンピュータシステムインターフェース(SCSI)、シリアル接続SCSI(SAS)、シリアルATアタッチメント(SATA)、パラレルATA(PATA)、いくつかの他の標準バスプロトコル、または独自のバスプロトコルなどのローカルバスプロトコルを実装することができる。バスインターフェースモジュール908は、とりわけ、コネクタ、電力管理、およびエラー処理を含む、これらのバスプロトコルのいずれかのための物理層を含んでよい。いくつかの実装形態では、コンピューティングデバイス900は、複数の外部エンティティと通信するための複数のバスインターフェースモジュールを含んでよい。これらの複数のバスインターフェースモジュールは、同じローカルバスプロトコル、異なるローカルバスプロトコル、または同じバスプロトコルと異なるバスプロトコルの組合せを実装することができる。
【0099】
[0106]ネットワークインターフェースモジュール912は、ネットワークと通信するためのハードウェアおよび/またはソフトウェアを含んでよい。このネットワークインターフェースモジュール912は、たとえば、ネットワークへの有線接続用の物理コネクタもしくは物理ポート、および/またはネットワークへのワイヤレス通信用のアンテナを含んでよい。ネットワークインターフェースモジュール912は、ネットワークプロトコルスタックを実装するように構成されたハードウェアおよび/またはソフトウェアをさらに含んでよい。ネットワークインターフェースモジュール912は、たとえば、とりわけ、TCP/IP、インフィニバンド、RoCE、電気電子技術者協会(IEEE)802.11ワイヤレスプロトコル、ユーザデータグラムプロトコル(UDP)、非同期転送モード(ATM)、トークンリング、フレームリレー、高レベルデータリンク制御(HDLC)、ファイバ分散データインターフェース(FDDI)、および/またはポイントツーポイントプロトコル(PPP)などのネットワークプロトコルを使用して、ネットワークと通信することができる。いくつかの実装形態では、コンピューティングデバイス900は、各々が異なるネットワークと通信するように構成された複数のネットワークインターフェースモジュールを含んでよい。たとえば、これらの実装形態では、コンピューティングデバイス900は、有線イーサネットネットワーク、ワイヤレス802.11ネットワーク、セルラーネットワーク、インフィニバンドネットワークなどと通信するためのネットワークインターフェースモジュールを含んでよい。いくつかの実施形態では、コンピューティングデバイス900は、ネットワークインターフェースモジュール912を介してサーバから、忘却ゲート係数、入力係数、出力係数などを生成するための前述の重みベクトルなどのパラメータのセットを受信することができる。
【0100】
[0107]上述されたコンピューティングデバイス900の様々な構成要素およびモジュールは、個別構成要素として、システムオンチップ(SoC)として、ASICとして、NPUとして、FPGAとして、またはそれらの任意の組合せとして実装されてよい。いくつかの実施形態では、SoCまたは他の構成要素は、トラフィック監視、トラフィック成形、コンピューティングなどの様々なサービスを提供するために、別のコンピューティングシステムに通信可能に結合されてよい。本技術のいくつかの実施形態では、SoCまたは他の構成要素は、本明細書に開示された複数のサブシステムを含んでよい。
【0101】
[0108]本明細書に記載されたモジュールは、ソフトウェアモジュール、ハードウェアモジュール、またはそれらの適切な組合せであってよい。モジュールがソフトウェアモジュールである場合、モジュールは、非一時的コンピュータ可読媒体上で具現化され、本明細書に記載されたコンピュータシステムのいずれかのプロセッサによって処理することができる。記載されたプロセスおよびアーキテクチャは、任意のユーザ対話より前に、リアルタイムまたは非同期モードのいずれかで実行できることに留意されたい。モジュールは、
図9に示唆された方式で構成されてよく、かつ/または本明細書に記載された機能は、別個のモジュールとして存在する1つもしくは複数のモジュールによって提供され得、かつ/または本明細書に記載されたモジュール機能は、複数のモジュールに広がることができる。
【0102】
[0109]明細書および図面は、それに応じて、限定的な意味ではなく例示的な意味で見なされるべきである。しかしながら、特許請求の範囲に記載された本開示のより広い趣旨および範囲から逸脱することなく、様々な修正および変更が行われてよいことは明らかであろう。
【0103】
[0110]他の変形形態は本開示の趣旨内である。したがって、開示された技法は、様々な修正形態および代替構造の影響を受けやすいが、それらのいくつかの例示された実施形態が図面に示され、詳細に上述されている。しかしながら、開示された具体的な1つまたは複数の形態に開示を限定する意図がないことが理解されるべきであるが、反対に、意図は、添付の特許請求の範囲に定義されているように、本開示の趣旨および範囲内にあるすべての修正形態、代替構造、および等価物をカバーすることである。
いくつかの例示的な実施形態は、以下の節によって記載される。
1.多層ニューラルネットワークにおいて複数のデータセットを処理する方法であって、多層ニューラルネットワークが、第1のニューラルネットワーク層、第1のニューラルネットワーク層によって生成された出力を処理する第2のニューラルネットワーク層、および第2のニューラルネットワーク層によって生成された出力を処理する第3のニューラルネットワーク層を備え、方法が
第1のデータセットをメモリに格納することと、
第1のニューラルネットワーク層を使用して、第1のデータセットの第1の層出力を生成するために、メモリからの第1のデータセットを処理することと、
第1のデータセットの第1の層出力をメモリに格納することと、
メモリから第1のデータセットを削除することと、
メモリに格納された第1のデータセットの第1の層出力に第2のデータセットを追加することと、
第1のニューラルネットワーク層を使用して、第2のデータセットの第1の層出力を生成するために、メモリからの第2のデータセットを処理することと、
メモリに格納された第1のデータセットの第1の層出力に第2のデータセットの第1の層出力を追加することと、
メモリから第2のデータセットを削除することと、
第2のニューラルネットワーク層を使用して、それぞれ、第1のデータセットの第2の層出力および第2のデータセットの第2の層出力を生成するために、メモリからの第1のデータセットの第1の層出力および第2のデータセットの第1の層出力を処理することと、
第1のデータセットの第2の層出力および第2のデータセットの第2の層出力をメモリに格納することと、
第1のデータセットの第1の層出力および第2のデータセットの第1の層出力をメモリから削除することと、
メモリに格納された第1のデータセットの第2の層出力および第2のデータセットの第2の層出力に第3のデータセットを追加することと、
第1のニューラルネットワーク層を使用して、第1のデータセットの第2の層出力および第2のデータセットの第2の層出力が生成された後、第3のデータセットの第1の層出力を生成するために、メモリからの第3のデータセットを処理することと、
第3のデータセットの第1の層出力をメモリに格納することと、
メモリから第3のデータセットを削除することと、
メモリに格納された第1のデータセットの第2の層出力、第2のデータセットの第2の層出力、および第3のデータセットの第1の層出力に第4のデータセットを追加することと、
第1のニューラルネットワーク層を使用して、第4のデータセットの第1の層出力を生成するために、メモリからの第4のデータセットを処理することと、
メモリに格納された第3のデータセットの第1の層出力、第1のデータセットの第2の層出力、および第2のデータセットの第2の層出力に第4のデータセットの第1の層出力を追加することと、
メモリから第4のデータセットを削除することと、
第2のニューラルネットワーク層を使用して、それぞれ、第3のデータセットの第2の層出力および第4のデータセットの第2の層出力を生成するために、第3のデータセットの第1の層出力および第4のデータセットの第1の層出力を処理することと、
メモリに格納された第1のデータセットの第2の層出力および第2のデータセットの第2の層出力に、第3のデータセットの第2の層出力および第4のデータセットの第2の層出力を追加することと、
第3のニューラルネットワーク層を使用して、それぞれ、第1のデータセットの第3の層出力、第2のデータセットの第3の層出力、第3のデータセットの第3の層出力、および第4のデータセットの第3の層出力を生成するために、メモリからの第1のデータセットの第2の層出力、第2のデータセットの第2の層出力、第3のデータセットの第2の層出力、および第4のデータセットの第2の層出力を処理することと、
第1のデータセットの第3の層出力、第2のデータセットの第3の層出力、第3のデータセットの第3の層出力、および第4のデータセットの第3の層出力をメモリに格納することと
を含む、方法。
2.第1のデータセットの第2の層出力および第2のデータセットの第2の層出力が、メモリに格納された第1のデータセットの第1の層出力を少なくとも上書きすることによってメモリに格納される、節1の方法。
3.第4のデータセット、第4のデータセットの第1の層出力、第3のデータセットの第1の層出力、第1のデータセットの第2の層出力、および第2のデータセットの第2の層出力を同時にを格納するためのスペースを提供するようにメモリを制御することをさらに含む、任意の前節の方法。
4.第1のデータセットの第1の層出力のデータサイズが、第1のデータセットの第2の層出力のデータサイズよりも大きく、第1のデータセットの第2の層出力のデータサイズが、第1のデータセットの第3の層出力のデータサイズよりも大きい、任意の前節の方法。
5.データを処理する方法であって、
ニューラルネットワークの第1の層を実装するように第1の構成内の計算エンジンを設定することと、
第1のコンテキストの第1の層出力を生成するために、第1の構成内の計算エンジンを使用して第1のコンテキストに関連する第1のデータを処理することと、
ニューラルネットワークの第2の層を実装するように第2の構成内の計算エンジンを設定することと、
第1のコンテキストの第2の層出力を生成するために、第2の構成内の計算エンジンを使用して第1のコンテキストの第1のデータを処理することと、
第2の構成から第1の構成に戻るように計算エンジンを切り替えることと、
第2のコンテキストの第1の層出力を生成するために、第1の構成内の計算エンジンを使用して第2のコンテキストに関連する第2のデータを処理することと、
ニューラルネットワークの第2の層を実装するように第2の構成に戻るように計算エンジンを設定することと、
第2のコンテキストの第2の層出力を生成するために、第2の構成内の第2のコンテキストの第1の層出力を処理することと、
ニューラルネットワークの第3の層を実装するように第3の構成内の計算エンジンを設定することと、
第1のコンテキストの第3の層出力および第2のコンテキストの第3の層出力を生成するために、第3の構成内の計算エンジンを使用して第1のコンテキストの第2の層出力および第2のコンテキストの第2の層出力を処理することと
を含む、方法。
6.第3のコンテキストの第1の層出力を生成するために、第1の構成内の計算エンジンを使用して第3のコンテキストに関連する第3のデータを処理することと、
それぞれ、第3のコンテキストの第2の層出力および第1のコンテキストの第2の層出力を生成するために、第2の構成内の計算エンジンを使用して第3のコンテキストの第1の層出力および第1のコンテキストの第1の層出力を処理することと
をさらに含む、節5の方法。
7.第1のコンテキストの第1の層出力および第3のコンテキストの第1の層出力をメモリデバイスに格納することと、
入力としてメモリデバイスから第1のコンテキストの第1の層出力を受け取るように計算エンジンの第1の部分を構成することと、
入力としてメモリデバイスから第3のコンテキストの第1の層出力を受け取るように計算エンジンの第2の部分を構成することと、
計算エンジンの第1の部分を使用して、第1のコンテキストの第1の層出力を処理することと、
計算エンジンの第2の部分を使用して、第3のコンテキストの第1の層出力を処理することと
をさらに含む、節6の方法。
8.計算エンジンの第1の部分を使用する第1のコンテキストの第1の層出力の処理、および計算エンジンの第2の部分を使用する第3のコンテキストの第1の層出力の処理が並行して実行される、節7の方法。
9.第4のコンテキストの第1の層出力を生成するために、第1の構成内の計算エンジンを使用して第4のコンテキストに関連する第4のデータを処理することと、
それぞれ、第2のコンテキストの第2の層出力および第4のコンテキストの第2の層出力を生成するために、第2の構成内の計算エンジンを使用して第2のコンテキストの第1の層出力および第4のコンテキストの第1の層出力を処理することと
をさらに含む、節5から8のいずれかの方法。
10.第2のコンテキストの第1の層出力および第4のコンテキストの第1の層出力をメモリデバイスに格納することと、
入力としてメモリデバイスから第2のコンテキストの第1の層出力を受け取るように計算エンジンの第1の部分を構成することと、
入力としてメモリデバイスから第4のコンテキストの第1の層出力を受け取るように計算エンジンの第2の部分を構成することと、
計算エンジンの第1の部分を使用して、第2のコンテキストの第1の層出力を処理することと、
計算エンジンの第2の部分を使用して、第4のコンテキストの第1の層出力を処理することと
をさらに含む、節9の方法。
11.計算エンジンの第1の部分を使用する第2のコンテキストの第1の層出力の処理、および計算エンジンの第2の部分を使用する第4のコンテキストの第1の層出力の処理が実質的に並行して実行される、節10の方法。
12.第1のコンテキストの第2の層出力をメモリデバイスに格納することと、
第1のコンテキストの第2の層出力に加えて、第2のコンテキストに関連する第2のデータをメモリデバイスに格納することと、
第1のコンテキストの第2の層出力および第2のコンテキストに関連する第2のデータに加えて、第2のコンテキストの第1の層出力をメモリデバイスに格納することと
をさらに含む、節5から11のいずれかの方法。
13.メモリデバイスに格納された第2のコンテキストに関連する第2のデータまたは第2のコンテキストの第1の層出力の少なくとも一部を、第2のコンテキストの第2の層出力で上書きすること
をさらに含む、節12の方法。
14.入力としてメモリデバイスから第1のコンテキストの第2の層出力を受け取るように計算エンジンの第3の部分を構成することと、
入力としてメモリデバイスから第2のコンテキストの第2の層出力を受け取るように計算エンジンの第4の部分を構成することと、
計算エンジンの第3の部分を使用して、第1のコンテキストの第2の層出力を処理することと、
計算エンジンの第4の部分を使用して、第2のコンテキストの第2の層出力を処理することと
をさらに含む、節13の方法。
15.計算エンジンの第3の部分を使用する第1のコンテキストの第2の層出力の処理、および計算エンジンの第4の部分を使用する第2のコンテキストの第2の層出力の処理が実質的に並行して実行される、節14の方法。
16.第1のコンテキストの第1の層出力を生成するために、第1の構成内の計算エンジンを使用して第1のコンテキストに関連する第1のデータを処理することが、第1のデータとニューラルネットワークの第1の層に関連付けられた重みのセットとの間で1つまたは複数の畳み込み計算を実行することを含む、節5から15のいずれかの方法。
17.第1のコンテキストの第1の層出力を生成するために、活性化関数エンジンによって1つまたは複数の畳み込み計算の結果を処理すること
をさらに含む、節16の方法
18.状態バッファとして構成されたメモリデバイスと、
メモリデバイスと結合され、処理要素の配列を備える計算エンジンであって、処理要素の配列の各々が加算器および乗算器を備える、計算エンジンと
を備える、集積回路であって、
計算エンジンが、
ニューラルネットワークの第2の層に関連付けられた重みの第1のセットを状態バッファから取得することと、
第1のデータの第2の層出力を生成するために、重みの第1のセットと第1のデータとの間で加算および乗算の第1のセットを実行することと、
第1のデータの第2の層出力が生成された後、ニューラルネットワークの第1の層に関連付けられた重みの第2のセットを状態バッファから取得することと、
第2のデータの第1の層出力を生成するために、重みの第2のセットと第2のデータとの間で加算および乗算の第2のセットを実行することと、
第2のデータの第2の層出力を生成するために、重みの第1のセットと第2のデータの第1の層出力との間で加算および乗算の第3のセットを実行することと、
ニューラルネットワークの第3の層に関連付けられた重みの第3のセットを状態バッファから取得することと、
第1のデータを処理した第1の結果を生成するために、重みの第3のセットと第1のデータの第2の層出力との間で加算および乗算の第4のセットを実行することと、
第2のデータを処理した第2の結果を生成するために、重みの第3のセットと第2のデータの第2の層出力との間で加算および乗算の第5のセットを実行することと
を行うように構成され、
加算および乗算の第4のセットならびに加算および乗算の第5のセットが、処理要素の配列の異なる部分によって実行される、
集積回路。
19.計算エンジンが、
第1のデータの第2の層出力を状態バッファに格納することと、
重みの第3のセットと状態バッファから取得された第1のデータの第2の層出力との間で加算および乗算の第4のセットを実行することと
を行うようにさらに構成される、節18の集積回路。
20.計算エンジンが、加算および乗算の第4のセットならびに加算および乗算の第5のセットを実質的に並行して実行するように構成される、節18または19の集積回路。
21.第1のコンテキストおよび第2のコンテキストについてのニューラルネットワーク計算を実行するためのスケジュールを決定することであって、各コンテキストについてのニューラルネットワーク計算を実行することが、それぞれのコンテキストについての計算タスクのシーケンスを実行することを含み、計算タスクの各シーケンスが、第1のニューラルネットワーク層を使用する第1の計算タスク、第2のニューラルネットワーク層を使用する第2の計算タスク、および第3のニューラルネットワーク層を使用する第3の計算タスクを含み、1つのコンテキストの第3の計算タスクが、1つのコンテキストの第2の計算タスクの出力を処理するように構成され、1つのコンテキストの第2の計算タスクが、1つのコンテキストの第1の計算タスクの出力を処理するように構成され、
スケジュールを決定することが、
第1のコンテキストの第3の計算タスクおよび第2のコンテキストの第3の計算タスクを含む第1の実行バッチを決定することであって、第1の実行バッチが、状態バッファが第1のコンテキストおよび第2のコンテキストの第3の計算タスクの入力データおよび出力データを保持するのに十分な容量を有することに基づいて決定される、決定することを
を含む、決定することと、
状態バッファが、第1のコンテキストおよび第2のコンテキストの第2の計算タスクの入力データおよび出力データを保持するのに十分な容量を有するかどうかを判定することと、
状態バッファが、第1のコンテキストおよび第2のコンテキストの第2の計算タスクの入力データおよび出力データを保持するのに十分な容量をもたないと判定することに応答して、
第1の実行バッチの前に実行されるべき第2の実行バッチおよび第2の実行バッチの前に実行されるべき第3の実行バッチを決定することであって、第2の実行バッチが第1のコンテキストの第2の計算タスクを含み、第3の実行バッチが第2のコンテキストの第2の計算タスクを含み、第2の実行バッチおよび第3の実行バッチが、状態バッファが第2のコンテキストの第2の計算タスクの出力データ、ならびに第1のコンテキストの第2の計算タスクの入力データおよび出力データを保持するのに十分な容量を有することに基づいて決定される、決定することと、
第2の実行バッチの前に実行されるべき第4の実行バッチを決定することであって、第4の実行バッチが第1のコンテキストの第1の計算タスクを含み、第4の実行バッチが、状態バッファが第1のコンテキストの第1の計算タスクの入力データおよび出力データ、ならびに第2のコンテキストの第2の計算タスクの出力データを保持するのに十分な容量を有することに基づいて決定される、決定することと、
第3の実行バッチを実行することと、
第3の実行バッチの後に第4の実行バッチを実行することと、
第4の実行バッチの後に第2の実行バッチを実行することと、
第2の実行バッチの後に第1の実行バッチを実行することと
を含む、方法。
22.状態バッファが、第1のコンテキストおよび第2のコンテキストの第2の計算タスクの入力データおよび出力データに加えて、第1のコンテキストおよび第2のコンテキストの第2の計算タスク用の重みのセットを保持するのに十分な容量を有するかどうかを判定すること
をさらに含み、
第1の実行バッチの前に実行されるべき第2の実行バッチおよび第2の実行バッチの前に実行されるべき第3の実行バッチを決定することが、状態バッファが第1のコンテキストおよび第2のコンテキストの第2の計算タスクの重みのセット、入力データ、および出力データを保持するのに不十分な容量を有することに基づく、
節21の方法。
23.第2の実行バッチに含まれるべき第1の数の第2の計算タスク、および第3の実行バッチに含まれるべき第2の数の第2の計算タスクを最大化することであって、その結果、第1の数の第2の計算タスクの入力データおよび出力データ、ならびに第2の数の第2の計算タスクの出力データの合計データサイズが、第2の実行バッチが実行されるときの状態バッファの容量を下回る、最大化すること
をさらに含む、節21または22の方法。
24.第3の実行バッチの前に実行されるべき第5の実行バッチを決定することであって、第3の実行バッチが第2のコンテキストの第1の計算タスクを含み、第5の実行バッチが、状態バッファが第2のコンテキストの第1の計算タスクの入力データおよび出力データを保持するのに十分な容量を有することに基づいて決定される、決定することと、
第3の実行バッチの前に第5の実行バッチを実行することと
をさらに含む、節21から23のいずれかの方法。
25.実行されるべき計算タスクのセットを決定することであって、計算タスクのセットが、第1の計算タスク、第2の計算タスク、第3の計算タスク、および第4の計算タスクを含み、第3の計算タスクおよび第4の計算タスクが、それぞれ、第1の計算タスクの入力データおよび第2の計算タスクの入力データを生成する、決定することと、
メモリデバイスが第1の計算タスクと第2の計算タスクの両方の入出力データを保持するのに十分な容量を有することに基づいて、第1の計算タスクおよび第2の計算タスクを含む第1の実行バッチを決定することと、
第1の実行バッチの前に実行されるべき少なくとも第3の計算タスクを含む第2の実行バッチを決定することと、
メモリデバイスが第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するかどうかに基づいて、第2の実行バッチに第4の計算タスクを含めるべきかどうかを判定することと、
第2の実行バッチを実行することと、
第2の実行バッチの後に第1の実行バッチを実行することと
を含む、方法。
26.第2の実行バッチを決定することが、
メモリデバイスが、第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量をもたないが、第3の計算タスクの入力データおよび出力データ、ならびに第4の計算タスクの出力データを保持するのに十分な容量を有すると判断することと、
第3の計算タスクを含む第2の実行バッチを決定することと、
第2の実行バッチの前に実行されるべき第4の計算タスクを含む第3の実行バッチを決定することと
を含み、方法が、
第2の実行バッチの前に第3の実行バッチを実行すること
を含む、節25の方法。
27.計算タスクのセットが、それぞれ、第3の計算タスクの入力データおよび第4の計算タスクの入力データを生成する、第5の計算タスクおよび第6の計算タスクをさらに含み、
方法が、
第5の計算タスクを含む第4の実行バッチを決定することと、
第6の計算タスクを含む第5の実行バッチを決定することと、
第2の実行バッチの前に第4の実行バッチを実行することと、
第3の実行バッチの前に第5の実行バッチを実行することと
をさらに含む、節26の方法。
28.メモリデバイスが第5の計算タスクの出力データ、第6の計算タスクの出力データ、ならびに第4の計算タスクの入力データおよび出力データを格納するのに十分な容量をもたず、メモリデバイスが第4の計算タスクの出力データならびに第5の計算タスクの入力データおよび出力データを格納するのに十分な容量を有すると判断することに基づいて、第3の実行バッチと第2の実行バッチの間で実行されるべき第4の実行バッチを決定すること
をさらに含む、節27の方法。
29.メモリデバイスが第5の計算タスクの出力データ、第6の計算タスクの出力データ、ならびに第4の計算タスクの入力データおよび出力データを格納するのに十分な容量を有すると判断することに基づいて、第3の実行バッチの前に、かつ第2の実行バッチの前に実行されるべき第4の実行バッチを決定すること
をさらに含む、節27または28の方法。
30.第2の実行バッチを決定することが、
メモリデバイスが第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有すると判断することに基づいて、第3の計算タスクおよび第4の計算タスクを含む第2の実行バッチを決定すること
を含む、節25から29のいずれかの方法。
31.計算タスクのセットが、それぞれ、第3の計算タスクの入力データおよび第4の計算タスクの入力データを生成する、第5の計算タスクおよび第6の計算タスクをさらに含み、
方法が、
メモリデバイスが第5の計算タスクと第6の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するがどうかに基づいて、第3の計算バッチを決定することと
第2の実行バッチの前に第3の実行バッチを実行することと、
をさらに含む、節30の方法。
32.第3の実行バッチを決定することが、
メモリデバイスが、第5の計算タスクと第6の計算タスクの両方の入力データおよび出力データを格納するのに十分な容量をもたないが、第5の計算タスクの入力データおよび出力データ、ならびに第6の計算タスクの出力データを格納するのに十分な容量を有すると判断することと、
第5の計算タスクを含む第3の実行バッチを決定することと、
第3の実行バッチの前に実行されるべき第6の計算タスクを含む第4の実行バッチを決定することと
を含み、方法が、
第4の実行バッチを実行すること
を含む、節31の方法。
33.第3の実行バッチを決定することが、
メモリデバイスが第5の計算タスクと第6の計算タスクの両方の入力データおよび出力データを格納するのに十分な容量を有すると判断することと、
第5の計算タスクおよび第6の計算タスクを含む第3の実行バッチを決定することと
を含む、節31または32の方法。
34.第2の実行バッチを実行することが、第1の計算タスクおよび第2の計算タスクを実質的に並行して実行することを含む、節25から33のいずれかの方法。
35.第1の計算タスクおよび第3の計算タスクが、第1のコンテキストに関連付けられた第1のデータを処理するためのものであり、第2の計算タスクおよび第4の計算タスクが、第2のコンテキストに関連付けられた第2のデータを処理するためのものである、節25から34のいずれかの方法。
36.第3の計算タスクおよび第4の計算タスクが、第1のニューラルネットワーク層のための計算に関連付けられ、第1の計算タスクおよび第2の計算タスクが、第1のニューラルネットワーク層からのデータを処理する第2のニューラルネットワーク層のための計算に関連付けられる、節25から35のいずれかの方法。
37.状態バッファとして構成されたメモリデバイスと、
メモリデバイスと結合された計算エンジンと、
計算エンジンにおいて実行されるべき計算タスクのセットを決定することであって、計算タスクのセットが、第1の計算タスク、第2の計算タスク、第3の計算タスク、および第4の計算タスクを含み、第3の計算タスクおよび第4のタスクが、それぞれ、第1の計算タスクの入力データおよび第2の計算タスクの入力データを生成する、決定することと、
メモリデバイスが第1の計算タスクと第2の計算タスクの両方の入出力データを保持するのに十分な容量を有することに基づいて、第1の計算タスクおよび第2の計算タスクを含む第1の実行バッチを決定することと、
メモリデバイスが第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量を有するかどうかに基づいて、第1の実行バッチの前に実行されるべき第2の実行バッチを決定することと、
計算エンジンにおいて第2の実行バッチを実行することと、
第2の実行バッチの実行が完了した後に、計算エンジンにおいて第1の実行バッチを実行することと
を行うように構成されたコントローラと
を備える、集積回路。
38.コントローラが、
メモリデバイスが、第3の計算タスクと第4の計算タスクの両方の入力データおよび出力データを保持するのに十分な容量をもたないが、第3の計算タスクの入力データおよび出力データ、ならびに第4の計算タスクの出力データを保持するのに十分な容量を有すると判断することと、
第2の実行バッチが第3の計算タスクを含むと判断することと、
第2の実行バッチの前に実行されるべき第4の計算タスクを含む第3の実行バッチを決定することと、
第4の計算タスクの入力データを格納するためのメモリデバイスにおける第1のメモリ空間、および第4の計算タスクの出力データを格納するためのメモリデバイスにおける第2のメモリ空間を割り当てることと、
第1のメモリ空間から第4の計算タスクの入力データを読み取り、第4の計算タスクの出力データを第2のメモリ空間に格納するように計算エンジンを制御することにより、計算エンジンにおいて第3の実行バッチを実行することと、
計算エンジンにおける第2の実行バッチの実行中に、第4の計算タスクの出力データをメモリデバイスに格納することと
を行うようにさらに構成される、節37の集積回路。
39.計算タスクのセットが、それぞれ、第3の計算タスクの入力データおよび第4の計算タスクの入力データを生成する、第5の計算タスクおよび第6の計算タスクをさらに含み、
コントローラが、
第5の計算タスクを含む第4の実行バッチを決定することと、
第6の計算タスクを含む第5の実行バッチを決定することと、
第2の実行バッチを実行する前に、計算エンジンにおいて第4の実行バッチを実行することと、
第3の実行バッチを実行する前に、計算エンジンにおいて第5の実行バッチを実行することと
を行うようにさらに構成される、節38の集積回路。
40.第1の計算タスク、第3の計算タスク、および第5の計算タスクが、それぞれ、第1のコンテキストについてのニューラルネットワークモデルの第3のニューラルネットワーク層計算、第2のニューラルネットワーク層計算、および第1のニューラルネットワーク層計算に関連付けられ、
第2の計算タスク、第4の計算タスク、および第6の計算タスクが、それぞれ、第2のコンテキストについてのニューラルネットワークモデルの第3のニューラルネットワーク層計算、第2のニューラルネットワーク層計算、および第1のニューラルネットワーク層計算に関連付けられる、
節39の集積回路。
【0104】
[0111]開示された実施形態を記載する文脈において(特に、以下の特許請求の範囲の文脈において)用語「a」および「an」および「the」および同様の指示物の使用は、本明細書において別段の指示がない限り、または文脈によって明らかに矛盾しない限り、単数と複数の両方をカバーすると解釈されるべきである。「備える」、「有する」、「含む」、および「含んでいる」という用語は、特に断りのない限り、制約のない用語(すなわち、「含むが、それに限定されない」を意味する)として解釈されるべきである。「接続された」という用語は、介在する何かが存在する場合でも、部分的もしくは全体的に含まれる、接続される、または一緒に結合されるものと解釈されるべきである。本明細書における値の範囲の列挙は、本明細書において別段の指示がない限り、範囲内にある各個別の値を個別に参照する簡略法として機能することのみを意図し、各個別の値は、本明細書において個別に列挙されているかのように本明細書に組み込まれる。本明細書に記載されたすべての方法は、本明細書において別段の指示がない限り、または文脈によって明らかに矛盾しない限り、任意の適切な順序で実行することができる。本明細書において提供されたありとあらゆる例または例示的な言語(たとえば、「など」)の使用は、本開示の実施形態をよりよく明らかにすることのみを意図しており、別段の請求がない限り、本開示の範囲を限定するものではない。本明細書内の言語は、任意の請求されていない要素を本開示の実践に不可欠であると示すものとして解釈されるべきではない。
【0105】
[0112]フレーズ「X、Y、またはZの少なくとも1つ」などの選言語は、特に明記されていない限り、一般的に、項目、用語などがX、Y、もしくはZ、またはそれらの任意の組合せ(たとえば、X、Y、および/もしくはZ)であることを提示するために使用されるものとして、文脈内で理解されるものである。したがって、そのような選言語は、一般に、特定の実施形態が少なくとも1つのX、少なくとも1つのY、または少なくとも1つのZが各々存在することを必要とすることを意味するものではなく、意味するべきではない。
【0106】
[0113]本開示を実行するための発明者に知られている最良の形態を含む、本開示の様々な実施形態が本明細書に記載されている。それらの実施形態の変形形態は、前述の説明を読むと当業者に明らかになる可能性がある。発明者は、当業者がそのような変形形態を適切に利用することを期待し、発明者は、本明細書に具体的に記載された以外の方法で本開示が実践されることを意図する。したがって、本開示は、適用可能な法律によって許可されるように、本明細書に添付された特許請求の範囲に列挙された主題のすべての修正形態および均等物を含む。その上、それらのすべての可能な変形形態における上述された要素の任意の組合せは、本明細書において別段の指示がない限り、または文脈によって明らかに矛盾しない限り、本開示によって包含される。