(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024037959
(43)【公開日】2024-03-19
(54)【発明の名称】低電力畳み込みニューラルネットワーク推論アプリケーションのメモリ帯域幅低減技術
(51)【国際特許分類】
G06N 3/063 20230101AFI20240312BHJP
G06F 17/10 20060101ALI20240312BHJP
G06N 3/0464 20230101ALI20240312BHJP
【FI】
G06N3/063
G06F17/10 A
G06N3/0464
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2023213617
(22)【出願日】2023-12-19
(62)【分割の表示】P 2020544323の分割
【原出願日】2018-09-24
(31)【優先権主張番号】15/812,336
(32)【優先日】2017-11-14
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.VERILOG
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(71)【出願人】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ラグードゥ サティーシュ
(72)【発明者】
【氏名】レイ ジャン
(72)【発明者】
【氏名】アレン ラッシュ
(57)【要約】 (修正有)
【課題】低電力畳み込みニューラルネットワーク推論アプリケーションのメモリ帯域幅低減技術を実装するシステム、装置及び方法を提供する。
【解決手段】処理ユニットと、処理ユニットに接続された外部メモリと、を少なくとも含むシステムにおいて、畳み込み層を実装する方法は、複数のチャネルからの入力データに対して畳み込み演算を実行する要求を検出することと、要求を検出したことに応じて、実行される畳み込み演算の外部メモリ帯域幅の利用を最小化するために、複数のチャネルからの入力データを3Dブロックに分割することと、選択した3Dブロックを外部メモリから内部メモリにロードし、1つ以上のフィーチャについて、選択された3Dブロックに関する畳み込み出力データを生成することと、フィーチャ毎に、畳み込み出力データを外部メモリに書き込む前に、チャネルに亘って畳み込み出力データを共に追加することと、を含む。
【選択図】
図10
【特許請求の範囲】
【請求項1】
装置であって、
複数のチャネル処理エンジンであって、前記複数のチャネル処理エンジンの各々は、複数のチャネルのうち何れかのチャネルの畳み込み演算を実行するように構成されている、複数のチャネル処理エンジンを備え、
前記複数のチャネル処理エンジンのうち第1のチャネル処理エンジンは、
前記複数のチャネルのうち第1のチャネルに対応する第1のデータを読み出すことと、
前記複数のチャネルのうち第2のチャネルに関する第2のデータの読み出しを実行する前に、前記第1のデータを用いて複数のフィーチャについての演算を実行することと、
を行うように構成されている、
装置。
【請求項2】
前記第1のチャネル処理エンジンは、前記演算に応じた第1の出力データを生成するように構成されている、
請求項1の装置。
【請求項3】
前記複数のチャネル処理エンジンのうち第2のチャネル処理エンジンは、前記複数のフィーチャについての演算の後に、
前記複数のチャネルのうち第2のチャネルに対応する第2のデータを読み出すことと、
前記複数のチャネルのうち第3のチャネルに関するデータの読み出しを実行する前に、前記第2のデータを用いて前記複数のフィーチャについての演算を実行することと、
を行うように構成されている、
請求項2の装置。
【請求項4】
前記第2のチャネル処理エンジンは、前記第2のデータを用いた前記演算に応じた第2の出力データを生成するように構成されている、
請求項3の装置。
【請求項5】
複数の加算器であって、前記複数の加算器の各々は、前記複数のフィーチャのうち何れかのフィーチャに対応する、複数の加算器をさらに備える、
請求項4の装置。
【請求項6】
前記複数の加算器のうち第1の加算器は、前記第1の出力データと前記第2の出力データとの合計を生成するように構成されている、
請求項5の装置。
【請求項7】
前記装置は、前記第1の出力データ及び前記第2の出力データの両方を生成するために、前記第1のチャネルに対応する前記第1のデータを1回だけ読み出すように構成されている、
請求項4の装置。
【請求項8】
前記第1のチャネル処理エンジンは、前記第1の出力データを外部メモリに記憶させるように構成されている、
請求項2の装置。
【請求項9】
方法であって、
複数のチャネル処理エンジンのうち第1のチャネル処理エンジンが、複数のチャネルのうち第1のチャネルに対応する第1のデータを読み出すことであって、前記複数のチャネル処理エンジンの各々は、複数のチャネルのうち何れかのチャネルの畳み込み演算を実行するように構成されている、ことと、
前記第1のチャネル処理エンジンが、前記複数のチャネルのうち第2のチャネルに関する第2のデータの読み出しを実行する前に、前記第1のデータを用いて複数のフィーチャについての演算を実行することと、を含む、
方法。
【請求項10】
前記第1のチャネル処理エンジンが、前記演算に応じた第1の出力データを生成することを含む、
請求項9の方法。
【請求項11】
前記複数のチャネル処理エンジンのうち第2のチャネル処理エンジンが、前記複数のフィーチャについての演算の後に、
前記複数のチャネルのうち第2のチャネルに対応する第2のデータを読み出すことと、
前記複数のチャネルのうち第3のチャネルに関するデータの読み出しを実行する前に、前記第2のデータを用いて前記複数のフィーチャについての演算を実行することと、を含む、
請求項10の方法。
【請求項12】
前記第2のチャネル処理エンジンが、前記第2のデータを用いた前記演算に応じた第2の出力データを生成することを含む、
請求項11の方法。
【請求項13】
複数の加算器のうち何れかの加算器が、前記第1の出力データと前記第2の出力データとの合計を生成することを含む、
請求項12の方法。
【請求項14】
前記第1の出力データ及び前記第2の出力データの両方を生成するために、前記第1のチャネルに対応する前記第1のデータを1回だけ読み出すことを含む、
請求項13の方法。
【請求項15】
前記第1のチャネル処理エンジンが、前記第1の出力データを外部メモリに記憶させることを含む、
請求項10の方法。
【請求項16】
システムであって、
内部メモリを含む処理ユニットと、
前記処理ユニットに接続された外部メモリと、
インタフェースエンジンと、を備え、
前記インタフェースエンジンは、
複数のチャネル処理エンジンであって、前記複数のチャネル処理エンジンの各々は、複数のチャネルのうち何れかのチャネルの畳み込み演算を実行するように構成されている、複数のチャネル処理エンジンを備え、
前記複数のチャネル処理エンジンのうち第1のチャネル処理エンジンは、
前記複数のチャネルのうち第1のチャネルに対応する第1のデータを前記外部メモリから前記内部メモリに読み出すことと、
前記複数のチャネルのうち第2のチャネルに関する第2のデータの読み出しを実行する前に、前記第1のデータを用いて複数のフィーチャについての演算を実行することと、
を行うように構成されている、
システム。
【請求項17】
前記第1のチャネル処理エンジンは、前記演算に応じた第1の出力データを生成するように構成されている、
請求項16のシステム。
【請求項18】
前記第1のチャネル処理エンジンは、前記第1の出力データを前記外部メモリに記憶させるように構成されている、
請求項17のシステム。
【請求項19】
前記複数のチャネル処理エンジンのうち第2のチャネル処理エンジンは、前記複数のフィーチャについての演算の後に、
前記複数のチャネルのうち第2のチャネルに対応する第2のデータを前記外部メモリから前記内部メモリに読み出すことと、
前記複数のチャネルのうち第3のチャネルに関するデータの読み出しを実行する前に、前記第2のデータを用いて前記複数のフィーチャについての演算を実行することと、
を行うように構成されている、
請求項16のシステム。
【請求項20】
前記第2のチャネル処理エンジンは、前記第2のデータを用いた前記演算に応じた第2の出力データを生成するように構成されている、
請求項19のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
新しい技術分野は機械学習であり、畳み込みニューラルネットワークは機械学習モデルの一種である。畳み込みニューラルネットワークは、手書き数字の分類及び顔検出等のタスクにおいて優れたパフォーマンスを発揮する。また、畳み込みニューラルネットワークは、他のより困難な視覚的分類タスクにおいて良好に機能する可能性を示している。機械学習モデルは、大量の処理リソース及び外部メモリ帯域幅を利用する。したがって、機械学習モデルのパフォーマンスを改善し、及び/又は、メモリ帯域幅の利用を低減するための技術が望まれている。
【0002】
添付図面と共に以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【0003】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】コンピューティングシステムの別の実施形態のブロック図である。
【
図3】ニューラルネットワークの実装の一実施形態のブロック図である。
【
図4】推論エンジンの一実施形態のブロック図である。
【
図5】推論エンジンの別の実施形態のブロック図である。
【
図6】チャネルデータを3Dブロックに分割する一実施形態のブロック図である。
【
図7】推論エンジンの別の実施形態のブロック図である。
【
図8】メモリブロックを処理するための垂直順序(vertical order)を用いて、ニューラルネットワークの実装における外部メモリ帯域幅の利用を低減する一実施形態のブロック図である。
【
図9】ニューラルネットワークの異なる層を実行するためのブロックサイズの一実施形態のブロック図である。
【
図10】畳み込み層を実装する方法の一実施形態を示す一般化されたフローチャートである。
【
図11】外部メモリ帯域幅の低減のための技術を選択する方法の別の実施形態を示す一般化されたフローチャートである。
【
図12】畳み込み演算の間の3Dブロックの一実施形態のブロック図である。
【
図13】畳み込み演算の間に3Dブロックを動的に再形成する一実施形態のブロック図である。
【発明を実施するための形態】
【0004】
以下の説明では、本明細書で提示される方法及びメカニズムの十分な理解を提供するために、多くの特定の詳細が示されている。しかしながら、当業者は、これらの特定の詳細なしに様々な実施形態を実施することができることを認識するはずである。いくつかの例では、本明細書で説明するアプローチを曖昧にすることを避けるために、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術を詳細に示していない。例示を単純且つ明瞭にするために、図に示される要素は、必ずしも縮尺通りに描かれていないことが認識されよう。例えば、いくつかの要素の寸法は、他の要素に比べて誇張されている場合がある。
【0005】
低電力畳み込みニューラルネットワーク推論アプリケーションのメモリ帯域幅低減技術を実装する様々なシステム、装置、方法及びコンピュータ可読媒体が本明細書で開示されている。一実施形態では、システムは、少なくとも処理ユニットと、処理ユニットに接続された外部メモリと、を含む。一実施形態では、処理ユニットは、グラフィックス処理ユニット(GPU)である。他の実施形態では、処理ユニットは、他のタイプの処理ユニット(例えば、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、中央処理装置(CPU))であってもよい。一実施形態では、処理ユニットは、少なくともコマンドプロセッサ、1つ以上の計算ユニット、及び、1つ以上のキャッシュを含む。1つ以上のキャッシュは、処理ユニットの内部メモリと呼ばれることもある。
【0006】
一実施形態では、システムは、複数のチャネルからの入力データに対して畳み込み演算を実行する要求を検出する。一実施形態では、複数のチャネルからの入力データに対する畳み込み演算は、ニューラルネットワークの畳み込み層の一部として実施される。システムは、要求を検出したことに応じて、1つ以上の要素に基づいて、複数のチャネルからの入力データを三次元(3D)ブロックに分割する。1つ以上の要素は、実行されている畳み込み演算に関する外部メモリ帯域幅の利用をどのように最小化するかを決定することを含む。別の実施形態では、1つ以上の要素は、内部メモリのサイズ、1つ以上のフィーチャ(features)のサイズ、及び/又は、畳み込みのサイズを含む。
【0007】
システムは、複数のチャネルからの入力データを複数の3Dブロックに分割した後に、処理する第1の3Dブロックを選択し、選択した3Dブロックを、外部メモリから処理ユニットの内部メモリにロードする。次に、システムは、1つ以上のフィーチャについて選択された3Dブロックの畳み込み出力データを生成する。次いで、システムは、1つ以上のフィーチャ毎に、畳み込み出力データを外部メモリに書き込む前に、3Dブロックの第1の複数のチャネルに亘って畳み込み出力データを共に追加する。次に、システムは、対応するフィーチャについて生成された第1の複数のチャネルに亘る畳み込み出力データの各々の合計を、外部メモリに書き込む。次いで、システムは、処理する次の3Dブロックを選択する。一実施形態では、システムは、外部メモリ帯域幅の利用を最小化するために、3Dブロックを処理する特定のパターンに従う。一実施形態では、システムは、左上の3Dブロックを選択することによって開始し、次に、入力データ全体の下部境界に達するまで垂直方向に下に進む。次いで、システムは、1つ右の列に移り、列の最上部から開始して列を下に移動しながら、各3Dブロックを処理する。この3Dブロックの処理パターンは、残りの3Dブロックについて継続することができる。
【0008】
ここで、
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、推論エンジン105と、1つ以上のプロセッサ110と、入出力(I/O)インタフェース120と、バス125と、1つ以上のメモリデバイス130と、を少なくとも含む。推論エンジン105は、畳み込みニューラルネットワーク105又はニューラルネットワーク105と呼ばれる場合があることに留意されたい。他の実施形態では、コンピューティングシステム100は、他のコンポーネントを含んでもよく、及び/又は、コンピューティングシステム100は、異なるように配置されてもよい。
【0009】
一実施形態では、推論エンジン105は、処理ユニット(例えば、グラフィックス処理ユニット(GPU))上に実装される。別の実施形態では、推論エンジン105は、プログラマブルロジック(例えば、フィールドプログラマブルゲートアレイ(FPGA))上に実装される。さらなる実施形態では、推論エンジン105は、専用ロジック(例えば、特定用途向け集積回路(ASIC))上に実装される。他の実施形態では、推論エンジン105は、他のタイプのコンポーネント、他のタイプのロジック、及び/又は、複数の異なるタイプのコンポーネント若しくは処理ユニットの組み合わせに実装されてもよい。
【0010】
一実施形態では、推論エンジン105は、畳み込みニューラルネットワークの1つ以上の層を実装する。例えば、一実施形態では、推論エンジンは、1つ以上の畳み込み層、1つ以上のプーリング層、1つ以上の正規化層、及び/又は、1つ以上の完全結合層を実装する。層のスタックは、スタックのタイプ(例えば、畳み込み-正規化-プーリング)、及び、実施形態毎に異なるスタック内の層を用いて複数回繰り返されてもよい。
【0011】
一般的に言えば、「推論エンジン」は、画像データを受信し、画像データの1つ以上のラベル確率を生成するハードウェア及び/又はソフトウェアとして定義される。「推論エンジン」は、「分類エンジン」又は「分類器」と呼ばれることもある。一実施形態では、推論エンジン105は、訓練されたニューラルネットワークである。例えば、この実施形態では、推論エンジン105は、ビデオフレームを分析して、ビデオフレームの1つ以上のラベル確率を生成するように構成されている。例えば、潜在的なユースケースには、アイトラッキング、オブジェクト認識、点群推定、レイトレーシング、ライトフィールドモデリング、深さトラッキング等が少なくとも含まれる。アイトラッキングのユースケースでは、推論エンジンは、学習パターン、ドウェル(dwell)、遷移角度、瞬き等に基づいてもよい。他の実施形態では、推論エンジンを、他のタイプのユースケースに合わせてカスタマイズすることができる。一実施形態では、推論エンジンは、整数、又は、精度の低い重みパラメータによって近似される。これらの近似を最適な精度に近づけることができ、推論エンジンの大幅なスピードアップ及び電力低減を可能にする。また、一実施形態では、推論エンジンは、畳み込みニューラルネットワークを実装する場合のメモリ帯域幅の利用を低減するために、複数の内部チャネル処理エンジンを用いて実装される。他の実施形態では、推論エンジンは、他のタイプの機械学習モデルを実装することができる。
【0012】
プロセッサ110は、任意の数及びタイプの処理ユニット(例えば、中央処理装置(CPU)、GPU、デジタル信号プロセッサ(DSP)、FPGA、ASIC)を表す。一実施形態では、推論エンジン105に関連する処理のいくつかは、プロセッサ110によって実行される。メモリデバイス130は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス130内のメモリのタイプは、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)等を含むことができる。メモリデバイス130は、推論エンジン105及びプロセッサ110によってアクセス可能である。I/Oインタフェース120は、任意の数及びタイプのI/Oインタフェース(例えば、周辺機器相互接続(PCI)バス、PCI拡張(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表す。様々なタイプの周辺機器をI/Oインタフェース120に接続することができる。このような周辺機器には、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインタフェースカード等が含まれる(但し、これらに限定されない)。
【0013】
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム若しくはデバイスの何れかであってもよい。コンピューティングシステム100のコンポーネントの数は、実施形態毎に異なってもよいことに留意されたい。各コンポーネント/サブコンポーネントは、
図1に示す数より多くてもよいし少なくてもよい。また、コンピューティングシステム100は、
図1に示されていない他のコンポーネントを含むことができることに留意されたい。また、他の実施形態では、コンピューティングシステム100は、
図1に示す以外の方法で構成されてもよい。
【0014】
ここで、
図2を参照すると、コンピューティングシステム200の別の実施形態のブロック図が示されている。一実施形態では、システム200は、GPU205と、ホストCPU210と、システムメモリ225と、ローカルメモリ230と、を含む。システム200は、図を曖昧にすることを避けるために示されていない他のコンポーネントも含む。アプリケーションは、ホストCPU210上で実行され、ドライバ212とインタフェースして、プログラムコマンド及びデータをGPU205に送信する。ホストCPU210は、メモリコントローラ220及びシステムメモリ225に接続されている。GPU205は、コマンドプロセッサ240と、ディスパッチユニット250と、計算ユニット255A~255Nと、メモリコントローラ220と、グローバルデータ共有部270と、レベル1(L1)キャッシュ265と、レベル2(L2)キャッシュ260と、を少なくとも含む。他の実施形態では、GPU205は、他のコンポーネントを含むことができ、図示したコンポーネントのうち1つ以上を省略することができ、及び/又は、他の適切な方法で編成することができる。
【0015】
特定のタイプの機械学習及びニューラルネットワークアプリケーションは、高帯域幅要件を有し、外部メモリの帯域幅を低減することができれば、パフォーマンスの向上及び処理時間の短縮を達成することができる。場合によっては、外部メモリ帯域幅は、ニューラルネットワークを実装する場合にボトルネックになることがある。したがって、外部メモリの帯域幅が低減すると、システム200でのニューラルネットワークの実行速度を大幅に向上させることができる。
【0016】
GPU205のグローバルデータ共有部270、L1キャッシュ265及びL2キャッシュ260は、本明細書で使用される「内部メモリ」という用語を表す。内部メモリは、GPU205に対する外部メモリと区別され、システムメモリ225及びローカルメモリ230は、本明細書で使用される「外部メモリ」という用語を表す。様々なニューラルネットワークアプリケーションの実行において、GPU205は、システムメモリ225及びローカルメモリ230からデータを読み出し、これらにデータを書き込む外部メモリ帯域幅を最小化するように構成されている。
【0017】
様々な実施形態では、コンピューティングシステム200は、様々なタイプの機械学習アルゴリズムの何れかを実装するように構成されている。例えば、一実施形態では、コンピューティングシステム200は、ニューラルネットワーク(例えば、パーセプトロン、畳み込みニューラルネットワーク)を実装するように構成されている。ホストCPU210上で実行されるアプリケーションは、ドライバ212を利用して、データ及びコマンドをGPU205に送信する。コマンドプロセッサ240は、ホストCPU210からコマンドを受信し、ディスパッチユニット250を利用して、コマンドを計算ユニット255A~255Nに発行するように構成されている。計算ユニット255A~255Nは、内部メモリ帯域幅を使用して、GPU205内のグローバルデータ共有部270、L1キャッシュ265及びL2キャッシュ260に対してデータを読み書きするように構成されている。
図2には示されていないが、計算ユニット255A~255Nは、各計算ユニット255A~255N内に1つ以上のキャッシュ及び/又はローカルメモリを含むことができる。これらのキャッシュ及び/又はローカルメモリは、GPU205の「内部メモリ」の表現に含まれてもよい。また、計算ユニット255A~255Nは、外部メモリ帯域幅を利用して、メモリコントローラ220を介して、システムメモリ225及び/又はローカルメモリ230に対してデータを読み書きするように構成されている。
【0018】
データ分割ユニット245は、ハードウェア及び/又はソフトウェアの任意の適切な組み合わせを使用して実装されてもよい。一実施形態では、コマンドプロセッサ240は、実装されているニューラルネットワークの1つ以上の層に対してチャネルデータをどのように分割するかを決定するチャネルデータ分割ユニット245を含む。別の実施形態では、チャネルデータ分割ユニット245は、ドライバ212の一部として含まれてもよい。さらなる実施形態では、チャネルデータ分割ユニット245は、ドライバ212、コマンドプロセッサ240、及び/又は、1つ以上の他の場所の間で分割されてもよい。一実施形態では、チャネルデータ分割ユニット245は、ニューラルネットワークの所定の層に対する外部メモリ帯域幅の利用を最小化するために、各ニューラルネットワーク層に対してチャネルデータをどのように分割するかを決定する。いくつかの実施形態では、ニューラルネットワークの1つ以上の層が統合(マージ)される。これらの実施形態では、分割ユニット245は、統合された層の外部メモリ帯域幅の利用を最小化するために、統合された層に対してチャネルデータをどのように分割するかを決定する。外部メモリ帯域幅の利用を最小化するためにニューラルネットワークの層のチャネルデータを分割する技術は、本開示の残りの部分においてより詳細に説明される。
【0019】
ここで、
図3を参照すると、ニューラルネットワーク300の実装の一実施形態のブロック図が示されている。ニューラルネットワーク300は、畳み込み層302と、サブサンプリング層304と、畳み込み層306と、サブサンプリング層308と、完全結合層310と、を含む。他の実施形態では、ニューラルネットワーク300は、他の数の層及び層の配置を含むことができる。
【0020】
コンピューティングシステム(例えば、
図1のシステム100)上にニューラルネットワーク300を実装する場合、メモリ帯域幅要件は、かなりのものになる可能性がある。コンピューティングシステム上にニューラルネットワーク300を実装する場合、消費される外部メモリ帯域幅の量を低減するために、1つ以上の技術が利用されてもよい。例えば、第1の技術では、入力チャネルを複数回ではなく1回読み出し、全てのフィーチャについて入力チャネルの畳み込みを実行することを含む。第1の技術では、入力チャネルの読み出しメモリ帯域幅がチャネル数だけ低減する。第2の技術では、1つ以上のフィーチャについて複数のチャネルの畳み込み出力データを生成し、畳み込み出力データを外部メモリに書き戻す前に、複数のチャネルに亘って畳み込み出力データを組み合わせることを含む。第3の技術では、ニューラルネットワーク300の2つ以上の層を組み合わせ、出力データを外部メモリに書き戻す前に、2つ以上の層をインラインで実行することを含む。様々な実施形態では、他の技術が利用されてもよく、及び/又は、これらの3つの技術のうち1つ以上と組み合わされてもよい。
【0021】
ここで、
図4を参照すると、推論エンジン400の一実施形態のブロック図が示されている。実施形態に応じて、推論エンジン400は、(
図1の)システム100、(
図2の)システム200又は別のコンピューティングシステム上に実装されてもよい。推論エンジン400は、複数のチャネル処理エンジン402A~402Nを含む。推論エンジン400は、推論アクセラレータと呼ばれる場合があることに留意されたい。チャネル処理エンジン402A~402Nの数は、実施形態毎に異なってもよい。チャネル処理エンジン402Aは、一実施形態によるチャネル処理エンジンのコンポーネントを示すように拡大されている。他のチャネル処理エンジン402B~402Nは、コンポーネントの同様の配置を含むことができる。
【0022】
推論エンジン400の実装形態は、外部メモリ帯域幅の利用を低減する第1の技術を示す。
図4に示す第1の技術を利用すると、各チャネルの入力チャネルデータが、複数回読み出されるのではなく、1回読み出される。次に、全てのフィーチャの入力チャネルデータに対して畳み込みが実行される。例えば、一実施形態では、入力チャネルデータ404がチャネル0について読み出され、その後、全ての「M」個のフィーチャ410A~410Mに対して畳み込みが実行される。「M」個のフィーチャの数は、層及び実施形態に従って異なり得る。入力データと各フィーチャの畳み込みの結果は、出力データブロック415A~415Mとして示され、出力データ415A~415Mが、ブロック420A~420Mによって表される外部メモリに書き込まれる。チャネル0に関して全てのM個のフィーチャの畳み込みが実行された後、チャネル1に関して全てのM個のフィーチャの畳み込みが実行され、チャネルに関して全てのM個のフィーチャの畳み込みが実行される。ブロック402B~402Nは、他のチャネルに関して実行される畳み込みを示し、結果として生じる出力データが外部メモリに書き込まれる。チャネルの数「N」は、ニューラルネットワークの層に従って、及び、実施形態に従って変わってもよい。
【0023】
加算器430A~430Mは、N個のチャネルの全ての畳み込みから生成された全ての出力チャネルデータの各フィーチャについて計算された合計を示す。加算器430A~430Mによって生成された合計は、ブロック440A~440Mとして示されている。これらの合計は、加算器430A~430Mによって計算された後に外部メモリに書き込まれてもよい。合計が外部メモリに書き込まれた後、ニューラルネットワークの1つ以上の他の層が実行されてもよい。
【0024】
ここで、
図5を参照すると、推論エンジン500の別の実施形態のブロック図が示されている。推論エンジン500は、外部メモリ帯域幅の利用を低減する第2の技術を示す。推論エンジン500に示すように、複数のチャネルのデータは、処理ユニット(例えば、
図2のGPU205)の内部メモリにロードされる。内部メモリにロードされるチャネルの数は、処理ユニットの内部メモリのサイズによって制限される。
【0025】
一実施形態では、入力データを表すチャネルブロブ(blob)形状は、内部メモリサイズの利用可能性に基づいて三次元(3D)ブロックに分割される。次に、「N」個のチャネルの畳み込みが、畳み込み計算ブロック502A~502Nの各チャネルの第1のフィーチャに対して実行される。N個のチャネル及びフィーチャ0の畳み込み出力データは、フィーチャ0に関するN個のチャネルの畳み込み出力データの何れかを外部メモリに書き込む前に、フィーチャ0の加算器520Aによって共に加算される。また、フィーチャ0のN個のチャネルの畳み込みと並列して、他のM-1個のフィーチャのN個のチャネルの畳み込みも実行される。M個のフィーチャの各々は、畳み込み出力データを外部メモリに書き込む前に、各フィーチャのN個のチャネルの畳み込み出力データを加算する別の加算器520A~520Mを有する。次に、加算器520A~520Mが異なるフィーチャ0~フィーチャM-1の合計を生成した後、結果として得られる合計がブロック530A~530Mに示すように外部メモリに書き込まれる。
【0026】
ここで、
図6を参照すると、チャネルデータを三次元(3D)ブロックに分割する一実施形態のブロック図が示されている。チャネルデータ605は、
図6の左側においてデータの3Dブロブとして示されている。一実施形態では、チャネルデータ分割ユニット(例えば、
図2のチャネルデータ分割ユニット245)は、チャネルデータ605をブロック610A~610H(及び、3Dブロブの後側の他のラベル付けされていないブロック)に分割する方法を決定する。この説明のために、チャネルデータ605全体が合計16個のブロックに分割され、各ブロックは、XY方向にサイズN×N、Z(又は、チャネル)方向にサイズM/2であると想定する。この分割は、単に1つの特定の実施形態を示すものであることを理解されたい。他の実施形態では、チャネルデータ605全体を、他の数及びサイズのブロックに分割することができる。
【0027】
一実施形態では、チャネルデータ605のブロック610A~610Hは、一度に1ブロックずつ、外部メモリから処理ユニット(例えば、GPU205)の内部メモリにロードされる。例えば、ブロック610Aが外部メモリから内部メモリにロードされ、次に、畳み込み演算とオプションで1つ以上の演算とが、ニューラルネットワークの所定の1つ以上の層についてブロック610Aで実行され、出力データが外部メモリに書き戻される。次に、ブロック610Bがロードされ、出力データを外部メモリに書き戻す前に同じ演算が実行され、次いでブロック610が処理され、以下同様である。別の実施形態では、3Dブロックを処理するパターンは、ブロック610Aが最初に処理され、次にブロック610Eが処理され、次にブロック610Bが処理され、次にブロック610Fが処理される等のように変わってもよい。
【0028】
ブロック610Aは、
図6の右側に拡大されており、ブロック610Aが外部メモリから処理ユニットの内部メモリにロードされた後、一実施形態において畳み込みがどのように実行されるかを示す。一実施形態では、第1の畳み込みステップ(ステップ1)は、チャネル0~チャネル3の左端のN/4画素に対して実行される。次に、ステップM/8がチャネルM/2-4からM/2-1の左端のN/4画素の畳み込みに対して実行されるまで、第2の畳み込みステップが、チャネル4~チャネル7の左端のN/4画素に対して実行され、第3の畳み込みステップが、チャネル8~チャネル11の左端のN/4画素に対して実行され、以下同様である。ステップM/8の後、次のステップM/8+1は、ブロック610Aの先頭に戻ることができ、左から2番目の列から開始し、ブロック610Aの後部に向かって進む。ブロック610Aの畳み込みを全てのフィーチャで処理するこのパターンは、ブロック610Aの右端の後ろの列に到達するまで続けることができる。ブロック610Aの異なる部分の畳み込みは、外部メモリ帯域幅を利用することなく実行されることに留意されたい。これにより、ニューラルネットワークの1つ以上の層を実装するための全体的な外部メモリ帯域幅の利用を低減するのに役立つ。
【0029】
ここで、
図7を参照すると、推論エンジン700の別の実施形態のブロック図が示されている。推論エンジン700は、外部メモリ帯域幅の利用を低減する第3の技術を示す。第3の技術では、チャネルデータのグループを外部メモリから内部メモリに読み出した後であって、出力データを外部メモリに出力データを書き込む前に、チャネルデータのグループに対して複数の層を実行することを含む。ニューラルネットワークの層を実行する従来のアプローチは、入力データに対して単一の層の処理を実行し、単一の層が完了した後、処理されたデータを外部メモリに書き戻す。次に、処理されたデータが外部メモリから読み戻され、ニューラルネットワークの次の層が実行される。このアプローチは、大量の外部メモリ帯域幅を利用する。
【0030】
ニューラルネットワークの複数の層を実行するために、チャネルデータ705のグループは、外部メモリから、推論エンジン700を実装する処理ユニットの内部メモリにロードされる。一実施形態では、畳み込み層710は、外部メモリからチャネルデータのブロックをロードした後、第1の層として実行される。
【0031】
畳み込み層710の出力を外部メモリに書き戻すのではなく、畳み込み層710の出力は、ニューラルネットワークの次の層によって処理される。
図7に示すように、ニューラルネットワークの次の層は、プーリング層715である。他の実施形態では、他の層が、畳み込み層710に続くことができる。一実施形態では、正規化層720がプーリング層715に続き、結果データ725が外部メモリに書き戻される。推論エンジン700において畳み込み層をプーリング層及び正規化層と組み合わせる例は、一実施形態の単なる例示であることを理解されたい。他の実施形態では、他の数及び/又はタイプの層を組み合わせて、出力結果データ725を外部メモリに書き戻す前に、チャネルデータ705のグループに対してインライン演算で実行してもよい。
【0032】
ここで、
図8を参照すると、ニューラルネットワークの実装における外部メモリ帯域幅の利用を低減するために、メモリブロックを処理するための垂直順序を使用する一実施形態のブロック図が示されている。チャネルデータ800のグループは、
図8の左側に示されている。チャネルデータ800のグループは、複数の3Dブロック805A~805Pに分割されている。一実施形態では、チャネルデータ800は、チャネルデータ分割ユニット(例えば、
図2のチャネルデータ分割ユニット245)によって複数の3Dブロック805A~805Pに分割されている。
【0033】
一実施形態では、分割後、左上の3Dブロック805Aが、推論エンジン(例えば、
図7の推論エンジン700)によって処理される。次に、チャネルデータ800のグループを下に移動し、3Dブロック805Bが処理され、次に3Dブロック805Cが処理され、次に3Dブロック805Dが処理され、次に3Dブロック805Eが処理され、以下同様である。各垂直列が上から下に処理され、チャネルデータ800のグループの全ての列が処理されるまで、次の右側の列が上から下に処理される。
【0034】
図8の右側には、3Dブロック805Aと3Dブロック805Eとの間の境界にあるソース画素810が示されている。境界上に畳み込み出力画素815を生成するために、3Dブロック805A及び3Dブロック805Eの両方のソース画素810が利用される。また、プーリング層のプール出力画素820が図の下の行に示されており、境界付近のプール出力画素820は、3Dブロック805A及び3Dブロック805Eの両方のソース画素810を使用する。また、各3Dブロック805A~805Pの上部及び下部の画素は、隣接するブロックからの画素を必要とする。隣接するブロックからの余分なラインのフェッチは、外部メモリからのデータの余分なフェッチをもたらす。したがって、3Dブロック805A~805Pを処理する効率的な技術は、
図8の左側に示されている処理パターンを使用することである。
【0035】
ここで、
図9を参照すると、ニューラルネットワークの異なる層を実行するためのブロックサイズの一実施形態のブロック図が示されている。
図9の説明は、
図8の説明の続きであることを意図している。
図9のブロック805A,805B,805Eは、
図8のチャネルデータ800のグループの同じブロック805A,805B,805Eを表すことを意図している。畳み込み層を実行するために、隣接するブロックからの追加の画素を使用して、畳み込み層の処理を実行する。これらの追加の画素は、ブロック805Aの各側に追加の画素を含むブロック910に示されている。また、プーリング層を実行するために、隣接するブロックからの追加の画素を使用して、プーリング層の処理を実行する。これらの追加の画素は、ブロック805Aの各側に(ブロック910と比べて)さらに追加の画素を含むブロック920に示されている。
【0036】
この説明のために、一実施形態では、各ブロック805A,805B,805Eは、15ラインの画素を含むことを想定している。他の実施形態では、各ブロック805A,805B,805Eは、他の数のラインの画素を含むことができる。ブロック805A,805B,805Eの各々が15ラインの画素を含む実施形態では、ブロック805Aの処理において、畳み込み層及びプーリング層を実行するために、15ラインの画素が外部メモリからフェッチされ、さらに2ラインの画素が追加される。他の実施形態では、畳み込み層及びプーリング層(及び、実行される追加の層)を実行するために、2ラインの他に、他の数のさらなるラインが必要になることがある。次に、ブロック805Bに垂直方向に移動すると、下部の4ラインの画素が、ブロック805Aの以前の処理演算から内部メモリに保持される。次の15ラインの画素がフェッチされ、これらの15ライン及び保持された4ラインが共に処理され、ブロック805Bに対して畳み込み層及びプーリング層が実行される。ブロック805Aの処理から下部の4ラインの画素が保持されるので、これらの境界ラインの再フェッチが回避される。これは、処理が垂直方向に隣接するブロック間を移動するときに畳み込み層及びプーリング層を実行する場合に、外部メモリ帯域幅の利用を低減するのに役立つ。
【0037】
ここで、
図10を参照すると、畳み込み層を実行する方法1000の一実施形態が示されている。説明のために、この実施形態及び
図11の実施形態におけるステップを順番に示す。しかしながら、説明する方法の様々な実施形態では、説明する要素のうち1つ以上が、同時に実行され、図示した順序とは異なる順序で実行され、まあは、完全に省略されることに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れも、方法1000を実施するように構成されている。
【0038】
システムは、複数のチャネルの入力データに対して畳み込み演算を実行する要求を検出する(ブロック1005)。例えば、一実施形態では、要求は、ニューラルネットワークの畳み込み層が、複数のチャネルからの入力データを処理するように実行されることを指定することができる。一実施形態では、システムは、外部メモリに接続された処理ユニット(例えば、GPU)を少なくとも含む。処理ユニットは、内部メモリと、様々な計算ユニット、実行ユニット、乗累算ユニット(MAC)及び/又は他のロジックと、を含む。
【0039】
システムは、要求を検出したことに応じて、1つ以上の要素に基づいて、複数のチャネルの入力データを複数の三次元(3D)ブロックに分割する(ブロック1010)。(3Dブロックの)三次元のうち2つは、元の入力(例えば、画像、ビデオフレーム)のx、y空間次元に対応し、第3の次元(すなわち、z)は、複数のチャネルに対応する。一実施形態では、システムは、入力データを3Dブロックに分割して、ニューラルネットワークの所定の層に対する外部メモリ帯域幅の利用を最小化する。別の実施形態では、システムは、内部メモリのサイズ、1つ以上のフィーチャのサイズ、及び、畳み込みのサイズに基づいて、入力データを3Dブロックに分割する。他の実施形態では、システムは、1つ以上の他の要素に基づいて、及び/又は、1つ以上の他の目標を達成するために、入力データを3Dブロックに分割することができる。
【0040】
次に、システムは、分割された3Dブロックから第1の3Dブロックを選択して処理する(ブロック1015)。次いで、システムは、選択された3Dブロックを外部メモリから処理ユニットの内部メモリにロードする(ブロック1020)。次に、システムは、1つ以上のフィーチャについて、選択された3Dブロックの畳み込み出力データを生成する(ブロック1025)。次いで、システムは、1つ以上のフィーチャ毎に、畳み込み出力データを外部メモリに書き込む前に、3Dブロックの第1の複数のチャネルに亘る畳み込み出力データを共に追加する(ブロック1030)。次に、システムは、対応するフィーチャについて生成された、第1の複数のチャネルに亘る畳み込み出力データの各々の合計を外部メモリに書き込む(ブロック1035)。次いで、システムは、処理する他の3Dブロックが残っているかどうかを判別する(条件付きブロック1040)。処理する他の3Dブロックが残っている場合(条件付きブロック1040:Yes)、システムは、処理する次の3Dブロックを選択し(ブロック1045)、方法1000はブロック1020に戻る。システムは、外部メモリ帯域幅の利用を最小化するために、3Dブロックを処理する特定のパターンに従うことができることに留意されたい。パターンの一例は、
図8に関連して説明されている。全ての3Dブロックが処理された場合(条件付きブロック1040:No)、方法1000は終了する。
【0041】
ここで、
図11を参照すると、推論エンジンに対して実行される外部メモリ帯域幅の利用技術を選択する方法1100の一実施形態が示されている。ニューラルネットワークの1つ以上の層を実行する要求が検出される(ブロック1105)。一実施形態では、処理ユニットはGPUである。他の実施形態では、処理ユニットは、他のタイプの処理ユニットであってもよい。処理ユニットは、要求を検出したことに応じて、1つ以上の層に関連するチャネルの数、チャネルデータの量、及び、処理のタイプを決定する(ブロック1110)。処理ユニットは、ブロック1110におけるニューラルネットワークの1つ以上の層の実行に関連する他の要素(例えば、フィーチャの数、フィーチャのサイズ、ストライド)を決定することもできる。
【0042】
次に、処理ユニットは、ブロック1110で決定された要素に基づいて、複数の外部メモリ帯域幅の低減技術のうち何れの1つ以上の技術を利用するかを決定する(ブロック1115)。例えば、処理ユニットは、技術毎に、利用される外部メモリ帯域幅の量を計算することができる。また、処理ユニットは、2つ以上の技術が組み合わされた場合に利用される外部メモリ帯域幅の量を計算することができる。次に、処理ユニットは、外部メモリ帯域幅の利用を最小化する1つ以上の技術を選択することができる。次いで、処理ユニットは、選択された1つ以上の技術に従って、及び、処理ユニットの利用可能な内部メモリの量に基づいて、チャネルデータを分割する(ブロック1120)。次に、処理ユニットは、分割されたチャネルデータの部分毎に、ニューラルネットワークの1つ以上の層を実行する(ブロック1125)。次いで、処理ユニットは、部分毎に、処理したチャネルデータを外部メモリに書き込む(ブロック1130)。ブロック1130の後、方法1100は終了する。
【0043】
ここで、
図12を参照すると、畳み込み演算の間の3Dブロックの一実施形態のブロック図が示されている。入力チャネルブロブ1205は、
図12の左側に示されている。チャネルブロブ1205及びブロック1210A~1210Hの寸法は、1つの特定の実施形態を示すことを理解されたい。他の実施形態では、チャネルブロブ1205及びブロック1210A~1210Hの寸法は、
図12に示す寸法と異なってもよい。一実施形態では、ブロック1210A~1210Hの3Dブロックの寸法は、内部メモリ/キャッシュサイズ、入力3Dブロブ形状(チャネル×ブロブ幅×ブロブ高さ)、及び、畳み込みカーネルサイズに基づいて選択される。3DブロックをZ方向に再形成することによって、部分アキュムレータストレージ要件(partial accumulator storage requirements)及び外部メモリ帯域幅の使用が低減される。一実施形態では、入力チャネルブロブ1205の畳み込み処理を開始する前に、3Dブロックサイズの動的なリサイズをファームウェア及び/又はソフトウェアで実施することができる。
【0044】
ブロック1210Aが処理されると、処理されたブロックは、外部メモリ1220内の入力チャネルストレージ1235から取り出され、内部メモリ1215に記憶される。内部メモリ1215のサイズは制限されており、したがって、単一のブロックが内部メモリ1215に収まるようにブロック1210A~1210Hの寸法を選択することができる。
【0045】
外部メモリ1220内の部分アキュムレータストレージ1230は、0~127のチャネルの第1のセットに対して部分的に畳み込まれた累積値についての全てのフィーチャを記憶するために利用される。これらの部分値は。XY方向の全ての3Dブロックについて外部メモリ1220に書き込まれる。次に、畳み込み処理をZ方向に移動させて、後側の3Dブロック(チャネル128~255の3Dブロック)を処理する。後側の3Dブロックを処理する間、前のブロックの部分的に畳み込まれた累積値1230が外部メモリ1220から読み出され、これらの値が、後側のブロックからの部分的に畳み込まれた累積値と組み合わされて、最終的な畳み込み出力が得られ、外部メモリ1220の出力フィーチャストレージ領域1225に記憶される。最終的な畳み込み出力を生成するこの畳み込み処理は、チャネルブロブ1205の前側から後側に移動するとき、部分アキュムレータストレージ1230に関連するさらなる読み出し及び書き込みメモリ帯域幅を必要とする。
【0046】
ここで、
図13を参照すると、畳み込み演算の間に3Dブロックを動的に再形成する一実施形態のブロック図が示されている。
図13の左側に示すように、入力チャネルブロブ1305は、複数の3Dブロック1310A~1310Sに分割される。3Dブロック1310A~1310Sの寸法は、チャネル0~255の全てが単一のブロック内に含まれるように選択される。また、3Dブロックの寸法は、3Dブロックの全体が、チャネル0からチャネル255までの全てのチャネルに関して内部メモリ1315内に収まるように選択される。256個のチャネルを有する入力チャネルブロブ1305の例は、一実施形態の単なる例示であることを理解されたい。他の実施形態では、入力チャネルブロブ1305は、他の数のチャネルを有することができる。
【0047】
ブロック1310A~1310SをZ方向に再形成することによって、全ての入力チャネルを内部メモリ1315に記憶して、入力チャネルブロブ1305の全ての入力チャネルの畳み込みを処理することができる。これは、外部メモリ1320内の部分アキュムレータストレージに関連する外部メモリ帯域幅を最小化するのに役立つ。
図12に示す例示的な3Dブロックのサイジングと比較して、入力チャネルストレージ1335からの入力チャネルの読み出し及び出力フィーチャの書き込みのみが、最終的に外部メモリ帯域幅を使用する。外部メモリ帯域幅の使用の低減は、システム電力消費の低減を可能にする。
【0048】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書で説明する方法及び/又はメカニズムを実施する。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令を、高レベルプログラミング言語として表すことができる。他の実施形態では、プログラム命令を、高レベルプログラミング言語からバイナリ、中間又は他の形式にコンパイルすることができる。或いは、ハードウェアの動作又は設計を記述するプログラム命令を書き込むことができる。このようなプログラム命令は、C言語等の高レベルプログラミング言語によって表すことができる。或いは、Verilog等のハードウェア設計言語(HDL)を使用することもできる。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラム実行のためにプログラム命令をコンピューティングシステムに提供する。一般に、このようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0049】
上述した実施形態は、実装の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、当業者には多くの変形及び修正が明らかになるであろう。以下の特許請求の範囲は、かかる変形及び修正の全てを包含すると解釈されることを意図している。