JP2018533795A - 計算グラフのストリームベースのアクセラレータ処理 - Google Patents

計算グラフのストリームベースのアクセラレータ処理 Download PDF

Info

Publication number
JP2018533795A
JP2018533795A JP2018522024A JP2018522024A JP2018533795A JP 2018533795 A JP2018533795 A JP 2018533795A JP 2018522024 A JP2018522024 A JP 2018522024A JP 2018522024 A JP2018522024 A JP 2018522024A JP 2018533795 A JP2018533795 A JP 2018533795A
Authority
JP
Japan
Prior art keywords
node
subgraph
nodes
stream
memory
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.)
Granted
Application number
JP2018522024A
Other languages
English (en)
Other versions
JP6672456B2 (ja
Inventor
ポール・ロナルド・バーラム
ヴィジェイ・ヴァスデヴァン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2018533795A publication Critical patent/JP2018533795A/ja
Application granted granted Critical
Publication of JP6672456B2 publication Critical patent/JP6672456B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation 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/5038Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)

Abstract

方法、システム、および装置は、コンピュータ記憶媒体上に符号化されたコンピュータプログラムを備え、このプログラムは、計算グラフシステムによって、計算グラフを処理する要求を受け取るステップと、計算グラフの部分グラフを表すデータを取得するステップであって、計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードをそれぞれの第2のノードに接続し、部分グラフは計算グラフシステム内のプレーサによって第1のデバイスに割り当てられる、ステップと、第1のデバイスは複数のストリームを有するハードウェアアクセラレータを備えていると決定するステップと、決定に応答して、第1のデバイスによって実行されたときに第1のデバイスに、部分グラフ内の各ノードによって表されるオペレーションをそれぞれのストリームに割り当て、割り当てに従って部分グラフ内のノードによって表されるオペレーションを実行することを行わせる命令を生成するステップとを実行するためのプログラムである。

Description

