図1は、単一の処理ノード105が、データのロード及びアンロードを行うことができる外部の記憶装置115を使用して、多段階プロセスをどのように実行し得るかを示す例を示す。
ここでは、添付の図を参照して、第1の発明の実施形態をより詳細に説明する。
図2を参照すると、図2は、マルチ処理ノードシステム200を示している。システム200は、記憶装置210と対話するように構成された第1の処理ノード205a及び第2の処理ノード205bを含む。第1の処理ノード205a及び第2の処理ノード205bの少なくとも1つは、特定のフェーズの間、記憶装置210からのデータのロード及び/又は記憶装置210へのデータのアンロードを含む準備動作を実行するように構成される。第1の処理ノード205a及び第2の処理ノード205bの一方が記憶装置210からのデータのロード及び/又は記憶装置210へのデータのアンロードを行うフェーズの間、処理ノード205a、205bの他方は、演算を実行している。この説明全体を通じて、論じられる準備動作はロード/アンロード動作であるが、処理ノードによってデータのロード/アンロードのために使用されるフェーズの間は、その処理ノードは、一時的な状態(メモリ制約のために放棄されたものである)の「再計算」、コレクティブ及びモデル更新/オプティマイザに関連する計算のうちの1つ又は複数を含む、他の準備動作を追加で実行することができる。
いくつかの実施形態では、処理ノード205a、205bは、演算の実行と、記憶装置210からのデータのロード/記憶装置210へのデータのアンロードとを交互に行うように構成される。この事例では、処理ノード205a、205bは、プロセスの間、連続的に役割を入れ替える。例えば、第1のフェーズの間、第1の処理ノード205aは、プロセスの第1の段階と関連付けられた計算を実行して、結果を生成する。これらの結果は、後続の段階と関連付けられた計算に使用される。また、第1のフェーズの間、第2の処理ノード205bは、後続のフェーズの間に処理を実行するために必要なデータを記憶装置210からロードする。次いで、第2のフェーズの間、第1の処理ノード205aは、第1のフェーズで計算したデータを記憶装置210にアンロードし、後続のフェーズの間に処理するために必要なデータをロードする。また、第2のフェーズの間、第2の処理ノード205bは、第1のフェーズの間に記憶装置210からロードしたデータを使用して処理を実行する。第3のフェーズの間、処理ノード205a、205bは、再び役割を切り替え、第1の処理ノード205aは、第2のフェーズの間に記憶装置210からロードしたデータを使用して計算を実行するように構成され、第2の処理ノード205bは、第2のフェーズの間に計算したデータをアンロードし、さらなるフェーズの間に処理するために必要なデータをロードする。
処理ノード205a、205bの一方は、それらの段階のうちの1つと関連付けられた計算を実行し、他方の処理ノードは、後続の段階と関連付けられた計算を実行するために必要なロード/アンロードを実行するため、第1の処理ノード205a及び第2の処理ノード205bは、共に、複数のフェーズにわたる多段階プロセスをより効率的に実行するように構成される。
複数の段階のうちの1つ又は複数は、プロセスの先行する段階によって出力された結果に依存する。従って、処理ノード205aと処理ノード205bとの間のデータの交換に対して、追加のフェーズが使用される。これにより、処理ノード205a、205bの一方は、前の段階と関連付けられた計算の結果にアクセスすることができ、従って、処理ノード205a、205bの他方は、プロセスの次の段階と関連付けられた計算を実行することができる。これらの追加のフェーズは、本明細書では、処理ノード間交換フェーズと呼ばれる。
図3を参照すると、図3は、処理ノード205a、205bの一方が、本明細書では演算フェーズ及び処理ノード間交換フェーズと呼ばれる2つの異なるタイプのフェーズをどのように交互に行うことができるかを示している。演算フェーズの間、それぞれの処理ノードは、(i)多段階プロセスの段階のうちの1つに対応する計算、及び、(ii)システムの記憶装置からのロード/システムの記憶装置へのアンロードのうちの1つを実行するように構成される。従って、図2に関して上記で論じられる「第1のフェーズ」及び「第2のフェーズ」は、図3に示される演算フェーズに相当する。処理ノード間交換フェーズの間、処理ノードは、互いにデータを交換するように構成される。このデータ交換は、2つの処理ノード間で直接行われるものとして示されているが、記憶装置210を含むゲートウェイなど、より複雑な中間デバイスを介して行うことができる。処理ノード間交換フェーズの間に処理ノード間でデータを交換することにより、各処理ノードは、別の処理ノードによって計算された及び次の演算フェーズの間の次の段階の処理を実行するために必要な前の段階の結果を得ることができる。
本明細書で論じられる演算及び処理ノード間交換フェーズは、バルク同期並列(BSP)演算及び交換フェーズであり得る。本明細書で論じられる及び図3に示される各演算フェーズは、プリコンパイル済みの同期バリアによって処理ノード間交換フェーズから分離される。しかし、示される各演算フェーズは、他のタイプのデータ交換のための1つ又は複数の交換フェーズを含み得る。例えば、論じられるような各演算フェーズは、処理ノード205a、205b内の処理ユニット間でのデータ交換のための1つ若しくは複数の交換フェーズ、及び/又は、処理ノード205a、205bと記憶装置210との間のデータのロード/アンロードのために使用される1つ若しくは複数の交換フェーズを含み得る。
実施形態では、ノード205aとノード205bとの間の通信に利用できる帯域幅は、ノード205a、205bの各々と記憶装置210との間の通信に利用できる帯域幅より大きい。従って、特定のデータの交換のためにプロセッサノード間交換フェーズを使用することは、より大きな利用可能なノード間帯域幅を利用するという利点を有する。しかし、実施形態では、ノード205a、205bは、プロセス全体に必要なデータのすべてを格納するほど十分な記憶容量を保有しておらず、記憶装置210は、ノード205a、205bより大きな記憶容量を有するため、記憶装置210は、特定のデータのロード/アンロードに使用される。
ここで再び図2を参照すると、図2は、処理ノード205a、205bが異なるフェーズでどのように動作することができるかを示す表220を示している。表220に示されるように、第1の演算フェーズの間、処理ノード205aは、多段階プロセスの第1の段階の処理を実行する。また、第1の演算フェーズの間、処理ノード205bは、データのロード/アンロード動作を実行する。このフェーズの間のデータのロード/アンロード動作は、処理ノード205bが多段階プロセスの第2の段階の処理を実行するために必要なデータを記憶装置210から受信することを含む。
第1の演算フェーズに続いて、第1の処理ノード間交換が行われる。この第1の処理ノード間交換では、処理ノード205aは、第1の段階で行われた処理の結果を処理ノード205bに送信する。
第1の処理ノード間交換フェーズに続いて、システム200は、第2の演算フェーズに進む。第2の演算フェーズの間、第2の処理ノード205bは、多段階プロセスの第2の段階と関連付けられた処理を実行する。第2の処理ノード205bは、処理ノード205aから受信した第1の段階の処理の結果に応じて、この処理を実行する。また、第2の演算フェーズの間、第1の処理ノード205aは、第1の演算フェーズの間に計算した結果を記憶装置210にアンロードする。これらの結果を記憶装置210にアンロードすることにより、これらの結果は、後続の処理(表220によって示される多段階プロセスとは別個のプロセスの一部であり得る)で必要とされる際に利用可能になる。また、第2の演算フェーズの間、第1の処理ノード205aは、処理するために必要なデータを記憶装置210からロードする。このデータは、次の演算段階の間に第1の処理ノード205aによって処理するために使用される。
第2の演算フェーズに続いて、第2の処理ノード間交換が行われる。この第2の処理ノード間交換では、第2の処理ノード205bは、第2の段階で行われた処理の結果を第1の処理ノード205aに送信する。
第2の処理ノード間交換フェーズに続いて、システム200は、第3の演算フェーズに進む。第3の演算フェーズの間、第1の処理ノード205aは、多段階プロセスの第3の段階と関連付けられた処理を実行する。第1の処理ノード205aは、第2の処理ノード205bから受信した第2の段階の処理の結果に応じて、この処理を実行する。また、第3の演算フェーズの間、第2の処理ノード205bは、第2の演算フェーズの間に計算した結果を記憶装置210にアンロードするように構成される。これらの結果を記憶装置210にアンロードすることにより、これらの結果は、後続の処理(表220によって示される多段階プロセスとは別個のプロセスの一部であり得る)で必要とされる際に利用可能になる。また、第3の演算フェーズの間、第2の処理ノード205bは、処理するために必要なデータを記憶装置210からロードする。このデータは、次の演算段階の間に第2の処理ノード205bによって処理するために使用される。
システム200は、説明されるように、処理ノード205a、205bの一方によって最終結果が得られるまで、プロセスの段階だが引き続き進行することができる。
図2は、処理ノード205a、205bが各演算フェーズ間で役割を交互に行う例を示す。しかし、他の実施形態では、処理ノード205a、205bは、固定された役割を有し得る。言い換えれば、処理ノード205a、205bの一方は、各段階と関連付けられた計算を実行することに専念し、処理ノード205a、205bの他方は、各段階と関連した計算を準備するために必要なデータのロード/アンロード動作を実行することに専念する。図2Aを参照すると、図2Aは、そのような事例において各フェーズの間に実行される処理の例を示している。
図2Aに示されるように、第1の演算フェーズの間、第1の処理ノード205aは、多段階プロセスの第1の段階と関連付けられた処理を実行して、結果を生成するように構成される。また、第1の演算フェーズの間、処理ノード205bは、第2の段階と関連付けられた処理を実行するために第2の演算フェーズの間に必要なデータを記憶装置210からロードする。第1の処理ノード間交換フェーズの間、第1の処理ノード205aは、第1の演算フェーズの間に計算した結果を第2の処理ノード205bに渡す。また、第1の処理ノード間交換フェーズの間、第2の処理ノード205bは、第1の演算フェーズの間に記憶装置からロードしたデータを第1の処理ノード205aに渡す。第2の演算フェーズの間、第1の処理ノード205aは、第1の演算フェーズの間に計算した結果を使用して、及び、第1の処理ノード間交換フェーズの間に処理ノード205bから受信したデータを使用して、第2の段階と関連付けられた処理を実行する。また、第2の演算フェーズの間、第2の処理ノード205bは、第1の演算フェーズの間に処理ノード205aによって計算された結果を記憶装置210にアンロードする。また、第2の処理ノード205bは、第2の演算フェーズの間、第3の段階と関連付けられた処理を実行するために必要なデータを記憶装置210からロードする。第2の処理ノード間交換フェーズの間、第1の処理ノード205aは、第2の演算フェーズの間に計算した結果を第2の処理ノード205bに渡す。また、第2の処理ノード間交換フェーズの間、第2の処理ノード205bは、第2の演算フェーズの間に記憶装置210からロードしたデータを第1の処理ノード205aに渡す。システム200は、同様の方法で、残りのフェーズを進む。
図2及び2Aは、2つの処理ノード205a、205bを有するシステム200を示しているが、いくつかの実施形態では、2つ以上の処理ノードを使用することができる。これらの処理ノードの各々は、記憶装置210にアクセスする。いずれか1つの演算フェーズの間に記憶装置とのロード/アンロード動作を実行するように構成された処理ノードの数と、同じ演算フェーズの間に演算を実行するように構成された処理ノードの数との比率は、いかなる値も取ることができる。
図4を参照すると、図4は、4つの処理ノード405a、405b、405c、405d(本明細書では総称して「処理ノード405」と呼ばれる)を含むシステム400を示している。処理ノード405の各々は、記憶装置410にアクセスする。記憶装置410は単一の記憶ユニット410として示されているが、いくつかの実施形態では、記憶装置410の一部である複数の記憶ユニットが存在し得、それらの処理ノードの異なる処理ノードは、異なる記憶ユニットにアクセスする。
処理ノード405は、共に、多段階プロセスを実施する。多段階プロセスの段階は、多段階プロセスの後続の段階の間に動作を実行するために使用される結果を生成する。所定の演算フェーズの間、処理ノードの各々は、(i)段階のうちの1つと関連付けられた演算を実行するか、或いは、(ii)記憶装置410からのデータのロード及び/又は記憶装置410へのデータのアンロードを行うためにデータのロード/アンロード動作を実行するように構成される。所定の処理ノード間交換フェーズの間、それらの処理ノード405のうちの関係する処理ノード405は、次の演算フェーズの間に処理ノード405うちの1つ又は複数がこれらの結果に応じて計算を実行できるようにするために、前の演算フェーズからの結果を交換する。
各演算フェーズの間、処理ノード405の少なくとも1つは、今後のフェーズの間の演算に必要なデータを記憶装置410からロードすることができるように、データのロード/アンロード動作を実行する。その上、処理ノード405の少なくとも1つにデータのロード/アンロードを実行させることにより、前の演算フェーズからの結果をアンロードすることができる。
図4に示されるシステム400は、異なる多段階プロセスに対して並列処理を実行するために使用することができる。異なるプロセスは、同じ計算を必要とするが、異なる入力データを使用する。例えば、システム400は、複数のニューラルネットワークの訓練又は動作を同時に実行するために使用することができる。
図5を参照すると、図5は、処理ノード405のシステム400が複数の多段階プロセスを並行して実行するためにどのように動作するかを示す例を示している。表500は、各フェーズにおいて4つの処理ノード405によって実行される動作を説明する。各演算フェーズの間、処理ノード405のうちの1つは、データのロード/アンロード動作を実行する。残りの処理ノードは、多段階プロセスの段階と関連付けられた計算を実行する。この例では、1つの処理ノード(処理ノード1)が、ロード/アンロード動作を実行することに専念する。しかし、他の例では、ロード/アンロード動作を実行する処理ノードは、異なる演算フェーズごとに異なり得る。複数の多段階プロセスは、第1、第2、第3及び第4の多段階プロセスと呼ばれる。しかし、これらのプロセスは、同じプロセスの異なる例であり得ることを理解すべきである。言い換えれば、異なるプロセスの対応する段階で実行される計算のタイプは、同じであるが、異なる入力データを使用することができる。
示されるように、第1の演算フェーズの間、処理ノード2は、第3の多段階プロセスの第1の段階の結果を計算する。また、第1の演算フェーズの間、処理ノード3は、第2の多段階プロセスの第2の段階の結果を計算する。また、第1の演算フェーズの間、処理ノード3は、第1の多段階プロセスの第3の段階の結果を計算する。処理ノード3及び4による第2及び第3の段階の演算に必要な値を計算するために以前の段階も行われるが、これらは図5には示されていないことを理解すべきである。また、第1の演算フェーズの間、処理ノード1は、第4の段階と関連付けられた計算を実行するために必要なデータをロードする。
第1の処理ノード間交換フェーズの間、処理ノード1は、第1の演算フェーズでロードしたデータを処理ノード2に送信する。このデータは、処理ノード2によって、第1、第2及び第3のプロセスの第4の段階と関連付けられた処理を実行するために使用される。第1の処理ノード間交換フェーズの間、処理ノード2は、第1の演算フェーズで計算した結果を処理ノード1及び3に送信し、処理ノード3は、第1の演算フェーズで計算した結果を処理ノード1及び4に送信し、処理ノード4は、第1の演算フェーズで計算した結果を処理ノード1及び2に送信する。
第2の演算フェーズの間、処理ノード2、3、4の各々は、前の演算フェーズで処理を実行したプロセスとは異なるプロセスと関連付けられた処理を実行する。処理ノード2は、処理ノード4から受信した結果及び処理ノード1によってロードされたデータを使用して、第1のプロセスの第4の段階の結果を計算する。処理ノード3は、第3のプロセスの第2の段階の結果を計算する。処理ノード3は、第2のプロセスの第3の段階の結果を計算する。また、第2の演算フェーズの間、処理ノード1は、第5の段階と関連付けられた計算を実行するためにデータをロードする。また、処理ノード1は、第1の処理ノード間交換フェーズで他の処理ノードから受信した結果を記憶装置410にアンロードする。
第2の処理ノード間交換フェーズの間、処理ノード1は、第2の演算フェーズでロードしたデータを処理ノード3に送信する。このデータは、処理ノード3によって、第1、第2及び第3のプロセスの第5の段階と関連付けられた処理を実行するために使用される。また、第2の処理ノード間交換フェーズの間、処理ノード2は、第2の演算フェーズで計算した結果を処理ノード1及び3に送信し、処理ノード3は、第2の演算フェーズで計算した結果を処理ノード1及び4に送信し、処理ノード4は、第2の演算フェーズで計算した結果を処理ノード1及び2に送信する。
第3の演算フェーズの間、処理ノード2、3、4の各々は、前の演算フェーズで処理を実行したプロセスとは異なるプロセスと関連付けられた処理を実行する。処理ノード2は、処理ノード4から受信した結果を使用して、第2のプロセスの第4の段階の結果を計算する。処理ノード3は、処理ノード2から受信した結果及び処理ノード1によってロードされたデータを使用して、第1のプロセスの第5の段階の結果を計算する。また、第3の演算フェーズの間、処理ノード1は、第1の段階と関連付けられた計算を実行するためにデータをロードする。また、処理ノード1は、第2の処理ノード間交換フェーズで他の処理ノードから受信した結果を記憶装置410にアンロードする。
第3の処理ノード間交換フェーズの間、処理ノード1は、第2の演算フェーズでロードしたデータを処理ノード4に送信する。このデータは、処理ノード4によって、第4のプロセスの第1の段階と関連付けられた処理を実行するために使用される。また、第3の処理ノード間交換フェーズの間、処理ノード2は、第3の演算フェーズで計算した結果を処理ノード1及び3に送信し、処理ノード3は、第3の演算フェーズで計算した結果を処理ノード1に送信し、処理ノード4は、第2の演算フェーズで計算した結果を処理ノード1及び2に送信する。この事例では、処理ノード3は、処理ノード4にその結果を送信しないが、その理由は、次の演算フェーズの間の処理ノード4による処理の実行においてこれらの結果が不要であるためであることに留意されたい。
処理は、必要に応じた数のプロセス全体を通じて続けられる。
所定のフェーズの間に単一の処理ノードに必要なデータのロード/アンロード動作を実行させ、残りの処理ノードに演算を行わせることにより、所定のいかなるフェーズの間も、処理ノードの大部分が演算動作に従事しているため、高い効率を達成することができる。単一の多段階プロセスと関連付けられた処理を実行する際に効率を達成することに加えて、技法は、多数の多段階プロセスと関連付けられた処理を実行する際に効率を達成するためにも適用することができる。
図2及び4に関して上記で説明される技法は、ニューラルネットワークの訓練及び動作に適用することができる。この事例では、記憶装置からのロード及び/又は記憶装置へのアンロードが行われるデータは、重み、活性化(activation)、バイアスのうちの1つ又は複数を含む。これらのデータは、必要な際にアクセスできるように記憶装置に格納することができる。
ニューラルネットワークは、機械学習分野や人工知能分野で使用される。ニューラルネットワークは、リンクによって相互接続して互いに対話するノードセットの配列を含む。演算におけるニューラルネットワークの原理は、人間の脳において電気刺激がどのように情報を伝達するかについての情報に基づく。この理由から、ノードは、ニューロンと呼ばれる場合が多い。また、それらのノードは、頂点と呼ぶこともできる。リンクは、エッジと呼ばれる場合がある。ネットワークは、入力データを取り入れることができ、ネットワークの特定のノードは、データに対して動作を実行することができる。これらの動作の結果は、他のノードに渡される。各ノードの出力は、その活性化(activation)又はノード値と呼ばれる。各リンクは、重みと関連付けられる。重みは、ニューラルネットワークのノード間の接続性を定義する。ニューラルネットワークが学習できるようにするための多くの異なる技法が知られている。学習は、重みの値を変更することによって行われる。
図6は、ニューラルネットワークのノードの一配列を極端に簡略化したバージョンを示す。このタイプの配列は、学習又は訓練で使用される場合が多く、ノードの入力層、ノードの隠れ層、及びノードの出力層を含む。現実的には、各層には多くのノードが存在し、複数の隠れ層が存在する場合が多い。ネットワークは、何百万ものノードを有し、多次元的に接続することができる。入力層の各ノードNiは、その出力において、活性化又はノード値を生成することができ、その生成は、そのノードに提供されたデータに対して関数を適用することによって行うことができる。重みの各々は、特定のノードと隠れ層の接続されているノードとの接続性を定義する。入力層から出力されたノード値のベクトルは、隠れ層のノードに対する入力値セットを提供するために、それぞれの重みの行列によってスケーリングされる。ノードNhの入力を決定するために適用される重みは、w0・・・・w2でラベル付けされる。ある層の出力に重みの行列が適用され、次の層に対する重み付けされた受信データが決定された後、次の層の各ノードは、重み付けされた受信データに対して活性化関数を適用する。活性化関数は、例えば、シグモイド関数であり得る。図6Aを参照されたい。入力層の各ノードは、少なくとも最初は、隠れ層の各ノードに接続される。隠れ層の各ノードは、提供されたデータに対して活性化関数を実行し、同様に出力ベクトルを生成することができ、その出力ベクトルは、別の重みの行列を適用した後に、出力層のノードNoの各々に供給される。次いで、出力層のノードNoは、重み付けされた受信データに対して活性化関数を適用して、ネットワークに対する出力値を決定する。
異なる学習手法があるが、各事例では、図6のネットワークを通じて左から右に進む順伝播、全損失の計算及び図6のネットワークを通じて右から左に進む損失の逆伝播がある。次のサイクルでは、各ノードは、逆伝播損失を考慮に入れ、見直された重みセットを生成する。この方法では、ネットワークは、その所望の動作を実行するように訓練することができる。学習プロセスの一部として、重みを更新することに加えて、バイアスなど、活性化を計算するためにノードの各々において適用される他のモデルパラメータを更新することもできる。
図6から理解されるように、ニューラルネットワークの層の各々は、段階を構成し、段階の各々と関連付けられる処理は、前の段階からの出力に依存する(入力層を除く)。従って、ニューラルネットワークの訓練及び動作は多数の段階を含み、各段階は前の段階の結果に依存するため、本発明の実施形態は、ニューラルネットワークの訓練及び動作に適用することができる。
図7を参照すると、図7は、特定の入力を所与としてニューラルネットワーク700からの出力を計算する際に、図2に示されるシステム200をどのように適用することができるかを示している。図7に示されるように、ニューラルネットワークは、多数の段階a、b、c、dを含む。ニューラルネットワークは、図7に示されていないさらなる段階を含み得る。処理ノード205a、205bの一方は、次の段階に対して活性化が計算される前に、ある1つの段階から活性化(すなわち、出力)を演算しなければならない。
表720は、ニューラルネットワーク700を走らせる際に、処理ノード205a、205bの各々によって実行されるプロセスの表示を含む。表720で示される動作は、ニューラルネットワークを走らせる際に実行される処理全体のほんの一部を構成し得るが、そのようなニューラルネットワーク700の処理を効率的に実行するために、図2に示される処理ノードシステム200をどのように適用することができるかを示す例を提供する。第1の演算フェーズでは、処理ノード205aは、ニューラルネットワークの層「a」の活性化を演算する。層「a」の活性化は、ニューラルネットワーク700の入力値に応じて決定することができる。層「a」の活性化は、ニューラルネットワーク700の前の層(図示せず)からの活性化(以前の演算フェーズで計算されたもの)に応じて決定することができる。また、第1の演算フェーズの間、第2の処理ノード205bは、記憶装置210から重みWbをロードする。第2の処理ノード205bは、層bの活性化を計算するためにこれらの重みWbを必要とするため、これらの重みWbは、後続の演算フェーズの間に第2の処理ノード205bによって必要とされるデータの一部である。
第1の処理ノード間交換フェーズの間、第1の処理ノード205aは、層aの活性化を第2の処理ノード205bに送信する。これらの活性化もまた、層bの活性化を計算する際に第2の処理ノード205bによって必要とされるデータである。
第2の演算フェーズの間、第1の処理ノード205aは、層aの活性化を記憶装置210にアンロードする。これらの活性化は、後続の処理で必要な際に利用できるように、記憶装置210に格納される。例えば、ニューラルネットワークを訓練する際、ニューラルネットワークの重みを調整するために使用される逆伝播は、ニューラルネットワーク700に対して計算された活性化を必要とする。従って、記憶装置210に活性化を格納することにより、重みを調整するために逆伝播を行う際にこれらの活性化をアンロードすることができる。また、第2の演算フェーズの間、第1の処理ノード205aは、層cの活性化を計算する際に使用するために必要であるため、重みWcをロードする。また、処理ノード205aは、層cの活性化を計算するために必要な層cの任意のバイアスを記憶装置210からロードすることができる。
第2の演算フェーズの間、第2の処理ノード205bは、層bの活性化を演算する。第2の処理ノード205bは、第1の処理ノード間交換フェーズの間に第1の処理ノード205aから受信した層aの活性化から並びに第1の演算フェーズの間に記憶装置210からロードした重みWb及びバイアスから、層bの活性化を演算する。
第2の処理ノード間交換フェーズの間、第2の処理ノード205bは、第1の処理ノード205aに層bの活性化を送信する。これらの活性化は、第1の処理ノード205bによって、層cの活性化を計算する際に必要とされる。
第3の演算フェーズの間、第1の処理ノード205aは、層cの活性化を演算する。第1の処理ノード205aは、第2の処理ノード間交換フェーズの間に処理ノード205bから受信した層bの活性化に応じて、これらの活性化を演算する。また、第1の処理ノード205bは、第2の演算フェーズの間に記憶装置210からロードした重みWc及び任意のバイアスに応じて、層cの活性化を演算する。
また、第3の演算フェーズの間、第2の処理ノード205bは、記憶装置210から重みWdをロードする。また、第2の処理ノード205bは、層dの活性化を計算するための任意のバイアスもロードする。また、第3の演算フェーズの間、第2の処理ノード205bは、層bの活性化を計算するために使用された重みWbをアンロード又は削除する。これらの重みWbはもはや不要であるため、第2の処理ノード205bは、それらの重みWbをメモリから取り除いてスペースを節約する。
また、第3の演算フェーズの間、第2の処理ノード205bは、層bの活性化を記憶装置210にアンロードする。これらの活性化は、後続の処理で必要な際(例えば、逆伝播を実行する際)に利用できるように、記憶装置210に格納される。
システム200を使用した処理は、ニューラルネットワーク700からの最終的な出力が得られるまで、ニューラルネットワークの層を通じてこの方法で続けることができる。
従って、システム200は、あらゆる演算フェーズの間に層の活性化を計算するために処理ノードの一方に処理を実行させることによって、訓練又は動作目的で、ニューラルネットワークをより急速に走らせることができる。
いくつかの実施形態では、システム200は、図2Aに示される方法で、ニューラルネットワークの訓練又は動作に適用することができる。これは、図7Aに示されており、図7Aでは、第1の処理ノードは、活性化の演算に専念し、第2の処理ノードは、ロード/アンロード動作を含む準備の実行に専念する。表730には、プロセッサの各々によって実行される動作が示されている。
図4に示されるシステム400もまた、ニューラルネットワークに対する処理(動作又は訓練)を実行するために使用することができる。
図8を参照すると、図8は、ニューラルネットワークを走らせる際にシステム400の処理ノード405の各々によって実行することができる動作を示す例示的な表800を示している。この例では、図5に関して上記で論じられる異なる多段階プロセスの各々は、同じニューラルネットワークに供給された異なる入力データセットの使用に対応する。従って、多段階プロセスの各々は、ニューラルネットワークの単一の反復である。図7及び7Aと同様に、各段階によって生成される結果は活性化であり、活性化を計算するために記憶装置からロードされるデータは、重みを含む。図8では、演算段階3において、処理ノード1は、ニューラルネットワークの第4の反復を実行するために使用される入力データを記憶装置からロードする。この入力データは、層1の活性化と同じものであり得、処理ノード4は、このデータを修正しない。
上記の例の各々において、特定の演算フェーズの間、演算を実行する処理ノードとデータのロード/アンロード動作を実行する処理ノードとの間には、N:1の比率があるということが知られている。しかし、他の実施形態では、この比率は異なり得る。例えば、任意の所定の演算フェーズの間、演算プロセッサとロード/アンロードプロセッサとの間には、N:Mの比率があり得、N及びMは、いかなる正の整数でもあり得る。上記に見られるように、処理ノードのシステムにおける異なる処理ノードは、異なる入力データセットに対して同じ動作を実行するように構成することができる。その際、各処理ノードは、異なる結果を生成する。これは、データ並列処理と呼ぶことができる。そのようなシステムでは、処理の結果は、処理ノードの間で共有することができ、その結果、システムの各処理ノードは、各処理ノードによって計算された結果の平均を表し得る最終結果にアクセスすることができる。そのようなプロセスの応用の1つは、ニューラルネットワークの訓練であり、処理ノードグループの各処理ノードは、逆伝播の間、異なる訓練データセットに基づいて、特定の層の重みの新しい値を決定する。次いで、各層の更新済みの重み(又は重み更新)は、処理ノードセットの間で共有され、その結果、分散訓練の利点を得ることができる。コレクティブは、処理ノード間で更新済みの重み/重み更新を共有するために使用することができるデータを共有するためのルーチンである。
図14を参照すると、図14は、ニューラルネットワークを訓練するための分散アーキテクチャの概略ブロック図を示している。訓練データ源100が提供される。この訓練データ源100は、訓練しているニューラルネットワークモデルに適用可能な訓練データを保持することができるデータベース又は他の任意の種類のデータストアであり得る。ニューラルネットワークモデルによる処理は、それ自体が、複数の処理ノード110a、110b、110cなどにわたって分散される。図14では、3つのユニットのみが示されているが、いかなる数の処理ノードも利用できることが容易に理解されよう。各処理ノード110a、b、cは、訓練データ源100から訓練データのバッチを受信する。各処理ノード110a、b、cは、モデルを定義するパラメータ112a、112b、112cのセットを保持する。訓練データの受信バッチは、計算関数114の現行のパラメータセットと併せて処理され、計算関数の結果は、いわゆるデルタを生成するために使用され、デルタは、訓練データのバッチ及び現行のパラメータセットに計算関数を適用した結果として生じた、オリジナルのパラメータと新しいパラメータとの差を表す。多くのニューラルネットワークでは、これらのパラメータは、「重み」と呼ばれ、従って、デルタ値は、「デルタ重み」と呼ばれる。そうでない場合は、デルタ重みは、勾配として知られている。図14では、重みは、112a、b、cでラベル付けされ、デルタ重みは、116a、b、cでラベル付けされている。実際には、重み及びデルタ重みは、処理ノードによってアクセス可能な適切なストアに格納されることが理解されよう。重み及びデルタ重みをローカルメモリに保持することができる場合は、訓練プロセスは、よりはるかに効率的なものになる。
図14のアーキテクチャの目標は、3つの別個のモデルを訓練することではなく、単一のモデルを分散して訓練することである。従って、目的は、各処理ノードにおいてモデルパラメータ(又は重み)を単一の共通のセットに収束させることである。任意の特定の重みセットで始め、各処理ノードにおいて受信された訓練データのバッチが同一ではないと想定すると、各処理ノードにおいて各計算関数によって生成されるデルタ重みにばらつきが生じることになる。従って、必要なのは、訓練データのバッチの各反復の後に処理ノードにわたってデルタ重みを集計するための方法である。これは、図14に図示されており、組合せ関数118は、各処理ノードからデルタ重みを受信し、総和又は平均関数など、デルタ重みをリデュースする数学関数を実行する。次いで、組合せ関数118の出力が各処理ノード内の組合せ回路120a、120b、120cにそれぞれ戻される。従って、新しい重みセットは、オリジナルの重みと組合せ関数118からの組み合わされた出力との組合せとして生成され、新しい重み118a、118b、118cは、ローカルメモリに戻して格納される。次いで、訓練データの次のバッチが各処理ノードに供給され、プロセスは複数回繰り返される。処理ノードの開始重みが同じである場合は、各反復の後、それらの重みは、一貫した方法で、同じ新しい値に更新される。デルタ重みは、組合せ関数118に供給され、組合せ関数118でリデュースされ、次いで、それらのリデュース形態で処理ノードの各々に供給され、オリジナルの重みと組み合わせることができる。
処理ノード間でデータの交換を効率的に実施できる方法の1つは、通信コレクティブの使用によるものであり、通信コレクティブは、コンピュータにおいてデータを処理する際に一般的に使用されるルーチンである。それらのコレクティブは、複数の異なるプロセスにわたってデータの共有及び処理を可能にするルーチンであり、複数の異なるプロセスは、同じ処理ノード上で走らせているものであっても、異なる処理ノード上で走らせているものであってもよい。例えば、1つのプロセスがデータストアからデータを読み取る場合、そのデータを他のプロセスと共有するために、「ブロードキャスト」プロセスを使用することができる。別の例は、特定の関数の結果が複数のプロセスにおいて必要な際である。「リダクション」は、複数のプロセスの各々からのデータ値に演算関数の適用を必要とした結果である。「ギャザ」及び「スキャタ」コレクティブは、複数のデータアイテムを取り扱う。あるコレクティブは、機械学習アプリケーションの処理においてますます重要になった。
MPI(メッセージパッシングインタフェース)は、多くの並列演算アーキテクチャに適用することができるメッセージパッシング規格である。MPIは、機械学習に適用可能な多くのコレクティブを定義する。そのようなコレクティブの1つは、「オールリデュース」と呼ばれる。オールリデュース動作は、異なるソースプロセスからの同じサイズの複数のデータ値に作用する演算関数の結果を受信プロセスで提供できるようにする。受信プロセスは、ソースプロセスのうちの1つであり得ることや、複数の受信プロセスが存在し得ることに留意されたい。オールリデュースコレクティブは、複数のソースプロセスからのデータ値をリデュースし、その結果をすべてのソースプロセス(リデュースされた結果の受信プロセスとして動作する)に分散する。MPI規格によれば、オールリデュースコレクティブは、リデュースコレクティブですべてのソースプロセスからのデータ値をリデュースし(例えば、プロセスのうちの1つで)、次いで、各ソースプロセスに結果をブロードキャストすることによって実施することができる。
図14Aは、5つの処理ノードN0・・・N5のライン接続トポロジにおいてオールリデュースコレクティブをどのように実施できるかを示す概略図である。これらの処理ノードは、組合せ関数が分散される図14の処理ノードに相当し得る。処理ノードは、ライン構成で接続されるように示されており、各処理ノードは、「順方向」リンクLF及び「逆方向」リンクLBによってその近隣の処理ノードに接続される。図に示されるように、方向表現が含意するように、順方向リンクは、図14Aでは、左から右に処理ノードを接続し、逆方向リンクは、図14Aでは、右から左に処理ノードを接続する。各処理ノードは、250で指定される処理能力及び275で指定される格納能力を有する。また、各処理ノードは、リンクLF/LBを介してその近隣の処理ノードとの接続を可能にする1つ又は複数のリンクインタフェースも有する。
その上、逆方向リンクは、終点ノードにおいて完全にリデュースされた結果が得られるまでは、ブロードキャストには利用されない。しかし、部分ベクトルが大きい場合は、始点ノードがその部分を送り終えるよりかなり前に、結果の先頭部分が始点ノードに返され、従って、すべての順方向及び逆方向リンクにおいて活動の実質的なオーバーラップが存在する。
このアルゴリズムの修正(小さな改善を表す)においては、ラインの各終点の処理ノードは、中央ノードに向けてそれらの部分を送信し始め、中央ノードにおいてリダクションを完了することができる。その事例では、結果は、ラインの終点に至るまで順方向に進み続けると、終点ノードに戻る。このシナリオでは、順方向リンクと逆方向リンクの両方において、例えば、N2とN3との間や、N3とN4との間など、移動方向の反転を伴うことになることに留意されたい。ラインを閉じてリング状にした場合(逆方向リンクと順方向リンクの両方において最終ノードN5を初期ノードN0に接続することによって)は、パイプラインアルゴリズムは、同じ方向においてリダクション及びブロードキャストを直列化することができ、その結果、双方向性リンクによって形成される2つの論理リングの各々は、半分のデータに対して独立して動作することができる。各部分が2つの部分に分かれている図14Bを参照されたい。最初の半分ΔAは、順方向リンクにおいてリデュースされ(図14Aのように)、N5とN0との間の接続レグにおいてブロードキャストされる。ベクトルの残りの半分ΔBは、逆方向リンクにおいてリデュースされ、次いで、逆方向リンクの接続リングにおいてブロードキャストされる。
二次元のリングを使用する際、代替の手法は、リデューススキャタコレクティブに続いてオールギャザコレクティブを使用して、オールリデュースを実施することである。Jain及びSabharwalが著した「Optimal Bucket Algorithms for large MPI collectives on torus interconnects」(ICS’10、6月2~4日、筑波)と称する論文は、円環(torus)相互接続処理ノードの処理ノード間の双方向リンクを想定した、オールギャザ、リデューススキャタ及びオールリデュースコレクティブに対するバケットベースのアルゴリズムを提示している。この手法は、各ステップにおいて取り扱われる複数のデータ値(フラグメント)があるということに基づいて動作する。リデューススキャタコレクティブでは、各プロセスは、初期の部分ベクトルで始める。ここでのプロセスへの言及は、処理ノードにおいて行われるプロセスに対するものであると想定される。部分ベクトルは、複数の要素又はフラグメントに分割することができる。すべてのプロセスの対応する要素はリデュースされ、次いで、これらのリデュース済みの要素は、プロセスにわたって分散される。オールギャザコレクティブでは、すべてのプロセスが、他のすべてのプロセスからすべての要素を受信する。リデューススキャタコレクティブは、すべての部分をリデュースし、それぞれのノードにおいて各リダクションを格納する(図15を参照)。オールリデュースコレクティブ動作は、リデューススキャタコレクティブに続いてオールギャザコレクティブ動作を実行することによって実施することができる。
処理ノード間でデルタ重みを交換するために使用することができるオールリデュースコレクティブは、図15に示される。図15は、開始状態S1での4つの処理ノードの各々における部分値又は「部分」P0、P1、P2、P3の集合(ベクトル)を示す。この環境では、処理ノードは、処理ノードのネットワークの処理ノードである。各処理ノードN0、N1、N2、N3は、4つの「対応する」部分P0、P1、P2、P3を有することに留意されたい。すなわち、各部分は、処理ノードn上のそのベクトルにおけるP0(n)が処理ノードn+1上のそのベクトルにおけるP0(n+1)と同じ位置を有するようなベクトルの位置を有する。添え字(n)は、その部分が存在する処理ノードを示すために使用される(従って、P0(0)は、処理ノードN0上の部分P0である)。リデューススキャタパスでは、対応する部分がリデュースされ、処理ノードのうちの1つにリダクションが提供される。例えば、部分P0(0)、P0(1)、P0(2)、P0(3)は、(r0に)リデュースされ、処理ノードN0に配置される。同様に、部分P1(0)、P1(1)、P1(2)、P1(3)は、(r1に)リデュースされ、処理ノードN1に配置される。そして以下同様に続き、中間状態S2では、各処理ノードは、リダクションr0、r1、r2、r3のうちの1つを有する。説明されるように、リダクションは、任意の組合せ関数f(Pi0
3)によるものであり得、独立演算子(例えば、max)又は結合演算子=P1(N0)*P1(N1)*P1(N2)*P1(N3)が含まれ得る。次いで、オールギャザパスでは、状態S3を起動させるために、各リダクションがすべての処理ノードに提供され、ここでは、各処理ノードは、すべての4つのリダクションを保持する。S1では、「対応する」部分(例えば、P0(0)、P0(1)、P0(2)、P0(3))はすべて異なり得るのに対して、状態S3では、各リダクション(例えば、r0であり、ri=f{(Pi(0),Pi(1),Pi(2),Pi(3))})はすべての処理ノードにおいて同じであることに留意されたい。機械学習では、部分値P0、P1、P2、P3の集合はベクトルである。部分(例えば、更新済みの重み)のベクトルは、訓練の間にモデルの各パスにおいて生成される。状態S3での各処理ノードにおけるリダクションr0、r1、r2、r3は、全リダクションベクトルである。機械学習の環境では、各部分は、モデルのパラメータに対する更新デルタの集合であり得る。その代替として(本明細書ではさらなる説明が行われない配列では)、各部分は、更新済みのパラメータであり得る。
従って、記述されるように、オールリデュース動作は、リデューススキャタ動作と、それに続くオールギャザ動作からなる。リデューススキャタ動作の間、各ノードは、部分の異なる要素を交換する。リデューススキャタが完了すると、すべてのノードは、最終的なオールリデュースのn分の1を有する。オールギャザの間、各ノードは、n-1ステップ後にすべてのノードがデータのフルセットを有するようになるまで、最終的なオールリデュースの追加の1/nを受信する。
図16A及び16Bは、6つの「仮想」IDリングを使用するリデューススキャタ/オールギャザの例を示す。これらは、本明細書では、「論理」リングとも呼ばれる。図16Aは、複数の仮想リングにおける部分のリダクションを示す概略図である。各部分は、6つのフラグメントに分けられる。図16Aでは、大文字R、Y、G、B、P、Lの各々は、各処理ノードで格納される部分の異なるフラグメントを示す。文字は、互いにリデュースする予定の対応するフラグメントを示し、それらのフラグメントに対する「仮想」又は「論理」リングを定義する。図16Aを見ると、部分P0、P1、P2、P3、P4、P5の各々における「R」フラグメントは、結果ベクトル(RΣA0
5)の単一のフラグメントにリデュースされる。Y、G、B、P、Lフラグメントに対しても同様である。
図16Bは、タイミング図を示し、水平軸上の時間は、オールリデュースプロセスの各ステップにおけるデータ交換及び演算を示す。図16A及び16Bでは、オールリデュースプロセスは、リデューススキャタフェーズと、それに続くオールギャザフェーズによって遂行される。
図16A及び16Bの表記法は以下の通りである。各部分は、P0、P1、P2、P3、P4、P5で示される。プロセスの開始時、各部分は、それぞれの処理ノードN0、N1、N2、N3、N4、N5上に格納されている。各フラグメントは、リデュースされると考えられる仮想リングにおけるそのフラグメント及びその位置に従ってラベル付けされる。例えば、RA0は、処理ノードN0-N1-N2-N3-N4-N5によって形成される仮想リングの第1のフラグメントであるため、部分P0のRフラグメントを示す。RA1は、処理ノードN1で計算されたRフラグメントを示し、その仮想リングの第2の位置にある。YA0は、処理ノードN1で計算されたYフラグメントを示す。「0」の添え字は、それがその仮想リングの第1のフラグメントであることを示し、Yリングは、N1-N2-N3-N4-N5-N0である。具体的には、Aに付けられる添え字は、仮想リングを反映するものであり、物理的な処理ノード(又は部分)には相当しないことに留意されたい。図16Aは、順方向リンクの仮想リングのみを示すことに留意されたい。図16Bは、逆方向リンクにおいて同等のプロセスが起こっていることを示し、フラグメントは、Bとして示されている。
ステップ1では、各仮想リングの第1のフラグメント(A0)は、その処理ノードから次の隣接する処理ノードに転送され、その処理ノードでの対応するフラグメントと併せてリデュースされる。すなわち、RA0は、N0からN1に移動し、RA1と併せてリデュースされ、RA0,1を形成する。0,1の表記法は、仮想リングの第1及び第2のフラグメントのリダクションによってフラグメントが形成されることを示す。同じステップにおいて、各仮想リングのA0フラグメントが同時に送信されることに留意されたい。すなわち、N1とN2との間のリンクはYA0を送信するために使用され、N2とN3との間のリンクはGA0を送信するために使用されるなど、以下同様である。次のステップでは、対応するリデュース済みのフラグメントは、順方向リンク上でそれらの次の隣接する処理ノードに送信される。例えば、RA0,1は、N1からN2に送信され、YA0,1は、N2からN3に送信される。明確にするため、図16Aにおいてすべてのフラグメントに番号が付けられているわけではないことに留意されたい。フラグメント及び番号のフルセットは、図16Bに示されている。このプロセスは、5つのステップにわたって続けられる。5つのステップの後には、各処理ノードにすべてのフラグメントのリダクションが存在する。第5のステップの終了時には、このリダクションは、そのフラグメントの対応する各リングの最後の処理ノードにある。例えば、Rリダクションは、処理ノードN5にある。
オールギャザフェーズの開始は、各仮想リングにおける最後の処理ノードから最初の処理ノードへの送信によって始まる。従って、Rフラグメントの最終的なリダクションは処理ノードN5で終了し、オールギャザフェーズの第1のステップの準備が整う。Yフラグメントの最終的なリダクションは相応に処理ノードN0で終了する。オールギャザフェーズの次のステップでは、リデュース済みのフラグメントは再び、それらの次の隣接する処理ノードに送信される。従って、完全にリデュースされたRフラグメントは、ここではN2にあり、完全にリデュースされたYフラグメントはここではN3にあるなど、以下同様である。この方法では、各処理ノードは、オールギャザフェーズの終了時には、部分の完全にリデュースされたすべてのフラグメントR、Y、G、B、P、Lを有するようになる。
第2の発明の実施形態によれば、処理ノードグループを適用して、新しい方法で、データ並列処理の実行及びその処理の結果の交換を行うことができる。グループの各処理ノードは、少なくとも2つの異なるセットに属する。
図9を参照すると、図9は、処理ノードのグループ900の例を示しており、グループ900の各処理ノードは、2つ(この例では、行と列で示されている)の処理ノードセットに属する。例えば、IPU0は、行1(第1のセット920)と列1(第2のセット930)に属する。図9では、各処理ノードが属するセットは、行及び列として示されているが、他の実施形態では、グループ900は、そのような格子フォーマットで物理的に配列される必要はなく、ノードの物理的な配列は異なり得る。処理ノードの各々はIPUとして示されているが、本発明はそれに限定されない。
図9の処理ノードの各々は、提供される異なる入力データセットに基づいてデータの異なる出力アレイを計算するように構成される。データの出力アレイの各々は、図9に示されている。例えば、処理ノードIPU0は、アレイ910を格納する。機械学習環境では、各入力データセットは、異なる訓練データセットであり得、出力データの各アレイは、訓練データを使用して訓練を実行する際に生成される異なる更新済みの重みのセット又は異なるデルタ重みセットであり得る。
個別に計算された出力アレイの各々に依存する単一の出力アレイが各処理ノードに存在するように、出力アレイを交換するために実行されるコレクティブ動作は、3つのステップを伴うものと理解することができる。
第1のステップとして、各列では、その列の処理ノードの各々の間で、リデューススキャタ動作が実行される。図9Aは、リデューススキャタ動作が実行された後に結果として生じたグループ900を示す。示されるように、リデューススキャタ動作を実行した後、特定の列の処理ノードの各々は、最後には、アレイのサブセットに対するリデュース済みの値を有するようになる。各列では、その列の各処理ノードは、アレイの異なる位置に値のサブセットを格納する。各行では、その行の各処理ノードは、アレイの同じ位置に値のサブセットを格納する。
第2のステップとして、各行では、その行の処理ノードの各々の間で、オールリデュース動作が実行される。第1のステップに続いて、所定の行の処理ノードの各々は、アレイ全体に対する値のサブセットのみを含むため、所定の行に対して実行されるオールリデュース動作は、その行に対するアレイ値の各サブセットのみを使用して実行される。オールリデュース動作の結果は、図9Bに示されている。オールリデュース動作を実行した後、各行では、それぞれの行の各処理ノードは、同じ値のサブセットを有する。
第3のステップとして、各列では、それぞれの列の処理ノードの各々の間で、オールギャザ動作が実行される。オールギャザ動作の結果は、図9Cに示されている。オールギャザ動作を実行した後、グループ900の各処理ノードは、そのアレイに同じデータセットを有する。
図9~9Cに示される例は、この原理を二次元でのみ示している。言い換えれば、処理ノードの各々は、2つの処理ノードセットにのみ属する。しかし、他の実施形態では、処理ノードの各々は、2つ以上の処理ノードセットに属する。
従って、より一般的には、各処理ノードは、直列の1つ又は複数のリデューススキャタコレクティブに加わり、各リデューススキャタコレクティブは、それぞれの処理ノードが属する異なる処理ノードセット間で実行される。システムの任意の所定の処理ノードに対し、その処理ノードは、それが属するセットに共通している唯一の処理ノードである。所定の処理ノードに対し、そのセットに属する他の処理ノードはすべて、一度しか現れない。
1つ又は複数のリデューススキャタコレクティブに続いて、各処理ノードは、オールリデュースコレクティブに参加する。オールリデュースコレクティブは、さらなる処理ノードセット間で実行される。さらなるセットの各々は、リデューススキャタコレクティブに対して使用される異なるセットとは異なる。任意の所定の処理ノードに対し、その処理ノードに対するさらなるセットのノードの各々は、リデューススキャタコレクティブに対して使用されたその処理ノードに対する異なるセットの1つには属さない。
オールリデュースに続いて、各処理ノードは、一連の1つ又は複数のオールギャザコレクティブに加わる。オールギャザコレクティブの数は、リデューススキャタコレクティブの数と同じである。オールギャザコレクティブの各々は、リデューススキャタコレクティブに対して使用されたものと同じセットを使用して実行される。リデューススキャタとオールギャザに対するセットの使用順番は、逆になる。例えば、所定の処理ノードに対し、その処理ノードが第1、第2及び第3の処理ノードセットに対してその順番でリデューススキャタコレクティブに加わる場合は、オールギャザコレクティブを実行する際、その同じ処理ノードは、第3、第2及び第1の処理ノードセットに対してその順番でオールギャザコレクティブに加わる。
上記のスキームを説明する方法の1つは、システムの処理ノードがすべて多次元格子に配列されると見なすことである。この2D例は、図9~9Cに示されている。しかし、より多くの次元数が可能である。そのような多次元格子に処理ノードを物理的に配列する必要はないが、そのような格子は、コレクティブがどのように実行されるかを理解するために視覚化する上で役に立つことが理解されている。n次元を有する格子では、リデューススキャタコレクティブは、それらの次元の最初のn-1の次元にわたる処理ノードの各ラインに対して実行され、リデューススキャタコレクティブは、各次元に対して順番に実行される。次いで、n番目の次元の処理ノードのラインの各々に対して、オールリデュースコレクティブが実行される。次いで、最初のn-1の次元にわたる処理ノードの各ラインに対して、オールギャザコレクティブが実行され、オールギャザコレクティブが実行される次元の順番は、リデューススキャタコレクティブに対する次元の順番とは逆になる。
新しいコレクティブスキームは、処理ノードのシステムに対する1つ又は複数の処理ノード間交換フェーズにおいて実施される。これらの1つ又は複数の交換フェーズは、システムの処理ノード間のプリコンパイル済みの同期バリアに続いて始まる。プリコンパイル済みの同期バリアは、先行する演算フェーズからこれらの1つ又は複数の交換フェーズを分離する。
第3の発明の実施形態によれば、多数の処理ノードを適用して並列処理を実行し、モデルを更新する際、各処理ノードが独立してモデル全体を更新する必要なくモデルを更新するために、新しい方法が提供される。これにより、モデルの更新に必要な処理量が低減され、その上、並列処理システムにおけるモデル更新プロセスによって必要なメモリ量が低減される。
図17A及び17Bを参照すると、図17A及び17Bは、処理ノード1710のシステム1720に対する経時的なデータの交換及び更新を示している。システム1720の処理ノード1710は、列に配列して示されている。図では、システム1720は、複数回示されており、システム1720の各インスタンスは、データ処理ノード1710のメモリに格納されたデータがモデル更新プロセスにわたってどのように変化するかを示している。
最初に、処理ノード1710の各々は、パラメータの更新のフルセットを得なければならない。各更新セットは、異なる入力データセットを使用して得られる。いくつかの実施形態では、入力データセット及び格納されたパラメータを使用して、処理ノード1710の各々は、モデルに対する更新セットを計算する。この事例では、各処理ノード1710は、同じモデルパラメータのフルセットを格納しており、異なる更新セットを導出するために、それらのモデルパラメータと共に異なる入力データセットを使用する。他の実施形態では、処理ノード1710は、モデルパラメータから更新を決定する他の処理ノードから、モデルに対する更新セットを受信する。いくつかの実施形態では、これらのハイブリッドを実行することができ、各処理ノード1710は、更新の一部を導出し、別の処理ノード1710から更新の残りを受信する。
図17Aに示される次の段階では、処理ノード1710の各々は、パラメータの更新のフルセットを格納する。各処理ノード1710によって格納される更新は、パラメータの各々の更新を含む。処理ノード1710は、パラメータのフルセットを格納する必要はない。代わりに、各処理ノード1710は、更新するパラメータのみを格納する。処理ノード1710が他の任意のパラメータを格納する場合は、これらは、削除するか又は記憶装置にアンロードすることができる。
次いで、処理ノード1710間で更新を交換するために、処理ノード1710の各々の間で、リデューススキャタコレクティブが実行される。オールリデュースコレクティブについて説明する図15、16A及び16Bから理解されるように、リデューススキャタに続いて、各処理ノード1710がリデュース済みの更新のフルセットのサブセットを有するように、リデューススキャタは、更新の交換及びリダクションを伴う。リデューススキャタに続いて処理ノード1710のいずれか1つによって保持される更新は、各処理ノード1710によって保持されるパラメータの一部分のみの更新を含み、各処理ノード1710は、処理ノード1710によって保持されるパラメータの異なる部分の更新を保持する。
リデューススキャタに続いて、処理ノード1710のシステム1720の各処理ノード1710は、更新済みのパラメータを導出するために、導出した更新をパラメータに適用する。このプロセスの結果は、図17Bに示されている。図に見られるように、各処理ノード1710は、パラメータの一部分のみの更新を格納するため、各処理ノード1710は、パラメータの対応する部分のみを更新する。しかし、処理ノード1710間では、更新済みのパラメータのフルセットが導出される。パラメータの更新に続いて、パラメータ更新はもはや必要でなく、ノード1710から削除するか又はオフロードすることができる。
更新済みのパラメータの計算に続いて、処理ノード1710間で更新済みのパラメータを共有するために、システム1720の処理ノード1710間でオールギャザが実行される。オールリデュースコレクティブについて説明する図15、16A及び16Bから理解されるように、オールギャザの効果は、オールギャザに続いて、処理ノード1710の各々が更新済みのパラメータのフルセットを格納できるように、更新済みのパラメータを分散することである。
従って、第3の発明の実施形態は、すべてのプロセッサがモデルパラメータの各々を独立して更新する必要はなく、むしろ、モデルの更新を分散方式で実行することができるという利点を有する。
図17A及び17Bに示されるように、いくつかの実施形態では、ノード1710の各々は、特定のパラメータを更新するために使用される追加の情報(状態情報と呼ばれる)を格納することもできる。各情報状態セットは、システム1720のノード1710のうちの1つによって保持及び更新が行われ、パラメータの関連部分を更新するために使用される。更新とは異なり、各状態情報セットは、他の状態情報セットとは無関係に導出及び更新が行われる。言い換えれば、各処理ノード1710は、全状態情報の一部分(すなわち、パラメータ更新ステップの間にパラメータを更新するためにそのノード1710によって使用される状態情報の部分)のみを維持する。
図17Aに示されるように、最初に、各処理ノード1710は、全状態のサブセットを格納する。処理ノード1710は、それらの間で、全パラメータセットを更新するために使用される全状態を格納する。更新の決定及び更新のリデューススキャタ全体を通じて、状態は、未使用且つ不変のままである。リデューススキャタに続いて、各処理ノード1710は、図17Bに示されるように、そのそれぞれの状態を更新し、リデューススキャタに続いて受信した更新と共に、そのそれぞれの更新済みの状態を使用して、パラメータの一部分を更新する。
従って、状態情報が使用される実施形態では、各処理ノード1710は、全状態の一部分を維持するだけでよい。パラメータのすべてを更新するために各処理ノード1710が全状態セットを維持する必要はない。全状態セットの維持は、ノード1710の格納スペース及び処理資源に関して負担となることになる。
いくつかの実施形態では、ニューラルネットワークを訓練するために、並列システムにおいてモデルを更新するための新しい方法を適用することができる。この事例では、更新されるパラメータは、ニューラルネットワークのパラメータ(すなわち、重み、任意に、バイアス)である。更新は、訓練の逆伝播段階の間に導出されるニューラルネットワークの勾配である。
例示的なニューラルネットワークでは、処理ノード1710の各々は、ニューラルネットワークの1つ又は複数の出力値を決定するために、訓練データと共に、ニューラルネットワークのパラメータを使用する。これらの出力値は、訓練データ及び現行のパラメータと関連付けられた誤差又は損失を決定するために、ニューラルネットワークのラベルと比較される。誤差又は損失は、逆伝播プロセスにおいて、勾配セットを決定するために使用される。ニューラルネットワークの各処理ノード1710は、同じパラメータと共に異なる訓練データセットを使用するため、各ノード1710は、異なる勾配セットを導出する。
勾配のセットの計算に続いて、システム1720の各処理ノード1710は、勾配を交換するために、リデューススキャタコレクティブに参加するように構成される。これに続いて、各処理ノード1710は、リデューススキャタから得られるリデュース済みの勾配のサブセットを有するようになる。次いで、各処理ノード1710は、そのリデュース済みの勾配のサブセットを適用して、パラメータの対応する部分を更新する。パラメータ更新に続いて、各処理ノード1710が最後にはニューラルネットワークに対する更新済みのパラメータのフルセットを有するように、オールギャザが実行される。
ニューラルネットワークの訓練は、システム1720によって、多数の訓練反復で実行され、図17A及び17Bに示されるプロセスは、ニューラルネットワークに対する単一の訓練反復を示す。図17Bに示される最終状態に続いて、各処理ノード1710は、新しい訓練データセット及び更新済みのパラメータを使用して、再び適用される新しい勾配セットを導出し、再びパラメータを更新することになる。
ニューラルネットワークのパラメータの更新は、「最適化ステップ」と呼ばれる。最適化ステップは、異なる方法で実行することができる。最適化の一部のタイプ(確率的勾配降下法など)は、ステートレスである。この事例では、モデルパラメータに適用される変更は、勾配の値に等しい。この事例では、各処理ノード1710において、ニューラルネットワークに対する更新済みの重みが以下の通り計算される。
式中、Wiは、i番目の訓練反復後の重みであり、Wi+1は、i+1番目の訓練反復後の重みであり、ΔWi+1(Gi+1)は、i+1番目の訓練反復の間に導出された勾配である。
他のタイプの最適化は、ステートフルである。ステートフル最適化では、状態は、ニューラルネットワークの各重みに対して維持され、勾配と共に、各重みをどのように更新するかを決定するために使用される。各ノード1710は、更新専用の各重みに対して、状態を格納して維持する。状態は、勾配がニューラルネットワーク重みにどれほど影響を及ぼすかを制御する学習率を表し得る。
ステートフル最適化のタイプの1つは、「Adam」として知られている。Adamは、2つの状態パラメータ(V及びSとして表される)を使用して、訓練プロセス全体を通じて学習率を変調する。これらのパラメータは、あらゆる最適化ステップで更新され、ニューラルネットワークのパラメータを更新するために使用される。各最適化ステップでは、以下の通り、前の値Viを使用して、重みに対する状態の値Vが更新され、
式中、B1は、ハイパーパラメータであり、Gは、同じ重みと関連付けられた勾配である。
同様に、各最適化ステップでは、以下の通り、前の値Siを使用して、重みに対する状態の値Sが更新され、
式中、B2は、ハイパーパラメータであり、Gは、同じ重みと関連付けられた勾配である。
新しく決定された勾配を使用して状態値S及びVが更新された時点で、それらを適用して、新しい重みが決定される。状態情報及び勾配を使用して、更新済みの重みが以下の通り計算される。
式中、η及びεは、ハイパーパラメータである。
リデューススキャタに続いて、システム1720の各処理ノード1710は、方程式2及び3を適用して、更新に割り当てられる重みと関連付けられた状態値を更新することができる。状態値が更新されると、各ノード1710は、方程式4に従って、更新済みの状態を使用してそれらの重みを更新する。
説明されるこれらの最適化ステップは例であり、他のタイプのステートレス及びステートフル最適化アルゴリズムを使用できることが当業者によって理解されよう。
上記で説明される概念は、組合せが可能である。例えば、第2の発明と第3の発明を組み合わせることができる。この事例では、モデルパラメータを更新する前に単一のリデューススキャタコレクティブが実行される代わりに、モデルパラメータの更新は、実行されている多数のリデューススキャタコレクティブの後に実行される。モデルパラメータの更新に続いて、多数のオールギャザコレクティブ(リデューススキャタコレクティブと同数の)が実行される。
上記の図9~9Cの説明から理解されるように、多数のリデューススキャタコレクティブが実行され、次いで、多数のオールギャザが実行される事例では、処理ノード1710のシステム1720は、多数の異なるセットに分割される。これらのセットの各々は、システム1720の異なる次元に沿って配列されるものとして概念化することができる。図17A及び17Bでは、システム1720の一部として3つの処理ノード1710のみが示されているが、実践では、より多くの処理ノード1710が存在する可能性が高い。
システム1720では、第2の発明と第3の発明が組み合わされると、各処理ノード1710は、2つ以上の異なるセットに属するようになり、更新を使用して、それが属するそれらのセットの異なるセット間でリデューススキャタの各々を実行するように配列される。これに続いて、各処理ノード1710は、モデルパラメータの対応する部分を更新するために得たリデュース済みの更新セットを使用して、更新ステップを実行する。次いで、各処理ノード1710は、更新済みのモデルパラメータを使用して、それが属するそれらのセットの異なるセット間でオールギャザの各々を実行する。最終結果は、各処理ノード1710が更新済みのモデルパラメータのフルセットを格納するというものである。
上記で論じられるような状態情報は、この実施形態でも実施することができる。この事例では、各処理ノード1710は、多数のリデューススキャタコレクティブに続いて更新するモデルパラメータと関連付けられた状態を維持する。
本発明の他の組合せも可能である。例えば、第1の発明と第3の発明を組み合わせることができる。この事例では、モデルに対する更新セットを導出するために、各演算フェーズの間、異なる処理ノードによる別個の実行及び準備を適用することができる。複数の更新セットを導出するために、実行及び準備処理ノードの複数のグループが使用される。次いで、1つ又は複数のリデューススキャタコレクティブ、更新済みのモデルパラメータ、及び、1つ又は複数のオールギャザコレクティブを使用して交換された更新済みのモデルパラメータを使用して、更新セットが交換される。実行及び準備ノードの各グループの処理ノードのうちの1つは、オールリデュースに参加し、更新ステップを実行することができる。例えば、システム1720の処理ノード1710は、準備ノードであり得、これらのノード1710の各々は、異なる実行ノードと関連付けられる。
いくつかの実施形態では、3つの発明をすべて組み合わせることができる。図18を参照すると、図18は、3つの発明をまとめて組み合わせることができる例示的なシステム1800を示している。システム1800は、複数対の処理ノード(IPUとして示される)を含み、その各々は、異なる入力データセットに基づいてデータセット(例えば、ニューラルネットワークの更新済みの重み)を導出するように構成される。複数対の処理ノードの各々は、実行グループ1820に属する処理ノードと、準備グループ1830に属する処理ノードとを含む。例えば、1対の処理ノードは、実行グループ1820に属する処理ノード1810aを含み、別の処理ノードは、準備グループ1830に属する(1810b)。準備グループ1830の処理ノードは、実行グループ1820の処理ノードによって処理するために必要なデータをロードし、実行グループ1820の処理ノードによって計算されたデータをアンロードすることによって、記憶装置1840と通信するように構成される。
示されるように、システム1800は、いくつかのサブシステム1850a、1850b、1850c、1850d(本明細書では総称してサブシステム1850と呼ばれる)に配列される。図18は、第1のサブシステム1850aのコンポーネントのみを示す。しかし、他のサブシステム1850の各々は、実質的に同一の処理ノードセットを含み、それらの処理ノードは、実行グループ1820と準備グループ1830とに分かれる。実行グループ1820の処理ノードの各々は、実行処理ノードと呼ぶことができ、準備グループの処理ノードの各々は、準備処理ノードと呼ぶことができる。記憶装置1840をサブシステム1850の各々の間で共有することも、記憶装置1840が各サブシステム1850用の別個の記憶装置を含むことも可能である。いくつかの事例では、システム1800の準備処理ノードの各々は、異なる記憶装置と関連付けることができる。
複数対の処理ノードの各々は、動作するように構成された図2Aに示されるノード205aとノード205bの対として動作することができる。具体的には、各実行処理ノードは、1つの段階と関連付けられた処理を実行し、対応する準備処理ノードは、先行する演算フェーズにおいてその実行処理ノードによって計算された結果をアンロードし、次の演算フェーズにおいてその実行処理ノードによって必要とされるデータをロードする。システム1800の処理ノードの各対によって実行されるものとして示される動作は、図2Aの表220Aによって示されるようなものである。この表220Aは、各対の処理ノードが演算フェーズ間で役割を入れ替えない実施形態において、システム1800の処理ノードの各対によって実行される動作を示す。しかし、他の実施形態では、システム1800は、1対の処理ノードの各処理ノードが各演算フェーズ間で役割を入れ替えるように実装することができる。この事例では、システム1800の処理ノードの各対は、図2に示される処理ノード205a、205bとして動作することができ、各ノードによって実行される動作は、図2の表220に示されるようなものである。
各実行処理ノードが、多段階プロセスの各段階と関連付けられた計算の実行を進め、その対応する準備処理ノードに結果を提供した時点で、システム1800のすべての準備処理ノード間で結果を交換するために、新しいタイプのコレクティブが実行される。交換される結果は、モデルの更新を計算するために使用されたモデルパラメータの更新を含む。
上記で説明される新しい多次元コレクティブスキームは、システム1800のすべての準備処理ノード間で実行される。新しい多次元コレクティブを実行するため、各準備処理ノードは、実行処理ノードによって計算され且つ記憶装置1840にアンロードされた更新をロードする。次いで、各準備処理ノードは、多段階プロセスの処理から決定された更新をすべて保持する。各準備処理ノードは、少なくとも2つの異なる準備処理ノードセットに属する。これらの異なるセットは、上記で説明されるように、多数のリデューススキャタ及び多数のオールギャザを実行するために使用され、これらの2つのコレクティブセット間でモデルパラメータの更新が行われる。
図18は、準備プロセッサが二次元格子に配列される例を示す。この二次元の例では、システム1800の準備処理ノードは、図9~9Cに示される処理ノードのグループ900として配列することができる。従って、図9~9Cに示される処理ノードの行は、図18に示される配列において、ページに向かう方向に延伸していることを理解されたい。各サブシステム1850は、図9~9Cを参照して上記で説明される処理ノードの列の異なる列の処理ノードを含む。コレクティブ動作は、システム1800の準備処理ノード間で実行される。
図9~9Cから理解されるように、準備処理ノードの各々は、最初に、更新を使用して第1のリデューススキャタを実行し、第1のリデューススキャタは、それが属する第1の準備処理ノードセットの間で実行される。第1のセットは、列であり得、その事例では、処理ノード1810bは、サブシステム1850aの準備グループ1830のすべての処理ノードでリデューススキャタを実行することになる。各サブシステム1850において実行されたリデューススキャタに続いて、準備処理ノードの各々は、それが属する第2の準備処理ノードセットで第2のリデューススキャタを実行する。第2のリデューススキャタは、各処理ノードによって、第1のリデューススキャタの結果として得たリデュース済みの更新を使用して実行される。第2のセットは、行であり得、その事例では、サブシステム1850の各々における各処理ノードは、それらのサブシステム1850のうちの他のサブシステム1850のその対応するすべての処理ノードで第2のリデューススキャタを実行する。例えば、処理ノード1810bは、サブシステム1850b、1850c、1850dの対応するすべての処理ノードで第2のリデューススキャタを実行することになる。
2つのリデューススキャタに続いて、準備処理ノードの各々は、モデルパラメータの対応するサブセットを更新するために、リデューススキャタの結果として得たリデュース済みの更新のサブセットを適用する。
次いで、処理ノードの各々は、それが属する第2の処理ノードセットで、更新済みのモデルパラメータを使用して第1のオールギャザを実行する。例えば、処理ノード1810bは、サブシステム1850b、1850c、1850dの対応するすべての処理ノードで第1のオールギャザを実行することになる。次いで、準備処理ノードの各々は、更新を使用して第2のオールギャザを実行し、第2のオールギャザは、それが属する第1の準備処理ノードセットの間で実行される。例えば、処理ノード1810bは、サブシステム1850aの準備グループ1830のすべての処理ノードでオールギャザを実行することになる。
このコレクティブプロセスの終了時には、準備処理ノードの各々は、同じ更新済みのモデルパラメータのコピーを有し、そのコピーは、次の演算フェーズの間に記憶装置1840にアンロードすることができる。これらの更新済みのモデルパラメータは、図2又は2Aに示されるような多段階プロセスを使用して処理を再び実行することによってさらなる更新を導出するために使用することができる。
上記で説明されるコレクティブプロセスは、表220、220Aに示されるプロセスに続いて、システム1800の準備ノードの単一の交換フェーズにおいて実行することができる。
このように、図18に関して上記で説明される技法は、ニューラルネットワークを訓練するために適用することができる。実行処理ノードによって得られる結果は、モデルパラメータ(ニューラルネットワークの重みなど)の更新又はその更新済みのバージョンを含み得る。各実行処理ノードグループは、異なる訓練データセットを使用して重みの更新を導出するため、更新済みの重み/重み更新は、処理ノードの対ごとに異なる。次いで、実行されるコレクティブは、複数対の処理ノード間で重み更新を共有して平均化する。これに続いて、処理ノードの各対は、同じ更新済みの重みを有するようになり、訓練データセットに基づいてさらなる重み更新を決定するために、さらなる訓練反復に進むことができる。
図10を参照すると、図10は、上記で説明される処理ノードを実装するために使用することができるマルチタイル処理ノード2の例を示している。処理ノード2は、複数の処理ノードタイル4のアレイ6と、タイル4間を接続する相互接続部34とを含む。処理ノード2は、同じICパッケージにパッケージ化された複数のダイのうちの1つとして単独で実装することができる。相互接続部34は、本明細書では、タイル4が互いにデータを交換できるようにするためのものであるため、「交換ファブリック」34と呼ぶこともできる。各タイル4は、処理ノード及びメモリのそれぞれのインスタンスを含む。例えば、例示として、処理ノード2は、何百ものタイル4又は千をも超えるタイル4を含み得る。完全を期すため、本明細書で言及される「アレイ」は、必ずしも特定の次元数又は物理的なレイアウトのタイル4を含意するとは限らないことも留意されたい。
実施形態では、各処理ノード2は、1つ又は複数の外部のリンク8も含み、処理ノード2を1つ又は複数の他の処理ノード(例えば、同じ処理ノード2の1つ又は複数の他のインスタンス)に接続できるようにする。これらの外部のリンク8は、処理ノード2をホスト処理ノードに接続するための1つ又は複数の処理ノード・ホスト間リンク、並びに/或いは、同じICパッケージ若しくはカード上の又は異なるカード上の処理ノード2の1つ又は複数の他のインスタンスとまとめて接続するための1つ又は複数の処理ノード間リンクのうちの1つ又は複数を含み得る。例示的な一配列では、処理ノード2は、処理ノード2によって処理されるべき入力データという形態で、処理ノード・ホスト間リンクのうちの1つを介して処理ノードに接続されるホスト処理ノード(図示せず)からワークを受信する。処理ノード2の複数のインスタンスは、処理ノード間リンクによって、まとめてカードに接続することができる。従って、ホストは、ホストアプリケーションに必要な作業負荷に応じて、マルチタイルシステムオンチップとして設計されたコンピュータにアクセスする。
相互接続部34は、アレイ6の異なるタイル4が互いに通信できるように構成される。しかし、同じタイル4上のスレッド間の依存性が潜在的に存在するのと同様に、アレイ6の異なるタイル4上で走らせているプログラムの部分間の依存性も存在し得る。従って、先に走らせているあるタイル4上のコード片の依存データが、別のタイル4上の別のコード片によって利用できるようになるのを防ぐための技法が必要とされる。
各タイル4は、それ自体が、ローカル命令メモリからの命令(コード)の実行や、ローカルデータメモリ内のデータの取扱いが可能な処理ノードである。タイル4は、バレルスレッド処理ノード及びメモリのそれぞれのインスタンスを含み得る。例えば、例示として、処理ノード2は、何百ものタイル4又は千をも超えるタイル4を含み得る。完全を期すため、本明細書で言及される「アレイ」は、必ずしも特定の次元数又は物理的なレイアウトのタイル4を含意するとは限らないことも留意されたい。
処理ノード2上のタイル4間の通信は、時間決定論的に起こる。しかし、タイル間交換の他の形態も可能である。アレイ6の異なるタイル4上で走らせているプログラムの部分間の依存性が存在し得る。すなわち、あるタイル上の処理データは、別のタイルからの結果に依存し得る(例えば、別のタイルが依存する結果を提供し得る)。従って、先に走らせているあるタイル4上のコード片の依存データが、別のタイル4上の別のコード片によって利用できるようになるのを防ぐための技法が必要とされる。
AI及びデータ科学の並列プログラミングモデルは、通常、演算、バリア及び交換の3フェーズの反復実行モデルに従う。その意味は、処理ノードへの及び処理ノードからのデータ転送が、通常、処理ノード間及び各処理ノードとホストとの間のデータ一貫性を提供するためにバリア依存性を有するというものである。典型的に使用されるデータ一貫性モデルは、バルク同期並列(BSP)、ステイル同期並列(SSP)及び非同期である。本明細書で説明される実施形態はBSPモデルを使用するが、代替の形態として他の同期モデルを利用できることが明らかであろう。
図11及び12を参照すると、図11及び12は、BSP交換スキームの実装形態を示しており、各タイル4は、交互サイクルで演算フェーズ33と交換フェーズ32を実行し、演算フェーズ33と交換フェーズ32は、タイル間でバリア同期30によって相互に分離される。バリア同期は、各演算フェーズ33とそれに続く交換フェーズ32との間に配置される。
演算フェーズ33とタイルの間の通信のための交換フェーズ32は両方とも、図3に示される演算フェーズにおいて実施することができ、プリコンパイル済みの同期バリアによって処理ノード間交換フェーズから分離される。
演算フェーズ33の間、各タイル4は、タイル上で局所的に1つ又は複数の演算タスクを実行するが、他のいかなるタイル4ともこれらの演算の結果を通信することはない。交換フェーズ32では、各タイル4は、先行する演算フェーズからの演算の1つ又は複数の結果を1つ又は複数の他のタイルと交換できるが、そのタスクが依存性を有するデータを他のタイル4から受信するまで、新しい演算を実行することはない。また、先行する演算フェーズにおいて演算されたもの以外のデータを他のタイルに送信することもない。交換フェーズ32において内部制御関連動作などの他の動作を実行できることも除外されない。タイルグループの外部との通信は、BSPメカニズムを任意に利用できるが、代替として、BSPを利用せずに、それ自体の他の何らかの同期メカニズムを代わりに使用することができる。
BSP原理によれば、バリア同期30は、演算フェーズ33から交換フェーズ32に移行する接合点、交換フェーズ32から演算フェーズ33に移行する接合点又はその両方に配置される。すなわち、(a)グループのいずれかのタイルが次の交換フェーズ32に進めるようになる前に、すべてのタイル4がそれらのそれぞれの演算フェーズ33を完了する必要があるか、(b)グループのいずれかのタイルが次の演算フェーズ33に進めるようになる前に、グループのすべてのタイル4がそれらのそれぞれの交換フェーズ32を完了する必要があるか、又は、(c)これらの条件の両方が実施されるかのいずれかである。3つのすべての変形形態では、フェーズを交互に行うのは個々のタイルであり、同期するのはアセンブリ全体である。次いで、交換フェーズと演算フェーズのシーケンスは、複数の繰り返しにわたって繰り返すことができる。BSPの専門用語では、交換フェーズ及び演算フェーズの各繰り返しは、「スーパーステップ」と呼ばれる場合がある(ただし、文献上では、専門用語が常に一貫して使用されるとは限らないことに留意されたい。すなわち、個々の交換フェーズ及び演算フェーズの各々が個別にスーパーステップと呼ばれる場合があるのに対して、本明細書で採用される専門用語のように、交換フェーズ及び演算フェーズが合わせてスーパーステップと呼ばれる場合もある)。
また、同じ処理ノード2又は異なる処理ノード上のタイル4の複数の異なる独立したグループの各々は、互いに非同期的に動作する別個のBSPグループを形成でき、演算、同期及び交換のBSPサイクルは所定の各グループ内でのみ課されるが、各グループは他のグループから独立してそれを行うことは除外されないことにも留意されたい。すなわち、マルチタイルアレイ6は、複数の内部同期グループを含み得、各々は、他のそのようなグループから独立して及び非同期的に動作する(後にさらに詳細に論じられる)。いくつかの実施形態では、後にさらに詳細に論じられるように、同期及び交換の階層的分類がある。
図12Aは、(a)演算フェーズ33から交換フェーズ32へのバリア同期(上記を参照)が課される事例における、アレイ6のタイルのいくつか又はすべてのグループ4i、4ii、4iiiの間で実装されるようなBSP原理を示す。この配列では、いくつかの他のタイルが依然として交換を行っている間に、いくつかのタイル4が演算33を開始できることに留意されたい。
処理ノード2のタイル4間の通信は時間決定論的に起こり、データパケットはヘッダなしで送信される。これについては、参照により組み込まれる、我々の先の出願である米国特許出願第15/886315号明細書で説明されている。
図12Bは、内部(チップ上)及び外部(チップ間)同期を伴う例示的なBSPプログラムフローを示す。示されるように、フローは、内部交換50(同じチップ2上のタイル4間のデータの)及び外部交換50’(異なるチップ2上のタイル4間のデータの)を含む。
プログラムは、(i)第1の演算フェーズ、次いで、(ii)内部バリア同期30、次いで、(iii)内部交換フェーズ50、次いで、(iv)外部バリア同期80、次いで、(v)外部交換フェーズ50’をこの順番で含む、同期、交換フェーズ及び演算フェーズのシーケンスを実行するように配列することができる。外部バリア80は、内部交換フェーズ50の後に課され、その結果、プログラムは、内部交換50の後にのみ外部交換50’に進む。また、図7Bのチップ2Iに関して示されるように、内部交換(iii)と外部バリア(iv)との間に演算フェーズを任意に含めることができることにも留意されたい。
従って、データが処理ノード2上のタイル4間で通信される際、通信は、ヘッダのないデータパケットを使用して行われる。しかし、データが処理ノード2外の場所に送信される際は、このデータは、ターゲット場所を示すヘッダを付けて送信される。
図2、2A、4及び18に関して上記で説明される記憶装置は、処理ノードと処理ノードとのインタフェースを取るゲートウェイ及び処理ノードとホスト記憶装置とのインタフェースを取るゲートウェイの一部であり得る。
図13を参照すると、図13は、処理ノード1310、1320とホスト記憶装置1340とのインタフェースを取るためのゲートウェイ1330を含むシステムの例を示している。図2、2A、4及び18に関して上記で説明される記憶装置は、メモリ1350であり得る。処理ノード1310、1320のうちの1つ又は複数によって処理するためのデータは、ホスト記憶装置1340からメモリ1350に転送される。それに加えて、データの回収と同様に、ゲートウェイ1330は、ホスト記憶装置1340にデータを書き込む。データの書き込みは、データセンタポートを介して行われる。データは、ゲートウェイメモリ1350から処理ノード1310、1320のうちの1つ又は複数に転送することができる。
ゲートウェイメモリ1350から処理ノード1310、1320へのデータ転送の代わりに又はそれに加えて、データは、処理ノード1310、1320からゲートウェイ1330に転送することができる。処理ノード1310、1320は、データパケットの形態でゲートウェイ1330にデータを送信するように構成され、各データパケットは、アドレスを示すヘッダを含む。ゲートウェイ1330は、データパケットのアドレスを使用して、それらのデータパケットをどこに送信するかを決定する。例えば、データパケットは、ローカルメモリ1350に格納することができる。データパケットは、ホスト記憶装置1340に送信することができる。データパケットは、処理ノード1310、1320の他方に送信することができる。データパケットは、別のゲートウェイ(図示せず)を介して、さらなる処理ノードに送信することができる。
データは、ストリーミングエンジン124の制御の下で、メモリ1350に向けて/メモリ1350からゲートウェイ1330を横断する。ストリーミングエンジン124は、データストリーミング動作の実行を行う。データバッチに対するこれらの動作は、ワーク記述子(WD)によって指定することができる。ストリーミングエンジンは、2つの実行エンジンと、コードメモリ(図示せず)とを含む。実行エンジンの一方は、データムーバエンジン(DME)122であり、他方は、事前/事後ワークエンジン(PPE)123である。これらのエンジンは、コンパイラによって生成された実行可能イメージとしてコードメモリにロードされた命令を実行する。ストリーミングエンジン124は、DME 122による実行のための作業命令セットと、PPE 123による実行のためのワーク命令セットとを有する。DME及びPPEに対する命令セットは、コンパイル時のセットアップとして、WDによって調整される。単一のデータ交換同期点に対するこれらの命令は、単一のWDにまとめることができる。DME 122は、実行可能画像のDMEセクションに見られる特定のDME命令によって動作する。DME 122は、所定の交換同期点(ESP)に関連するデータムーバ(DMOV)命令セットにナビゲートするためのWDを使用する。PPE 123は、実行可能イメージのPPEセクションに見られる特定のPPE命令によって動作する。PPE 123は、所定のESPに関連する事前/事後ワーク命令セットにナビゲートするためのWDを使用する。
ゲートウェイは、PCIeポートを含む。これらのPCIeポートのうちの4つは、処理ノード1310、1320に及び処理ノード1310、1320からパケットを渡すように構成される。各PCIeポート(図13に示される)は、異なるアクセラレータ特有のプロトコルを使用するように構成することができる。次いで、カスタムゲートウェイトランザクション層は、そのプロトコルとゲートウェイ内部プロトコルとの間の変換を行う。カスタムゲートウェイ層は、アドレスマップを実装し、コレクティブ及びブロードキャスト/マルチキャストオフロードサポートを提供する。各ゲートウェイ1330は、アドレスマッピングスキームを提供し、グローバルアドレス空間においてすべての参加処理ノードを露出させる。処理ノード1310、1320からゲートウェイ1330で受信されるパケットは、パケットがルーティングされる送信先ゲートウェイを識別するゲートウェイIDを含む。
処理ノード1310、1320は、グローバルアドレス空間においてアドレスを指定するパケットを発送することができる。アドレスの一部分は、ターゲットゲートウェイ上のリソースを選択するために使用される。アドレスの一部分は、アドレス指定されたゲートウェイを識別するために使用される。他の部分は、ゲートウェイメモリ又は関連アクセラレータのタイルメモリのメモリアドレスを識別するために使用される。処理ノードのタイルメモリは、タイルインデックス及びメモリオフセットによってアドレス指定可能である。アドレスは、データパケットのデータが格納されるアクセラレータ内の場所を識別するために、このタイルインデックス及びメモリオフセットを含み得る。
パケットが受信されると、アドレスにおけるゲートウェイ1330の識別は、このゲートウェイのグローバルIDに対して比較される。マッチすれば、その要求は、このゲートウェイ(ローカルアクセラレータ又はローカルメモリ)に属するリソースをターゲットとする。そうでなければ、アドレスの一部分は、ルーティングテーブルにインデックスを付けるために使用される。ルーティングテーブルのコンテンツは、システムのターゲットポートを示す。アドレスの一部のビットは、ゲートウェイルーティングテーブルとマッチさせて、パケットをどこにルーティングするかを決定する。
パケットがゲートウェイ1330をターゲットとする場合は、パケットアドレスのローカルアドレスビットは、多数の領域からなるローカルゲートウェイベースアドレスレジスタ(BAR)セットで調べるために使用される(すなわち、ゲートウェイメモリ1350に対して1つのBAR、各処理ノードポートに対して1つのBAR)。パケットがゲートウェイメモリ(例えば、メモリ1350)に格納するためのものであることをローカルアドレスビットが示す場合は、パケットは、ゲートウェイメモリ1350に対するBARのアドレスに従って、ゲートウェイメモリ1350に格納される。パケットが処理ノード1310、1320のうちの1つに伝達するためのものであることをローカルアドレスビットが示す場合は、パケットは、ゲートウェイ1330のDME 122に転送される。ゲートウェイ1330のDME 122から、データパケットは、関係処理ノードポートに対するBARのアドレスに従って、処理ノードに転送することができる。
ゲートウェイ1330の動作は、参照により本明細書に組み込まれる、米国特許出願第16/428846号明細書においてより詳細に説明されている。
ゲートウェイ1330などのゲートウェイは、より大きなシステムを形成するために共に接続することができる。図22を参照すると、図22は、そのようなシステム170の例を示している。システム170は、多数の処理ノードグループと、各々が「マシン」と呼ばれるゲートウェイとを含む。多数のマシン161が配列されて装置171になり、クラスタ171と呼ばれる。各クラスタ171は、最大で4つのマシン161を含む。マシン161のみならず、同じクラスタ171内のマシンに接続されているものもまた、リンク(IPU-GWリンクとして示される)上で異なるクラスタ171内のマシン161に接続される。従って、システム170では、処理ノードは、異なる次元に沿って通信することができる。
マシン161は、異なる構成で共に接続することができる。図23を参照すると、図23は、システム230において異なるマシン161をどのように配列することができるかを示す例を示している。第2の発明及び第3の発明は、以下で説明されるように、システム230において実装することができる。この例では、コレクティブ動作の一部は、ゲートウェイにおいて実施される。従って、いくつかの実施形態では、第2の発明及び第3の発明の「処理ノード」は、ゲートウェイデバイス及びそれらのゲートウェイデバイスが結合される処理ユニットを含む。
ボックス161によって例示されるボックスの各々は、マシン161を表す。この例の処理ノード及びゲートウェイは、各々が異なる「ラック」に分けられる。垂直矢印の各々は、単一のラック内の異なる処理ノード間のデータ転送を表す。従って、各マシン161は、2つの異なるラック間で分けられ、マシン161のある1つのゲートウェイ及び2つの処理ノードは一方のラックに属し、同じマシン161の別のゲートウェイ及び2つの処理ノードは他方のラックに属する。水平矢印は、異なるラック間のデータ転送を示す。この例では、各ラックには32個の処理ノードがあり、システム230には32個のラックがある。
図の番号は、実行されるステップの順番を示す。コレクティブ動作の開始時には、すべての参加処理ノードの各々は、それら自体のローカル重み更新(勾配)セットを有しており、それらは、システム230全体にわたってリデュースされるものである。
第1のステップでは、同じラックのすべての処理ノードがリデューススキャタを実行し、その結果、各処理ノードは、そのラックに対するリデュース済みの勾配の1/32を有する。このステップの終了時には、各ラックは、そのリデュース済みの勾配全体を計算しており、そのラックの各処理ノードは、その計算の1/32を保持している。
第2のステップでは、異なるラックの処理ノードは、異なるラックのゲートウェイ間でオールリデュースを実行することによって、それらのリデュース済みの勾配を交換する。これは、図14A及び14Bに示されるように、リングの異なる方向においてデータの異なる部分を交換することによって使用して実行することができる。勾配の1/32の部分はリングの一方向において交換され、勾配の別の1/32の部分はリングの他の方向において交換される。従って、このステップの終了時には、すべてのラックがリデュース済みの勾配の全セットを受信しており、それらは、各ラックの16個のゲートウェイのメモリにわたって散在する。
任意に、第2のステップに続いて、システム230のゲートウェイは、ゲートウェイメモリの重みのコピーを更新するために、勾配(及び潜在的にはメモリに格納されたオプティマイザ状態などの他のデータ)を使用することによって、オプティマイザ関数を実施する。
第3のステップでは、処理ノードは、ゲートウェイメモリからデータ(リデュース済みの勾配又は更新済みの重み)を読み取る。ゲートウェイがオプティマイザ関数を実行しない場合は、処理ノードがオプティマイザ関数を実行し、更新済みの重みを生成する。次いで、処理ノードは、それらのラックの他の処理ノードと共に、オールギャザに参加し、それに続いて、システム230の各処理ノードは、更新済みの重みのフルセットを格納する。図24~28は、これらのステップをさらに詳細に示す。
図24を参照すると、図24は、すべてが同じラックに属する処理ノード2410のセットを示している。実装では、1つのラックには4つを超える処理ノード2410が存在し得るが、簡略化のために4つのみ示されている。各処理ノード2410は、モデルを更新するための勾配のフルセットを格納する。リデューススキャタは、勾配の交換及びリダクションを行うために、ノード2410間で実行される。勾配の交換は、勾配を含むパケットを処理ノード2410間で直接送信することによって及び/又はノード2410に接続されたゲートウェイ2420を介してパケットを送信することによって行うことができる。
図25を参照すると、図25は、上記で論じられるリデューススキャタの結果を示している。リデューススキャタに続いて、ラックの各処理ノード2410は、リデュース済みの勾配の異なる部分を有する。次いで、これらの勾配は、ゲートウェイ2420にロードされ、ゲートウェイ2420は、プロセスの次の段階を実行する。
図26を参照すると、図26は、異なるラックのゲートウェイ間でオールリデュースを実行する際の、ゲートウェイ1420間でのデータの交換を示している。簡略化のため、2つの異なるラックからの2つのゲートウェイ1420のみが示されている。各ゲートウェイ1420は、その2つの接続された処理ノード1410から受信したデータを格納する。ゲートウェイ1420の各々は、2つのコレクティブオフロードエンジン1430を含む。ゲートウェイのコレクティブオフロードエンジン1430の各々は、ゲートウェイのイーサネット(登録商標)ポートを通じて接続されるN個のゲートウェイにわたって散在するエンジン1430のN個のインスタンスにわたってコレクティブ動作を実施するように設計される。各コレクティブオフロードエンジン1430は、FPGAを含み、FPGAは、データ転送動作を実行するため、及び、任意に、最適化ステップを実行するためのものである。各ゲートウェイ1420上の2つのエンジン1430は、リングの反対方向にそれぞれ送信するように構成され、ゲートウェイのイーサネット(登録商標)ポートの利用可能な全帯域幅を使用できるようにする。各ゲートウェイ1420のコレクティブエンジン1430は、オールリデュースコレクティブにおいて、リングの2つの方向におけるデータの交換及びリダクションを行わせる。オールリデュースに続いて、ゲートウェイ1420のコレクティブオフロードエンジン1430は、勾配から新しい重みを導出するために最適化ステップを実行し、接続された処理ユニット1420に新しい重みを返すことができる。或いは、ゲートウェイ1420は、処理ノード1420に勾配を返し、次いで、処理ノード1420が最適化ステップを実行することができる。いずれの事例においても、その結果は、図27に示されている。
図27は、ラックの各処理ノード2410がモデル全体に対する更新済みの重みの異なるサブセットを格納する様子を示す。次いで、これらの更新済みの重みを処理ノード2410間で分散させるために、ラックの処理ノード2410間でオールギャザステップが実行される。最終結果は、図28に示されており、ラックの各処理ノード2410は、モデルに対する更新済みの重みのフルセットを有する。結果は、システム230の各ラックにおいて同じである(すなわち、各ラックは、更新済みの重みのフルセットを格納する)。
図19を参照すると、図19は、データアレイを交換するためにデータ処理システムにおいて実施される例示的な方法1900を示している。
S1910では、多数の第1の処理ノードの各々は、演算フェーズの間に演算命令を実行し、プリコンパイル済みの同期バリアに続いて、少なくとも1つの交換フェーズに入る。
S1920では、第1の処理ノードの各々は、データアイテムアレイのリデュース済みのサブセットを得るために、それぞれのデータアイテムアレイを使用して1つ又は複数のリデューススキャタコレクティブに加わる。
S1930では、第1の処理ノードの各々は、データアイテムアレイのさらなるリデュース済みのサブセットを得るために、オールリデュースコレクティブを使用してデータアイテムアレイのそれぞれのリデュース済みのサブセットを処理ノードと交換する。
S1940では、第1の処理ノードの各々は、リデュース済みのデータアイテムアレイを得るために、データアイテムアレイのさらなるリデュース済みのサブセットを使用して1つ又は複数のオールギャザコレクティブを実行する。
図20を参照すると、図20は、多段階プロセスを実行するためにデータ処理システムにおいて実施される例示的な方法2000を示している。
S2010では、多数の処理ノードの第1の処理ノードは、多数の時間帯の少なくとも1つの間、多段階プロセスの段階の1つと関連付けられた計算を実行するためにそれらの時間帯のうちの後続の時間帯の間に必要とされるデータを少なくとも1つのデータ記憶装置からロードする。
S2020では、多数の処理ノードの第2の処理ノードは、多数の時間帯の少なくとも1つの間、それらの時間帯のうちの以前の時間帯の間に少なくとも1つのデータ記憶装置からロードされたデータを使用して、多段階プロセスの段階の1つと関連付けられた計算を実行する。
S2030では、多数の処理ノードの第1の処理ノード及び第2の処理ノードの少なくとも1つは、多数の処理ノードの第1の処理ノード及び第2の処理ノードの他方の処理ノードからデータを受信する。
S2040では、多数の処理ノードの第1の処理ノード及び第2の処理ノードの少なくとも1つは、それらの時間帯のうちの後続の時間帯の少なくとも1つの間、多数の処理ノードの第1の処理ノード及び第2の処理ノードの他方の処理ノードから受信したデータを使用して、多段階プロセスの段階のそれぞれのものと関連付けられた計算を実行する。
図21を参照すると、図21は、モデルを更新するための方法2100を示している。
S2110では、各処理ノードは、リデュース済みの更新アレイのサブセットを得るために、それぞれの更新アレイを使用して1つ又は複数のリデューススキャタコレクティブに参加するように構成される。
S2120では、各処理ノードは、更新済みのモデルパラメータアレイのサブセットを生成するために、リデュース済みの更新アレイのそれぞれのサブセットをモデルパラメータアレイに適用するように構成される。
S2130では、各処理ノードは、更新済みのモデルパラメータアレイの残りの要素を得るために、更新済みのモデルパラメータアレイのそれぞれのサブセットを使用して1つ又は複数のオールギャザコレクティブに参加するように構成される。第2のコレクティブセットは、1つ又は複数のオールギャザコレクティブを含む。また、第2のコレクティブセットは、オールギャザコレクティブの前に実行される1つ又は複数のリデューススキャタコレクティブも含み得る。
上記の実施形態は、単なる例として説明されていることが理解されよう。