IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許7556652データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング
<>
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図1
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図2
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図3
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図4
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図5
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図6
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図7
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図8
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図9
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図10A
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図10B
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図11
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図12
  • 特許-データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-17
(45)【発行日】2024-09-26
(54)【発明の名称】データ・フロー・グラフおよび動的メモリ管理を使用するニューラル・ネットワークのトレーニング
(51)【国際特許分類】
   G06N 3/04 20230101AFI20240918BHJP
【FI】
G06N3/04
【請求項の数】 28
(21)【出願番号】P 2022533240
(86)(22)【出願日】2020-12-02
(65)【公表番号】
(43)【公表日】2023-02-06
(86)【国際出願番号】 IB2020061386
(87)【国際公開番号】W WO2021111332
(87)【国際公開日】2021-06-10
【審査請求日】2023-05-25
(31)【優先権主張番号】16/704,240
(32)【優先日】2019-12-05
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】ジャンセン、グラドゥス
(72)【発明者】
【氏名】ゾロトフ、ウラジミル
(72)【発明者】
【氏名】リ、トゥン
【審査官】渡辺 順哉
(56)【参考文献】
【文献】特開2018-194974(JP,A)
【文献】特開2019-133666(JP,A)
【文献】特表2019-501451(JP,A)
【文献】特開2020-102108(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
ニューラル・ネットワークを処理している間の全体的なGPUメモリ使用量を減らすための方法であって、
ノードのセットおよびエッジのセットを含んでいる基礎になるデータ・フロー・グラフ内のメモリ節約動作の挿入点を自動的に決定することを含み、前記挿入点を自動的に決定することが、
入力テンソルのセットに対してテンソル・タイミング・スラック(TTS)を計算することと、
しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、前記入力テンソルのセットから入力テンソルの候補リスト(SI)を集めることと
しきい値(thS)を満たすサイズを有する入力テンソルを維持するように前記SIをフィルタリングすることと、
前記フィルタリングに基づいて、前記SIを使用して前記動作の挿入点を決定することと
を含む、方法。
【請求項2】
前記動作が、削減動作および復元動作の組み合わせであり、
前記削減動作が、中央処理装置(CPU)メモリへのコピー動作および圧縮動作のいずれかまたは両方を含み、
前記復元動作が、CPUメモリからのコピー動作および解凍動作のいずれかまたは両方を含む、
請求項1に記載の方法。
【請求項3】
前記TTSを計算することが、前記入力テンソルを使用してタイミング解析を実行することを含む、請求項に記載の方法。
【請求項4】
前記タイミング解析が、
前記入力テンソルのテンソル到着時間(TAT)、テンソル必要時間(TRT)、およびテンソル・タイミング・スラック(TTS)の値を初期化することと、
Qが空ではない間、入力テンソルのセットQについて、
除外のためにQ内のノードqを選択するステップ、
Qからqを除外するステップ、および
qの後続の入力テンソルsごとに、qのTATに等しくなるようにsの前記TATを設定するステップ
を実行することと
を含む、請求項に記載の方法。
【請求項5】
前記初期化することが、
すべてのグラフのノードについて不明の値になるように、かつQに収集されたすべてのグラフの入力についてゼロになるように、TAT、TRT、およびTTSの値を初期化することを含む、請求項に記載の方法。
【請求項6】
ノードnのすべての入力が既知のTAT値を有し、nが、sが入力テンソルであるノードであり、前記方法が、前記入力テンソルのセットQに対して、
nの入力iの前記TATのうちの最大値になるようにnの前記TRTを設定するステップと、
nのTRTとiの前記TATの差としてnの各入力iの前記TTSを設定するステップと、
ノードの遅延によって増やされたnのTRTに基づいてnの前記TATを設定するステップと、
nをQに含めるステップと
をさらに実行することをさらに含む、請求項に記載の方法。
【請求項7】
前記データ・フロー・グラフが対(N,E)を含み、Nがノードのセットを含み、Eがハイパーエッジのセットを含み、N内の特定のノードが、1つまたは複数のテンソルに対する1つまたは複数の演算子を実装する、請求項1に記載の方法。
【請求項8】
前記特定のノードがトリプレット(f,I,O)を含み、fが前記特定のノードによって実装される演算子の関数であり、Iが前記特定のノードの入力テンソルのセットであり、Oが前記演算子に基づいて生成される前記特定のノードの出力のセットである、請求項に記載の方法。
【請求項9】
ハイパーエッジが、テンソルが、前記テンソルを生成する演算子から、前記テンソルを引数として使用する演算子に、どのように渡されるかを定義する、請求項に記載の方法。
【請求項10】
ハイパーエッジが対(s,H)を含み、sがノードの出力であり、Hがノードの入力のセットである、請求項に記載の方法。
【請求項11】
前記動作に対応するサブグラフ・ノードを前記データ・フロー・グラフに挿入することをさらに含む、請求項に記載の方法。
【請求項12】
前記挿入することが、新しいデータ・フロー・グラフを生成するか、または既存のデータ・フロー・グラフを変更する、請求項11に記載の方法。
【請求項13】
前記挿入することが新しいデータ・フロー・グラフを生成し、前記新しいデータ・フロー・グラフが、完全なデータ・フロー・グラフまたは部分的なデータ・フロー・グラフを含む、請求項12に記載の方法。
【請求項14】
前記挿入に基づいて前記データ・フロー・グラフを使用して前記入力テンソルのセットを処理することと、
前記処理に基づいて出力を生成することと
をさらに含む、請求項11に記載の方法。
【請求項15】
前記動作がメモリ削減動作であり、前記方法が、
前記メモリ削減動作に対応するメモリ削減サブグラフ・ノードを挿入すること
をさらに含む、請求項1に記載の方法。
【請求項16】
前記挿入することが、
第1のハイパーエッジを介して第1のノードを前記メモリ削減サブグラフ・ノードに接続することであって、前記第1のノードがソース・ノードに対応する、前記接続することと、
第2のハイパーエッジを介して前記メモリ削減サブグラフ・ノードを前記第2のノードに接続することであって、前記第2のハイパーエッジがシリアル化ハイパーエッジを含み、前記第2のノードが中間ノードまたは宛先ノードに対応する、前記接続することと
をさらに含む、請求項15に記載の方法。
【請求項17】
前記挿入することが、
第3のハイパーエッジを介して前記第1のノードを第2のノードに接続すること
をさらに含む、請求項16に記載の方法。
【請求項18】
前記動作がメモリ復元動作であり、前記方法が、
前記メモリ復元動作に対応するメモリ復元サブグラフ・ノードを挿入すること
をさらに含む、請求項1に記載の方法。
【請求項19】
前記挿入することが、
第1のハイパーエッジを介して、第1のノードを前記メモリ復元サブグラフ・ノードに接続することであって、前記第1のハイパーエッジがシリアル化ハイパーエッジまたはプリフェッチ・ハイパーエッジを含む、前記接続することと、
第2のハイパーエッジを介して、前記メモリ復元サブグラフ・ノードを第2のノードに接続することであって、前記第2のノードが宛先ノードに対応する、前記接続することと、
第3のハイパーエッジを介して、メモリ削減サブグラフ・ノードを前記メモリ復元サブグラフ・ノードに接続することと
をさらに含む、請求項18に記載の方法。
【請求項20】
ハイパーエッジを介して前記データ・フロー・グラフの2つのノードを接続することをさらに含み、前記接続することが、
前記2つのノード間の前記ハイパーエッジを介した直接接続と、
1つまたは複数の追加のノードおよび前記2つのノード間のハイパーエッジを介した間接接続と
のうちのいずれかを含む、請求項1に記載の方法。
【請求項21】
前記方法のステップが、少なくとも1つのメモリ削減動作および少なくとも1つのメモリ復元動作を実行するために、反復的に実行され、サブグラフ・ノードのセットを前記フロー・グラフに挿入する、請求項1に記載の方法。
【請求項22】
前記方法のステップを反復的に実行することが、ハイパーエッジのセットを前記フロー・グラフに挿入することを含み、前記ハイパーエッジのセットが、少なくとも1つのシリアル化ハイパーエッジ、または少なくとも1つのプリフェッチ・ハイパーエッジ、あるいは少なくとも1つのシリアル化ハイパーエッジおよび少なくとも1つのプリフェッチ・ハイパーエッジを含む、請求項21に記載の方法。
【請求項23】
動作がメモリ削減アクションであり、前記方法が、
ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよび前記ノードPを使用して前記メモリ削減アクションを適用することを決定することと、
ソース・ノードから前記サブグラフ・ノードAおよび前記ノードPにデータを送信することと、
前記ノードPの実行の前に、前記サブグラフ・ノードAが前記メモリ削減アクションを実行できるようにすることであって、前記メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、前記実行できるようにすることと、
サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させることと、
サブグラフ・ノードBの中央プロセッサ(CPU)から前記GPUに前記データを送信し、前記データを前記GPUに復元することと
を含む、請求項1に記載の方法。
【請求項24】
テンソル・タイミング・スラック(TTS)のセットおよび入力テンソルの候補リスト(SI)に基づいて、データ・フロー・グラフ内の動作の挿入点を選択することと、
入力テンソルのセットに対して前記テンソル・タイミング・スラック(TTS)を計算することと、
しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、入力テンソルのセットから入力テンソルの前記候補リスト(SI)を集めることと、
しきい値(thS)を満たすサイズを有する入力テンソルを維持するように前記SIをフィルタリングすることと、
前記フィルタリングに基づいて、前記SIを使用して削減および復元動作の挿入点を決定することと
を含む、方法。
【請求項25】
ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよび前記ノードPを使用してメモリ削減アクションを適用することを決定することと、
ソース・ノードから前記サブグラフ・ノードAおよび前記ノードPにデータを送信することと、
前記ノードPの実行の前に、前記サブグラフ・ノードAが前記メモリ削減アクションを実行できるようにすることであって、前記メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、前記実行できるようにすることと、
サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させることと、
サブグラフ・ノードBの中央プロセッサ(CPU)から前記GPUに前記データを送信し、前記データを前記GPUに復元することと
を含む、方法。
【請求項26】
コンピュータ・プログラムがコンピュータ上で実行された場合に、請求項1ないし25のいずれかの前記方法を実行するように適応されたプログラム・コードの手段を含む、コンピュータ・プログラム。
【請求項27】
ニューラル・ネットワークを処理している間の全体的なGPUメモリ使用量を減らすためのシステムであって、
ノードのセットおよびエッジのセットを含んでいる基礎になるデータ・フロー・グラフ内のメモリ節約動作の挿入点を自動的に決定することを含み、前記挿入点を自動的に決定することが、
テンソル・タイミング・スラック(TTS)のセットおよび入力テンソルの候補リスト(SI)に基づいて、データ・フロー・グラフ内の動作の挿入点を選択することと、
入力テンソルのセットに対して前記テンソル・タイミング・スラック(TTS)を計算することと、
しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、入力テンソルのセットから入力テンソルの前記候補リスト(SI)を集めることと、
しきい値(thS)を満たすサイズを有する入力テンソルを維持するように前記SIをフィルタリングすることと、
前記フィルタリングに基づいて、前記SIを使用して削減および復元動作の挿入点を決定することと
を実行するよう動作可能である、システム。
【請求項28】
ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよび前記ノードPを使用してメモリ削減アクションを適用することを決定することと、
ソース・ノードから前記サブグラフ・ノードAおよび前記ノードPにデータを送信することと、
前記ノードPの実行の前に、前記サブグラフ・ノードAが前記メモリ削減アクションを実行できるようにすることであって、前記メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、前記実行できるようにすることと、
サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させることと、
サブグラフ・ノードBの中央プロセッサ(CPU)から前記GPUに前記データを送信し、前記データを前記GPUに復元することと
を実行するよう動作可能である、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、メモリ容量が制限された環境内で大規模な機械学習およびニューラル・ネットワーク・モデルを処理することに関連している。より詳細には、本発明は、メモリ・フットプリントを減らす計算データ・フロー・グラフに対する変更、すなわち、グラフの評価中に必要とされるメモリが少ないため、より大きいグラフまたはより大きいデータ・サンプル(または一度により多くのサンプル)が処理されることができることに関連している。
【背景技術】
【0002】
ニューラル・ネットワークは、ノードまたは「ニューロン」間の重み付けされた接続を含む、人間の脳の機能を模倣する人工ニューラル・ネットワーク(ANN:artificial neural network)である。深層ニューラル・ネットワーク(DNN:deep neural network)は、入力層と出力層の間に複数の「隠れ」層を含む人工ニューラル・ネットワークである。DNNの隠れ層は、データのより高い抽象的表現を特徴とする複雑な非線形関係のモデル化を可能にし、各隠れ層が前の層の非線形変換を決定する。大規模な深層ニューラル・ネットワークのトレーニングは、困難な計算問題である。素晴らしい性能を有するグラフィック・プロセッサ(GPU:graphical processors)の採用によって、手書きの数字(MNIST)および小さい画像(CIFR 10)を認識することから、高解像度画像(ImageNet)を分類することへの移行が初めて可能になった。GPUの計算性能の重要な要因は、高速なメモリである。しかし、GPUメモリは、コンピュータのメイン・メモリ(CPUメモリ)よりもはるかに小さい。グラフィック・プロセッサ(GPU)メモリのサイズは、DNNの深さとデータ・サンプルのサイズの両方を制限する。その結果、画像のサイズおよび解像度に対する制約が存在することが多く、このことがDNNの精度に影響を与える。メモリ制約は、データによって占められるメモリを減らすことによって軽減されることができる。実施形態例では、GPUがメモリ内のデータをCPUに送信して、追加のメモリ空間を解放し、その後、追加のメモリ空間を意図された機能に使用した後に、CPUからデータを取り出すことができる。
【発明の概要】
【0003】
本発明の実施形態は、ノードのセットおよびエッジのセットを含んでいる基礎になるデータ・フロー・グラフ内のメモリ節約動作の挿入点を自動的に決定することによって、ニューラル・ネットワークを処理している間の全体的なGPUメモリ使用量を減らすための方法、システム、およびコンピュータ・プログラム製品を提供する。
【0004】
実施形態では、前述したような全体的なGPUメモリ使用量を減らすための方法は、入力テンソルのセットに対してテンソル・タイミング・スラック(TTS:tensor timing slacks)を計算し、しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、入力テンソルのセットから入力テンソルの候補リスト(SI)を集め、しきい値(thS)を満たすサイズを有する入力テンソルを維持するようにSIをフィルタリングし、このフィルタリングに基づいて、SIを使用して動作の挿入点を決定する。
【0005】
実施形態では、動作は、削減動作および復元動作の組み合わせであり、削減動作は、中央処理装置(CPU:central processing unit)メモリへのコピー動作および圧縮動作のいずれかまたは両方を含み、復元動作は、CPUメモリからのコピー動作および解凍動作のいずれかまたは両方を含む。
【0006】
実施形態では、TTSを計算することは、入力テンソルを使用してタイミング解析を実行することを含む。
【0007】
実施形態では、タイミング解析は、入力テンソルのテンソル到着時間(TAT:tensorarrival time)、テンソル必要時間(TRT:tensor required time)、およびテンソル・タイミング・スラック(TTS)の値を初期化することと、Qが空ではない間、入力テンソルのセットQについて、除外のためにQ内のノードqを選択するステップ、Qからqを除外するステップ、およびqの後続の入力テンソルsごとに、qのTATに等しくなるようにsのTATを設定するステップを実行することとを含む。
【0008】
実施形態では、初期化することは、不明の値になるように、またはゼロになるように、TAT、TRT、およびTTSの値を初期化することを含む。
【0009】
実施形態では、ノードnのすべての入力が既知のTAT値を有し、nは、sが入力テンソルであるノードであり、この方法は、入力テンソルのセットQに対して、nの入力sのTATのうちの最大値になるようにnのTRTを設定するステップと、nのTRTとsのTATの差としてnの各入力iのTTSを設定するステップと、ノードの遅延によって増やされたnのTRTに基づいてnのTATを設定するステップと、nをQに含めるステップとをさらに実行することをさらに含む。
【0010】
実施形態では、データ・フロー・グラフが対(N,E)を含み、Nはノードのセットを含み、Eはハイパーエッジのセットを含み、N内の特定のノードが、1つまたは複数のテンソルに対する1つまたは複数の演算子を実装する。
【0011】
実施形態では、特定のノードがトリプレット(f,I,O)を含み、fは特定のノードによって実装される演算子の関数であり、Iは特定のノードの入力テンソルのセットであり、Oは演算子に基づいて生成される特定のノードの出力のセットである。
【0012】
実施形態では、ハイパーエッジは、テンソルが、テンソルを生成する演算子から、テンソルを引数として使用する演算子に、どのように渡されるかを定義する。
【0013】
実施形態では、ハイパーエッジが対(s,H)を含み、sはノードの出力であり、Hはノードの入力のセットである。
【0014】
実施形態では、この方法は、動作に対応するサブグラフ・ノードをデータ・フロー・グラフに挿入することをさらに含む。
【0015】
実施形態では、挿入することは、新しいデータ・フロー・グラフを生成するか、または既存のデータ・フロー・グラフを変更する。
【0016】
実施形態では、挿入することは新しいデータ・フロー・グラフを生成し、新しいデータ・フロー・グラフは、完全なデータ・フロー・グラフまたは部分的なデータ・フロー・グラフを含む。
【0017】
実施形態では、この方法は、この挿入に基づいてデータ・フロー・グラフを使用して入力テンソルのセットを処理することと、この処理に基づいて出力を生成することとをさらに含む。
【0018】
実施形態では、動作がメモリ削減動作であり、この方法は、メモリ削減動作に対応するメモリ削減サブグラフ・ノードを挿入することをさらに含む。
【0019】
実施形態では、挿入することは、第1のハイパーエッジを介して第1のノードをメモリ削減サブグラフ・ノードに接続することであって、第1のノードがソース・ノードに対応する、接続することと、第2のハイパーエッジを介してメモリ削減サブグラフ・ノードを第2のノードに接続することであって、第2のハイパーエッジがシリアル化ハイパーエッジ(serialization hyperedge)を含み、第2のノードが中間ノードまたは宛先ノードに対応する、接続することとをさらに含む。
【0020】
実施形態では、挿入することは、第3のハイパーエッジを介して第1のノードを第2のノードに接続することをさらに含む。
【0021】
実施形態では、動作がメモリ復元動作であり、この方法は、メモリ復元動作に対応するメモリ復元サブグラフ・ノードを挿入することをさらに含む。
【0022】
実施形態では、挿入することは、第1のハイパーエッジを介して、第1のノードをメモリ復元サブグラフ・ノードに接続することであって、第1のハイパーエッジがシリアル化ハイパーエッジまたはプリフェッチ・ハイパーエッジ(prefetching hyperedge)を含む、接続することと、第2のハイパーエッジを介して、メモリ復元サブグラフ・ノードを第2のノードに接続することであって、第2のノードが宛先ノードに対応する、接続することと、第3のハイパーエッジを介して、メモリ削減サブグラフ・ノードをメモリ復元サブグラフ・ノードに接続することとをさらに含む。
【0023】
実施形態では、この方法は、ハイパーエッジを介してデータ・フロー・グラフの2つのノードを接続することをさらに含み、この接続することは、2つのノード間のハイパーエッジを介した直接接続と、1つまたは複数の追加のノードおよび2つのノード間のハイパーエッジを介した間接接続とのうちのいずれかを含む。
【0024】
実施形態では、この方法のステップは、少なくとも1つのメモリ削減動作および少なくとも1つのメモリ復元動作を実行するために、反復的に実行され、サブグラフ・ノードのセットをフロー・グラフに挿入する。
【0025】
実施形態では、この方法のステップを反復的に実行することは、ハイパーエッジのセットをフロー・グラフに挿入することを含み、ハイパーエッジのセットは、少なくとも1つのシリアル化ハイパーエッジ、または少なくとも1つのプリフェッチ・ハイパーエッジ、あるいは少なくとも1つのシリアル化ハイパーエッジおよび少なくとも1つのプリフェッチ・ハイパーエッジを含む。
【0026】
実施形態では、前述の方法は、1つまたは複数のコンピュータ・システムの1つまたは複数の有形のストレージ媒体に格納されたプログラミング命令として格納され、プログラミング命令を実行している1つまたは複数のコンピュータ・システムの1つまたは複数のプロセッサによって実行される。プログラミング命令は、コンピュータ・プログラミング製品として格納されてよい。
【0027】
1つの態様によれば、ニューラル・ネットワークを処理している間の全体的なGPUメモリ使用量を減らすための方法が提供されており、この方法は、ノードのセットおよびエッジのセットを含んでいる基礎になるデータ・フロー・グラフ内のメモリ節約動作の挿入点を自動的に決定することを含む。
【0028】
別の態様によれば、テンソル・タイミング・スラック(TTS)のセットおよび入力テンソルの候補リスト(SI)に基づいて、データ・フロー・グラフ内の動作の挿入点を選択することと、入力テンソルのセットに対してテンソル・タイミング・スラック(TTS)を計算することと、しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、入力テンソルのセットから入力テンソルの候補リスト(SI)を集めることと、しきい値(thS)を満たすサイズを有する入力テンソルを維持するようにSIをフィルタリングすることと、このフィルタリングに基づいて、SIを使用して削減および復元動作の挿入点を決定することとを含む方法が提供されている。
【0029】
別の態様によれば、ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよびノードPを使用してメモリ削減アクションを適用することを決定することと、ソース・ノードからサブグラフ・ノードAおよびノードPにデータを送信することと、ノードPの実行の前に、サブグラフ・ノードAがメモリ削減アクションを実行できるようにすることであって、メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、実行できるようにすることと、サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させることと、サブグラフ・ノードBの中央プロセッサ(CPU)からGPUにデータを送信し、データをGPUに復元することとを含む方法が提供されている。
【0030】
別の態様によれば、前記プログラムがコンピュータ上で実行された場合に、段落0027、0028、または0029のいずれかの方法を実行するように適応されたプログラム・コードの手段を含む、コンピュータ・プログラムが提供されている。
【0031】
別の態様によれば、ニューラル・ネットワークを処理している間の全体的なGPUメモリ使用量を減らすためのシステムが提供されており、このシステムは、ノードのセットおよびエッジのセットを含んでいる基礎になるデータ・フロー・グラフ内のメモリ節約動作の挿入点を自動的に決定するよう動作可能である。
【0032】
別の態様によれば、テンソル・タイミング・スラック(TTS)のセットおよび入力テンソルの候補リスト(SI)に基づいて、データ・フロー・グラフ内の動作の挿入点を選択することと、入力テンソルのセットに対してテンソル・タイミング・スラック(TTS)を計算することと、しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、入力テンソルのセットから入力テンソルの候補リスト(SI)を集めることと、しきい値(thS)を満たすサイズを有する入力テンソルを維持するようにSIをフィルタリングすることと、このフィルタリングに基づいて、SIを使用して削減および復元動作の挿入点を決定することとを実行するよう動作可能であるシステムが提供されている。
【0033】
別の態様によれば、ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよびノードPを使用してメモリ削減アクションを適用することを決定することと、ソース・ノードからサブグラフ・ノードAおよびノードPにデータを送信することと、ノードPの実行の前に、サブグラフ・ノードAがメモリ削減アクションを実行できるようにすることであって、メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、実行できるようにすることと、サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させることと、サブグラフ・ノードBの中央プロセッサ(CPU)からGPUにデータを送信し、データをGPUに復元することとを実行するよう動作可能であるシステムが提供されている。
【0034】
以下の図面を参照し、単に例として、本発明の好ましい実施形態について説明する。
【図面の簡単な説明】
【0035】
図1】実施形態例を実装できるデータ処理システムのネットワークのブロック図を示す図である。
図2】実施形態例を実装できるデータ処理システムのブロック図を示す図である。
図3】実施形態例に従う、データ・フロー・グラフを示す図である。
図4】実施形態例に従う、メモリ削減サブグラフを含むデータ・フロー・グラフを示す図である。
図5】実施形態例に従う、プリフェッチおよびシリアル化を含むデータ・フロー・グラフを示す図である。
図6】実施形態例に従う、データ・フロー・サブグラフを示す図である。
図7】実施形態例に従う、データ・フロー・サブグラフを示す図である。
図8】実施形態例に従う、データ・フロー・サブグラフを示す図である。
図9】実施形態例に従う、データ・フロー・サブグラフを示す図である。
図10A】実施形態例に従う、削減および復元動作の挿入点を決定するための例示的なプロセスのフローチャートを示す図である。
図10B】実施形態例に従う、タイミング解析を実行するための例示的なプロセスのフローチャートを示す図である。
図11】実施形態例に従う、メモリ・プロファイル・グラフを示す図である。
図12】実施形態例に従う、メモリ・プロファイル・グラフを示す図である。
図13】実施形態例に従う、グラフィック・プロセッサにおけるメモリ削減のための例示的なプロセスのフローチャートを示す図である。
【発明を実施するための形態】
【0036】
GPUは、計算を実行するか、または種々の機能を実行するために使用する特定のメモリ空間のみを有する。実施形態例は、GPUがデータをCPUに効率的に移動するか、またはGPU自体のデータを圧縮して、計算または機能あるいはその両方を実行するために必要な追加のメモリ空間を解放することができるということを認識している。スワップアウト・ノードは、入力テンソルをGPUからCPUに移動する。スワップイン・ノードは、データをCPUからGPUに戻す。GPUへのデータの復元は、データがさらなる計算に必要になるまで遅延される。
【0037】
実施形態例は、シリアル化が、テンソルのスワップと共に、GPUメモリ要件を最小限に抑えることができるということを認識している。テンソルのスワップおよびデータ圧縮は、削減に使用される。GPUが、データをCPUに転送するよりもはるかに高速にデータを圧縮するため、データ圧縮は、計算時間を大幅に短縮する。データ圧縮の適用は、単独で、失われる実行時間を最小限に抑え、メモリ空間を節約することができる。スワップされるテンソルの圧縮は、データ転送に起因して失われる時間を短縮することができる。
【0038】
実施形態例は、データ・フローの適切なシリアル化によってメモリ削減がどのように改善されるかを示す。実施形態例は、データ・フロー・グラフが、メモリ管理と共に、深層ニューラル・ネットワークをトレーニングするための効率的な技術であるということを認識している。データ・フロー・グラフは、GPUからCPUに発生するテンソル・フローまたはデータ・フロー、およびデータ処理システムのノードのうちのあるデータ・ノードから別のデータ・ノードに発生するデータ・フローを示す。メモリ管理は、追加のメモリ空間を効率的に解放することができるGPUを参照する。通常、データ・フロー・グラフは、入力データを受け取って出力データを生成する計算ノードを有する。GPUは、これらのテンソルまたはデータのタイムリーな割り当ておよび割り当て解除の役割を担う。しかし、GPUメモリの不足は、データ・フロー・グラフおよび対応するテンソルのサイズに厳しい制限を課す可能性がある。
【0039】
実施形態例は、データをCPUに転送することによって、GPUが追加のメモリ空間をどのように解放することができるかを示す。しかし、GPUがデータの一部をCPUに転送して追加のメモリ空間を解放する、GPUとCPUの間のデータのスワップに伴う問題は、データがデータ処理システム内を流れ、さまざまなノードを通って送信されているときに、タイムリーな方法でこのプロセスを実行する方法である。大量のデータをGPUからCPUにスワップすることは、時間がかかる可能性がある。スワップアウト・ノードは、データまたは入力テンソルをGPUメモリからCPUメモリに移動する。スワップイン・ノードは、メモリ復元時に、データまたは入力テンソルをGPUメモリに戻す。したがって、制限されたGPUメモリを使用して大きいデータ・フロー・グラフが実行されることができる。GPUとCPUの間のテンソルのスワップおよびデータ圧縮は、効果的に使用され、大きいデータ・フロー・グラフを実行するために必要とされる追加のメモリ空間を解放することができる。実施形態例は、メモリ節約に関与するテンソルが多いほど、GPU内で使用できる追加のメモリ空間のため、メモリ節約が向上し、GPUメモリ内で処理できるデータ・フロー・グラフが大きくなるということを認識している。さらに、GPUは、大きいサイズのデータをCPUに移動するよりも時間がかからない可能性がある、より多くの数のより小さいか、または中規模のテンソルを転送してメモリ空間を解放することを決定することもできる。
【0040】
実施形態例は、データ・フロー・グラフの実行の適切なシリアル化またはプリフェッチによって、メモリ削減のプロセスが改善されることができるということを認識している。CPUとのテンソルのスワップの結果として、GPUのメモリ要件が大幅に低減される。プリフェッチを使用すると、GPUへのデータの復元は、データが実際に必要とされるまで遅延されることができる。
【0041】
実施形態例は、GPUからCPUへ、およびCPUからGPUへなどの、あるデバイスから別のデバイスへのデータ転送が、著しく時間を要する可能性があるということを認識している。実施形態では、メモリ節約には、データ転送、圧縮、および解凍(解凍(decompress)という用語および解凍のその他の形態は、解凍(uncompress)および解凍のその他の形態と交換可能なように使用される)のための時間が発生するため、メモリ節約は、どの計算にも関与せずに十分に長い時間にわたってGPUメモリを占めるテンソルのみに適用されるべきである。したがって、GPUは、計算にも機能にも関与せずに、データ(テンソル)をCPUに転送し、同じデータをCPUから受信することができる。シリアル化によって、追加の構造的変更が、標準的なデータ送信エッジとは対照的に、制御依存関係エッジの形態で、データ・フロー・グラフに追加されることができる。GPUは、テンソル(データ)をCPUにスワップまたは転送し、一連の機能または計算を実行するために必要とされる追加のメモリ空間を解放することができる。
【0042】
実施形態例では、メモリ復元が遅延されることができる。追加の構造的変更が、制御依存関係エッジの形態で、データ・フロー・グラフに追加されることができる。GPUは、機能または計算あるいはその両方を実行するために、最初にCPUに転送したデータを回収することができる。ノードは、制御依存関係エッジをサブグラフ・ノードに適用し、ノードが実行を完了するまでメモリ復元を遅延させることができる。
【0043】
実施形態例では、GPUは、テンソルをCPUまたは別のデバイスとスワップしないことを決定することもできる。代わりに、GPUは、追加のメモリ空間を解放するために、テンソルを内部で圧縮することを決定することができる。シリアル化は、ノード間のデータ転送が再開するのを許可する前に、GPUの時間がデータの圧縮を開始し、追加のメモリ空間を解放することを可能にする。プリフェッチは、GPUが圧縮データを解凍する前に、ノードがデータを転送できるように、GPUがデータの解凍を遅延させることを可能にすることができる。
【0044】
実施形態例は、メモリ削減アクションおよびメモリ復元アクションを提供し、これらのアクションは、GPUがデータをCPUに転送して、計算または機能あるいはその両方を実行するための追加のメモリ空間を解放し、その後、追加のメモリ空間が使用された後に、CPUからデータを再取得することを可能にすることができる。実施形態例は、データをCPUに転送して追加のメモリ空間を解放し、その後、追加のメモリ空間が使用された後に、CPUからデータを再取得するための前述のメモリ削減およびメモリ復元を含むプログラム製品およびコンピュータ・システムも提供する。
【0045】
本発明を説明するために使用される実施形態例は、概して、深層学習システムにおいて、データ処理システム内のGPUにおけるメモリ管理の前述の問題に対処して解決する。実施形態例は、深層学習システム内のGPUにおけるメモリ管理のための方法、コンピュータ・プログラム製品、およびコンピュータ・システムを提供する。
【0046】
実施形態では、タイミング解析が、実行中にデータ・フロー・グラフに発生するイベントの時間モーメントを計算する。時間は、メモリ削減のためにテンソル(データ)を選択するための基準になる。タイミング解析は、特定のノードのすべての出力でのデータの計算が同時に完了するということも仮定する。
【0047】
タイミング解析で使用されるタイミングの量は、テンソル到着時間(TAT)、テンソル必要時間(TRT)、およびテンソル・タイミング・スラック(スラック時間)を含む。TATは、データの計算が完了し、データが演算子/ノードに使用可能になる時間である。TRTは、ノードの入力でのデータがノードの実行に必要とされる時間である。TTSは、TRTとTATの間の差である。
【0048】
タイミング解析アルゴリズムは、データ・フロー・グラフ内のTAT、TRT、およびTTSを不明になるように初期化することから開始する。データ・フロー・グラフのソース・ノードごとに、TAT、TRT、およびTTS=0にする。TAT、TRT、およびTTSを含むタイミング解析を実行するために、任意のノードがデータ・フロー・グラフから選択されることができる。
【0049】
メモリ節約のための候補テンソルを選択する基本的な基準としては、テンソルのサイズ、テンソル・タイミング・スラック、およびテンソルの総数などが挙げられる。小さいテンソルは、データのスワップの最良の候補ではないことがある。これに対して、より大きいテンソル・タイミング・スラックは、より長くCPUメモリ内に残るか、または圧縮された状態のままである可能性がある。さらに、メモリ節約に関与するより多くの数のテンソルは、他の計算のためにより多くのGPUメモリを解放する可能性がある。
【0050】
実施形態例では、データ・フロー・グループ内の1つまたは複数のノードを識別するために、タイミング解析が使用されることができる。データ・フロー・グラフ内のノードのうちの、最大のメモリ要件を有する出力データを生成する1つまたは複数のノードが、識別されることができる。「シリアル化」および「プリフェッチ」などの構造的修飾語句(structural modifiers)が、データ・フロー・グラフ内の1つまたは複数のノードに挿入されることができる。あるノードの別のノードに対する制御依存関係を定義することによって、データ・フロー・グラフのノードのシリアル化が実行される。ノードAの実行が完全に完了する前に、ノードBの実行は開始しない。これは、ノードAの実行が完了する前に、ノードBの出力テンソルが割り当てられないということを意味する。プリフェッチは、テンソルの再構築またはメモリ復元を遅延させるために、あるノードから別のノードへの制御依存関係エッジを呼び出すことによって実行される。制御依存関係エッジを適用するノードは、テンソルの再構築またはメモリ復元が行われる前に、実行を完了する。
【0051】
実施形態は、GPUがデータをCPUに転送して、1つまたは複数の機能または計算を実行するための追加のメモリ空間を解放することによって、GPU内のメモリ管理のための方法を提供する。この方法は、CPUが復元データをGPUに戻すことができる、メモリ復元も含む。別の実施形態は、GPUがデータをCPUに転送して追加のメモリ空間を解放するためのプログラム命令を含む、コンピュータ・プログラム製品を提供する。コンピュータ・プログラム製品は、GPUがCPUからデータを再び受信できるようにするために、メモリ復元を含むプログラム命令も含む。別の実施形態は、GPUがデータをCPUに転送するためのプログラム命令を含むコンピュータ・システムを提供する。コンピュータ・システムは、メモリ復元を使用してデータをGPUに返送するためのプログラム命令も含む。
【0052】
完了時間とは、ノードでテンソルまたはデータの計算が完了し、他のノードに使用可能になる時間のことを指す。定義によれば、スラック時間とは、動作全体の遅延を引き起こさずに特定の入力の到着が遅延されることができる時間の量、またはテンソルが計算に使用されるまで、ノードの入力でテンソルが待機している期間のことを指す。
【0053】
実施形態では、ノードがデータを送信および受信しているデータ処理システム内で、GPUなどのメモリ・デバイスの追加が採用される。GPUは、追加のメモリ空間の取得を引き起こす機能または計算を実行しようとする。機能または計算を実行するために、GPUは、データ処理システム内でデータをCPUに移動して追加のメモリ空間を解放することを決定する。メモリ削減時に、サブグラフ・ノードが、制御依存関係エッジをノードに適用し、GPUがデータをCPUに送信して追加のメモリ空間を解放できるようにする。シリアル化のルーティング中に、ノードは従属ノードであり、サブグラフ・ノードは制御ノードである。サブグラフ・ノードおよびノードがシリアル化され、ノードがその実行を行う前に、サブグラフ・ノードがその実行を行う。ノードがデータを他のノードに送信するときに、別の構造的変更がデータ・フロー・グラフに追加され、ノードの実行をシリアル化することができる。実施形態例は、複数の構造的変更をデータ・フロー・グラフに追加することができ、ノードが出力データを別のノードに送信する前に、GPUがCPUへのデータの送信の実行を行う。
【0054】
GPUが意図された機能のための追加のメモリ空間の使用を終了したときに、GPUは、最初にCPUに転送したデータを再取得することができ、メモリ復元が発生することができる。別のノードが、制御依存関係エッジを別のサブグラフ・ノードに適用することができる。制御依存関係エッジが適用された結果として、復元されたデータを受け取る宛先ノードが復元されたデータを必要とするまで、および制御依存関係エッジを適用した制御ノードが実行を完了するまで、復元されたデータが送信されるのが遅延される。CPUは、制御依存関係エッジを適用したノードが実行を完了したときに、GPUに復元されるデータを宛先ノードに送信することができる。
【0055】
実施形態では、GPUは、データをCPUに送信せずに、比率によってデータを圧縮し、望ましい機能または計算を実行するための追加のメモリ空間を提供することもできる。GPUは、32ビットから16ビットにデータを圧縮して、追加のメモリ空間を作成することができる。他の実施形態例では、GPUは、異なる比率によって(すなわち、32ビットから24ビットに、または32ビットから8ビットに)データを圧縮することができる。サブグラフ・ノードは、データをソース・ノードから受信したノードに、制御依存関係エッジを適用する。GPUは、データの圧縮の実行を完了することができる。ノードはシリアル化され、GPUがデータの圧縮を終了した後に、受信されたデータを送信する。制御依存関係エッジは、ノートが実行を完了するまで、他のサブグラフ・ノードがデータを解凍するのを遅延させることができる。GPUは、制御依存関係エッジを適用したノードが実行を完了するまで、解凍されたデータを受信することができない。
【0056】
本明細書において使用されるとき、データ・フロー・グラフという用語は、以下の例示的な非限定的定義のうちの1つに従って定義されてよい。
【0057】
定義1:データ・フロー・グラフは対(N,E)であり、Nはノードのセットであり、Eはハイパーエッジのセットである。ノードは、テンソルに対する演算子を実装する。各ノードはトリプレット(f,I,O)であり、fはノードによって実装される演算子の関数であり、Iは演算子の引数に対応するノードの入力のセットであり、Oは演算子によって計算されたテンソルに対応するノードの出力のセットである。ハイパーエッジは、テンソルが、テンソルを計算する演算子から、テンソルを使用する演算子に、引数としてどのように渡されるかを定義する。各ハイパーエッジは対(s,H)であり、sはノードの出力であり、Hはノードの入力のセットである。sおよびH={h1,h2,...}は、それぞれ、ハイパーエッジのソースおよびシンクのセットである。ハイパーグラフは、従来のグラフとは異なっている。従来のグラフのエッジは、常に1つのシンクを含む。ハイパーエッジは、複数のシンクを含んでよく、同じテンソルが、複数の演算子によって引数として使用される。ハイパーグラフのノードは、従来のグラフのノードよりも複雑な構造を有する。異なる演算子の引数および結果は、異なる意味、サイズ、および次元を有し得る。したがって、ハイパーグラフのノードの入力および出力が識別され、一意にラベル付けされ得る。従来のグラフのノードは、単一の引数および単一の結果を含む演算子のみを表すことができる。ハイパーエッジのソースおよびシンクをノードの入力および出力として定義することに加えて、ハイパーエッジのソース・ノードおよびシンク・ノードについて説明するのが便利である。これらは、次のように定義される。
【0058】
定義2:ハイパーエッジのソースおよびシンクに対応するノードは、それぞれ、ハイパーエッジのソース・ノードおよびシンク・ノードと呼ばれる。
【0059】
定義3:ノードの入力に接続されたハイパーエッジは、そのノードの受信ハイパーエッジ(incominghyperedge)と呼ばれ、そのノードの出力に接続されたハイパーエッジは、そのノードの送信ハイパーエッジ(outgoinghyperedge)と呼ばれる。
【0060】
定義4:ノードの後続の入力は、ノードの送信ハイパーエッジのシンクである。
【0061】
定義5:ノードの後続のノードは、そのノードの送信ハイパーエッジのシンク・ノードである。後続の入力および後続のノードを区別しているということに注意する。前者はノードの入力であり、後者はノード自体である。
【0062】
したがって、1つまたは複数の実施形態は、メモリ管理を可能にする方法を提供する。さまざまな実施形態は、深層学習システムにおいてメモリ管理を可能にする方法を提供する。
【0063】
説明を明確にするために、どのような制限も意味せずに、いくつかの例示的な構成を使用して実施形態例が説明される。当業者は、本開示から、説明された目的を実現するための説明された構成の多くの変更、適応、および修正を思い付くことができるであろう。同じことが、実施形態例の範囲内で企図される。
【0064】
さらに、データ処理環境の簡略図が、図および実施形態例において使用される。実際のコンピューティング環境では、本明細書において示されず、説明されない追加の構造またはコンポーネント、あるいは示された構造またはコンポーネントと異なるが、本明細書に記載された機能に類似する機能のための構造またはコンポーネントが、実施形態例の範囲を逸脱せずに、存在し得る。
【0065】
さらに、単に例として、特定の実際のコンポーネントまたは仮想的コンポーネントに関して、実施形態例が説明される。さまざまな実施形態例によって説明されるステップは、データ処理環境内の説明された機能を提供することを目的とするか、または提供するように目的を変更されることが可能である、さまざまなコンポーネントを使用して適応されることが可能であり、そのような適応は、実施形態例の範囲内で企図される。
【0066】
実施形態例は、単に例として、特定の種類のステップ、アプリケーションに、およびデータ処理環境に関して説明される。これらおよびその他の同様のアーチファクトのどのような特定の明示も、本発明を制限するよう意図されていない。これらおよびその他の同様のアーチファクトの任意の適切な明示が、実施形態例の範囲内で選択されてよい。
【0067】
本開示における例は、単に説明を明確にするために使用されており、これらの実施形態例に制限していない。本明細書に示された利点は、例にすぎず、これらの実施形態例に制限するよう意図されていない。追加の利点または異なる利点が、特定の実施形態例によって実現され得る。さらに、特定の実施形態例が、上記の利点の一部またはすべてを含むか、あるいは上記の利点を何も含まなくてよい。
【0068】
図を参照し、特に図1および2を参照すると、これらの図は、実施形態例が実装され得る。データ処理環境の例示的な図である。図1および2は単なる例であり、さまざまな実施形態が実装され得る。環境に関して、どのような制限も主張または意味するよう意図されていない。特定の実装は、以下の説明に基づいて、示された環境に対して多くの変更を行ってよい。
【0069】
図1は、実施形態例を実装できるデータ処理システムのネットワークのブロック図を示している。データ処理環境100は、実施形態例を実装できるコンピュータのネットワークである。データ処理環境100は、ネットワーク102を含む。ネットワーク102は、データ処理環境100内で一緒に接続されているさまざまなデバイスとコンピュータの間の通信リンクを提供するために使用される媒体である。ネットワーク102は、ワイヤ、無線通信リンク、または光ファイバ・ケーブルなどの接続を含んでよい。
【0070】
クライアントまたはサーバは、ネットワーク102に接続された特定のデータ処理システムの例示的な役割にすぎず、これらのデータ処理システムの他の構成または役割を除外するよう意図されていない。サーバ104は、ネットワーク102に結合する。ソフトウェア・アプリケーションが、データ処理環境100内の任意の量子データ処理システムで実行され得る。図1のサーバ104内で実行されるとして説明された任意のソフトウェア・アプリケーションは、同様の方法で別のデータ処理システム内で実行されるように構成されることができる。図1のサーバ104内で格納または生成される任意のデータまたは情報は、同様の方法で別のデータ処理システム内で格納または生成されることができる。サーバ104などの古典的データ処理システムは、データを含んでよく、古典的コンピューティング・プロセスを実行するソフトウェア・アプリケーションまたはソフトウェア・ツールを有してよい。
【0071】
サーバ106は、ストレージ・ユニット108と共にネットワーク102に結合する。ストレージ・ユニット108は、さまざまな実施形態に関して本明細書において説明されているように、ニューラル・ネットワーク・トレーニング・データを格納するように構成される。サーバ106は、従来のデータ処理システムである。ソフトウェア・アプリケーションが、データ処理環境100内の任意の量子データ処理システムで実行され得る。説明された任意のソフトウェア・アプリケーションは、同様の方法で別のデータ処理システム内で実行されるように構成されることができる。
【0072】
クライアント110、112、および114も、ネットワーク102に結合される。サーバ106またはクライアント110、112、もしくは114などの従来のデータ処理システムは、データを含んでよく、従来のコンピューティング・プロセスを実行するソフトウェア・アプリケーションまたはソフトウェア・ツールを含んでよい。
【0073】
単なる一例として、そのようなアーキテクチャに限定することを意味せずに、図1は、実施形態の例示的な実装において使用できる特定のコンポーネントを示している。例えば、サーバ106およびクライアント110、112、114は、単なる一例として、サーバおよびクライアントとして示されており、クライアント/サーバ・アーキテクチャに限定することを意味していない。別の例として、実施形態例の範囲内で、ある実施形態は、示されているように、複数の従来のデータ処理システム、量子データ処理システム、およびデータ・ネットワークにわたって分散することができ、一方、別の実施形態は、単一の従来のデータ処理システムまたは単一の量子データ処理システム上で実装され得る。従来のデータ処理システム106、110、112、および114は、実施形態を実装するのに適しているクラスタ、パーティション、およびその他の構成内の例示的なノードも表している。
【0074】
デバイス132は、本明細書に記載された従来のコンピューティング・デバイスの例である。例えば、デバイス132は、スマートフォン、タブレット・コンピュータ、ラップトップ・コンピュータ、固定型もしくは携帯型のクライアント110、ウェアラブル・コンピューティング・デバイス、または任意のその他の適切なデバイスの形態をとることができる。図1の別の従来のデータ処理システム内で実行されるとして説明された任意のソフトウェア・アプリケーションは、同様の方法でデバイス132内で実行されるように構成されてよい。図1の別の従来のデータ処理システム内で格納または生成される任意のデータまたは情報は、同様の方法でデバイス132内で格納または生成されるように構成されてよい。
【0075】
サーバ106と、ストレージ・ユニット108と、古典的処理システム104と、量子処理システム140と、クライアント110、112、および114と、デバイス132とは、有線接続、無線通信プロトコル、またはその他の適切なデータ接続を使用して、ネットワーク102に結合し得る。例えば、クライアント110、112、および114は、パーソナル・コンピュータまたはネットワーク・コンピュータであってよい。
【0076】
図に示された例では、サーバ106は、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータを、クライアント110、112、および114に提供してよい。クライアント110、112、および114は、この例では、サーバ106のクライアントであってよい。クライアント110、112、114、またはこれらの任意の組み合わせは、これら自身のデータ、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションを含んでよい。データ処理環境100は、図に示されていない追加のサーバ、クライアント、およびその他のデバイスを含んでよい。
【0077】
データ処理環境100は、図に示されていない追加のメモリ、量子プロセッサ、およびその他のデバイスを含んでよい。図に示された例では、データ処理環境100はインターネットであってよい。ネットワーク102は、送信制御プロトコル/インターネット・プロトコル(TCP/IP:Transmission Control Protocol/Internet Protocol)およびその他のプロトコルを使用して互いに通信する、ネットワークおよびゲートウェイの集合を表し得る。インターネットの中心には、データおよびメッセージをルーティングする何千もの民間のコンピュータ・システム、政府機関のコンピュータ・システム、教育機関のコンピュータ・システム、およびその他のコンピュータ・システムを含む、主要なノード間またはホスト・コンピュータ間のデータ通信リンクのバックボーンがある。当然、データ処理環境100は、例えばインターネット、ローカル・エリア・ネットワーク(LAN:local area network)、または広域ネットワーク(WAN:widearea network)などの、多数の各種ネットワークとして実装されてもよい。図1は、さまざまな実施形態例に関するアーキテクチャの制限としてではなく、例として意図されている。
【0078】
用途の中でも特に、データ処理環境100は、実施形態例を実装できるクライアント/サーバ環境を実装するために使用され得る。クライアント/サーバ環境は、従来のクライアント・データ処理システムと従来のサーバ・データ処理システムの間の双方向性を使用することによってアプリケーションが機能するように、ソフトウェア・アプリケーションおよびデータをネットワーク全体に分散することを可能にする。データ処理環境100は、サービス指向アーキテクチャを採用してもよく、サービス指向アーキテクチャでは、ネットワーク全体に分散された相互運用可能なソフトウェア・コンポーネントを、整合性のある業務アプリケーションとして一緒にパッケージ化することができる。データ処理環境100は、クラウドの形態をとり、構成可能な計算リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供のクラウド・コンピューティング・モデルを採用してもよく、このモデルでは、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。
【0079】
図2を参照すると、この図は、実施形態例を実装できるデータ処理システムのブロック図を示している。データ処理システム200は、図1の古典的処理システム104、サーバ106、またはクライアント110、112、および114、あるいは別の種類のデバイスなどの従来のコンピュータの例であり、このコンピュータ内に、実施形態例のプロセスを実装するコンピュータ使用可能なプログラム・コードまたは命令が配置され得る。
【0080】
データ処理システム200は、従来のデータ処理システムまたはその構成も表しており、このデータ処理システム内に、実施形態例のプロセスを実装するコンピュータ使用可能なプログラム・コードまたは命令が配置され得る。データ処理システム200は、単に一例として、コンピュータとして説明されているが、これに限定されない。本明細書に記載されたデータ処理システム200の動作および機能の概要から逸脱することなく、他のデバイスの形態での実装が、タッチ・インターフェイスを追加することなどによって、データ処理システム200を変更してよく、図に示された特定のコンポーネントをデータ処理システム200から取り除いてもよい。
【0081】
図に示された例では、データ処理システム200は、ノース・ブリッジおよびメモリ・コントローラ・ハブ(NB/MCH:North Bridge and memory controller hub)202と、サウス・ブリッジおよび入出力(I/O)コントローラ・ハブ(SB/ICH:South Bridge and input/output (I/O) controller hub)204とを含むハブ・アーキテクチャを採用している。処理ユニット206、メイン・メモリ208、およびグラフィック・プロセッサ210が、ノース・ブリッジおよびメモリ・コントローラ・ハブ(NB/MCH)202に結合されている。処理ユニット206は、1つまたは複数のプロセッサを含んでよく、1つまたは複数の異種プロセッサ・システムを使用して実装されてよい。処理ユニット206は、マルチコア・プロセッサであってよい。グラフィック・プロセッサ210は、特定の実装において、アクセラレーテッド・グラフィックス・ポート(AGP:accelerated graphics port)を介してNB/MCH202に結合されてよい。
【0082】
図に示された例では、ローカル・エリア・ネットワーク(LAN)アダプタ212が、サウス・ブリッジおよびI/Oコントローラ・ハブ(SB/ICH)204に結合されている。オーディオ・アダプタ216、キーボードおよびマウス・アダプタ220、モデム222、読み取り専用メモリ(ROM:read only memory)224、ユニバーサル・シリアル・バス(USB:universalserial bus)およびその他のポート232、ならびにPCI/PCIeデバイス234が、バス238を介してサウス・ブリッジおよびI/Oコントローラ・ハブ204に結合されている。ハード・ディスク・ドライブ(HDD:Hard disk drive)または半導体ドライブ(SSD:solid-statedrive)226およびCD-ROM230が、バス240を介してサウス・ブリッジおよびI/Oコントローラ・ハブ204に結合されている。PCI/PCIeデバイス234は、例えば、ノートブック・コンピュータ用のイーサネット(R)・アダプタ、アドイン・カード、およびPCカードを含んでよい。PCIはカード・バス・コントローラを使用するが、PCIeはカード・バス・コントローラを使用しない。ROM224は、例えば、フラッシュ・バイナリ入出力システム(BIOS:binary input/output system)であってよい。ハード・ディスク・ドライブ226およびCD-ROM230は、例えば、IDE(integrated drive electronics)、シリアルATA(SATA:serialadvanced technology attachment)インターフェイス、またはeSATA(external-SATA)およびmSATA(micro-SATA)などの変形を使用し得る。スーパーI/O(SIO:super I/O)デバイス236が、バス238を介してサウス・ブリッジおよびI/Oコントローラ・ハブ(SB/ICH)204に結合されてよい。
【0083】
メイン・メモリ208、ROM224、またはフラッシュ・メモリ(図示されていない)などのメモリは、コンピュータ使用可能ストレージ・デバイスの例である。ハード・ディスク・ドライブまたは半導体ドライブ226、CD-ROM230、およびその他の同様に使用可能なデバイスは、コンピュータ使用可能ストレージ媒体を含むコンピュータ使用可能ストレージ・デバイスの例である。
【0084】
オペレーティング・システムが、処理ユニット206上で実行される。オペレーティング・システムは、図2のデータ処理システム200内の種々のコンポーネントを調整して制御する。オペレーティング・システムは、サーバ・システム、パーソナル・コンピュータ、およびモバイル・デバイスを含むが、これらに限定されない、任意の種類のコンピューティング・プラットフォーム用の、市販されているオペレーティング・システムであってよい。オブジェクト指向またはその他の種類のプログラミング・システムが、オペレーティング・システムと連動し、データ処理システム200上で実行されているプログラムまたはアプリケーションからのオペレーティング・システムに対する呼び出しを提供してよい。
【0085】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムの命令が、ハード・ディスク・ドライブ226上のコード226Aの形態などで、ストレージ・デバイスに配置され、処理ユニット206によって実行するために、メイン・メモリ208などの1つまたは複数のメモリのうちの少なくとも1つに読み込まれてよい。実施形態例のプロセスは、コンピュータ実装命令を使用して、処理ユニット206によって実行されてよく、これらのコンピュータ実装命令は、例えばメイン・メモリ208、読み取り専用メモリ224などのメモリ内、または1つまたは複数の周辺機器内に、配置されてよい。
【0086】
さらに、1つの事例では、コード226Aは、ネットワーク201Aを経由して、類似するコード201Cがストレージ・デバイス201Dに格納されているリモート・システム201Bからダウンロードされ得る。別の事例では、コード226Aは、ネットワーク201Aを経由してリモート・システム201Bにダウンロードされてよく、ダウンロードされたコード201Cが、ストレージ・デバイス201Dに格納される。
【0087】
図1~2のハードウェアは、実装に依って変化し得る。フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどの、その他の内部ハードウェアまたは周辺機器が、図1~2に示されているハードウェアに加えて、またはそれらのハードウェアの代わりに、使用されてよい。加えて、実施形態例のプロセスは、マルチプロセッサ・データ処理システムに適用されてよい。
【0088】
一部の例では、データ処理システム200は、オペレーティング・システム・ファイルまたはユーザによって生成されたデータあるいはその両方を格納するために、不揮発性メモリを提供するようにフラッシュ・メモリを使用して通常は構成された、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)であってよい。バス・システムは、システム・バス、I/Oバス、およびPCIバスなどの、1つまたは複数のバスを含んでよい。当然ながら、バス・システムは、通信ファブリックまたは通信アーキテクチャに接続された異なるコンポーネントまたはデバイス間のデータの転送を提供する任意の種類の通信ファブリックまたは通信アーキテクチャを使用して、実装されてよい。
【0089】
通信ユニットは、モデムまたはネットワーク・アダプタなどの、データを送信および受信するために使用される1つまたは複数のデバイスを含んでよい。メモリは、例えば、メイン・メモリ208であるか、またはノース・ブリッジおよびメモリ・コントローラ・ハブ202に見られるキャッシュなどの、キャッシュであってよい。処理ユニットは、1つまたは複数のプロセッサまたはCPUを含んでよい。
【0090】
図1~2に示された例および前述した例は、アーキテクチャの制限を意味するよう意図されていない。例えば、データ処理システム200は、モバイル・デバイスまたはウェアラブル・デバイスの形態をとることに加えて、タブレット・コンピュータ、ラップトップ・コンピュータ、または電話デバイスであってよい。
【0091】
コンピュータまたはデータ処理システムが仮想マシン、仮想デバイス、または仮想コンポーネントとして説明される場合、仮想マシン、仮想デバイス、または仮想コンポーネントは、データ処理システム200に示された一部またはすべてのコンポーネントの仮想化された明示を使用して、データ処理システム200の方法で動作する。例えば、仮想マシン、仮想デバイス、または仮想コンポーネントでは、処理ユニット206は、ホスト・データ処理システム内で使用可能なハードウェア処理ユニット206のすべてまたは一部の数の仮想化されたインスタンスとして明示される。メイン・メモリ208は、ホスト・データ処理システム内で使用可能であってよいメイン・メモリ208のすべてまたは一部分の仮想化されたインスタンスとして明示される。ディスク226は、ホスト・データ処理システム内で使用可能であってよいディスク226のすべてまたは一部分の仮想化されたインスタンスとして明示される。そのような場合、ホスト・データ処理システムはデータ処理システム200によって表される。
【0092】
図3を参照すると、この図は、データ処理システム200内のノード間のデータ転送を含むデータ・フロー・グラフを示している。図3は、後の図で説明される本発明によって提案されたメモリを節約する変更がない状態で示されている。図3に示されたノードは、ニューラル・ネットワークで実際に発生する可能性があるノードの一部である。さらに他の実施形態では、データ・フロー・グラフは、1000個以上のノードで構成されることができる。図3および説明される残りの図のノードは、データ項目(テンソル)を入力として受け取り、そのデータに対して動作し、新しいデータを出力に生成する。ノードは、入力データのすべてが使用可能になるたびに、実行されることができる。それに応じて、出力データを生成するノードがすでに実行されている。ソース・ノード300は、データを受信することができ、出力データをデータ処理システム200内の複数のノードに送信することができる。例えば、ソース・ノード300は、出力データを第2のノード302に送信することができる。第2のノード302は、出力データを第3のノード304に送信することもできる。さらに、第3のノード304は、出力データを第4のノード306に送信する。第4のノード306は、第3のノード304から受信された出力データを第5のノード308に送信することができる。ソース・ノード300は、出力データを第5のノード308および宛先ノード310にも送信する。第5のノード308は、第4のノード306およびソース・ノード300から受信された出力データを宛先ノード310にも送信する。データ・フロー・グラフ内のノード間のデータ転送のプロセスは、必要に応じて繰り返すことができる。データを送信するノードは、完了時間を有する。完了時間とは、ノードでデータの計算が完了し、他のノードに使用可能になる時間のことを指す。スラック時間とは、動作全体の遅延を引き起こさずに特定の入力の到着が遅延されることができる時間の量、またはデータが計算に使用されるまで、ノードの入力でデータが待機している期間のことを指す。
【0093】
図4を参照すると、この図は、図3と類似する構成を有するデータ・フロー・グラフを示している。加えて、図4は、メモリ削減およびメモリ復元サブグラフの挿入を採用している。データ処理システム200内のGPUは、追加のメモリ空間を必要とする特定の計算または機能を実行するために必要なメモリを含んでいないことが多い。その結果、GPUは、例えば必要なメモリ空間を占めているデータをCPUに移動することができる。メモリ削減ノード301は、GPUがデータをCPUに転送し、追加のメモリ空間を必要とする必要な機能または計算を実行することを示している。第2のノード302は、ノード300の直後に実行され、それによって、第2のノード302自身の出力データにメモリ空間を割り当てることができ、それと同時に、ノード301が、データをCPUメモリにコピーしながらビジーになることがある。ノード301がコピーを完了し、入力テンソルによって保持されていたメモリを解放した後に、サブグラフ・ノード312は、直ちにそれ自身のメモリ復元アクションを開始することを止めるものがないため、単に、保存されたデータをCPUからGPUに取り戻す。
【0094】
さらに図4を参照すると、同一の一連のイベントが、第3のノード304、サブグラフ・ノード311および322、第4のノード306を含んでいる図4の右側に、メモリ削減/復元サブグラフの第2の呼び出しで発生している。第3のノード304は、出力データをサブグラフ・ノード311に送信する。サブグラフ・ノード311は、データをサブグラフ・ノード322に移動する。サブグラフ・ノード322は、データを第4のノード306に移動する。第4のノード306は、出力データを第5のノード308に送信する。第5のノード308は、データをサブグラフ・ノード312から受信する。第5のノード308は、出力データを宛先ノード310に送信する。並列実行では、第5のノード308が出力データを宛先ノード310に送信しているときに、サブグラフ・ノード312が、データを宛先ノード310に移動し続ける。
【0095】
図5を参照すると、ノード416および418でのデータの使用が差し迫っておらず、したがって、サブグラフ・ノード401によって表されたメモリ削減アクションによって遅延されることができるということが決定された。このアクションは、サブグラフ・ノード413によって表されたメモリ復元アクションの形態で、対の片方を必要とする。サブグラフ・ノード401および413を含んでいる挿入されたサブグラフの1つの意図は、ノード400の出力テンソル・データを長時間にわたって格納する必要性からGPUメモリを解放することである。ノード402がそのテンソルを利用した後に、ノード416が実行されるまで、そのテンソルは必要とされない。挿入されたサブグラフの一部を形成するさらに3つの追加の準備(すなわち、破線矢印によってデータ・フロー・グラフ内で表された、「シリアル化」および「プリフェッチ」という単語でラベル付けされた追加の制御依存関係エッジ)が存在する。第1のエッジは、サブグラフ・ノード401からノード402へのエッジである。
【0096】
さらに図5を参照すると、ノードAからノードBへの制御依存関係エッジの意味は、ノードBの実行をノードAに依存させることである。実施形態では、ノードBは、ノードAが動作を完了するまで、ノードBの動作の開始を待たなければならない。そのため、制御依存関係エッジは、従属ノードBの入力へのノードAのデータ出力と見なされることができ、実際のデータは転送されないが、代わりに完了メッセージが信号伝達される。サブグラフ・ノード401から第2のノード402への制御依存関係エッジを挿入する理由は、サブグラフ・ノード401によるメモリ削減が完了するまでノード402の実行が遅延されることを保証するためである。そうしないと、ソース・ノード400が実行された後に、ノード402が直ちに実行され、追加のGPUメモリをノード402自身の出力テンソルに割り当てるであろう。これが、サブグラフ・ノード401からノード402への「シリアル化」エッジによって回避される。サブグラフ・ノード401およびノード402は、直列に実行されることが保証される。サブグラフ・ノード401は、ノード402の前に実行を完了する。ノード402は、出力データをノード404に送信することができる。ノード404は、出力データをノード406およびノード414に送信することができる。サブグラフ・ノード411およびノード408によって、サブグラフ・ノード401およびノード402と同一の役割が果たされる。
【0097】
さらに図5を参照し、メモリ復元ノード413を参照すると、反対に、さらなる準備なしで、サブグラフ・ノード401が実行を完了した後に、メモリ復元ノード413が直ちに実行される。しかしこれでは、メモリ削減の目的を果たさない。実施形態では、データを入力として必要とするノード(ノード416および418)が実行される準備ができるまで、サブグラフ・ノード413の実行を遅延させることが必須になることがある。したがって、サブグラフ・ノード413が制御ノードの完了を待機するように、制御依存関係エッジがサブグラフ・ノード413への入力として必要とされる。制御ノードは、追加の依存関係エッジが、許可されないグラフ内の循環を引き起こすため、ノード416であることも、ノード418であることもできない。制御ノードは、ノード416から上流にあるいずれかのノードであるべきである。ノード410は、出力データをノード412に送信する。ノード412は、出力データをノード414に送信する。したがって、「プリフェッチ」エッジをサブグラフ・ノード413に適用するために、ノード414が選択される。ノード414は、動作を完了するとすぐに、テンソルをノード416に出力し、それと同時に、「プリフェッチ」エッジを介して、サブグラフ・ノード413が復元アクションを開始してよいということをサブグラフ・ノード413に信号伝達する。復元アクションの開始は、復元アクションが完了するときまでに、復元されたデータを待機している1つまたは複数のノードが実行される準備ができているように、つまり、それらのノードの他の入力へのデータがすでに到着しているようになるべきである。
【0098】
図5に関して、第3の制御依存関係エッジ(「シリアル化」とラベル付けされた2番目のエッジ)が、ノード412からサブグラフ・ノード413に伸びるように図5に示されている。このエッジは、復元アクションの開始のための2番目の条件をサブグラフ・ノード413に提供する。この目的は、その後の復元アクション(この場合、サブグラフ・ノード423および413の復元アクションを含む)をシリアル化することである。サブグラフ・ノード423は、ノード412によって利用されるテンソルを復元する。ノード412は、実行を完了する(したがって、入力テンソルのためのメモリが解放されている)とすぐに、サブグラフ・ノード413が実行を開始することを許可するが、他のすべての入力も使用可能である場合にのみ、それを許可する。ノード413は、「プリフェッチ」信号がノード414から来るのを、さらにしばらく待機しなければならない。「プリフェッチ」信号が受信された後に、サブグラフ・ノード413は、テンソルを復元し、そのデータをノード416および418に送信する。現在、ノード416は使用可能なすべての入力を持っており、したがって、ノード418が入力として必要とする出力テンソルの生成を実行する。現在、ノード418も、使用可能な入力データを持っており、実行される。
【0099】
さらに図5を参照すると、ノード413を目標にされた2つの制御依存関係は、異なる役割を果たしている。「プリフェッチ」依存関係は、サブグラフ・ノード413が、ノード401によって減らされたデータを直ちに復元しないことを保証する。復元されたデータを待機しているノードが、そのノードの他の入力で準備ができるまで、遅延が存在することになる。「シリアル化」依存関係は、2つの復元が同時に発生しないことを保証し、2つの復元の同時の発生は、すべての復元されたテンソルのための多すぎるメモリ使用量を同時に引き起こす可能性がある。実施形態例では、「プリフェッチ」が「シリアル化」より後に開始されるため、「プリフェッチ」信号は、「シリアル化」信号を支配すると言われることができる。さらに他の実施形態例では、「シリアル化」が「プリフェッチ」信号を支配することができる。
【0100】
図6を参照すると、GPUがデータをCPUに移動して、1つまたは複数の機能または計算を実行するためのメモリ空間を解放する実施形態が示されている。図5におけるように、シリアル化およびプリフェッチが利用される。
【0101】
さらに図6に関して、メモリ削減アクションおよびメモリ復元アクションに対処する挿入されたサブグラフの特定の呼び出しが示されている。ここでは、GPUメモリからの受信テンソルをCPUメモリにコピーするための動作を含む単一のノードによって、メモリ削減動作が表されている。GPUメモリからCPUメモリにスワップされるデータは、スワップアウト・アクションであることができる。コピーのアクションが完了した後に、データを最初に保持していたGPUメモリは、現在、解放されていてよい。このアクションを表すノード501は、「CPUにコピーする」でラベル付けされている。このアクションの対の片方は、「CPUからコピーする」でラベル付けされた復元ノード507によって確立される。この目的は、テンソルをCPUメモリからGPUメモリに再びコピーすることである。コピーが開始する前に、復元されたテンソルを保持するためのGPUメモリが割り当てられなければならない。その後、そのテンソルを保持しているCPUメモリが解放され得る。
【0102】
図6を参照すると、ソース・ノード500がデータを受信し、このデータをノード501および第2のノード502に送信する。メモリ削減が開始し、ノード501(制御ノード)が、(点線および矢印を使用して「シリアル化」と示された)制御依存関係エッジを第2のノード502または従属ノードに対して有効な状態にする。第2のノード502の実行は、ノード501が実行を完了するまで待機しなければならない。したがって、ノード501および第2のノード502の実行がシリアル化される。第2のノード502は、出力データを別のノードに転送する。別のノード(図示されていない)は、(「シリアル化」によって示された)制御依存関係エッジをノード507に適用し、他のノードが出力データの送信を実行した後にノード507が復元されるデータの送信を実行することを保証することができる。第3のノード504は、出力データを第4のノード506に送信することができる。第4のノード506は、(「プリフェッチ」によって示された)制御依存関係エッジをノード507に適用することができる。したがって、ノード507は、第4のノード506が出力データを宛先ノード508に送信するまで、GPUに復元されるデータを転送することを遅延される。第4のノード506の実行後に、ノード507がデータを宛先ノード508に送信する。
【0103】
図7を参照すると、データ転送およびメモリ管理を示す別のデータ・フロー・グラフが示されている。GPUは、データをCPUに移動して、1つまたは複数の大きい機能または計算を実行するために必要なメモリ空間を解放することを決定するだけではなくてよい。GPUは、データをCPUに移動せずに必要なメモリ空間を取得するために、比率(すなわち、32ビットから16ビットに、32ビットから8ビットになど)によってデータを圧縮することを決定してもよい。他の実施形態例では、GPUは、種々の方法でデータを圧縮することができる。この実施形態例では、GPUは、32ビット浮動小数点数から16ビット浮動小数点数に、大きいテンソルなどのデータを圧縮する(図11を参照)。言い換えると、GPUは、32ビットから16ビットにデータを圧縮し、機能または計算あるいはその両方を実行するためのメモリ空間を解放することができる。
【0104】
さらに図7を参照すると、ソース・ノード600が入力データを受信し、このデータをノード601および第2のノード602に送信する。ノード601は、制御依存関係エッジ(「シリアル化」)を適用する制御ノードであり、第2のノード602は従属ノードである。第2のノード602は、ノード601が実行を完了するまで待機する。ノード601がデータを圧縮してメモリ空間を解放した後に、第2のノード602が出力データを送信する。別のノード(図示されていない)が、ノード606に対して制御依存関係エッジ(「シリアル化」)を有効な状態にすることができる。ノード606は、他のノードが実行を完了するまで、データを解凍するのを待つ。第3のノード609は、データを受信し、出力データを第4のノード605に送信する。第4のノード605は、サブグラフ・ノード606に対して制御依存関係エッジ(「プリフェッチ」)を有効な状態にすることができる。ノード606は、第4のノード605がそれ自身の実行を完了し、出力データを宛先ノード607に送信するまで、データを解凍して復元するのを待つ。第4のノード605の実行後に、ノード606は実行を完了することができる。データが解凍され、宛先ノード607に送信されることができる。
【0105】
図8に関して、GPUは、データを圧縮し、圧縮データをCPUに転送して、追加のメモリ空間を解放することができる。別のノードがデータを次のノードに送信する前に、GPUがデータを圧縮し、圧縮データをCPUに送信する、メモリ削減が発生することができる。宛先ノードがデータを必要とするまで、CPUがデータを解凍してGPUに返送することが遅延される、メモリ復元が発生することができる。
【0106】
さらに図8に関して、ソース・ノード700がデータを受信し、このデータをノード701および第2のノード702に送信する。ノード701は、制御依存関係エッジを第2のノード702に適用する。ノード701がデータを圧縮し、圧縮データを送信し、圧縮データをCPUにコピーするまで、第2のノード702の実行が待機しなければならない。ノード707は、復元構造の一部である。したがって、サブグラフ・ノード701および第2のノード702の実行がシリアル化される。GPUは、追加のメモリ空間を使用して、1つまたは複数の機能または計算を実行することができる。第2のノード702は、出力データを次のノード(図示されていない)に送信することができる。ノード(図示されていない)は、制御依存関係エッジを、CPU上に圧縮データを含むノード707に適用することができる。実施形態では、ノード707は、他のノードによって制御依存関係が有効化されるまで、圧縮データをGPUに再びコピーするのを待たなければならない。ノード707は、他のノードの実行が完了した後に、圧縮データをGPUに再びコピーすることの実行を完了する。
【0107】
図8を参照すると、第3のノード704がデータを受信し、出力データを第4のノード706に送信する。第4のノード706は、ノード707に対して制御依存関係エッジを実行する。ノード707は、データを再びコピーし、このデータを「FP32に解凍する」とラベル付けされたノードに送信するのを待つ。制御依存関係入力が両方とも満たされるとすぐに、ノード707は、データをCPUメモリからGPUメモリに再びコピーし、解凍されるためにデータを送信する。解凍後に、復元されたデータが、ノード708に使用可能にされる。
【0108】
図9に関して、異なる宛先ノードを満たすために、復元アクションが重複するべきである状況が発生する可能性がある。ノード801によって表されたメモリ削減動作は単数であるが、この場合、実験データは、ノード813および807によって表された、そのデータの2つの分離した復元アクションを有することが有益であるということを確立する。実施形態例では、GPUは、計算またはその他の機能あるいはその両方を実行するための追加のメモリ空間を解放するために必要な回数だけ、同じデータをCPUから取り戻すことができる。
【0109】
図9を参照すると、ソース・ノード800がデータをノード801および第2のノード802に送信する。ノード801から第2のノード802への制御依存関係エッジの追加によって、シリアル化が実施される。ノード801は、データをCPUメモリにコピーする。ノード801および第2のノード802の実行がシリアル化され、ノード801の実行後に、第2のノード802が出力データを次のノード(図示されていない)に送信する。この図は、メモリ復元サブグラフの2つのインスタンスを、ノード807および813の形態でさらに示している。ノード807、813は両方とも、前の図で説明されたように、シリアル化およびプリフェッチの準備を確立する2つの受信制御依存関係をそれぞれ有している。
【0110】
さらに図9を参照すると、第3のノード804がデータを受信し、出力データを第4のノード806に送信する。第4のノード806は、制御依存関係エッジをノード807に適用することができる。ノード807は、第4のノード806が実行を完了するまで、CPUからデータを取り出して宛先ノード808に送信するのを待つ。ノード807は、復元されたデータを宛先ノード808に送信する。
【0111】
図9に関して、同一の復元の状況が、ノード813、814、812、および810を含む。図示されていないノードが「シリアル化」エッジを実行して信号伝達し、ノード812の実行も「プリフェッチ」エッジを信号伝達した後に、ノード813の制御依存関係が満たされるとすぐに、ノード801の実行によってCPUメモリに格納されたデータと同じデータが、ノード813によってGPUに取り戻される。第5のノード810も、データを受信し、出力データを第6のノード812に送信することができる。第6のノード812は、ノード813への「プリフェッチ」制御依存関係のソースである。第6のノード812の実行が完了するまで、GPUへのCPUのデータの復元が遅延される。それに応じて、ノード813は、データを宛先ノード814に送信する。
【0112】
図10Aに関して、削減および復元動作の挿入点を決定するための例示的なプロセス1100のフロー図が示されている。方法1100は、プロセッサを使用して、有形のストレージ媒体(例えば、図1および2に関連して説明されたストレージ媒体)に格納されたプログラミング命令を実行することによって実践されてよい。
【0113】
この実施形態では、任意のユーザ構成情報が仮定されてよい。第1に、テンソル・タイミング・スラック(TTS)に対してしきい値thTTSが定義されてよく、このしきい値より大きいスラック値を有するテンソルのみが挿入点の候補と見なされる。第2に、テンソル・サイズに対してしきい値thSが定義されてよく、このしきい値より大きい(例えば、バイト単位の)サイズを有するテンソルのみが挿入点の候補と見なされる。第3に、検討するべき挿入の数に対して最大値Nが定義されてよい。
【0114】
これらの仮定に基づいて、ブロック1102で、タイミング解析によって、入力テンソルのセット(例えば、すべてのデータ・フロー・グラフのノードのすべての入力テンソル)に対してテンソル・タイミング・スラック(TTS)が計算される。
【0115】
ブロック1104で、データ・フロー・グラフのノードの入力テンソルのうちの、thTTSより大きいTTS値を有し、thSより大きいサイズを有するテンソルを含む、候補リストSIが集められる。
【0116】
判定ブロック1106で、候補リストSIのサイズがNより大きいかどうかに関する判定が行われる。
【0117】
ブロック1108(判定ブロック1106の「はい」の分岐)で、テンソル・サイズに従って候補リストSIが降順に並べ替えられる。リスト内の上位N個の要素のみがリストに維持され、その他のテンソルが候補リストSIから除去される。同様に、その他の並べ替えまたはしきい値化のメカニズムが使用されてもよい。
【0118】
ブロック1110(判定ブロック1106の「いいえ」の分岐またはブロック1108の完了のいずれか)で、候補リストSIが、他の図に関連して説明された本発明の実施形態に従うメモリ削減動作またはメモリ復元動作の挿入点の候補ノードのリストとして返される。
【0119】
図10Bに関して、タイミング解析を実行するための例示的なプロセス1200のフロー図が示されている。方法1200は、プロセッサを使用して、有形のストレージ媒体(例えば、図1および2に関連して説明されたストレージ媒体)に格納されたプログラミング命令を実行することによって実践されてよい。
【0120】
ここで図10Bを参照すると、示された実施形態に従ってプロセス1200が開始する。ステップ1202で、プロセス1200は、すべてのデータ・フロー・グラフのノードについて、TAT、TRT、およびTTSの値を不明になるように初期化する。ステップ1204で、プロセス1200は、Qがすべてのデータ・フロー・グラフのソース・ノードのセットになるように、データセットQを定義する。プロセス1200は、Qの要素のTAT、TRT、およびTTSの値をゼロ(0)になるようにさらに設定する。
【0121】
ステップ1206で、プロセス1200は、Qが空であるかどうかをチェックする。「はい」の場合、プロセスが終了する(ステップ1218)。しかし、「いいえ」の場合(すなわち、Qが空でない間)、プロセス1200はQの任意の要素qを選択し(ステップ1208)、qをQから除外する。
【0122】
ステップ1210で、プロセス1200は、qのすべてのシンク入力sが処理されたかどうかを判定する。「はい」の場合、プロセス1200は次のqを検討する(ステップ1206で実行されるチェック)。しかし、「いいえ」の場合、プロセス1200は、ステップ1212で提供されているようにsを処理し、それによって、プロセス1200はsのTATを、ノードのqのTATに等しくなるように設定する。プロセス1200は、ノードの入力sが属するノードになるように、(ステップ1212で)nをさらに定義する。プロセス1200は、ノードnのすべての入力iが既知のTAT値を有しているかどうかを判定する(ステップ1214)。「いいえ」の場合、プロセス1200は、次のsを検討し、ステップ1210で識別されているように、qの残りのシンク入力sを処理するためのwhileループとして反復する。
【0123】
しかし、「はい」の場合(ステップ1214での判定)、プロセス1200はステップ1216に進み、ステップ1216で、プロセス1200は、ノードnのTRTを、ノードnの入力のTATの最大値として設定し、各入力IのTTSを、nのTRTとiのTATの差として設定し、ノードnのTATを、対応するノードの遅延によって増やされたTRTとして設定し、nをQに含める。
【0124】
Qが空である場合(ステップ1206で決定される)、プロセス1200が終了し(ステップ1218)、それによって、前述のステップを通して、すべてのノードのTAT、TRT、およびTTSの値が決定された。
【0125】
実施形態では、プロセス1200において説明されたようなタイミング解析が、データ・フロー・グラフをソースからシンクにトラバースし、このプロセスによって実装された定義に従ってTAT、TRT、およびTSSを計算する。この計算は、データ・フロー・グラフのサイズにおいて時間的に線形な方法で実行される。
【0126】
ここで図11を参照すると、上の実施形態例において説明されたGPUのメモリ・プロファイル・グラフが示されている。実施形態例のGPUは、16ギガバイト(GB)のメモリを含んでいる。他の実施形態例では、GPUはさらに大きいメモリ空間を含むことができる。GPUが機能および計算を実行するにつれて、メモリ空間が残っていないピークに達するまで、ますます多くのメモリが意図された機能および計算に割り当てられる。ピークに達した後に、最後に割り当てられたメモリが最初に解放されて、メモリが解放される。
【0127】
図12に関して、上の実施形態例において説明されたGPUのメモリ・プロファイル・グラフが示されている。GPUが、上で図7および8において示されたように、内部のデータを圧縮して追加のメモリ空間を作成することを決定した場合、GPU内の大きいデータ・テンソルが32ビット浮動小数点数から16ビット浮動小数点数、または32ビットから16ビットに圧縮される。その結果、GPU内のメモリがピークに達する前に、メモリ空間の半分が解放され、メモリ内のデータのバッチ・サイズが2倍になる。
【0128】
図13に関して、実施形態に従ってさまざまな機能を実行するための例示的なプロセス1000のフロー図が示されている。ブロック1002で、ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよびノードPを使用してメモリ削減アクションを適用するという決定が行われる(例えば、図5との関連において、ノードAはサブグラフ401のことを指すことができ、ノードPはノード402のことを指すことができる)。ブロック1004で、ソース・ノードがデータをサブグラフ・ノードAおよびノードPに送信する。ブロック1006で、サブグラフ・ノードAが制御依存関係エッジをノードPに適用する。サブグラフ・ノードAおよびノードPの実行がシリアル化される。ノードPの前にサブグラフ・ノードAが実行される。ここでは、サブグラフ・ノードAの動作は、GPUメモリからの受信テンソルをCPUメモリにコピーすることである。GPUメモリからCPUメモリにスワップされるデータは、スワップアウト・アクションであることができる。コピーのアクションが完了した後に、データを最初に保持していたGPUメモリは、現在、解放されていてよい。GPUは、追加のメモリ空間を使用して、1つまたは複数の機能または計算を実行することができる。ブロック1008で、ノードPが出力データをノードQに送信する。ブロック1010で、ノードQが制御依存関係エッジをサブグラフ・ノードBに適用する。制御依存関係エッジは、ノードQが実行を完了するまでサブグラフ・ノードBがメモリ復元アクションを遅延させることを保証する。復元されたデータを待機しているノードが、そのノードの他の入力で準備ができるまで、遅延が存在することになる。ブロック1012で、ノードQが出力データを宛先ノードに送信する。さらに、ブロック1014で、サブグラフ・ノードBが復元されたデータを宛先ノードに送信する。
【0129】
ここで、本発明の一部の実施形態が、さらに一般的に説明される。以下の説明では、必要に応じて、1つまたは複数の図が直接参照されることがあるが、実施形態が特定の図に限定されないということが理解されるべきである。
【0130】
本発明の実施形態によれば、(例えば、定義1~5に従って上で定義されたように)ノードのセットおよびエッジのセットを含んでいるニューラル・ネットワークのデータ・フロー・グラフを処理するための方法が提供される。この方法のステップは、例えば図10Aおよび10Bにおいて説明されたように実行され、例えば図3~9に関連して説明されたようにデータ・フロー・グラフを生成するか、またはデータ・フロー・グラフを変更する。この方法のステップは、図1~2に関連して説明されたストレージ・デバイスなどの、コンピュータ・システムの有形のストレージ・デバイスに(例えば、コンピュータ・プログラム製品として)格納される。
【0131】
この方法は、入力テンソルのセットに対してテンソル・タイミング・スラック(TTS)を計算し、しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、入力テンソルのセットから入力テンソルの候補リスト(SI)を集め、しきい値(thS)を満たすサイズを有する入力テンソルを維持するようにSIをフィルタリングし、このフィルタリングに基づいて、SIを使用して動作の挿入点を決定する。
【0132】
この方法の実施形態によれば、動作は、削減動作および復元動作の組み合わせである。削減動作は、中央処理装置(CPU)メモリへのコピー動作および圧縮動作のいずれかまたは両方を含む。復元動作は、CPUメモリからのコピー動作および解凍動作のいずれかまたは両方を含む。
【0133】
この方法の実施形態によれば、TTSを計算することは、入力テンソルを使用してタイミング解析を実行することを含む。
【0134】
この方法の実施形態によれば、タイミング解析は、入力テンソルのテンソル到着時間(TAT)、テンソル必要時間(TRT)、およびテンソル・タイミング・スラック(TTS)の値を初期化することと、Qが空ではない間、入力テンソルのセットQについて、除外のためにQ内のノードqを選択するステップ、Qからqを除外するステップ、およびqの後続の入力テンソルsごとに、qのTATに等しくなるようにsのTATを設定するステップを実行することとを含む。
【0135】
この方法の実施形態によれば、初期化することは、不明の値になるように、またはゼロになるように、TAT、TRT、およびTTSの値を初期化することを含む。
【0136】
この方法の実施形態によれば、ノードnのすべての入力が既知のTAT値を有し、nは、sが入力テンソルであるノードであり、この方法は、入力テンソルのセットQに対して、nの入力sのTATのうちの最大値になるようにnのTRTを設定するステップと、nのTRTとsのTATの差としてnの各入力iのTTSを設定するステップと、ノードの遅延によって増やされたnのTRTに基づいてnのTATを設定するステップとをさらに実行することと、nをQに含めることとをさらに含む。
【0137】
この方法の実施形態によれば、データ・フロー・グラフが対(N,E)を含み、Nはノードのセットを含み、Eはハイパーエッジのセットを含み、N内の特定のノードが、1つまたは複数のテンソルに対する1つまたは複数の演算子を実装する。
【0138】
この方法の実施形態によれば、特定のノードがトリプレット(f,I,O)を含み、fは特定のノードによって実装される演算子の関数であり、Iは特定のノードの入力テンソルのセットであり、Oは演算子に基づいて生成される特定のノードの出力のセットである。
【0139】
この方法の実施形態によれば、ハイパーエッジは、テンソルが、テンソルを生成する演算子から、テンソルを引数として使用する演算子に、どのように渡されるかを定義する。
【0140】
この方法の実施形態によれば、ハイパーエッジが対(s,H)を含み、sはノードの出力であり、Hはノードの入力のセットである。
【0141】
この方法の実施形態によれば、この方法は、動作に対応するサブグラフ・ノードをデータ・フロー・グラフに挿入することをさらに含む。
【0142】
この方法の実施形態によれば、挿入することは、新しいデータ・フロー・グラフを生成するか、または既存のデータ・フロー・グラフを変更する。
【0143】
この方法の実施形態によれば、挿入することは新しいデータ・フロー・グラフを生成し、新しいデータ・フロー・グラフは、完全なデータ・フロー・グラフまたは部分的なデータ・フロー・グラフを含む。
【0144】
この方法の実施形態によれば、この方法は、この挿入に基づいてデータ・フロー・グラフを使用して入力テンソルのセットを処理することと、この処理に基づいて出力を生成することとをさらに含む。
【0145】
この方法の実施形態によれば、動作がメモリ削減動作であり、この方法は、メモリ削減動作に対応するメモリ削減サブグラフ・ノードを挿入することをさらに含む。
【0146】
この方法の実施形態によれば、挿入することは、第1のハイパーエッジを介して第1のノードをメモリ削減サブグラフ・ノードに接続することであって、第1のノードがソース・ノードに対応する、接続することと、第2のハイパーエッジを介してメモリ削減サブグラフ・ノードを第2のノードに接続することであって、第2のハイパーエッジがシリアル化ハイパーエッジを含み、第2のノードが中間ノードまたは宛先ノードに対応する、接続することとをさらに含む。
【0147】
この方法の実施形態によれば、挿入することは、第3のハイパーエッジを介して第1のノードを第2のノードに接続することをさらに含む。
【0148】
この方法の実施形態によれば、動作がメモリ復元動作であり、この方法は、メモリ復元動作に対応するメモリ復元サブグラフ・ノードを挿入することをさらに含む。
【0149】
この方法の実施形態によれば、挿入することは、第1のハイパーエッジを介して、第1のノードをメモリ復元サブグラフ・ノードに接続することであって、第1のハイパーエッジがシリアル化ハイパーエッジまたはプリフェッチ・ハイパーエッジを含む、接続することと、第2のハイパーエッジを介して、メモリ復元サブグラフ・ノードを第2のノードに接続することであって、第2のノードが宛先ノードに対応する、接続することと、第3のハイパーエッジを介して、メモリ削減サブグラフ・ノードをメモリ復元サブグラフ・ノードに接続することとをさらに含む。
【0150】
この方法の実施形態によれば、この方法は、ハイパーエッジを介してデータ・フロー・グラフの2つのノードを接続することをさらに含み、この接続することは、2つのノード間のハイパーエッジを介した直接接続と、1つまたは複数の追加のノードおよび2つのノード間のハイパーエッジを介した間接接続とのうちのいずれかを含む。
【0151】
この方法の実施形態によれば、この方法のステップは、少なくとも1つのメモリ削減動作および少なくとも1つのメモリ復元動作を実行するために、反復的に実行され、サブグラフ・ノードのセットをフロー・グラフに挿入する。
【0152】
この方法の実施形態によれば、この方法のステップを反復的に実行することは、ハイパーエッジのセットをフロー・グラフに挿入することを含み、ハイパーエッジのセットは、少なくとも1つのシリアル化ハイパーエッジ、または少なくとも1つのプリフェッチ・ハイパーエッジ、あるいは少なくとも1つのシリアル化ハイパーエッジおよび少なくとも1つのプリフェッチ・ハイパーエッジを含む。
【0153】
本発明の別の実施形態によれば、方法が提供される。この方法は、テンソル・タイミング・スラック(TTS)のセットおよび入力テンソルの候補リスト(SI)に基づいて、動作のためのデータ・フロー・グラフ内の挿入点を選択する。
【0154】
実施形態では、この方法は、入力テンソルのセットに対してテンソル・タイミング・スラック(TTS)を計算することと、しきい値(thTTS)より大きい対応するTTS値を有する入力テンソルを使用して、入力テンソルのセットから入力テンソルの候補リスト(SI)を集めることと、しきい値(thS)を満たすサイズを有する入力テンソルを維持するようにSIをフィルタリングすることと、このフィルタリングに基づいて、SIを使用して削減および復元動作の挿入点を決定することとをさらに含む。
【0155】
実施形態では、TTSを計算することは、入力テンソルを使用してタイミング解析を実行することを含む。
【0156】
実施形態では、この方法は、動作に対応するサブグラフ・ノードをデータ・フロー・グラフに挿入することをさらに含む。
【0157】
実施形態では、挿入することは、新しいデータ・フロー・グラフを生成するか、または既存のデータ・フロー・グラフを変更する。
【0158】
実施形態では、挿入することは新しいデータ・フロー・グラフを生成し、新しいデータ・フロー・グラフは、完全なデータ・フロー・グラフまたは部分的なデータ・フロー・グラフを含む。
【0159】
実施形態では、この方法は、この挿入に基づいてデータ・フロー・グラフを使用して入力テンソルのセットを処理することと、この処理に基づいて出力を生成することとをさらに含む。
【0160】
本発明の実施形態によれば、方法が提供される。この方法は、ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよびノードPを使用してメモリ削減アクションを適用することを決定することと、ソース・ノードからサブグラフ・ノードAおよびノードPにデータを送信することと、ノードPの実行の前に、サブグラフ・ノードAがメモリ削減アクションを実行できるようにすることであって、メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、実行できるようにすることと、サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させることと、サブグラフ・ノードBの中央プロセッサ(CPU)からGPUにデータを送信し、データをGPUに復元することとを含む。
【0161】
実施形態では、この方法は、制御依存関係エッジをノードPに適用し、ノードPの前にサブグラフ・ノードAを実行できるようにすることをさらに含む。
【0162】
実施形態では、この方法は、ノードQによって生成される出力データより大きいメモリ要件を有する出力データを生成するノードPを決定することによって、制御依存関係エッジの挿入位置を決定することをさらに含む。
【0163】
実施形態では、この方法は、制御依存関係エッジをサブグラフ・ノードBに適用し、ノードQが実行を完了するまでメモリ復元アクションを遅延させることを含む。
【0164】
実施形態では、この方法は、メモリ削減アクションが完了するまでノードPの実行を遅延させることを含む。
【0165】
実施形態では、この方法は、GPUによって、追加のメモリ空間を使用して一連の計算を実行することを含む。
【0166】
実施形態では、この方法は、ノードQが実行を完了した後に、データをサブグラフ・ノードBから宛先ノードに送信することを含む。
【0167】
実施形態では、この方法は、データを圧縮して、GPUが1つまたは複数の機能を実行するための追加のメモリ空間を取得することを含む。
【0168】
実施形態では、この方法は、メモリ復元アクションを完了する前にデータを解凍することを含む。
【0169】
実施形態では、この方法は、宛先ノードによってデータが必要とされるまでメモリ復元アクションを遅延させることを含む。
【0170】
実施形態では、この方法は、ノードQが実行を完了した後にデータを解凍することを含む。
【0171】
実施形態では、この方法は、ノードQが実行を完了した後に、データをGPUに復元することを含む。
【0172】
実施形態では、この方法は、制御依存関係エッジを適用して、追加のメモリ復元アクションを実行できるようにするために、挿入位置を決定することを含む。
【0173】
実施形態では、この方法は、ノードQとサブグラフ・ノードBの間のメモリ復元アクションとは異なる時間間隔で、追加のメモリ復元アクションを実行することを含む。
【0174】
実施形態では、この方法は、データを圧縮して、GPUが1つまたは複数の機能を実行するための追加のメモリ空間を作成することと、ノードPの実行前に圧縮データをCPUにコピーすることと、CPUが圧縮データを受信した後に、ノードPから受信されたデータを送信することと、作成された追加のメモリ空間を使用してGPUにおいて1つまたは複数の機能を実行することとを含む。
【0175】
実施形態では、この方法は、メモリ復元アクションを遅延させて、GPUが早期にCPUからデータを再び受信するのを防ぐために必要とされる時間間隔を決定することを含む。
【0176】
本発明の別の実施形態によれば、コンピュータ使用可能プログラム製品が提供されてよい。コンピュータ・プログラム製品は、1つまたは複数のコンピュータ可読ストレージ・デバイスと、1つまたは複数のストレージ・デバイスのうちの少なくとも1つに格納されたプログラム命令とを備え、ストレージのプログラム命令は、本開示によって提供された実施形態に従って方法のステップを実行するためのプログラム命令を含む。
【0177】
本発明の別の実施形態によれば、コンピュータが提供されてよい。システムが、1つまたは複数のプロセッサと、1つまたは複数のコンピュータ可読メモリと、1つまたは複数のコンピュータ可読ストレージ・デバイスとを備え、プログラム命令が、1つまたは複数のメモリのうちの少なくとも1つを介して、1つまたは複数のプロセッサのうちの少なくとも1つによって実行するために、1つまたは複数のストレージ・デバイスのうちの少なくとも1つに格納され、ストレージのプログラム命令が、本開示によって提供された実施形態に従う方法のステップを実行することを含む。
【0178】
実施形態例におけるデータ・フロー・グラフでは、ノードの実行に必要とされる他のテンソルの準備ができるまで、より早く計算されたテンソルがGPUメモリを占める。計算されるのが早過ぎたテンソルは、大きいCPUメモリに移動されるか、または圧縮されるか、またはGPUメモリから削除されることもできる。それらのテンソルは、再び必要になったときに、GPUメモリに取り戻されるか、解凍されるか、または再計算される。より多くのテンソルがメモリ節約に関与するほど、メモリ節約が大きくなり、同じGPUメモリ内で処理されることができるデータ・フロー・グラフが大きくなる。
【0179】
実施形態では、方法が、ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよびノードPを使用してメモリ削減アクションを適用することを決定する。この方法は、ソース・ノードからサブグラフ・ノードAおよびノードPにデータを送信する。この方法は、ノードPの実行の前に、サブグラフ・ノードAがメモリ削減アクションを実行できるようにし、メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす。この方法は、サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させる。この方法は、サブグラフ・ノードBの中央プロセッサ(CPU)からGPUにデータを送信し、データをGPUに復元する。
【0180】
実施形態では、この方法は、制御依存関係エッジをノードPに適用し、ノードPの前にサブグラフ・ノードAを実行できるようにする。
【0181】
実施形態では、この方法は、ノードQによって生成される出力データより大きいメモリ要件を有する出力データを生成するノードPを決定することによって、制御依存関係エッジの挿入位置を決定する。
【0182】
実施形態では、この方法は、制御依存関係エッジをサブグラフ・ノードBに適用し、ノードQが実行を完了するまでメモリ復元アクションを遅延させる。
【0183】
実施形態では、この方法は、メモリ削減アクションが完了するまでノードPの実行を遅延させる。
【0184】
実施形態では、この方法は、GPUによって、追加のメモリ空間を使用して一連の計算を実行する。
【0185】
実施形態では、この方法は、ノードQが実行を完了した後に、データをサブグラフ・ノードBから宛先ノードに送信する。
【0186】
実施形態では、この方法は、データを圧縮して、GPUが1つまたは複数の機能を実行するための追加のメモリ空間を取得する。
【0187】
実施形態では、この方法は、メモリ復元アクションを完了する前にデータを解凍する。
【0188】
実施形態では、この方法は、宛先ノードによってデータが必要とされるまでメモリ復元アクションを遅延させる。
【0189】
実施形態では、この方法は、ノードQが実行を完了した後にデータを解凍する。
【0190】
実施形態では、この方法は、ノードQが実行を完了した後に、データをGPUに復元する。
【0191】
実施形態では、この方法は、制御依存関係エッジを適用して、追加のメモリ復元アクションを実行できるようにするために、挿入位置を決定する。
【0192】
実施形態では、この方法は、ノードQとサブグラフ・ノードBの間のメモリ復元アクションとは異なる時間間隔で、追加のメモリ復元アクションを実行する。
【0193】
実施形態では、この方法は、データを圧縮して、GPUが1つまたは複数の機能を実行するための追加のメモリ空間を作成する。この方法は、ノードPの実行前に圧縮データをCPUにコピーする。この方法は、CPUが圧縮データを受信した後に、ノードPから受信されたデータを送信する。この方法は、作成された追加のメモリ空間を使用して、GPUにおいて1つまたは複数の機能を実行する。
【0194】
実施形態では、この方法は、メモリ復元アクションを遅延させて、GPUが早期にCPUからデータを再び受信するのを防ぐために必要とされる時間間隔を決定する。
【0195】
実施形態では、コンピュータ使用可能プログラム製品が提供され、このコンピュータ使用可能プログラム製品は、1つまたは複数のコンピュータ可読ストレージ・デバイスと、1つまたは複数のストレージ・デバイスのうちの少なくとも1つに格納されたプログラム命令とを備える。ストレージのプログラム命令は、ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよびノードPを使用してメモリ削減アクションを適用することを決定するための命令と、ソース・ノードからサブグラフ・ノードAおよびノードPにデータを送信するための命令と、ノードPの実行の前に、サブグラフ・ノードAがメモリ削減アクションを実行できるようにするための命令であって、メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、命令と、サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させるための命令と、サブグラフ・ノードBの中央プロセッサ(CPU)からGPUにデータを送信し、データをGPUに復元するための命令とを含む。
【0196】
実施形態では、コンピュータ・システムは、1つまたは複数のプロセッサと、1つまたは複数のコンピュータ可読メモリと、1つまたは複数のコンピュータ可読ストレージ・デバイスとを備え、プログラム命令が、1つまたは複数のメモリのうちの少なくとも1つを介して、1つまたは複数のプロセッサのうちの少なくとも1つによって実行するために、1つまたは複数のストレージ・デバイスのうちの少なくとも1つに格納される。ストレージのプログラム命令は、ノードPによって生成される出力データのメモリ要件を識別することによって、サブグラフ・ノードAおよびノードPを使用してメモリ削減アクションを適用することを決定するための命令と、ソース・ノードからサブグラフ・ノードAおよびノードPにデータを送信するための命令と、ノードPの実行の前に、サブグラフ・ノードAがメモリ削減アクションを実行できるようにするための命令であって、メモリ削減アクションが、グラフィック・プロセッサ(GPU)によって1つまたは複数の機能を実行するために追加のメモリ空間が使用可能になることを引き起こす、命令と、サブグラフ・ノードBに、ノードQが実行を完了するまでメモリ復元アクションを遅延させるための命令と、サブグラフ・ノードBの中央プロセッサ(CPU)からGPUにデータを送信し、データをGPUに復元するための命令とを含む。
【0197】
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されているように、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、もしくは「含有している」という用語、またはこれらの任意のその他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、もしくは装置に固有の、その他の要素を含むことができる。
【0198】
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも1つ」および「1つまたは複数」という用語は、1以上の任意の整数(すなわち、1、2、3、4など)を含むと理解される。「複数」という用語は、2以上の任意の整数(すなわち、2、3、4、5など)を含むと理解される。「接続」という用語は、間接的「接続」および直接的「接続」を含むことができる。
【0199】
本明細書における「一実施形態」、「実施形態」、「実施形態例」などへの参照は、記載された実施形態が特定の特徴、構造、または特性を含むことができるが、すべての実施形態が特定の特徴、構造、または特性を含んでも含まなくてもよいということを示している。さらに、そのような語句は必ずしも同じ実施形態を参照していない。また、特定の特徴、構造、または特性がある実施形態に関連して説明される場合、明示的に説明されるかどうかにかかわらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは、当業者の知識の範囲内にあると考えられる。
【0200】
「約」、「実質的に」、「近似的に」、およびこれらの変形の用語は、本願書の出願時に使用できる機器に基づいて、特定の量の測定に関連付けられた誤差の程度を含むよう意図されている。例えば、「約」は、特定の値の±8%または5%、あるいは2%の範囲を含むことができる。
【0201】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に制限されない。説明された実施形態の範囲および思想から逸脱しない多くの変更および変形が、当業者にとって明らかであろう。
【0202】
本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書に記載された実施形態を理解できるようにするために選択された。
【0203】
したがって、実施形態例において、オンライン・コミュニティへの参加、およびその他の関連する特徴、機能、または動作を管理するためのコンピュータ実装方法が提供される。実施形態またはその一部がデバイスの一種に関して説明される場合、コンピュータ実装方法、システムまたは装置、コンピュータ・プログラム製品、あるいはこれらの一部は、その種類のデバイスの適切な同等の明示と共に使用するように適応されるか、または構成される。
【0204】
ユーザは、Webブラウザ(例えば、Webベースの電子メール)またはその他の軽量クライアント・アプリケーションなどのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスを使用してアプリケーションにアクセスすることができる。ユーザは、クラウド・インフラストラクチャのネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを、管理することも制御することもない。
【0205】
本発明は、任意の可能な統合の技術的詳細レベルで、方法、装置、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有しているコンピュータ可読ストレージ媒体を含んでよい。
【0206】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-onlymemory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasableprogrammable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル・バーサタイル・ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【0207】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータもしくは外部ストレージ・デバイスへダウンロードされてよい。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。
【0208】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide areanetwork)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル・ロジック回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【0209】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装されるということが理解されるであろう。
【0210】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含む製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【0211】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【0212】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生し得る。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能もしくは動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装されるということにも注意する。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10A
図10B
図11
図12
図13