本明細書は、部分グラフを、複数のストリームを有する、アクセラレータデバイス(accelerator device)、たとえば、グラフィカル処理ユニット(GPU)に割り当てることによってニューラルネットワークを表す計算グラフを処理すること、および/または、モデル入力を処理するためのそのような処理済み計算グラフの使用に関する。
ニューラルネットワークは、モデルの1つまたは複数の層を使用して、受け取った入力に対して出力、たとえば、1つまたは複数の分類を生成する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて1つまたは複数の隠れ層を備える。各隠れ層の出力は、ネットワーク内の次の層、すなわち、ネットワークの次の隠れ層または出力層への入力として使用される。ネットワークの各層は、層のパラメータのそれぞれの集合の現在値に従って受け取った入力から出力を生成する。
存在するシステムにおいて、計算グラフのオペレーションは、個別のデバイスによって処理され得る。いくつかの実装形態において、デバイスは、GPUである。デバイスは、オペレーションを実行する、たとえば、入力からある層において出力を生成し、メモリ内にオペレーションからの出力を記憶する、プロセッサを有し得る。計算グラフにおいて出力を生成するために一般的に必要なオペレーションの数およびサイズは大きいので、1つのデバイスでは、グラフのオペレーションを処理するのにかなり時間を要することがある。
一般に、本明細書では、ストリームベースのアクセラレータデバイス、たとえば、GPUを使用して計算グラフの部分グラフを処理するためのシステムまたは方法を説明する。
一般に、本明細書で説明されている主題の一革新的態様は、計算グラフを処理する要求を受け取るアクションと、計算グラフの部分グラフを表すデータを取得するアクションであって、計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力としてそれぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、部分グラフは計算グラフシステム内のプレーサによって第1のデバイスに割り当てられる、アクションと、第1のデバイスは複数のストリームを有するグラフィカル処理ユニットを備えると決定するアクションと、第1のデバイスが複数のストリームを有するグラフィカル処理ユニットを備えるとの決定に応答して、第1のデバイスによって実行されたときに第1のデバイスに、部分グラフ内の各ノードによって表されるオペレーションをグラフィカル処理ユニットの複数のストリーム内のそれぞれのストリームに割り当て、割り当てに従って部分グラフ内のノードによって表されるオペレーションを実行することを行わせる命令を生成するアクションと、命令およびデータを第1のデバイスに提供するアクションとを含む方法において具現化され得る。この態様の方法は、コンピュータ実装方法であってよい。この態様の方法は、1つまたは複数のコンピューティングデバイスによって、たとえば、計算グラフシステムを備える1つまたは複数のコンピューティングデバイスによって実行され得る。
実装形態は、以下の特徴のうちの1つまたは複数を含み得る。要求は、部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別することを指定し、これは第1のデバイスから1つまたは複数の特定の出力を受け取るステップと、1つまたは複数の特定の出力をクライアントに提供するステップとをさらに含む。これらの命令は、第1のデバイスに、1つまたは複数の特定の出力を第1のデバイスのメモリ内に記憶することをさらに行わせる。部分グラフに対するオペレーションは、ニューラルネットワークに対する部分的推論(partial inference)または訓練計算(training computation)を含む。部分グラフを分析して、連鎖構造内の部分グラフの中のノードのグループを識別するステップであって、これらの命令が、第1のデバイスに、ノードのグループを1つのストリームに割り当てることを行わせる、ステップ。割り当てるステップは、部分グラフを分析して、部分グラフ内の第1のノードが複数の有向エッジを出力として有することを識別するステップであって、命令が有向エッジの各々について、グラフィカル処理ユニットの一意的なストリームに有向エッジの終点であるノードを割り当てることを第1のデバイスに行わせる、ステップを含む。これらの命令は、第1のデバイスに、各ノードについて、ノードへの有向エッジに基づきノードによって表されるオペレーションによって消費されるグラフィカル処理ユニット内のメモリリソースのそれぞれの量を決定することを行わせ、割り当てるステップは、少なくともメモリリソースのそれぞれの量に基づく。これらの命令は、第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、特定のオペレーションが終了したとの決定に応答して、解放される特定のオペレーションによって消費されるメモリの第1の量を決定し、割り当てられていないノードのグループの各々について、割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定し、割り当てられていないノードのグループから、第1の量のメモリの使用を最大化する推定量のメモリを有する第1の割り当てられていないノードを決定し、第1の割り当てられていないノードによって表されるオペレーションを特定のストリームに割
り当てることを行わせる。
一実装形態において、方法は、モデル入力を受け取るステップと、ハードウェアアクセラレータによって、部分グラフ内のノードによって表されるオペレーションに従ってモデル入力を処理するステップとをさらに含む。
別の態様において、本明細書で説明されている主題は、第1の態様の方法によって取得される処理済み計算グラフに対応する機械学習モデルを提供するアクションと、機械学習モデルを使用してモデル入力を処理するアクションとを含み得る方法において具現化され得る。
別の態様において、本明細書で説明されている主題は、ハードウェアアクセラレータによって、第1の態様の方法によって取得される処理済み計算グラフの部分グラフを実行するアクションを含み得る方法において具現化され得る。
これらの態様において、計算グラフは、たとえば、ニューラルネットワークなどの機械学習モデルの表現であってよい。
別の革新的態様は、複数のストリームを有するグラフィカル処理ユニットによって、計算グラフの部分グラフを表すデータを受け取るアクションであって、計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力としてそれぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、部分グラフは計算グラフシステム内のプレーサによってグラフィカル処理ユニットに割り当てられる、アクションと、部分グラフ内の各ノードによって表されるオペレーションをグラフィカル処理ユニットの複数のストリーム内のそれぞれのストリームに割り当てるアクションと、割り当てに従って部分グラフ内のノードによって表されるオペレーションを実行するアクションとを含む。
実装形態は、以下の特徴のうちの1つまたは複数を含み得る。部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別する要求を受け取り、1つまたは複数の特定の出力をクライアントに提供するステップ。連鎖構造内の部分グラフの中のノードのグループを識別するデータを受け取り、ノードのグループを1つのストリームに割り当てるステップ。割り当てるステップは、複数の有向エッジを出力として有する部分グラフ内の第1のノードを識別するデータを受け取るステップと、有向エッジの各々について、グラフィカル処理ユニットの一意的なストリームに有向エッジの終点であるノードを割り当てるステップとを含む。各ノードについて、ノードへの有向エッジに基づきノードによって表されるオペレーションによって消費されるグラフィカル処理ユニット内のメモリリソースのそれぞれの量を決定するステップであって、割り当てるステップは、少なくともメモリリソースのそれぞれの量に基づく、ステップ。ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定するステップと、特定のオペレーションが終了したとの決定に応答して、解放される特定のオペレーションによって消費されるメモリの第1の量を決定するステップと、割り当てられていないノードのグループの各々について、割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定するステップと、割り当てられていないノードのグループから、第1の量のメモリの使用を最大化する推定量のメモリを有する第1の割り当てられていないノードを決定するステップと、第1の割り当てられていないノードによって表されるオペレーションを特定のストリームに割り当てるステップ。
これらおよび他の態様の他の実装形態は、対応するシステム、装置、および方法のアクションを実行するように構成され、コンピュータ記憶デバイス(非一時的記憶デバイスであってもなくてもよい)上に符号化されたコンピュータプログラムを含む。
本明細書において説明されている主題の特定の実施形態は、次の利点のうちの1つまたは複数を実現するように実装され得る。ニューラルネットワークのオペレーション、たとえば、入力から推論を生成するためのオペレーションは、ノードおよび有向エッジの計算グラフとして表され得る。システムは、この計算グラフ表現を処理してオペレーションを効率的に実行する。システムがこのような効率を達成するのは、計算グラフが複数のストリームを有しているからである。複数のストリームを使用することで、論理的に独立しているオペレーションの順序変更または実行を同時に行うことができるようになり得る。システムが、計算全体に対するエンドツーエンドの遅延を下げる目標を有しているときに、例示的なシステムは、論理的に独立したオペレーションの順序変更を行い得る。システムが、より高いスループットを達成する目標を有しているときに、例示的なシステムは、オペレーションを同時に実行し得る。計算グラフは、並列オペレーションに対して、従来の表現よりも容易に分割され得る。例として、計算グラフの部分グラフは、一意的なデバイスに割り当てられ、その各々がそれぞれの部分グラフ内でオペレーションを実行し、ニューラルネットワークのオペレーションを実行するのに必要な総時間を短縮することができる。
部分グラフが割り当てられるデバイスは、GPUであってよい。部分グラフは、部分グラフのオペレーションをより効率的に実行できるようにGPUの複数のストリームに分割され得る。本明細書の主題の1つまたは複数の実施形態の詳細は、添付図面および以下の説明で述べられる。主題の他の特徴、態様、および利点は、説明、図面、および請求項から明らかになるであろう。態様および実装形態は、組み合わせることができること、ならびに一態様または実装形態の文脈において説明されている特徴が、他の態様または実装形態の文脈において実装され得ることは理解されるであろう。
計算グラフとして表されるニューラルネットワークに対するオペレーションを分散させるための例示的な計算グラフシステムを示す図である。 GPUを使用して計算グラフの部分グラフを処理するための例示的なプロセスの流れ図である。 GPUによって処理されている計算グラフの例示的な部分グラフを示す図である。 ノードをストリームに割り当てるための例示的なプロセスの流れ図である。
様々な図面中の同様の参照番号および名称は同様の要素を示す。
本明細書では、一般に、分散方式で計算グラフによって表されるオペレーションを実行する計算グラフシステムを説明する。
計算グラフは、有向エッジによって接続されるノードを含む。計算グラフ内の各ノードは、オペレーションを表す。ノードに入ってくるエッジは、ノード内への入力の流れ、すなわち、ノードによって表されるオペレーションへの入力を表す。ノードから出て行くエッジは、別のノードによって表されるオペレーションへの入力として使用されるべきノードによって表されるオペレーションの出力の流れを表す。したがって、グラフ内の第1のノードをグラフ内の第2のノードに接続する有向エッジは、第1のノードによって表されるオペレーションによって生成される出力が第2のノードによって表されるオペレーションへの入力として使用されることを指示する。
一般的に、計算グラフ内で有向エッジに沿って流れる入力および出力は、テンソルである。テンソルは、数値または他の値、たとえば、文字列の多次元配列であり、配列の次元に対応する特定の次数を有する。たとえば、スカラー値は0次のテンソルであり、数値のベクトルは1次のテンソルであり、行列は2次のテンソルである。
いくつかの実装形態において、計算グラフにおいて表されるオペレーションは、ニューラルネットワークオペレーションまたは異なる種類の機械学習モデルに対するオペレーションである。ニューラルネットワークは、受け取った入力に対する出力を予測するために非線形ユニットの1つまたは複数の層を採用する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて1つまたは複数の隠れ層を備えるディープニューラルネットワークである。各隠れ層の出力は、ネットワーク内の別の層、すなわち、別の隠れ層、出力層、またはその両方への入力として使用される。ネットワークのいくつかの層は、パラメータのそれぞれの集合の現在値に従って受け取った入力から出力を生成するが、ネットワークの他の層は、パラメータを有しない場合がある。
たとえば、計算グラフによって表されるオペレーションは、ニューラルネットワークが推論を計算する、すなわち、ニューラルネットワークの層を通じて入力を処理し、入力に対するニューラルネットワーク出力を生成するために必要なオペレーションであってよい。別の例として、計算グラフによって表されるオペレーションは、ニューラルネットワーク訓練手順を実行して、ニューラルネットワークのパラメータの値を調整する、たとえば、パラメータの初期値からパラメータの訓練値を決定することによってニューラルネットワークを訓練するために必要なオペレーションであってよい。いくつかの場合において、たとえば、ニューラルネットワークの訓練時に、計算グラフによって表されるオペレーションは、ニューラルネットワークの複数の複製によって実行されるオペレーションを含むことができる。
例として、前の層から入力を受け取るニューラルネットワーク層は、パラメータ行列を使用して、パラメータ行列と入力との間の行列乗算を実行することができる。いくつかの場合において、この行列乗算は、計算グラフ内の複数のノードとして表され得る。たとえば、行列乗算は、複数の乗算と加算のオペレーションに分割されるものとしてよく、各オペレーションは、計算グラフ内の異なるノードによって表され得る。各ノードによって表されるオペレーションは、有向エッジ上で後続ノードに流れる、それぞれの出力を生成することができる。最終ノードによって表されるオペレーションが行列乗算の結果を生成した後、結果は、有向エッジ上で、別のノードに流れる。結果は、行列乗算を実行するニューラルネットワーク層の出力と同等である。
いくつかの他の場合において、行列乗算は、グラフ内の1つのノードとして表される。ノードによって表されるオペレーションは、入力として、第1の有向エッジ上で入力テンソルを、第2の有向エッジ上で重みテンソル、たとえば、パラメータ行列を受け取ることができる。いくつかの実装形態において、重みテンソルは、モデルの共有永続状態に関連付けられている。ノードは、入力と重みテンソルを処理して、たとえば、入力と重みテンソルとの行列乗算を実行して、第3の有向エッジ上で、出力テンソルを出力することができるが、これはニューラルネットワーク層の出力に相当する。
計算グラフ内のノードによって表され得る他のニューラルネットワークオペレーションは、他の数学的オペレーション、たとえば、減算、除算、および勾配計算、配列オペレーション、たとえば、concatenate、splice、split、またはrank、ならびにニューラルネットワークのビルディングブロックオペレーション、たとえば、SoftMax、Sigmoid、正規化線形ユニット(ReLU)、または畳み込みを含む。
ニューラルネットワークを計算グラフとして表すことで、特にニューラルネットワークに対するオペレーションが異なるハードウェアプロファイルを備える複数のデバイスにまたがって分散される場合に、ニューラルネットワークを効率的に実装するための柔軟できめ細かな方法が実現される。
図1は、計算グラフとして表されるニューラルネットワークに対するオペレーションを分散させるための例示的な計算グラフシステム100を示す図である。システム100は、1つまたは複数の場所にある1つまたは複数のコンピュータ上のコンピュータプログラムとして実装されるシステムの一例であり、以下で説明されるシステム、コンポーネント、および技術がそこで実装され得る。
クライアント102のユーザは、アクションがニューラルネットワークを表す計算グラフ上で実行されることを要求することができる。たとえば、クライアントは、グラフをセッションマネージャに登録するか、データ入力をグラフに送るか、またはグラフの出力のうちの1つまたは複数を評価することができる。クライアント102は、コンピュータ上で実行されるアプリケーションであってよい。
要求の一部として、クライアント102は、計算グラフを識別するデータをシステム100に提供し、計算グラフ上で実行されるべきアクションのタイプを指定する。
たとえば、要求は、特定のニューラルネットワークに対する推論を表す計算グラフを識別することができ、推論が実行されるべき入力を識別することができる。
別の例として、要求は、特定のニューラルネットワークに対する訓練手順を表す計算グラフを識別することができ、訓練が実行されるべき、訓練データなどの、入力を識別することができる。この例では、訓練手順を表す計算グラフを処理する要求を受け取ったときに、システム100は、たとえば、従来の逆伝播または他のニューラルネットワーク訓練技術を使用して、計算グラフの1つまたは複数のエッジに対するパラメータの修正された値を決定することができる。システム100は、修正されたパラメータをデバイスのメモリ内に記憶することができ、エグゼキュータ106は、システム100において、修正された重みのアドレスを取り出し、記憶することができる。修正された重みを必要とする推論、訓練、または他のオペレーションについてクライアント102からのさらなる要求があった後、システム100は、アドレスを使用して修正された重みにアクセスすることができる。
いくつかの場合において、要求は、要求に応答して伝送されるべき応答を指定するものとしてよい。たとえば、ニューラルネットワークの訓練要求について、クライアント102は、要求されたニューラルネットワークの訓練オペレーションが完了したことを示す指示、および適宜、ニューラルネットワークのパラメータの訓練値または訓練値がクライアント102によってアクセス可能であるメモリロケーションの指示を要求することができる。別の例として、ニューラルネットワークの推論要求に対して、クライアント102は、計算グラフの1つまたは複数の特定のノードに推論オペレーションを表す出力値を要求することができる。
システム100は、複数のデバイス116〜122間に計算グラフによって表されるオペレーションを分割することによって特定の出力を生成するオペレーションを実行する。システム100は、データ通信ネットワーク114、たとえば、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)上の複数のデバイス116〜122にオペレーションを分割する。デバイス116〜122は、オペレーションを実行し、該当する場合に、それぞれの出力または指示をシステム100に返し、システムは要求された出力または指示をクライアント102に返すことができる。
ニューラルネットワークオペレーションを実行するデバイス、たとえば、デバイス116〜122は、命令およびデータを記憶するためのメモリ、たとえば、ランダムアクセスメモリ(RAM)と、記憶されている命令を実行するためのプロセッサとを備えることができる。一般的に、各デバイスは、他のデバイスと無関係にオペレーションを実行するハードウェアリソースである。たとえば、各デバイスはそれ専用の処理ユニットを有することができる。デバイスは、グラフィカル処理ユニット(GPU)、中央演算処理装置(CPU)、または他のアクセラレータであってよい。例として、1つのマシンが、1つまたは複数のデバイス、たとえば、複数のCPUおよびGPUをホストすることができる。
各デバイスは、また、それぞれの計算能力を有することができる。すなわち、デバイスは、異なる量のメモリ、処理速度、または他のアーキテクチャ上の特性を有することができる。したがって、いくつかのデバイスは、他のデバイスではできないオペレーションを実行することができる。たとえば、いくつかのオペレーションは、特定のデバイスのみが有する特定の量のメモリを必要とするか、またはいくつかのデバイスは、特定のタイプのオペレーション、たとえば、推論オペレーションのみを実行するように構成される。
システム100内のセッションマネージャ104は、クライアント102から要求を受け取り、セッションを開始し、そのセッションの間、計算グラフのオペレーションが実行される。セッションマネージャ104は、計算グラフのオペレーションを実行することができるデバイスの集合、たとえば、デバイス116〜122を管理し、オペレーションを実行するために利用可能であるデバイスの集合とともにプレーサ108を提供することができる。
プレーサ108は、計算グラフで実行されるべき各オペレーションについて、オペレーションを実行するそれぞれのターゲットデバイス、たとえばデバイス116、およびいくつかの実装形態において、それぞれのターゲットデバイスがオペレーションを実行する時間を決定する。プレーサ108は、入力データのサイズが与えられた場合に各利用可能なデバイス上でオペレーションにかかる時間を知ることによって最適なデバイス割り当てを実行する。プレーサ108は、測定または予測性能モデルを使用して処理時間の推定を取得する。いくつかのオペレーションは、並列で実行され得るが、他のオペレーションは、計算グラフにおいて完了されるべき事前オペレーションを必要とする、たとえば、他のオペレーションは、入力として、事前オペレーションの出力を処理する。
デバイスがプレーサ108によって割り振られたオペレーションを実行して出力を生成した後、エグゼキュータ106は、出力を取り出すことができる。エグゼキュータ106は、要求への適切な応答、たとえば、処理が完了したことを示す出力または指示を生成することができる。次いで、エグゼキュータ106は、その応答をクライアント102に返すことができる。図1は1つのエグゼキュータ106を示しているが、一実装形態では、デバイス毎に1つのエグゼキュータがある。このエグゼキュータは、デバイスにオペレーションを、オペレーションが実行可能になった(すなわち、入力のすべてが完了した)ときに発行する。この実装形態は、また、プレーサ108を呼び出すことによってグラフを複数のデバイス上で実行するように分割し、必要なエグゼキュータを作成するグラフマネージャも有する。
セッションマネージャ104は、また、計算グラフで実行されるべきオペレーションの集合をエグゼキュータ106に提供する。エグゼキュータ106は、オペレーションのグラフ実行に関係するデバイス116〜122から実行時統計量を定期的に取り出す。エグゼキュータ106は、実行時統計量をプレーサ108に提供し、これはさらなるオペレーションの配置およびスケジューリングを再最適化することができる。
図2は、GPUを使用して計算グラフの部分グラフを処理するための例示的なプロセス200の流れ図である。便宜上、プロセス200は、1つまたは複数の場所に配置されている1つまたは複数のコンピュータのシステムによって実行されるものとして説明される。たとえば、計算グラフシステム、たとえば、図1の計算グラフシステム100は、適切にプログラムされていれば、プロセス200を実行することができる。
システムは、クライアントから、計算グラフを処理する要求を受け取る(ステップ202)。たとえば、この要求は、指定された入力上で計算グラフによって表されるニューラルネットワーク推論を実行する要求、訓練データの指定された集合上で計算グラフによって表されるニューラルネットワークの訓練オペレーションを実行する要求、または計算グラフによって表される他のニューラルネットワークオペレーションを実行する要求であってよく、これは図1を参照しつつ上で説明されているとおりである。
いくつかの場合において、計算グラフは、クライアントから要求とともに送られてくる。他の場合には、要求は、計算グラフを識別し、システムは、メモリから識別されたグラフを表すデータを取り出す。
システムは、計算グラフを複数の部分グラフに分割することができる。いくつかの実装形態において、部分グラフは、クライアントが要求を送ることによって指定され、システムは、指定に従って計算グラフを分割する。いくつかの他の実装形態において、システムは、各部分グラフが他の部分グラフと比較してオペレーションを実行するためのリソースの類似の量を必要とするように計算グラフを分割する。
システムは、各部分グラフを利用可能なデバイスに、たとえば、図1のプレーサ108を使用して割り当てることができる。
システムは、分割された計算グラフから計算グラフの特定の部分グラフを表すデータを取得する(ステップ204)。データは、システムのデータベースまたはメモリから取得され得る。例として、特定の部分グラフのオペレーションは、部分推論または訓練計算を表す。
システムは、部分グラフが割り当てられているデバイスが、複数のストリームを有するグラフィカル処理ユニットまたは他のハードウェアアクセラレータデバイスであると決定する(ステップ206)。例として、システムは、計算グラフに割り当てられるべきデバイスを管理するリソースマネージャからデバイスのタイプを要求することによってデバイスが複数のストリームを有するGPUであるかどうかを評価することができる。各ストリームは、オペレーションが順に処理される独立したハードウェアキューである。
システムは、デバイスによって実行されたときに、デバイスに特定のオペレーションを実行させる命令を生成する(ステップ208)。特に、命令は、部分グラフ内の各ノードによって表されるオペレーションをデバイスのそれぞれのストリームに割り当てることをデバイスに行わせる。
例示的なシステムは、いくつかのハードウェアアクセラレータの計算を特定の仕方でストリームに割り当てるものとしてよい(たとえば、1つのオペレーションがストリームA上で実行される場合に、後からの関係するオペレーションも、ストリームA上で実行されなければならない)。たとえば、第1のオペレーションが、ステートフルであり、ストリームA上で実行されてよい。実行によって、第1のオペレーションは、第2のオペレーションが実行する前に生じなければならない仕方でハードウェアの内部状態を変更し得る。次いで、第2のオペレーションは、第1のオペレーションが完了した後に、ストリームA上で実行されてよい。
いくつかの実装形態において、2つの内部ハードウェアリソースは、同時に使用できず、したがって、直列化される必要がある。
一般に、デバイスは、互いに依存しないオペレーションを異なるストリームに割り当てる。互いに依存しないオペレーションを異なるストリームに割り当てることによって、ハードウェアはオペレーションにどれだけの時間がかかるかを知る必要がなく、費用のかかるホスト介入なしですぐに実行できる状態にある第1のオペレーションを実行するために多数の利用可能なオペレーションから選択することができる。
命令は、また、割り当てに従って部分グラフ内のノードによって表されるオペレーションを実行することをデバイスに行わせる。オペレーションが特定のストリームに割り当てられたとき、これらのオペレーションはキューに入れられる。デバイスは、先入れ先出し(FIFO)方式でオペレーションを実行することができる。したがって、デバイスが1つのストリームのみを有している場合、デバイスに割り当てられているオペレーションは、直列に実行される。デバイスに複数のストリームがある場合、異なるストリーム内のオペレーションは、並列に実行され、互いに関して順序変更され得るが、所与のストリーム内のオペレーションは、直列に実行される。複数のストリームを使用してオペレーションを実行することで、部分グラフのオペレーションを実行する総時間が短縮される。これは、図3および図4を参照しつつ以下でさらに説明されている。
システムは、命令およびデータをデバイスに提供する(ステップ210)。いくつかの実装形態において、システムは、デバイスに、オペレーションを開始する要求を送る。デバイスは、その要求を受け取り、それに応答して、システムから受け取った命令を実行する。たとえば、デバイスは、モデル入力を受け取り、部分グラフ内のノードによって表されるオペレーションに従ってモデル入力を処理するものとしてよい。
図3は、アクセラレータ302によって処理されている計算グラフの例示的な部分グラフ316を示す図である。部分グラフ316は、ノード308〜314を有し、各々アクセラレータ302によって実行されるべきオペレーションを表す。計算グラフシステム、たとえば、図1のシステム100は、部分グラフ316をアクセラレータ302に割り当てた。
アクセラレータ302は、2つのストリーム304および306を有する。ストリームは、アクセラレータ302の利用を共有する。GPUでは、ストリームは対称的であってよい、すなわち、すべてのオペレーションは任意のストリーム上で実行できる。この対称性は、すべてのアクセラレータデバイスで利用可能ではない場合がある。たとえば、特定のアクセラレータデバイス上で、ホストとデバイスメモリとの間でデータをコピーするオペレーションを実行するためにいくつかのストリームが使用されなければならない。
計算グラフシステムは、部分グラフ316を分析して、部分グラフ316が複数のストリーム304および306にどのように割り当てられるかを決定することができる。いくつかの実装形態において、システムは、有向エッジが異なるストリームに接続する回数が最小になるように部分グラフ316のノードを割り当てることをアクセラレータ302に行わせる命令を生成する。ストリーム間の依存性を強制すると性能に関するコストが発生し得る。命令を順序付けることにはある程度のオーバーヘッドコストがかかる。すべての順序付け依存性は、デバイスに利用できる可能な実行順序付けの数を減らし、スケジューリングの柔軟性を低下させる。第1のストリームからの有向エッジが第2のストリームに接続する毎に、第2のストリームは、第1のストリームから第2のストリームへの有向エッジを有するオペレーションが処理を完了するのを待つ。待つことで、第2のストリームがアイドル状態のままになり得、これがGPUの非効率な利用を生じさせる。
いくつかの実装形態において、システムは、アクセラレータ302の特性に基づき部分グラフ316のノードを割り当てることをアクセラレータ302に行わせる命令を生成する。たとえば、アクセラレータ302は、固定された数のストリーム、すなわち、ストリーム304および306を有する。システムは、各ストリームがアクセラレータ302によって同様に利用されるようにノードを割り当てることができる。GPUであるアクセラレータについて、すべてのストリームは、単一の大きなスレッドプールを共有する。
いくつかのストリームは、他のストリームは実行しない特定のオペレーションも実行する。たとえば、ストリーム306は、ダイレクトメモリアクセス(DMA)オペレーションを実行することができるが、ストリーム304は実行しない。したがって、システムは、各ノードを分析して、ノードによって表されるオペレーションのタイプを決定することができ、システムは、ノードを、そのタイプのオペレーションを実行することができるストリームに割り当てることができる。GPUにおいて、主な輻輳リソースは、ホストとデバイスメモリとの間でデータをコピーするDMAエンジンである。DMAエンジンは、任意のストリームによって使用され得る。1つのストリームがDMAオペレーションを実行している場合、そのストリームは、同時に計算を実行することができない。したがって、例示的なシステムは、少なくとも1つの他のストリームが同時に実行すべき何らかの計算作業を有することを確実にする。システムは、識別すべき部分グラフを分析し、それにより、オペレーションを割り当てるステップを管理するソフトウェアモジュールまたはドライバに、次の2つの一般規則に従うことによってノードを割り当てることを行わせる命令を生成することができる。第1に、システムは連鎖構造で配置構成されているノードを同じストリームに割り当てようとする。連鎖構造のノードは、ノードからノードへ1つの有向エッジを辿ることによって互いに接続されているノードである。したがって、連鎖内のノードは、自オペレーションを計算する前に、連鎖内の前のノードにおけるオペレーションが計算を終了するのを待たなければならない。ノードの連鎖を割り当てるステップは、たとえば、共有されている入力変数または共通部分式から、グラフ内で分岐と合併が生じるので、常に可能であるとは限らない。
第2に、システムは、1つのノードから入力を各々受け取る複数のノードを一意的なストリームに割り当てることをアクセラレータ302に行わせる命令を生成することを選択することができる。すなわち、第1のノードが複数の異なるノードへの複数の出力を有する場合、システムは、異なるノードの各々を一意的なストリームに割り当てる。異なるノードの各々は、他の異なるノードのどれかへのデータ依存性を有せず、したがって、互いに素なストリームを操作するときに効率を改善する。
例として、アクセラレータ203は、部分グラフ316を受け取る。システムが受け取った命令は、初期ノード308を第1のストリーム306に割り当てることをアクセラレータ302に行わせる。初期ノード308は、2つの出力-ノード310への1つの有向エッジとノード314への1つの有向エッジ-を有する。したがって、第2の規則を使用すると、命令は、ノード310および314を異なるストリームに割り当てることをアクセラレータ302に行わせる。ノード312は、また、入力として、ノード310の出力を受け取るのみである。したがって、第1の規則を使用すると、システムは、ノード312をノード310と同じストリーム、すなわちストリーム304に割り当てる。
上で説明されているように、ストリームは、オペレーションが順に処理されるハードウェアキューである。したがって、アクセラレータ302がノードをストリームに割り当てる順序が問題となる。アクセラレータ302は、部分グラフ内のデータフローの方向の順序でノードをストリームに割り当てる。すなわち、アクセラレータ302は、部分グラフの1つまたは複数の初期ノードを識別し、1つまたは複数の初期ノードを割り当てる。次いで、アクセラレータ302は、1つまたは複数の初期ノードの出力である有向エッジを辿って後続ノードを識別し、アクセラレータ302は、後続ノードをそれぞれのストリームに割り当てる。アクセラレータ302は、部分グラフ内の各ノードが割り当てられるまでノードの割り当てを続ける。この順序でノードを割り当てた結果として、所与のストリーム内のオペレーションも、上で説明されているように、オペレーションが割り当てられた順序で実行される。オペレーションAの入力が異なるストリーム上で生成されるときに、オペレーションAが実行される前に入力がすべて計算されたことを確認することが必要である。オペレーションAが割り当てられるストリーム上の実行は、オペレーションAへの入力のすべてが計算されてしまうまでストール状態であるべきである。正確なストールメカニズムはデバイス特有のものである。GPUデバイスについては、入力ストリームの各々について1つのイベントが作成されるものとしてよく、イベントのシグナリングを行う命令が各ストリームに追加され得る。また、各入力について、オペレーションが実行のために関連するイベントが生じるのを待つためにAが割り当てられるストリームに命令が追加され得る。オペレーションAに対する入力のうちの1つまたは複数が、オペレーションAと同じストリーム上で計算される場合、データフロー依存性命令は安全に削除することができ、それより、性能を改善できる。所与のストリーム内で、所与のストリームに割り当てられている1つまたは複数の他のノードによって表されるオペレーションによって入力として使用される出力を生成する所与のストリームに割り当てられたノードによって表されるオペレーションは、アクセラレータ302が1つまたは複数の他のノードによって表されるオペレーションを実行するときにすでに計算されているか、または計算されるようにスケジュールされている。
上記の説明を続けると、ストリーム304は、ノード310を割り当てられ、次いで、ノード312を割り当てられるが、それは、データがノード310からノード312に流れるからである。ストリームにおいてオペレーションを実行するときに、アクセラレータ302は、最初に、ノード310によって表されるオペレーションを実行し、次いで、ノード312によって表されるオペレーションを実行する。
最終ノード、すなわち、ノード312および314がオペレーションを実行した後に、アクセラレータ302は、ノードの出力またはオペレーションが完了したという指示をシステムに返す。例示的なシステムには、アクセラレータ302のメモリからホストメモリ内に計算結果をコピーして戻す特別な「送る」ノードがあり、そこでは、受け取り側ノードによって異なるデバイスに手渡されるか、またはリモートプロシージャコール(RPC)応答でクライアントに返され得る。次いで、システムは、必要ならば、出力または指示をクライアントに返すことができる。
ノードをストリームに割り当てる別の実装形態は、図4を参照しつつ以下でさらに説明される。
図4は、部分グラフをデバイスに割り当てるための例示的なプロセス400の流れ図である。便宜上、プロセス400は、システム、たとえば、GPUによって実行されるものとして説明される。たとえば、GPUは、計算グラフシステム、たとえば、実行されたときに、プロセス400を実行することをGPUに行わせる図1の計算グラフシステム100によって生成された命令を受け取ることができる。
システムは、特定のノードをノードまたはすでに割り当てられているノードによって消費されるメモリリソースの量に基づきストリームに割り当てることができる。たとえば、システムは、部分グラフの各ノードへのおよび各ノードからの各有向エッジ上でテンソルの次元を計算することができる。テンソルの次元は、オペレーションを実行するためにデバイスによって消費されるメモリのサイズを示す。システムは、サイズを決定するためにテンソルのすべての次元を計算する必要があり得る。次いで、システムは、特定のサイズのメモリを消費するテンソルを有する特定のノードを特定のサイズのメモリを有するデバイスに割り当てることができる。
特に、デバイスがオペレーションを実行するときに、ソフトウェアドライバまたはエグゼキュータは、入力さらにはオペレーションの結果として計算された出力を記憶するためのメモリを割り振る。デバイス上のメモリの量は限られているので、デバイスは、メモリがもはや使用されなくなったときにメモリを解放する。
例として、システムは、ノードによって表されるオペレーションが特定のストリームにおいて終了しているかどうかを決定する(ステップ402)。たとえば、システムは、特定のストリームにおけるオペレーションが終了しているかどうかを決定するためにストリームを定期的にポーリングすることができる。ストリームは、ストリームにおいてオペレーションのリスト内を実行がどれだけ先まで進んだかをホストが決定することを可能にするアクションをサポートし得る。いくつかの実装形態において、イベント、またはマーカーは、実行がどれだけ先まで進んだかをシグナリングすることができる。イベントが発生したときに、イベントは、ストリームにおける特別なハードウェアオペレーションキューに追加され得る。ホストは、どのオペレーションが生じたかを決定するためにこのキューをポーリングすることができる。他のストリーム実装形態は、キューに入っているすべてのオペレーションがいつ完了するかをホストが決定することを可能にするだけであってよい。代替的に、またはそれに加えて、ハードウェアは、ストリームが特定の地点に到達したときに割り込みをかけるか、またはコールバックを発生することができる。
オペレーションが終了したときに、システムは、そのオペレーションへの入力に使用されているメモリが他のオペレーションで使用できるように解放され得ることを決定できる。システムは、出力が後続ノードで使用されることがあるので、オペレーションの出力に使用されているメモリを解放しない。
そこで、システムは、解放される消費されたメモリの量を決定する(ステップ404)。システムは、解放されるメモリのサイズを識別する要求をソフトウェアドライバまたはエグゼキュータに送ることができる。
いくつかの実装形態において、例示的なシステムは、任意の時点においてハードウェアアクセラレータのメモリ内にデータを直接転送するためにリモートマシンが使用することができるリモートダイレクトメモリアクセス(RDMA)ネットワークインターフェースを使用することを可能にする。このメモリは、システム上で実行されている他のオペレーションによって使用中であってはならない。例示的なシステムは、各ストリーム上のオペレーションがどれだけ先まで進んだかを正確に知る必要はあり得ない。しかしながら、システムは、ストリームによって使用中でないことが知られているメモリを追跡すべきである。この空きメモリは、次いで、RDMAに使用され得る。
システムは、割り当てられていないノードのグループの各々について、割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定する(ステップ406)。割り当てられていないノードは、オペレーションが完了しているノードから入力を受け取るノードを含み得る。割り当てられていないノードは、オペレーションが完了しているノードから独立しているが、アクセラレータによってまだ処理される必要がある、ノードも含み得る。メモリの推定量は、上で説明されているように、割り当てられていないノードへのそれぞれのテンソルの次元を評価することによって決定され得る。
システムは、割り当てられていないノードのグループから、アクセラレータによってストリーム上で実行されたときに、解放されるメモリの量の使用量を最大にするオペレーションを表す第1の割り当てられていないノードを決定する(ステップ408)。割り当てられていないノードによって表されるオペレーションが、実行するために、解放されるメモリの量よりも多くのメモリを必要とする場合に、割り当てられていないノードは、ストリームに割り当てられない。第1および第2のオペレーションが、解放されるメモリの量以下であるそれぞれの推定量のメモリを必要とする場合、システムは、解放されるメモリの量の使用量を最大にするオペレーションを選択する。言い替えれば、この場合、システムは、選択されたオペレーションを表すノードを第1の割り当てられていないノードとして決定する。例示的なシステムは、オペレーションの一時的作業空間および出力を保持するためにアクセラレータメモリのどの領域が使用されるかを決定することができるようになるまでストリーム上のオペレーションをキューに入れない。メモリが十分にない場合、例示的なシステムは、実行するのにメモリが少なくて済むオペレーションをキューに入れること、または割り振りを解除することを可能にする大きい入力テンソルを消費するオペレーションを優先的にキューに入れることを選択することができる。
システムは、第1の割り当てられていないノードによって表されるオペレーションを特定のストリームに割り当てる(ステップ410)。システムは、次いで、特定のストリームに、オペレーションを実行させることができ、システムは、図2〜図3を参照しつつ上で説明されているように動作を続けることができる。
主題および本明細書で説明されている機能するオペレーションの実施形態は、本明細書で開示されている構造およびその構造的等価物を含む、デジタル電子回路で、明白に具現化されたコンピュータソフトウェアもしくはファームウェアで、コンピュータハードウェアで、またはこれらのうちの1つもしくは複数のものの組合せで実装することができる。本明細書で説明されている主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置による実行のため、またはデータ処理装置のオペレーションを制御するために有形な不揮発性プログラム担体上に符号化されたコンピュータプログラム命令からなる1つまたは複数のモジュールとして実装され得る。代替的に、またはそれに加えて、プログラム命令は、データ処理装置による実行のため好適な受信機装置に送信する情報が符号化されるように生成される、人工的に生成された伝搬信号、たとえば、機械で生成された電気、光、または電磁信号上で符号化され得る。コンピュータ記憶媒体は、マシン可読記憶装置デバイス、マシン可読記憶装置基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つもしくは複数の組合せであってよい。しかしながら、コンピュータ記憶媒体は、伝搬信号ではない。
「データ処理装置」という用語は、たとえばプログラム可能プロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを備える、データを処理するためのすべての種類の装置、デバイス、およびマシンを包含する。装置は、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)、またはASIC(特定用途向け集積回路)を含んでいてもよい。装置は、ハードウェアに加えて、注目しているコンピュータプログラム用の実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはこれらのうちの1つもしくは複数のものの組合せを構成するコードを含むこともできる。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードとも称されるか、または記述され得る)は、コンパイル言語またはインタプリタ言語または宣言型言語または手続き型言語を含む、任意の形態のプログラミング言語で書かれるものとしてよく、スタンドアロンプログラム、またはモジュール、構成要素、サブルーチン、またはコンピューティング環境において使用するのに適している他のユニットを含む、任意の形態で配備され得る。コンピュータプログラムは、ファイルシステム内のファイルに対応し得るが、そうである必要はない。プログラムは、他のプログラムまたはデータ、たとえば、マークアップ言語ドキュメントに記憶される1つまたは複数のスクリプトを保持するファイルの一部に、注目しているプログラム専用の単一ファイルに、または複数の協調ファイル、たとえば、1つもしくは複数のモジュール、副プログラム、もしくはコードの一部分を記憶するファイルに記憶され得る。コンピュータプログラムは、1つのコンピュータ上で、または1つのサイトに配置されるか、もしくは複数のサイトにまたがって分散され、通信ネットワークによって相互接続されている複数のコンピュータ上で実行されるように配備され得る。
本明細書で使用されているように、「エンジン」、または「ソフトウェアエンジン」は、入力と異なる出力をもたらすソフトウェア実装入力/出力システムを指す。エンジンは、ライブラリ、プラットフォーム、ソフトウェア開発キット(「SDK」)、またはオブジェクトなどの、機能の符号化されたブロックであってよい。各エンジンは、1つまたは複数のプロセッサおよびコンピュータ可読媒体を含む、適切なタイプのコンピューティングデバイス、たとえば、サーバ、携帯電話、タブレットコンピュータ、ノートブックコンピュータ、音楽プレーヤー、電子書籍リーダー、ラップトップもしくはデスクトップコンピュータ、PDA、スマートフォン、または他の固定もしくはポータブルデバイス上に実装され得る。それに加えて、これらのエンジンのうちの2つまたはそれ以上は、同じコンピューティングデバイス上に、または異なるコンピューティングデバイス上に実装されてよい。
本明細書で説明されているプロセスおよび論理の流れは、入力データを操作し、出力を生成することによって機能を実行するように1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラム可能なコンピュータによって実行され得る。これらのプロセスおよび論理の流れは、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)、またはASIC(特定用途向け集積回路)によっても実行され得、また装置は、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)、またはASIC(特定用途向け集積回路)としても実装され得る。
コンピュータプログラムの実行に適しているコンピュータは、汎用マイクロプロセッサ、専用マイクロプロセッサ、もしくはその両方、または任意の他の種類の中央演算処理装置を備える、たとえば、それらに基づくものとしてよい。一般に、中央演算処理装置は、リードオンリーメモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受け取る。コンピュータの不可欠な要素は、命令を遂行または実行するための中央演算処理装置ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスである。一般に、コンピュータは、データを格納するための1つまたは複数の大容量記憶装置デバイス、たとえば、磁気ディスク、磁気光ディスク、または光ディスクも備え、これらからデータを受け取るか、またはこれらにデータを転送するか、またはその両方を行うように動作可能なように結合される。しかしながら、コンピュータは、そのようなデバイスを有している必要はない。さらに、コンピュータは、別のデバイス、たとえば、2、3例を挙げると、携帯電話、携帯情報端末(PDA)、携帯オーディオもしくはビデオプレーヤー、ゲーム機、全地球測位システム(GPS)受信機、またはポータブルストレージデバイス、たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブに埋め込まれ得る。
コンピュータプログラムの命令およびデータを格納するのに適したコンピュータ可読媒体は、たとえば、半導体メモリデバイス、たとえば、EPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、たとえば、内蔵ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにCD-ROMおよびDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリ、媒体、およびメモリデバイスを含む。プロセッサおよびメモリは、専用論理回路によって補助されるか、または専用論理回路に組み込まれ得る。
ユーザとインタラクティブにやり取りするために、本明細書で説明されている主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、たとえば、CRT(陰極線管)モニタ、LCD(液晶ディスプレイ)モニタ、またはOLEDディスプレイ、さらには入力をコンピュータに送るための入力デバイス、たとえば、キーボード、マウス、または感圧ディスプレイもしくは他の表面を有するコンピュータ上に実装され得る。他の種類のデバイスも、ユーザと情報をやり取りするために使用されてよく、たとえば、ユーザに返されるフィードバックは、任意の形態の感覚フィードバック、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックであってよく、ユーザからの入力は、音響、話し声、または触覚入力を含む、任意の形態において受け取られ得る。それに加えて、コンピュータは、リソースをユーザによって使用されるデバイスに送り、そのデバイスからリソースを受け取ることによって、たとえば、ウェブブラウザから受け取った要求に応答して、ウェブページをユーザのクライアントデバイス上のウェブブラウザに送信することによって、ユーザとやり取りすることができる。
本明細書で説明されている発明対象の実施形態は、バックエンド構成要素を、たとえば、データサーバとして備えるか、もしくはミドルウェア構成要素、たとえば、アプリケーションサーバを備えるか、もしくはフロントエンド構成要素、たとえば、ユーザが本明細書で説明されている発明対象の実装をインタラクティブに操作するために使用することができるグラフィカルユーザインターフェースもしくはウェブブラウザを有するクライアントコンピュータを備えるコンピューティングシステムで、または1つもしくは複数のそのようなバックエンド、ミドルウェア、もしくはフロントエンド構成要素の任意の組合せで実装され得る。システムのコンポーネントは、デジタルデータ通信の任意の形態または媒体、たとえば、通信ネットワーク、によって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、たとえば、インターネットを含む。
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントおよびサーバは、一般に、互いに隔てられており、典型的には、通信ネットワークを通じてインタラクティブな操作を行う。クライアントとサーバとの関係は、コンピュータプログラムが各コンピュータ上で実行され、互いとの間にクライアント-サーバ関係を有することによって発生する。
本明細書は、多くの実装固有の詳細事項を含んでいるが、これらは、発明の範囲または請求内容の範囲に対する制限として解釈すべきではなく、むしろ特定の発明の特定の実施形態に特有のものであると思われる特徴の説明として解釈すべきである。別の実施形態の文脈において本明細書で説明されているいくつかの特徴も、単一の実施形態において組合せで実装され得る。逆に、単一の実施形態の文脈において説明されている様々な特徴は、複数の実施形態で別々に、または好適な部分的組合せで、実装されることもあり得る。さらに、特徴は、いくつかの組合せで働くものとして上記で説明され、初めにそのように請求されることさえあるが、請求される組合せからの1つまたは複数の特徴は、場合によってはその組合せから削除され得、請求される組合せは、部分組合せ、または部分組合せの変形形態を対象とし得る。
同様に、動作は特定の順序で図面に示されているが、そのような動作は、望ましい結果を達成するために、示される特定の順序でもしくは順番に実行される必要がないことを、またはすべての図示の動作が実行される必要があるとは限らないことを、理解されたい。ある状況では、マルチタスキングおよび並列処理が有利である場合がある。さらに、上で説明されている実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離が必要とされるものと理解されるべきではなく、前述のプログラム構成要素およびシステムが概して単一のソフトウェアプロダクトとして一体化されるかまたは複数のソフトウェアプロダクトとしてパッケージ化されてもよいことを理解されたい。
発明対象の特定の実施形態が説明されている。他の実施形態は、下記の請求項の範囲内に収まる。たとえば、請求項に記載のアクションは、異なる順序で実行することができ、それでも、所望の結果が得られる。一例として、添付図面に示されているプロセスは、必ずしも、望ましい結果を達成するために、図示されている特定の順序、または順番を必要としない。いくつかの実装形態では、マルチタスキングおよび並列処理が有利である場合がある。
100 計算グラフシステム
102 クライアント
104 セッションマネージャ
106 エグゼキュータ
108 プレーサ
114 データ通信ネットワーク
116〜122 デバイス
200 プロセス
203 アクセラレータ
302 アクセラレータ
304、306 ストリーム
308〜314 ノード
316 部分グラフ
400 プロセス

