(57)【特許請求の範囲】
【請求項１】
１又は複数のコンピュータによって実施される方法であって、
計算グラフを処理する要求を受け取るステップと、
前記計算グラフの部分グラフを表すデータを取得するステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは第1のデバイスに割り当てられる、ステップと、
前記第1のデバイスは複数のストリームを有するハードウェアアクセラレータを備えていると決定するステップであって、各ストリームは、該ストリームに割り当てられたオペレーションを割り当てられた順序で実行する独立したハードウェアキューである、ステップと、
前記第1のデバイスが複数のストリームを有するハードウェアアクセラレータを備えているとの決定に応答して、前記第1のデバイスによって実行されたときに前記第1のデバイスに、
前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当て、
前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行すること
を行わせる命令を生成するステップと、
前記命令および前記データを前記第1のデバイスに提供するステップと
を含む、コンピュータ実装方法。
【請求項２】
前記要求は、前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別することを指定し、
前記第1のデバイスから、前記1つまたは複数の特定の出力を受け取るステップと、
前記1つまたは複数の特定の出力をクライアントに提供するステップと
をさらに含む、請求項1に記載の方法。
【請求項３】
前記命令は、前記第1のデバイスに、前記1つまたは複数の特定の出力を前記第1のデバイスのメモリ内に記憶することをさらに行わせる、請求項2に記載の方法。
【請求項４】
前記部分グラフに対する前記オペレーションは、ニューラルネットワークに対する部分的推論または訓練計算を含む、請求項1、2、または3に記載の方法。
【請求項５】
前記部分グラフを分析して、連鎖構造で配置構成されている前記部分グラフの中の複数のノードのグループを識別するステップであって、
前記命令は、前記第1のデバイスに、複数のノードの前記グループを、1つのストリームに割り当てることを行わせる、ステップ
をさらに含む、請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記割り当てることは、
前記部分グラフを分析して、複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するステップであって、
前記命令は、前記ハードウェアアクセラレータの異なるストリームに、前記第1のノードから入力を各々受け取る複数のノードをそれぞれ割り当てることを前記第1のデバイスに行わせる、ステップ
を含む、請求項1から5のいずれか一項に記載の方法。
【請求項７】
前記命令は、前記第1のデバイスに、各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定することを行わせ、前記割り当てることは、少なくともメモリリソースの前記それぞれの量に基づく、請求項1から6のいずれか一項に記載の方法。
【請求項８】
前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
前記特定のオペレーションが終了したとの決定に応答して、
解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定し、
割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって表されるオペレーションによって消費されるメモリのそれぞれの推定量を決定し、
割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する、前記ハードウェアアクセラレータのストリーム上で実行されるオペレーションを表す、第1の割り当てられていないノードを決定し、
前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てる
ことを行わせる、請求項1から7のいずれか一項に記載の方法。
【請求項９】
前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
前記特定のオペレーションが終了したとの決定に応答して、
前記特定のオペレーションの前記出力を入力として使用する少なくとも1つの後続オペレーションを決定すること
を行わせる、請求項1から8のいずれか一項に記載の方法。
【請求項１０】
前記特定のオペレーションの前記出力を入力として使用する少なくとも1つの後続オペレーションを決定することは、
少なくとも2つの後続オペレーション、第1のストリームにおける第1のオペレーション、および第2のストリームにおける第2のオペレーションは、前記特定のオペレーションの前記出力を入力として使用すると決定するステップと、
前記第1のオペレーションがいつ前記特定のオペレーションを入力として使用したかを指示する第1のストリームに第1のマーカーを配置するステップと、
前記第2のオペレーションがいつ前記特定のオペレーションを入力として使用したかを指示する第2のストリームに第2のマーカーを配置するステップと、
両方のオペレーションが前記第1および第2のマーカーからの指示に基づき前記特定のオペレーションを使用したと決定するステップと
を含む、請求項9に記載の方法。
【請求項１１】
モデル入力を受け取るステップと、前記ハードウェアアクセラレータによって、前記部分グラフ内の前記ノードによって表されるオペレーションに従って前記モデル入力を処理するステップとをさらに含む、請求項1から10のいずれか一項に記載の方法。
【請求項１２】
1つまたは複数のコンピュータと、
前記1つまたは複数のコンピュータに結合され、前記1つまたは複数のコンピュータによって実行されたときに、前記1つまたは複数のコンピュータにオペレーションを実行させる命令が記憶されるコンピュータ可読記録媒体であって、前記オペレーションは、
計算グラフシステムによって、計算グラフを処理する要求を受け取るステップと、
前記計算グラフの部分グラフを表すデータを取得するステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは第1のデバイスに割り当てられる、ステップと、
前記第1のデバイスは複数のストリームを有するハードウェアアクセラレータを備えていると決定するステップであって、各ストリームは、該ストリームに割り当てられたオペレーションを割り当てられた順序で実行する独立したハードウェアキューである、ステップと、
前記第1のデバイスが複数のストリームを有するハードウェアアクセラレータを備えているとの決定に応答して、前記第1のデバイスによって実行されたときに前記第1のデバイスに、
前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当て、
前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行すること
を行わせる命令を生成するステップと、
前記命令および前記データを前記第1のデバイスに提供するステップと
を含む、コンピュータ可読記録媒体と
を備える、システム。
【請求項１３】
前記要求は、前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別することを指定し、前記オペレーションは、
前記第1のデバイスから、前記1つまたは複数の特定の出力を受け取るステップと、
前記1つまたは複数の特定の出力をクライアントに提供するステップと
をさらに含む、請求項12に記載のシステム。
【請求項１４】
前記オペレーションは、
前記部分グラフを分析して、連鎖構造で配置構成されている前記部分グラフの中の複数のノードのグループを識別するステップであって、
前記命令は、前記第1のデバイスに、複数のノードの前記グループを、1つのストリームに割り当てることを行わせる、ステップ
をさらに含む、請求項12または13に記載のシステム。
【請求項１５】
前記割り当てることは、
前記部分グラフを分析して、前記部分グラフ内の第1のノードが複数の有向エッジを出力として有することを識別するステップであって、
前記命令は、前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てることを前記第1のデバイスに行わせる、ステップ
を含む、請求項12、13、または14に記載のシステム。
【請求項１６】
前記命令は、前記第1のデバイスに、各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定することを行わせ、前記割り当てることは、少なくともメモリリソースの前記それぞれの量に基づく、請求項12から15のいずれか一項に記載のシステム。
【請求項１７】
前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
前記特定のオペレーションが終了したとの決定に応答して、
解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定し、
割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定し、
割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定し、
前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てる
ことを行わせる、請求項12から16のいずれか一項に記載のシステム。
【請求項１８】
1つまたは複数のコンピュータ記憶媒体上に符号化されたコンピュータプログラムであって、1つまたは複数のコンピュータによって実行されたときに、前記1つまたは複数のコンピュータに、
計算グラフシステムによって、計算グラフを処理する要求を受け取るステップと、
前記計算グラフの部分グラフを表すデータを取得するステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは第1のデバイスに割り当てられる、ステップと、
前記第1のデバイスは複数のストリームを有するハードウェアアクセラレータを備えていると決定するステップであって、各ストリームは、該ストリームに割り当てられたオペレーションを割り当てられた順序で実行する独立したハードウェアキューである、ステップと、
前記第1のデバイスが複数のストリームを有するハードウェアアクセラレータを備えているとの決定に応答して、前記第1のデバイスによって実行されたときに前記第1のデバイスに、
前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当て、
前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行すること
を行わせる命令を生成するステップと、
前記命令および前記データを前記第1のデバイスに提供するステップと
を含むオペレーションを実行させる命令を含む、コンピュータプログラム。
【請求項１９】
前記要求は、前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別することを指定し、前記オペレーションは、
前記第1のデバイスから、前記1つまたは複数の特定の出力を受け取るステップと、
前記1つまたは複数の特定の出力をクライアントに提供するステップと
をさらに含む、請求項18に記載のコンピュータプログラム。
【請求項２０】
前記オペレーションは、
前記部分グラフを分析して、連鎖構造で配置構成されている前記部分グラフの中の複数のノードのグループを識別するステップであって、
前記命令は、前記第1のデバイスに、複数のノードの前記グループを、1つのストリームに割り当てることを行わせる、ステップ
をさらに含む、請求項18または19に記載のコンピュータプログラム。
【請求項２１】
前記割り当てることは、
前記部分グラフを分析して、前記部分グラフ内の第1のノードが複数の有向エッジを出力として有することを識別するステップであって、
前記命令は、前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てることを前記第1のデバイスに行わせる、ステップ
を含む、請求項18、19、または20に記載のコンピュータプログラム。
【請求項２２】
前記命令は、前記第1のデバイスに、各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定することを行わせ、前記割り当てることは、少なくともメモリリソースの前記それぞれの量に基づく、請求項18から21のいずれか一項に記載のコンピュータプログラム。
【請求項２３】
前記命令は、前記第1のデバイスに、ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定し、
前記特定のオペレーションが終了したとの決定に応答して、
解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定し、
割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定し、
割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定し、
前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てる
ことを行わせる、請求項18から22のいずれか一項に記載のコンピュータプログラム。
【請求項２４】
複数のストリームを有するハードウェアアクセラレータによって、計算グラフの部分グラフを表すデータを受け取るステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは計算グラフシステム内のプレーサによってハードウェアアクセラレータに割り当てられ、各ストリームは、該ストリームに割り当てられたオペレーションを割り当てられた順序で実行する独立したハードウェアキューである、ステップと、
前記ハードウェアアクセラレータによって、前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当てるステップと、
前記ハードウェアアクセラレータによって、前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行するステップと
を含む、方法。
【請求項２５】
前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別する要求を受け取るステップと、
前記1つまたは複数の特定の出力をクライアントに提供するステップと
をさらに含む、請求項24に記載の方法。
【請求項２６】
連鎖構造で配置構成されている前記部分グラフの中の複数のノードのグループを識別するデータを受け取るステップと、
複数のノードの前記グループを、1つのストリームに割り当てるステップと
をさらに含む、請求項24または25に記載の方法。
【請求項２７】
割り当てる前記ステップは、
複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するデータを受け取るステップと、
前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てるステップと
を含む、請求項24、25、または26に記載の方法。
【請求項２８】
各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定するステップであって、割り当てる前記ステップは、少なくともメモリリソースの前記それぞれの量に基づく、ステップをさらに含む、請求項24から27のいずれか一項に記載の方法。
【請求項２９】
ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定するステップと、
前記特定のオペレーションが終了したとの決定に応答して、解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定するステップと、
割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定するステップと、
割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定するステップと、
前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てるステップと
をさらに含む、請求項24から28のいずれか一項に記載の方法。
【請求項３０】
1つまたは複数の非一時的コンピュータ記憶媒体上に符号化されたコンピュータプログラムであって、複数のストリームを有するハードウェアアクセラレータを備えるコンピュータによって実行されたときに、前記コンピュータに、
計算グラフの部分グラフを表すデータを受け取るステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは計算グラフシステム内のプレーサによってハードウェアアクセラレータに割り当てられ、各ストリームは、該ストリームに割り当てられたオペレーションを割り当てられた順序で実行する独立したハードウェアキューである、ステップと、
前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当てるステップと、
前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行するステップと
を含むオペレーションを実行させる命令を含む、コンピュータプログラム。
【請求項３１】
前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別する要求を受け取るステップと、
前記1つまたは複数の特定の出力をクライアントに提供するステップと
をさらに含む、請求項30に記載のコンピュータプログラム。
【請求項３２】
連鎖構造で配置構成されている前記部分グラフの中の複数のノードのグループを識別するデータを受け取るステップと、
複数のノードの前記グループを、1つのストリームに割り当てるステップと
をさらに含む、請求項30または31に記載のコンピュータプログラム。
【請求項３３】
割り当てる前記ステップは、
複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するデータを受け取るステップと、
前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てるステップと
を含む、請求項30、31、または32に記載のコンピュータプログラム。
【請求項３４】
各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定するステップであって、割り当てる前記ステップは、少なくともメモリリソースの前記それぞれの量に基づく、ステップをさらに含む、請求項30から33のいずれか一項に記載のコンピュータプログラム。
【請求項３５】
ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定するステップと、
前記特定のオペレーションが終了したとの決定に応答して、解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定するステップと、
割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定するステップと、
割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定するステップと、
前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てるステップと
をさらに含む、請求項30から34のいずれか一項に記載のコンピュータプログラム。
【請求項３６】
ハードウェアアクセラレータを備えるシステムであって、前記ハードウェアアクセラレータは、複数のストリームを備え、前記システムは、オペレーションを実行するように構成され、前記オペレーションは、
計算グラフの部分グラフを表すデータを受け取るステップであって、前記計算グラフは複数のノードおよび有向エッジを含み、各ノードは、それぞれのオペレーションを表し、各有向エッジは、それぞれの第1のノードを、入力として前記それぞれの第1のノードによって表されるオペレーションの出力を受け取るオペレーションを表すそれぞれの第2のノードに接続し、前記部分グラフは計算グラフシステム内のプレーサによってハードウェアアクセラレータに割り当てられ、各ストリームは、該ストリームに割り当てられたオペレーションを割り当てられた順序で実行する独立したハードウェアキューである、ステップと、
前記部分グラフ内の各ノードによって表される前記オペレーションを前記ハードウェアアクセラレータの前記複数のストリーム内のそれぞれのストリームに割り当てるステップと、
前記割り当てに従って前記部分グラフ内の前記ノードによって表される前記オペレーションを実行するステップと
を含む、システム。
【請求項３７】
前記部分グラフ内の1つまたは複数のそれぞれのノードから1つまたは複数の特定の出力を識別する要求を受け取るステップと、
前記1つまたは複数の特定の出力をクライアントに提供するステップと
をさらに含む、請求項36に記載のシステム。
【請求項３８】
連鎖構造で配置構成されている前記部分グラフの中の複数のノードのグループを識別するデータを受け取るステップと、
複数のノードの前記グループを、1つのストリームに割り当てるステップと
をさらに含む、請求項36または37に記載のシステム。
【請求項３９】
割り当てる前記ステップは、
複数の有向エッジを出力として有する前記部分グラフ内の第1のノードを識別するデータを受け取るステップと、
前記有向エッジの各々について、前記ハードウェアアクセラレータの一意的なストリームに前記有向エッジの終点であるノードを割り当てるステップと
を含む、請求項36、37、または38に記載のシステム。
【請求項４０】
各ノードについて、前記ノードへの前記有向エッジに基づき前記ノードによって表される前記オペレーションによって消費される前記ハードウェアアクセラレータ内のメモリリソースのそれぞれの量を決定するステップであって、割り当てる前記ステップは、少なくともメモリリソースの前記それぞれの量に基づく、ステップ
をさらに含む、請求項36から39のいずれか一項に記載のシステム。
【請求項４１】
ノードによって表される特定のオペレーションが特定のストリームにおいて終了していると決定するステップと、
前記特定のオペレーションが終了したとの決定に応答して、解放される前記特定のオペレーションによって消費されるメモリの第1の量を決定するステップと、
割り当てられていないノードのグループの各々について、前記割り当てられていないノードによって消費されるメモリのそれぞれの推定量を決定するステップと、
割り当てられていないノードの前記グループから、前記第1の量のメモリの使用を最大化する前記推定量のメモリを有する第1の割り当てられていないノードを決定するステップと、
前記第1の割り当てられていないノードによって表されるオペレーションを前記特定のストリームに割り当てるステップと
をさらに含む、請求項36から40のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、部分グラフを、複数のストリームを有する、アクセラレータデバイス(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  プロセス
【図１】
0006672456.tif 000002
【図２】
0006672456.tif 000003
【図３】
0006672456.tif 000004
【図４】
0006672456.tif 000005