(57)【要約】メタデータを使用したディープニューラルネットワーク（ＤＮＮ）における日和見的な負荷分散のための方法及びシステム。代表的な計算コストは、ＤＮＮシステムの所与のアーキテクチャ、機能または計算の態様について獲得され、取得され、または決定される。代表的な計算コストは、ＤＮＮシステムの所与のアーキテクチャ、機能または計算の態様のためのメタデータとして実装される。実施態様では、計算された計算コストは、メタデータとして実装される。スケジューラは、実行の準備ができているニューロンが後続の層に存在するかどうかを検知する。スケジューラは、メタデータ及びニューロンの利用可能性を使用して、計算リソース及び利用可能なリソースにわたるスケジューリング及び負荷分散を行う。【選択図】図８
2021528730.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークシステムにおける負荷分散のための方法であって、
前記ニューラルネットワークシステムの一部の代表的な計算コストを取得することと、
前記ニューラルネットワークシステムの前記一部をメタデータでタグ付けすることであって、前記メタデータが前記代表的な計算コストを含む、前記タグ付けすることと、
スケジューラにより、処理されている現在の層に後続する層に実行に利用可能なニューロンが存在することを検知することと、
前記メタデータ及びニューロンの利用可能性を使用して、前記スケジューラにより、計算リソースにわたるスケジューリング及び負荷分散を行うことと、
を含む、方法。
【請求項２】
前記ニューラルネットワークシステムの前記一部が、計算カーネル、ニューロン及び層のうちの少なくとも１つである、請求項１に記載の方法。
【請求項３】
前記メタデータが、カーネルサイズ、フィルタサイズ、ドロップアウト層、層に存在するニューロンの数、ニューロンの準備性、及び活性化関数のうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項４】
前記ニューロンの準備性が、ニューロン間の依存関係を説明する、請求項３に記載の方法。
【請求項５】
前記ニューロンの準備性が、前記ニューロンの準備性に関連付けられたニューロンがプルーニングされた後に更新される、請求項４に記載の方法。
【請求項６】
前記メタデータが、アプリケーション、フレームワークまたはユーザのうちの少なくとも１つによって前記ニューラルネットワークシステムの前記一部にタグ付けされる、請求項１に記載の方法。
【請求項７】
前記メタデータが、命令、スカラレジスタ、メモリ及びハードウェアテーブルのうちの少なくとも１つに記憶される、請求項１に記載の方法。
【請求項８】
前記メタデータの位置が、メタデータサイズ、圧縮能力、メタデータが獲得される場所、及び前記メタデータを使用するスケジューラの種類のうちの少なくとも１つに依存する、請求項１に記載の方法。
【請求項９】
計算コストが、前記代表的な計算コストから決定される、請求項１に記載の方法。
【請求項１０】
前記代表的な計算コストが、カーネルサイズ、評価時間及びカーネル実行時間のうちの少なくとも１つを含む、請求項９に記載の方法。
【請求項１１】
ニューラルネットワークシステムにおける負荷分散のためのシステムであって、
メタデータでタグ付けされた前記ニューラルネットワークシステムの一部であって、前記メタデータが、前記ニューラルネットワークシステムの前記一部に関連付けられた代表的な計算コストを含む、前記ニューラルネットワークシステムの前記一部と、
前記ニューラルネットワークシステムの前記一部に接続されたスケジューラであって、
処理されている現在の層に後続する層に実行に利用可能なニューロンが存在することを検知し、
前記メタデータ及びニューロンの利用可能性を使用して計算リソースにわたるスケジューリング及び負荷分散を行う、前記スケジューラと、
を含む、システム。
【請求項１２】
前記ニューラルネットワークシステムの前記一部が、計算カーネル、ニューロン及び層のうちの少なくとも１つである、請求項１１に記載のシステム。
【請求項１３】
前記メタデータが、カーネルサイズ、フィルタサイズ、ドロップアウト層、層に存在するニューロンの数、ニューロンの準備性、及び活性化関数のうちの少なくとも１つを含む、請求項１１に記載のシステム。
【請求項１４】
前記ニューロンの準備性が、ニューロン間の依存関係を説明する、請求項１３に記載のシステム。
【請求項１５】
前記ニューロンの準備性が、前記ニューロンの準備性に関連付けられたニューロンがプルーニングされた後に更新される、請求項１４に記載のシステム。
【請求項１６】
前記メタデータが、アプリケーション、フレームワークまたはユーザのうちの少なくとも１つによって前記ニューラルネットワークシステムの前記一部にタグ付けされる、請求項１１に記載のシステム。
【請求項１７】
前記メタデータが、少なくとも、命令、スカラレジスタ、メモリ及びハードウェアテーブルに記憶される、請求項１１に記載のシステム。
【請求項１８】
前記メタデータの位置が、メタデータサイズ、メタデータが獲得される場合の圧縮能力、及び前記メタデータを使用するスケジューラの種類のうちの少なくとも１つに依存する、請求項１１に記載のシステム。
【請求項１９】
計算コストが、前記代表的な計算コストから決定される、請求項１１に記載のシステム。
【請求項２０】
前記代表的な計算コストが、カーネルサイズ、評価時間及びカーネル実行時間のうちの少なくとも１つを含む、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１８年６月２６日に出願された米国非仮特許出願第１６／０１９３７４号の利点を主張するものであり、その内容は、ここで参照によって本明細書に組み込まれる。
【背景技術】
【０００２】
多くの人工知能及び機械学習アプリケーションのためにディープニューラルネットワーク（ＤＮＮ）が使用されている。これらのＤＮＮは、名目上、入力層と出力層との間に複数の隠れ層を含む。近年において、ＤＮＮは、増加した数の層を使用し始めている。これにより、画像、映像及び音声認識の処理及び分析における各種の予測問題に対して提供される容量及び精度が向上する。しかしながら、ＤＮＮがより深くなると、結果として性能の課題も次第により大きくなる。
【０００３】
例えば、ＤＮＮは、計算機的に非常に高価である。ニューラルネットワークの訓練タスクを実行するのに数日、数週間または数か月さえも必要となることは珍しくない。これらのＤＮＮは、大規模並列であり、大きいスループットデバイスを効果的に分割することを必要とする。しかしながら、現在における大部分のＤＮＮは、層の間に直列化される。多くのＤＮＮは、１００を超えるこのような層を有し、これが並列性の向上に対する重大な制限になっている。
【０００４】
「層融合」と呼ばれる一般的な技法の１つでは、同時計算のために２つ以上の層を公開することが可能であるが、これには明示的なプログラミングを有効にすることが必要である。プログラマは、層にわたる計算全体にコンパイラを公開する。しかしながら、層融合は精密ではなく日和見的であり、後続の層が十分な計算需要を有することにより、それらをより早く計算し始めることを保証し得ることを識別する能力を有するコンパイラは現在存在しない。さらに、この手法は困難である。プログラマは、層にわたる計算全体にコンパイラを公開しなければならない。これは、プログラミングするのが非常に難しいと考えられており、直観的ではない（すなわち、層の抽象的概念がその過程において失われる可能性がある）。高度に最適化されたライブラリにおける層融合の専門的な実装以外では、層は暗黙的に直列化される。
【０００５】
最適化された場合でも、このネットワークは、実質的に異なる接続性、ネットワークアーキテクチャ、異なるハードウェア能力などを備えた多くの他のネットワークに転換可能とならない。さらに、最適化のプロセスは、エラーを起こしやすく、時間がかかり、実装するのに費用がかかる。加えて、いくつかの層が融合されているときでも、それは計算グラフ全体ではなく、融合された層のみを公開する。最後に、プルーニングなどの実行時間中のニューラルネットワークに対する動的編集は、この手法によって活用することができない。プルーニングはプルーニングされた層の計算強度を変えるため、このことは重要である。
【０００６】
添付図面と併せて例として与えられる以下の説明から、より詳細な理解が得られ得る。
【図面の簡単な説明】
【０００７】
【図１】特定の実施態様にしたがった例示的なデバイスのブロック図である。
【図２】特定の実施態様にしたがった図１のデバイスのブロック図である。
【図３】特定の実施態様にしたがったヘテロジニアスシステムアーキテクチャ（ＨＳＡ）プラットフォームのブロック図である。
【図４】特定の実施態様にしたがったキュー構造を示す例示的なシステムのブロック図である。
【図５Ａ】特定の実施態様にしたがったコマンドパケット処理の例示的なブロック図である。
【図５Ｂ】特定の実施態様にしたがったコマンドパケット及び間接バッファ（ＩＢ）コマンドパケットを含む例示的な要素を示す。
【図５Ｃ】特定の実施態様にしたがった例示的な間接バッファである。
【図６】ディープニューラルネットワーク（ＤＮＮ）の２つの代表的な層を示す。
【図７】特定の実施態様にしたがったＤＮＮシステムにおいて計算カーネルを使用して計算コストを決定するための例示的なブロック図である。
【図８】特定の実施態様にしたがったメタデータを使用したＤＮＮにおける日和見的な負荷分散のための方法のフローチャートである。
【発明を実施するための形態】
【０００８】
本明細書で説明されるのは、メタデータを使用したディープニューラルネットワーク（ＤＮＮ）における日和見的な負荷分散のための方法及びシステムである。ＤＮＮ計算の並列性は、ハードウェアスケジューラ、コンパイラ、ディスパッチャまたはオペレーティングシステム（Ｏ／Ｓ）スケジューラ（総称的に「スケジューラ」）に計算のグラフ全体またはその少なくとも一部を公開することによって完全に活用される。実施態様、計算カーネル、ニューロン、層、または他のアーキテクチャ、機能もしくは計算の態様では、ＤＮＮの一部、特徴及び／または機能がメタデータでタグ付けされる。それにより、スケジューラは、より効果的かつインテリジェントに計算の複雑度を予測することができ、既存のリソースにわたる負荷分散を行うことができる。これらのメタデータは、計算カーネルの計算の複雑度に関する基本情報を提供し、正確な負荷分散を可能にする。例えば、規則性及び周期性を伴う繰り返し計算を提示する畳み込みニューラルネットワークは、負荷分散及びジョブスケジューリングの改善に特に適している。しかしながら、この方法は、規則的な計算パターンを有する他の種類のネットワークに適用可能である。実施態様では、この方法は、データフローと同様なアーキテクチャに適用可能である。ここで、計算グラフ全体を明示的に公開することにより、ＤＮＮに固有の並列性を完全に活用することが可能になる。
【０００９】
図１は、本開示の１つ以上の特徴を実装することができる例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話またはタブレットコンピュータを含む。デバイス１００は、プロセッサ１０２、メモリ１０４、記憶装置１０６、１つ以上の入力デバイス１０８及び１つ以上の出力デバイス１１０を含む。デバイス１００はまた、任意選択で、入力ドライバ１１２及び出力ドライバ１１４を含む。デバイス１００は、図１に示されない追加の構成要素を含むことを理解されたい。
【００１０】
様々な代替例では、プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、同一のダイ上に配置されたＣＰＵ及びＧＰＵ、または１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵまたはＧＰＵとすることができる。様々な代替例では、メモリ１０４は、プロセッサ１０２と同一のダイ上に配置されるか、またはプロセッサ１０２とは別個に配置される。メモリ１０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭまたはキャッシュといった、揮発性または不揮発性メモリを含む。
【００１１】
記憶装置１０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスクまたはフラッシュドライブといった、固定式の、または着脱可能な記憶装置を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロホン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、またはネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／もしくは受信のための無線ローカルエリアネットワークカード）を含むが、これらに限定されない。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ、またはネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／もしくは受信のための無線ローカルエリアネットワークカード）を含むが、これらに限定されない。
【００１２】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信することを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信することを可能にする。入力ドライバ１１２及び出力ドライバ１１４が任意選択の構成要素であること、ならびに入力ドライバ１１２及び出力ドライバ１１４が存在しない場合にはデバイス１００が同一の方式で動作することに留意されたい。出力ドライバ１１６は、表示デバイス１１８に結合されたアクセラレーテッド処理デバイス（「ＡＰＤ」）１１６を含む。ＡＰＤは、プロセッサ１０２から計算コマンド及びグラフィックスレンダリングコマンドを受け取り、それらの計算及びグラフィックスレンダリングコマンドを処理し、表示のために表示デバイス１１８にピクセル出力を提供する。
【００１３】
以下でさらに詳細に説明されるように、ＡＰＤ１１６は、単一命令複数データ（「ＳＩＭＤ」）パラダイムにしたがって計算を実行するために１つ以上の並列処理ユニットを含む。したがって、本明細書では様々な機能が、ＡＰＤ１１６によって、またはこれと連動して実行されるものとして説明されているが、様々な代替例では、ＡＰＤ１１６によって実行されるものとして説明される機能は、場合によっては、ホストプロセッサ（例えば、プロセッサ１０２）によって駆動されず、いくつかの実施態様では表示デバイス１１８に（グラフィカル）出力を提供する同様の能力を有する、他のコンピューティングデバイスによって追加的または代替的に実行される。例えば、ＳＩＭＤパラダイムにしたがって処理タスクを実行する任意の処理システムが本明細書で説明された機能を実行することができると考えられる。あるいは、ＳＩＭＤパラダイムにしたがって処理タスクを実行しないコンピューティングシステムが本明細書で説明された機能を実行すると考えられる。
【００１４】
図２は、デバイス１００のブロック図であり、ＡＰＤ１１６上の処理タスクの実行に関連する追加の詳細を示す。プロセッサ１０２は、システムメモリ１０４内に、プロセッサ１０２による実行のための１つ以上の制御論理モジュールを保持する。制御論理モジュールは、オペレーティングシステム１２０、カーネルモードドライバ１２２及びアプリケーション１２６を含む。これらの制御論理モジュールは、プロセッサ１０２及びＡＰＤ１１６の操作の様々な特徴を制御する。例えば、オペレーティングシステム１２０は、ハードウェアと直接的に通信し、プロセッサ１０２で実行中の他のソフトウェアにハードウェアへのインターフェースを提供する。カーネルモードドライバ１２２は、例えば、プロセッサ１０２上で実行されるソフトウェア（例えば、アプリケーション１２６）にアプリケーションプログラミングインターフェース（「ＡＰＩ」）を提供することによってＡＰＤ１１６の動作を制御し、ＡＰＤ１１６の様々な機能にアクセスする。カーネルモードドライバ１２２はまた、ＡＰＤ１１６の処理構成要素（以下でさらに詳細に議論されるＳＩＭＤユニット１３８など）による実行のためのプログラムをコンパイルするジャストインタイムコンパイラを含む。
【００１５】
ＡＰＤ１１６は、並列処理及び／または非順次処理に適したグラフィックス操作及び非グラフィックス操作などの、選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、プロセッサ１０２から受信したコマンドに基づき、ピクセル操作などのグラフィックスパイプライン操作、幾何学計算、及び表示デバイス１１８への画像のレンダリングを実行するために使用される。ＡＰＤ１１６はまた、プロセッサ１０２から受信したコマンドに基づき、ビデオ、物理シミュレーション、計算流体力学または他のタスクに関連する操作などの、グラフィックス操作に直接関連しない計算処理動作を実行する。
【００１６】
ＡＰＤ１１６は、ＳＩＭＤパラダイムにしたがって、プロセッサ１０２の要求に応じて動作を並列的に実行する１つ以上のＳＩＭＤユニット１３８を含む計算ユニット１３２を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって、同じプログラムを実行するが、異なるデータを用いてそのプログラムを実行可能であるパラダイムである。一例では、各ＳＩＭＤユニット１３８は、１６個のレーンを含む。ここで、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いてその命令を実行する。全てのレーンが所与の命令を実行する必要がない場合、予測を用いてレーンをオフに切り替えることができる。予測は、分岐する制御フローを有するプログラムを実行するために使用することもできる。より具体的には、制御フローが個々のレーンによって実行される計算に基づく条件付き分岐または他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び異なる制御フローパスの直列実行は任意の制御フローを可能にする。実施態様では、計算ユニット１３２のそれぞれは、ローカルＬ１キャッシュを有することができる。実施態様では、複数の計算ユニット１３２はＬ２キャッシュを共有する。
【００１７】
計算ユニット１３２における実行の基本単位は作業項目である。各作業項目は、特定のレーンにおいて並行で実行されるプログラムの単一のインスタンス化を表す。作業項目は、単一のＳＩＭＤ処理ユニット１３８上で「波面」として同時に実行されることができる。１つ以上の波面は、同じプログラムを実行するように指定された作業項目の集合を含む「作業グループ」に含まれる。作業グループは、作業グループを構成する波面のそれぞれを実行することによって実行される。代替例では、波面は、単一のＳＩＭＤユニット１３８上で順次実行されるか、または異なるＳＩＭＤユニット１３８上で部分的に、もしくは完全に並列に実行される。波面は、単一のＳＩＭＤユニット１３８上で同時に実行可能である作業項目の最大の集合と考えることができる。したがって、プロセッサ１０２から受信したコマンドにより、特定のプログラムが、そのプログラムが単一のＳＩＭＤユニット１３８上で同時に実行できない程度まで並列化されることが示される場合、そのプログラムは、２つ以上のＳＩＭＤユニット１３８上で並列化されるか、または同じＳＩＭＤユニット１３８上で直列化される（または必要に応じて、並列化と直列化との両方がなされる）２つ以上の波面に分割される。スケジューラ１３６は、異なる計算ユニット１３２及びＳＩＭＤユニット１３８上に様々な波面をスケジューリングすることに関連する動作を実行する。
【００１８】
計算ユニット１３２によって提供される並列性は、ピクセル値計算、頂点変換及び他のグラフィックス操作などのグラフィックス関連操作に適している。したがっていくつかの例において、プロセッサ１０２からグラフィックスプロセッシングコマンドを受け取るグラフィックスパイプライン１３４は、並列に実行するために計算タスクを計算ユニット１３２に提供する。
【００１９】
計算ユニット１３２はまた、グラフィックに関係しない、またはグラフィックスパイプライン１３４の「通常の」操作の一部として実行されない計算タスク（例えば、グラフィックスパイプライン１３４の操作に対して実行される処理を補足するために実行されるカスタム操作）を実行するために使用される。プロセッサ１０２上で実行されるアプリケーション１２６または他のソフトウェアは、そのような計算タスクを定義するプログラムを実行用のＡＰＤ１１６に送信する。
【００２０】
図３は、図１及び図２のデバイスに部分的に基づくヘテロジニアスシステムアーキテクチャ（ＨＳＡ）プラットフォーム３００を示す。ＨＳＡプラットフォーム３００は、システムメモリ３５０に接続されたか、またはこれと通信している（総称的に「接続された」）ＨＳＡアクセラレーテッド処理ユニット（ＡＰＵ）３１０を含む。ＨＳＡ  ＡＰＵ３１０は、マルチコアＣＰＵ３２０、複数のＨＳＡ計算ユニット（Ｈ−ＣＵ）３３２、３３４、３３６を備えたＧＰＵ３３０、及びＨＳＡメモリ管理ユニット（ＨＭＭＵまたはＨＳＡ  ＭＭＵ）３４０を含む。ＣＰＵ３２０は任意の数のコアを含み、図３にはコア３２２、３２４、３２６、３２８が示されている。図３には３つが示されているが、ＧＰＵ３３０は任意の数のＨ−ＣＵを含む。説明される実施態様ではＨＳＡが議論され、提示されるが、本システム及び方法は、ホモジニアスシステムまたはヘテロジニアスシステムのいずれかにおいて利用することができる。システムメモリ３５０は、コヒーレントシステムメモリ３５２及び非コヒーレントシステムメモリ３５７の一方または両方を含む。
【００２１】
ＨＳＡ３００は、基本的な計算要素の統合された概観を提供する。ＨＳＡ３００により、プログラマは、レイテンシ計算ユニットとも呼ばれるＣＰＵ３２０を、スループット計算ユニットとも呼ばれるＧＰＵ３３０とシームレスに一体化するアプリケーションを書き込むと共に、それぞれの最良の属性から利益を得ることができる。ＨＳＡ３００により、プログラマは、従来のマルチスレッド式ＣＰＵ３２０に対するピアとして、ＧＰＵ３３０において並列プロセッサを利用することができる。ピアデバイスは、別のデバイスと同じメモリコヒーレンシドメインを共有するＨＳＡデバイスとして定義される。
【００２２】
ＨＳＡ３００内のデバイスは、図４〜図６を参照してさらに解説されるようにキューを使用して互いに通信する。キューは、ＨＳＡアーキテクチャの不可欠な部分である。キューは物理メモリ領域であり、そこには、製作者によって消費者に対する要求またはタスクが置かれる。ＨＳＡハードウェアの複雑度に応じて、キューは、ソフトウェアまたはハードウェアの任意の組み合わせによって管理され得る。ハードウェア管理されたキューは、任意のオペレーティングシステムコールの介在を必要とせずに、レイテンシプロセッサ（ＣＰＵ３２０など）のキュー上で実行されるアプリケーションが、スループットプロセッサ（ＧＰＵ３３０など）に対して直接作用するという意味で有意な性能の利点を有する。これにより、ＨＳＡ３００内のデバイス間で非常に低遅延の通信が可能になる。
【００２３】
図４は、キュー構造を示す例示的なシステム４００のブロック図である。システム４００は、ＣＰＵ４０５、システムメモリ４１５、ドライバ４１０、グラフィックス処理ユニット（ＧＰＵ）４２０及び通信インフラストラクチャまたはバス４２５を含む。当業者は、システム４００が、図４に示したものに追加して、または図４に示したものとは異なるソフトウェア、ハードウェア及びファームウェア構成要素を含むことを認識するであろう。システム４００は、図４に示されない追加的な構成要素を含むことを理解されたい。
【００２４】
ＣＰＵ４０５、ＧＰＵ４２０及びシステムメモリ４１５は、図１〜図３に関して説明されたように実装することができる。ＣＰＵ４０５は、オペレーティングシステム（図示せず）及び１つ以上のアプリケーションを実行し、システム４００のための制御プロセッサである。ＣＰＵ４０５上で実行されるオペレーティングシステムは、システム４００に関して、アクセスを制御し、アクセスを容易にし、タスクの達成を調整する。ドライバ４１０（例えば、グラフィックスドライバ）は、ソフトウェア、ファームウェア、ハードウェアまたはそれらの任意の組み合わせを含む。実施態様では、ドライバ４１０は、完全にソフトウェアで実装される。ドライバ４１０は、ＣＰＵ４０５及びＣＰＵ４０５上で実行されるアプリケーションがＧＰＵ４２０にアクセスするためのインターフェース及び／またはアプリケーションプログラミングインターフェース（ＡＰＩ）を提供する。バス４２５は、システム４００の構成要素間の結合を提供し、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）、アドバンスト・グラフィックス・ポート（ＡＧＰ）などの１つ以上の通信バスを含む。
【００２５】
ＧＰＵ４２０は、本明細書で説明されるようなグラフィックスアクセラレーション機能及び他の計算機能をシステム４００に提供する。ＧＰＵ４２０は、複数のコマンドプロセッサ（ＣＰ）ＣＰ１．．．ＣＰｎ  ４３０及び複数のエンジン  エンジン１．．．エンジンｎ  ４３５、例えば、３Ｄエンジン、ユニファイドビデオデコーダ（ＵＶＤ）エンジン、デジタル著作権管理（ＤＲＭ）ダイレクトメモリアクセス（ＤＭＡ）エンジンなどを含む。
【００２６】
ＣＰ１．．．ＣＰｎ  ４３０は、ＧＰＵ４２０内の処理を制御し、エンジン１．．．エンジンｎ  ４３５に接続される。各ＣＰ１．．．ＣＰｎ  ４３０は、エンジン１．．．エンジンｎ  ４３５に関連付けられ、各ペアは、エンジンブロック（ＥＢ）ＥＢ１．．．ＥＢｎ  ４３７である。別の実施形態では、ＣＰ１．．．ＣＰｎ  ４３０は、単一のコマンドプロセッサである。一般に、ＣＰ１．．．ＣＰｎ  ４３０は、実行される命令をＣＰＵ４０５から受信し、エンジン１．．．エンジンｎ  ４３５上でのそれらの命令の実行をＧＰＵ４２０内で調整する。場合によっては、ＣＰ１．．．ＣＰｎ  ４３０は、ＣＰＵ４０５から受信した各コマンドに対応する、ＧＰＵ４２０内で実行される１つ以上のコマンドを生成する。ＣＰ１．．．ＣＰｎ  ４３０の機能を実装する論理命令は、ハードウェア、ファームウェアもしくはソフトウェア、またはそれらの組み合わせで実装される。
【００２７】
メモリ４１５は、１つ以上のメモリデバイスを含み、データの非永続的記憶に使用されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）または同様のメモリデバイスとすることができる。メモリ４１５は、１つ以上のメモリバッファ４４５を含み、このメモリバッファを介して、ＣＰＵ４０５はコマンドをＧＰＵ４２０に通信する。メモリバッファ４４５は、必要に応じて、エンジン４３５またはエンジンブロック４３７に対応する。メモリバッファ４４５は、作業項目またはコマンドパケットの効率的なキューイングに適したキュー、リングバッファまたは他のデータ構造として実装される。キューのインスタンスでは、コマンドパケットは、循環的にメモリバッファ４４５内に配置され、そこから取り出される。説明のために、メモリバッファ４４５は、本明細書においてキュー１．．．キューｎ  ４４５と呼ばれる。
【００２８】
メモリ４１５は間接バッファ４５５を含む。間接バッファ４５５は、実際のコマンド（例えば、命令、データ、ポインタ及び非ポインタ）を保持する。例えば、ＣＰＵ４０５がコマンドパケットをＧＰＵ４２０に通信するとき、コマンドパケットは、間接バッファ４５５に記憶され、その間接バッファ４５５へのポインタがキュー１．．．キューｎ  ４４５に挿入される。本明細書において以下で説明されるように、特定の間接バッファ４５５はニューロンデータを保持する。すなわち、複数の間接バッファは、異なる目的のために使用される。ドライバ４１０を介した、キュー１．．．キューｎ  ４４５へのコマンドの書き込み装置としてのＣＰＵ４０５、及びこのようなコマンドの読み出し装置としてのＧＰＵ４２０は、追加される最後の項目及び読み出される最後の項目をキュー１．．．キューｎ  ４４５においてそれぞれ示す書き込みポインタ及び読み出しポインタを調整する。
【００２９】
図５Ａは、ＧＰＵ５００、ドライバ５１０、キュー５１５及び間接バッファ５３５の間でのコマンドパケット処理の例示的なブロック図である。ＧＰＵ５００は、ＧＰＵメモリ５０２、レジスタ５０４、コマンドプロセッサ５０５及びエンジン５０８を含む。レジスタ５０４は、読み出しポインタ５１２及び書き込みポインタ５１４を含む。キュー５１５は、要素５２０、５２２、５２４及び空きスペース５３０を含む。各要素、例えば、要素５２０、５２２、５２４は、キューパケットを記憶する。図５Ｂは、コマンドパケット５７２、及び間接バッファ５３５を指す間接バッファ（ＩＢ）コマンドパケット５７６を含む例示的な要素５７０を示す。図５Ｃに示されるように、間接バッファ５３５は、ＧＰＵ５００に動作を実行するように指示するコマンドパケット５４０を含む。例えば、ＨＳＡ内のカーネルディスパッチパケット（コマンドパケット５４０の例）は、計算カーネルがスレッドをどのように起動すべきかなどの情報（グリッド寸法、作業グループサイズ）、プライベート及びグループメモリ割り当ての必要サイズ、計算カーネルのための実行可能なＩＳＡイメージを含むメモリ内のオブジェクトのためのハンドル、ならびに追加的な制御及び同期情報を含む。一般に、計算カーネルは、ＤＮＮにおいて、通常、例えば、ＭＩＯｐｅｎ及びｒｏｃＢＬＡＳなどの高レベルライブラリによって実装された、畳み込み、行列乗算、高速フーリエ変換（ＦＦＴ）、プーリング及び活性化である。
【００３０】
上記のアーキテクチャは、ホストプロセッサ（ドライバ５１０によって代表される書き込み装置）からＧＰＵ５００（コマンドプロセッサ５０５によって代表される読み出し装置）への一方向通信を提供する。最初に、読み出しポインタ５１２と書き込みポインタ５１４とは同じ位置を指し、キュー５１５が空であることを示している。キュー５１５は、空きスペース５３０を有する。このスペース内に、ドライバ５１０は、タスクに対応するコマンドパケットを書き込む。次に、ドライバ５１０は、書き込みポインタ５１４を、最後のコマンドパケットまたは最初の利用可能なスペースを過ぎた１つの位置に更新する。書き込みポインタ５１４と読み出しポインタ５１２とは、ここでは異なる位置を指している。コマンドプロセッサ５０５は、読み出しポインタ５１２の位置にあるコマンドパケットをフェッチし、書き込みポインタ５１４と等しくなるまで読み出しポインタ５１２を進める。
【００３１】
いくつかのニューロンからの出力のみが後続の層のニューロンの一部を計算するために必要であるという点で、ニューラルネットワーク内の畳み込みはローカル動作である。その結果、全てのニューロンの計算が現在の層において完了するのを待つことなく、後続の層の計算を並列に進行させることができる。図６は、有向非巡回グラフ（ＤＡＧ）表現のＤＮＮ６００からの２つの代表的な層である、層１  ６０５及び層２  ６１０を示す。層１  ６０５は、例えば、ニューロン６２０、６２２及び６２４を含み、層２  ６１０は、例えば、ニューロン６３０、６３２、６３４、６３６及び６３８を含む。場合によっては、第２の層のニューロンの一部は、第１の層全体が評価される前に実行可能となる。これは、図６において太線及び極太線で示されている。ここで、層１  ６０５の最終ニューロン、例えば、ニューロン６２４が計算される前に、層２  ６１０の２つのニューロン、例えば、ニューロン６３０及び６３２を評価することができる。
【００３２】
これが有益である２つの場合が存在する。第１に、層の単純な順次実行は、計算リソースのいくつかをアイドルに保ち得る。この場合、これらのアイドルのリソースを次の層に展開することができる。第２に、第２の層が第１の層よりも実質的に多くの作業を必要とする場合、いくつかの利用可能な計算リソースを用いてより早くその層に着手することがより効率的であり得る。最新のＤＮＮは、（何百の、または数千もの）多くの隠れ層を有するため、単一の層の計算を完了する前に多くの深い層の計算を開始することが有利となる可能性がある。しかしながら、どの計算が優先されるべきかを正確に予測するために、例えば、図２のスケジューラ１３６などのスケジューラは、任意の計算のコストがどのように予想されるかについての何らかの知識を必要とする。
【００３３】
本明細書において説明される方法及びシステムは、ＤＮＮシステムの特定のアーキテクチャ、機能もしくは計算の態様、部分、特性または特徴（総称的に「態様または複数の態様」）をメタデータでタグ付けするか、またはメタデータに関連付けて、より正確なジョブスケジューリング及び負荷分散を可能にする。ここで、メタデータは、特定のＤＮＮの態様に関連した、または関連付けられた代表的な計算コストを提供する。例えば、ＤＮＮシステムのこれらの特定の態様は、計算カーネル、ニューロン、層または何らかの他の態様とすることができる。例示的な例では、メタデータは、カーネルまたはフィルタサイズ、ドロップアウト層、層に存在するニューロンの数、活性化関数、及び計算コストを決定するために使用可能である他の同様の項目である。ＤＮＮシステムの態様は、例えば、本明細書において説明されるようなフレームワークによって、アプリケーションによって、またはユーザによってメタデータで自動的にタグ付けすることができる。
【００３４】
メタデータは、命令、スカラレジスタ、Ｌ１／Ｌ２キャッシュ、テーブルなどを含むがこれらに限定されない、多様な場所に保存することができる。実施態様では、位置は、メタデータのサイズ、圧縮されやすさ、メタデータが獲得された場所及びどのスケジューラがメタデータを使用しているかに依存する。
【００３５】
例示的な例では、活性化関数及び層ごとのニューロンの数などの一部のメタデータは、ソフトウェア（例えば、プログラマ、コンパイラなど）によって最も簡単に獲得され、ジョブ要求または命令に記憶され、他のメタデータは、実行時間（例えば、カーネル実行時間）においてハードウェアで測定される必要があり、ハードウェアテーブルに記憶される。
【００３６】
別の例示的な例では、位置は、どのスケジューラがメタデータを使用しているかに依存する。メタデータが、図２のＯ／Ｓ１２０などのＯ／Ｓレベルにて利用される場合、メタデータは、ジョブ要求メッセージに組み込むことができ、このメッセージは、ＯＳスケジューラに送られる。メタデータが、図２のスケジューラ１３６または図７のハードウェアディスパッチャ７２０などの、ハードウェアスケジューラまたはディスパッチャレベルにて利用される場合、メタデータは、ハードウェアテーブル７１０などのハードウェアテーブルに記憶することができ、このテーブルは、スケジューラ１３６またはハードウェアディスパッチャ７２０と同じ位置に配置される。ハードウェアスケジューラが、ソフトウェア（例えば、活性化関数）によって獲得されるメタデータも利用する場合、メタデータを、ソフトウェアからジョブ要求メッセージに渡し、次にＯＳに渡し、最終的にハードウェアテーブルに渡すことができる。
【００３７】
計算コストは、複数の技法を使用して測定することができる。実施態様では、カーネルサイズと評価時間との関係を使用して計算コストを決定する。例示的な実施態様では、より大きいフィルタサイズがより多くの作業に対応することを認識する様々なヒューリスティックが使用される。
【００３８】
別の例示的な実施態様では、カーネルの実行時間は、計算コストを決定するための相対速度の指標を提供する。これは、ディスパッチャが作業を配分するためにカーネルサイズの実行時間でテーブル探索を実行することを必要とする。推定実行時間は、計算リソースにわたって負荷を分散しつつ作業グループを効率的にディスパッチするためにリソースの利用可能性と組み合わされる。
【００３９】
実施態様では、Ｔｅｎｓｏｒｆｌｏｗ（登録商標）（Ｇｏｏｇｌｅ  ＬＬＣの商標）またはＭＩＯｐｅｎなどのフレームワークは、特定の層のためのフィルタサイズまたは他の同様の情報を示すメタデータを提供する。例示的な実施態様では、これは、ＤＮＮが実質的に変更されないために実行の開始時に決定される。これにより、最初の反復後にカーネルの時間を計るのみで実行全体の実質的なコストがかからないため、カーネルの動的プロファイリングが可能になる。
【００４０】
カーネルの計算コストを使用することに加えて、スケジューラはまた、後続の層のニューロンの一部が実行の準備ができていることを検知する必要がある。実施態様では、これは、ＤＮＮ内で行われている計算のＤＡＧを構築することによって行われる。ＤＡＧにより、スケジューラは、計算を層全体に制限する代わりに、特定のニューロンのためにロックを割り当てるか、または解除することが可能となる。すなわち、スケジューラは、他のニューロンが不要であるか、または使用されているとき、層の特定のニューロンを使用のために公開することができる。一旦スケジューラが、見込み計算及びメタデータのグラフ全体を有すると、スケジューラは、ヒューリスティックを使用して利用可能な計算リソースにわたる実行のスケジューリングを行うことにより、効率的な処理を保証する。
【００４１】
図７は、より正確なジョブスケジューリング及び負荷分散を可能にするためにＤＮＮシステム７００において計算カーネルを使用して計算コストを決定するための例示的なブロック図である。この実施態様では、計算コストは、メタデータとしてテーブルに記憶されるカーネル実行時間である。ＤＮＮシステム７００は、テーブルと通信している、またはテーブルに接続されたＧＰＵ７０５などのプロセッサを少なくとも含む。ここで、テーブルは、例えば、ハードウェアテーブル７１０である。例えば、テーブルは、メモリ、レジスタ、キャッシュまたは他の同様のスペースに実装することができる。ＧＰＵ７０５は、少なくとも、複数の計算ユニット（ＣＵ）ＣＵ０  ７２２、ＣＵ１  ７２４、．．．、ＣＵＮ  ７２６と通信しているハードウェアディスパッチャ７２０などのディスパッチャを含む。ハードウェアテーブル７１０は、カーネルＩＤ７３０を測定済みのカーネル実行時間７３２に関連付ける。実施態様では、畳み込みニューラルネットワーク（ＣＮＮ）などの特定の種類のＤＮＮの規則性により、カーネル実行時間の測定を１回のみ行う必要があり得る。
【００４２】
作業配分を決定するとき、ハードウェアディスパッチャ７２０は、各カーネルに関連付けられたメタデータを考慮する。この例では、メタデータは、測定済みのカーネル実行時間である。例えば、ハードウェアディスパッチャ７２０は、カーネルＩＤ７３０を探索し、関連付けられた測定済みのカーネル実行時間７３２を抽出することにより、カーネルのそれぞれについて測定済みのカーネル実行時間７３２を考慮する。実施態様では、ハードウェアディスパッチャ７２０は、プロセッサまたは計算ユニットリソースと併せて測定済みのカーネル実行時間７３２を使用することにより、プロセッサまたは計算ユニットリソースにわたって負荷を分散しつつ作業グループを効率的にディスパッチする。
【００４３】
実施態様では、メタデータは、ＤＮＮの動的プルーニング及びスパース性に適用可能である。これらの場合、個々のニューロンは、ランダムに切り離されるか、またはＤＮＮから削除される。作業を評価及びディスパッチする動的な手段により、個々の反復間の負荷分散が可能となる。これを達成するための手段により、例えば、スケジューラまたは別個のヘルパースレッドが、計算されるニューロンの準備性を確認することが可能となる。ここで準備性は、各ニューロンの依存関係（事前に計算可能である）を指すか、または説明する。この情報、すなわち準備性は、そのニューロンのためのメタデータとしてタグ付けされる。例えば、ニューロンがプルーニングされるとき、個々の反復間の負荷分散を行うために、全ての依存するニューロンの準備性がスケジューラによって更新され、使用される。
【００４４】
実施態様では、メタデータは、複数のデバイス間で使用される。ここでメタデータは、データがローカルに記憶されるのを待たなかった後続の層で計算の実行を開始することにより、計算と通信の重複（デバイス間かＣＵ間かを問わない）を可能にする。
【００４５】
図８は、メタデータを使用したＤＮＮにおける日和見的な負荷分散のための方法８００のフローチャートである。代表的な計算コストが、ＤＮＮシステムの所与のアーキテクチャ、機能または計算の態様について獲得され、取得され、または決定される（ステップ８０５）。代表的な計算コストが、ＤＮＮシステムの所与のアーキテクチャ、機能または計算の態様のためのメタデータとして実装される（ステップ８１０）。実施態様では、計算された計算コストがメタデータとして実装される。スケジューラが、実行の準備ができているニューロンが後続の層に存在するかどうかを検知する（ステップ８１５）。スケジューラが、メタデータ及びニューロンの利用可能性を使用して、計算リソース及び利用可能なリソースにわたるスケジューリング及び負荷分散を行う（ステップ８２０）。
【００４６】
本明細書の開示に基づいて多くの変形が可能であることが理解されるべきである。特徴及び要素が特定の組み合わせで上記説明されたが、各特徴または要素は、他の特徴及び要素なしに単独で、または他の特徴及び要素の有無に関わらず様々な組み合わせで使用することができる。
【００４７】
提供される方法は、汎用コンピュータ、プロセッサまたはプロセッサコアにおいて実装することができる。好適なプロセッサとしては、一例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連した１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他の種類の集積回路（ＩＣ）、及び／またはステートマシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令の結果及び（コンピュータ可読媒体に記憶することができる命令などの）ネットリストを含む他の中間データを使用して製造工程を構成することによって製造することができる。そのような処理の結果は、実施形態の態様を実装するプロセッサを製造するための半導体製造工程において次に使用されるマスクワークとすることができる。
【００４８】
本明細書で提供される方法またはフローチャートは、汎用コンピュータまたはプロセッサによる実行のために非一時的コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェアまたはファームウェアで実装することができる。非一時的コンピュータ可読記憶媒体の例は、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及び着脱可能ディスクなどの磁気媒体、磁気光学媒体、ならびにＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）などの光学媒体を含む。
【図１】
2021528730.tif 000003
【図２】
2021528730.tif 000004
【図３】
2021528730.tif 000005
【図４】
2021528730.tif 000006
【図５Ａ】
2021528730.tif 000007
【図５Ｂ】
2021528730.tif 000008
【図５Ｃ】
2021528730.tif 000009
【図６】
2021528730.tif 000010
【図７】
2021528730.tif 000011
【図８】
2021528730.tif 000012
【国際調査報告】
2021528730.tif 000013
2021528730.tif 000014