Claims (41)

  1. 計算グラフを処理する要求を受け取るステップと、
    前記計算グラフの部分グラフを表すデータを取得するステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは第1のデバイスに割り当てられる、ステップと、
    前記第1のデバイスは複数のストリームを有するハードウェアアクセラレータを備えていると決定するステップと、
    前記第1のデバイスが複数のストリームを有するハードウェアアクセラレータを備えているとの決定に応答して、前記第1のデバイスによって実行されたときに前記第1のデバイスに、
    前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当て、
    前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行すること
    を行わせる命令を生成するステップと、
    前記命令および前記データを前記第1のデバイスに提供するステップと
    を含む、コンピュータ実装方法。
  2. 前記要求は、前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別することを指定し、
    前記第1のデバイスから、前記1つまたは複数の特定の出力を受け取るステップと、
    前記1つまたは複数の特定の出力をクライアントに提供するステップと
    をさらに含む、請求項1に記載の方法。
  3. 前記命令は、前記第1のデバイスに、前記1つまたは複数の特定の出力を前記第1のデバイスのメモリ内に記憶することをさらに行わせる、請求項1または2に記載の方法。
  4. 前記部分グラフに対する前記オペレーションは、ニューラルネットワークに対する部分的推論または訓練計算を含む、請求項1、2、または3に記載の方法。
  5. 前記部分グラフを分析して、連鎖構造内の前記部分グラフの中のノードのグループを識別するステップであって、
    前記命令は、前記第1のデバイスに、ノードの前記グループを1つのストリームに割り当てることを行わせる、ステップ
    をさらに含む、請求項1から4のいずれか一項に記載の方法。
  6. 前記割り当てることは、
    前記部分グラフを分析して、複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するステップであって、
    前記命令は、前記有向エッジの各々について、前記ハードウェアアクセラレータの互いに素なストリームに前記有向エッジの終点であるノードを割り当てることを前記第1のデバイスに行わせる、ステップ
    を含む、請求項1から5のいずれか一項に記載の方法。
  7. 前記命令は、前記第1のデバイスに、各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定することを行わせ、前記割り当てることは、少なくともメモリリソースの前記それぞれの量に基づく、請求項1から6のいずれか一項に記載の方法。
  8. 前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
    前記特定のオペレーションが終了したとの決定に応答して、
    解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定し、
    割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって表されるオペレーションによって消費されるメモリのそれぞれの推定量を決定し、
    割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する、前記ハードウェアアクセラレータのストリーム上で実行されるオペレーションを表す、第1の割り当てられていないノードを決定し、
    前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てる
    ことを行わせる、請求項1から7のいずれか一項に記載の方法。
  9. 前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
    前記特定のオペレーションが終了したとの決定に応答して、
    前記特定のオペレーションの前記出力を入力として使用する少なくとも1つの後続オペレーションを決定し、
    前記少なくとも1つの後続オペレーションが実行された後に前記特定のオペレーションの前記出力に対して割り振られたメモリを再利用すること
    を行わせる、請求項1から8のいずれか一項に記載の方法。
  10. 前記特定のオペレーションの前記出力を入力として使用する少なくとも1つの後続オペレーションを決定することは、
    少なくとも2つの後続オペレーション、第1のストリームにおける第1のオペレーション、および第2のストリームにおける第2のオペレーションは、前記特定のオペレーションの前記出力を入力として使用すると決定するステップと、
    前記第1のオペレーションがいつ前記特定のオペレーションを入力として使用したかを指示する第1のストリームに第1のマーカーを配置するステップと、
    前記第2のオペレーションがいつ前記特定のオペレーションを入力として使用したかを指示する第2のストリームに第2のマーカーを配置するステップと、
    両方のオペレーションが前記第1および第2のマーカーからの指示に基づき前記特定のオペレーションを使用したと決定するステップと
    を含む、請求項9に記載の方法。
  11. モデル入力を受け取るステップと、前記ハードウェアアクセラレータによって、前記部分グラフ内の前記ノードによって表されるオペレーションに従って前記モデル入力を処理するステップとをさらに含む、請求項1から10のいずれか一項に記載の方法。
  12. 1つまたは複数のコンピュータと、
    前記1つまたは複数のコンピュータに結合され、前記1つまたは複数のコンピュータによって実行されたときに、前記1つまたは複数のコンピュータにオペレーションを実行させる命令が記憶されるコンピュータ可読記録媒体であって、前記オペレーションは、
    計算グラフシステムによって、計算グラフを処理する要求を受け取るステップと、
    前記計算グラフの部分グラフを表すデータを取得するステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは第1のデバイスに割り当てられる、ステップと、
    前記第1のデバイスは複数のストリームを有するハードウェアアクセラレータを備えていると決定するステップと、
    前記第1のデバイスが複数のストリームを有するハードウェアアクセラレータを備えているとの決定に応答して、前記第1のデバイスによって実行されたときに前記第1のデバイスに、
    前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当て、
    前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行すること
    を行わせる命令を生成するステップと、
    前記命令および前記データを前記第1のデバイスに提供するステップと
    を含む、コンピュータ可読記録媒体と
    を備える、システム。
  13. 前記要求は、前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別することを指定し、前記オペレーションは、
    前記第1のデバイスから、前記1つまたは複数の特定の出力を受け取るステップと、
    前記1つまたは複数の特定の出力をクライアントに提供するステップと
    をさらに含む、請求項12に記載のシステム。
  14. 前記オペレーションは、
    前記部分グラフを分析して、連鎖構造内の前記部分グラフの中のノードのグループを識別するステップであって、
    前記命令は、前記第1のデバイスに、ノードの前記グループを1つのストリームに割り当てることを行わせる、ステップ
    をさらに含む、請求項12または13に記載のシステム。
  15. 前記割り当てることは、
    前記部分グラフを分析して、前記部分グラフ内の第1のノードが複数の有向エッジを出力として有することを識別するステップであって、
    前記命令は、前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てることを前記第1のデバイスに行わせる、ステップ
    を含む、請求項12、13、または14に記載のシステム。
  16. 前記命令は、前記第1のデバイスに、各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定することを行わせ、前記割り当てることは、少なくともメモリリソースの前記それぞれの量に基づく、請求項12から15のいずれか一項に記載のシステム。
  17. 前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
    前記特定のオペレーションが終了したとの決定に応答して、
    解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定し、
    割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定し、
    割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定し、
    前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てる
    ことを行わせる、請求項12から16のいずれか一項に記載のシステム。
  18. 1つまたは複数のコンピュータ記憶媒体上に符号化されたコンピュータプログラムであって、1つまたは複数のコンピュータによって実行されたときに、前記1つまたは複数のコンピュータに、
    計算グラフシステムによって、計算グラフを処理する要求を受け取るステップと、
    前記計算グラフの部分グラフを表すデータを取得するステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは第1のデバイスに割り当てられる、ステップと、
    前記第1のデバイスは複数のストリームを有するハードウェアアクセラレータを備えていると決定するステップと、
    前記第1のデバイスが複数のストリームを有するハードウェアアクセラレータを備えているとの決定に応答して、前記第1のデバイスによって実行されたときに前記第1のデバイスに、
    前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当て、
    前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行すること
    を行わせる命令を生成するステップと、
    前記命令および前記データを前記第1のデバイスに提供するステップと
    を含むオペレーションを実行させる命令を含む、コンピュータプログラム。
  19. 前記要求は、前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別することを指定し、前記オペレーションは、
    前記第1のデバイスから、前記1つまたは複数の特定の出力を受け取るステップと、
    前記1つまたは複数の特定の出力をクライアントに提供するステップと
    をさらに含む、請求項18に記載のコンピュータプログラム。
  20. 前記オペレーションは、
    前記部分グラフを分析して、連鎖構造内の前記部分グラフの中のノードのグループを識別するステップであって、
    前記命令は、前記第1のデバイスに、ノードの前記グループを1つのストリームに割り当てることを行わせる、ステップ
    をさらに含む、請求項18または19に記載のコンピュータプログラム。
  21. 前記割り当てることは、
    前記部分グラフを分析して、前記部分グラフ内の第1のノードが複数の有向エッジを出力として有することを識別するステップであって、
    前記命令は、前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てることを前記第1のデバイスに行わせる、ステップ
    を含む、請求項18、19、または20に記載のコンピュータプログラム。
  22. 前記命令は、前記第1のデバイスに、各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定することを行わせ、前記割り当てることは、少なくともメモリリソースの前記それぞれの量に基づく、請求項18から21のいずれか一項に記載のコンピュータプログラム。
  23. 前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
    前記特定のオペレーションが終了したとの決定に応答して、
    解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定し、
    割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定し、
    割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定し、
    前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てる
    ことを行わせる、請求項18から22のいずれか一項に記載のコンピュータプログラム。
  24. 複数のストリームを有するハードウェアアクセラレータによって、計算グラフの部分グラフを表すデータを受け取るステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは計算グラフシステム内のプレーサによってハードウェアアクセラレータに割り当てられる、ステップと、
    前記ハードウェアアクセラレータによって、前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当てるステップと、
    前記ハードウェアアクセラレータによって、前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行するステップと
    を含む、方法。
  25. 前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別する要求を受け取るステップと、
    前記1つまたは複数の特定の出力をクライアントに提供するステップと
    をさらに含む、請求項24に記載の方法。
  26. 連鎖構造内の前記部分グラフの中のノードのグループを識別するデータを受け取るステップと、
    ノードの前記グループを1つのストリームに割り当てるステップと
    をさらに含む、請求項24または25に記載の方法。
  27. 割り当てる前記ステップは、
    複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するデータを受け取るステップと、
    前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てるステップと
    を含む、請求項24、25、または26に記載の方法。
  28. 各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定するステップであって、割り当てる前記ステップは、少なくともメモリリソースの前記それぞれの量に基づく、ステップをさらに含む、請求項24から27のいずれか一項に記載の方法。
  29. ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定するステップと、
    前記特定のオペレーションが終了したとの決定に応答して、解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定するステップと、
    割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定するステップと、
    割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定するステップと、
    前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てるステップと
    をさらに含む、請求項24から28のいずれか一項に記載の方法。
  30. 1つまたは複数の非一時的コンピュータ記憶媒体上に符号化されたコンピュータプログラムであって、複数のストリームを有するハードウェアアクセラレータを備えるコンピュータによって実行されたときに、前記コンピュータに、
    計算グラフの部分グラフを表すデータを受け取るステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは計算グラフシステム内のプレーサによってハードウェアアクセラレータに割り当てられる、ステップと、
    前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当てるステップと、
    前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行するステップと
    を含むオペレーションを実行させる命令を含む、コンピュータプログラム。
  31. 前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別する要求を受け取るステップと、
    前記1つまたは複数の特定の出力をクライアントに提供するステップと
    をさらに含む、請求項30に記載のコンピュータプログラム。
  32. 連鎖構造内の前記部分グラフの中のノードのグループを識別するデータを受け取るステップと、
    ノードの前記グループを1つのストリームに割り当てるステップと
    をさらに含む、請求項30または31に記載のコンピュータプログラム。
  33. 割り当てる前記ステップは、
    複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するデータを受け取るステップと、
    前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てるステップと
    を含む、請求項30、31、または32に記載のコンピュータプログラム。
  34. 各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定するステップであって、割り当てる前記ステップは、少なくともメモリリソースの前記それぞれの量に基づく、ステップをさらに含む、請求項30から33のいずれか一項に記載のコンピュータプログラム。
  35. ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定するステップと、
    前記特定のオペレーションが終了したとの決定に応答して、解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定するステップと、
    割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定するステップと、
    割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定するステップと、
    前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てるステップと
    をさらに含む、請求項30から34のいずれか一項に記載のコンピュータプログラム。
  36. ハードウェアアクセラレータを備えるシステムであって、前記ハードウェアアクセラレータは、複数のストリームを備え、前記システムは、オペレーションを実行するように構成され、前記オペレーションは、
    計算グラフの部分グラフを表すデータを受け取るステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは計算グラフシステム内のプレーサによってハードウェアアクセラレータに割り当てられる、ステップと、
    前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当てるステップと、
    前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行するステップと
    を含む、システム。
  37. 前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別する要求を受け取るステップと、
    前記1つまたは複数の特定の出力をクライアントに提供するステップと
    をさらに含む、請求項36に記載のシステム。
  38. 連鎖構造内の前記部分グラフの中のノードのグループを識別するデータを受け取るステップと、
    ノードの前記グループを1つのストリームに割り当てるステップと
    をさらに含む、請求項36または37に記載のシステム。
  39. 割り当てる前記ステップは、
    複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するデータを受け取るステップと、
    前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てるステップと
    を含む、請求項36、37、または38に記載のシステム。
  40. 各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定するステップであって、割り当てる前記ステップは、少なくともメモリリソースの前記それぞれの量に基づく、ステップ
    をさらに含む、請求項36から39のいずれか一項に記載のシステム。
  41. ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定するステップと、
    前記特定のオペレーションが終了したとの決定に応答して、解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定するステップと、
    割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定するステップと、
    割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定するステップと、
    前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てるステップと
    をさらに含む、請求項36から40のいずれか一項に記載のシステム。
