(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-01
(45)【発行日】2024-02-09
(54)【発明の名称】メタデータを使用したニューラルネットワークにおける日和見的な負荷分散のための方法及びシステム
(51)【国際特許分類】
G06N 3/063 20230101AFI20240202BHJP
G06F 9/50 20060101ALI20240202BHJP
G06N 3/082 20230101ALI20240202BHJP
【FI】
G06N3/063
G06F9/50 150A
G06F9/50 150C
G06N3/082
(21)【出願番号】P 2020567798
(86)(22)【出願日】2019-05-21
(86)【国際出願番号】 US2019033247
(87)【国際公開番号】W WO2020005412
(87)【国際公開日】2020-01-02
【審査請求日】2022-05-18
(32)【優先日】2018-06-26
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ニコラス マラヤ
(72)【発明者】
【氏名】ヤスコ エッカート
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2018/0082181(US,A1)
【文献】特開平2-81257(JP,A)
【文献】国際公開第2018/103736(WO,A1)
【文献】LEONARD TRUONG,Latte: a language, compiler, and runtime for elegant and efficient deep neural networks,Programming Language design and Implementation, ACM, 22 Penn Plaza, SUITE 701 New York NY 10121-0701 USA,米国,2016年06月02日,pages 209-223,[令和5年6月20日検索],インターネット <URL:https://dl/acm/org/doi/pdf/10.1145/2908080.2908105>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/063
G06F 9/50
G06N 3/082
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークシステムにおける負荷分散のための方法であって
、
前記ニューラルネットワークシステムの
1つ以上のカーネル、1つ以上のニューロン及び1つ以上の層のうち何れか又はこれらの組み合わせをメタデータでタグ付けすることであって、前記メタデータが
、前記ニューラルネットワークシステムの一部の計算コストを含む、前記タグ付けすることと、
スケジューラ
が、処理されている
前記ニューラルネットワークシステムの現在の層に後続する層
のニューロンの実行に利用可能な
リソースが存在することを検知することと、
検知したことに応じて、前記スケジューラが、前記メタデー
タを使用して、
前記ニューラルネットワークシステムにおける負荷分散を行い、前記負荷分散に従って、前記ニューラルネットワークシステムの前記後続する層のニューロンの計算を実行することと、
を含む、方法。
【請求項2】
前記メタデータが、カーネルサイズ、フィルタサイズ、ドロップアウト層、層に存在するニューロンの数、ニューロンの準備性、及び活性化関数のうちの少なくとも1つを含む、請求項1に記載の方法。
【請求項3】
前記ニューロンの準備性が、ニューロン間の依存関係を説明する、請求項
2に記載の方法。
【請求項4】
前記ニューロンの準備性が、前記ニューロンの準備性に関連付けられたニューロンがプルーニングされた後に更新される、請求項
3に記載の方法。
【請求項5】
前記メタデータが、アプリケーション、フレームワークまたはユーザのうちの少なくとも1つによって前記ニューラルネットワークシステムの前記一部にタグ付けされる、請求項1に記載の方法。
【請求項6】
前記メタデータが、命令、スカラレジスタ、メモリ及びハードウェアテーブルのうちの少なくとも1つに記憶される、請求項1に記載の方法。
【請求項7】
前記メタデータの位置が、メタデータサイズ、圧縮能力、メタデータが獲得される場所、及び前記メタデータを使用するスケジューラの種類のうちの少なくとも1つに依存する、請求項1に記載の方法。
【請求項8】
前記負荷分散が、前記後続する層と、前記後続する層に後続する1つ以上の層と、にわたって行われる、請求項1に記載の方法。
【請求項9】
前記
負荷分散が、現在の層が処理されている間に行われる、請求項
8に記載の方法。
【請求項10】
ニューラルネットワークシステムにおける負荷分散のためのシステムであって、
1つ以上のカーネル、1つ以上のニューロン及び1つ以上の層であって、前記1つ以上のカーネル、1つ以上のニューロン及び1つ以上の層のうち何れか又はこれらの組み合わせがメタデータでタグ付けさ
れ、前記メタデータが、前記ニューラルネットワークシステム
の一部
の計算コストを含む、前記
1つ以上のカーネル、1つ以上のニューロン及び1つ以上の層と、
前記ニューラルネットワークシステムの前記一部に接続されたスケジューラであって、
処理されている
前記ニューラルネットワークシステムの現在の層に後続する層
のニューロンの実行に利用可能な
リソースが存在することを検知
することと、
検知したことに応じて、前記メタデー
タを使用して、
前記ニューラルネットワークシステムにおける負荷分散を行い、前記負荷分散に従って、前記ニューラルネットワークシステムの前記後続する層のニューロンの計算を実行することと、
を行うように構成されている、前記スケジューラと、
を含む、システム。
【請求項11】
前記メタデータが、カーネルサイズ、フィルタサイズ、ドロップアウト層、層に存在するニューロンの数、ニューロンの準備性、及び活性化関数のうちの少なくとも1つを含む、請求項
10に記載のシステム。
【請求項12】
前記ニューロンの準備性が、ニューロン間の依存関係を説明する、請求項
11に記載のシステム。
【請求項13】
前記ニューロンの準備性が、前記ニューロンの準備性に関連付けられたニューロンがプルーニングされた後に更新される、請求項
12に記載のシステム。
【請求項14】
前記メタデータが、アプリケーション、フレームワークまたはユーザのうちの少なくとも1つによって前記ニューラルネットワークシステムの前記一部にタグ付けされる、請求項
10に記載のシステム。
【請求項15】
前記メタデータが、少なくとも、命令、スカラレジスタ、メモリ及びハードウェアテーブルに記憶される、請求項
10に記載のシステム。
【請求項16】
前記メタデータの位置が、メタデータサイズ、メタデータが獲得される場合の圧縮能力、及び前記メタデータを使用するスケジューラの種類のうちの少なくとも1つに依存する、請求項
10に記載のシステム。
【請求項17】
前記負荷分散が、前記後続する層と、前記後続する層に後続する1つ以上の層と、にわたって行われる、請求項
10に記載のシステム。
【請求項18】
前記
負荷分散が、現在の層が処理されている間に行われる、請求項
17に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2018年6月26日に出願された米国非仮特許出願第16/019374号の利点を主張するものであり、その内容は、ここで参照によって本明細書に組み込まれる。
【背景技術】
【0002】
多くの人工知能及び機械学習アプリケーションのためにディープニューラルネットワーク(DNN)が使用されている。これらのDNNは、名目上、入力層と出力層との間に複数の隠れ層を含む。近年において、DNNは、増加した数の層を使用し始めている。これにより、画像、映像及び音声認識の処理及び分析における各種の予測問題に対して提供される容量及び精度が向上する。しかしながら、DNNがより深くなると、結果として性能の課題も次第により大きくなる。
【0003】
例えば、DNNは、計算機的に非常に高価である。ニューラルネットワークの訓練タスクを実行するのに数日、数週間または数か月さえも必要となることは珍しくない。これらのDNNは、大規模並列であり、大きいスループットデバイスを効果的に分割することを必要とする。しかしながら、現在における大部分のDNNは、層の間に直列化される。多くのDNNは、100を超えるこのような層を有し、これが並列性の向上に対する重大な制限になっている。
【0004】
「層融合」と呼ばれる一般的な技法の1つでは、同時計算のために2つ以上の層を公開することが可能であるが、これには明示的なプログラミングを有効にすることが必要である。プログラマは、層にわたる計算全体にコンパイラを公開する。しかしながら、層融合は精密ではなく日和見的であり、後続の層が十分な計算需要を有することにより、それらをより早く計算し始めることを保証し得ることを識別する能力を有するコンパイラは現在存在しない。さらに、この手法は困難である。プログラマは、層にわたる計算全体にコンパイラを公開しなければならない。これは、プログラミングするのが非常に難しいと考えられており、直観的ではない(すなわち、層の抽象的概念がその過程において失われる可能性がある)。高度に最適化されたライブラリにおける層融合の専門的な実装以外では、層は暗黙的に直列化される。
【0005】
最適化された場合でも、このネットワークは、実質的に異なる接続性、ネットワークアーキテクチャ、異なるハードウェア能力などを備えた多くの他のネットワークに転換可能とならない。さらに、最適化のプロセスは、エラーを起こしやすく、時間がかかり、実装するのに費用がかかる。加えて、いくつかの層が融合されているときでも、それは計算グラフ全体ではなく、融合された層のみを公開する。最後に、プルーニングなどの実行時間中のニューラルネットワークに対する動的編集は、この手法によって活用することができない。プルーニングはプルーニングされた層の計算強度を変えるため、このことは重要である。
【0006】
添付図面と併せて例として与えられる以下の説明から、より詳細な理解が得られ得る。
【図面の簡単な説明】
【0007】
【
図1】特定の実施態様にしたがった例示的なデバイスのブロック図である。
【
図2】特定の実施態様にしたがった
図1のデバイスのブロック図である。
【
図3】特定の実施態様にしたがったヘテロジニアスシステムアーキテクチャ(HSA)プラットフォームのブロック図である。
【
図4】特定の実施態様にしたがったキュー構造を示す例示的なシステムのブロック図である。
【
図5A】特定の実施態様にしたがったコマンドパケット処理の例示的なブロック図である。
【
図5B】特定の実施態様にしたがったコマンドパケット及び間接バッファ(IB)コマンドパケットを含む例示的な要素を示す。
【
図5C】特定の実施態様にしたがった例示的な間接バッファである。
【
図6】ディープニューラルネットワーク(DNN)の2つの代表的な層を示す。
【
図7】特定の実施態様にしたがったDNNシステムにおいて計算カーネルを使用して計算コストを決定するための例示的なブロック図である。
【
図8】特定の実施態様にしたがったメタデータを使用したDNNにおける日和見的な負荷分散のための方法のフローチャートである。
【発明を実施するための形態】
【0008】
本明細書で説明されるのは、メタデータを使用したディープニューラルネットワーク(DNN)における日和見的な負荷分散のための方法及びシステムである。DNN計算の並列性は、ハードウェアスケジューラ、コンパイラ、ディスパッチャまたはオペレーティングシステム(O/S)スケジューラ(総称的に「スケジューラ」)に計算のグラフ全体またはその少なくとも一部を公開することによって完全に活用される。実施態様、計算カーネル、ニューロン、層、または他のアーキテクチャ、機能もしくは計算の態様では、DNNの一部、特徴及び/または機能がメタデータでタグ付けされる。それにより、スケジューラは、より効果的かつインテリジェントに計算の複雑度を予測することができ、既存のリソースにわたる負荷分散を行うことができる。これらのメタデータは、計算カーネルの計算の複雑度に関する基本情報を提供し、正確な負荷分散を可能にする。例えば、規則性及び周期性を伴う繰り返し計算を提示する畳み込みニューラルネットワークは、負荷分散及びジョブスケジューリングの改善に特に適している。しかしながら、この方法は、規則的な計算パターンを有する他の種類のネットワークに適用可能である。実施態様では、この方法は、データフローと同様なアーキテクチャに適用可能である。ここで、計算グラフ全体を明示的に公開することにより、DNNに固有の並列性を完全に活用することが可能になる。
【0009】
図1は、本開示の1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話またはタブレットコンピュータを含む。デバイス100は、プロセッサ102、メモリ104、記憶装置106、1つ以上の入力デバイス108及び1つ以上の出力デバイス110を含む。デバイス100はまた、任意選択で、入力ドライバ112及び出力ドライバ114を含む。デバイス100は、
図1に示されない追加の構成要素を含むことを理解されたい。
【0010】
様々な代替例では、プロセッサ102は、中央処理装置(CPU)、グラフィックス処理ユニット(GPU)、同一のダイ上に配置されたCPU及びGPU、または1つ以上のプロセッサコアを含み、各プロセッサコアは、CPUまたはGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同一のダイ上に配置されるか、またはプロセッサ102とは別個に配置される。メモリ104は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAMまたはキャッシュといった、揮発性または不揮発性メモリを含む。
【0011】
記憶装置106は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスクまたはフラッシュドライブといった、固定式の、または着脱可能な記憶装置を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロホン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、またはネットワーク接続(例えば、無線IEEE802信号の送信及び/もしくは受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、またはネットワーク接続(例えば、無線IEEE802信号の送信及び/もしくは受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0012】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114が任意選択の構成要素であること、ならびに入力ドライバ112及び出力ドライバ114が存在しない場合にはデバイス100が同一の方式で動作することに留意されたい。出力ドライバ116は、表示デバイス118に結合されたアクセラレーテッド処理デバイス(「APD」)116を含む。APDは、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け取り、それらの計算及びグラフィックスレンダリングコマンドを処理し、表示のために表示デバイス118にピクセル出力を提供する。
【0013】
以下でさらに詳細に説明されるように、APD116は、単一命令複数データ(「SIMD」)パラダイムにしたがって計算を実行するために1つ以上の並列処理ユニットを含む。したがって、本明細書では様々な機能が、APD116によって、またはこれと連動して実行されるものとして説明されているが、様々な代替例では、APD116によって実行されるものとして説明される機能は、場合によっては、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、いくつかの実施態様では表示デバイス118に(グラフィカル)出力を提供する同様の能力を有する、他のコンピューティングデバイスによって追加的または代替的に実行される。例えば、SIMDパラダイムにしたがって処理タスクを実行する任意の処理システムが本明細書で説明された機能を実行することができると考えられる。あるいは、SIMDパラダイムにしたがって処理タスクを実行しないコンピューティングシステムが本明細書で説明された機能を実行すると考えられる。
【0014】
図2は、デバイス100のブロック図であり、APD116上の処理タスクの実行に関連する追加の詳細を示す。プロセッサ102は、システムメモリ104内に、プロセッサ102による実行のための1つ以上の制御論理モジュールを保持する。制御論理モジュールは、オペレーティングシステム120、カーネルモードドライバ122及びアプリケーション126を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の操作の様々な特徴を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接的に通信し、プロセッサ102で実行中の他のソフトウェアにハードウェアへのインターフェースを提供する。カーネルモードドライバ122は、例えば、プロセッサ102上で実行されるソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインターフェース(「API」)を提供することによってAPD116の動作を制御し、APD116の様々な機能にアクセスする。カーネルモードドライバ122はまた、APD116の処理構成要素(以下でさらに詳細に議論されるSIMDユニット138など)による実行のためのプログラムをコンパイルするジャストインタイムコンパイラを含む。
【0015】
APD116は、並列処理及び/または非順次処理に適したグラフィックス操作及び非グラフィックス操作などの、選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受信したコマンドに基づき、ピクセル操作などのグラフィックスパイプライン操作、幾何学計算、及び表示デバイス118への画像のレンダリングを実行するために使用される。APD116はまた、プロセッサ102から受信したコマンドに基づき、ビデオ、物理シミュレーション、計算流体力学または他のタスクに関連する操作などの、グラフィックス操作に直接関連しない計算処理動作を実行する。
【0016】
APD116は、SIMDパラダイムにしたがって、プロセッサ102の要求に応じて動作を並列的に実行する1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって、同じプログラムを実行するが、異なるデータを用いてそのプログラムを実行可能であるパラダイムである。一例では、各SIMDユニット138は、16個のレーンを含む。ここで、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いてその命令を実行する。全てのレーンが所与の命令を実行する必要がない場合、予測を用いてレーンをオフに切り替えることができる。予測は、分岐する制御フローを有するプログラムを実行するために使用することもできる。より具体的には、制御フローが個々のレーンによって実行される計算に基づく条件付き分岐または他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び異なる制御フローパスの直列実行は任意の制御フローを可能にする。実施態様では、計算ユニット132のそれぞれは、ローカルL1キャッシュを有することができる。実施態様では、複数の計算ユニット132はL2キャッシュを共有する。
【0017】
計算ユニット132における実行の基本単位は作業項目である。各作業項目は、特定のレーンにおいて並行で実行されるプログラムの単一のインスタンス化を表す。作業項目は、単一のSIMD処理ユニット138上で「波面」として同時に実行されることができる。1つ以上の波面は、同じプログラムを実行するように指定された作業項目の集合を含む「作業グループ」に含まれる。作業グループは、作業グループを構成する波面のそれぞれを実行することによって実行される。代替例では、波面は、単一のSIMDユニット138上で順次実行されるか、または異なるSIMDユニット138上で部分的に、もしくは完全に並列に実行される。波面は、単一のSIMDユニット138上で同時に実行可能である作業項目の最大の集合と考えることができる。したがって、プロセッサ102から受信したコマンドにより、特定のプログラムが、そのプログラムが単一のSIMDユニット138上で同時に実行できない程度まで並列化されることが示される場合、そのプログラムは、2つ以上のSIMDユニット138上で並列化されるか、または同じSIMDユニット138上で直列化される(または必要に応じて、並列化と直列化との両方がなされる)2つ以上の波面に分割される。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138上に様々な波面をスケジューリングすることに関連する動作を実行する。
【0018】
計算ユニット132によって提供される並列性は、ピクセル値計算、頂点変換及び他のグラフィックス操作などのグラフィックス関連操作に適している。したがっていくつかの例において、プロセッサ102からグラフィックスプロセッシングコマンドを受け取るグラフィックスパイプライン134は、並列に実行するために計算タスクを計算ユニット132に提供する。
【0019】
計算ユニット132はまた、グラフィックに関係しない、またはグラフィックスパイプライン134の「通常の」操作の一部として実行されない計算タスク(例えば、グラフィックスパイプライン134の操作に対して実行される処理を補足するために実行されるカスタム操作)を実行するために使用される。プロセッサ102上で実行されるアプリケーション126または他のソフトウェアは、そのような計算タスクを定義するプログラムを実行用のAPD116に送信する。
【0020】
図3は、
図1及び
図2のデバイスに部分的に基づくヘテロジニアスシステムアーキテクチャ(HSA)プラットフォーム300を示す。HSAプラットフォーム300は、システムメモリ350に接続されたか、またはこれと通信している(総称的に「接続された」)HSAアクセラレーテッド処理ユニット(APU)310を含む。HSA APU310は、マルチコアCPU320、複数のHSA計算ユニット(H-CU)332、334、336を備えたGPU330、及びHSAメモリ管理ユニット(HMMUまたはHSA MMU)340を含む。CPU320は任意の数のコアを含み、
図3にはコア322、324、326、328が示されている。
図3には3つが示されているが、GPU330は任意の数のH-CUを含む。説明される実施態様ではHSAが議論され、提示されるが、本システム及び方法は、ホモジニアスシステムまたはヘテロジニアスシステムのいずれかにおいて利用することができる。システムメモリ350は、コヒーレントシステムメモリ352及び非コヒーレントシステムメモリ357の一方または両方を含む。
【0021】
HSA300は、基本的な計算要素の統合された概観を提供する。HSA300により、プログラマは、レイテンシ計算ユニットとも呼ばれるCPU320を、スループット計算ユニットとも呼ばれるGPU330とシームレスに一体化するアプリケーションを書き込むと共に、それぞれの最良の属性から利益を得ることができる。HSA300により、プログラマは、従来のマルチスレッド式CPU320に対するピアとして、GPU330において並列プロセッサを利用することができる。ピアデバイスは、別のデバイスと同じメモリコヒーレンシドメインを共有するHSAデバイスとして定義される。
【0022】
HSA300内のデバイスは、
図4~
図6を参照してさらに解説されるようにキューを使用して互いに通信する。キューは、HSAアーキテクチャの不可欠な部分である。キューは物理メモリ領域であり、そこには、製作者によって消費者に対する要求またはタスクが置かれる。HSAハードウェアの複雑度に応じて、キューは、ソフトウェアまたはハードウェアの任意の組み合わせによって管理され得る。ハードウェア管理されたキューは、任意のオペレーティングシステムコールの介在を必要とせずに、レイテンシプロセッサ(CPU320など)のキュー上で実行されるアプリケーションが、スループットプロセッサ(GPU330など)に対して直接作用するという意味で有意な性能の利点を有する。これにより、HSA300内のデバイス間で非常に低遅延の通信が可能になる。
【0023】
図4は、キュー構造を示す例示的なシステム400のブロック図である。システム400は、CPU405、システムメモリ415、ドライバ410、グラフィックス処理ユニット(GPU)420及び通信インフラストラクチャまたはバス425を含む。当業者は、システム400が、
図4に示したものに追加して、または
図4に示したものとは異なるソフトウェア、ハードウェア及びファームウェア構成要素を含むことを認識するであろう。システム400は、
図4に示されない追加的な構成要素を含むことを理解されたい。
【0024】
CPU405、GPU420及びシステムメモリ415は、
図1~
図3に関して説明されたように実装することができる。CPU405は、オペレーティングシステム(図示せず)及び1つ以上のアプリケーションを実行し、システム400のための制御プロセッサである。CPU405上で実行されるオペレーティングシステムは、システム400に関して、アクセスを制御し、アクセスを容易にし、タスクの達成を調整する。ドライバ410(例えば、グラフィックスドライバ)は、ソフトウェア、ファームウェア、ハードウェアまたはそれらの任意の組み合わせを含む。実施態様では、ドライバ410は、完全にソフトウェアで実装される。ドライバ410は、CPU405及びCPU405上で実行されるアプリケーションがGPU420にアクセスするためのインターフェース及び/またはアプリケーションプログラミングインターフェース(API)を提供する。バス425は、システム400の構成要素間の結合を提供し、ペリフェラル・コンポーネント・インターコネクト(PCI)、アドバンスト・グラフィックス・ポート(AGP)などの1つ以上の通信バスを含む。
【0025】
GPU420は、本明細書で説明されるようなグラフィックスアクセラレーション機能及び他の計算機能をシステム400に提供する。GPU420は、複数のコマンドプロセッサ(CP)CP1...CPn 430及び複数のエンジン エンジン1...エンジンn 435、例えば、3Dエンジン、ユニファイドビデオデコーダ(UVD)エンジン、デジタル著作権管理(DRM)ダイレクトメモリアクセス(DMA)エンジンなどを含む。
【0026】
CP1...CPn 430は、GPU420内の処理を制御し、エンジン1...エンジンn 435に接続される。各CP1...CPn 430は、エンジン1...エンジンn 435に関連付けられ、各ペアは、エンジンブロック(EB)EB1...EBn 437である。別の実施形態では、CP1...CPn 430は、単一のコマンドプロセッサである。一般に、CP1...CPn 430は、実行される命令をCPU405から受信し、エンジン1...エンジンn 435上でのそれらの命令の実行をGPU420内で調整する。場合によっては、CP1...CPn 430は、CPU405から受信した各コマンドに対応する、GPU420内で実行される1つ以上のコマンドを生成する。CP1...CPn 430の機能を実装する論理命令は、ハードウェア、ファームウェアもしくはソフトウェア、またはそれらの組み合わせで実装される。
【0027】
メモリ415は、1つ以上のメモリデバイスを含み、データの非永続的記憶に使用されるダイナミックランダムアクセスメモリ(DRAM)または同様のメモリデバイスとすることができる。メモリ415は、1つ以上のメモリバッファ445を含み、このメモリバッファを介して、CPU405はコマンドをGPU420に通信する。メモリバッファ445は、必要に応じて、エンジン435またはエンジンブロック437に対応する。メモリバッファ445は、作業項目またはコマンドパケットの効率的なキューイングに適したキュー、リングバッファまたは他のデータ構造として実装される。キューのインスタンスでは、コマンドパケットは、循環的にメモリバッファ445内に配置され、そこから取り出される。説明のために、メモリバッファ445は、本明細書においてキュー1...キューn 445と呼ばれる。
【0028】
メモリ415は間接バッファ455を含む。間接バッファ455は、実際のコマンド(例えば、命令、データ、ポインタ及び非ポインタ)を保持する。例えば、CPU405がコマンドパケットをGPU420に通信するとき、コマンドパケットは、間接バッファ455に記憶され、その間接バッファ455へのポインタがキュー1...キューn 445に挿入される。本明細書において以下で説明されるように、特定の間接バッファ455はニューロンデータを保持する。すなわち、複数の間接バッファは、異なる目的のために使用される。ドライバ410を介した、キュー1...キューn 445へのコマンドの書き込み装置としてのCPU405、及びこのようなコマンドの読み出し装置としてのGPU420は、追加される最後の項目及び読み出される最後の項目をキュー1...キューn 445においてそれぞれ示す書き込みポインタ及び読み出しポインタを調整する。
【0029】
図5Aは、GPU500、ドライバ510、キュー515及び間接バッファ535の間でのコマンドパケット処理の例示的なブロック図である。GPU500は、GPUメモリ502、レジスタ504、コマンドプロセッサ505及びエンジン508を含む。レジスタ504は、読み出しポインタ512及び書き込みポインタ514を含む。キュー515は、要素520、522、524及び空きスペース530を含む。各要素、例えば、要素520、522、524は、キューパケットを記憶する。
図5Bは、コマンドパケット572、及び間接バッファ535を指す間接バッファ(IB)コマンドパケット576を含む例示的な要素570を示す。
図5Cに示されるように、間接バッファ535は、GPU500に動作を実行するように指示するコマンドパケット540を含む。例えば、HSA内のカーネルディスパッチパケット(コマンドパケット540の例)は、計算カーネルがスレッドをどのように起動すべきかなどの情報(グリッド寸法、作業グループサイズ)、プライベート及びグループメモリ割り当ての必要サイズ、計算カーネルのための実行可能なISAイメージを含むメモリ内のオブジェクトのためのハンドル、ならびに追加的な制御及び同期情報を含む。一般に、計算カーネルは、DNNにおいて、通常、例えば、MIOpen及びrocBLASなどの高レベルライブラリによって実装された、畳み込み、行列乗算、高速フーリエ変換(FFT)、プーリング及び活性化である。
【0030】
上記のアーキテクチャは、ホストプロセッサ(ドライバ510によって代表される書き込み装置)からGPU500(コマンドプロセッサ505によって代表される読み出し装置)への一方向通信を提供する。最初に、読み出しポインタ512と書き込みポインタ514とは同じ位置を指し、キュー515が空であることを示している。キュー515は、空きスペース530を有する。このスペース内に、ドライバ510は、タスクに対応するコマンドパケットを書き込む。次に、ドライバ510は、書き込みポインタ514を、最後のコマンドパケットまたは最初の利用可能なスペースを過ぎた1つの位置に更新する。書き込みポインタ514と読み出しポインタ512とは、ここでは異なる位置を指している。コマンドプロセッサ505は、読み出しポインタ512の位置にあるコマンドパケットをフェッチし、書き込みポインタ514と等しくなるまで読み出しポインタ512を進める。
【0031】
いくつかのニューロンからの出力のみが後続の層のニューロンの一部を計算するために必要であるという点で、ニューラルネットワーク内の畳み込みはローカル動作である。その結果、全てのニューロンの計算が現在の層において完了するのを待つことなく、後続の層の計算を並列に進行させることができる。
図6は、有向非巡回グラフ(DAG)表現のDNN600からの2つの代表的な層である、層1 605及び層2 610を示す。層1 605は、例えば、ニューロン620、622及び624を含み、層2 610は、例えば、ニューロン630、632、634、636及び638を含む。場合によっては、第2の層のニューロンの一部は、第1の層全体が評価される前に実行可能となる。これは、
図6において太線及び極太線で示されている。ここで、層1 605の最終ニューロン、例えば、ニューロン624が計算される前に、層2 610の2つのニューロン、例えば、ニューロン630及び632を評価することができる。
【0032】
これが有益である2つの場合が存在する。第1に、層の単純な順次実行は、計算リソースのいくつかをアイドルに保ち得る。この場合、これらのアイドルのリソースを次の層に展開することができる。第2に、第2の層が第1の層よりも実質的に多くの作業を必要とする場合、いくつかの利用可能な計算リソースを用いてより早くその層に着手することがより効率的であり得る。最新のDNNは、(何百の、または数千もの)多くの隠れ層を有するため、単一の層の計算を完了する前に多くの深い層の計算を開始することが有利となる可能性がある。しかしながら、どの計算が優先されるべきかを正確に予測するために、例えば、
図2のスケジューラ136などのスケジューラは、任意の計算のコストがどのように予想されるかについての何らかの知識を必要とする。
【0033】
本明細書において説明される方法及びシステムは、DNNシステムの特定のアーキテクチャ、機能もしくは計算の態様、部分、特性または特徴(総称的に「態様または複数の態様」)をメタデータでタグ付けするか、またはメタデータに関連付けて、より正確なジョブスケジューリング及び負荷分散を可能にする。ここで、メタデータは、特定のDNNの態様に関連した、または関連付けられた代表的な計算コストを提供する。例えば、DNNシステムのこれらの特定の態様は、計算カーネル、ニューロン、層または何らかの他の態様とすることができる。例示的な例では、メタデータは、カーネルまたはフィルタサイズ、ドロップアウト層、層に存在するニューロンの数、活性化関数、及び計算コストを決定するために使用可能である他の同様の項目である。DNNシステムの態様は、例えば、本明細書において説明されるようなフレームワークによって、アプリケーションによって、またはユーザによってメタデータで自動的にタグ付けすることができる。
【0034】
メタデータは、命令、スカラレジスタ、L1/L2キャッシュ、テーブルなどを含むがこれらに限定されない、多様な場所に保存することができる。実施態様では、位置は、メタデータのサイズ、圧縮されやすさ、メタデータが獲得された場所及びどのスケジューラがメタデータを使用しているかに依存する。
【0035】
例示的な例では、活性化関数及び層ごとのニューロンの数などの一部のメタデータは、ソフトウェア(例えば、プログラマ、コンパイラなど)によって最も簡単に獲得され、ジョブ要求または命令に記憶され、他のメタデータは、実行時間(例えば、カーネル実行時間)においてハードウェアで測定される必要があり、ハードウェアテーブルに記憶される。
【0036】
別の例示的な例では、位置は、どのスケジューラがメタデータを使用しているかに依存する。メタデータが、
図2のO/S120などのO/Sレベルにて利用される場合、メタデータは、ジョブ要求メッセージに組み込むことができ、このメッセージは、OSスケジューラに送られる。メタデータが、
図2のスケジューラ136または
図7のハードウェアディスパッチャ720などの、ハードウェアスケジューラまたはディスパッチャレベルにて利用される場合、メタデータは、ハードウェアテーブル710などのハードウェアテーブルに記憶することができ、このテーブルは、スケジューラ136またはハードウェアディスパッチャ720と同じ位置に配置される。ハードウェアスケジューラが、ソフトウェア(例えば、活性化関数)によって獲得されるメタデータも利用する場合、メタデータを、ソフトウェアからジョブ要求メッセージに渡し、次にOSに渡し、最終的にハードウェアテーブルに渡すことができる。
【0037】
計算コストは、複数の技法を使用して測定することができる。実施態様では、カーネルサイズと評価時間との関係を使用して計算コストを決定する。例示的な実施態様では、より大きいフィルタサイズがより多くの作業に対応することを認識する様々なヒューリスティックが使用される。
【0038】
別の例示的な実施態様では、カーネルの実行時間は、計算コストを決定するための相対速度の指標を提供する。これは、ディスパッチャが作業を配分するためにカーネルサイズの実行時間でテーブル探索を実行することを必要とする。推定実行時間は、計算リソースにわたって負荷を分散しつつ作業グループを効率的にディスパッチするためにリソースの利用可能性と組み合わされる。
【0039】
実施態様では、Tensorflow(登録商標)(Google LLCの商標)またはMIOpenなどのフレームワークは、特定の層のためのフィルタサイズまたは他の同様の情報を示すメタデータを提供する。例示的な実施態様では、これは、DNNが実質的に変更されないために実行の開始時に決定される。これにより、最初の反復後にカーネルの時間を計るのみで実行全体の実質的なコストがかからないため、カーネルの動的プロファイリングが可能になる。
【0040】
カーネルの計算コストを使用することに加えて、スケジューラはまた、後続の層のニューロンの一部が実行の準備ができていることを検知する必要がある。実施態様では、これは、DNN内で行われている計算のDAGを構築することによって行われる。DAGにより、スケジューラは、計算を層全体に制限する代わりに、特定のニューロンのためにロックを割り当てるか、または解除することが可能となる。すなわち、スケジューラは、他のニューロンが不要であるか、または使用されているとき、層の特定のニューロンを使用のために公開することができる。一旦スケジューラが、見込み計算及びメタデータのグラフ全体を有すると、スケジューラは、ヒューリスティックを使用して利用可能な計算リソースにわたる実行のスケジューリングを行うことにより、効率的な処理を保証する。
【0041】
図7は、より正確なジョブスケジューリング及び負荷分散を可能にするためにDNNシステム700において計算カーネルを使用して計算コストを決定するための例示的なブロック図である。この実施態様では、計算コストは、メタデータとしてテーブルに記憶されるカーネル実行時間である。DNNシステム700は、テーブルと通信している、またはテーブルに接続されたGPU705などのプロセッサを少なくとも含む。ここで、テーブルは、例えば、ハードウェアテーブル710である。例えば、テーブルは、メモリ、レジスタ、キャッシュまたは他の同様のスペースに実装することができる。GPU705は、少なくとも、複数の計算ユニット(CU)CU0 722、CU1 724、...、CUN 726と通信しているハードウェアディスパッチャ720などのディスパッチャを含む。ハードウェアテーブル710は、カーネルID730を測定済みのカーネル実行時間732に関連付ける。実施態様では、畳み込みニューラルネットワーク(CNN)などの特定の種類のDNNの規則性により、カーネル実行時間の測定を1回のみ行う必要があり得る。
【0042】
作業配分を決定するとき、ハードウェアディスパッチャ720は、各カーネルに関連付けられたメタデータを考慮する。この例では、メタデータは、測定済みのカーネル実行時間である。例えば、ハードウェアディスパッチャ720は、カーネルID730を探索し、関連付けられた測定済みのカーネル実行時間732を抽出することにより、カーネルのそれぞれについて測定済みのカーネル実行時間732を考慮する。実施態様では、ハードウェアディスパッチャ720は、プロセッサまたは計算ユニットリソースと併せて測定済みのカーネル実行時間732を使用することにより、プロセッサまたは計算ユニットリソースにわたって負荷を分散しつつ作業グループを効率的にディスパッチする。
【0043】
実施態様では、メタデータは、DNNの動的プルーニング及びスパース性に適用可能である。これらの場合、個々のニューロンは、ランダムに切り離されるか、またはDNNから削除される。作業を評価及びディスパッチする動的な手段により、個々の反復間の負荷分散が可能となる。これを達成するための手段により、例えば、スケジューラまたは別個のヘルパースレッドが、計算されるニューロンの準備性を確認することが可能となる。ここで準備性は、各ニューロンの依存関係(事前に計算可能である)を指すか、または説明する。この情報、すなわち準備性は、そのニューロンのためのメタデータとしてタグ付けされる。例えば、ニューロンがプルーニングされるとき、個々の反復間の負荷分散を行うために、全ての依存するニューロンの準備性がスケジューラによって更新され、使用される。
【0044】
実施態様では、メタデータは、複数のデバイス間で使用される。ここでメタデータは、データがローカルに記憶されるのを待たなかった後続の層で計算の実行を開始することにより、計算と通信の重複(デバイス間かCU間かを問わない)を可能にする。
【0045】
図8は、メタデータを使用したDNNにおける日和見的な負荷分散のための方法800のフローチャートである。代表的な計算コストが、DNNシステムの所与のアーキテクチャ、機能または計算の態様について獲得され、取得され、または決定される(ステップ805)。代表的な計算コストが、DNNシステムの所与のアーキテクチャ、機能または計算の態様のためのメタデータとして実装される(ステップ810)。実施態様では、計算された計算コストがメタデータとして実装される。スケジューラが、実行の準備ができているニューロンが後続の層に存在するかどうかを検知する(ステップ815)。スケジューラが、メタデータ及びニューロンの利用可能性を使用して、計算リソース及び利用可能なリソースにわたるスケジューリング及び負荷分散を行う(ステップ820)。
【0046】
本明細書の開示に基づいて多くの変形が可能であることが理解されるべきである。特徴及び要素が特定の組み合わせで上記説明されたが、各特徴または要素は、他の特徴及び要素なしに単独で、または他の特徴及び要素の有無に関わらず様々な組み合わせで使用することができる。
【0047】
提供される方法は、汎用コンピュータ、プロセッサまたはプロセッサコアにおいて実装することができる。好適なプロセッサとしては、一例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連した1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他の種類の集積回路(IC)、及び/またはステートマシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(HDL)命令の結果及び(コンピュータ可読媒体に記憶することができる命令などの)ネットリストを含む他の中間データを使用して製造工程を構成することによって製造することができる。そのような処理の結果は、実施形態の態様を実装するプロセッサを製造するための半導体製造工程において次に使用されるマスクワークとすることができる。
【0048】
本明細書で提供される方法またはフローチャートは、汎用コンピュータまたはプロセッサによる実行のために非一時的コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェアまたはファームウェアで実装することができる。非一時的コンピュータ可読記憶媒体の例は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及び着脱可能ディスクなどの磁気媒体、磁気光学媒体、ならびにCD-ROMディスク及びデジタル多用途ディスク(DVD)などの光学媒体を含む。