(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-06
(45)【発行日】2023-03-14
(54)【発明の名称】情報処理システム及び情報処理システムの制御方法
(51)【国際特許分類】
G06F 15/173 20060101AFI20230307BHJP
G06F 15/167 20060101ALI20230307BHJP
G06F 17/18 20060101ALI20230307BHJP
【FI】
G06F15/173 660C
G06F15/167 610G
G06F17/18 A
(21)【出願番号】P 2018234531
(22)【出願日】2018-12-14
【審査請求日】2021-09-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】檀上 匠
(72)【発明者】
【氏名】荒川 敬
(72)【発明者】
【氏名】伊藤 正勝
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平09-081530(JP,A)
【文献】特開2018-120441(JP,A)
【文献】特開2000-339278(JP,A)
【文献】米国特許出願公開第2013/0290223(US,A1)
【文献】特開昭63-259767(JP,A)
【文献】米国特許出願公開第2019/0188563(US,A1)
【文献】山崎 雅文ほか,MPIを用いたDeep Learning処理高速化の提案,情報処理学会 研究報告 ハイパフォーマンスコンピューティング(HPC) 2016-HPC-155,日本,情報処理学会,2016年08月01日,1~8頁,URL:https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_action_common_download&item_id=174120&item_no=1&attribute_id=1&file_no=1,2022年8月3日検索
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/173
G06F 15/167
G06F 17/18
(57)【特許請求の範囲】
【請求項1】
通信経路を介して、保持する第1の
数値データを送信する第1の情報処理装置と、
前記通信経路を介して受信した前記第1の
数値データと、保持する第2の
数値データとの
論理積の演算結果である
第1の論理積結果データと、前記第1の数値データと前記第2の数値データとの排他的論理和の演算結果である第1の排他的論理和結果データを1ビット右シフトした第1のシフト結果データとの加算結果である第1の演算結果データを算出し、算出した前記第1の演算結果データを前記通信経路を介して送信する第2の情報処理装置と、
前記通信経路を介して、保持する第3の
数値データを送信する第3の情報処理装置と、
前記通信経路を介して受信した前記第3の
数値データと、保持する第4の
数値データとの
論理積の演算結果である
第2の論理積結果データと、前記第3の数値データと前記第4の数値データとの排他的論理和の演算結果である第2の排他的論理和結果データを1ビット右シフトした第2のシフト結果データとの加算結果である第2の演算結果データを算出し、前記通信経路を介して受信した前記第1の演算結果データと、算出した前記第2の演算結果データとの
論理積の演算結果である
第3の論理積結果データと、前記第1の演算結果データと前記第2の演算結果データとの排他的論理和の演算結果である第3の排他的論理和結果データを1ビット右シフトした第3のシフト結果データとの加算結果である第3の演算結果データを算出する第4の情報処理装置と
を備えたことを特徴とする情報処理システム。
【請求項2】
前記第1乃至第3の情報処理装置は、前記第4の情報処理装置が算出した前記第3の演算結果データを取得することを特徴とする
請求項1に記載の情報処理システム。
【請求項3】
前記第1乃至第4の情報処理装置のうちいずれかの特定の情報処理装置が存在しない場合、前記特定の情報処理装置以外の情報処理装置のうちのいずれかが仮想的に生成することを特徴とする請求項1
又は2に記載の情報処理システム。
【請求項4】
前記第1乃至第4の情報処理装置に加えて第5の情報処理装置が存在する場合、前記第1乃至第4の情報処理装置を選択することを特徴とする請求項1
~3のいずれか一つに記載の情報処理システム。
【請求項5】
第1乃至第4の情報処理装置が、通信経路を介して接続される情報処理システムの制御方法であって、
前記第1の情報処理装置が、前記通信経路を介して、保持する第1の
数値データを送信し、
前記第2の情報処理装置が、前記通信経路を介して受信した前記第1の
数値データと、保持する第2の
数値データとの
論理積の演算結果である
第1の論理積結果データと、前記第1の数値データと前記第2の数値データとの排他的論理和の演算結果である第1の排他的論理和結果データを1ビット右シフトした第1のシフト結果データとの加算結果である第1の演算結果データを算出し、算出した前記第1の演算結果データを、前記通信経路を介して送信し、
前記第3の情報処理装置が、前記通信経路を介して、保持する第3の
数値データを送信し、
前記第4の情報処理装置が、前記通信経路を介して受信した前記第3の
数値データと、保持する第4の
数値データとの
論理積の演算結果である
第2の論理積結果データと、前記第3の数値データと前記第4の数値データとの排他的論理和の演算結果である第2の排他的論理和結果データを1ビット右シフトした第2のシフト結果データとの加算結果である第2の演算結果データを算出し、前記通信経路を介して受信した前記第1の演算結果データと、算出した前記第2の演算結果データとの
論理積の演算結果である
第3の論理積結果データと、前記第1の演算結果データと前記第2の演算結果データとの排他的論理和の演算結果である第3の排他的論理和結果データを1ビット右シフトした第3のシフト結果データとの加算結果である第3の演算結果データを算出する
ことを特徴とする情報処理システムの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理システム及び情報処理システムの制御方法に関する。
【背景技術】
【0002】
近年、様々な分野でHPC(High Performance Computing)、データサイエンス、機械学習及び深層学習(DL:Deep Learning)などが盛んに取り入れられている。これらの手法では、莫大な量の計算が行われる。そのため、これらの手法を用いた場合、単一のプロセッサでデータを処理することが困難である。そこで、データを大量のプロセッサに分割して割り当て、並列に計算させることで高速化を図る並列計算機の導入が盛んになっている。並列計算機では、プロセッサ間でデータ通信を行わせるために、プロセッサとメモリをまとめてノードとして、ノード同士をネットワークで接続する。
【0003】
例えば、深層学習を行う場合、並列計算機には複数のニューロン層が用意される。そして、各ニューロン層に亘って、入力から出力を得るフォワード、出力と正解とを比較し差分を取得するバックワード及び差分を用いて各ニューロン層で用いられるパラメータを更新するアップデートが繰り返し行われる。これにより、各ニューロン層で用いられるパラメータの適切な値を取得するパラメータの最適化が行われる。バックワード処理で求められる差分は、画像認識などにおいて微分係数などで表される場合には勾配情報と呼ばれる場合がある。
【0004】
パラメータの最適化において、ニューロン層毎にバックワードにより各ノードで取得された差分を集約し、所定の演算により更新用データを求め、各ノードに配布するAllreduce処理と呼ばれる処理が行われる。Allreduce処理としては、例えば、全てのノードが有する勾配情報を加算し、各ノードに加算値が分配される。その後、各ノードにおいて加算値をノード数で除算し平均を取ることで更新用データが求められる。
【0005】
ここで、深層学習では、32ビットや64ビットの浮動小数点演算が用いられるHPCの計算とは異なり、精度が多少低くとも、最終結果に差がほとんどでないことが知られている。そこで、モデルパラメータを低ビット整数で表して、ノード間のデータ通信量を削減することが行われる。例えば、最新のGPU(Graphics Processing Unit)では、16ビットの半精度浮動小数点演算をサポートし、32ビット浮動小数点演算に比べて2倍以上のスループットが得られる。さらに、固定小数点数である低ビット整数を用いてさらにスループットを向上させる技術も存在する。
【0006】
集団通信で平均値を求める技術として、通信性能レベルに基づいてプロセッサをグループ化し、通信性能レベル毎にグループ内のルートプロセッサを決定して、グループ内におけるバイナリツリーでの収集及び拡散を繰返す従来技術がある。また、並列計算において、処理の前半でブロードキャストを行い、後半でコンビネーションを行うことで平均値を求める従来技術がある。また、2項平均値を計算する演算回路において、2の補数表現で整数を加算してシフトし、最上位桁で値が誤る場合に2段の排他的論理和回路で補正を加える従来技術がある。さらに、2進入力データの平均値演算を、外部でデータを加算して右シフトした平均値の結果を入力することで、入力データの演算を軽くする従来技術がある。
【先行技術文献】
【特許文献】
【0007】
【文献】特開平11-134311号公報
【文献】特開平9-81530号公報
【文献】特開昭63-259767号公報
【文献】特開平4-114232号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、例えば、4つのノードを用いる構成で勾配情報が8ビットで値であっても、上述したAllreduce処理の途中で10ビット分のレジスタを使用することになる場合がある。この場合、結局16ビット表現での演算を行うこととなりスループットが半分に減少してしまう。さらに、ノード数が増加しノード数が512になると、和が17ビットとなる場合もあり、その場合には32ビット表現での演算を行うことになるため、スループットは1/4に減少する。
【0009】
そこで、オーバーフローを抑えるために、加算前に予めノード数で各ノードが有する勾配情報を除算する方法が考えられる。しかし、この方法では、オーバーフローの発生は軽減されるが、ノード数が多い場合、商が非常に小さくなるかもしくは0となり、加算時に誤差が発生し計算の精度が劣化する。
【0010】
また、通信性能レベルに基づいてプロセッサをグループ化して集団通信を行う従来技術では、Allreduce処理におけるオーバーフローの回避及び計算精度の維持は困難である。また、ブロードキャストとコンビネーションとを組み合わせて平均値を求める従来技術をAllreduce処理に応用することは困難であり、オーバーフローの回避及び計算精度の維持は困難である。また、最上位桁で値が誤る場合に2段の排他的論理和回路で補正を加える従来技術や、2進入力データの平均値演算において外部でデータを加算して右シフトした平均値の結果を入力する従来技術では、Allreduce処理が考慮されていない。そのため、これらの従来技術を用いても、オーバーフローの回避及び計算精度の維持は困難である。
【0011】
開示の技術は、上記に鑑みてなされたものであって、演算精度を犠牲にすることなくスループットを向上させる情報処理システム及び情報処理システムの制御方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
本願の開示する情報処理システム及び情報処理システムの制御方法の一つの態様において、情報処理システムは以下の各部を備える。第1の情報処理装置は、通信経路を介して、保持する第1の数値データを送信する。第2の情報処理装置は、前記通信経路を介して受信した前記第1の数値データと、保持する第2の数値データとの論理積の演算結果である第1の論理積結果データと、前記第1の数値データと前記第2の数値データとの排他的論理和の演算結果である第1の排他的論理和結果データを1ビット右シフトした第1のシフト結果データとの加算結果である第1の演算結果データを算出し、算出した前記第1の演算結果データを、前記通信経路を介して送信する。第3の情報処理装置は、前記通信経路を介して、保持する第3の数値データを送信する。第4の情報処理装置は、前記通信経路を介して受信した前記第3の数値データと、保持する第4の数値データとの論理積の演算結果である第2の論理積結果データと、前記第3の数値データと前記第4の数値データとの排他的論理和の演算結果である第2の排他的論理和結果データを1ビット右シフトした第2のシフト結果データとの加算結果である第2の演算結果データを算出し、前記通信経路を介して受信した前記第1の演算結果データと、算出した前記第2の演算結果データとの論理積の演算結果である第3の論理積結果データと、前記第1の演算結果データと前記第2の演算結果データとの排他的論理和の演算結果である第3の排他的論理和結果データを1ビット右シフトした第3のシフト結果データとの加算結果である第3の演算結果データを算出する。
【発明の効果】
【0013】
1つの側面では、本発明は、演算精度を犠牲にすることなくスループットを向上させることができる。
【図面の簡単な説明】
【0014】
【
図2】
図2は、実施例1に係るノードのブロック図である。
【
図3】
図3は、番号割当部によるMPI処理を説明するための図である。
【
図4】
図4は、実施例1に係る勾配情報の集約処理の一例を表す図である。
【
図5】
図5は、平均化処理のパイプライン化を説明するための図である。
【
図6】
図6は、2つのノードの保持データの平均値の算出方法を表す図である。
【
図7】
図7は、実施例1に係る並列計算機によるAllreduce処理のフローチャートである。
【
図8】
図8は、2つのノード毎のAllreduce処理の他の方法を表した図である。
【
図9】
図9は、全量バタフライ方式によるAllreduce処理の具体例を表す図である。
【
図10】
図10は、実施例2に係るノードのブロック図である。
【
図11】
図11は、ダミーノードの生成処理の概要を表す図である。
【
図12】
図12は、実施例2に係る勾配情報の集約処理の一例を表す図である。
【
図13】
図13は、ダミーノードを含む場合のノードの組の選択方法の一例を表す図である。
【
図14】
図14は、ダミーノードを含む場合のノードの組の選択方法の他の例を表す図である。
【
図15】
図15は、実施例2に係る並列計算機によるAllreduce処理のフローチャートである。
【
図16】
図16は、各ノードにおける2組平均を用いた全ノードの平均化処理のフローチャートである。
【0015】
以下に、本願の開示する情報処理システム及び情報処理システムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理システム及び情報処理システムの制御方法が限定されるものではない。
【実施例1】
【0016】
図1は、並列計算機の一例の図である。本実施例に係る並列計算機1は、例えば、ノード11~14を有する。ノード11~14は、それぞれネットワーク5で接続される。そして、ノード11~14は、ネットワーク5を介して相互にデータの送受信が可能である。このノード11~14が、「第1~4の情報処理装置」の一例にあたる。また、ネットワーク5が、「通信経路」の一例にあたる。
【0017】
ノード11~14は、例えば、深層学習を実行する。深層学習において、ノード11~14は、パラメータの最適化を実行する。ノード11~14は、パラメータの最適化にあたり、更新データの算出を行う。そして、ノード11~14は、更新データ算出時に、更新データを算出するための数値データである勾配情報をそれぞれ有し、それぞれが有する勾配情報を用いてAllrecuce処理を実行して更新データを求める。以下では、ノード11~14のそれぞれを区別しない場合、ノード10と呼ぶ。ここで、
図1では、一例として4台のノード10を有する並列計算機1を図示したが、ノード10の数には特に制限は無い。
【0018】
次に、
図2を参照して、ノード10によるAllreduce処理について詳細に説明する。
図2は、実施例1に係るノードのブロック図である。ここでは、Allreduce処理における演算として平均化を行う場合を例に説明する。ただし、Allreduce処理における演算は、他の演算でもよく、例えば、加算、乗算、最大値の取得及び最小値の取得などでもよい。
【0019】
図2に示すように、ノード10は、番号割当部101、実行処理判定部102、通常集約処理実行部103、組分集約処理実行部104、データ送信部105、データ受信部106及びデータ格納部107を有する。なお、各ノード10は、上述したように深層学習における様々な処理を実行するが、
図2では、Allreduce処理を行う機能について記載し、他の機能は省略した。
【0020】
データ格納部107は、勾配情報を格納する。さらに、データ格納部107は、更新データ算出の際の途中の演算結果及び更新データを格納する。
【0021】
番号割当部101は、MPI(Message Passing Interface)関数を用いて、
図3に示すような互いに通信可能なプロセス群のグループであるコミュニケータ2を生成する。
図3は、番号割当部によるMPI処理を説明するための図である。各ノード10は、それぞれがプロセスを実行するので、コミュニケータ2は、
図2に示すようにノード10のグループと考えることもできる。コミュニケータ2に含まれる各ノード10は、それぞれがコミュニケータ2の情報を保持する。また、本実施例では、1つのノード10が1つのプロセスを実行する場合を例に説明する。
【0022】
次に、番号割当部101は、MPI関数を実行してコミュニケータ2に属するプロセスの数、すなわち、本実施例ではノード10の数であるサイズ(Size)を取得する。本実施例では、ノード11~14がコミュニケータ2に含まれるので、番号割当部101は、サイズとして4を取得する。さらに、番号割当部101は、MPI関数を実行して、コミュニケータ2に属する各プロセスに、識別番号であるランク(Rank)を設定する。ランクは、0から順にコミュニケータ2に属する全プロセスの数から1を減算した値が割り当てられる。本実施例では、各ノード10は1つのプロセスを実行するので、ランクは、各ノード10に割り当てられるともいえる。番号割当部101は、ノード11のランクを0とし、ノード12のランクを1とし、ノード13のランクを2とし、ノード14のランクを3とする。その後、番号割当部101は、サイズ及び各ノード10に割り当てたランクの情報を実行処理判定部102へ出力する。
【0023】
図2に戻って説明を続ける。実行処理判定部102は、コミュニケータ2のサイズ及び各ノード10に割り当てられたランクの情報の入力を番号割当部101から受ける。次に、実行処理判定部102は、Allredece処理の対象の数が2のべき乗であるか否かを判定する。ここで、Allredece処理の対象の数は、コミュニケータ2に属するノード10の実行するプロセスの数の合計である。本実施例では、各ノード10が1つのプロセスを実行する場合であり、Allredece処理の対象の数は、コミュニケータ2に含まれるノード10の数であり、コミュニケータ2のサイズと一致する。
【0024】
ノード10の数が2のべき乗でない場合、実行処理判定部102は、通常の全ノード平均化処理を実行すると決定する。通常の全ノード平均化処理とは、ここでは、全てのノード10の勾配情報を1台のノード10に集めて勾配情報の総和を求め、各ノード10へ配布した後に、各ノード10が勾配情報の総和をノード10の数で除算することで平均値を求める処理である。この場合、実行処理判定部102は、Allreduce処理の実行を通常集約処理実行部103に指示する。また、実行処理判定部102は、サイズの情報及び各ノード10のランクの情報を通常集約処理実行部103へ送信する。
【0025】
これに対して、ノード10の数が2のべき乗の場合、実行処理判定部102は、2組平均を用いた全ノード平均化処理を実行すると決定する。ここでは、ノード11~14の4台なので、ノード10の数は2の2乗であり、実行処理判定部102は、2組平均を用いた全ノード平均化処理を実行すると決定する。ここで、2組平均を用いた全ノード平均化処理とは、勾配情報もしくは勾配情報を用いた演算結果を保持するノード10を2つずつ組にして、組にした2つのノードが有する値の平均値の算出を繰返す処理である。本実施例では、ノード11~14の4台なので、ノード10の数は2の2乗であり、実行処理判定部102は、2組平均を用いた全ノード平均化処理を実行すると決定する。2組平均を用いた全ノード平均化処理については、後で詳細に説明する。この場合、実行処理判定部102は、Allreduce処理の実行を組分集約処理実行部104に指示する。また、実行処理判定部102は、サイズの情報及び各ノード10のランクの情報を通常集約処理実行部103へ送信する。
【0026】
通常集約処理実行部103は、ノード10の数が2のべき乗でない場合、Allreduce処理の実行の指示を実行処理判定部102から受ける。そして、通常集約処理実行部103は、コミュニケータ2に属するノード10の中で勾配情報を集約する集約ノードを、ランクを基に決定する。
【0027】
自装置が集約ノードでなければ、データ格納部107に格納された勾配情報の集約ノードへの送信をデータ送信部105に行わせる。その後、通常集約処理実行部103は、勾配係数の総和の入力をデータ受信部106から受ける。そして、通常集約処理実行部103は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部107に格納する。
【0028】
自装置が集約ノードの場合、通常集約処理実行部103は、他のノード10から送られてきた勾配情報の入力をデータ受信部106から受ける。そして、通常集約処理実行部103は、勾配情報の総和を求め、求めた総和の各ノード10への送信をデータ送信部105に行わせる。その後、通常集約処理実行部103は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部107に格納する。
【0029】
組分集約処理実行部104は、ノード10の数が2のべき乗の場合、Allreduce処理の実行の指示を実行処理判定部102から受ける。組分集約処理実行部104は、繰り返し回数を表すiを初期化してi=0とする。そして、組分集約処理実行部104は、jを0以上の整数として、ランクが2jと2j+1となるノード10を組とする。すなわち、組分集約処理実行部104は、自装置のランクが2jであれば、ランクが2j+1のノード10と自装置が組になると判定する。また、自装置のランクが2j+1であれば、組分集約処理実行部104は、ランクが2jのノード10と自装置が組になると判定する。そして、ランクが2j+1のノード10の組分集約処理実行部104は、組となったランクが2jのノード10へデータ格納部107に格納された勾配情報を送信する。
【0030】
一方、ランクが2jのノード10の組分集約処理実行部104は、組となったランクが2j+1のノード10から勾配情報を受信する。次に、組分集約処理実行部104は、自装置のデータ格納部107に格納された勾配情報と受信した勾配情報との平均値を算出する。そして、組分集約処理実行部104は、演算結果をデータ格納部107に格納する。
【0031】
次に、組分集約処理実行部104は、iを1つインクリメントして、サイズを2のn乗と表した場合にiがnに達したか否かを判定する。iがnに達していなければ、組分集約処理実行部104は、勾配情報の平均値を算出したノード10、すなわちランクが2jのノード10にランクの低い順に連番で0から番号を割り当てる。そして、組分集約処理実行部104は、jを0以上の整数として、割り当て番号が2jと2j+1となるノード10を組とする。
【0032】
そして、割り当て番号が2jのノード10の組分集約処理実行部104は、割り当て番号が2j+1のノード10から演算結果を受信する。次に、組分集約処理実行部104は、自装置のデータ格納部107に格納された演算結果と受信した演算結果との平均値を算出する。そして、組分集約処理実行部104は、演算結果をデータ格納部107に格納する。
【0033】
以下、iがnに達するまで、組分集約処理実行部104は、番号の割り当て、割り当て番号が2jのノード10から割り当て番号が2j+1のノードへのデータ送信、演算結果の平均値の算出を繰返す。
【0034】
iがnに達した場合、自装置のノード10以外には平均値の算出結果を持たないので、組分集約処理実行部104は、自装置のノード10のデータ格納部107に格納された演算結果が全ての勾配情報の平均値であると判定する。そして、組分集約処理実行部104は、データ格納部107に格納された全ての勾配情報の平均値の各ノード10への送信をデータ送信部105に指示する。以上に説明したように、iは、既に行った2つのノード10の平均化処理の繰り返し回数であり、サイズを2のべき乗として表した場合の乗数に繰り返し回数が達すると全てのノード10が有する勾配情報の平均値が求められたことになる。
【0035】
ここで、
図4を参照して本実施例に係るノード11~14を使用した場合の勾配情報の集約処理の流れを説明する。
図4は、実施例1に係る勾配情報の集約処理の一例を表す図である。ここでは、iと各ノード10のランク又は割り当て番号とをWの添え字として並べて、各段階における各ノード11~14を表す。ノードW
ijと表した場合、i回目(iは0以上の整数)の2つのノード10の平均化処理において演算結果を有するノード10のうちのランク番号が低い方からj番目(jは0以上の整数)のノード10を表す。また、
図4において、2つのノード10の平均化処理において、勾配情報を他のノード10に送信したノード10は、除外される。
【0036】
図4に示すように、i=0回目の2つのノード10の平均化処理において、ノード11~14は、ノードW
00、ノードW
01,ノードW
02、ノードW
03と表される。ノード11は、ランクが0=2j(j=0)であるので、ランクが1=2j+1(j=0)であるノード12と組になる。また、ノード13は、ランクが2=2j(j=1)であるので、ランクが1=2j+1(j=1)であるノード14と組になる。
【0037】
ノード12の勾配情報は、ノード11へ送信される。そして、ノード11は、ノード11の勾配情報とノード12の勾配情報との平均値を算出する。また、ノード14の勾配情報はノード13へ送信される。そして、ノード13は、ノード13の勾配情報とノード14の勾配情報との平均値を算出する。
【0038】
i=1回目の2つのノード10の平均化処理において、ノード11はノードW10と表され、ノード13はノードW11と表される。ノード11は割り当て番号が0=2j(j=0)であり、ノード14は割り当て番号が1=2j+1(j=0)であるので、ノード13が演算結果の送り側となる。
【0039】
そこで、ノード13は、保持する演算結果をノード11へ送信する。そして、ノード11は、ノード11が保持する演算結果とノード12が保持する演算結果との平均値を算出する。
【0040】
i=2回目の2つのノード10の平均化処理において、ノード11はノードW20と表される。ここで、本実施例に係るコミュニケータ2のサイズは4であり、この時点でiはコミュニケータ2のサイズを2のべき乗で表した場合の乗数に達する。そこで、ノード11は、2組平均を用いた全ノード平均化処理の完了を確定する。
【0041】
ここで、ノード11が有する勾配情報が「第1のデータ」の一例にあたる。また、ノード12が有する勾配情報が「第2のデータ」の一例にあたる。また、ノード13が有する勾配情報が「第3のデータ」の一例にあたる。また、ノード14が有する勾配情報が「第4のデータ」の一例にあたる。また、ノード12が算出したノード11が保持する勾配情報とノード12が保持する勾配情報との平均値が、「第1の演算結果データ」の一例にあたる。また、ノード14が算出したノード13が保持する勾配情報とノード14が保持する勾配情報との平均値が、「第2の演算結果データ」の一例にあたる。さらに、ノード14が算出した、ノード12による勾配情報の平均値とノード14による勾配情報の平均値との平均値が、「第3の演算結果」の一例にあたる。
【0042】
図2に戻って説明を続ける。データ送信部105は、通常集約処理実行部103又は組分集約処理実行部104からデータ送信の指示を受ける。そして、データ送信部105は、指示で指定された宛先のノード10へ指定されたデータを送信する。
【0043】
データ受信部106は、他のノード10から演算結果の入力を受ける。そして、データ受信部106は、受信したデータを宛先である通常集約処理実行部103又は組分集約処理実行部104へ出力する。
【0044】
以上に説明したように、本実施例に係る組分集約処理実行部104が2つのノード10の平均化処理を実行するには、以下の3つの条件を満たすことが好ましい。第1の条件は、Allreduce処理の対象の数が2のべき乗であるという条件である。第2の条件は、平均化する値は、2の補数表現か符号なしであるという条件である。第3の条件は、演算順序がバリナリツリーを構成するという条件である。
【0045】
ここで、本実施例に係る組分集約処理実行部104は、自装置が有する勾配情報及び演算結果を用いた平均化処理の実行をパイプライン化することで2組平均を用いた全ノード平均化処理の実行を高速化する。そこで、
図5を参照して、組分集約処理実行部104における平均化処理のパイプライン化について説明する。
図5は、平均化処理のパイプライン化を説明するための図である。ここでは、ノード11が、ノード12から勾配情報を受信して平均値を算出する場合で説明する。
【0046】
図5において、バッファ111は、ノード11のデータ格納部107が有する受信したデータ及び演算結果を格納する記憶領域である。また、バッファ112は、ノード11のデータ格納部107が有する受信したデータの一時格納領域である。また、バッファ113は、ノード12のデータ格納部107が有する送信するデータの格納領域である。すなわち、バッファ111に格納された配列データが、ノード11が有する勾配情報にあたる。また、バッファ113に格納された配列データが、ノード12が有する勾配情報にあたる。ここで、ノード11とノード12との勾配情報の平均値を求める場合、ノード12は、配列データの部分データをノード11へ送信する。そして、ノード11は、受信した配列データの部分データに対応する自己が有する配列データの部分データとの間の平均値を求めることを繰り返すことで、配列データ全体の平均値を取得する。
【0047】
第1段階で、ノード11は、バッファ113の領域202に格納された部分データを受信し、バッファ112の領域203に格納する。
【0048】
次の第2段階で、ノード11は、バッファ111の領域201に格納された部分データとバッファ112の領域203に格納された部分データの平均値204を算出し、バッファ111の領域201に格納する。この処理と並行して、ノード11は、バッファ113の領域206に格納された部分データを受信し、バッファ112の領域207に格納する。
【0049】
次の第3段階で、ノード11は、バッファ111の領域205に格納された部分データとバッファ112の領域207に格納された部分データの平均値208を算出し、バッファ111の領域205に格納する。この処理と並行して、ノード11は、バッファ113の領域210に格納された部分データを受信し、バッファ112の領域211に格納する。
【0050】
その後、ノード11は、勾配情報である配列データにおける部分データの平均化処理を並列して繰り返し、配列データ全体の平均値の算出を完了する。このように、勾配情報である配列データにおける部分データの平均化処理をパイプライン化して繰り返すことで、組分集約処理実行部104は、2組平均を用いた全ノード平均化処理の実行を高速化することができる。
【0051】
さらに、組分集約処理実行部104は、2つのノード10が保持する値の平均値を算出する際に、以下の演算を実行することでオーバーフローの発生を回避する。以下に、
図6を参照して、組分集約処理実行部104による2つのノード10が保持する値の平均値の算出を説明する。
図6は、2つのノードの保持データの平均値の算出方法を表す図である。
【0052】
受信側のノード10が有する値がx0、送信側のノード10が有する値をx1である場合、組分集約処理実行部104は、x0とx1との論理積を求め第1値を算出する。さらに、組分集約処理実行部104は、x0とx1との排他的論理和を求め1ビットの右シフトを行い第2値を算出する。1ビットの右シフトでは、組分集約処理実行部104は、シフト後の値に先頭のビットに0を付加する。ここで、1ビットの右シフトは、2による除算にあたる。そして、組分集約処理実行部104は、第1値と第2値とを加算することで、x0とx1との平均値を算出する。
【0053】
すなわち、論理積を「&」で表し、排他的論理和を「^」で表し、1ビットの右シフトの演算を「>>1」と表した場合、組分集約処理実行部104は、(x0&x1)+((x0^x1)>>1)と表される演算を実行することでx0とx1との平均値を求める。この演算方法は、ビット毎に分けて平均値を計算して後に加算する方法であり、負の無限大への丸めを用いた端数切捨て方式である。
【0054】
x0とx1とでビット値が同一の場合は次の原理で平均値が求まる。まず、ビット値が同一となるビットをx0&x1で抽出する。この場合、ビット値が同一なので、x0&x1がそのまま平均値となる。これに対して、x0とx1とでビット値が異なる場合は次の原理で平均値が求まる。まず、ビット値が異なるビットをx0^x1により抽出する。そして、ビット値が異なるので2で除算する演算をシフト演算化して(x0^x1)>>1とすることで、ビット値が異なるビットの平均値が求められる。
【0055】
例えば、x0=11001100であり、x1=10101010の場合で具体例を説明する。この場合、x0とx1とを単に加算して2で割った場合、加算時に桁の繰り上がりが発生し、8ビットのデータ領域からのオーバーフローが発生する。
【0056】
これに対して、本実施例に係る組分集約処理実行部104は、演算221によりx0とx1との論理積を算出する。この場合、組分集約処理実行部104は、演算221の結果である第1値として10001000を取得する。演算221ではオーバーフローは発生しない。
【0057】
また、組分集約処理実行部104は、演算222によりx0とx1との排他的論理和を求め、演算223により1ビットの右シフトを行う。この場合、組分集約処理実行部104は、演算222の結果である第2値として01100110を取得する。演算222でもオーバーフローは発生しない。
【0058】
そして、組分集約処理実行部104は、演算224により第1値と第2値との加算値を算出する。これにより、組分集約処理実行部104は、演算結果として101111011を得る。この場合、第2値の最上位の桁は0であるので、加算によりオーバーフローが発生することはない。ここで算出された値は、前述した0とx1とを単に加算して2で割ることで算出したx0とx1との平均値と一致する。すなわち、組分集約処理実行部104は、この演算によりx0とx1との平均値が算出できる。このように、組分集約処理実行部104は、オーバーフローを発生させずに、x0とx1との平均値を算出することができる。
【0059】
次に、
図7を参照して、本実施例に係る並列計算機によるAllreduce処理の流れについて説明する。
図7は、実施例1に係る並列計算機によるAllreduce処理のフローチャートである。以下では、ノード10が保持する勾配情報及び演算結果をまとめて「保持データ」と呼ぶ場合がある。
【0060】
番号割当部101は、コミュニケータ2を生成し、生成したコミュニケータ2のサイズ及びコミュニケータ2に属する各ノード10にランクを割り当てる(ステップS1)。その後、番号割当部101は、コミュニケータ2のサイズの情報及びランクの情報を実行処理判定部102へ出力する。
【0061】
実行処理判定部102は、コミュニケータ2のサイズの情報及びランクの情報の入力を番号割当部101から受ける。そして、実行処理判定部102は、コミュニケータ2のサイズをAllreduce処理で対象とするノード10の数である対象数とする。ここでは、対象数をNとする。そして、実行処理判定部102は、対象数Nが2のn乗と表すことができる、すなわちN=2nか否かを判定する(ステップS2)。
【0062】
対象数Nが2のn乗と表すことができる場合(ステップS2:肯定)、実行処理判定部102は、Allreduce処理の実行を組分集約処理実行部104に依頼する。組分集約処理実行部104は、Allreduce処理の実行の依頼を受けて、iを初期化して0とする(ステップS3)。
【0063】
次に、組分集約処理実行部104は、jを初期化して0とする(ステップS4)。
【0064】
次に、組分集約処理実行部104は、保持データを他のノード10へ送信していないノード10のランクの低い側から割り当て番号として0から連番で順に番号を割り当てる。そして、割り当て番号が2j+1と表されるノード10の組分集約処理実行部104は、自装置の保持データを割り当て番号が2jと表されるノード10へ送信する。一方、割り当て番号が2jと表されるノード10は、自装置の保持データと受信した保持データとの平均値を算出する。ここで、i回目の2つのノード10の平均化処理における、割り当て番号が2jと表されるノード10の保持データをwi(2j),割り当て番号が2j+1と表されるノード10の保持データをwi(2j+1)と表す。また、i+1回目の2つのノード10の平均化処理における、ランクが低い側からj番目のノード10の保持データをW(i+1)jと表す。この場合、i回目の処理における割り当て番号が2jと表されるノード10が、i+1回目の処理におけるj番目のノード10となり、その組分集約処理実行部104は、W(i+1)j=1/2(wi(2j)+wi(2j+1))と表される計算を行う(ステップS5)。
【0065】
そして、組分集約処理実行部104は、jがNを2のべき乗で表した場合の乗数に達したか否か、すなわちj<N/2i-1か否かを判定する(ステップS6)。j<N/2i-1の場合(ステップS6:肯定)、組分集約処理実行部104は、jを1つインクリメントして(ステップS7)、ステップS5へ戻る。
【0066】
これに対して、j<N/2i-1でない場合(ステップS6:否定)、組分集約処理実行部104は、同期処理を実行する(ステップS8)。ここで、同期処理とは、i回目の全ての割り当て番号が2jのノード10における平均化処理が終わるまで待機する処理である。
【0067】
次に、組分集約処理実行部104は、iを1つインクリメントする(ステップS9)。
【0068】
次に、組分集約処理実行部104は、iがコミュニケータ2のサイズを2のべき乗として表した場合の乗数に達したか否か、すなわちi<nか否かを判定する(ステップS10)。i<nの場合(ステップS10:肯定)、組分集約処理実行部104は、ステップS4に戻る。
【0069】
これに対して、i<nでない場合(ステップS10:否定)、組分集約処理実行部104は、全てのノード10が有する勾配情報の平均値であるAvがWi0であると決定する(ステップS11)。
【0070】
一方、対象数Nが2のn乗と表すことができない場合(ステップS2:否定)、実行処理判定部102は、Allreduce処理の実行を通常集約処理実行部103に依頼する。通常集約処理実行部103は、Allreduce処理の実行の依頼を受けて、i通常の全ノード平均化処理を実行する(ステップS12)。
【0071】
以上に説明したように、本実施例に係る並列計算機は、ノードを2つずつ組にしたAllreduce処理の演算を繰り返すことで、全てのノードのAllreduce処理を実行する。これにより、本実施例に係る並列計算機は演算誤差を軽減し且つデータ転送量を抑えることでき、演算精度を犠牲にすることなくスループットを向上させることが可能となる。
【0072】
さらに、本実施例に係る並列計算機は、論理積と排他的論理和を用いた計算により2つの値の平均値を求めることで、オーバーフローの発生を起こすことなく全ノードの平均化処理を実行することができる。
【0073】
また、ノード間通信やバッファからのデータの読み出し及び書き込みの処理に比べて平均化演算は極めて短時間で終了する。さらに、本実施例に係る並列計算機は、平均化処理におけるデータ通信並びに、バッファからのデータの読み出し及び書き込みの処理をパイプライン化することにより、処理時間をオーバラップさせて隠蔽することができる。これにより、本実施例に係る並列計算機は、平均化処理の回数の増加による性能劣化を抑えることができる。
【0074】
(変形例1)
実施例1では、各ノード10は、ランクの低い順に割り当て番号を振って隣り合う割り当て番号が隣り合うノード10同士を組にして2つのノード10毎のAllreduce処理を実行した。ただし、2つのノード10毎のAllreduce処理の方法はこれに限らない。そこで、以下に他の方法による2つのノード10毎のAllreduce処理を説明する。
図8は、2つのノード毎のAllreduce処理の他の方法を表した図である。
【0075】
図8に示す、集約手順231は、分割バタフライ方式と呼ばれる場合がある。また、集約手順232は、二分木集約方式とよばれる場合がある。集約手順233は、全量バタフライ方式と呼ばれる場合がある。
【0076】
集約手順231では、隣り合うノード11~14が、それぞれ配列データの半分の部分データを交換する。そして、各ノード11~14は、受け取った部分でータと対応する部分データとを用いて演算を行う。次に、各ノード11~14は、配列データの同じ位置の演算結果を有する相手との間で、演算結果の半分の部分データを交換する。そして、各ノード11~14は、受け取った部分でータと対応する部分データとを用いて演算を行う。その後、各ノード11~14が有する演算結果をそれぞれに配布し合うことで、ノード11~14は、全ての勾配情報を用いた演算結果を取得することができる。
【0077】
また、集約手順232では、ノード11がノード12に配列データを送信し、ノード13がノード14に配列データを送信する。次に、ノード12及び14は、受信した配列データを用いて演算を行う。次に、ノード12は、演算結果をノード14へ送信する。そして、ノード14は、それぞれの演算結果を用いて演算を実行する。その後、ノード14が有する演算結果がノード11~13へ配布される。これにより、ノード11~14は、全ての勾配情報を用いた演算結果を取得することができる。
【0078】
また、集約手順233では、隣り合うノード11~14が、それぞれ配列データの半分の部分データを交換し、それぞれが演算を実行する。次に、ノード11~14のうちの他の演算結果を持つ同士が演算結果を交換し、それぞれが演算を実行する。これにより、ノード11~14は、全ての勾配情報を用いた演算結果を取得することができる。
【0079】
ここで、
図9を参照して、全量バタフライ方式によるAllreduce処理の具体例を説明する。
図9は、全量バタフライ方式によるAllreduce処理の具体例を表す図である。ここでは、ノード11は、部分データD00、D01、D02及びD03を含む配列データを有する。ノード12は、部分データD10、D11、D12及びD13を含む配列データを有する。ノード13は、部分データD20、D21、D22及びD23を含む配列データを有する。ノード14は、部分データD30、D31、D32及びD33を含む配列データを有する。
【0080】
ノード11とノード12とは、部分データD00~D03と部分データD10~D13とを交換する。そして、ノード11及び12は、関数fを用いた演算を実行して、部分データf(D00,D10)、f(D01,D11)、f(D02,D12)及びf(D03,D13)を取得する。
【0081】
同様に、ノード13とノード14とは、部分データD20~D23と部分データD30~D33とを交換する。そして、ノード13及び14は、関数fを用いた演算を実行して、部分データf(D20,D30)、f(D21,D31)、f(D22,D32)及びf(D23,D33)を取得する。
【0082】
次に、ノード11とノード13とは、それぞれの演算結果を交換し関数fを用いた演算を実行する。また、ノード12とノード14とは、それぞれの演算結果を交換し関数fを用いた演算を実行する。これにより、ノード11~14は、いずれも、f(D00,D10,D20,D30)、f(D01,D11,D21,D31)、f(D02,D12,D22,D32)及びf(D03,D13,D23,D33)を取得する。これにより、ノード11~14は、Allreduce処理を完了する。
【0083】
以上に説明したように、本変形例に係る並列計算機は、実施例1とは異なる2組平均を用いた全ノード平均化処理の方法を用いてAllreduce処理を実行する。このように、他の組平均を用いた全ノード平均化処理の方法を用いても、演算精度を犠牲にすることなくスループットを向上させることができる。
【0084】
(変形例2)
実施例1では、組分集約処理実行部104は、負の無限大への丸めを用いた端数切捨て方式である(x0&x1)+((x0^x1)>>1)と表される演算を実行することでx0とx1との平均値を求めた。ただし、オーバーフローを抑えて2つのノード10の平均値を算出する方法はこれに限らない。そこで、以下に他の方法による2つのノード10の平均値の算出を説明する。
【0085】
例えば、組分集約処理実行部104は、正の無限大への丸めを用いた端数切上方式によりx0とx1との平均値を求めることができる。これは、x0とx1とをビット毎に分けて平均値の過大評価値を計算した後に誤差を減算する方式である。この方式では、平均値の過大評価値の演算を「|」とした場合、組分集約処理実行部104は、(x0|x1)-((x0^x1)>>1)と表される演算を実行することでx0とx1との平均値を求める。
【0086】
x0とx1とでビット値が同一の場合、ビット値が同一なので(x0|x1)がそのまま過大評価されていない真の平均値となる。一方、x0とx1とでビット値が異なる場合、(x0^x1)>>1により異なるビットが抽出される。ここで、ビット値が異なる場合、真の平均値は、(x0^x1)-(x0^x1/2)と表される。そこで、ビット値が異なるビットに着目すると、(x0^x1)=(x0|x1)である。このことから、(x0|x1)-(x0^x1/2)により、ビット値が異なる場合の真の平均値が算出される。この際、(x0^x1/2)で端数切捨てが発生するので、最終的な平均値としては端数切上になる。
【0087】
また、組分集約処理実行部104は、偶然丸め用いることでx0とx1との平均値を求めることができる。偶数丸めは、JIS(Japanese Industrial Standards)丸め、IOS(International Organization for Standardization)丸め又は銀行丸めと呼ばれる場合もある。これは、端数が発生した場合、結果が偶数になるように丸める手法であり、端数を一方だけ丸めることによる蓄積誤差を統計的になくすことを目的とする。具体的には、組分集約処理実行部104は、実施例1の端数切捨て方式をベースに、端数が発生し且つ切り捨て結果が奇数になる場合に1を加算することで平均値を算出する。すなわち、組分集約処理実行部104は、t1=(x0^x1)、t2=(x0&x1)+(t1>>1)として、t2+(t1&t2&1)によりx0とx1との平均値を算出する。
【0088】
ここで、端数切捨ての平均値は、(x0&x1)+((x0^x1)>>1)である。端数は((x0^x1)>>1)の計算で発生するので、シフト前の(x0^x1)の最下位ビットを見れば端数が発生したか否かが判定できる。すなわち、((x0^x1)&1)により、最下位ビットを見れば端数が発生したビットを抽出できる。また、切り捨て結果の最下位ビットにより切り捨て結果が奇数か否かを判定できるので、(((x0&x1)+((x0^x1)>>1))&1)により、切り捨て結果が奇数のビットを抽出できる。以上のことから、端数が発生し且つ切り捨て結果が奇数かどうかは、上記2項目の論理積をもとめることで判定できる。すなわち、(((x0^x1)&((x0&x1)+((x0^x1)>>1))&1)により、端数が発生し且つ切り捨て結果が奇数のビットを抽出できる。そして、共通する計算を省くことで、上述した偶然丸め用いたx0とx1との平均値を求める演算が生成される。
【0089】
以上に説明したように、本変形例に係る並列計算機は、実施例1とは異なる2つの値の平均値の演算方法を用いてAllreduce処理を実行する。このように、2つの値の平均値の演算方法として実施例1と異なる方法を用いても、演算精度を犠牲にすることなくスループットを向上させることができる。
【実施例2】
【0090】
図10は、実施例2に係るノードのブロック図である。本実施例に係る並列計算機1は、Allreduce処理の対象とする数が2のべき乗以外の場合にも、2組平均を用いた全ノード平均化処理を実行できることが実施例1と異なる。以下の説明では、実施例1と同じ各部の機能については説明を省略する。以下では、Allreduces処理の対象の数を対象数と言う。
【0091】
実行処理判定部102は、対象数が2のべき乗の場合、2組平均を用いた全ノード平均化処理の実行を組分集約処理実行部104に依頼する。一方、対象数が2のべき乗でない場合、実行処理判定部102は、対象数を調整した上での2組平均を用いた全ノード平均化処理の実行を組分集約処理実行部104に依頼する。
【0092】
組分集約処理実行部104は、対象数が2のべき乗でない場合、対象数を調整した上での2組平均を用いた全ノード平均化処理の実行の依頼を実行処理判定部102から受ける。
【0093】
組分集約処理実行部104は、対象数が、対象数に最も近いべき乗数未満で、且つ、対象数を2のべき乗で表した数の乗数を1減らした数から乗数を2減らした数を減算した値以上であるか否かを判定する。すなわち、対象数をNとして、対象数に最も近いべき乗数が2Pの場合、組分集約処理実行部104は、2P+2P-1≦N<2Pか否かを判定する。
【0094】
対象数が、対象数に最も近いべき乗数より大きい、又は、対象数を2のべき乗で表した数の乗数を1減らした数から乗数を2減らした数を減算した値未満の場合、組分集約処理実行部104は、最も近い2のべき乗に対して対象数が過剰と判定する。
【0095】
対象数が過剰の場合、組分集約処理実行部104は、2組平均を用いた全ノード平均化処理の対象の全ての対象の中から対象数に最も近いべき乗数のノード10をランダムに選択する。この場合、組分集約処理実行部104は、コミュニケータ2に属するノード10間で統一した乱数種を用いてランダムな選択を行う。これにより、各ノード10は、いずれも2組平均を用いた全ノード平均化処理の対象として選択するノード10を統一することができる。その後、組分集約処理実行部104は、選択した対象に対して実施例1と同様に2組平均を用いた全ノード平均化処理を実行する。
【0096】
一方、組分集約処理実行部104は、対象数が、対象数に最も近いべき乗数未満、又は、対象数を2のべき乗で表した数の乗数を1減らした数から乗数を2減らした数を減算した値以上である場合、対象数が最も近い2のべき乗に対して数が不足した状態と判定する。
【0097】
数が不足した状態の場合、組分集約処理実行部104は、
図11に示すダミーノード20の生成処理を実行する。
図11は、ダミーノードの生成処理の概要を表す図である。ダミーノード20の生成処理において、組分集約処理実行部104は、象数を2のべき乗で表した数から対象数を減算してダミーノード20の追加数を求める。そして、組分集約処理実行部104は、コミュニケータ2に属するノード10間で統一した乱数種を用いて乱数を発生させる。そして、組分集約処理実行部104は、発生した乱数に応じたノード10をダミーノード20の役割を担うノード10とする。ここで、各ノード10の組分集約処理実行部104は、統一された乱数種を用いて乱数を発生させるため、他のノード10に問い合わせることなく、ダミーノード20の役割を担うノード10をいずれのノード10においても一致させることができる。ここで、
図11では、ノード12がダミーノード20の役割を担うノード10と決定された場合を表す。
【0098】
そして、ダミーノード20の役割を担うノード10として決定されたノード10の組分集約処理実行部104は、本来のノード10の動作とともにダミーノード20としての動作を実行する。ここで、
図11では、ノード12とダミーノード20とを分けて記載したが、実際には、ダミーノード20は、ノード12の中に生成される。ノード10が、ダミーノード20として動作する場合、勾配情報はその装置がデータ格納部107に保持する勾配情報をダミーノード20が保持する勾配情報として扱う。
【0099】
ダミーノード20の役割を担うノード10の組分集約処理実行部104は、自装置の中にダミーノード20を作成する。この時、組分集約処理実行部104は、データ格納部107にダミーノード20の勾配情報を格納する領域を確保し、その領域に勾配情報をコピーする。すなわち、ダミーノード20の追加後のイメージとしては、
図11に示すように、新たに生成されたダミーノード20に、ノード12の勾配情報121がコピーされた状態となる。
【0100】
そして、ダミーノード20の役割を担うノード10の組分集約処理実行部104は、本来のノード10としての2つのノード10が保持する値の平均化処理と、ダミーノード20としての2つのノード10が保持する値の平均化処理とを実行する。また、ダミーノード20の役割を担うことのないノード10の組分集約処理実行部104は、実施例1と同様の2つのノード10が保持する値の平均化処理を実行する。ノード10は、
図12に示すように、演算結果を有するノード10が1台になるまで、2つのノード10が保持する値の平均化処理を繰り返し、その後演算結果を全てのノード10に配布することで、2組平均を用いた全ノード平均化処理を完了する。
図12は、実施例2に係る勾配情報の集約処理の一例を表す図である。
【0101】
図12に示すダミーノード20は、実際にはノード12で動作する仮想ノードである。そして、i=0回目の2つのノード10の平均化処理において、ダミーノード20が、ノードW
03とされて処理される。その後は、実施例1と同様に処理が行われ、ノード11は、ノード11~13及びダミーノード20の勾配情報の平均値を有するノードW
02となる。
【0102】
ここで、ダミーノード20は、1つのノード10が役割を担うため、2組平均を用いた全ノード平均化処理においてなるべく早く除外されることが好ましい。そこで、組分集約処理実行部104は、ダミーノード20を早く除外するように、ノード10及びダミーノード20における組を生成することが好ましい。
【0103】
図13は、ダミーノードを含む場合のノードの組の選択方法の一例を表す図である。また、
図14は、ダミーノードを含む場合のノードの組の選択方法の他の例を表す図である。
図13及び14の何れの場合も、ノード10が13台あり、ダミーノード20が3台生成される場合を表す。そして、2つのノード10の値の平均化処理毎に演算結果を有する各ノード10に低い方から割り当て番号が割り当てられる。ここでは、#0~#12を割り当て番号として、ノード10に割り当て番号を付加した値で各ノード10を表す。また、3台のダミーノード20をノード#13~#15と表し、それぞれが、ノード#7,#2及び#10で実行される場合で説明する。
【0104】
例えば、
図13に示すように、Nを対象数とし、iが0以上でN/2より小さい整数とした場合、組分集約処理実行部104は、ランクの低い方から順に割り当て番号割り当て、ノード#iとノード#i+N/2とを組として、バイナリツリーを構成する。そして、ノード#i+N/2の組分集約処理実行部104は、組となったノード#iに保持データを送信する。一方、ノード#iの組分集約処理実行部104は、自装置の保持データと受信した保持データとを用いて演算を行う。その後、組分集約処理実行部104は、割り当て番号の再割り当て及び2つのノード10の値の平均化処理を繰返す。この場合、1回目の2つのノード10の値の平均化処理において、ダミーノード20であるノード#13~#15は、その後の2つのノード10の値の平均化処理からは除外される。
【0105】
また、組分集約処理実行部104は、例えば、
図14に示すように、ランクの低い方から順に割り当て番号割り当て、iが偶数である場合のノード#iとノード#i+1とを組として、バイナリツリーを構成する。そして、ノード#i+1の組分集約処理実行部104は、組となったノード#iに保持データを送信する。一方、ノード#iの組分集約処理実行部104は、自装置の保持データと受信した保持データとを用いて演算を行う。その後、組分集約処理実行部104は、割り当て番号の再割り当て及び2つのノード10の値の平均化処理を繰返す。この場合も、1回目の2つのノード10の値の平均化処理において、ダミーノード20であるノード#13~#15は、保持データを組となるノード10へ送信するので、その後の2つのノード10の値の平均化処理からは除外される。
【0106】
次に、
図15を参照して、本実施例に係る並列計算機によるAllreduce処理の流れについて説明する。
図15は、実施例2に係る並列計算機によるAllreduce処理のフローチャートである。
【0107】
実行処理判定部102は、コミュニケータ2のサイズの情報及びランクの情報の入力を番号割当部101から受ける。そして、実行処理判定部102は、コミュニケータ2のサイズをAllreduce処理において対象とするノード10の数である対象数とする。ここでは、対象数をNとする。そして、実行処理判定部102は、対象数Nが2のp乗と表すことができるか否か、すなわちN=2pか否かを判定する(ステップS101)。
【0108】
N=2
pの場合(ステップS101:肯定)、実行処理判定部102は、2組平均を用いた全ノード平均化処理を組分集約処理実行部104に依頼する。組分集約処理実行部104は、実行処理判定部102からの依頼を受けて、2組平均を用いた全ノード平均化処理を実行する(ステップS105)。ここで、ステップS105で実行される処理は、例えば、
図7のフローチャートで示したステップS3~S11にあたる。
【0109】
N=2pでない場合(ステップS101:否定)、実行処理判定部102は、対象数の調整した上での2組平均を用いた全ノード平均化処理を組分集約処理実行部104に依頼する。そこで、組分集約処理実行部104は、実行処理判定部102からの依頼を受けて、対象数が、対象数に最も近いべき乗数より小さく、且つ、対象数を2のべき乗で表した数の乗数を1減らした数から乗数を2減らした数を減算した値以上か否かを判定する。すなわち、組分集約処理実行部104は、対象数がNであり、対象数に最も近い2のべき乗が2Pである場合、2P-1+2P-2≦N<2Pか否かを判定する(ステップS102)。
【0110】
2P-1+2P-2≦N<2Pの場合(ステップS102:肯定)、組分集約処理実行部104は、2P-N個のダミーノード20を加え、ランダムに選んだ勾配情報をコピーする(ステップS103)。言い換えれば、組分集約処理実行部104は、ランダムに選んだノード10の中にダミーノード20を生成させて、選ばれたノード10が保持する勾配情報をコピーしてダミーノード20に保持させる。
【0111】
その後、組分集約処理実行部104は、ダミーノード20とノード10とを2組平均を用いた全ノード平均化処理の対象として、2組平均を用いた全ノード平均化処理を実行する(ステップS105)。
【0112】
これに対して、2P-1+2P-2≦N<2Pでない場合(ステップS102:否定)、組分集約処理実行部104は、2組平均を用いた全ノード平均化処理の対象であるN個のノード10の中から2P個のノード10をランダムに選択する(ステップS104)。
【0113】
その後、組分集約処理実行部104は、選択したノード10を2組平均を用いた全ノード平均化処理の対象として、2組平均を用いた全ノード平均化処理を実行する(ステップS105)。
【0114】
さらに、
図16を参照して、特定のノード10における2組平均を用いた全ノード平均化処理の流れを説明する。
図16は、各ノードにおける2組平均を用いた全ノードの平均化処理のフローチャートである。
【0115】
組分集約処理実行部104は、統一された乱数種から乱数を発生させる(ステップS201)。
【0116】
組分集約処理実行部104は、発生させた乱数で自装置である特定のノード10がダミーノード20を生成するノード10か否かを判定する(ステップS202)。
【0117】
特定のノード10がダミーノード20を生成するノード10の場合(ステップS202:肯定)、組分集約処理実行部104は、ダミーノード20のパラメータと勾配情報を保持する領域を確保する。さらに、組分集約処理実行部104は、勾配情報を確保した領域にコピーする(ステップS203)。
【0118】
組分集約処理実行部104は、特定のノード10とダミーノード20の両方についてオーバーフロー防止の2組平均を用いた全ノード平均化処理を実行する(ステップS204)。
【0119】
これに対して、特定のノード10がダミーノード20を生成するノード10でない場合(ステップS202:否定)、組分集約処理実行部104は、特定のノード10についてオーバーフロー防止の2組平均を用いた全ノード平均化処理を実行する(ステップS205)。
【0120】
以上に説明したように、本実施例に係る並列計算機は、対象数の数に応じて、全対象数から選択して対象数を減らす、又は、ダミーノードを加えて対象数を増やして、2組平均を用いた全ノード平均化処理を実行する。これにより、対象数が2のべき乗で表すことができない場合にも、2組平均を用いた全ノード平均化処理を実行することができる。したがって、本実施例に係る並列計算機は演算誤差を軽減し且つデータ転送量を抑えることでき、対象数の制限なく演算精度を犠牲にすることなくスループットを向上させることが可能となる。
【符号の説明】
【0121】
1 並列計算機
2 コミュニケータ
5 ネットワーク
10~14 ノード
20 ダミーノード
101 番号割当部
102 実行処理判定部
103 通常集約処理実行部
104 組分集約処理実行部
105 データ送信部
106 データ受信部
107 データ格納部