JP2018522024A 2015-10-28 2016-10-28 計算グラフのストリームベースのアクセラレータ処理 Active JP6672456B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562247703P 2015-10-28 2015-10-28
US62/247,703 2015-10-28
US201562253046P 2015-11-09 2015-11-09
US62/253,046 2015-11-09
PCT/US2016/059334 WO2017075360A1 (en) 2015-10-28 2016-10-28 Stream-based accelerator processing of computational graphs

Publications (2)

Publication Number Publication Date
JP2018533795A true JP2018533795A (ja) 2018-11-15
JP6672456B2 JP6672456B2 (ja) 2020-03-25

Family

ID=57354431

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018522024A Active JP6672456B2 (ja) 2015-10-28 2016-10-28 計算グラフのストリームベースのアクセラレータ処理

Country Status (6)

Country Link
US (3) US11151446B2 (ja)
EP (1) EP3353655B1 (ja)
JP (1) JP6672456B2 (ja)
KR (2) KR102081952B1 (ja)
CN (2) CN115840643A (ja)
WO (1) WO2017075360A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021183135A1 (en) * 2020-03-13 2021-09-16 Hewlett-Packard Development Company, L.P. Transmitting node instructions

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180032568A1 (en) * 2016-07-29 2018-02-01 Sysomos L.P. Computing System with Multi-Processor Platform for Accelerating Influence Maximization Computation and Related Methods
US10241956B2 (en) * 2016-09-12 2019-03-26 International Business Machines Corporation Virtualizing coherent hardware accelerators
EP3559868A1 (en) * 2017-03-24 2019-10-30 Google LLC Device placement optimization with reinforcement learning
US11138494B2 (en) * 2017-05-02 2021-10-05 International Business Machines Corporation Storage controller acceleration for neural network training and inference
US10585703B2 (en) * 2017-06-03 2020-03-10 Apple Inc. Dynamic operation allocation for neural networks
US11138516B2 (en) * 2017-06-30 2021-10-05 Visa International Service Association GPU enhanced graph model build and scoring engine
CN107480080B (zh) * 2017-07-03 2021-03-23 深圳致星科技有限公司 一种基于rdma的零拷贝数据流
US10887235B2 (en) 2017-08-24 2021-01-05 Google Llc Method of executing a tuple graph program across a network
US10599482B2 (en) * 2017-08-24 2020-03-24 Google Llc Method for intra-subgraph optimization in tuple graph programs
US10642582B2 (en) 2017-08-24 2020-05-05 Google Llc System of type inference for tuple graph programs method of executing a tuple graph program across a network
US11568218B2 (en) * 2017-10-17 2023-01-31 Xilinx, Inc. Neural network processing system having host controlled kernel acclerators
US11373088B2 (en) * 2017-12-30 2022-06-28 Intel Corporation Machine learning accelerator mechanism
FI130232B (en) * 2018-04-18 2023-05-03 Meeshkan Oy Procedure for distributed processing of information and distributed information processing system
US11948073B2 (en) * 2018-04-20 2024-04-02 Advanced Micro Devices, Inc. Machine learning inference engine scalability
US20190333506A1 (en) 2018-04-30 2019-10-31 Avnera Corporation Personal interactive speaker device having audio recognition neural net processor architecture
US11615289B2 (en) * 2018-06-28 2023-03-28 Oracle International Corporation Configuration price quote with enhanced approval control
CN111079907B (zh) * 2018-10-19 2021-01-26 安徽寒武纪信息科技有限公司 运算方法、装置及相关产品
CN111079916B (zh) * 2018-10-19 2021-01-15 安徽寒武纪信息科技有限公司 运算方法、系统及相关产品
US11769041B2 (en) 2018-10-31 2023-09-26 Advanced Micro Devices, Inc. Low latency long short-term memory inference with sequence interleaving
CN111353575A (zh) 2018-12-20 2020-06-30 超威半导体公司 用于卷积神经网络的图块化格式
CN109669772B (zh) * 2018-12-28 2020-03-31 第四范式(北京)技术有限公司 计算图的并行执行方法和设备
US11645358B2 (en) * 2019-01-29 2023-05-09 Hewlett Packard Enterprise Development Lp Generation of executable files corresponding to neural network models
US11687795B2 (en) * 2019-02-19 2023-06-27 International Business Machines Corporation Machine learning engineering through hybrid knowledge representation
CN111723918A (zh) 2019-03-18 2020-09-29 超威半导体公司 用于卷积内核的自动生成和调谐工具
US11537939B2 (en) * 2019-05-03 2022-12-27 Google Llc Reshape and broadcast optimizations to avoid unnecessary data movement
CN111915002B (zh) * 2019-05-09 2023-12-19 中科寒武纪科技股份有限公司 运算方法、装置及相关产品
US11521042B2 (en) * 2019-05-21 2022-12-06 Anil Ravindranath System and method to dynamically and automatically sharing resources of coprocessor AI accelerators
CN112016681B (zh) * 2019-05-31 2024-04-30 苹果公司 机器学习操作的分解
CN112070221B (zh) * 2019-05-31 2024-01-16 中科寒武纪科技股份有限公司 运算方法、装置及相关产品
US11836635B2 (en) 2019-05-31 2023-12-05 Apple Inc. Mutable parameters for machine learning models during runtime
US11494237B2 (en) 2019-06-26 2022-11-08 Microsoft Technology Licensing, Llc Managing workloads of a deep neural network processor
WO2021012215A1 (zh) * 2019-07-24 2021-01-28 华为技术有限公司 神经网络切分方法、预测方法及相关装置
US10884755B1 (en) * 2019-07-31 2021-01-05 International Business Machines Corporation Graph rewriting for large model support using categorized topological sort
US11521062B2 (en) * 2019-12-05 2022-12-06 International Business Machines Corporation Neural network training using a data flow graph and dynamic memory management
CN111611087B (zh) * 2020-06-30 2023-03-03 中国人民解放军国防科技大学 一种资源调度方法、装置和系统
US20220051085A1 (en) * 2020-08-11 2022-02-17 Mediatek Inc. Runtime hyper-heterogeneous optimization for processing circuits executing inference model
CN114169491A (zh) * 2020-09-10 2022-03-11 阿里巴巴集团控股有限公司 一种模型处理方法、装置、设备及计算机可读存储介质
CN114565102A (zh) * 2020-11-27 2022-05-31 伊姆西Ip控股有限责任公司 部署机器学习模型的方法、电子设备和计算机程序产品
CN112734011B (zh) * 2021-01-04 2021-12-28 北京大学 一种基于增量综合的深度神经网络加速器协同设计方法
CN115934306A (zh) * 2021-08-08 2023-04-07 联发科技股份有限公司 一种电子设备、生成输出数据的方法及机器可读存储介质
CN114004347A (zh) 2021-08-30 2022-02-01 平头哥(上海)半导体技术有限公司 用于加速图神经网络属性访问的硬件加速器、系统和方法
US20240104341A1 (en) * 2022-09-27 2024-03-28 Zhejiang Lab Memory optimization method and apparatus for neural network compilation
CN115759233B (zh) * 2022-11-24 2023-10-20 北京百度网讯科技有限公司 模型的训练方法、图数据处理方法、装置及电子设备

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317734A (en) 1989-08-29 1994-05-31 North American Philips Corporation Method of synchronizing parallel processors employing channels and compiling method minimizing cross-processor data dependencies
US7350055B2 (en) 2004-10-20 2008-03-25 Arm Limited Tightly coupled accelerator
US7343482B2 (en) 2004-10-20 2008-03-11 Arm Limited Program subgraph identification
US7870556B2 (en) 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
EP2527983A3 (en) 2006-08-10 2013-06-12 Ab Initio Technology LLC Distributing services in graph-based computations
KR101607495B1 (ko) 2008-07-10 2016-03-30 로케틱 테크놀로지즈 리미티드 디펜던시 문제의 효율적인 병렬 계산
US8881141B2 (en) * 2010-12-08 2014-11-04 Intenational Business Machines Corporation Virtualization of hardware queues in self-virtualizing input/output devices
WO2014009031A2 (en) 2012-07-09 2014-01-16 Toyota Motor Europe Nv/Sa Artificial memory system and method for use with a computational machine for interacting with dynamic behaviours
CN102609298B (zh) * 2012-01-11 2016-01-13 中国科学技术大学苏州研究院 基于硬件队列扩展的网卡虚拟化系统及其方法
CN102790777B (zh) * 2012-08-07 2016-06-15 华为技术有限公司 网络接口适配器注册方法及驱动设备、服务器
CN103970604B (zh) 2013-01-31 2017-05-03 国际商业机器公司 基于MapReduce架构实现图处理的方法和装置
US11061539B2 (en) 2013-03-15 2021-07-13 The Mathworks, Inc. Reference nodes in a computational graph
US9424079B2 (en) 2013-06-27 2016-08-23 Microsoft Technology Licensing, Llc Iteration support in a heterogeneous dataflow engine
US9645575B2 (en) 2013-11-27 2017-05-09 Adept Ai Systems Inc. Method and apparatus for artificially intelligent model-based control of dynamic processes using probabilistic agents
CN104615488B (zh) * 2015-01-16 2018-01-19 华为技术有限公司 异构多核可重构计算平台上任务调度的方法和装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021183135A1 (en) * 2020-03-13 2021-09-16 Hewlett-Packard Development Company, L.P. Transmitting node instructions

