JP2024520326A - 機械学習ハードウェアアクセラレータでの階層的なコンパイルおよび実行 - Google Patents
機械学習ハードウェアアクセラレータでの階層的なコンパイルおよび実行 Download PDFInfo
- Publication number
- JP2024520326A JP2024520326A JP2023571345A JP2023571345A JP2024520326A JP 2024520326 A JP2024520326 A JP 2024520326A JP 2023571345 A JP2023571345 A JP 2023571345A JP 2023571345 A JP2023571345 A JP 2023571345A JP 2024520326 A JP2024520326 A JP 2024520326A
- Authority
- JP
- Japan
- Prior art keywords
- core
- jobs
- executed
- job
- chip
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000010801 machine learning Methods 0.000 title claims abstract description 49
- 238000000034 method Methods 0.000 claims abstract description 60
- 238000012545 processing Methods 0.000 claims abstract description 56
- 230000015654 memory Effects 0.000 claims description 106
- 238000004458 analytical method Methods 0.000 claims description 37
- 238000004364 calculation method Methods 0.000 claims description 16
- 238000013507 mapping Methods 0.000 claims description 7
- 238000005457 optimization Methods 0.000 abstract description 5
- 230000004913 activation Effects 0.000 description 55
- 238000001994 activation Methods 0.000 description 55
- 239000000872 buffer Substances 0.000 description 26
- 230000008569 process Effects 0.000 description 19
- 238000004891 communication Methods 0.000 description 18
- 238000013528 artificial neural network Methods 0.000 description 14
- 239000000306 component Substances 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 238000003491 array Methods 0.000 description 6
- 238000005192 partition Methods 0.000 description 6
- 238000000638 solvent extraction Methods 0.000 description 6
- 210000004027 cell Anatomy 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 210000004205 output neuron Anatomy 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000007689 inspection Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 210000002569 neuron Anatomy 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本開示は、マルチコアコンピューティング装置のアレイにおいて機械学習推論をコンパイルおよび実行するためのシステムおよび方法について説明する。各マルチコアコンピューティング装置は、特定用途向け集積回路(ASIC)またはASICのグループにすることができる。多くのアプリケーションでは、コンピューティング装置のアレイは推論ごとに変化し、推論の要件に基づいて調整できる。さらに、各ASICは複数の処理コアと複数のタイプの処理コアを持つことができる。したがって、コンパイル時に最適化とスケジューリングとを実行すると、推論実行時のアレイの効率が大幅に向上する。いくつかの実装では、コンパイル中に最適化に費やす時間または労力を選択できるため、ユーザはコンパイル中に時間を費やすか実行中に時間を費やすかを柔軟に決定できる。
Description
技術分野
本開示は、一般に、機械学習ハードウェアアクセラレータにおけるコードのコンパイルおよび実行に関する。
本開示は、一般に、機械学習ハードウェアアクセラレータにおけるコードのコンパイルおよび実行に関する。
背景
機械学習システムは、通常、一定期間のトレーニングを受ける。トレーニングされた、または部分的にトレーニングされた機械学習システムを使用してタスクを実行することは、一般に、推論でシステムを使用すること、つまりタスクを実行するためにデータを処理することを指す。機械学習システムのトレーニングには、システムにトレーニングデータを提供しながら、推論でシステムを使用することが含まれ得る。
機械学習システムは、通常、一定期間のトレーニングを受ける。トレーニングされた、または部分的にトレーニングされた機械学習システムを使用してタスクを実行することは、一般に、推論でシステムを使用すること、つまりタスクを実行するためにデータを処理することを指す。機械学習システムのトレーニングには、システムにトレーニングデータを提供しながら、推論でシステムを使用することが含まれ得る。
機械学習は、汎用CPU(中央処理装置)上、および/またはDSP(デジタル信号プロセッサ)、GPU(グラフィックス処理装置)、またはTPU(テンソル処理装置)などの専用機械学習ハードウェア上で実装することができる。一部の機械学習システムはクラウドに実装されているが、特に推論で演算する場合、機械学習システムをローカルまたは「エッジ」に実装する必要性が高まっている。
概要
本明細書は一般に、特にエッジに、例えば推論における機械学習および他の計算を効率的に実装するための技術に関する。実装では、これらは、機械学習モデルをコンパイルおよび実行するために、階層アーキテクチャなどのコンピューティングアーキテクチャと、そのアーキテクチャに適合した方法を組み合わせる。
本明細書は一般に、特にエッジに、例えば推論における機械学習および他の計算を効率的に実装するための技術に関する。実装では、これらは、機械学習モデルをコンパイルおよび実行するために、階層アーキテクチャなどのコンピューティングアーキテクチャと、そのアーキテクチャに適合した方法を組み合わせる。
一態様では、マルチコアコンピューティング装置のアレイにおいて実行可能なジョブを分散するための方法が説明される。この方法は、マルチコアコンピューティング装置のアレイにおいて実行される複数のジョブを受信することを含み、各マルチコアコンピューティング装置は、複数の異なるタイプの処理コアを備え、複数のジョブの各特定のジョブを、複数の異なるタイプの処理コアのうちの1つによって実行されるように割り当てる。
割り当てることは、特定のジョブを分析して、複数の異なるタイプの処理コアのうちどれが特定のジョブの実行に適しているかを決定することと、分析に基づいて特定のジョブをコアタイプに割り当てることとを含むことができる。どのコアが特定のジョブに適しているかを分析することは、例えば、モデルを使用して、ジョブに対するコアの適合性の1つまたは複数のメトリックを評価すること、および/またはジョブを表すデータを処理すること、を含み、これは、決定論的または確率論的にジョブをコアに割り当てるための機械学習モデルであり得る。
本方法は、複数のジョブの各ジョブを個別に実行可能なファイルにコンパイルすることと、複数の異なるタイプの処理コアのうちの特定のものへの個別に実行可能なファイルのマッピングを表す実行グラフを生成することとをさらに含んでもよい。実装において、実行グラフは、特に実行可能なジョブをマルチコアコンピューティング装置、より具体的には処理コアに分散するために、個別に実行可能なファイル間の依存関係を識別する。例えば、実装では、実行グラフ内の依存関係によって、ジョブが実行されるべきシーケンスが定義される。
この方法は、個別に実行可能なファイルを実行することを含むことができる。これには、実行グラフを受信することと、特にグラフとそれが識別する依存関係とを使用して、実行グラフ内のジョブをマルチコアコンピューティング装置のアレイ内の複数のマルチコアコンピューティング装置に割り当てることが含まれ得る。これには、各マルチコアコンピューティング装置が割り当てられたジョブを実行することと、実行されたジョブの出力を共有メモリにリターンすることと、リターンされた出力を組み合わせて実行グラフリターンを生成することとも含まれ得る。
どのコアが特定のジョブに適しているかを分析することは、ヒューリスティック分析を含むことができ、例えば、ジョブに対するコアの適合性のメトリクスは、ヒューリスティックメトリクスを含むことができる。特定のジョブごとの分析の深さは、コンパイル時間に先立ってユーザ入力に基づいて選択できる。分析の深さは、例えばジョブに対するコアの適合性を決定するために、分析に許容されるコンピューティングリソースまたは時間によって表すことができる。
異なるタイプの処理コアは、第1のタイプのコアおよび第2のタイプのコアを含むことができる。第1のタイプのコアは、ARMプロセッサ(コア)、すなわち、RISC(縮小命令セットコンピューティング)アーキテクチャを備えたコアであってもよい。このようなアーキテクチャは、単一サイクルのメモリアクセス命令を備えたロード/ストアアーキテクチャによって特徴付けられ得る。第2のタイプのコアは、TPU(テンソル処理装置)またはTPUタイルプロセッサ(コア)である。このようなTPUコアは、以下の1つまたは複数を実装するように構成されたハードウェアによって特徴付けられ得る。以下とは、3次元以上のテンソルに対するテンソル演算、行列と行列の乗算、整数行列演算、シストリックアレイ、ニューラルネットワークアクティベーション機能を実装するアクティベーションユニット、である。
実装では、実行グラフは階層的である。したがって、実行グラフは、層状に、例えば少なくとも4つの層に配置された(階層的な)サブグラフを含むことができる。層には、i)TPUコアタイプで実行される実行可能ファイルを含むTPU層、ii)TPU層の1つまたは複数のサブグラフとARMコアタイプで実行される実行可能ファイルとを含むチップレベル(物理集積回路レベル)層、iii)2つ以上のチップレベルのサブグラフを含むマルチチップ層、iv)マルチチップ層のサブグラフと、第3のタイプのコア上で実行されるように構成された1つまたは複数のサブグラフとを備えるホストレベル層が含まれ得る。第3のタイプのコアは、CPU、例えばホスト装置のCPUであってもよい。ある層のサブグラフは、実行グラフの一部、より具体的には、下位層で実行される実行グラフの一部を構成することができる。実行グラフと同様に、それはジョブ間の依存関係や、ジョブを実行する必要がある順序を定義できる。
いくつかの実装では、ARMコアとマルチコアコンピューティング装置、例えばASICのTPUコアとの間の演算を調整し順序付けるためのメカニズムが提供され得る。例えば、これは、例えば低遅延のために、ARMコアまたはTPUコアのいずれかの演算をスケジュールする、例えばファームウェアにおいてARMコア上で実行されるコード(「インタプリタ」)を含んでもよい。これは、実行時にジョブをスケジュールし、処理コアに割り当てるために使用できる。
いくつかの実装では、実行グラフは、もう1つの定数バッファ、すなわち、定数を記憶するために割り当てられたメモリ領域を含むことができる。このような場合、定数バッファは実行グラフ自体の一部である必要はなく、代わりに1つまたは複数の「帯域外バッファ」を実行時にグラフに関連付けることができる。これは、グラフメモリのフットプリントを小さく保つのに役立つ。
別の態様では、マルチコアコンピューティング装置のアレイにおいて実行するために実行可能なジョブをコンパイルするための方法が説明される。実装では、マルチコアコンピューティング装置のアレイがホストシステムなどのハードウェアと組み合わされる。実装では、ハードウェア、例えばホストシステムは、第1のコアタイプの処理コアを備える。マルチコアコンピューティング装置のアレイの各マルチコアコンピューティング装置は、第2のコアタイプおよび第3のコアタイプの処理コアを備える。
実装では、この方法は、推論に使用される機械学習モデルを受信することと、機械学習モデルを解析して、実行される複数のジョブを決定することと、実行される複数のジョブの各々と、例えば、前述した実行される複数のジョブ間の依存関係とを表す実行グラフを生成することと、を含む。
実装では、方法は、マルチチップレベルコンパイラを呼び出して、実行グラフ、例えばマッピングされた実行グラフを生成することをさらに含む。マッピングされた実行グラフは、複数の異なるタイプの処理コアのうちの特定のものへの個別に実行可能なファイルのマッピングを表すことができる。実装では、これには、マルチチップレベルコンパイラが、第1のコアタイプによって実行される複数のジョブのうちの1つまたは複数の第1のジョブを識別することと、1つまたは複数の第1のジョブを、第1のコアタイプによって実行される実行可能ファイルにコンパイルすることとが含まれる。実装では、第1のジョブはアレイ内のマルチコアコンピューティング装置と互換性がない。ジョブの1つまたは複数の演算がマルチコアコンピューティング装置で実行できない場合、またはジョブがマルチコアコンピューティング装置での実行に適していない場合、ジョブはマルチコアコンピューティング装置と互換性がない可能性がある(ここで、適合性は前述のように決定できる)。
実装では、方法は、実行グラフの残りのジョブを複数の第1のサブグラフに分割することと、各第1のサブグラフをマルチコアコンピューティング装置のアレイの特定のマルチコアコンピューティング装置に割り当てることと、各第1のサブグラフに対して単一チップレベルのコンパイラを呼び出すことと、をさらに含む。
実装では、方法は、第2のコアタイプによって実行される第1のサブグラフから1つまたは複数のチップレベルのジョブを識別し、第1のサブグラフからの1つまたは複数のチップレベルのジョブの各々を、第2のコアタイプによって実行される実行可能ファイルにコンパイルし、第1のサブグラフの残りのジョブを複数の第2のサブグラフに分割し、複数の第2のサブグラフの各々を第3のコアタイプに割り当てる単一チップレベルのコンパイラを含む。実装では、方法は、複数の第2のサブグラフの各々について、コアレベルコンパイラを呼び出すことをさらに含み、コアレベルコンパイラは、第2のサブグラフの各々を、第3のコアタイプによって実行される実行可能ファイルにコンパイルする。
実装では、マッピングされた実行グラフは、例えば前述したように、コンパイルされた実行可能なジョブを分散するためのものである。したがって、この方法は、例えば前述したように、実行可能なジョブを分散するためにマッピングされた実行グラフを使用することを含む。
第1、第2、および第3のコアタイプは、それぞれ、前述の第3のタイプのコア、第1のタイプのコア、および第2のタイプのコアに対応し得る。例えば第1のコアタイプは(ホストシステムの)CPUであり得る。第2のコアタイプはARM(RISC)コアであり得る。第3のコアタイプはTPU(タイル)コアであってもよい。アレイの各マルチコアコンピューティング装置は、TPUを備える特定用途向け集積回路(ASIC)を備え得る。
実装では、1つまたは複数の第1ジョブを識別すること、および/または1つまたは複数のチップレベルのジョブを識別することは、実行される複数のジョブのヒューリスティック分析に基づいて行われる。ヒューリスティック分析は、ジョブの各々のヒューリスティックメトリックを決定することを含む分析であってもよい。実装では、例えばコンピューティングリソースまたは分析に許容される時間に基づいて、特定のジョブごとのヒューリスティック分析の深さが、コンパイル時間に先立ってユーザ入力に基づいて選択される。
実装では、方法は、マルチコアコンピューティング装置のアレイによって、第1のジョブを含むマッピングされた実行グラフと、1つまたは複数のチップレベルのジョブおよび複数の第2のサブグラフを含む複数の第1のサブグラフとを受信することと、第2のサブグラフ内の第1のジョブ、チップレベルのジョブ、および複数の残りのジョブを、マルチコアコンピューティング装置のアレイ内の関連するコアに割り当てることと、をさらに含む。実装では、方法は、各コアのマルチコアコンピューティング装置によって、割り当てられたジョブを実行することと、実行されたジョブの出力を共有メモリにリターンすることと、リターンされた出力を組み合わせて、実行グラフのリターンを生成することと、をさらに含む。
いくつかの実装では、第2のコアタイプ、例えばARMまたはRISCコアには、複数のチップ上のジョブにまたがる制御フロー演算を割り当てることができ、例えばビーム探索演算またはプロセスなどの単一チップの演算またはプロセス、それに続くマルチチップの演算またはプロセスを容易にする。次に、この方法は、複数の第1の(単一チップレベルの)サブグラフを組み合わせるシーケンスグラフ、第2のコアタイプによって実行される制御フロー演算への参照を決定する(例えば、コンパイラを使用する)ことを含んでもよく、例えばマスターチップ(ASIC)などの別のチップ(ASIC)にある。シーケンスグラフは、例えば、実行時に、例えばインタープリタによって処理されてもよいため、マスターチップの第2のコアタイプが、マルチチップ演算または複数チップにわたるプロセスの実行を制御する。
上述の態様による方法、および方法の特徴は、組み合わせることができる。
さまざまな実装により、以下の利点のうちの1つまたは複数が提供される。
これらの方法の実装は、実行時にホストCPUおよびマルチコアコンピューティング装置(ASIC)内のファームウェアにまたがることができる階層的実行可能ファイルを生成する階層的コンパイラを提供する。説明された階層コンパイラ方法は、異なるタイプのハードウェアリソースを含む階層アーキテクチャと組み合わせて、機械学習および他の計算の効率的な実装を容易にする。これは、実装において、ARMコアやTPUを含むさまざまな種類のハードウェアリソースがコンパイラに公開されるためである。例えば、コンパイラは、これらのリソース上で実行されるファームウェアにコンパイルされ得る。例えば、機械学習モデルまたは他の計算が与えられると、方法はモデルまたは計算を分析し、例えば性能や電力使用量の観点から、コンパイラに公開されるさまざまなハードウェアユニットを使用してモデル/計算を実行するための最適な方法を決定できる。また、CPUとASICとの間の通信を制限し、生成された実行可能なコードを最適化して高性能かつ低消費電力にするために、異なるハードウェアユニット間で演算を分割することもできる。さらに、TPUコアにはあまり適さない演算が低遅延方式でARMコア上で実行されるように、演算のグラフを分割することもできる。
これらの方法の実装は、実行時にホストCPUおよびマルチコアコンピューティング装置(ASIC)内のファームウェアにまたがることができる階層的実行可能ファイルを生成する階層的コンパイラを提供する。説明された階層コンパイラ方法は、異なるタイプのハードウェアリソースを含む階層アーキテクチャと組み合わせて、機械学習および他の計算の効率的な実装を容易にする。これは、実装において、ARMコアやTPUを含むさまざまな種類のハードウェアリソースがコンパイラに公開されるためである。例えば、コンパイラは、これらのリソース上で実行されるファームウェアにコンパイルされ得る。例えば、機械学習モデルまたは他の計算が与えられると、方法はモデルまたは計算を分析し、例えば性能や電力使用量の観点から、コンパイラに公開されるさまざまなハードウェアユニットを使用してモデル/計算を実行するための最適な方法を決定できる。また、CPUとASICとの間の通信を制限し、生成された実行可能なコードを最適化して高性能かつ低消費電力にするために、異なるハードウェアユニット間で演算を分割することもできる。さらに、TPUコアにはあまり適さない演算が低遅延方式でARMコア上で実行されるように、演算のグラフを分割することもできる。
いくつかの実装では、階層アーキテクチャの最下位レベルは、TPUのみのレベルであり、ARMコアと1つまたは複数のTPUコアとを含む単一チップ(ASIC)レベルが続き、任意でマルチチップ(マルチASIC)レベルが続き、任意でホスト(CPU)レベルが続く。コンパイラのあるレベルで生成された実行可能ファイルは、より高いレベルで生成された実行可能ファイルなどに埋め込まれ得、特定のレベルでの実行可能ファイルは、コンパイラとそのレベルの実行時との間の「契約」になる。このアプローチでは、コンパイラが単一チップレベルとマルチチップレベルとにコンパイルできるため、効率的な演算がさらに容易になり、例えばパイプライン並列処理、データ並列処理、および/またはモデル並列処理を実装するために、チップごとに単一チップレベルのコンパイラを呼び出して、そのチップ上で実行されるサブグラフをコンパイルする。マルチチップレベルのコードはファームウェア上で実行できる。
このような階層的アプローチでは、単一チップレベルでの実行可能ファイルは、複数の異なるタイプのコア、例えばTPUコアおよびARMコアでの演算を含み得る。これにより、ビーム検索やソートなどの演算の実行が容易になる。これらの演算は、TPUに加えてARMコアが利用できることで容易になる。また、単一チップレベルでは、このアプローチにより、データ転送のストリーミングと同期とを行いながら、TPUとARMコアの混合演算を並行して実行できる。この同期は、実行グラフを通じて表現できる。
実装では、階層内にホストCPUを含めることで、効率的な演算をさらに容易にすることができる。例えば、これによりホストとASICとの間でバッファを共有できるようになり、コストのかかるメモリコピー演算が回避される。これにより、きめ細かい同期が容易になることができる。また、ASICによって生成されたデータをホストCPUが消費することも容易になる。説明したグラフベースのジョブのマッピングと実行とにより、そのような分割とスケジューリングとが容易になる。
本明細書の主題の1つまたは複数の実装の詳細は、添付の図面および以下の説明に記載される。主題の他の特徴、態様、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
さまざまな図面における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
本開示は、マルチコアコンピューティング装置のアレイにおいて機械学習推論をコンパイルおよび実行するためのシステムおよび方法について説明する。各マルチコアコンピューティング装置は、特定用途向け集積回路(ASIC)またはASICのグループにすることができる。多くのアプリケーションでは、コンピューティング装置のアレイは推論ごとに変化し、推論の要件に基づいて調整できる。さらに、各ASICは複数の処理コアと複数のタイプの処理コアとを持つことができる。したがって、コンパイル時に最適化とスケジューリングとを実行すると、推論実行時のアレイの効率が大幅に向上し得る。いくつかの実装では、コンパイル中に最適化に費やす時間または労力を選択できるため、ユーザはコンパイル中に時間を費やすか実行中に時間を費やすかを柔軟に決定できる。
詳細な説明
本開示は、マルチコアコンピューティング装置のアレイにおいて機械学習推論をコンパイルおよび実行するためのシステムおよび方法について説明する。各マルチコアコンピューティング装置は、特定用途向け集積回路(ASIC)またはASICのグループにすることができる。多くのアプリケーションでは、コンピューティング装置のアレイは推論ごとに変化し、推論の要件に基づいて調整できる。さらに、各ASICは複数の処理コアと複数のタイプの処理コアとを持つことができる。したがって、コンパイル時に最適化とスケジューリングとを実行すると、推論実行時のアレイの効率が大幅に向上し得る。いくつかの実装では、コンパイル中に最適化に費やす時間または労力を選択できるため、ユーザはコンパイル中に時間を費やすか実行中に時間を費やすかを柔軟に決定できる。
図1は、グラフ実行可能ファイルをコンパイルして実行する機械学習ハードウェアアクセラレータのシステムアーキテクチャ例を示す。ハードウェアアクセラレータ100は、演算を指示および調整するだけでなく、ユーザとアクセラレータ100との間のインターフェースを提供するホストシステム102を含む。ホストシステム102は、ASIC108のアレイと対話する。各ASIC108は、複数のコアタイプを含み、機械学習推論中に大部分の演算を実行するように構成されている。
ホストシステム102は、1つまたは複数の中央処理装置、すなわちCPU104を含む。CPU104は、ホストに処理を提供して、特定の制御またはロジスティクス演算を実行することができる。いくつかの実装では、CPU104は、推論中にいくつかのプロセスを実行することができる。一般に、CPU104は、命令を実行し、データを操作して、ホストシステム102の演算を実行する。各CPU104は、単一または複数のコアを有することができ、各コアは、個別の処理スレッドをホストして実行するために利用可能である。さらに、本明細書で説明される演算を実行するために使用されるCPU104の数、種類、および特定のCPU104は、ホストシステム102に関連する要求、対話、および演算の数に基づいて動的に決定され得る。
ホストシステム102はメモリ106も含む。ホストシステム102のメモリ106は、単一のメモリまたは複数のメモリを表すことができる。メモリ106は、任意のメモリまたはデータベースモジュールを含むことができ、揮発性または不揮発性メモリの形態をとることができ、これには、磁気媒体、光媒体、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、リムーバブル媒体、または任意のその他の適切なローカルまたはリモートメモリコンポーネントが含まれるが、これらに限定されない。メモリ106は、さまざまなオブジェクトまたはデータを記憶することができ、実行グラフ、機械学習モデル、管理設定、キャッシュ、アプリケーション、バックアップデータ、およびホストシステム102に関連する任意の他の適切な情報を含み、これには、任意のパラメータ、変数、アルゴリズム、命令、ルール、制約、またはそれらへの参照が含まれる。ホストシステム102内に図示されているが、メモリ106、または図示された特定のコンポーネントの一部またはすべてを含むその任意の部分は、場合によっては、ホストシステム102からリモートに配置され得、場合によっては、これには、クラウドアプリケーションまたはリポジトリとして、あるいはホストシステム102自体がクラウドベースのシステムである場合には別個のクラウドアプリケーションまたはリポジトリとして含まれる。いくつかの例では、メモリ106に記憶されたデータは、例えばネットワーク120を介してアクセス可能であり、特定のアプリケーションまたはハードウェアアクセラレータ100の機能によって取得され得る。
一般に、ホストシステム102は、実行グラフ(以下でさらに詳細に説明する)をASIC108のアレイに分散しながら、高レベルのアプリケーションを実行してユーザに「フロントエンド」を提供する。
アレイ内のASIC108には、ホストインターフェース110、コアプロセッサ112、ASIC108の主計算ユニットとなり得るタイルのアレイ116、ならびにピアツーピアインターフェース114および共有メモリ118が含まれる。コアプロセッサ112は、演算を実行し、ASIC108を制御するプロセッサであり得、例えば、ARC、Alpha、Am29000、ARM、Atmel AVR、Blackfin、i860、i960、M88000、MIPS、PA-RISC、Power ISA、RISC-V、SuperH、SPARC、またはその他の処理アーキテクチャを含めることができる。
共有メモリ118は、高速ネットワーク122を介して、タイル116、コアプロセッサ112によって、また複数のASIC108にわたってアクセスされるメモリであり得る。共有メモリ118は、任意のメモリまたはデータベースモジュールを含むことができ、揮発性または不揮発性メモリの形態を取ることができ、これには、磁気媒体、光媒体、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、リムーバブル媒体、または任意のその他の適切なローカルまたはリモートメモリコンポーネントが含まれるが、これらに限定されない。共有メモリ118は、さまざまなオブジェクトまたはデータ、管理設定、キャッシュ、アプリケーション、バックアップデータ、動的情報を記憶するリポジトリ、およびハードウェアアクセラレータ100に関連する任意の他の適切な情報を記憶することができ、これには、推論用の任意のパラメータ、変数、アルゴリズム、命令、ルール、制約、または参照が含まれる。共有メモリ118は、ASIC108内の複数のタイル116の各々によって使用される共有アドレス空間を含む。
ホストインターフェース110は、ASIC108とホストシステム102との間の通信を調整および管理するために使用される。一般に、ホストインターフェース110は、適切な組み合わせでソフトウェアおよび/またはハードウェアにエンコードされ、ホストシステム102および他のコンポーネントと通信するように演算可能なロジックを備える。より具体的には、インターフェース110は、ネットワーク110および/またはインターフェースのハードウェアが、図示されたアクセラレータ100の内部および外部で物理信号を通信するように演算可能であるように、通信に関連付けられた1つまたは複数の通信プロトコルをサポートするソフトウェアを備えることができる。さらに、インターフェース110は、ASIC108がホストシステムおよび/またはネットワーク120と通信して、本明細書で説明される演算を実行できるようにすることができる。
ピアツーピアインターフェース114は、ASIC108からASIC108への通信を提供し、管理する点を除いて、ホストインターフェース110と同様とすることができる。このようにして、ASIC108は、それらの間で計算ジョブを分散し、リターンまたは中間パラメータを共有することができる。ピアツーピア通信は、ホストシステム102およびそれに関連するCPU104の負荷を最小限に抑え、スケーラブルなソリューションを提供することができる。これにより、ホストシステム102またはCPU104によって制限されない、任意の多数のASIC108を備えたシステム100が可能になる。
ASICは、アドバンストRISCマシン(ARM)コアなどのコアプロセッサ112を含むことができる。コアプロセッサ112は、タイル116間で分散されるジョブおよびタスクの制御および管理を処理することができる。コアプロセッサ112は、計算演算およびASIC108の管理を実行する。さらに、推論中の一部の演算は、コアプロセッサ112上でより効率的または迅速に実行され得る。コアプロセッサ112は、タイル116に計算を指示および命令する。それは、推論プロセスを実行するために必要な情報を定義する1つまたは複数のコンテキストを維持する。各コンテキストには、特に、命令、アクティベーションデータ、パラメータ、ハードウェア状態、計算オペランド、および結果が含まれ得るが、これらに限定されない。このデータは、タイルメモリまたは共有メモリ118に記憶することができる。いくつかの実装では、コアプロセッサ112は、ARC、Alpha、Am29000、ARM、Atmel AVR、Blackfin、i860、i960、M88000、MIPS、PA-RISC、Power ISA、RISC-V、SuperH、SPARC、または他の処理アーキテクチャ上で演算する。
タイル116は、推論を実行するように構成されたカスタムコンピューティングコアであり得る。各タイル116は、メモリを含むことができ、タイル間で、またはコアプロセッサ112とタイル116との間で共有することができる入力および出力を受信することができる。各タイル116は、自身のメモリ(例えば、SRAM)に加えて、高速ネットワーク122を介して共有メモリ118にアクセスすることができる。タイル116については、図6および図7を参照して以下でより詳細に説明する。
図2は、実行グラフ200の一例を示す図である。実行グラフ200は、機械学習ハードウェアアクセラレータによって実行される複数の演算202A~202Jを含む。図2の矢印は、演算間の依存関係を表す。例えば、演算202Cは、演算202Aおよび202Bの出力に依存する。図示された実行グラフはわかりやすくするために簡略化されており、実際の実行グラフは何千もの演算と依存関係とで構成され得ることに注意されたい。この初期グラフは、実行されるトレーニング済みの機械学習モデルに基づいて構築できる。例えば、MLIRファイルを提供することができコンパイルすることもでき、部分的にコンパイルして、演算および依存関係のリストを生成し、実行グラフ200を構築することもできる。
実行グラフ200は、推論を実行するために発生する必要がある演算を一般的に記述することができる。演算は、基本レベルの計算(例えば、AND演算、OR演算、またはXOR演算)または比較や平均などのより高度なレベルの計算にすることができる。すべての演算の計算コストが等しいわけではなく、一部の演算は特定のコアタイプでより高速または効率的に実行される。例えば、一連の逐次計算を必要とする演算は、ARMタイプのプロセッサまたは同様のもの(例えば、図1のコアプロセッサ112)により適し得る。別の例では、単一の入力を共有する並列演算のグループは、GPUまたはTPU(例えば、図1のタイル116)などの並列プロセッサに最も適し得る。
図3Aは、分割および割り当てを伴う実行グラフの一例を示す図である。例えば、実行グラフを実行する際の機械学習ハードウェアアクセラレータの効率を向上させるために、特定のハードウェアアクセラレータで特定の推論用にグラフをコンパイルするときに、グラフをさらに処理できる。例えば、このグラフをコンパイルすると、各分割306を特定のASICに割り当て、各演算302を実行のために特定のコアに割り当てることができる。
実行グラフは分散環境で実行することができ、演算がさまざまな処理ユニット間で分割される方法は、実行される推論の効率および速度に影響を与え得る。コンパイル時にハードウェア構成が決定される。例えば、ホストシステムは10個のマルチコア装置(例えば、Google TPU)を使用して特定の推論を実行できる。各マルチコア装置は、複数の処理コアと複数のコアタイプとを持つことができる。例えば、マルチコア装置は、処理「タイル」(例えば、図1に関して説明したタイル116)のアレイおよび1つまたは複数のコアプロセッサを有することができる。推論を実行するハードウェア構成が判明すると、実行グラフ300をさらに定義し、既知のハードウェア構成上で実行するために最適化することができる。
実行グラフは、さまざまなサブグラフに分割することができる。分割306は、比較的独立した演算のグループを分離するように選択することができる。いくつかの実装では、分割は、ハードウェアアクセラレータが実行を継続する前にパラメータを同期するチェックポイント、つまり推論の同期ポイントを表すことができる。いくつかの実装では、並列コンピューティングを最大化するために、分割後の実行グラフ300の各部分をハードウェアアクセラレータの処理装置間で分割することができる。
実行グラフ300内の各演算を評価することができ、その演算に対して好ましい処理コアを選択することができる。例えば、演算302A~302Hは、TPUタイル上で実行されるのにより適しており、したがって、TPUタイルによって優先的に実行されるべきである。演算304A~304Cは、コアプロセッサ上で実行するのにより適しており、したがって、ASICのコアプロセッサ(例えば、図1のコアプロセッサ112)で優先的に実行することができる。いくつかの実装では、好ましいコアは必ずしも演算が実行されるコアではない。例えば、好ましいコアタイプが交互に切り替わる一連の演算がある場合、ハードウェアアクセラレータ内の通信トラフィックを最小限に抑えるために、単一のコアですべての演算を実行する方が最適な場合がある。さらに、2つの好ましいコアタイプ(演算302および304)のみが示されているが、3つ以上の好ましいタイプがこの開示によって企図される。例えば、一部の演算はホストシステムのCPU(例えば、図1のCPU104)に最適であり得、したがってホストシステムによって実行されるべきである。
いくつかの実装では、特定の演算には特定のコアタイプが必要である。例えば、一部の演算はARMコア(または他の特定のRISCコア)によってのみ実行される場合があり、これらの演算はTPUタイルでは適切に実行できない。例えば、いくつかの実装では、収集、散乱、またはビーム検索演算がTPUタイルによって実行できない場合がある。ハードコアタイプの要件を持つ演算は、適切なコアに適切に割り当てることができる。多くの演算はどちらのコアでも実行できるが、どちらかのタイプの方が効率的である。さらに、演算の組み合わせまたはグループは、特定のコアタイプにより適して得る。ヒューリスティック分析を実行して、実行グラフ300、または演算302および304を分析して、各演算にどのコアタイプが好ましいかを決定することができる。ヒューリスティック分析には、使用されるタイルの数の評価(例えば、使用されるタイルの数を最大化する試み)が含まれ得る。いくつかの実装では、ヒューリスティック分析により、各コアタイプの時間遅延またはソフトウェアオーバーヘッドが計算される。
好ましいコアタイプが決定され、実行グラフ300が分割に分離されると、演算を機械学習ハードウェアアクセラレータの特定のハードウェアに割り当てることができる。一般に、特定のハードウェアコンポーネントへの演算の割り当ては、演算の好ましいコアタイプ、予想される通信トラフィック、および利用可能なハードウェアに基づいて行うことができる。例えば、一般的な機械学習ハードウェアアクセラレータは、コアプロセッサよりも多くのTPUタイルを備え得るため、演算をTPUタイルに優先的に割り当て得る。さらに、割り当ては階層的に完了できる。例えば、ホストシステムは、利用可能なASIC間で大規模な演算グループを分散し、ホストシステム内の演算を特定のタイル/プロセッサに個別に割り当て得る。いくつかの実装では、ホストシステムは、実行グラフ300全体を単一のASICに割り当てるだけでよく、ASICのアレイにわたってピアツーピア方式でグラフの一部を分散することができる。これについては、図3Bを参照してさらに説明する。
いくつかの実装では、コンパイル中に実行グラフ300に対して実行される最適化の量は調整可能である。例えば、ユーザは、推論が開始される前に、実行グラフ300の最適化および分析に費やす特定の時間を指定することができる。
図3Bは、追加の上位層割り当てを伴う実行グラフの一例を示す図である。図3Aに示すように、好ましいコアタイプが決定された後、個々の演算が特定のコアに割り当てられている。必要なコアタイプが決定されると、各分割に対して、上位レベルのコンパイラによって特定のASICを選択できる。例えば、第2の分割では、演算302Dおよび302EがハードウェアアクセラレータのASIC#1のタイルAおよびBにそれぞれ割り当てられている。一方、演算302Cおよび304Bは、タイルAおよびASIC#2のARMコアに割り当てられている。
それらの階層的性質により、割り当ての各層は、機械学習ハードウェアアクセラレータの関連コンポーネントによってのみ行われる必要がある。例えば、ホストシステム(例えば、ホストシステム102)は、ハードウェアアクセラレータのASIC#1に実行グラフ300を提供することができる。次いで、ASIC#1は、演算302Cおよび304BをASIC#2にオフロードし、演算302Dおよび302EをタイルAおよびBにそれぞれ割り当てることができる。一方、ASIC#2は、割り当てられた演算を受信し、ASIC#2内の適切なコンピューティングコア(例えば、タイル、またはアームコア)間でそれらの演算を分散できる。
図4は、マルチコアコンピューティング装置のアレイにおいて実行可能なジョブを分散するための例示的なプロセスを説明するフローチャートである。プロセス400は、機械学習ハードウェアアクセラレータ(例えば、図1に関して説明した機械学習ハードウェアアクセラレータ100)またはその一部によって実行することができる。
402で、複数の実行可能なジョブがマルチコアコンピューティング装置のアレイにおいて受信される。マルチコアコンピューティング装置のアレイは、図1を参照して説明した機械学習ハードウェアアクセラレータ100と同様とすることができる。いくつかの実装では、複数の実行可能なジョブは、トレーニングされた機械学習モデルまたはモデルの特性のリストとして受信され得る。
404において、複数のジョブの各ジョブは、マルチコアコンピューティング装置の特定のコアタイプに割り当てられる。場合によっては、各ジョブの実行に最適なコアタイプを決定するために分析を実行できる。コアタイプの例には、ARMコア(または他のRISCコア)、CPU、GPU、およびTPUが含まれ得るが、これらに限定されない。分析は、実行可能なジョブ、ユーザ入力、ならびにハードウェア要件および可用性のヒューリスティック分析に基づいて実行できる。ヒューリスティック分析により、どのジョブまたはジョブのグループがどのコアタイプで最も効率的に実行されるかを決定できる。ユーザは、実行するヒューリスティック分析を定義するパラメータを含め、分析に費やす時間や分析の優先順位などを入力できる。いくつかの実装では、ユーザ入力は、所望の分析の深さを含むことができ、これは、例えば、ジョブをどのコアタイプに割り当てるべきかを決定するために、ジョブごとに実行する計算の数を記述することができる。ハードウェア要件には、特定のジョブを特定のコアタイプで実行する必要がある特定のハードウェア制限が含まれ得る。例えば、TPUタイルは、テンソルオブジェクトのリターンを別のASICに送信することを伴う通信ルーティングジョブを実行できない場合がある。このジョブは、ASIC自体のコアプロセッサによって実行する必要がある場合がある。さらに、利用可能なハードウェアは、ジョブを割り当てるための分析に情報を提供できる。例えば、ハードウェアアクセラレータは、第2のタイプの処理コアよりも第1のタイプの処理コアを多く利用できる場合がある。この例では、第1のタイプのコアの追加の相対可用性に基づいて、ジョブを第1のタイプのコアに優先的に割り当てることができる。
406で、各ジョブは、そのコアタイプの割り当てに従って、個別に実行可能なファイルにコンパイルされる。これらの個別に実行可能なファイルは、1つまたは複数の入力とともにそれらの割り当てられたコアタイプによって消費され、1つまたは複数の出力を生成するように構成できる。例えば、TPUタイルに割り当てられたジョブは、TPU実行可能なファイルにコンパイルされる。同様に、ARMに割り当てられたジョブは、ARM実行可能なファイルにコンパイルされる。
408で、個別に実行可能なファイルの特定のタイプの処理コアへのマッピングを表す実行グラフが生成される。実行グラフは、個別に実行可能なファイル間の依存関係を識別できる。いくつかの実装では、実行グラフはノードおよびエッジグラフであり、各ノードは実行可能なファイルおよび追加のメタデータまたは情報を表し、各エッジは2つのノード間の依存関係を表す。実行グラフは、図2、図3A、および図3Bに関して説明した実行グラフ200または300と同様とすることができる。実行グラフはさらに階層的であり、以下でさらに詳しく図8を参照して説明した実行グラフ800と同様の1つまたは複数のサブグラフを含むことができる。実行グラフ内の各ノードには1つまたは複数の実行可能なファイルを含めることができ、これらの実行可能なファイルは機械学習ハードウェアアクセラレータ全体に分散できる。
図5は、マルチコアコンピューティング装置のアレイにおいて実行可能なジョブをコンパイルするための例示的なプロセスを説明するフローチャートである。プロセス500は、機械学習ハードウェアアクセラレータ(例えば、図1に関して説明した機械学習ハードウェアアクセラレータ100)またはその一部によって実行することができる。
502で、機械学習ハードウェアアクセラレータは、推論を実行するための機械学習モデルを受信する。機械学習モデルは、ニューラルネットワーク内のニューロン間の重みや接続、各層の層/ニューロンの数などのパラメータを定義できる。受信された機械学習モデルには、推論を実行するためにニューラルネットワークに提供される1つまたは複数の入力、ならびに実行される演算、および演算で使用される特定の入力、出力、およびパラメータも含めることができる。
504において、受信された機械学習モデルが解析されて、実行される複数のジョブが決定される。複数のジョブには、他のジョブからの結果に依存するジョブ、ならびにシステム間の通信および推論を実行するために完了すべき他の計算が含まれ得る。いくつかの実装では、ジョブがどのコアタイプで優先的に実行されるかを決定するためにジョブが評価される。例えば、上で説明したものと同様のヒューリスティック分析を実行して、ジョブが最適に演算するコアタイプを識別できる。
506で、複数のジョブおよび複数のジョブ間の依存関係を表す実行グラフが生成される。いくつかの実装では、実行グラフは、図2および図3を参照して説明した実行グラフ200または300と同様の、ノードおよびエッジ図である。場合によっては、これは上記の408と同様に完了する。
508において、マルチチップコンパイラが呼び出され、実行グラフをマッピングされた実行グラフにコンパイルする。マッピングされた実行グラフは、すべてのジョブが適切なコアタイプに割り当てられ、コンパイルされたグラフである。マッピングされた実行グラフには、マルチコア機械学習アクセラレータで実行されるために必要なコンパイルされた実行可能ファイルが含まれている。一般に、マルチチップコンパイラはグラフを下位層のコンパイラで処理されるサブグラフに分割する。最上位層で実行される必要がある一部のジョブはすぐにコンパイルされ、残りのジョブはさらにサブグラフに分割され、それぞれのコンパイラによってコンパイルされる。マルチチップレベル、単一チップレベル、およびコアレベルの3層階層として説明されているが、本開示の範囲内では、より多くのまたはより少ない層が考慮され得る。
510において、マルチコアコンピューティング装置と互換性のない複数のジョブのうちの1つまたは複数の第1のジョブが識別される。換言すれば、これらのジョブは、高レベルで(例えば、図1を参照して説明したようなCPU104などのホストCPUによって)実行されなければならない。例えば、実行の開始、停止、ジョブのリターンなどである。ホストCPUは、第1のコアタイプを構成してもよい。
512において、実行グラフの残りのジョブは、単一チップレベルを表す複数の第1のサブグラフに分割され、マルチコアコンピューティング装置のアレイ内のマルチコアコンピューティング装置に割り当てられる。マルチコアコンピューティング装置のアレイは、図1を参照し、以下で図6および図7を参照してより詳細に説明したASIC108と同様のASICとすることができる。
514で、チップレベルコンパイラが呼び出されて、第1のサブグラフの各々をコンパイルする。上位層の各サブグラフには、現在の層に割り当てられる実行可能ファイル、またはさらに下位レベルのサブグラフに分割される実行可能ファイルが含まれる。
516において、チップレベルでのみ実行可能であり、チップレベルでは適さない、またはチップレベルで優先的に実行される1つまたは複数のチップレベルのジョブが識別される。これらのジョブは、例えば、トラフィック調整ジョブ、またはマルチコアコンピューティング装置のコア間の同期ジョブである。次に、これらのジョブは、第2のコアタイプ(例えば、マルチコアコンピューティング装置のARMコアコントローラ)によって実行されるようにコンパイルされる。
518において、第1のサブグラフの残りのジョブは、複数の第2のサブグラフに分割され、第3のコアタイプ(例えば、TPUタイル)に割り当てられる。520で、コアレベルコンパイラが呼び出されて、第2のサブグラフの各々を処理する。522で、コアレベルコンパイラは、第2のサブグラフの各々を、第3のコアタイプ(例えば、TPUタイル)によって実行される1つまたは複数の実行可能ファイルにコンパイルする。
524で、結果として得られるマッピングされた実行グラフがリターンされ、その結果、実行可能ファイルおよびサブグラフを含む実行グラフが得られる。各サブグラフ自体には、実行可能ファイルと潜在的な追加のサブグラフとが含まれる。各グラフとサブグラフとは、マルチコアコンピューティング装置のアレイにおいて実行されるコアタイプを指定できる。
図6は、ディープニューラルネットワーク(DNN)に関連するテンソル計算を加速するための例示的なコンピューティングシステム600として機械学習ハードウェアアクセラレータで使用されるASICのブロック図を示す。システム600は、例えば、図1を参照して説明したASIC108とすることができる。システム600は一般に、コントローラ602、ホストインターフェース608、入出力(I/O)リンク610、第1のタイルセット612および第2のタイルセット614を含む複数のタイル、分類器部分616、およびバスマップ618(明確にするために示されているが、システム600には含まれていない)で識別されるデータバスを含む。タイルセット612およびタイルセット614のタイルは、図1を参照して説明したタイル116と同じであっても異なっていてもよい。コントローラ602は一般に、データメモリ604、命令メモリ606、およびコンピュータ可読記憶媒体にエンコードされた1つまたは複数の命令を実行するように構成された少なくとも1つのプロセッサを含む。命令メモリ606は、コントローラ602の1つまたは複数のプロセッサによって実行可能な1つまたは複数の機械可読命令を記憶することができる。データメモリ604は、システム600内で発生する計算に関連するさまざまなデータを記憶し、その後アクセスするためのさまざまなデータ記憶媒体のいずれであってもよい。
コントローラ602は、命令メモリ606に記憶された命令を含む、システム600内のテンソル計算に関連する1つまたは複数の命令を実行するように構成されている。いくつかの実装では、データメモリ604および命令メモリ606は、1つまたは複数の揮発性メモリユニットである。いくつかの他の実装では、データメモリ604および命令メモリ606は、1つまたは複数の不揮発性メモリユニットである。データメモリ604および命令メモリ606は、別の形式のコンピュータ可読媒体であってもよく、それは例えば、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、もしくはテープ装置、フラッシュメモリもしくは他の同様のソリッドステートメモリ装置、または記憶エリアネットワークもしくは他の構成内の装置を含む装置のアレイなどである。さまざまな実装では、コントローラ602は、コアマネージャ602と参照される、または呼ばれることもある。
図示されるように、ホストインターフェース608は、I/Oリンク610、コントローラ602、および分類器部分616に結合される。ホストインターフェース608は、I/Oリンク610から命令およびデータパラメータを受信し、コントローラ602に命令およびパラメータを提供する。一般に、命令は、命令バス624(後述)を通じてシステム600内の1つまたは複数の装置に提供することができ、パラメータは、リングバス628(後述)を通じてシステム600内の1つまたは複数の装置に提供することができる。いくつかの実装では、命令は、最初にホストインターフェース618からコントローラ602によって受信され、後のコントローラ602による実行のために命令メモリ606に記憶される。
分類器部分616は、同様に、コントローラ602および第2のタイルセット614のタイル7に結合される。いくつかの実装では、分類器部分616は、システム600内の別個のタイルとして実装される。代替の実装では、分類器部分616は、コントローラ602のサブ回路またはサブ装置としてコントローラ602内に配置または位置決めされる。分類器部分616は、一般に、完全に接続された層の出力として受信される蓄積されたアクティベーション前値に対して1つまたは複数の機能を実行するように構成される。完全に接続された層は、タイルセット612および614内のタイルにわたって分割され得る。したがって、各タイルは、タイルのメモリユニットに記憶できるアクティベーション前値のサブセット(すなわち、線形出力)を生成するように構成されている。分類結果バス620は、分類器部分616からコントローラ602へのデータパスを提供する。ポスト関数値(すなわち、結果)を含むデータは、分類結果バス620を介して分類器部分616からコントローラ602に提供される。
バスマップ618は、第1のタイルセット612のタイルと第2のタイルセット614のタイルとの間に1つまたは複数の相互接続されたデータ通信パスを提供するデータバスを示す。バスマップ618は、図6に示すように、分類結果バス620、CSR/マスタバス622、命令バス624、メッシュバス626、およびリングバス628を識別するための凡例を提供する。一般に、タイルは、システム600のアクセラレータアーキテクチャ内のコアコンポーネントであり、システム内で行われるテンソル計算の焦点である。各タイルは、システム内の他のタイルと連携して、多層ニューラルネットワークの1つまたは複数の層にわたる計算を高速化する個別のコンピューティングユニットである。タイルセット612、614内のタイルは、所与の命令に関連付けられたテンソル計算の実行を共有することができるが、個々のコンピューティングユニットは、タイルセット612、614内の他の対応するタイルに対して独立してテンソル計算のサブセットを実行するように構成された自己完結型の計算コンポーネントである。
CSRバス622は、コントローラ602がプログラム構成を設定し、1つまたは複数のタイルに関連付けられたステータスレジスタを読み取る1つまたは複数の命令を送信できるようにする単一マスタ複数スレーブバスである。CSRバス622は、1つのマスタバスセグメントおよび複数のスレーブバスセグメントを有する単一のデイジーチェーン構成で接続され得る。図6に示されるように、CSRバス622は、タイルセット612、614内のタイルおよびリング内のコントローラ602をホストインターフェース610に接続するバスデータパスを介した通信結合を提供する。いくつかの実装では、ホストインターフェース610は、CSRバスリングの単一マスタであり、CSRバスアドレス空間全体が、ホストインターフェース610内のメモリ空間にメモリマッピングされる。
CSRバス622は、1つまたは複数の演算を実行するためにホストインターフェース610によって使用され得、例えば、コントローラ602が命令メモリ606から命令のフェッチを開始できるようにするためのコントローラ602内のメモリバッファポインタをプログラミングすること、1つまたは複数の計算中に静的なままになるさまざまなタイル設定(例えば、多項式近似計算の係数テーブル)を更新/プログラミングすること、および/またはファームウェアを分類部分616にロード/再ロードすること、を含む。一例では、ファームウェアの再ロードには、線形出力(つまり、アクティベーション前値)に適用される新しい関数が含まれ得る。したがって、CSRバス622にアクセスできるすべてのスレーブは、スレーブに結び付けられ、それを識別する別個のノード識別子(ノードID)を有することになる。ノードIDは命令アドレスの一部であり、CSRパケットがスレーブに宛てられているかどうかを決定するために、CSRスレーブ(すなわち、コントローラ602、タイル612、614、および分類器616)によって使用、検査、またはさもなければ調べられる。
いくつかの実装では、1つまたは複数の命令は、コントローラ602を介してホストインターフェース602によって送信され得る。命令は、例えば、32ビット幅であり得、最初の7ビットには、命令を受信して実行する命令アドレス/宛先を示すヘッダ情報が含まれる。ヘッダの最初の7ビットには、特定のノードIDを表すデータパラメータが含まれ得る。したがって、CSRバスリング上のスレーブ(例えば、各タイル)は、命令のヘッダを検査して、マスタ(ホストインターフェース610)による要求がヘッダを検査しているタイルに宛てられたものであるかどうかを決定することができる。ヘッダのノードIDが宛先が検査タイルであることを示していない場合、検査タイルは入力CSR命令パケットを次のタイルによる検査のために次のタイルに接続されたCSRバス入力にコピーする。
命令バス624はコントローラ602から始まり、CSRバス622と同様に、リング内のタイルセット612、614内のタイルをコントローラ602に戻るように接続するバスデータパスを介した通信結合も提供する。一実装では、コントローラ602は、命令バス624を介して1つまたは複数の命令をブロードキャストする。コントローラ602によってブロードキャストされる命令は、CSRバス622を介して提供される命令とは異なり得る。しかし、タイルがバス624を介して受信した命令を受信および/または消費または実行する方法は、CSRバス622を介して受信した命令を実行するためのプロセスと同様であり得る。
一例では、命令のヘッダ(すなわち、ビットマップ)は、受信タイルに対して、受信タイルが命令に関連付けられたビットマップに基づいて特定の命令を消費する必要があることを示す。ビットマップは、ビットに関して定義された特定の幅を持ち得る。命令は通常、命令のパラメータに基づいて、あるタイルから次のタイルに転送される。一実装では、命令バス624の幅は、命令のサイズ/幅よりも小さくなるように構成され得る。したがって、そのような構成では、命令の送信は数サイクルにわたって行われ、命令バス624のバスストップは、タイルで受信した命令をそのタイルに関連付けられた適切なターゲット命令バッファに配置するデコーダを有する。
さらに以下で説明するように、タイルセット612、614内のタイルは、一般に、2つの広範なカテゴリの命令をサポートするように構成される。2つの大まかなカテゴリは、命令タイプとも呼ばれ得る。命令タイプには、テンソル演算(TensorOp)命令とダイレクトメモリアクセス(DMAOp)命令とが含まれる。いくつかの実装では、DMAOp命令には、同時実行が許可される1つまたは複数の特殊化がある。1つまたは複数の特殊化は、DMAOp命令サブタイプまたはオペコードと呼ばれ得る。場合によっては、すべての固有および/または有効なDMAOp命令タイプ/サブタイプタプルが、特定のタイル内に個別の命令バッファを持つことになる。
タイル612、614の特定のタイルで、命令バス624に関連付けられたバスストップはヘッダビットマップを調べて命令タイプ/サブタイプを決定する。命令は、タイルによって受信され、その後、タイルによる命令の実行前に、タイルの命令バッファに書き込まれ得る。命令が書き込まれるタイルの命令バッファは、命令のタイプおよびサブタイプインジケータ/フィールドによって決定され得る。命令バッファには、1つまたは複数の関連命令の消費を優先する先入れ先出し(FIFO)制御方式が含まれ得る。したがって、このFIFO制御方式では、同じタイプ/サブタイプの命令は常に、命令が命令バスに到着した順序で実行される。
タイル内の異なる命令バッファは、TensorOp命令バッファおよびDMAOp命令バッファである。上で示したように、命令タイプにはTensorOp命令とDMAOp命令とが含まれる。DMAOp命令に関しては、命令サブタイプ(「書き込み先」バッファの位置を示す)には以下が含まれる。以下とは、1)メッシュ受信命令バッファ、2)メッシュ送信命令バッファ、3)ナローワイドDMA命令バッファ、4)ワイド/ナローDMA命令バッファ、および5)リングバスDMA命令バッファ、である。これらのバッファ位置については、図7を参照して以下でさらに詳しく説明する。ワイドおよびナローの指定は仕様全体で使用されており、一般に1つまたは複数のメモリユニットの幅(ビット/バイト)のおおよそのサイズを指す。本明細書で使用される場合、「ナロー」は、各々が16ビット未満のサイズまたは幅を有する1つまたは複数のメモリユニットを指し得、「ワイド」は、各々が64ビット未満のサイズまたは幅を有する1つまたは複数のメモリユニットを指し得る。
メッシュバス626は、CSRバス622、命令バス624、およびリングバス628(後述)とは異なるデータ通信パスを提供する。図6に示されるように、メッシュバス626は、X次元およびY次元の両方において各タイルをその対応する隣接タイルに結合または接続する通信パスを提供する。さまざまな実装において、メッシュバス626は、隣接するタイル内の1つまたは複数のナローメモリユニット間で入力アクティベーション量を転送するために使用され得る。図示されるように、メッシュバス626は、入力アクティベーションデータを隣接しないタイルに直接転送することを許可しない。
さまざまな実装において、メッシュバス626およびメッシュバス626を介して接続されたさまざまなタイルは、以下の構成を有し得る。メッシュの4つのコーナータイルには2つの送信ポートと2つの受信ポートとがある。メッシュの4つのエッジタイルには3つの受信ポートと3つの送信ポートとがある。エッジおよびコーナー以外のすべてのタイルには、4つの受信ポートと4つの送信ポートとがある。一般に、NxNタイルレイアウトの一例を考えると、エッジタイルは3つの隣接タイルのみを持つタイルであり、一方、コーナータイルは2つの隣接タイルを持つタイルである。メッシュバス626を介したデータフロー方法に関して、一般に、特定のタイルについてメッシュバス626を介して到着するすべての入力アクティベーションは、タイルの1つまたは複数のナローメモリユニットにコミットされなければならない。さらに、受信ポートが4つ未満のタイル構成の場合、DMAOp命令は、存在しない入力ポート上のデータを待つ代わりに、タイルのナローメモリ内の位置にゼロ値を書き込み得る。同様に、送信ポートが4つ未満のタイル構成の場合、DMAOp命令は、存在しないポートの転送に関連するナローメモリの読み取りとポートの書き込みを実行しない。
いくつかの実装では、特定の入力アクティベーションが書き込まれるか読み取られるナローメモリユニットの位置またはアドレスは、メッシュバス626を介して提供される受信/送信DMAOpに基づいてテンソルトラバーサルユニット(Tensor Traversal Unit)(以下「TTU」)によって生成される。受信DMAOpおよび送信DMAOpは同時に実行することができ、任意の必要な同期はコントローラ602によって管理される同期フラグ制御方式を通じて管理されることになる。TTUについては、図7を参照して以下でさらに詳細に説明する。
リングバス628はコントローラ602から始まり、CSRバス622および命令バス624と同様に、リング内のタイル612、614をコントローラ602に戻るように接続するバスデータパスを介した通信結合も提供する。さまざまな実装では、リングバス628は一般に、すべてのタイル612、614内の全幅メモリユニット(図7を参照して以下でより詳細に説明する)を接続または結合する。したがって、リングバス628のペイロード幅は、タイルセット612、614の各タイル内に配置されたワイドメモリユニットの幅に対応する。上で論じたように、リングバス628は、リングバス628を介して通信される命令またはパラメータを含むペイロードデータを消費する必要があるタイルを示すビットマップヘッダも含む。
リングバス628を介して特定のタイルで受信されたデータ(すなわち、ペイロード)に関して、情報の受信に応答して、各タイルは、データを別のタイルに転送する前に、受信タイルに固有のビットマップヘッダで示される位置データをゼロにする(つまり、クリアする)。したがって、ヘッダビットマップにペイロードを受信する特定のタイルを示すビットセットデータが残っていない場合、別のタイルへのペイロードの転送は停止する。ペイロードデータは通常、深くネストされたループの実行に基づいて実行されるテンソル計算中に1つまたは複数のタイルによって使用されるアクティベーションと重みとを指す。
いくつかの実装では、コントローラ602は、リングバス628の一部であると説明され得る。一例では、特定のタイル内で実行されるDMAOp命令の場合、コントローラ602を使用して、リングバスストップからデータ/ペイロードをポップし、ペイロードをリング内の次のタイルのリングバスストップに転送することができる。コントローラ602はまた、そのようなアクションがビットマップヘッダ内の命令によって必要とされる場合、ペイロードデータをタイルの1つまたは複数のワイドメモリユニットにコミットさせることもできる。データを書き込む必要がある1つまたは複数のワイドメモリユニットのアドレスは、特定のタイル内のDMAOp命令によって生成され得る。
さまざまな実装において、タイルセット612、614の各タイルは、ペイロードデータのプロデューサまたはペイロードデータのコンシューマのいずれかになることができる。タイルがペイロードデータのプロデューサである場合、タイルはそのワイドメモリユニットの1つまたは複数からデータを読み取り、1つまたは複数の他のタイルによる消費のためにリングバス628を介してデータをマルチキャストする。タイルがペイロードデータのコンシューマである場合、タイルはデータを受信してタイル内の1つまたは複数のワイドメモリユニットに書き込み、1つまたは複数の他のタイルで消費するようにペイロードデータを転送する。リングバス628を介したペイロードデータの移動に関しては、通常、リングバス628上には常に1つのデータのプロデューサ/マスタが存在するだけである。すべてのタイルにおけるDMAOp命令の実行順序(例えば、FIFO制御方式)により、所定の時間にリングバス628上にデータのプロデューサ/マスタがただ1つだけ存在することが保証される。
いくつかの実装では、コントローラ602は、同期フラグ制御アーキテクチャを使用して、所与の時間にリングバス628上にペイロードデータのプロデューサ/マスタが1つだけ存在することを保証する。一例では、タイルによるリング出力への書き込みのたびに、対応する同期フラグのカウントの増加がトリガーされる。コントローラ602は、ペイロードデータを検査して、ペイロードを含むデータチャンクまたはセグメントの数を決定することができる。次に、コントローラ602は、タイルによる実行を監視して、別のタイルがマスターモードで実行される前に、予想される数のデータセグメントがタイルによって転送および/または消費されることを保証する。
リングバス628上に重複領域を持たないローカルマルチキャストグループがそのリングバスを介して接続されている場合、所与の時点でリングバス628上にデータのプロデューサ/マスタが1つだけ存在することを保証する例外が発生する。例えば、タイル0(マスター)は、タイル0~タイル3グループ内のタイルにマルチキャスト(つまり、データを生成)することができ、一方、タイル4(マスター)は、タイル4~タイル7グループ内のタイルに対して同じことを行うことができる。このデュアルマスターマルチキャスト方法論の重要な要件は、パケットの重複が発生して1つまたは複数のデータ計算エラーが発生し得るため、異なるマルチキャストグループが互いのデータパケットを参照できないようにすることである。
図6に示すように、コントローラ602は、タイルセット612、614内のタイルをI/O610に結合または接続する通信データパスを提供し、いくつかのコア機能を含む。コントローラ602のコア機能には、一般に、1つまたは複数のI/O入力アクティベーションをタイルセット612、614内のタイルに供給することと、1つまたは複数の入力アクティベーションおよびI/O610から受信したパラメータをタイルに供給することと、I/O610から受信した1つまたは複数の命令をタイルに供給することと、I/O出力アクティベーションをホストインターフェース608に送信することと、CSRバス622およびリングバス628のリングストップとして機能することと、が含まれる。以下により詳細に説明するように、第1のタイルセット612および第2のタイルセット614は各々、内側ループおよび外側ループから構成される深いループネストに基づいて実行される1つまたは複数のテンソル計算を実行するために使用される複数のタイルを含む。
システム600は一般に次のように演算する。ホストインターフェース608は、所与の計算に対して行われるダイレクトメモリアクセス演算(DMAOp)を定義する1つまたは複数の命令をコントローラ602に提供する。コントローラ602に供給される命令に関連する記述子は、多次元データアレイ(テンソル)に関連する大規模なドット積計算を容易にするためにコントローラによって必要とされる情報を含むことになる。一般に、コントローラ602は、ホストインターフェース608から、ニューラルネットワークの所与の層に対するテンソル計算を実行するための入力アクティベーション、タイル命令、およびモデルパラメータ(すなわち、重み)を受信する。次に、コントローラ602は、命令によって定義されたデータフロー方式で命令をタイル612、614にマルチキャストさせることができる。上で論じたように、命令を消費するタイルは、次いで、命令ヘッダ内のビットマップデータに基づいて、別のタイルへの新しい/後続の命令のブロードキャストを開始することができる。
データフローに関して、入力アクティベーションおよびパラメータは、リングバス628を介してタイルセット612、614のタイルに送信される。タイル612、614の各々は、その特定のタイルに割り当てられる出力アクティベーションのサブセットを計算するために必要な入力アクティベーションのサブセットを記憶する。タイルに対するDMAOp命令により、入力アクティベーションがワイドメモリからナローメモリに移動させられる。タイル内の計算は、必要な入力アクティベーション、パラメータ/重み、および計算命令(TTU演算、メモリアドレスなど)がタイル内で利用可能になったときに開始される。タイル内で行われる計算は、タイル内のMAC演算子(後述)が命令セットによって定義されたすべてのドット積演算を完了したときに終了し、事前アクティベーション関数が乗算演算の結果(つまり、出力アクティベーション)に適用される。
1つまたは複数のテンソル計算の結果には、計算を実行するタイルのナローメモリユニットへの計算層の出力アクティベーションの書き込みが含まれる。特定のテンソル計算では、メッシュバス626を介して出力エッジアクティベーションが隣接するタイルに転送される。計算が複数の層にまたがる場合、後続の層の出力アクティベーションを計算するには、出力エッジアクティベーションを隣接タイルに転送する必要がある。すべての層の計算が完了すると、DMAOpはリングバス628を介して最終的なアクティベーションを分類器タイル616に移動する。次いで、コントローラ602は、分類器タイル616から最終アクティベーションを読み取り、DMAOpを実行して、最終アクティベーションをホストインターフェース608に移動する。いくつかの実装では、分類器部分616は、NNの出力層(すなわち、最後の層)の計算を実行する。他の実装では、NNの出力層は、分類層、回帰層、または一般にニューラルネットワークに関連付けられる別の層タイプのうちの1つである。
図7は、図1を参照して説明したようにASIC106で使用できるニューラルネットワーク(NN)計算タイル700の一例を示す。一般に、例示的なタイル700は、図6を参照して上述した第1のタイルセット612および第2のタイルセット614内のタイルのいずれかに対応し得る。さまざまな実装では、計算タイル700は、計算ユニット700と参照される、または呼ばれることもある。各計算タイル700は、タイルセット612、614内の他の対応するタイルに対して独立して命令を実行するように構成された内蔵型計算ユニットである。上で簡単に説明したように、各計算タイル700は、TensorOp命令とDMAOp命令という2種類の命令を実行する。一般に、各命令タイプには深いループネストに関連付けられた計算演算が含まれるため、各命令タイプは通常、すべてのループ反復の完了を保証するために複数のタイムエポックにわたって実行される。
以下でより詳細に説明するように、異なる命令タイプは、計算タイル700内で管理される同期フラグ制御を介してデータを同期する計算タイル700内の独立した制御ユニットによって実行される。同期フラグ制御は、計算タイル700内の異なる命令タイプの実行間の同時実行性を管理する。各命令タイプに関連付けられた各計算演算は、厳密な発行順序(つまり、先入れ先出し)で実行される。2つの命令タイプ、TensorOPおよびDMAOpに関して、これらの異なる命令タイプ間の順序保証はなく、各タイプは計算タイル700によって別個の制御スレッドとして扱われる。
データフロー構造に関して、計算タイル700は一般に、計算タイル700に出入りするデータフローのための通信パスを各々提供するデータパス702およびデータパス705を含む。上述したように、システム600は、リング構成でレイアウトされた3つの異なるデータバス構造、すなわちCSRバス622、命令バス624、およびリングバス628を含む。図7を参照すると、データパス705は命令バス624に対応し、一方、データパス702は一般にCSRバス622およびリングバス628のうちの1つに対応する。図示のように、データパス702は、計算タイル700から出るデータの出力パスを提供するリング出力703と、計算タイル700に入るデータの入力パスを提供するリング入力704とを含む。
計算タイル700は、TensorOpテンソルトラバーサルユニット(TTU)726を含むTensorOp制御706と、DMAOp TTU728を含むDMAOp制御708とをさらに含む。TensorOp制御706は、一般に、TensorOp TTUレジスタ732への書き込みおよびTensorOp TTUレジスタ732からの読み取りを管理し、TensorOp TTU726によって実行されるトラバーサル演算を管理する。同様に、DMAOp制御708は一般に、DMAOp TTUレジスタ734への書き込みおよびそこからの読み取りを管理し、DMAOp TTU728によって実行されるトラバーサル演算を管理する。TTUレジスタ732は、TensorOp制御706による命令の実行時にTensorOp TTU726によって実行される演算を含む1つまたは複数の命令を記憶するための命令バッファを含む。同様に、TTUレジスタ734は、DMAOp制御708による命令の実行時にTTU708によって実行される演算を含む1つまたは複数の命令を記憶するための命令バッファを含む。以下でさらに説明するように、TTUは、一般にナローメモリ710およびワイドメモリ712に載る1つまたは複数のテンソルのアレイ要素をトラバースするために、計算タイル700によって使用される。
いくつかの実装では、計算タイル700によって実行される特定の命令は、データパス705(すなわち、命令バス624の一部)を介してタイルに到着する。計算タイル700は、ヘッダビットマップを調べて、命令タイプ(TensorOpまたはDMAOp)および命令サブタイプ(読み取り演算または書き込み演算)を決定する。計算タイル700によって受信された命令は、その後、命令タイプに応じて特定の命令バッファに書き込まれる。一般に、命令は、計算タイル700のコンポーネントによる命令の実行前に受信され、記憶される(すなわち、バッファに書き込まれる)。図7に示されるように、命令バッファ(すなわち、TensorOp TTUレジスタ732およびDMAOp TTUレジスタ734)は各々、1つまたは複数の関連命令の消費(実行)を優先する先入れ先出し(FIFO)制御方式を含み得る。
上で簡単に説明したように、テンソルは多次元幾何学的オブジェクトであり、多次元幾何学的オブジェクトの例には行列およびデータアレイが含まれる。深くネストされたループを含むアルゴリズムは、計算タイル700によって実行され、1つまたは複数のネストされたループを反復してN次元テンソルを横断することによってテンソル計算を実行することができる。計算プロセスの一例では、ループネストの各ループは、N次元テンソルの特定の次元をトラバースする責任を負い得る。本明細書で説明されるように、TensorOp制御706は、一般に、特定のテンソル構造の次元要素がトラバースされアクセスされて、深いネストされたループによって定義される計算を完了するシーケンスを駆動する1つまたは複数のテンソル演算を管理する。
計算タイル700は、ナローメモリ710およびワイドメモリ712をさらに含む。ナローおよびワイドの指定は、一般に、ナローメモリ710およびワイドメモリ712のメモリユニットの幅のサイズ(ビット/バイト)を指す。いくつかの実装では、ナローメモリ710は、各々が16ビット未満のサイズまたは幅を有するメモリユニットを含み、ワイドメモリ712は、各々が32ビット未満のサイズまたは幅を有するメモリユニットを含む。一般に、計算タイル700は、データパス705を介して入力アクティベーションを受信し、DMA制御708は、入力アクティベーションをナローメモリ710に書き込む演算を実行する。同様に、計算タイル700は、データパス702を介してパラメータ(重み)を受信し、DMA制御708は、パラメータをワイドメモリ712に書き込む演算を実行する。いくつかの実装では、ナローメモリ710は、共有メモリシステムで通常使用されるメモリアービタを含むことができ、各メモリサイクルについて、どの制御装置(例えば、TensorOp制御706またはDMAOp制御708)がナローメモリ710のその共有メモリユニットにアクセスすることを許可されるかを決定する。
計算タイル700は、入力アクティベーションバス716と、各々がMAC演算子715および合計レジスタ720を含む複数のセルを含むMACアレイ714とをさらに含む。一般に、MACアレイ714は、複数のセルにわたるMAC演算子715および合計レジスタ720を使用して、ドット積計算に関連する算術演算を含むテンソル計算を実行する。入力アクティベーションバス716は、MACアレイ714の各MAC演算子715によるそれぞれのアクセスに対してナローメモリ710によって入力アクティベーションが1つずつ提供されるデータパスを提供する。したがって、入力アクティベーションの1つ1つのブロードキャストに基づいて、特定のセルの単一のMAC演算子715が各々入力アクティベーションを受信することになる。MACアレイ714のMAC演算子によって実行される算術演算は、一般に、ナローメモリ710によって提供される入力アクティベーションと、ワイドメモリ712からアクセスされるパラメータとを乗算して、単一の出力アクティベーション値を生成することを含む。
算術演算中、部分合計は累積され、対応する、例えば合計レジスタ720に記憶されるか、またはワイドメモリ712に書き込まれ、MACアレイ714の特定のセルによって再アクセスされて後続の乗算演算を完了することができる。テンソル計算は、第1の部分と第2の部分を有するものとして説明できる。第1の部分は、乗算演算によって出力アクティベーションが生成されると完了する。例えば、入力アクティベーションと出力アクティベーションを生成するパラメータの乗算が完了することによって行われる。第2の部分は、出力アクティベーションへの非線形関数の適用を含み、関数の適用後に出力アクティベーションがナローメモリ710に書き込まれるときに第2の部分が完了する。
計算タイル700はさらに、出力アクティベーションバス718、出力アクティベーションパイプライン724を備える非線形ユニット(NLU)722、NLU制御738、および計算タイル700内のコンポーネントのコア属性を示す参照マップ730を含む。明確にするために参照マップ730が示されているが、計算タイル700には含まれない。コア属性には、特定のコンポーネントがユニット、記憶装置、演算子、制御装置、またはデータパスであるかどうかが含まれる。一般に、テンソル計算の第1の部分が完了すると、出力アクティベーションがMACアレイ714から出力アクティベーションバス718を介してNLU722に提供される。NLU722に到着した後、アクティベーションパイプライン724を介して受信されたアクティベーション関数を指定するデータが出力アクティベーションに適用され、出力アクティベーションがナローメモリ710に書き込まれる。いくつかの実装では、出力アクティベーションバス718は、少なくとも1つのパイプライン化されたシフトレジスタ736を含み、テンソル計算の第2の部分を完了することは、アクティベーションバス718のシフトレジスタ736を使用して出力アクティベーションをナローメモリ710に向けてシフトすることを含む。
例えば、2つの多次元データアレイのドット積計算に関して、単一の計算タイル700に対して、MACアレイ714は、堅牢な単一命令複数データ(SIMD)機能を提供する。SIMDは一般に、すべての並列ユニット(複数のMAC演算子715)が同じ命令を(深いループネストに基づいて)共有するが、各MAC演算子715が異なるデータ要素に対して命令を実行することを意味する。基本的な例の1つでは、アレイ[1,2,3,4]と[5,6,7,8]を要素ごとに追加して1サイクルでアレイ[6,8,10,12]を取得するには、通常4つの演算ユニットが必要になり、各要素に対して演算を実行する。SIMDを使用することにより、4つのユニットは同じ命令(例えば「add」)を共有し、並列計算を実行できる。したがって、システム600および計算タイル700は、従来の方法よりも強化されたテンソル計算の加速および並列処理を提供する。
一例では、以下により詳細に説明するように、複数のMACアレイ714による消費用に単一の命令がコントローラ602によって複数の計算タイル700に提供され得る(図6のタイルセット612、614を参照)。一般に、ニューラルネットワーク層は複数の出力ニューロンを含むことができ、出力ニューロンは、出力ニューロンのサブセットに関連付けられたテンソル計算をタイルセット612、614の特定のタイルに割り当てることができるように分割することができる。次いで、タイルセット612、614の各タイルは、所与の層の異なるニューロングループに対して関連するテンソル計算を実行することができる。したがって、計算タイル700は、少なくとも2つの形式の並列処理を提供できる。1)1つの形式は、タイルセット612、614の複数のタイル間で出力アクティベーション(出力ニューロンのサブセットに対応する)を分割することを含む。2)別の形式には、タイルセット612、614のタイル間の分割に基づく、出力ニューロンの複数のサブセットの同時計算(単一命令による)が含まれる。
図8は、階層的実行グラフの一例を示す。図示された階層的実行グラフ800は、図2および図3に関して説明した実行グラフ200または300と同様であり得るより高いレベルのグラフを示す。いくつかの実装では、実行グラフ800は、図4および図5を参照して説明したプロセス400またはプロセス500と同様のプロセスによって生成される。
ルートグラフ802は、実行グラフ800全体を記述する。これには、実行時レベルの命令、マルチチップレベルの命令、単一チップレベルの命令、実行されるハードウェアレイアウトを定義するリストおよびパラメータ、推論のためのメモリ空間の変数を定義できる定数バッファのリスト、およびサブグラフ804のリストが含まれる。
ルートグラフ802に含まれる各サブグラフ804は、テンソルのリスト808と演算のリスト806を含む。サブグラフ804はさらに、入力および出力のリスト、およびテンソルパラメータおよび記憶位置を定義するインデックスを含む。さらに、サブグラフ804は、階層的実行グラフ800に追加の層を提供できるさらなるサブグラフ(図示せず)を含むことができる。
サブグラフ804内に含まれる演算806は、特定のタイプ定義および演算に特有の追加データを有するコンパイルされた実行可能ファイルとすることができる。演算806には、好ましいコアタイプを指定するメタデータ、またはその実行に関連する他のパラメータを含めることができる。サブグラフと同様に、演算には、実行する演算に必要なさまざまなテンソルまたはその他のデータの位置を識別するインデックスを含むことができる入力および出力のリストを含めることができる。いくつかの実装では、テンソルは要素の多次元アレイであり、すべての要素は単一の既知のデータタイプである。
テンソル808は、さまざまなサブグラフ804および演算808、さらには潜在的にルートグラフ802によって取り込まれ、処理されるデータを定義する。各テンソル808は、事前定義された寸法または形状、ならびに事前定義された変数タイプを有することができる。いくつかの実装では、テンソルは共有メモリに記憶され、複数のコアまたはコンピューティング装置からアクセスできる。
前述の説明は、1つまたは複数の特定の実装に関連して提供されている。開示された実装のさまざまな修正、変更、および置換は、本開示の範囲から逸脱することなく行うことができる。したがって、本開示は、説明または図示された実装のみに限定されることを意図するものではなく、本明細書に開示される原理および特徴と一致する最も広い範囲が与えられるべきである。
本明細書には多くの特定の実装の詳細が含まれるが、これらは、任意の発明の範囲または特許請求され得る内容の限定として解釈されるべきではなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。本明細書において別個の実施形態に関連して説明される特定の特徴は、単一の実施形態において組み合わせて実装することもできる。逆に、単一の実施形態の文脈で説明されるさまざまな特徴は、複数の実施形態で個別に、または任意の適切なサブコンビネーションで実装することもできる。さらに、特徴が特定の組み合わせで作用するものとして上で説明され、最初にそのように請求されている場合でも、請求された組み合わせからの1つまたは複数の特徴が、場合によっては、組み合わせから削除される場合があり、請求された組み合わせは、サブコンビネーションまたはサブコンビネーションのバリエーションを対象とし得る。
同様に、図面では演算が特定の順序で示されているが、これは、望ましい結果を達成するために、そのような演算が図示された特定の順序または連続した順序で実行されること、または図示されたすべての演算が実行されることを必要とするものとして理解されるべきではない。特定の状況では、マルチタスクと並列処理が有利な場合がある。さらに、上述の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に統合することも、複数のソフトウェア製品にパッケージ化することもできることを理解されたい。
主題の特定の実施形態について説明した。他の実施形態は、以下の特許請求の範囲内に含まれる。例えば、バスラインは「制御可能」であると説明されているが、すべてのバスラインが同じレベルの制御を持つ必要があるわけではない。例えば、一部のバスラインは、データのソースまたはデータの送信先となるタイルの数に関して制限されている場合にのみ制御できる場合に、制御可能性の程度はさまざまである。別の例では、一部のバスラインは、本明細書で説明する北、東、西、または南などの単一方向に沿ってデータを提供することに特化することができる。場合によっては、特許請求の範囲に記載されているアクションを異なる順序で実行しても、望ましい結果を達成することができる。一例として、添付の図に示されているプロセスは、望ましい結果を達成するために、必ずしも示されている特定の順序、または一連の順序を必要とするわけではない。特定の実装では、マルチタスクおよび並列処理が有利な場合がある。
Claims (38)
- マルチコアコンピューティング装置のアレイにおいて実行可能なジョブを分散するための方法であって、
前記マルチコアコンピューティング装置のアレイにおいて実行される複数のジョブを受信することを含み、各マルチコアコンピューティング装置は複数の異なるタイプの処理コアを含み、
前記方法は、
前記複数のジョブの各特定のジョブを、前記複数の異なるタイプの処理コアのうちの1つによって実行されるように割り当てることをさらに含み、前記割り当てることは、
前記特定のジョブを分析して、前記複数の異なるタイプの処理コアのうちどれが前記特定のジョブの実行に適しているかを決定することと、
前記分析に基づいて前記特定のジョブをコアタイプに割り当てることとによって行われ、
前記方法は、
前記複数のジョブの各ジョブを個別に実行可能なファイルにコンパイルすることと、
前記複数の異なるタイプの処理コアのうちの特定のものへの前記個別に実行可能なファイルのマッピングを表す実行グラフを生成することとをさらに含み、前記実行グラフは個別に実行可能なファイル間の依存関係を識別する、方法。 - 前記個別に実行可能なファイルを実行することをさらに含み、前記実行することは、
前記実行グラフを受信することと、
前記実行グラフ内のジョブを、前記マルチコアコンピューティング装置のアレイ内の複数のマルチコアコンピューティング装置に割り当てることと、
各マルチコアコンピューティング装置によって、割り当てられた前記ジョブを実行することと、
各マルチコアコンピューティング装置によって、実行された前記ジョブの出力を共有メモリにリターンすることと、
リターンされた前記出力を組み合わせて、実行グラフのリターンを生成することとによって行われる、請求項1に記載の方法。 - 前記特定のジョブを分析することは、ヒューリスティック分析を使用して完了される、請求項1または請求項2に記載の方法。
- 各特定のジョブの分析の深さは、コンパイル時間に先立ってユーザ入力に基づいて選択される、請求項1、請求項2、または請求項3に記載の方法。
- 前記複数の異なるタイプの処理コアは、第1のタイプのコアと第2のタイプのコアとを含む、請求項1から請求項4のいずれか一項に記載の方法。
- 前記第1のコアタイプはコアプロセッサであり、前記第2のコアタイプはTPUタイルプロセッサである、請求項5に記載の方法。
- 前記実行グラフは、少なくとも4つの層に配置されたサブグラフを含む階層的な性質を有し、前記少なくとも4つの層は、
前記第2のコアタイプで実行される実行可能ファイルを含むTPU層、
前記TPU層の1つまたは複数のサブグラフと、前記第1のコアタイプで実行される実行可能ファイルとを含むチップレベル層、
2つ以上のチップレベルのサブグラフを含むマルチチップ層、および
マルチチップ層のサブグラフと、第3のタイプのコアで実行されるように構成された1つまたは複数のサブグラフとを含むホストレベル層を含む、請求項5または請求項6に記載の方法。 - 前記第3のタイプのコアは、ホスト装置のCPUである、請求項7に記載の方法。
- 1つまたは複数のプロセッサに結合され、命令が記憶されている非一時的なコンピュータ可読記憶媒体であって、前記命令は、前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに実行可能なジョブをマルチコアコンピューティング装置のアレイにおいて分散させるための演算を実行させ、前記演算は、
前記マルチコアコンピューティング装置のアレイにおいて実行される複数のジョブを受信することを含み、各マルチコアコンピューティング装置は複数の異なるタイプの処理コアを含み、
前記演算は、
前記複数のジョブの各特定のジョブを、前記複数の異なるタイプの処理コアのうちの1つによって実行されるように割り当てることをさらに含み、前記割り当てることは、
前記特定のジョブを分析して、前記複数の異なるタイプの処理コアのうちどれが前記特定のジョブの実行に適しているかを決定することと、
前記分析に基づいて前記特定のジョブをコアタイプに割り当てることとによって行われ、
前記演算は、
前記複数のジョブの各ジョブを個別に実行可能なファイルにコンパイルすることと、
前記複数の異なるタイプの処理コアのうちの特定のものへの前記個別に実行可能なファイルのマッピングを表す実行グラフを生成することとをさらに含み、前記実行グラフは個別に実行可能なファイル間の依存関係を識別する、非一時的なコンピュータ可読記憶媒体。 - 前記演算は、
前記個別に実行可能なファイルを実行することをさらに含み、前記実行することは、
前記実行グラフを受信することと、
前記実行グラフ内のジョブを、前記マルチコアコンピューティング装置のアレイ内の複数のマルチコアコンピューティング装置に割り当てることと、
各マルチコアコンピューティング装置によって、割り当てられた前記ジョブを実行することと、
各マルチコアコンピューティング装置によって、実行された前記ジョブの出力を共有メモリにリターンすることと、
リターンされた前記出力を組み合わせて、実行グラフのリターンを生成することとによって行われる、請求項9に記載のコンピュータ可読媒体。 - 前記特定のジョブを分析することは、ヒューリスティック分析を使用して完了される、請求項9または請求項10に記載のコンピュータ可読媒体。
- 各特定のジョブの分析の深さは、コンパイル時間に先立ってユーザ入力に基づいて選択される、請求項9、請求項10、または請求項11に記載のコンピュータ可読媒体。
- 前記複数の異なるタイプの処理コアは、第1のタイプのコアと第2のタイプのコアとを含む、請求項9から請求項12のいずれかに記載のコンピュータ可読媒体。
- 前記第1のコアタイプはコアプロセッサであり、前記第2のコアタイプはTPUタイルプロセッサである、請求項13に記載のコンピュータ可読媒体。
- 前記実行グラフは、少なくとも4つの層に配置されたサブグラフを含む階層的な性質を有し、前記少なくとも4つの層は、
前記第2のコアタイプで実行される実行可能ファイルを含むTPU層、
前記TPU層の1つまたは複数のサブグラフと、前記第1のコアタイプで実行される実行可能ファイルとを含むチップレベル層、
2つ以上のチップレベルのサブグラフを含むマルチチップ層、および
マルチチップ層サブグラフと、第3のタイプのコアで実行されるように構成された1つまたは複数のサブグラフとを含むホストレベル層を含む、請求項13または請求項14に記載のコンピュータ可読媒体。 - 前記第3のタイプのコアは、ホスト装置のCPUである、請求項15に記載のコンピュータ可読媒体。
- システムであって、
1つまたは複数のコンピュータと、
前記1つまたは複数のコンピュータに結合され、命令が記憶されたコンピュータ可読記憶装置とを備え、前記命令は、前記1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータにマルチコアコンピューティング装置のアレイにおいて実行可能なジョブを分散させるための演算を実行させ、前記演算は、
前記マルチコアコンピューティング装置のアレイにおいて実行される複数のジョブを受信することを含み、各マルチコアコンピューティング装置は複数の異なるタイプの処理コアを含み、
前記演算は、
前記複数のジョブの各特定のジョブを、前記複数の異なるタイプの処理コアのうちの1つによって実行されるように割り当てることをさらに含み、前記割り当てることは、
前記特定のジョブを分析して、前記複数の異なるタイプの処理コアのうちどれが前記特定のジョブの実行に適しているかを決定することと、
前記分析に基づいて前記特定のジョブをコアタイプに割り当てることとによって行われ、
前記演算は、
前記複数のジョブの各ジョブを個別に実行可能なファイルにコンパイルすることと、
前記複数の異なるタイプの処理コアのうちの特定のものへの前記個別に実行可能なファイルのマッピングを表す実行グラフを生成することとをさらに含み、前記実行グラフは個別に実行可能なファイル間の依存関係を識別する、システム。 - 前記演算は、
以下により前記個別に実行可能なファイルを実行することをさらに含み、以下とは、
前記実行グラフを受信することと、
前記実行グラフ内のジョブを、マルチコアコンピューティング装置の前記アレイ内の複数のマルチコアコンピューティング装置に割り当てることと、
各マルチコアコンピューティング装置によって、割り当てられた前記ジョブを実行することと、
各マルチコアコンピューティング装置によって、実行された前記ジョブの出力を共有メモリにリターンすることと、
リターンされた前記出力を組み合わせて、実行グラフのリターンを生成することと、である、請求項17に記載のシステム。 - 前記特定のジョブを分析することは、ヒューリスティック分析を使用して完了される、請求項17または請求項18に記載のシステム。
- 各特定のジョブの分析の深さは、コンパイル時間に先立ってユーザ入力に基づいて選択される、請求項17、請求項18、または請求項19に記載のシステム。
- 第1のコアタイプの処理コアを含むハードウェアと組み合わせて、マルチコアコンピューティング装置のアレイにおいて実行するために実行可能なジョブをコンパイルするための方法であって、前記マルチコアコンピューティング装置のアレイの各マルチコアコンピューティング装置は、第2のコアタイプおよび第3のコアタイプの処理コアを含み、前記方法は、
推論に使用される機械学習モデルを受信することと、
前記機械学習モデルを解析して、実行される複数のジョブを決定することと、
実行される前記複数のジョブの各々と、実行される前記複数のジョブ間の依存関係とを表す実行グラフを生成することと、
マルチチップレベルコンパイラを呼び出して、マッピングされた実行グラフを生成することとを含み、前記マルチチップレベルコンパイラは、
前記第1のコアタイプによって実行される前記複数のジョブのうちの1つまたは複数の第1のジョブを識別し、
前記1つまたは複数の第1のジョブを、前記第1のコアタイプによって実行される実行可能ファイルにコンパイルし、前記第1のジョブは、前記アレイ内の前記マルチコアコンピューティング装置と互換性がなく、
前記マルチチップレベルコンパイラはさらに、
前記実行グラフの残りのジョブを複数の第1のサブグラフに分割し、
各第1のサブグラフを前記マルチコアコンピューティング装置の前記アレイの特定のマルチコアコンピューティング装置に割り当て、
第1のサブグラフごとに、単一チップレベルのコンパイラを呼び出し、前記単一チップレベルのコンパイラは、
前記第2のコアタイプによって実行される1つまたは複数のチップレベルのジョブを前記第1のサブグラフから識別し、
前記第1のサブグラフからの前記1つまたは複数のチップレベルのジョブの各々を、前記第2のコアタイプによって実行される実行可能ファイルにコンパイルし、
前記第1のサブグラフの残りのジョブを複数の第2のサブグラフに分割し、
前記複数の第2のサブグラフの各々を前記第3のコアタイプに割り当て、
前記複数の第2のサブグラフの各々に対して、コアレベルコンパイラを呼び出し、前記コアレベルコンパイラは、
前記第2のサブグラフの各々を、前記第3のコアタイプによって実行される実行可能ファイルにコンパイルする、方法。 - 前記第1のコアタイプはホストシステムCPUであり、前記第2のコアタイプはコアプロセッサであり、前記第3のコアタイプはTPUタイルコアである、請求項21に記載の方法。
- 前記マルチコアコンピューティング装置のアレイの各マルチコアコンピューティング装置は、TPUを含む特定用途向け集積回路(ASIC)である、請求項21または請求項22に記載の方法。
- 1つまたは複数の第1のジョブを識別すること、および1つまたは複数のチップレベルのジョブを識別することは、実行される前記複数のジョブのヒューリスティック分析に基づいて行われる、請求項21、請求項22、または請求項23に記載の方法。
- 各特定のジョブのヒューリスティック分析の深さは、コンパイル時間に先立ってユーザ入力に基づいて選択される、請求項24に記載の方法。
- 前記マルチコアコンピューティング装置のアレイによって、前記第1のジョブを含む前記マッピングされた実行グラフと、前記1つまたは複数のチップレベルのジョブおよび前記複数の第2のサブグラフを含む前記複数の第1のサブグラフとを受信することと、
前記複数の第2のサブグラフ内の前記第1のジョブ、チップレベルのジョブ、および残りのジョブを、前記マルチコアコンピューティング装置のアレイ内の関連するコアに割り当てることと、
各コアのマルチコアコンピューティング装置によって、割り当てられた前記ジョブを実行することと、
各マルチコアコンピューティング装置によって、実行された前記ジョブの出力を共有メモリにリターンすることと、
リターンされた前記出力を組み合わせて、実行グラフのリターンを生成することとを含む、請求項21から請求項25のいずれか一項に記載の方法。 - 1つまたは複数のプロセッサに結合され、命令が記憶されている非一時的なコンピュータ可読記憶媒体であって、前記命令は、前記1つまたは複数のプロセッサによって実行されると、第1のコアタイプの処理コアを含むハードウェアと組み合わせて、マルチコアコンピューティング装置のアレイにおいて実行するために実行可能なジョブをコンパイルするための演算を前記1つまたは複数のプロセッサに実行させ、前記マルチコアコンピューティング装置のアレイの各マルチコアコンピューティング装置は、第2のコアタイプおよび第3のコアタイプの処理コアを含み、前記演算は、
推論に使用される機械学習モデルを受信することと、
前記機械学習モデルを解析して、実行される複数のジョブを決定することと、
実行される前記複数のジョブの各々と、実行される前記複数のジョブ間の依存関係とを表す実行グラフを生成することと、
マルチチップレベルコンパイラを呼び出して、マッピングされた実行グラフを生成することとを含み、前記マルチチップレベルコンパイラは、
前記第1のコアタイプによって実行される前記複数のジョブのうちの1つまたは複数の第1のジョブを識別し、
前記1つまたは複数の第1のジョブを、前記第1のコアタイプによって実行される実行可能ファイルにコンパイルし、前記第1のジョブは、前記アレイ内の前記マルチコアコンピューティング装置と互換性がなく、
前記マルチチップレベルコンパイラはさらに、
前記実行グラフの残りのジョブを複数の第1のサブグラフに分割し、
各第1のサブグラフを前記マルチコアコンピューティング装置の前記アレイの特定のマルチコアコンピューティング装置に割り当て、
第1のサブグラフごとに、単一チップレベルのコンパイラを呼び出し、前記単一チップレベルのコンパイラは、
前記第2のコアタイプによって実行される1つまたは複数のチップレベルのジョブを前記第1のサブグラフから識別し、
前記第1のサブグラフからの前記1つまたは複数のチップレベルのジョブの各々を、前記第2のコアタイプによって実行される実行可能ファイルにコンパイルし、
前記第1のサブグラフの残りのジョブを複数の第2のサブグラフに分割し、
前記複数の第2のサブグラフの各々を前記第3のコアタイプに割り当て、
前記複数の第2のサブグラフの各々に対して、コアレベルコンパイラを呼び出し、前記コアレベルコンパイラは、
前記第2のサブグラフの各々を、前記第3のコアタイプによって実行される実行可能ファイルにコンパイルする、非一時的なコンピュータ可読記憶媒体。 - 前記第1のコアタイプはホストシステムCPUであり、前記第2のコアタイプはコアプロセッサであり、前記第3のコアタイプはTPUタイルコアである、請求項27に記載のコンピュータ可読媒体。
- 前記マルチコアコンピューティング装置のアレイの各マルチコアコンピューティング装置は、TPUを含む特定用途向け集積回路(ASIC)である、請求項27または請求項28に記載のコンピュータ可読媒体。
- 1つまたは複数の第1のジョブを識別すること、および1つまたは複数のチップレベルのジョブを識別することは、実行される前記複数のジョブのヒューリスティック分析に基づいて行われる、請求項27、請求項28、または請求項29に記載のコンピュータ可読媒体。
- 各特定のジョブのヒューリスティック分析の深さは、コンパイル時間に先立ってユーザ入力に基づいて選択される、請求項30に記載のコンピュータ可読媒体。
- 前記演算は、
前記マルチコアコンピューティング装置のアレイによって、前記第1のジョブを含む前記マッピングされた実行グラフと、前記1つまたは複数のチップレベルのジョブおよび前記複数の第2のサブグラフを含む前記複数の第1のサブグラフとを受信することと、
前記複数の第2のサブグラフ内の前記第1のジョブ、チップレベルのジョブ、および残りのジョブを、前記マルチコアコンピューティング装置のアレイ内の関連するコアに割り当てることと、
各コアのマルチコアコンピューティング装置によって、割り当てられた前記ジョブを実行することと、
各マルチコアコンピューティング装置によって、実行された前記ジョブの出力を共有メモリにリターンすることと、
リターンされた前記出力を組み合わせて、実行グラフのリターンを生成することとを含む、請求項27から請求項31のいずれか一項に記載のコンピュータ可読媒体。 - システムであって、
1つまたは複数のコンピュータと、
前記1つまたは複数のコンピュータに結合され、命令が記憶されたコンピュータ可読記憶装置とを備え、前記命令は、前記1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに、第1のコアタイプの処理コアを含むハードウェアと組み合わせて、マルチコアコンピューティング装置のアレイにおいて実行するための実行可能なジョブをコンパイルするための演算を実行させ、前記マルチコアコンピューティング装置のアレイの各マルチコアコンピューティング装置は、第2のコアタイプおよび第3のコアタイプの処理コアを含み、前記演算は、
推論に使用される機械学習モデルを受信することと、
前記機械学習モデルを解析して、実行される複数のジョブを決定することと、
実行される前記複数のジョブの各々と、実行される前記複数のジョブ間の依存関係とを表す実行グラフを生成することと、
マルチチップレベルコンパイラを呼び出して、マッピングされた実行グラフを生成することとを含み、前記マルチチップレベルコンパイラは、
前記第1のコアタイプによって実行される前記複数のジョブのうちの1つまたは複数の第1のジョブを識別し、
前記1つまたは複数の第1のジョブを、前記第1のコアタイプによって実行される実行可能ファイルにコンパイルし、前記第1のジョブは、前記アレイ内の前記マルチコアコンピューティング装置と互換性がなく、
前記マルチチップレベルコンパイラはさらに、
前記実行グラフの残りのジョブを複数の第1のサブグラフに分割し、
各第1のサブグラフを前記マルチコアコンピューティング装置の前記アレイの特定のマルチコアコンピューティング装置に割り当て、
第1のサブグラフごとに、単一チップレベルのコンパイラを呼び出し、前記単一チップレベルのコンパイラは、
前記第2のコアタイプによって実行される1つまたは複数のチップレベルのジョブを前記第1のサブグラフから識別し、
前記第1のサブグラフからの前記1つまたは複数のチップレベルのジョブの各々を、前記第2のコアタイプによって実行される実行可能ファイルにコンパイルし、
前記第1のサブグラフの残りのジョブを複数の第2のサブグラフに分割し、
前記複数の第2のサブグラフの各々を前記第3のコアタイプに割り当て、
前記複数の第2のサブグラフの各々に対して、コアレベルコンパイラを呼び出し、前記コアレベルコンパイラは、
前記第2のサブグラフの各々を、前記第3のコアタイプによって実行される実行可能ファイルにコンパイルする、システム。 - 前記第1のコアタイプはホストシステムCPUであり、前記第2のコアタイプはコアプロセッサであり、前記第3のコアタイプはTPUタイルコアである、請求項33に記載のシステム。
- 前記マルチコアコンピューティング装置のアレイの各マルチコアコンピューティング装置は、TPUを含む特定用途向け集積回路(ASIC)である、請求項33または請求項34に記載のシステム。
- 1つまたは複数の第1のジョブを識別すること、および1つまたは複数のチップレベルのジョブを識別することは、実行される前記複数のジョブのヒューリスティック分析に基づいて行われる、請求項33、請求項34、または請求項35に記載のシステム。
- 各特定のジョブのヒューリスティック分析の深さは、コンパイル時間に先立ってユーザ入力に基づいて選択される、請求項36に記載のシステム。
- 前記演算は、
前記マルチコアコンピューティング装置のアレイによって、前記第1のジョブを含む前記マッピングされた実行グラフと、前記1つまたは複数のチップレベルのジョブおよび前記複数の第2のサブグラフを含む前記複数の第1のサブグラフとを受信することと、
前記複数の第2のサブグラフ内の前記第1のジョブ、チップレベルのジョブ、および残りのジョブを、前記マルチコアコンピューティング装置のアレイ内の関連するコアに割り当てることと、
各コアのマルチコアコンピューティング装置によって、割り当てられた前記ジョブを実行することと、
各マルチコアコンピューティング装置によって、実行された前記ジョブの出力を共有メモリにリターンすることと、
リターンされた前記出力を組み合わせて、実行グラフのリターンを生成することとを含む、請求項27から請求項37のいずれか一項に記載のシステム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2021/036418 WO2022260656A1 (en) | 2021-06-08 | 2021-06-08 | Hierarchical compiling and execution in a machine learning hardware accelerator |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2024520326A true JP2024520326A (ja) | 2024-05-24 |
JPWO2022260656A5 JPWO2022260656A5 (ja) | 2024-06-05 |
Family
ID=76731046
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023571345A Pending JP2024520326A (ja) | 2021-06-08 | 2021-06-08 | 機械学習ハードウェアアクセラレータでの階層的なコンパイルおよび実行 |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP4320513A1 (ja) |
JP (1) | JP2024520326A (ja) |
KR (1) | KR20230169285A (ja) |
CN (1) | CN117677929A (ja) |
WO (1) | WO2022260656A1 (ja) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10372493B2 (en) * | 2015-12-22 | 2019-08-06 | Intel Corporation | Thread and/or virtual machine scheduling for cores with diverse capabilities |
US20220043688A1 (en) * | 2018-09-11 | 2022-02-10 | Huawei Technologies Co., Ltd. | Heterogeneous Scheduling for Sequential Compute Dag |
US11003429B1 (en) * | 2019-02-04 | 2021-05-11 | Amazon Technologies, Inc. | Compile-time scheduling |
-
2021
- 2021-06-08 KR KR1020237038781A patent/KR20230169285A/ko unknown
- 2021-06-08 EP EP21736843.0A patent/EP4320513A1/en active Pending
- 2021-06-08 WO PCT/US2021/036418 patent/WO2022260656A1/en active Application Filing
- 2021-06-08 CN CN202180098206.0A patent/CN117677929A/zh active Pending
- 2021-06-08 JP JP2023571345A patent/JP2024520326A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
KR20230169285A (ko) | 2023-12-15 |
CN117677929A (zh) | 2024-03-08 |
WO2022260656A1 (en) | 2022-12-15 |
EP4320513A1 (en) | 2024-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11816480B2 (en) | Neural network compute tile | |
CN108475212B (zh) | 使用动态分区处理数据的方法、系统和计算机可读介质 | |
US20180225102A1 (en) | Method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system | |
CN113568599B (zh) | 用于处理计算作业的方法、电子设备和计算机程序产品 | |
CN113748399B (zh) | 在异构计算资源上调度计算图的方法、装置及可读介质 | |
US20220245453A1 (en) | Redistributing tensor elements between machine learning computing units | |
CN103197918B (zh) | 多通道时间片组 | |
US20230418677A1 (en) | Preemption in a machine learning hardware accelerator | |
CN108108242B (zh) | 基于大数据的存储层智能分发控制方法 | |
EP3108358B1 (en) | Execution engine for executing single assignment programs with affine dependencies | |
JP2024520326A (ja) | 機械学習ハードウェアアクセラレータでの階層的なコンパイルおよび実行 | |
CN117355819A (zh) | 一种计算模型的处理方法及装置 | |
US11989581B2 (en) | Software managed memory hierarchy | |
US11675572B2 (en) | Sharing data structures | |
US20240231819A1 (en) | Neural network compute tile | |
Genet et al. | Assembly operations for multicore architectures using task-based runtime systems | |
Kumar et al. | Performance Models for Data Transfers: A Case Study with Molecular Chemistry Kernels |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240528 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240528 |