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

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

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

特許7418094任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法
<>
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図1
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図2
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図3
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図4
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図5
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図6
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図7
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図8
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図9
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図10
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図11
  • 特許-任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-11
(45)【発行日】2024-01-19
(54)【発明の名称】任意ツリー・トポロジ上のフレキシブルな高速オール・リデュースの方法
(51)【国際特許分類】
   G06F 9/50 20060101AFI20240112BHJP
【FI】
G06F9/50 150E
【請求項の数】 14
(21)【出願番号】P 2021555880
(86)(22)【出願日】2020-03-17
(65)【公表番号】
(43)【公表日】2022-05-24
(86)【国際出願番号】 EP2020057322
(87)【国際公開番号】W WO2020200774
(87)【国際公開日】2020-10-08
【審査請求日】2022-08-24
(31)【優先権主張番号】16/371,536
(32)【優先日】2019-04-01
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】リー、ジンホ
(72)【発明者】
【氏名】シャー、ソハム
(72)【発明者】
【氏名】チョ、ミンシク
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2018/0357534(US,A1)
【文献】特開2010-211553(JP,A)
【文献】Minsik Cho, et.al.,BlueConnect: Novel Hierarchical All-Reduce on Multi-tired Network for Deep Learning,Workshop on Systems for ML and Open Source Software at NeurIPS 2018,2018年12月07日,1-8,[online],[令和5年6月28日検索],インターネット <URL:http://learningsys.org/nips18/assets/papers/6CameraReadySubmissionlearnsys2018_blc.pdf>
【文献】Minsik Cho, et.al.,BlueConnect: Decomposing all-reduce for deep learning on heterogeneous network hierarchy,Proceedings of Machine Learning and Systems 2019 (MLSys 2019),2019年03月31日,1-11,[online],[令和5年6月28日検索],インターネット <URL:https://mlsys.org/Conferences/2019/doc/2019/130.pdf>
【文献】Pitch Patarasuk and Xin Yuan,Bandwidth Efficient All-reduce Operation on Tree Topologies,2007 IEEE International Parallel and Distributed Processing Wymposium,米国,IEEE,2007年03月26日,1-8,https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4228133,Print ISSN:1530-2075
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
プロセッサにわたってデータを送信して前記プロセッサ上で前記データを結合する方法であって、
データ・セットD(D1、D2、...、Dn)をプロセッサ・セットP(P1、P2、...、Pk)において受信することであって、データDiが、プロセッサPiにおいて受信される、前記受信することと、
前記データ・セットのターゲット部分を前記プロセッサ・セットのプロセッサに割り当てることであって、前記プロセッサ・セットが、根および1つまたは複数の葉を含むツリー・トポロジで構成され、前記ターゲット部分が、親ノードに接続される子プロセッサの数に基づいて割り当てられる、前記割り当てることと、
第1のリデュース・スキャッタ動作を実行して、前記1つまたは複数の葉から始まり、前記根に到達するまで前記ツリー・トポロジにおけるレベルが増加する、前記ツリー・トポロジの各枝において同一の親ノードを共有する1の子プロセッサが、自身のデータ項目と前記同一の親ノードを共有する1つまたは複数の他の子プロセッサから受信したデータ項目とを結合するように、前記同一の親ノードを共有する子プロセッサに前記ターゲット部分のデータ項目を交換させることと、
第2のリデュース・スキャッタ動作を実行して、前記データ・セットがすべての子プロセッサにわたって結合され、すべての前記各枝の子プロセッサのそれぞれが結合データを含むように、異なる親ノードに接続された子プロセッサ間でデータ項目を交換させることと、
前記子プロセッサのそれぞれに対してオール・ギャザー・アルゴリズムを使用して、前記子プロセッサのすべてが、前記結合データの完全セットを含むように、すべての前記各枝の他の子プロセッサの前記結合データを収集することと、
を含む、方法。
【請求項2】
前記第1のリデュース・スキャッタ動作を実行することにおいて、前記ターゲット部分のデータ項目が、前記子プロセッサ間で、リング・アルゴリズムを用いて交換される、
請求項1に記載の方法。
【請求項3】
前記第2のリデュース・スキャッタ動作を実行することにおいて、前記データ項目が、前記子プロセッサ間で、階層型アルゴリズムを用いて交換される、
請求項1に記載の方法。
【請求項4】
枝に対する現在のターゲット部分を前記枝の次数で分割することによって、前記データ・セットの次のターゲット部分を割り当てることと、
前記次のターゲット部分を前記枝における各子プロセッサに割り当てることと、
をさらに含む、
請求項3に記載の方法。
【請求項5】
各ターゲット部分に、前記データ・セットの一部に対応するデータ項目の範囲が割り当てられ、
前記同一の親ノードを共有する子プロセッサに前記ターゲット部分のデータ項目を交換させることが、前記子プロセッサ間で同一範囲内のデータ項目受信することを含む、
請求項に記載の方法。
【請求項6】
前記異なる親ノードに接続された子プロセッサ間でデータ項目を交換させることが、前記異なる親ノードに接続された子プロセッサから前記同一範囲内のデータ項目受信することを含む、
請求項5に記載の方法。
【請求項7】
前記プロセッサ・セットの少なくとも1つのプロセッサが、グラフィック処理ユニット(GPU)である、
請求項1に記載の方法。
【請求項8】
コンピュータ・プログラムであって、請求項1ないしのいずれか1項に記載の方法の各ステップをコンピュータに実行させるための、コンピュータ・プログラム。
【請求項9】
請求項に記載のコンピュータ・プログラムを記録した、コンピュータ可読記憶媒体。
【請求項10】
根および1つまたは複数の葉を含むツリー・トポロジで構成されるプロセッサ・セットを含むシステムであって、前記プロセッサ・セットが、前記プロセッサ・セットにわたってデータを送信して前記プロセッサ上で前記データを結合する方法を実施するように構成され、前記方法が、
データ・セットD(D1、D2、...、Dn)をプロセッサ・セットP(P1、P2、...、Pk)において受信することであって、データDiが、プロセッサPiにおいて受信される、前記受信することと、
前記データ・セットのターゲット部分を前記プロセッサ・セットのプロセッサに割り当てることであって、前記プロセッサ・セットが、根および1つまたは複数の葉を含む非対称ツリー・トポロジで構成され、前記ターゲット部分が、親ノードに接続される子プロセッサの数に基づいて割り当てられる、前記割り当てることと、
前記1つまたは複数の葉から始まり、前記根に到達するまで前記ツリー・トポロジにおけるレベルが増加する、前記ツリー・トポロジの各枝において同一の親ノードを共有する子プロセッサ間で繰り返し配分された結合データを送信することと、
子プロセッサ間で1つの枝から少なくとも1つの他の枝における子プロセッサへ前記結合データを送信することと、
を含む、システム。
【請求項11】
前記結合データが、前記同一の親ノードを共有する子プロセッサ間で、リング・アルゴリズムまたは階層型アルゴリズムのうちの少なくとも1つを用いて送信される、
請求項10に記載のシステム。
【請求項12】
各ターゲット部分に、前記データ・セットの一部に対応する範囲が割り当てられ、
前記繰り返し配分された結合データを送信することが、前記子プロセッサ間で同一範囲内のデータを送信することを含む、
請求項10に記載のシステム。
【請求項13】
前記結合データが、前記結合データを送信する順序とは反対の順序で前記プロセッサ・セットから収集される、
請求項10に記載のシステム。
【請求項14】
前記プロセッサ・セットの少なくとも1つのプロセッサが、グラフィック処理ユニット(GPU)である、
請求項10に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の主な用途のうちの1つが、深層学習の分野に関し、より詳細には、深層学習または高性能コンピューティング実施あるいはその両方において任意ツリー・トポロジ上でオール・リデュース(all-reduce)・アルゴリズムを実行することに関する。
【背景技術】
【0002】
深層学習は、データ・セットの特徴または表現の複数レベルの学習に基づく、機械学習アルゴリズムのクラスを指す。現代の深層学習方法は、特徴抽出および変換のために非線形処理ユニットの複数層のカスケードを用いることを含む。特徴抽出は、測定データの初期セットを受信し、後続の学習および汎化ステップを容易にするために導出値(または特徴)を構築するプロセスを指す。多くの場合、より上位レベルの特徴が、下位レベルの特徴から導出されて、測定データおよび導出特徴の階層表現を生成する。
【0003】
深層学習アルゴリズムは、分散表現に基づく。分散表現は、観測された(または測定された)データが、1つまたは複数の層に編成された1つまたは複数の因子の相互作用の結果であるという仮定の下で動作する。概念的には、深層学習は、相互作用して測定データをもたらす因子の層が、抽象概念または構造のレベルの表現であるというさらなる仮定を導入する。この仮定の下で、複数の層および層のサイズが、異なる量の抽象概念に対応する。
【0004】
深層学習システムにおいて利用され、生成されるデータのいずれかまたは全てが、1つまたは複数のネットワークにわたって送信されることがあり、その後、上記1つまたは複数のネットワークの任意の制限を受けることがある。特に、ローカル環境およびクラウド環境の両方における大規模深層学習システムに関して、どのネットワーク通信も、多数の学習者、ネットワークにわたるデータ交換の頻度、および交換されているデータの量に起因するボトルネックに左右され得る。さらに、ネットワーク内の最も弱いリンクまたはノードが、主に、ネットワークが全体としてどのように働くかを指示するため、多層の、または変異する(例えば、クラウド環境において)ネットワークにわたる通信は、大部分が非効率的である場合がある。
【0005】
大規模深層学習システムにおける効率を向上させるための1つの手法が、リデュース(reduce)動作を採用することである。リデュース動作は、連想的および可換的の両方である関数によってしばしば並列に、初期セットの数をより小さなセットの数に効果的に集約する、関数型プログラミングからの古典的概念である。いくつかの既存プログラミング関数は、複数プロセスにわたるリデュース動作を可能にし、結果が、いくつかの場合には根プロセス、または他の場合には関与するプロセス全てのいずれかに返される。
【0006】
複数のグラフィック処理ユニット(GPU)上で並列に深層学習システムを訓練するとき、利用可能なGPUにわたって読み出され実行されるデータ・バッチまたはグループおよび動作を分散する方法に関して、選択が行われなければならない。各GPUは、その際、自己データについてのネットワークの順伝播および誤差逆伝播を実行して、任意の既存ネットワーク・パラメータに関する損失の勾配を判断する。次いで、GPUは、平均勾配を計算するために互いに通信し、その通信が様々なネットワークにわたって発生し得る。この通信は、通信が発生するたびに任意のネットワーク制限の影響を受け、それが、深層学習システム内でのデータ転送の深刻な速度低下につながり得る。
【発明の概要】
【0007】
一実施形態によれば、データ・セットD(D1、D2、...、Dn)をプロセッサ・セットP(P1、P2、...、Pk)において受信することであって、データDiが、プロセッサPiにおいて受信される、受信することを含む、プロセッサにわたってデータを送信してプロセッサ上でデータを結合する方法が提供される。方法は、データ・セットのターゲット部分をプロセッサ・セットのプロセッサに割り当てることであって、プロセッサ・セットが、根および1つまたは複数の葉を含むツリー・トポロジで構成され、ターゲット部分が、親ノードに接続される子プロセッサの数に基づいて割り当てられる、割り当てることを含む。方法は、また、1つまたは複数の葉から始まり、根に到達するまでツリー・トポロジにおけるレベルが増加する、ツリー・トポロジの各枝において同一の親ノードを共有する子プロセッサ間で繰り返し配分された結合データを送信することを含む。方法は、子プロセッサ間で1つの枝から少なくとも1つの他の枝における子プロセッサへ結合データを送信することをさらに含む。
【0008】
別の形態では、プロセッサにわたってデータを送信してプロセッサ上でデータを結合する方法を実施するシステムが提供される。
【0009】
別の形態では、プロセッサにわたってデータを送信してプロセッサ上でデータを結合するコンピュータ・プログラム製品が提供される。
【0010】
以下の図面および詳細な説明を検査すると、本発明の他のシステム、方法、特徴、および利点が、当業者には明らかであり、または明らかとなる。そのようなさらなるシステム、方法、特徴、および利点の全てが、本説明および本概要内に含まれ、本発明の範囲内にあり、特許請求の範囲によって保護されることが意図される。
【0011】
本発明は、以下の図面および説明を参照してよりよく理解され得る。図面中の構成要素は、必ずしも一定の縮尺ではなく、代わりに、本発明の原理を説明することに重点が置かれている。さらに、図面において、類似の参照番号が、異なる図全体を通して対応する部分を指示する。
【図面の簡単な説明】
【0012】
図1】オール・リデュース・アルゴリズムを実行するように構成されるコンピューティング・システムの一例としての実施形態のブロック図である。
図2】ツリー・トポロジを有するコンピューティング・システムの一例としての実施形態を表す図である。
図3】ターゲット部分をコンピューティング・システム内のノードに割り当てるプロセスを表す図である。
図4】コンピューティング・システム内のノード間でリデュース・スキャッタ(reduce-scatter)・アルゴリズムを実行するプロセスを表す図である。
図5】リデュース・スキャッタ動作後のコンピューティング・システム内のノードを表す図である。
図6】ターゲット部分をコンピューティング・システム内のノードに割り当てるプロセスを表す図である。
図7】ターゲット項目をコンピューティング・システム内のノードに割り当てるプロセスを表す図である。
図8】コンピューティング・システム内のノード間で別のリデュース・スキャッタ・アルゴリズムを実行するプロセスを表す図である。
図9】別のリデュース・スキャッタ動作後のコンピューティング・システム内のノードを表す図である。
図10】ギャザー(gather)動作後のコンピューティング・システム内のノードを表す図である。
図11】コンピューティング・システムのノード上でオール・リデュース・アルゴリズムを実行する方法の一例としての実施形態のフローチャートである。
図12】コンピューティング・システムのノードの一例としての実施形態のブロック図である。
【発明を実施するための形態】
【0013】
本明細書で説明される例としての実施形態の態様が、対称および非対称ツリー・トポロジの両方を含む、任意ネットワーク・トポロジ上でオール・リデュース動作を実行する方法を提供する。ここで、図1を参照すると、プロセッサにわたってデータを送信してプロセッサ上でデータを結合するために、オール・リデュース・アルゴリズムを実行するように構成される深層学習コンピューティング・システム100の一例としての実施形態が、示されている。本実施形態では、深層学習コンピューティング・システム100は、プロセッサまたはノードのセット102を含む。少なくとも1つの実施形態では、プロセッサ・セット102のうちの少なくとも1つのプロセッサが、グラフィック処理ユニット(GPU)である。
【0014】
いくつかの実施形態では、深層学習コンピューティング・システム100のプロセッサまたはノードのセット102が、任意ネットワーク・トポロジに配置され得る。例えば、プロセッサ・セット102は、根および1つまたは複数の葉を含む非対称ツリー・トポロジで構成され得る。非対称ツリー・トポロジを有する実施形態では、根が、ツリー内の最上位プロセッサまたはノードである。根からのツリーの各枝が、ツリーの下位レベルまたは枝における1つまたは複数の子プロセッサまたはノードに接続される親ノードを含み得る。枝は、また、1つまたは複数の葉を含んでもよく、葉は、いかなる子プロセッサまたはノードにも接続されないプロセッサまたはノードである。他の実施形態では、プロセッサ・セット102が、対称ツリー・トポロジで構成され得る。
【0015】
図2は、ツリー・トポロジに配置された深層学習コンピューティング・システム100のプロセッサ・セット102の一例としての実施形態を示す。図2に示されるように、プロセッサ・セット102のツリー・トポロジが、最上位レベルにおいて根プロセッサまたはノード200を含む。次に、次の枝にレベルを下げると、プロセッサ・セット102が、第1の親ノード210および第2の親ノード212を含む。一例としての実施形態では、第1の親ノード210および第2の親ノード212が、プロセッサであってもよい。しかしながら、概して、各親ノードは、典型的には、プロセッサとしてではなく、子プロセッサもしくはノード間の接続として、またはサブツリー間の接続(親ノードを接続するそれ以外)として機能する。集約動作の間、これらの中間枝ノードにおいて能動計算が発生せず、計算の全てが子プロセッサによって実行される。
【0016】
本実施形態では、第1の親ノード210は、第1の子プロセッサ220および第2の子プロセッサ222を含む、2つの子プロセッサに接続される。第1の子プロセッサ220および第2の子プロセッサ222は、それ以上子に接続されないため、第1の子プロセッサ220および第2の子プロセッサ222は、葉である。本実施形態では、第2の親ノード212は、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228を含む、3つの子プロセッサに接続される。第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228は、それ以上子に接続されないため、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228もまた、葉である。
【0017】
図2に示されるように、第1の親ノード210が、2つの子、第1の子プロセッサ220および第2の子プロセッサ222を有する一方、第2の親ノード212が、3つの子、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228を有するため、深層学習コンピューティング・システム100のプロセッサ・セット102のツリー・トポロジは、非対称である。本明細書で説明される技術は、しかしながら、非対称および対称ツリー・トポロジの両方に適用される。
【0018】
いくつかの実施形態では、データ・セットD(D1、D2、...、Dn)は、プロセッサ・セットP(P1、P2、...、Pk)において受信される。ここで、データDiは、プロセッサPiにおいて受信される。本実施形態では、データ・セットは、第1のデータ230、第2のデータ232、第3のデータ234、第4のデータ236、および第5のデータ238を含む。図2に示されるように、第1のデータ230が、第1の子プロセッサ220において受信され、第2のデータ232が、第2の子プロセッサ222において受信され、第3のデータ234が、第3の子プロセッサ224において受信され、第4のデータ236が、第4の子プロセッサ226において受信され、第5のデータ238が、第5の子プロセッサ228において受信される。追加として、本実施形態に示されるように、データ・セットの各データは、0(0)~11(11)とラベル付けされた12のインデックスを有するデータ項目に関連付けられる。
【0019】
一例としての実施形態において、図2は、データ230、232、234、236、238のセットを受信したときの、深層学習コンピューティング・システム100のプロセッサ・セット102の初期状態を表す。本明細書に提示される例としての実施形態の技術は、プロセッサ(即ち、プロセッサ・セット102)にわたってデータ(即ち、データ230、232、234、236、238のセット)を送信して、プロセッサ上でデータを結合するための、オール・リデュース・アルゴリズムを実行する方法を提供する。
【0020】
ここで図3を参照すると、深層学習コンピューティング・システム100において、データ・セットのターゲット部分をプロセッサ・セット102に割り当てるプロセスが示されている。本実施形態に示されるように、データ230、232、234、236、238のセットのターゲット部分が、ツリーの第1のレベルにおけるプロセッサ・セット102に割り当てられる。一例としての実施形態では、ターゲット部分が、親ノードに接続される子プロセッサの数に基づいて割り当てられる。
【0021】
例えば、図3に示されるように、第1の親ノード210は、2つの子プロセッサ、第1の子プロセッサ220および第2の子プロセッサ222に接続されている。枝300において、各子プロセッサには、第1の親ノード210の次数(即ち、この場合は2)に基づいて、データ・セットのターゲット部分が割り当てられる。第1の親ノード210に接続された各子プロセッサには、データの1/2に対応するターゲット部分が割り当てられる。本実施形態に示されるように、第1のターゲット部分302(例えば、1/2)は、第1の子プロセッサ220に割り当てられ、第2のターゲット部分304(例えば、1/2)は、第2の子プロセッサ222に割り当てられる。枝300において第1の親ノード210に接続された全ての子プロセッサに割り当てられるターゲット部分の合計は、1になる(例えば、1/2+1/2=1)。
【0022】
類似のプロセスが、枝310においてターゲット部分を割り当てるために用いられる。しかしながら、枝310においては、第2の親ノード212は、3つの子プロセッサ、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228に接続されている。したがって、各子プロセッサには、第2の親ノード212の次数(即ち、この場合は3)に基づいて、データ・セットのターゲット部分が割り当てられる。第2の親ノード212に接続された各子プロセッサには、データの1/3に対応するターゲット部分が割り当てられる。本実施形態に示されるように、第3のターゲット部分312(例えば、1/3)は、第3の子プロセッサ224に割り当てられ、第4のターゲット部分314(例えば、1/3)は、第4の子プロセッサ226に割り当てられ、第5のターゲット部分316(例えば、1/3)は、第5の子プロセッサ228に割り当てられる。枝310において第2の親ノード212に接続された全ての子プロセッサに割り当てられるターゲット部分の合計は、1になる(例えば、1/3+1/3+1/3=1)。
【0023】
図4は、深層学習コンピューティング・システム100におけるプロセッサ・セット102間でリデュース・スキャッタ・アルゴリズムを実行して子プロセッサ間で配分されたデータを送信するプロセスを示す。一例としての実施形態において、リデュース・スキャッタ動作は、ツリーの各枝上の葉の間で実行される。リデュース・スキャッタ・アルゴリズムは、各プロセッサが1つの最終結果で終わるように、プロセッサにデータを交換させる。リデュース・スキャッタ動作の間、各プロセッサは、それが別のプロセッサから受信したデータ項目を、割り当てられたチャンクまたはパーティション(即ち、ターゲット部分)に対応するデータ項目のそれ自体の範囲に存在するデータ項目と結合する。この動作は、各プロセッサが、各パーティション(即ち、ターゲット部分)からの対応データ項目の集合を表す少なくとも1つのデータ要素を含むまで、繰り返し実行される。リデュース・スキャッタ動作が完了した後、各プロセッサは、枝上の各プロセッサからの寄与分を含む、値のアレイを有する。
【0024】
本実施形態では、リング・アルゴリズムが、ツリー・トポロジの各枝内の、同じ親ノードを共有する子プロセッサ間で実行される。例えば、第1の子プロセッサ220および第2の子プロセッサ222は、両方とも第1の親ノード210に接続され、それらの間で第1のデータ230および第2のデータ232のそのターゲット部分(例えば、1/2)を交換する。図4に示されるように、第1の子プロセッサ220は、第1の動作400において、データ項目0~5(即ち、第1のデータ230および第2のデータ232に含まれる12個のデータ項目の1/2である6個のデータ項目)に対応する、第2のデータ232のそのターゲット部分を第2の子プロセッサ222から受信する。同様に、第2の子プロセッサ222は、第2の動作402において、データ項目6~11(即ち、第1のデータ230および第2のデータ232に含まれる12個のデータ項目の1/2である6個のデータ項目)に対応する、第1のデータ230のそのターゲット部分を第1の子プロセッサ220から受信する。
【0025】
類似のリデュース・スキャッタ動作は、第2の親ノード212から下ってツリーの他の枝上で実行される。例えば、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228は、全て第2の親ノード212に接続され、それらの間で第3のデータ234、第4のデータ236、および第5のデータ238のそのターゲット部分(例えば、1/3)を交換する。図4に示されるように、第3の子プロセッサ224は、第3の動作404において、第4の子プロセッサ226からのデータ項目0および1に対応する第4のデータ236、ならびに第5の子プロセッサ228からのデータ項目2および3に対応する第5のデータ238(即ち、第3のデータ234、第4のデータ236、および第5のデータ238に含まれる12個のデータ項目の1/3である、4個のデータ項目)のそのターゲット部分を受信する。同様に、第4の子プロセッサ226は、第4の動作406において、第3の子プロセッサ224からのデータ項目4および5に対応する第3のデータ234、ならびに第5の子プロセッサ228からのデータ項目6および7に対応する第5のデータ238(即ち、第3のデータ234、第4のデータ236、および第5のデータ238に含まれる12個のデータ項目の1/3である、4個のデータ項目)のそのターゲット部分を受信する。
【0026】
さらに、第5の子プロセッサ228は、第5の動作408において、第3の子プロセッサ224からのデータ項目8および9に対応する第3のデータ234、ならびに第4の子プロセッサ226からのデータ項目10および11に対応する第4のデータ236(即ち、第3のデータ234、第4のデータ236、および第5のデータ238に含まれる12個のデータ項目の1/3である、4個のデータ項目)のそのターゲット部分を受信する。
【0027】
このようにして、リデュース・スキャッタ・アルゴリズムは、1つまたは複数の葉から始まり、根200に到達するまでツリー・トポロジにおけるレベルが増加する、ツリー・トポロジの各枝において同一の親ノードを共有する子プロセッサ間で繰り返し配分された結合データを送信するために用いられる。
【0028】
ここで図5を参照すると、図4に示されるように実行されるリデュース・スキャッタ動作の後の、深層学習コンピューティング・システム100内のプロセッサ・セット102が、示されている。ツリーの各枝において同一親ノードを共有する子プロセッサ間でリデュース・スキャッタ動作を実行した後、各プロセッサは、データ・セットのその部分に関連する結合データを含む。例えば、図5に示されるように、第1の子プロセッサ220は、0~5の範囲(即ち、[0,6))の結合データ項目に対応する第1の結合データ500を含み、第2の子プロセッサ222は、6~11の範囲(即ち、[6,12))の結合データ項目に対応する第2の結合データ502を含む。同様に、第3の子プロセッサ224は、0~3の範囲(即ち、[0,4))の結合データ項目に対応する第3の結合データ504を含み、第4の子プロセッサ226は、4~7の範囲(即ち、[4,8))の結合データ項目に対応する第4の結合データ506を含み、第5の子プロセッサ228は、8~11の範囲(即ち、[8,12))の結合データ項目に対応する第5の結合データ508を含む。
【0029】
図6は、ツリーの枝の上の次のレベルについて、結合データのターゲット部分を深層学習コンピューティング・システム100内のプロセッサ・セット102に割り当てるプロセスを示す。本実施形態では、次のレベルが根200である。根200は、2つの親ノード、第1の親ノード210および第2の親ノード212に接続される。枝600において、根200に接続される各親ノードには、根200の次数(degree)(即ち、この場合は2)に基づいてターゲット部分が割り当てられる。ツリー内の次のレベルに降りると、第1の親ノード210および第2の親ノード212に接続される各子プロセッサには、データのうちの、親ノードの1/2のその部分に対応するターゲット部分が割り当てられる。
【0030】
本実施形態に示されるように、第1のターゲット部分602(例えば、1/4)は、第1の子プロセッサ220に割り当てられ、第2のターゲット部分604(例えば、1/4)は、第2の子プロセッサ222に割り当てられる。第1の親ノード210に接続された全ての子プロセッサに割り当てられるターゲット部分の合計は、枝600において第1の親ノード210に割り当てられた1/2の部分になる(例えば、1/4+1/4=1/2)。類似のプロセスが、第2の親ノード212の子プロセッサにターゲット部分を割り当てるために用いられる。本実施形態に示されるように、第3のターゲット部分606(例えば、1/6)は、第3の子プロセッサ224に割り当てられ、第4のターゲット部分608(例えば、1/6)は、第4の子プロセッサ226に割り当てられ、第5のターゲット部分610(例えば、1/6)は、第5の子プロセッサ228に割り当てられる。第2の親ノード212に接続された全ての子プロセッサに割り当てられるターゲット部分の合計は、枝600において第2の親ノード212に割り当てられた1/2の部分になる(例えば、1/6+1/6+1/6=1/2)。
【0031】
ここで図7を参照すると、深層学習コンピューティング・システム100内のプロセッサ・セット102において、ターゲット・データ項目を各プロセッサに割り当てるプロセスが示されている。本実施形態において、各子プロセッサには、図6を参照して上述されたように判断されるターゲット部分に基づいて、結合データのそのターゲット・データ項目が割り当てられる。一例としての実施形態において、ターゲット部分を割り当てる前に、プロセッサ・セット102内の子プロセッサは、各プロセッサの結合データについての最後のデータ項目インデックス値に基づいて、最後から最初へと順序付けされ、そこで、つながりは、最初のデータ項目インデックスによって決定される。本実施形態では、第5の結合データ508が最後のデータ項目インデックス12および最初のデータ項目インデックス8を有するため、第5の子プロセッサ228には、最後の部分(例えば、5個のうちの5番目)が割り当てられる。第2の結合データ502は、最後のデータ項目インデックス12および最初のデータ項目インデックス6を有するため、第2の子プロセッサ222には、第4の部分が割り当てられる。この場合、第5の子プロセッサ228および第2の子プロセッサ222は、同一の最後のデータ項目インデックス(即ち、12)を有するが、第5の子プロセッサが、より大きな最初のデータ項目インデックス(即ち、6と比較して8)を有するため、第5の子プロセッサ228には、第2の子プロセッサ222の前に5番目が割り当てられる。
【0032】
第4の結合データ506は、次に大きな最後のデータ項目インデックス(即ち、8)を有するため、第4の子プロセッサ226には第3の位置が割り当てられ、その後、第1の結合データ500の最後のデータ項目インデックス6に基づいて第2の位置に割り当てられる第1の子プロセッサ220、および第3の結合データ504の最後のデータ項目インデックス4に基づいて第1の位置に割り当てられる第3の子プロセッサ224が続く。この時点で、最初から最後までのターゲット部分をプロセッサ・セット102に割り当てる順序は、第3の子プロセッサ224、第1の子プロセッサ220、第4の子プロセッサ226、第2の子プロセッサ222、および第5の子プロセッサ228である。
【0033】
結合データの各ターゲット部分が、次いで、この判断された順序でプロセッサ・セット102内の各子プロセッサに割り当てられる。図7に示されるように、第3の子プロセッサ224には、結合データ項目0および1(即ち、[0,2))に対応する、第3の結合データ504のそのターゲット部分(即ち、1/6)が、最初に割り当てられる。次に、第1の子プロセッサ220には、結合データ項目2~4(即ち、[2,5))に対応する、第1の結合データ500のそのターゲット部分(即ち、1/4)が割り当てられる。第4の子プロセッサ226には、結合データ項目5および6(即ち、[5,7))に対応する、第4の結合データ506のそのターゲット部分(即ち、1/6)が割り当てられる、次のプロセッサである。第2の子プロセッサ222には、結合データ項目7~9(即ち、[7,10))に対応する、第2の結合データ502のそのターゲット部分(即ち、1/4)が割り当てられ、最後に、第5の子プロセッサ228には、結合データ項目10および11(即ち、[10,12))に対応する、第5の結合データ508のそのターゲット部分(即ち、1/6)が割り当てられる。
【0034】
図8は、深層学習コンピューティング・システム100内のプロセッサ・セット102間で別のリデュース・スキャッタ・アルゴリズムを実行するプロセスを示す。一例としての実施形態において、階層型アルゴリズムが実行され、そこで、割り当てられる部分は、ツリー・トポロジの現在の枝の次数に基づいて減少する。この実施形態では、リデュース・スキャッタ・アルゴリズムが、子プロセッサ間で1つの枝(即ち、第1の親ノード210の子)から他の枝における子プロセッサ(即ち、第2の親ノード212の子)へ実行される。このリデュース・スキャッタ動作の間、同一範囲内のデータ項目が、各枝における子プロセッサ間で交換される。
【0035】
本実施形態では、リデュース・スキャッタ・アルゴリズムは、ツリー内の異なる親ノードを有する子プロセッサ間で実行される。例えば、第1の子プロセッサ220および第2の子プロセッサ222は、両方とも第1の親ノード210に接続され、それらのターゲット部分を、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228に割り当てられたターゲット部分と交換する。第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228は、全て第2の親ノード212に接続されている。したがって、本実施形態では、同一親ノードを有する子プロセッサの間の枝内交換はない。
【0036】
図8に示されるように、第3の子プロセッサ224は、第1の動作800において、データ項目0および1(即ち、12個のデータ項目の1/6である2個のデータ項目)に対応する、そのターゲット部分を第1の子プロセッサ220から受信する。第1の子プロセッサ220は、第2の動作802において、データ項目2~4(即ち、12個のデータ項目の1/4である3個のデータ項目)に対応する、そのターゲット部分を第3の子プロセッサ224(データ項目2および3を送信する)ならびに第4の子プロセッサ226(データ項目4を送信する)から受信する。第4の子プロセッサ226は、第3の動作804において、データ項目5および6(即ち、12個のデータ項目の1/6である2個のデータ項目)に対応する、そのターゲット部分を第1の子プロセッサ220(データ項目5を送信する)ならびに第2の子プロセッサ222(データ項目6を送信する)から受信する。同様に、第2の子プロセッサ222は、第4の動作806において、データ項目7~9(即ち、12個のデータ項目の1/4である3個のデータ項目)に対応する、そのターゲット部分を第4の子プロセッサ226(データ項目7を送信する)ならびに第5の子プロセッサ228(データ項目8および9を送信する)から受信する。
【0037】
最後に、第5の子プロセッサ228は、第5の動作808において、データ項目10および11(即ち、12個のデータ項目の1/6である2個のデータ項目)に対応する、そのターゲット部分を第2の子プロセッサ222から受信する。第5の動作808の完了後、リデュース・スキャッタ・アルゴリズムは、複数の枝にわたってデータを結合することを終了する。即ち、結合データの6個のデータ項目は、全部で12個のデータ項目について各枝の子プロセッサによって他の枝の子プロセッサに送信される。このようにして、リデュース・スキャッタ・アルゴリズムは、ツリー・トポロジの各枝における子プロセッサ間で結合データを送信するために用いられる。
【0038】
図9は、図8を参照して上述されるようにリデュース・スキャッタ動作が実行された後の、深層学習コンピューティング・システム100内のプロセッサ・セット102を示している。本実施形態では、データ230、232、234、236、238のセットが、プロセッサ・セット102内のプロセッサ全てにわたって結合されている。各プロセッサは、ここで、結合データのその割り当てられた部分を含む。例えば、第1の子プロセッサ220は、第1の結合データ900を含み、第1の結合データ900は、プロセッサ・セット102の各プロセッサからの2~4の範囲(即ち、[2,5))に対応するデータ項目を含む。第2の子プロセッサ222は、第2の結合データ902を含み、第2の結合データ902は、プロセッサ・セット102の各プロセッサからの7~9の範囲(即ち、[7,10))に対応するデータ項目を含む。第3の子プロセッサ224は、第3の結合データ904を含み、第3の結合データ904は、プロセッサ・セット102の各プロセッサからの0~1の範囲(即ち、[0,2))に対応するデータ項目を含む。第4の子プロセッサ226は、第4の結合データ906を含み、第4の結合データ906は、プロセッサ・セット102の各プロセッサからの5~6の範囲(即ち、[5,7))に対応するデータ項目を含む。第5の子プロセッサ228は、第5の結合データ908を含み、第5の結合データ908は、10~11の範囲(即ち、[10,12))に対応するデータ項目を含む。
【0039】
各プロセッサ上でプロセッサ・セット102の各プロセッサからの完全なデータ・セットを結合するために、オール・ギャザー(all-gather)・アルゴリズムが実行される。オール・ギャザー・アルゴリズムを用いると、結合データは、図8を参照して上述したような、結合データを送信する順序とは反対の順序で、プロセッサ・セット102内の各プロセッサから収集される。この技術は、結合データの各部分が結合されることを可能にし、それによって、深層学習コンピューティング・システム100におけるプロセッサ・セット102内の各プロセッサが、結合データの完全セットを含む。
【0040】
ここで図10を参照すると、オール・ギャザー・アルゴリズムの実行後の、深層学習コンピューティング・システム100内のプロセッサ・セット102が、示されている。本実施形態で示されるように、プロセッサ・セット102の各プロセッサによって以前に個々に受信したデータ230、232、234、236、238のセットを含む結合データの完全セット1000が、ここで、各プロセッサにおいて含まれる。即ち、本明細書で説明される技術を適用することによって、結合データの完全セット1000は、第1の子プロセッサ220、第2の子プロセッサ222、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228において含まれる。
【0041】
図11は、深層学習コンピューティング・システム100のノード上でオール・リデュース・アルゴリズムを実行する方法1100の一例としての実施形態のフローチャートである。一例としての実施形態において、方法1100は、深層学習コンピューティング・システム100のプロセッサ・セット102によって実行されて、プロセッサの全てにわたってデータ・セットを結合し得る。例えば、プロセッサ・セット102の少なくとも1つのプロセッサは、プロセッサ・セット102のプロセッサ間で命令を実施し、または協調させる、リーダ・ノードまたはコーディネータ・ノードを含み得る。
【0042】
一例としての実施形態では、方法1100は、動作1102において開始し得る。動作1102において、データ・セットD(D1、D2、...、Dn)は、プロセッサ・セットP(P1、P2、...、Pk)において受信される。ここで、データDiは、プロセッサPiにおいて受信される。例えば、図2に示されるように、データ230、232、234、236、238のセットが、プロセッサ・セット102において受信される。次に、方法1100は、動作1104に進む。動作1104において、データ・セットのターゲット部分が、プロセッサ・セットのプロセッサに割り当てられる。ここで、プロセッサ・セットが、根および1つまたは複数の葉を含むツリー・トポロジで構成され、ターゲット部分が、親ノードに接続される子プロセッサの数に基づいて割り当てられる。例えば、図3を参照して上述したように、ターゲット部分302、304、306、308は、子プロセッサ220、222、224、226、228に割り当てられる。
【0043】
動作1104においてターゲット部分を割り当てると、方法1100は、動作1106を含み、動作1106において、繰り返し配分された結合データが、1つまたは複数の葉から始まり、根に到達するまでツリー・トポロジにおけるレベルが増加する、ツリー・トポロジの各枝において同一の親ノードを共有する子プロセッサ間で送信される。例えば、図4に示されるように、リデュース・スキャッタ・アルゴリズムが実行され、それによって、第1の子プロセッサ220および第2の子プロセッサ222が、データのそのターゲット部分を交換し、第3の子プロセッサ224、第4の子プロセッサ226、および第5の子プロセッサ228が、データのそのターゲット部分を交換する。
【0044】
いくつかの実施形態では、動作1106において実行される配分された結合データを送信することの繰り返しが完了すると、方法1100は、例えば、図6および図7に示されるように、プロセッサ・セット102の各プロセッサに関連付けられる、配分された結合データの最後のデータ・インデックスに基づく順序で結合データのターゲット部分を割り当てることをさらに含み得る。
【0045】
次に、方法1100は、動作1108をさらに含み、動作1108において、結合データが、子プロセッサ間で1つの枝から少なくとも1つの他の枝における子プロセッサへ送信される。例えば、上記図8に示されるリデュース・スキャッタ動作の動作を参照して説明される通りである。
【0046】
さらに、いくつかの実施形態において、方法1100は、結合データの送信順序とは反対の順序で、オール・ギャザー・アルゴリズムの一部として、1つまたは複数のギャザー動作を実行することをさらに含み得る。この技術は、結合データの各部分が結合されることを可能にし、それによって、プロセッサ・セット内の各プロセッサは、例えば、上記図10に示されるように、結合データの完全セットを含む。
【0047】
本明細書で説明される例としての実施形態は、深層学習コンピューティング・システム(例えば、深層学習コンピューティング・システム100)を参照して論じられているが、本明細書で説明される技術は、大規模なデータ・セットがプロセッサ・セットにわたって結合される他のシステムのプロセッサによって使用されてもよい。
【0048】
図12は、一例としての実施形態による、プロセッサ1202を含むそれぞれのノード1200の構成要素のブロック図を示す。1つの実施形態において、プロセッサ1202は、グラフィック処理装置(GPU)を含み得る。図12は、1つの実施態様の例示のみを提供し、異なる実施形態が実施され得る環境に関していかなる限定も示唆しないと理解されるべきである。図示された環境に対して多くの変更が行われ得る。
【0049】
図12に示されるように、ノード1200は、通信ファブリック1204を含み、通信ファブリック1204は、プロセッサ1202、メモリ1206、永続記憶装置1208、通信ユニット1212、および入力/出力(I/O)インターフェース1214間に通信を提供する。通信ファブリック1204は、プロセッサ(マイクロプロセッサ、通信およびネットワーク・プロセッサなど)、システム・メモリ、周辺デバイス、およびシステム内の任意の他のハードウェア構成要素の間でデータを渡し、または情報を制御し、あるいはその両方を行うように設計された任意のアーキテクチャで実施され得る。例えば、通信ファブリック1204は、1つまたは複数のバスで実施され得る。
【0050】
メモリ1206および永続記憶装置1208は、コンピュータ可読記憶媒体である。本実施形態では、メモリ1206は、ランダム・アクセス・メモリ(RAM)1216、およびキャッシュ・メモリ1218を含む。概して、メモリ1206は、任意の適当な揮発性または不揮発性コンピュータ可読記憶媒体を含み得る。
【0051】
1つまたは複数のプログラムは、メモリ1206の1つまたは複数のメモリを介してそれぞれのプロセッサ1202のうちの1つまたは複数によるアクセスまたは実行あるいはその両方のために、永続記憶装置1208に記憶され得る。本実施形態では、永続記憶装置1208は、磁気ハード・ディスク・ドライブを含む。磁気ハード・ディスク・ドライブの代替として、または追加で、永続記憶装置1208は、ソリッド・ステート・ハード・ドライブ、半導体記憶デバイス、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、フラッシュ・メモリ、またはプログラム命令もしくはデジタル情報を記憶することが可能な任意の他のコンピュータ可読記憶媒体を含み得る。
【0052】
永続記憶装置1208によって使用される媒体は、また、リムーバブルであってもよい。例えば、リムーバブル・ハード・ドライブは、永続記憶装置1208のために使用されてもよい。他の例は、永続記憶装置1208の一部でもある別のコンピュータ可読記憶媒体上への移転のためにドライブ内に挿入される、光学および磁気ディスク、サム・ドライブ、ならびにスマート・カードを含む。
【0053】
これらの例において、通信ユニット1212は、他のプロセッサ、データ処理システム、またはデバイス(例えば、上述した、プロセッサ・セット102のプロセッサ間)との通信を提供する。一例としての実施形態では、通信ユニット1212は、1つまたは複数のネットワーク・インターフェース・カードを含み得る。通信ユニット1212は、物理および無線通信リンクのいずれかまたは両方の使用を通して、通信を提供し得る。
【0054】
I/Oインターフェース1214は、ノード1200に接続され得る他のデバイスとのデータの入力および出力を可能にする。例えば、I/Oインターフェース1214は、キーボード、キーパッド、タッチ・スクリーン、またはいくつかの他の適当な入力デバイス、あるいはその組合せなどの外部デバイス1220への接続を提供し得る。外部デバイス1220は、また、例えば、サム・ドライブ、ポータブル光学または磁気ディスク、およびメモリ・カードなどの、ポータブル・コンピュータ可読記憶媒体を含み得る。本発明の実施形態を実施するために使用されるソフトウェアおよびデータは、そのようなポータブル・コンピュータ可読記憶媒体上に記憶されてもよく、I/Oインターフェース1214を介して永続記憶装置1208上にロードされ得る。I/Oインターフェース1214は、また、ディスプレイ1222に接続してもよい。ディスプレイ1222は、ユーザ(例えば、深層学習コンピューティング・システム100のユーザ)にデータを表示するための機構を提供し、例えば、コンピュータ・モニタであってもよい。
【0055】
本明細書で説明されるプログラムは、それらが本発明の特定の実施形態において実施されるアプリケーションに基づいて識別される。しかしながら、本明細書における任意の特定プログラムの専門語は、単に便宜上使用されており、したがって、本発明は、そのような専門語によって識別され、または示唆され、あるいはその両方である任意の特定のアプリケーションにおいてのみ使用するように限定されるべきでないと理解されたい。
【0056】
本発明は、任意の可能な統合の技術的詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
【0057】
コンピュータ可読記憶媒体は、命令実行デバイスにより使用するための命令を保持および記憶し得る有形デバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組合せであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令をその上に記録させる溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組合せを含む。本明細書で用いられるようなコンピュータ可読記憶媒体は、本来、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または電線を通って送信される電気信号などの、一過性信号であると解釈されるべきではない。
【0058】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはその組合せを介して外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体において記憶用にコンピュータ可読プログラム命令を転送する。
【0059】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、またはSmalltalk(R)、もしくはC++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを通して、ユーザのコンピュータに接続されてもよい。あるいは、接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通して)外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【0060】
本発明の態様は、発明の実施形態による、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書において説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方のブロックの組合せが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【0061】
コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施する手段を生成するように、これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。コンピュータ可読記憶媒体に記憶される命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作の態様を実施する命令を含む製品を含むように、これらのコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示し得るものであってもよい。
【0062】
コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するように、コンピュータ可読プログラム命令は、コンピュータ実施されるプロセスを作り出すために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0063】
図1図12のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の考えられる実施態様のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替的実施態様において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される2つのブロックが、実際には、実質的に同時に実行されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組合せを実行する専用ハードウェアベース・システムによって実施され得ることにも留意されたい。
【0064】
本発明の多様な実施形態の説明は、例示の目的で提示されているが、網羅的であるように、または開示される実施形態に限定されるように意図されない。多くの変更および変形が、説明された実施形態の範囲および思想から逸脱することなく当業者には明らかであろう。本明細書で使用される専門用語は、実施形態の原理、実際の用途、もしくは市場で見出される技術に対する技術的改善を最もよく説明するため、または本明細書に開示される実施形態を当業者が理解可能にするために、選択された。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12