Also Published As

Publication number Publication date
KR102081952B1 (ko) 2020-04-23
US10373053B2 (en) 2019-08-06
US20180247196A1 (en) 2018-08-30
EP3353655B1 (en) 2023-01-11
CN108351805B (zh) 2022-12-23
EP3353655A1 (en) 2018-08-01
CN115840643A (zh) 2023-03-24
WO2017075360A1 (en) 2017-05-04
US20220027202A1 (en) 2022-01-27
KR20200021104A (ko) 2020-02-27
JP6672456B2 (ja) 2020-03-25
CN108351805A (zh) 2018-07-31
US20170124451A1 (en) 2017-05-04
US11151446B2 (en) 2021-10-19
KR20180073669A (ko) 2018-07-02

Similar Documents

Publication Publication Date Title
JP6672456B2 (ja) 計算グラフのストリームベースのアクセラレータ処理
US20240160948A1 (en) Processing computational graphs
JP7094262B2 (ja) 計算グラフの修正
US10789544B2 (en) Batching inputs to a machine learning model
EP4202782A1 (en) Training neural networks represented as computational graphs
US11763146B1 (en) Processing loops in computational graphs

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180626

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190724

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190805

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20191105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191203

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200203

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200304

R150 Certificate of patent or registration of utility model

Ref document number: 6672456

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250