(57)【要約】【課題】深層学習に適用した場合に効果的な分散処理を行う。【解決手段】１番目の分散処理ノード１は、自ノードで生成された分散データを中間集計データとして、この中間集計データを予め指定された次の番号の分散処理ノード１に送信する。１番目と最終とを除く中間の分散処理ノード１は、受信した中間集計データと自ノードで生成された分散データとの和を、対応する重み毎に求めて更新後の中間集計データを生成し、この中間集計データを予め指定された次の番号の分散処理ノード１に送信する。最終の分散処理ノード１は、受信した中間集計データと自ノードで生成された分散データとの和を、対応する重み毎に求めて集計データを生成し、この集計データを１番目および中間の分散処理ノード１に送信する。各分散処理ノード１は、集計データに基づいてニューラルネットワークの重みを更新する。【選択図】  図１
2019215603.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、
各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、
Ｎ個の分散処理ノードのうち、予め定められた１番目の分散処理ノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、
Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、
Ｎ個の分散処理ノードのうち、予め定められた最終の分散処理ノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、前記１番目および前記中間の分散処理ノードに送信し、
各分散処理ノードは、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とする分散処理システム。
【請求項２】
請求項１記載の分散処理システムにおいて、
各分散処理ノードは、
自ノードが前記１番目の分散処理ノードである場合に、前記第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、自ノードが前記中間の分散処理ノードである場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、自ノードが前記最終の分散処理ノードである場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、前記１番目および前記中間の分散処理ノードに送信する集計データ送信部と、
自ノードが前記中間の分散処理ノードである場合に、前記更新後の第１の集計データを生成し、自ノードが前記最終の分散処理ノードである場合に、前記第２の集計データを生成する集計データ生成部と、
自ノードが前記１番目または前記中間の分散処理ノードである場合に、前記第１の集計データと前記第２の集計データとを受信し、自ノードが前記最終の分散処理ノードである場合に、前記第１の集計データを受信する受信部と、
前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とする分散処理システム。
【請求項３】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたＫ個（Ｋは３以上の整数）のリングノードと、
前記Ｋ個のリングノードの各々を、分散処理ノードあるいは中継ノードの何れかに指定する分散処理制御部とを備え、
Ｋ個のリングノードのうち、分散処理ノードとして機能するＮ個（Ｎは２以上Ｋ以下の整数）の各リングノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、
Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードとして機能するリングノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードとして機能するリングノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、予め指定された最終の分散処理ノードとして機能するリングノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、前記中間の分散処理ノードとして機能するリングノードは、受信した第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信し、
Ｋ個のリングノードのうち、前記中継ノードとして機能する各リングノードは、受信した前記第１の集計データまたは前記第２の集計データを、転送先の分散処理ノードに向けて送信し、
各分散処理ノードは、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とする分散処理システム。
【請求項４】
請求項３記載の分散処理システムにおいて、
各リングノードは、
自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、自ノードが前記中間の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、自ノードが前記最終の分散処理ノードとして機能する場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信し、自ノードが前記中継ノードとして機能する場合に、受信した前記第１の集計データまたは前記第２の集計データを、転送先の分散処理ノードに向けて送信する集計データ送信部と、
自ノードが前記中間の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを生成し、自ノードが前記最終の分散処理ノードとして機能する場合に、前記第２の集計データを生成する集計データ生成部と、
自ノードが前記１番目または前記中間の分散処理ノードとして機能する場合に、前記第１の集計データと前記第２の集計データとを受信し、自ノードが前記最終の分散処理ノードとして機能する場合に、前記第１の集計データを受信する受信部と、
自ノードが前記分散処理ノードとして機能する場合に、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とする分散処理システム。
【請求項５】
請求項３または４記載の分散処理システムにおいて、
前記分散処理制御部は、
前記Ｋ個のリングノードの各々を、前記分散処理ノードあるいは前記中継ノードの何れかに指定する機能指定部と、
前記第１の集計データまたは前記第２の集計データを転送先の分散処理ノードに送信できない障害が発生したときに、この障害を回避するように各リングノードの機能指定を変更する機能指定変更部とを備えることを特徴とする分散処理システム。
【請求項６】
請求項３乃至５のいずれか１項に記載の分散処理システムにおいて、
前記分散処理制御部は、前記分散処理ノードとして指定するリングノードの各々を、複数の異なるグループのうちいずれか１つのグループに属するように指定し、
Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードとして機能するリングノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、同じグループに属する、予め指定された次の番号の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードとして機能するリングノードは、同じグループの分散処理ノードから送信された第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、同じグループに属する、予め指定された次の番号の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、予め定められた最終の分散処理ノードとして機能するリングノードは、同じグループの分散処理ノードから送信された第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、同じグループに属する、予め指定された前の番号の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、前記中間の分散処理ノードとして機能するリングノードは、同じグループの分散処理ノードから送信された第２の集計データを前記番号ｍの順番にパケット化して、同じグループに属する、予め指定された前の番号の分散処理ノードに向けて送信し、
各分散処理ノードは、同じグループの分散処理ノードで生成・送信された前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とする分散処理システム。
【請求項７】
ネットワークを介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードの各々が、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、
Ｎ個の分散処理ノードのうち、予め定められた１番目の分散処理ノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信する第２のステップと、
Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信する第３のステップと、
Ｎ個の分散処理ノードのうち、予め定められた最終の分散処理ノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、前記１番目および前記中間の分散処理ノードに送信する第４のステップと、
各分散処理ノードが、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第５のステップとを含むことを特徴とする分散処理方法。
【請求項８】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたＫ個（Ｋは３以上の整数）のリングノードのうち、分散処理ノードとして機能するＮ個（Ｎは２以上Ｋ以下の整数）の各リングノードが、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、
Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードとして機能するリングノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信する第２のステップと、
Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードとして機能するリングノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信する第３のステップと、
Ｎ個の分散処理ノードのうち、予め指定された最終の分散処理ノードとして機能するリングノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信する第４のステップと、
Ｎ個の分散処理ノードのうち、前記中間の分散処理ノードとして機能するリングノードが、受信した第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信する第５のステップと、
Ｋ個のリングノードのうち、中継ノードとして機能する各リングノードが、前記第１の集計データまたは前記第２の集計データを受信したときに、受信した前記第１の集計データまたは前記第２の集計データを、転送先の分散処理ノードに向けて送信する第６のステップと、
各分散処理ノードが、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第７のステップとを含むことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の分散処理ノードを備える分散処理システムに係り、特に、各分散処理ノードから数値データを集計して集計データを生成し、各分散処理ノードに集計データを分配する分散処理システムおよび分散処理方法に関するものである。
【背景技術】
【０００２】
深層学習では、多層のニューロンモデルからなる学習対象について、各ニューロンモデルの重み（前段のニューロンモデルが出力した値に乗じる係数）を、入力したサンプルデータに基づいて更新することにより、推論精度を改善する。
【０００３】
通常、推論精度を改善する手法には、ミニバッチ法が用いられている。ミニバッチ法では、サンプルデータ毎に前記重みに対する勾配を計算する勾配計算処理と、複数の異なるサンプルデータについて前記勾配を集計する（サンプルデータ毎に得られた勾配を重み別に合算する）集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理と、を繰り返す。
【０００４】
これらの処理、特に勾配計算処理は、多数回の演算を必要とするが、推論精度を向上させるために、重みの個数や入力するサンプルデータの個数が増加すると、深層学習に要する時間が増大するという、課題がある。
【０００５】
勾配計算処理を高速化するため、分散処理の手法が用いられている。具体的には、複数の分散処理ノードを設け、各ノードは、各々異なるサンプルデータについて勾配計算処理を行う。これにより、ノード数に比例して単位時間に処理できるサンプルデータ数を増加させることが可能となるため、勾配計算処理を高速化できる（非特許文献１参照）。
【０００６】
深層学習の分散処理において、集計処理を行うためには、各分散処理ノードがサンプルデータ毎に重みに対する勾配を計算する勾配計算処理およびサンプルデータ毎に得られた勾配を重み別に合算するノード内集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理との間に、分散処理ノード毎に得られたデータ（分散データ）の集計処理を行うノードに転送するための通信（集約通信）と、集約通信により取得したデータに基づいて集計する処理（ノード間集計処理）と、各分散処理ノードから取得した集計したデータ（集計データ）を各分散処理ノードに分配するための通信（分配通信）と、が必要となる。
【０００７】
図２２は、従来の深層学習用分散処理システムの構成例を示すブロック図である。図２３に、従来技術による、深層学習の分散処理のシーケンスを示す。分散処理ノード１００［ｎ］（ｎ＝１，・・・，Ｎ）は、Iの期間においてサンプルデータ入力と勾配計算処理とノード内集計処理とを行い、分散データを集計処理ノード１０１に送信する。IIの期間では、このような各ノードからの送信が行われるが、各ノードが同時に分散データを送信するとは限らない。
【０００８】
IIIの期間では、集計処理ノード１０１が各ノードから得られた勾配を重み別に合算する全ノード集計処理を行い、IVの期間において集計データを各分散処理ノード１００［ｎ］に送信する。Vの期間では、各分散処理ノード１００［ｎ］が重み更新処理を行う。
こうして、分散処理が行われることにより、深層学習には、集約通信（II）と全ノード集計処理（III）と分配通信（IV）の各処理時間が加わる。
【０００９】
このような処理時間は、深層学習を単一ノードで実施するシステムでは不要であり、深層学習の分散処理を行う上で、処理速度を低下させる要因となっている。
近年、深層学習がより複雑な問題に適用されるようになってきており、重みの総数が増加する傾向にある。このため、分散データや集計データのデータ量が増大し、集約通信時間と分配通信時間が増大している。
【００１０】
このように、深層学習の分散システムは、集約通信時間と分配通信時間の増大によって、分散処理ノード数を増加させることにより、深層学習の高速化の効果が低下するという問題があった。図２４は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示しており、２００は分散処理ノード数と処理性能の理想的な関係（性能∝ノード数）を示し、２０１は分散処理ノード数と処理性能の実際の関係を示している。分散処理ノード数に比例してノード間集計処理の入力である分散データの総量は増大するが、実際の処理性能が分散処理ノード数に比例して向上しない理由は、集計処理ノードの通信速度が、このノードの通信ポートの物理速度以下に制限されるため、集約通信に要する時間が増大するためである。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】秋葉 拓哉，“分散深層学習パッケージ ChainerMN 公開”，プリファードインフラストラクチャー（Preferred Infrastructure），２０１７年，インターネット＜https://research.preferred.jp/2017/05/chainermn-beta-release/＞
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は、上記のような事情を考慮してなされたものであり、その目的は、複数の分散処理ノードを備える分散処理システムおいて、深層学習に適用した場合に効果的な分散処理を行うことができる分散処理システムおよび分散処理方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の分散処理システム（第１の実施例）は、ネットワークを介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、Ｎ個の分散処理ノードのうち、予め定められた１番目の分散処理ノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、Ｎ個の分散処理ノードのうち、予め定められた最終の分散処理ノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、前記１番目および前記中間の分散処理ノードに送信し、各分散処理ノードは、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とするものである。
【００１４】
また、本発明の分散処理システムの１構成例（第１の実施例）において、各分散処理ノードは、自ノードが前記１番目の分散処理ノードである場合に、前記第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、自ノードが前記中間の分散処理ノードである場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信し、自ノードが前記最終の分散処理ノードである場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、前記１番目および前記中間の分散処理ノードに送信する集計データ送信部と、自ノードが前記中間の分散処理ノードである場合に、前記更新後の第１の集計データを生成し、自ノードが前記最終の分散処理ノードである場合に、前記第２の集計データを生成する集計データ生成部と、自ノードが前記１番目または前記中間の分散処理ノードである場合に、前記第１の集計データと前記第２の集計データとを受信し、自ノードが前記最終の分散処理ノードである場合に、前記第１の集計データを受信する受信部と、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とするものである。
【００１５】
また、本発明の分散処理システム（第２の実施例）は、リング状に配置され、隣接するノードと通信路を介して互いに接続されたＫ個（Ｋは３以上の整数）のリングノードと、前記Ｋ個のリングノードの各々を、分散処理ノードあるいは中継ノードの何れかに指定する分散処理制御部とを備え、Ｋ個のリングノードのうち、分散処理ノードとして機能するＮ個（Ｎは２以上Ｋ以下の整数）の各リングノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードとして機能するリングノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードとして機能するリングノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、予め指定された最終の分散処理ノードとして機能するリングノードは、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、前記中間の分散処理ノードとして機能するリングノードは、受信した第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信し、Ｋ個のリングノードのうち、前記中継ノードとして機能する各リングノードは、受信した前記第１の集計データまたは前記第２の集計データを、転送先の分散処理ノードに向けて送信し、各分散処理ノードは、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とするものである。
【００１６】
また、本発明の分散処理システムの１構成例（第２の実施例）において、各リングノードは、自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、自ノードが前記中間の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信し、自ノードが前記最終の分散処理ノードとして機能する場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信し、自ノードが前記中継ノードとして機能する場合に、受信した前記第１の集計データまたは前記第２の集計データを、転送先の分散処理ノードに向けて送信する集計データ送信部と、自ノードが前記中間の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを生成し、自ノードが前記最終の分散処理ノードとして機能する場合に、前記第２の集計データを生成する集計データ生成部と、自ノードが前記１番目または前記中間の分散処理ノードとして機能する場合に、前記第１の集計データと前記第２の集計データとを受信し、自ノードが前記最終の分散処理ノードとして機能する場合に、前記第１の集計データを受信する受信部と、自ノードが前記分散処理ノードとして機能する場合に、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とするものである。
【００１７】
また、本発明の分散処理システムの１構成例（第３の実施例）において、前記分散処理制御部は、前記Ｋ個のリングノードの各々を、前記分散処理ノードあるいは前記中継ノードの何れかに指定する機能指定部と、前記第１の集計データまたは前記第２の集計データを転送先の分散処理ノードに送信できない障害が発生したときに、この障害を回避するように各リングノードの機能指定を変更する機能指定変更部とを備えることを特徴とするものである。
【００１８】
また、本発明の分散処理システムの１構成例（第４の実施例）において、前記分散処理制御部は、前記分散処理ノードとして指定するリングノードの各々を、複数の異なるグループのうちいずれか１つのグループに属するように指定し、Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードとして機能するリングノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、同じグループに属する、予め指定された次の番号の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードとして機能するリングノードは、同じグループの分散処理ノードから送信された第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、同じグループに属する、予め指定された次の番号の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、予め定められた最終の分散処理ノードとして機能するリングノードは、同じグループの分散処理ノードから送信された第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、同じグループに属する、予め指定された前の番号の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、前記中間の分散処理ノードとして機能するリングノードは、同じグループの分散処理ノードから送信された第２の集計データを前記番号ｍの順番にパケット化して、同じグループに属する、予め指定された前の番号の分散処理ノードに向けて送信し、各分散処理ノードは、同じグループの分散処理ノードで生成・送信された前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とするものである。
【００１９】
また、本発明の分散処理方法（第１の実施例）は、ネットワークを介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードの各々が、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、Ｎ個の分散処理ノードのうち、予め定められた１番目の分散処理ノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信する第２のステップと、Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに送信する第３のステップと、Ｎ個の分散処理ノードのうち、予め定められた最終の分散処理ノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、前記１番目および前記中間の分散処理ノードに送信する第４のステップと、各分散処理ノードが、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第５のステップとを含むことを特徴とするものである。
【００２０】
また、本発明の分散処理方法（第２の実施例）は、リング状に配置され、隣接するノードと通信路を介して互いに接続されたＫ個（Ｋは３以上の整数）のリングノードのうち、分散処理ノードとして機能するＮ個（Ｎは２以上Ｋ以下の整数）の各リングノードが、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードとして機能するリングノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信する第２のステップと、Ｎ個の分散処理ノードのうち、前記１番目と最終とを除く中間の分散処理ノードとして機能するリングノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、予め指定された次の番号の分散処理ノードに向けて送信する第３のステップと、Ｎ個の分散処理ノードのうち、予め指定された最終の分散処理ノードとして機能するリングノードが、受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて第２の集計データを生成し、この第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信する第４のステップと、Ｎ個の分散処理ノードのうち、前記中間の分散処理ノードとして機能するリングノードが、受信した第２の集計データを前記番号ｍの順番にパケット化して、予め指定された前の番号の分散処理ノードに向けて送信する第５のステップと、Ｋ個のリングノードのうち、中継ノードとして機能する各リングノードが、前記第１の集計データまたは前記第２の集計データを受信したときに、受信した前記第１の集計データまたは前記第２の集計データを、転送先の分散処理ノードに向けて送信する第６のステップと、各分散処理ノードが、前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第７のステップとを含むことを特徴とするものである。
【発明の効果】
【００２１】
本発明によれば、集約通信処理とノード間集計処理と分配通信処理とを、並行してほぼ同時に行うことが可能であり、効果的な分散処理を行うことができ、ニューラルネットワークの学習効率を向上させることができる。また、本発明では、集計処理ノードを設けることなく深層学習の分散処理を行うことができ、集計処理ノードの通信速度によって分散処理の速度が制限されることがなくなる。
【図面の簡単な説明】
【００２２】
【図１】図１は、本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【図２】図２は、本発明の第１の実施例に係る深層学習用分散処理システムの分散処理ノードの構成例を示すブロック図である。
【図３】図３は、本発明の第１の実施例に係る分散処理ノードのサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。
【図４】図４は、本発明の第１の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と重み更新処理を説明するフローチャートである。
【図５】図５は、本発明の第１の実施例に係る各分散処理ノードの処理のシーケンスを示す図である。
【図６】図６は、本発明の第１の実施例に係る各分散処理ノードの処理のシーケンスを示す図である。
【図７】図７は、本発明の第２の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【図８】図８は、本発明の第２の実施例においてリングノードが分散処理ノードあるいは中継ノードの何れかに指定された状態の例を示す図である。
【図９】図９は、本発明の第２の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【図１０】図１０は、本発明の第２の実施例に係る深層学習用分散処理システムの分散処理ノードの構成例を示すブロック図である。
【図１１】図１１は、本発明の第２の実施例に係る深層学習用分散処理システムの動作を説明する図である。
【図１２】図１２は、本発明の第２の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と重み更新処理を説明するフローチャートである。
【図１３】図１３は、本発明の第２の実施例に係る各分散処理ノードの処理のシーケンスを示す図である。
【図１４】図１４は、本発明の第２の実施例に係る各分散処理ノードの処理のシーケンスを示す図である。
【図１５】図１５は、本発明の第３の実施例に係る深層学習用分散処理システムの分散処理ノードの構成例を示すブロック図である。
【図１６】図１６は、本発明の第３の実施例に係る深層学習用分散処理システムの分散処理制御部の構成例を示すブロック図である。
【図１７】図１７は、本発明の第３の実施例において各リングノードが、分散処理ノードあるいは中継ノードの何れかに指定された状態を示す図である。
【図１８】図１８は、本発明の第３の実施例において各リングノードが、分散処理ノードあるいは中継ノードの何れかに指定された状態を示す図である。
【図１９】図１９は、本発明の第４の実施例において各リングノードが、分散処理ノードあるいは中継ノードの何れかに指定された状態を示す図である。
【図２０】図２０は、本発明の第４の実施例に係る深層学習用分散処理システムの分散処理ノードの構成例を示すブロック図である。
【図２１】図２１は、本発明の第４の実施例に係る深層学習用分散処理システムの分散処理制御部の構成例を示すブロック図である。
【図２２】図２２は、従来の深層学習用分散処理システムの構成例を示すブロック図である。
【図２３】図２３は、従来の深層学習の分散処理のシーケンスを示す図である。
【図２４】図２４は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示す図である。
【発明を実施するための形態】
【００２３】
［第１の実施例］
以下、本発明の実施例について図面を参照して説明する。図１は本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。図１の分散処理システムは、ニューラルネットワークのサンプルデータ（学習データ）の集合毎に設けられたＮ個（Ｎは２以上の整数）の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）と、各分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）から分散処理ノード１［ｊ＋１］に対して、中間集計データＲ*［ｍ，ｊ］を転送し、分散処理ノード１［Ｎ］から各分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）に対して集計データＲ［ｍ］を分配するための、分散処理用ネットワーク２とを備える。分散処理用ネットワーク２は、双方向の通信が可能なネットワークである。なお、本発明において、「ノード」とは、ネットワーク上に分散配置されているサーバ等の機器を意味する。
【００２４】
図２は分散処理ノード１［ｎ］の構成例を示すブロック図である。各分散処理ノード１［ｎ］は、それぞれ図示しないデータ収集ノードから学習用のサンプルデータを受け取るサンプル入力部１０と、サンプルデータが入力されたときに、ニューラルネットワークの重みの各々について、ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する勾配計算処理部１１と、サンプルデータ毎の勾配を集計した数値である分散データを重み毎に生成して保持するノード内集計処理部１２と、中間集計データおよび集計データを送信する集計データ送信部１３と、中間集計データおよび集計データを受信する受信部１４と、自ノードが中間の分散処理ノードである場合に中間集計データを生成し、自ノードが最終の分散処理ノードである場合に集計データを生成する集計データ生成部１５と、集計データに基づいてニューラルネットワークの重みを更新する重み更新処理部１６と、ソフトウェア的に構築された数学モデルであるニューラルネットワーク１７とを備えている。
【００２５】
図３は分散処理ノード１［ｎ］のサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のサンプル入力部１０は、図示しないデータ収集ノードから異なるＳ個（Ｓは２以上の整数）のサンプルデータｘ［ｎ，ｓ］（ｓ＝１，・・・，Ｓ）をミニバッチ毎に入力する（図３ステップＳ１００）。
【００２６】
なお、本発明は、データ収集ノードによるサンプルデータの収集方法、および収集したサンプルデータをＮ個の集合に振り分けて各分散処理ノード１［ｎ］へ分配する方法に限定されるものではなく、これらの方法の如何を問わず適用が可能である。
【００２７】
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の勾配計算処理部１１は、サンプルデータｘ［ｎ，ｓ］が入力されたとき、学習対象のニューラルネットワーク１７のＭ個（Ｍは２以上の整数）の重みｗ［ｍ］（ｍ＝１，・・・，Ｍ）の各々について、ニューラルネットワーク１７の損失関数の勾配Ｇ［ｍ，ｎ，ｓ］をサンプルデータｘ［ｎ，ｓ］毎に計算する（図３ステップＳ１０１）。
【００２８】
ニューラルネットワーク１７を各分散処理ノード１［ｎ］にソフトウェアで構築する方法、ニューラルネットワーク１７の重みｗ［ｍ］、ニューラルネットワーク１７の性能の悪さを示す指標である損失関数、および損失関数の勾配Ｇ［ｍ，ｎ，ｓ］については周知の技術であるので、詳細な説明は省略する。
【００２９】
続いて、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のノード内集計処理部１２は、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，ｎ］を、重みｗ［ｍ］毎に生成して保持する（図３ステップＳ１０２）。分散データＤ［ｍ，ｎ］の計算式は以下のとおりである。
【００３０】
【数１】
2019215603.tif 000003
【００３１】
なお、勾配計算処理部１１による勾配計算処理とノード内集計処理部１２によるノード内集計処理とは、サンプルデータ単位でパイプライン化する（あるサンプルデータに対して勾配計算処理を行うと同時にその一つ前のサンプルデータから得た勾配を集計するノード内集計処理とを同時に実行する）ことができる。
【００３２】
さらに、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、分散データＤ［ｍ，ｎ］を生成した後、分散処理ノード間の集約通信を行い、集計データを生成するためのノード間集計処理を行う。
図４は分散処理ノード１［ｎ］の集約通信処理とノード間集計処理と重み更新処理を説明するフローチャートである。
【００３３】
まず、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められた１番目の分散処理ノード１［１］の集計データ送信部１３は、自ノードで生成されたＭ個の分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を、中間集計データＲ*［ｍ，１］として、予め定められた次の番の分散処理ノード１［２］に分散処理用ネットワーク２を介して送信する（図４ステップＳ１０３，Ｓ１０４）。すなわち、このときの中間集計データＲ*［ｍ，１］は、分散データＤ［ｍ，１］と同じである。
Ｒ*［ｍ，１］＝Ｄ［ｍ，１］                                     ・・・（２）
【００３４】
次に、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目と最終とを除く、予め定められた中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）の受信部１４は、分散処理ノード１［ｉ−１］から中間集計データＲ*［ｍ，ｉ−１］を分散処理用ネットワーク２を介して受信する（図４ステップＳ１０５，Ｓ１０６）。
【００３５】
中間の分散処理ノード１［ｉ］の集計データ生成部１５は、受信した中間集計データＲ*［ｍ，ｉ−１］と自ノードで生成された分散データＤ［ｍ，ｉ］との和を、対応する重みｗ［ｍ］毎に求めることにより、中間集計データＲ*［ｍ，ｉ］を生成する（図４ステップＳ１０７）。すなわち、中間集計データＲ*［ｍ，ｉ］は、Ｍ個の数値から構成される。中間集計データＲ*［ｍ，ｉ］の計算式は以下のとおりである。
Ｒ*［ｍ，ｉ］＝Ｒ*［ｍ，ｉ−１］＋Ｄ［ｍ，ｉ］                 ・・・（３）
【００３６】
そして、中間の分散処理ノード１［ｉ］の集計データ送信部１３は、自ノードで生成された中間集計データＲ*［ｍ，ｉ］を、予め定められた次の番の分散処理ノード１［ｉ＋１］に分散処理用ネットワーク２を介して送信する（図４ステップＳ１０８）。
【００３７】
複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められた最終の分散処理ノード１［Ｎ］の受信部１４は、分散処理ノード１［Ｎ−１］から中間集計データＲ*［ｍ，Ｎ−１］を分散処理用ネットワーク２を介して受信する（図４ステップＳ１０９，Ｓ１１０）。
【００３８】
最終の分散処理ノード１［Ｎ］の集計データ生成部１５は、受信した中間集計データＲ*［ｍ，Ｎ−１］と自ノードで生成された分散データＤ［ｍ，Ｎ］との和を、対応する重みｗ［ｍ］毎に求めることにより、集計データＲ［ｍ］を生成する（図４ステップＳ１１１）。すなわち、集計データＲ［ｍ］は、Ｍ個の数値から構成される。集計データＲ［ｍ］の計算式は以下のとおりである。
Ｒ［ｍ］＝Ｒ*［ｍ，Ｎ−１］＋Ｄ［ｍ，Ｎ］                       ・・・（４）
【００３９】
このように、式（２）、式（３）、式（４）により計算された、Ｍ個の数値から構成される集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）は、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）で生成されたＭ個の数値から構成される分散データＤ［ｍ，ｎ］に基づいて計算され、その値は以下の式により表すことができる。
【００４０】
【数２】
2019215603.tif 000004
【００４１】
そして、最終の分散処理ノード１［Ｎ］の集計データ送信部１３は、自ノードで生成された集計データＲ［ｍ］を、１番目および中間の分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）に分散処理用ネットワーク２を介して分配する分配通信を行う（図４ステップＳ１１２）。
【００４２】
最終の分散処理ノード１［Ｎ］の重み更新処理部１６は、自ノードで生成された集計データＲ［ｍ］に基づいて、自ノード内のニューラルネットワーク１７の重みｗ［ｍ］を更新する重み更新処理を行う（図４ステップＳ１１３）。重み更新処理においては、集計データＲ［ｍ］が示す、損失関数の勾配に基づいて損失関数が最小になるように重みｗ［ｍ］を番号ｍ毎に更新すればよい。重みｗ［ｍ］の更新は周知の技術であるので、詳細な説明は省略する。
【００４３】
このように、重み更新処理は、重みｗ［ｍ］の番号ｍの順番に取得した集計データＲ［ｍ］に基づいて、重みｗ［ｍ］を更新する処理である。このため、分散処理ノード１［Ｎ］は、重みｗ［ｍ］に対する重み更新処理を、番号ｍの順番に行うことができる。
【００４４】
一方、１番目および中間の分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）の受信部１４は、分散処理ノード１［Ｎ］から集計データＲ［ｍ］を分散処理用ネットワーク２を介して受信する（図４ステップＳ１１４，Ｓ１１５）。前記の分配通信により、１番目および中間の分散処理ノード１［ｊ］は、同一の集計データＲ［ｍ］を取得することができる。
【００４５】
１番目および中間の分散処理ノード１［ｊ］の重み更新処理部１６は、受信した集計データＲ［ｍ］に基づいて、自ノード内のニューラルネットワーク１７の重みｗ［ｍ］を更新する重み更新処理を行う（図４ステップＳ１１６）。この重み更新処理は、最終の分散処理ノード１［Ｎ］における重み更新処理と同様である。
【００４６】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード１［ｎ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、ニューラルネットワーク１７の推論精度を向上させる。
【００４７】
上記の説明では、Ｍ個の分散データＤ［ｍ，ｎ］を１度に処理する動作で説明しているが、実際にはＭ個の分散データＤ［ｍ，ｎ］を複数のパケットに振り分けてパイプライン処理を行う。
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の処理における手順（重みｗ［ｍ］の番号ｍの順番にパイプライン処理を行う動作）を、以下に説明する。
【００４８】
複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められた１番目の分散処理ノード１［１］の集計データ送信部１３は、自ノードで生成されたＭ個の分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を、中間集計データＲ*［ｍ，１］として、予め定められた次の番の分散処理ノード１［２］に分散処理用ネットワーク２を介して送信する集約通信を行う（図４ステップＳ１０３，Ｓ１０４）。
【００４９】
このとき、分散処理ノード１［１］の集計データ送信部１３は、保持するＭ個の中間集計データＲ*［ｍ，１］（＝Ｄ［ｍ，１］）を、重みｗ［ｍ］の番号ｍの順番にＬ（Ｌは１以上Ｍ未満の整数）個ずつＰ個（Ｐは２以上の整数）の集約通信パケットに振り分けて、全ての集約通信パケットを送信し終えるまで、Ｐ個の集約通信パケットを順番に次の番の分散処理ノード１［２］に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する集約通信パケットＳＰ［ｐ，１］には、Ｌ個の中間集計データＲ*［ｒ，１］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００５０】
なお、ＭがＬで割り切れない条件では、Ｐ番目の集約通信パケットＳＰ［Ｐ，１］には、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，１］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
Ｐ番目の集約通信パケットＳＰ［Ｐ，１］については、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，１］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００５１】
次に、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目と最終とを除く中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）の受信部１４は、分散処理ノード１［ｉ−１］から集約通信パケットＳＰ［ｐ，ｉ−１］（ｐ＝１，・・・，Ｐ）を受信する（図４ステップＳ１０５，Ｓ１０６）。
【００５２】
中間の分散処理ノード１［ｉ］の受信部１４は、受信した集約通信パケットＳＰ［ｐ，ｉ−１］から、送信元の分散処理ノード１［ｉ−１］が生成したＬ個の中間集計データＲ*［ｒ，ｉ−１］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）を取得する。分散処理ノード１［ｉ−１］からＰ個の集約通信パケットＳＰ［ｐ，ｉ−１］（ｐ＝１，・・・，Ｐ）が順番に送信されることにより、中間の分散処理ノード１［ｉ］の受信部１４は、最終的にＭ個の中間集計データＲ*［ｍ，ｉ−１］を取得することができる。
【００５３】
そして、中間の分散処理ノード１［ｉ］の集計データ生成部１５は、取得した中間集計データＲ*［ｍ，ｉ−１］と自ノードで生成された分散データＤ［ｍ，ｉ］との和を、対応する重みｗ［ｍ］毎に求めることにより（式（３））、中間集計データＲ*［ｍ，ｉ］を生成する（図４ステップＳ１０７）。
【００５４】
次に、中間の分散処理ノード１［ｉ］の集計データ送信部１３は、自ノードで生成されたＭ個の中間集計データＲ*［ｍ，ｉ］（ｍ＝１，・・・，Ｍ）を、予め定められた次の番の分散処理ノード１［ｉ＋１］に分散処理用ネットワーク２を介して送信する集約通信を行う（図４ステップＳ１０８）。
【００５５】
このとき、分散処理ノード１［ｉ］の集計データ送信部１３は、生成されたＭ個の中間集計データＲ*［ｍ，ｉ］を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の集約通信パケットに振り分けて、全ての集約通信パケットを送信し終えるまで、Ｐ個の集約通信パケットを順番に次の番の分散処理ノード１［ｉ＋１］に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する集約通信パケットＳＰ［ｐ，ｉ］には、Ｌ個の中間集計データＲ*［ｒ，ｉ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００５６】
なお、ＭがＬで割り切れない条件では、Ｐ番目の集約通信パケットＳＰ［Ｐ，ｉ］には、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，ｉ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
Ｐ番目の集約通信パケットＳＰ［Ｐ，ｉ］については、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，ｉ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００５７】
複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められた最終の分散処理ノード１［Ｎ］の受信部１４は、分散処理ノード１［Ｎ−１］から集約通信パケットＳＰ［ｐ，Ｎ−１］（ｐ＝１，・・・，Ｐ）を受信する（図４ステップＳ１０９，Ｓ１１０）。
【００５８】
最終の分散処理ノード１［Ｎ］の受信部１４は、受信した集約通信パケットＳＰ［ｐ，Ｎ−１］から、送信元の分散処理ノード１［Ｎ−１］が生成したＬ個の中間集計データＲ*［ｒ，Ｎ−１］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）を取得する。分散処理ノード１［Ｎ−１］からＰ個の集約通信パケットＳＰ［ｐ，Ｎ−１］（ｐ＝１，・・・，Ｐ）が順番に送信されることにより、最終の分散処理ノード１［Ｎ］の受信部１４は、最終的にＭ個の中間集計データＲ*［ｍ，Ｎ−１］を取得することができる。
【００５９】
そして、最終の分散処理ノード１［Ｎ］の集計データ生成部１５は、取得した中間集計データＲ*［ｍ，Ｎ−１］と自ノードで生成された分散データＤ［ｍ，Ｎ］との和を、対応する重みｗ［ｍ］毎に求めることにより（式（４））、集計データＲ［ｍ］を生成する（図４ステップＳ１１１）。
【００６０】
次に、最終の分散処理ノード１［Ｎ］の集計データ送信部１３は、自ノードで生成された集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化して、このパケットを、１番目および中間の分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）に分配する分配通信を行う（図４ステップＳ１１２）。
【００６１】
このとき、分散処理ノード１［Ｎ］の集計データ送信部１３は、生成されたＭ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の分配通信パケットに振り分けて、全ての分配通信パケットを送信し終えるまで、Ｐ個の分配通信パケットを順番に次の番の分散処理ノード１［ｊ］に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する分配通信パケットＤＰ［ｐ］には、Ｌ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００６２】
なお、ＭがＬで割り切れない条件では、Ｐ番目の分配通信パケットＤＰ［ｐ］には、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
Ｐ番目の分配通信パケットＤＰ［ｐ］については、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００６３】
１番目および中間の分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）の受信部１４は、分散処理ノード１［Ｎ］から分配通信パケットＤＰ［ｐ］（ｐ＝１，・・・，Ｐ）を受信する（図４ステップＳ１１４，Ｓ１１５）。
【００６４】
１番目および中間の分散処理ノード１［ｊ］の受信部１４は、受信した分配通信パケットＤＰ［ｐ］から、送信元の分散処理ノード１［Ｎ］が生成したＬ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）を取得する。分散処理ノード１［Ｎ］からＰ個の分配通信パケットＤＰ［ｐ］（ｐ＝１，・・・，Ｐ）が順番に送信されることにより、１番目および中間の分散処理ノード１［ｊ］の受信部１４は、最終的にＭ個の集計データＲ［ｍ］を取得することができる。
各分散処理ノード１［ｎ］における重み更新処理は、上記で説明したとおりである。
【００６５】
このように、分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）から分散処理ノード１［ｊ＋１］への集約通信（中間集計データＲ*［ｍ，ｊ］を分散処理ノード１［ｊ＋１］に送信する処理）、中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）が行うノード間集計処理（受信した中間集計データＲ*［ｍ，ｉ−１］と自ノードで生成した分散データＤ［ｍ，ｉ］に基づいて、中間集計データＲ*［ｍ，ｉ］を計算する処理）、分散処理ノード１［Ｎ］が行うノード間集計処理（受信した中間集計データＲ*［ｍ，Ｎ−１］と自ノードで生成した分散データＤ［ｍ，Ｎ］に基づいて、集計データＲ［ｍ］を計算する処理）、分散処理ノード１［Ｎ］から各分散処理ノード１［ｊ］（ｊ＝１，・・・，Ｎ−１）への分配通信（集計データＲ［ｍ］を各分散処理ノード１［ｊ］に分配する処理）、の全ては、前記の重みｗ［ｍ］の番号ｍの順番に行われており、番号ｍを単位としたパイプライン化が可能である。
【００６６】
図５、図６に、上記の各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の処理のシーケンスを示す。なお、図６は、図５の６０の部分の処理を示している。また、６１は分散処理ノード１［Ｎ］におけるノード間集計処理を示している。同様に、図６の７０，７１，７２は分散処理ノード１［α−１］，１［α］、１［α＋１］（α＝３，・・・，Ｎ−２）におけるノード間集計処理を示している。
【００６７】
本実施例では、図５、図６に示すように、集約通信処理とノード間集計処理と分配通信処理とを、並行してほぼ同時に（パイプライン処理で）行うことが可能であり、各通信や各処理が終了するまで、次の処理を開始できなかった従来技術と比較したとき、処理時間の大幅な短縮が可能となる。
【００６８】
したがって、例えば、集約通信処理とノード間集計処理と分配通信処理のそれぞれで時間Ｔを要する場合、従来技術では、全データを単位として各処理を順番に行っていたため、これらの全ての処理を終えるのに３Ｔの時間を要したが、本実施例ではＴ＋αの時間で済む。ここで、前記αは、任意の分散処理ノード１［ｎ］が任意の番号ｍに対応する分散データＤ［ｍ，ｎ］を送信した時点から前記番号ｍに対応する集計データＲ［ｍ］を受信するまでの遅延時間である。本実施例では、番号ｍの単位で処理をパイプライン化しているため、時間αはＴと比較すると十分に小さい時間である。したがって、本実施例では、従来技術と比較して、集約通信処理とノード間集計処理と分配通信処理とに要する時間を、約１／３に短縮することが可能である。
【００６９】
［第２の実施例］
次に、本発明の第２の実施例について説明する。本実施例の深層学習用分散処理システムの構成例を図７に示す。図７の分散処理システムは、Ｋ個（Ｋは３以上の整数）のリングノード３［ｋ］（ｋ＝１，・・・，Ｋ）と、番号ｋのリングノード３［ｋ］（ｋ＝１，・・・，Ｋ）が次の番号ｋ+（ｋ+＝ｋ＋１、ただしｋ＝Ｋの場合はｋ+＝１）のリングノード３［ｋ+］と双方向に通信するための通信路４［ｋ］（ｋ＝１，・・・，Ｋ）と、分散処理制御部５と、制御用ネットワーク６とを備える。
【００７０】
分散処理制御部５は、制御用ネットワーク６を介して各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）と接続される。分散処理制御部５は、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）に対して、制御用ネットワーク６を介して、これら各リングノードの機能を、分散処理ノードあるいは中継ノードの何れかに指定する。ただし、この指定において、分散処理ノードに指定されたリングノードは、１個以上の通信路４と１個以上の中継ノードのうち少なくとも１つを介して、前後の番号の分散処理ノードと接続されるように、指定される必要がある。
【００７１】
図８（Ａ）、図８（Ｂ）、図８（Ｃ）に、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）が、分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ、本実施例ではＮは２以上Ｋ以下の整数）あるいは中継ノード３ｂの何れかに指定された状態の例を示す。
【００７２】
図８（Ａ）は、Ｋ＝Ｎ＝４の場合を示しており、全リングノード３［４］は、分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）の何れかに指定され、中継ノードに指定されたリングノードはない。分散処理ノード３ａ［ｊ］（ｊ＝１，・・・，Ｎ−１）と分散処理ノード３ａ［ｊ＋１］に各々指定されたリングノードは、１個の通信路４のみを介して接続される。
【００７３】
図８（Ｂ）は、Ｋ＞Ｎ＝４の場合を示しており、中継ノード３ｂに指定されたリングノード３の個数は（Ｋ−Ｎ）である（ここではＫ＝７）。ただし、図８（Ａ）と同様に、分散処理ノード３ａ［ｊ］（ｊ＝１，・・・，Ｎ−１）と分散処理ノード３ａ［ｊ＋１］に各々指定されたリングノードは、１個の通信路４のみを介して接続され、中継ノード３ｂを介さない。中継ノード３ｂは、分散処理ノード３ａ［１］と分散処理ノード３ａ［Ｎ］との間にあるリングノードにのみ指定される。
【００７４】
図８（Ｃ）は、Ｋ＞Ｎ＝４の場合を示しており、図８（Ｂ）と同じく、中継ノードに指定されたリングノード３の個数は（Ｋ−Ｎ）である（ここではＫ＝１１）。ただし、分散処理ノード３ａ［ｚ］（ｚは１以上Ｎ−１以下の整数）と分散処理ノード３ａ［ｚ＋１］に各々指定されたリングノード３は、１個以上の通信路４および１個以上の中継ノード３ｂを介して接続されている点が、図８（Ｂ）との差異である。
【００７５】
図９は、各リングノード３を分散処理ノード３ａ［ｎ］と中継ノード３ｂの何れかに指定することによって、第１の実施例に示した分散処理システムと等価なシステムを構成した例である。図１０は分散処理ノード３ａ［ｎ］の構成例を示すブロック図であり、図２と同一の構成には同一の符号を付してある。各分散処理ノード３ａ［ｎ］は、サンプル入力部１０と、勾配計算処理部１１と、ノード内集計処理部１２と、集計データ送信部１３ａと、受信部１４ａと、集計データ生成部１５と、重み更新処理部１６と、ニューラルネットワーク１７と、分散処理制御部５からの指定を受けて自ノードを分散処理ノードあるいは中継ノードとして機能設定する機能設定部１８とを備えている。なお、機能設定部１８は、自分散処理ノードの前後の番号の分散処理ノード３ａのアドレスを含む、全ての分散処理ノード３ａのアドレスを分散処理制御部５から受け取る。
【００７６】
図１１は、図９の深層学習用分散処理システムの動作を説明する図、図１２は各分散処理ノード３ａ［ｎ］の集約通信処理とノード間集計処理と重み更新処理を説明するフローチャートである。各分散処理ノード３ａ［ｎ］のサンプルデータ入力処理と勾配計算処理とノード内集計処理は第１の実施例と同様である。
【００７７】
１番目の分散処理ノード３ａ［１］として機能するリングノード３［ｈ］のノード内集計処理部１２は、第１の実施例と同様に分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を生成する。
【００７８】
そして、分散処理ノード３ａ［１］の集計データ送信部１３ａは、自ノードで生成されたＭ個の分散データＤ［ｍ，１］を、中間集計データＲ*［ｍ，１］として、次の番号のリングノード３［ｈ+］（ｈ+＝ｈ＋１、ただしｈ＝Ｋの場合はｈ+＝１）に通信路４［ｈ］を介して送信する（図１２ステップＳ２０３，Ｓ２０４）。すなわち、集計データ送信部１３ａは、次の番号の分散処理ノード３ａ［２］に向けて中間集計データＲ*［ｍ，１］を送信する。
【００７９】
中継ノード３ｂとして機能するリングノード３［ｔ］は、前の番号ｔ-（ｔ-＝ｔ−１、ただしｔ＝１の場合はｔ-＝Ｋ）のリングノード３［ｔ-］から通信路４［ｔ-］を介して受信した中間集計データＲ*を、後の番号ｔ+（ｔ+＝ｔ＋１、ただしｔ＝Ｋの場合はｔ+＝１）のリングノード３［ｔ+］に通信路４［ｔ］を介して転送する。中継ノード３ｂとして機能するリングノード３［ｕ］もリングノード３［ｔ］と同様である。
【００８０】
１番目と最終とを除く中間の分散処理ノード３ａ［ｉ］（ｉ＝２，・・・，Ｎ−１）として機能するリングノード３［ｚ］のノード内集計処理部１２は、第１の実施例と同様に分散データＤ［ｍ，ｉ］（ｍ＝１，・・・，Ｍ）を生成する。
中間の分散処理ノード３ａ［ｉ］の受信部１４ａは、前の番号ｚ-（ｚ-＝ｚ−１、ただしｚ＝１の場合はｚ-＝Ｋ）のリングノード３［ｚ-］から通信路４［ｚ-］を介して中間集計データＲ*［ｍ，ｉ−１］を受信する（図１２ステップＳ２０５，Ｓ２０６）。
【００８１】
中間の分散処理ノード３ａ［ｉ］の集計データ生成部１５は、受信した中間集計データＲ*［ｍ，ｉ−１］と自ノードで生成された分散データＤ［ｍ，ｉ］との和を、対応する重みｗ［ｍ］毎に求めることにより、中間集計データＲ*［ｍ，ｉ］を生成する（図１２ステップＳ２０７）。
【００８２】
そして、中間の分散処理ノード３ａ［ｉ］の集計データ送信部１３ａは、自ノードで生成された中間集計データＲ*［ｍ，ｉ］を、次の番号ｚ+（ｚ+＝ｚ＋１、ただしｚ＝Ｋの場合はｚ+＝１）のリングノード３［ｚ+］に通信路４［ｚ］を介して送信する（図１２ステップＳ２０８）。すなわち、集計データ送信部１３ａは、次の番号の分散処理ノード３ａ［ｉ＋１］に向けて中間集計データＲ*［ｍ，ｉ］を送信する。
【００８３】
最終の分散処理ノード３ａ［Ｎ］として機能するリングノード３［ｅ］のノード内集計処理部１２は、第１の実施例と同様に分散データＤ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を生成する。
最終の分散処理ノード３ａ［Ｎ］の受信部１４ａは、前の番号ｅ-（ｅ-＝ｅ−１、ただしｅ＝１の場合はｅ-＝Ｋ）のリングノード３［ｅ-］から通信路４［ｅ-］を介して中間集計データＲ*［ｍ，Ｎ−１］を受信する（図１２ステップＳ２０９，Ｓ２１０）。
【００８４】
最終の分散処理ノード３ａ［Ｎ］の集計データ生成部１５は、受信した中間集計データＲ*［ｍ，Ｎ−１］と自ノードで生成された分散データＤ［ｍ，Ｎ］との和を、対応する重みｗ［ｍ］毎に求めることにより、集計データＲ［ｍ］を生成する（図１２ステップＳ２１１）。
【００８５】
そして、最終の分散処理ノード３ａ［Ｎ］の集計データ送信部１３ａは、自ノードで生成された集計データＲ［ｍ］を、前の番号ｅ-のリングノード３［ｅ-］に送信する（図１２ステップＳ２１２）。すなわち、集計データ送信部１３ａは、前の番号の分散処理ノード３ａ［Ｎ−１］に向けて集計データＲ［ｍ］を送信する。最終の分散処理ノード３ａ［Ｎ］の重み更新処理部１６の動作（図１２ステップＳ２１３）は、第１の実施例と同様である。
【００８６】
中継ノード３ｂとして機能するリングノード３［ｔ］は、後の番号ｔ+（ｔ+＝ｔ＋１、ただしｔ＝Ｋの場合はｔ+＝１）のリングノード３［ｔ+］から、通信路４［ｔ+］を介して受信した集計データＲ［ｍ］を、前の番号ｔ-（ｔ-＝ｔ−１、ただしｔ＝１の場合はｔ-＝＝Ｋ）のリングノード３［ｔ-］に通信路４［ｔ-］を介して転送する。中継ノード３ｂとして機能するリングノード３［ｕ］もリングノード３［ｔ］と同様である。
【００８７】
中間の分散処理ノード３ａ［ｉ］（ｉ＝２，・・・，Ｎ−１）として機能するリングノード３［ｚ］の受信部１４ａは、後の番号ｚ+（ｚ+＝ｚ＋１、ただしｚ＝Ｋの場合はｚ+＝１）のリングノード３［ｚ+］から通信路４［ｚ+］を介して集計データＲ［ｍ］を受信する（図１２ステップＳ２１４，Ｓ２１５）。
【００８８】
中間の分散処理ノード３ａ［ｉ］の集計データ送信部１３ａは、前の番号ｚ-（ｚ-＝ｚ−１、ただしｚ＝１の場合はｚ-＝Ｋ）のリングノード３［ｚ-］に通信路４［ｚ-］を介して集計データＲ［ｍ］を送信する（図１２ステップＳ２１６）。すなわち、集計データ送信部１３ａは、前の番号の分散処理ノード３ａ［ｉ−１］に向けて集計データＲ［ｍ］を送信する。中間の分散処理ノード３ａ［ｉ］の重み更新処理部１６の動作（図１２ステップＳ２１７）は、第１の実施例と同様である。
【００８９】
１番目の分散処理ノード３ａ［１］として機能するリングノード３［ｈ］の受信部１４ａは、後の番号ｈ+（ｈ+＝ｈ＋１、ただしｈ＝Ｋの場合はｈ+＝１）のリングノード３［ｈ+］から通信路４［ｈ+］を介して集計データＲ［ｍ］を受信する（図１２ステップＳ２１８，Ｓ２１９）。１番目の分散処理ノード３ａ［１］の重み更新処理部１６の動作（図１２ステップＳ２２０）は、第１の実施例と同様である。
【００９０】
なお、中継ノード３ｂとして機能するリングノード３［ｖ］は、分散処理ノード３ａ［１］と分散処理ノード３ａ［ｎ］との間に位置するため、本実施例では、中間集計データや集計データの転送は行わない。
【００９１】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）は、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード３ａ［ｎ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、ニューラルネットワーク１７の推論精度を向上させる。
【００９２】
上記の説明では、Ｍ個の分散データＤ［ｍ，ｎ］を１度に処理する動作で説明しているが、実際には第１の実施例と同様にＭ個の分散データＤ［ｍ，ｎ］を複数のパケットに振り分けてパイプライン処理を行う。
各分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）の処理における手順（重みｗ［ｍ］の番号ｍの順番にパイプライン処理を行う動作）を、以下に説明する。
【００９３】
１番目の分散処理ノード３ａ［１］の集計データ送信部１３ａは、自ノードで生成されたＭ個の分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を、中間集計データＲ*［ｍ，１］として、次の番号のリングノード３［ｈ+］に送信する集約通信を行う（図１２ステップＳ２０３，Ｓ２０４）。
【００９４】
このとき、分散処理ノード３ａ［１］の集計データ送信部１３ａは、保持するＭ個の中間集計データＲ*［ｍ，１］（＝Ｄ［ｍ，１］）を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の集約通信パケットに振り分けて、全ての集約通信パケットを送信し終えるまで、Ｐ個の集約通信パケットを順番に次の番号のリングノード３［ｈ+］に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する集約通信パケットＳＰ［ｐ，１］には、Ｌ個の中間集計データＲ*［ｒ，１］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００９５】
なお、ＭがＬで割り切れない条件では、Ｐ番目の集約通信パケットＳＰ［Ｐ，１］には、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，１］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
Ｐ番目の集約通信パケットＳＰ［Ｐ，１］については、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，１］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００９６】
１番目と最終とを除く中間の分散処理ノード３ａ［ｉ］（ｉ＝２，・・・，Ｎ−１）の受信部１４ａは、分散処理ノード３ａ［ｉ−１］が送信した集約通信パケットＳＰ［ｐ，ｉ−１］（ｐ＝１，・・・，Ｐ）を受信する（図１２ステップＳ２０５，Ｓ２０６）。
【００９７】
中間の分散処理ノード３ａ［ｉ］の受信部１４ａは、受信した集約通信パケットＳＰ［ｐ，ｉ−１］から、送信元の分散処理ノード３ａ［ｉ−１］が生成したＬ個の中間集計データＲ*［ｒ，ｉ−１］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）を取得する。分散処理ノード３ａ［ｉ−１］からＰ個の集約通信パケットＳＰ［ｐ，ｉ−１］（ｐ＝１，・・・，Ｐ）が順番に送信されることにより、中間の分散処理ノード３ａ［ｉ］の受信部１４ａは、最終的にＭ個の中間集計データＲ*［ｍ，ｉ−１］を取得することができる。
【００９８】
そして、中間の分散処理ノード３ａ［ｉ］の集計データ生成部１５は、取得した中間集計データＲ*［ｍ，ｉ−１］と自ノードで生成された分散データＤ［ｍ，ｉ］との和を、対応する重みｗ［ｍ］毎に求めることにより（式（３））、中間集計データＲ*［ｍ，ｉ］を生成する（図１２ステップＳ２０７）。
【００９９】
次に、中間の分散処理ノード３ａ［ｉ］の集計データ送信部１３ａは、自ノードで生成されたＭ個の中間集計データＲ*［ｍ，ｉ］（ｍ＝１，・・・，Ｍ）を、次の番号ｚ+のリングノード３［ｚ+］に送信する集約通信を行う（図１２ステップＳ２０８）。
【０１００】
このとき、分散処理ノード３ａ［ｉ］の集計データ送信部１３ａは、生成されたＭ個の中間集計データＲ*［ｍ，ｉ］を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の集約通信パケットに振り分けて、全ての集約通信パケットを送信し終えるまで、Ｐ個の集約通信パケットを順番に次の番の分散処理ノード３ａ［ｉ＋１］に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する集約通信パケットＳＰ［ｐ，ｉ］には、Ｌ個の中間集計データＲ*［ｒ，ｉ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【０１０１】
なお、ＭがＬで割り切れない条件では、Ｐ番目の集約通信パケットＳＰ［Ｐ，ｉ］には、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，ｉ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
Ｐ番目の集約通信パケットＳＰ［Ｐ，ｉ］については、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲ*［ｒ，ｉ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【０１０２】
最終の分散処理ノード３ａ［Ｎ］の受信部１４ａは、分散処理ノード３ａ［Ｎ−１］が送信した集約通信パケットＳＰ［ｐ，Ｎ−１］（ｐ＝１，・・・，Ｐ）を受信する（図１２ステップＳ２０９，Ｓ２１０）。
【０１０３】
最終の分散処理ノード３ａ［Ｎ］の受信部１４ａは、受信した集約通信パケットＳＰ［ｐ，Ｎ−１］から、送信元の分散処理ノード３ａ［Ｎ−１］が生成したＬ個の中間集計データＲ*［ｒ，Ｎ−１］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）を取得する。分散処理ノード３ａ［Ｎ−１］からＰ個の集約通信パケットＳＰ［ｐ，Ｎ−１］（ｐ＝１，・・・，Ｐ）が順番に送信されることにより、最終の分散処理ノード３ａ［Ｎ］の受信部１４ａは、最終的にＭ個の中間集計データＲ*［ｍ，Ｎ−１］を取得することができる。
【０１０４】
そして、最終の分散処理ノード３ａ［Ｎ］の集計データ生成部１５は、取得した中間集計データＲ*［ｍ，Ｎ−１］と自ノードで生成された分散データＤ［ｍ，Ｎ］との和を、対応する重みｗ［ｍ］毎に求めることにより（式（４））、集計データＲ［ｍ］を生成する（図１２ステップＳ２１１）。
【０１０５】
次に、最終の分散処理ノード３ａ［Ｎ］の集計データ送信部１３ａは、自ノードで生成された集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化して、このパケットを、前の番号ｅ-のリングノード３［ｅ-］に送信する分配通信を行う（図１２ステップＳ２１２）。
【０１０６】
このとき、分散処理ノード３ａ［Ｎ］の集計データ送信部１３ａは、生成されたＭ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の分配通信パケットに振り分けて、全ての分配通信パケットを送信し終えるまで、Ｐ個の分配通信パケットを順番に、前の番号ｅ-のリングノード３［ｅ-］に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する分配通信パケットＤＰ［ｐ，Ｎ］には、Ｌ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【０１０７】
なお、ＭがＬで割り切れない条件では、Ｐ番目の分配通信パケットＤＰ［ｐ，Ｎ］には、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
Ｐ番目の分配通信パケットＤＰ［ｐ，Ｎ］については、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【０１０８】
次に、中間の分散処理ノード３ａ［ｉ］（ｉ＝２，・・・，Ｎ−１）の受信部１４ａは、分配通信パケットＤＰ［ｐ，ｉ−１］を受信する（図１２ステップＳ２１４，Ｓ２１５）。
【０１０９】
中間の分散処理ノード３ａ［ｉ］の受信部１４ａは、受信した分配通信パケットＤＰ［ｐ，ｉ−１］から、分散処理ノード３ａ［ｉ−１］が生成したＬ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）を取得する。分散処理ノード３ａ［ｉ−１］からＰ個の分配通信パケットＤＰ［ｐ，ｉ−１］（ｐ＝１，・・・，Ｐ）が順番に送信されることにより、中間の分散処理ノード３ａ［ｉ］の受信部１４ａは、最終的にＭ個の集計データＲ［ｍ］を取得することができる。
【０１１０】
次に、中間の分散処理ノード３ａ［ｉ］の集計データ送信部１３ａは、取得した集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、前の番号ｚ-のリングノード３［ｚ-］に送信する分配通信を行う（図１２ステップＳ２１６）。
【０１１１】
このとき、分散処理ノード３ａ［ｉ］の集計データ送信部１３ａは、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の分配通信パケットに振り分けて、全ての分配通信パケットを送信し終えるまで、Ｐ個の分配通信パケットを順番に、前の番号ｚ-のリングノード３［ｚ-］に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する分配通信パケットＤＰ［ｐ，ｉ］には、Ｌ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【０１１２】
なお、ＭがＬで割り切れない条件では、Ｐ番目の分配通信パケットＤＰ［ｐ，ｉ］には、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
Ｐ番目の分配通信パケットＤＰ［ｐ，ｉ］については、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【０１１３】
１番目の分散処理ノード３ａ［１］の受信部１４ａは、後の番号ｈ+のリングノード３［ｈ+］から分配通信パケットＤＰ［ｐ，２］を受信する（図１２ステップＳ２１８，Ｓ２１９）。
【０１１４】
１番目の分散処理ノード３ａ［１］の受信部１４ａは、受信した分配通信パケットＤＰ［ｐ，２］から、分散処理ノード３ａ［２］が生成したＬ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）を取得する。分散処理ノード３ａ［２］からＰ個の分配通信パケットＤＰ［ｐ，２］（ｐ＝１，・・・，Ｐ）が順番に送信されることにより、中間の分散処理ノード３ａ［ｉ］の受信部１４ａは、最終的にＭ個の集計データＲ［ｍ］を取得することができる。
【０１１５】
図１３、図１４に、上記の各分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）の処理のシーケンスを示す。なお、図１３の６０の部分の処理は、図６と同様なので、記載は省略する。６１は分散処理ノード３ａ［Ｎ］におけるノード間集計処理を示している。図１４は、図１３の６２の部分の処理、すなわち分散処理ノード３ａ［β＋１］，３ａ［β］、３ａ［β−１］（β＝Ｎ−２，・・・，３）の分配通信処理を示している。
【０１１６】
このように、分散処理ノード３ａ［ｊ］（ｊ＝１，・・・，Ｎ−１）から分散処理ノード３ａ［ｊ＋１］への集約通信（中間集計データＲ*［ｍ，ｊ］を分散処理ノード１［ｊ＋１］に送信する処理）、中間の分散処理ノード３ａ［ｉ］（ｉ＝２，・・・，Ｎ−１）が行うノード間集計処理（受信した中間集計データＲ*［ｍ，ｉ−１］と自ノードで生成した分散データＤ［ｍ，ｉ］に基づいて、中間集計データＲ*［ｍ，ｉ］を計算する処理）、分散処理ノード３ａ［Ｎ］が行うノード間集計処理（受信した中間集計データＲ*［ｍ，Ｎ−１］と自ノードで生成した分散データＤ［ｍ，Ｎ］に基づいて、集計データＲ［ｍ］を計算する処理）、分散処理ノード３ａ［ｊ＋１］から分散処理ノード３ａ［ｊ］（ｊ＝１，・・・，Ｎ−１）への分配通信（分散処理ノード３ａ［Ｎ］が生成した集計データＲ［ｍ］を各分散処理ノード３ａ［ｊ］に分配する処理）、の全ては、前記の重みｗ［ｍ］の番号ｍの順番に行われており、番号ｍを単位としたパイプライン化が可能である。
【０１１７】
本実施例では、第１の実施例で示した深層学習用分散処理システムと同様に、集約通信処理とノード間集計処理と分配通信処理とを、並行してほぼ同時に（パイプライン処理で）行うことが可能であり、各通信や各処理が終了するまで、次の処理を開始できなかった従来技術と比較したとき、処理時間の大幅な短縮が可能となる。
【０１１８】
特に、リングノード間を接続する双方向の通信路４のビットレートが同じ（分散処理ノード３ａ［ｎ］から分散処理ノード３ａ［ｎ＋１］への集約通信のビットレートと分散処理ノード３ａ［ｎ＋１］から分散処理ノード３ａ［ｎ］への分配通信のビットレートが同一となる）一般的な通信路を用い、同じビットレートでノード間集計処理が可能な場合は、通信路の帯域を最も効率的に使用した処理が可能であり、処理時間の短縮に寄与する。
【０１１９】
また、リングノード数Ｋ以下の個数を有する、第１の実施例で示した深層学習用分散処理システムを、本システム上に構築することが可能である。このため、物理的なシステムの構成を変更することなく（リングノード数を増減させることなく）、学習の規模（サンプルデータ数や計算量）に応じて適切なノード数でシステムを稼働させることが可能となる（分散処理ノード３ａに割り当てられないリングノードは中継ノード３ｂとして動作を停止させておくことが可能である）ため、無駄な電力の消費を抑制することが可能となる。
【０１２０】
なお、以上の説明から明らかなとおり、図１０の構成は中継ノード３ｂとしても機能し得る。リングノード３が中継ノード３ｂとして機能する場合、受信部１４ａで受信したデータを集計データ送信部１３ａから送信することになる。
【０１２１】
［第３の実施例］
次に、本発明の第３の実施例について説明する。本実施例では、第２の実施例の深層学習用分散処理システムに関して、分散処理ノード間の通信に障害が発生した場合の前記障害を回避するための分散処理制御部５の動作（各リングノードへの分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）の再指定）について説明する。
【０１２２】
本実施例の分散処理システムは、第２の実施例における図７、図９の分散処理システムと同様なので、図７、図９の符号を用いて説明する。すなわち、本実施例の分散処理システムは、Ｋ個（Ｋは３以上の整数）のリングノード３［ｋ］（ｋ＝１，・・・，Ｋ）と、番号ｋのリングノード３［ｋ］（ｋ＝１，・・・，Ｋ）が次の番号ｋ+（ｋ+＝ｋ＋１、ただしｋ＝Ｋの場合はｋ+＝１）のリングノード３［ｋ+］と双方向に通信するための通信路４［ｋ］（ｋ＝１，・・・，Ｋ）と、分散処理制御部５と、制御用ネットワーク６とを備える。
【０１２３】
分散処理制御部５は、制御用ネットワーク６を介して各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）と接続される。分散処理制御部５は、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）に対して、制御用ネットワーク６を介して、これら各リングノードの機能を、分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）あるいは中継ノード３ｂの何れかに指定する。ただし、この指定において、分散処理ノード３ａ［ｊ］（ｊ＝１，・・・，Ｎ−１）に指定されたリングノード３は、１個以上の通信路４と１個以上の中継ノード３ｂのうち少なくとも１つを介して、前後の番号の分散処理ノード３ａ［ｊ＋１］と接続されるように、指定される必要がある。
【０１２４】
図１５は本実施例の分散処理ノード３ａ［ｎ］の構成例を示すブロック図である。各分散処理ノード３ａ［ｎ］は、サンプル入力部１０と、勾配計算処理部１１と、ノード内集計処理部１２と、集計データ送信部１３ｂと、受信部１４ａと、集計データ生成部１５と、重み更新処理部１６と、ニューラルネットワーク１７と、機能設定部１８とを備えている。
【０１２５】
図１６は分散処理制御部５の構成例を示すブロック図である。分散処理制御部５は、第１の実施例および本実施例のように各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）を分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）あるいは中継ノード３ｂの何れかに指定する機能指定部５０と、分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）からの障害検知通知を受信する障害検知通知受信部５１と、障害検知通知を受信したときに、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）の機能指定を変更する機能指定変更部５２とを備えている。
【０１２６】
図１７、図１８に、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）が、分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）あるいは中継ノード３ｂの何れかに指定された状態を示す。なお、図１７、図１８では中継ノード３ｂおよび制御用ネットワーク６の記載を省略している。また、図１７、図１８における８０は集約通信の流れを示し、８１は分配通信の流れを示している。各分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）や中継ノード３ｂの機能は、第２の実施例において説明したものと同じである。
【０１２７】
分散処理ノード３ａ［ｆ］（ｆ＝１，・・・，Ｎ−１）として機能するリングノード３は、第２の実施例と同様に分散データＤ［ｍ，ｆ］を生成する。ｆ＝１の場合、すなわち１番目の分散処理ノード３ａ［１］の場合は、自ノードで生成された分散データＤ［ｍ，１］を中間集計データＲ*［ｍ，１］として、次の番号の分散処理ノード３ａ［２］に向けて送信する。ｆ＞１の場合、すなわち中間の分散処理ノード３ａ［ｆ］の場合は、自ノードで生成された分散データＤ［ｍ，ｆ］と分散処理ノード３ａ［ｆ−１］から受信した中間集計データＲ*［ｍ，ｆ−１］とから中間集計データＲ*［ｍ，ｆ］を生成して、次の番号の分散処理ノード３ａ［ｆ＋１］に向けて送信する。
【０１２８】
分散処理ノード３ａ［ｆ＋１］（ｆ＝２，・・・，Ｎ−１）として機能するリングノード３は、分散データＤ［ｍ，ｆ＋１］を生成する。ｆ＜Ｎ−１の場合、分散処理ノード３ａ［ｆ＋１］は、自ノードで生成された分散データＤ［ｍ，ｆ＋１］と分散処理ノード３ａ［ｆ］から受信した中間集計データＲ*［ｍ，ｆ］とから中間集計データＲ*［ｍ，ｆ＋１］を生成して、次の番号の分散処理ノード３ａ［ｆ＋２］に向けて送信する。
【０１２９】
ｆ＝Ｎ−１の場合、分散処理ノード３ａ［Ｎ］は、自ノードで生成された分散データＤ［ｍ，Ｎ］と分散処理ノード３ａ［Ｎ−１］から受信した中間集計データＲ*［ｍ，Ｎ−１］とから集計データＲ［ｍ］を生成して、前の番号の分散処理ノード３ａ［Ｎ−１］に向けて送信する。この分配通信により、全ての分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）は、同一の集計データＲ［ｍ］を取得することができる。
【０１３０】
その後、集計データＲ［ｍ］を取得した各分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）は、集計データＲ［ｍ］に基づいて、自ノード内のニューラルネットワーク１７の重みｗ［ｍ］を更新する重み更新処理を行う。
【０１３１】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）は、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード３ａ［ｎ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、ニューラルネットワーク１７の推論精度を向上させる。
【０１３２】
分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）の集計データ送信部１３ｂは、隣接する分散処理ノード３ａ（前の番号または次の番号の分散処理ノード３ａ）として機能するリングノード３との間で、中間集計データＲ*あるいは集計データＲを転送できない障害を検知するための障害検知機能を有する。また、集計データ送信部１３ｂは、障害を検知したときに、制御用ネットワーク６を介して分散処理制御部５に、障害検知を通知する機能を有する。
【０１３３】
分散処理制御部５の障害検知通知受信部５１は、分散処理ノード３ａ［ｎ］の集計データ送信部１３ｂから障害検知の通知を受信する。分散処理制御部５の機能指定変更部５２は、障害検知の通知を受信した場合、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）の機能指定の変更（分散処理ノード３ａ［ｎ］の指定の変更）によって、障害を回避させる。
【０１３４】
各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）の機能指定の変更後、分散処理システムは、上記の障害によって中断された集約通信処理とノード間集計処理と分配通信処理の再処理を行い、その後の集約通信処理とノード間集計処理と分配通信処理を継続する。
【０１３５】
図１７は、分散処理制御部５により、各リングノード３が分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）あるいは中継ノード３ｂの何れかに指定された状態を示しており、第１の実施例に示した分散処理システムと等価な系が構築されている。図１７では、障害が発生しておらず、正常な処理が継続的に行われる。
【０１３６】
ここで、分散処理ノード３ａ［ｆ］（ｆ＝１，・・・，Ｎ−１）から分散処理ノード３ａ［ｆ＋１］に中間集計データＲ*［ｍ，ｆ］を転送できない、または分散処理ノード３ａ［ｆ＋１］から分散処理ノード３ａ［ｆ］に集計データＲ［ｍ］を転送できない障害を検知した場合、分散処理ノード３ａ［ｆ］または分散処理ノード３ａ［ｆ＋１］のうち少なくとも一方の集計データ送信部１３ｂが、分散処理制御部５に障害検知を通知する。
【０１３７】
なお、上記の障害は、完全に転送ができない障害のみならず、転送中のデータに対する誤り率が高いために再送等の処理が頻発し、正常なシステム運用が困難となるような場合（誤り率が閾値を超過するような場合）を含むことができる。
【０１３８】
また、分散処理ノード間でのデータ転送ができない障害を検知するのではなく、通信路を介して接続された任意のリングノード間において信号断や誤り率劣化を検出し、前記のリングノード間の通信路を介して通信する分散処理ノード間での障害として扱うことも可能である。すなわち、リングノード３が中継ノード３ｂとして機能する場合に、この中継ノード３ｂの集計データ送信部１３ｂは、中間集計データＲ*または集計データＲを転送すべき方向に存在する隣接するリングノード３に中間集計データＲ*または集計データＲを転送できないとき（または誤り率が閾値を超過したとき）に、分散処理制御部５に障害検知を通知することができる。
【０１３９】
障害検知の通知を受けた分散処理制御部５の機能指定変更部５２は、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）の機能指定を変更することで、障害が発生している分散処理ノード３ａ［ｆ］と分散処理ノード３ａ［ｆ＋１］との間の通信路４および中継ノード３ｂを使用しない、分散処理ノード３ａ［ｎ’］（ｎ’＝１，・・・，Ｎ−１）から構成される系、すなわち障害を検知する前と等価な分散処理システムに変更する。この変更は、分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ）として機能していた各リングノード３を、分散処理ノード３ａ［ｎ’］（ｎ’＝ｎ−ｆ、ただしｎ−ｆ＜１の場合はｎ’＝ｎ−ｆ＋Ｎ）として機能させるものである。
【０１４０】
図１８は、障害を検知した後に、分散処理制御部５により、各リングノード３が分散処理ノード３ａ［ｎ’］（ｎ’＝１．．．Ｎ）あるいは中継ノード３ｂの何れかに指定された状態を示しており、障害を検知する前の系と同じく、第１の実施例に示した分散処理システムと等価な系となっている。
【０１４１】
障害を検知する前に分散処理ノード３ａ［ｆ］であったリングノード３は、分散処理ノード３ａ［Ｎ］に変更される。また、障害を検知する前に分散処理ノード３ａ［ｆ＋１］であったリングノード３は、分散処理ノード３ａ［１］に変更される。また、変更後の分散処理ノード３ａ［ｎ’］（ｎ＝１，・・・，Ｎ−１）に指定されたリングノード３は、１個以上の通信路４を介して、あるいは１個以上の通信路４と１個以上の中継ノード３ｂとを介して、分散処理ノード３ａ［ｎ’＋１］と接続されるように変更される。
【０１４２】
このように、本実施例では、分散処理ノード３ａと隣接する分散処理ノード３ａとの間で中間集計データＲ*や集計データＲを転送できない障害が発生した場合に、この障害を回避しつつ、障害前と等価な分散処理システムに変更することができるため、障害に対してロバストなシステムを提供することができる。
【０１４３】
［第４の実施例］
次に、本発明の第４の実施例について説明する。第２の実施例、第３の実施例、および本実施例の深層学習用分散処理システムは、リングシステムであり、Ｋ個（Ｋは３以上の整数）のリングノード３［ｋ］（ｋ＝１，・・・，Ｋ）と、番号ｋのリングノード３［ｋ］（ｋ＝１，・・・，Ｋ）が次の番号ｋ+（ｋ+＝ｋ＋１、ただしｋ＝Ｋの場合はｋ+＝１）のリングノード３［ｋ+］と双方向に通信するための通信路４［ｋ］（ｋ＝１，・・・，Ｋ）と、分散処理制御部５と、制御用ネットワーク６とを備える。分散処理制御部５は、制御用ネットワーク６を介して各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）と接続される。
【０１４４】
第２の実施例および第３の実施例では、第１の実施例に示した分散処理システムをリングシステム上に構築する例について説明した。本実施例は、異なる２つの分散処理システムを、１つのリングシステム上に構築する例について説明する。
【０１４５】
なお、３つ以上の分散処理システムを、１つのリングシステム上に構築することも可能であるが、リングノードに対する機能要件は同じであり、説明を簡単にするため、２つの分散処理システム（グループＡとグループＢ）を構築する場合について説明する。
【０１４６】
分散処理制御部５は、制御用ネットワーク６を介して、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）を、グループＡに属するＮａ個の分散処理ノード３ａＡ［γ］（γ＝１，・・・，Ｎａ）のうちの１つ、グループＢに属するＮｂ個の分散処理ノード３ａＢ［δ］（δ＝１，・・・，Ｎｂ）のうちの１つ、あるいは中継ノード３ｂの何れかに指定する。リングノード３のノード数Ｋは、リングシステムに同時に存在し得る各グループに属する分散処理ノードの個数の和以上である必要があり、本実施例では、Ｋ≧Ｎａ＋Ｎｂが必要要件となる（Ｎａ，Ｎｂはそれぞれ２以上の整数で、ＮａとＮｂの和はＫ以下）。
【０１４７】
また、グループＡに属する分散処理ノード３ａＡ［γ］（γ＝１，・・・，Ｎａ−１）に指定されたリングノード３は、１個以上の通信路４と１個以上の中継ノード３ｂと他グループ（グループＢ）の１個以上の分散処理ノード３ａＢ［δ］のうち少なくとも１つを介して、同じグループＡに属する前後の番号の分散処理ノード３ａ［γ＋１］と接続されるように、指定される必要がある。
【０１４８】
同様に、グループＢに属する分散処理ノード３ａＢ［δ］（δ＝１，・・・，Ｎｂ−１）に指定されたリングノード３は、１個以上の通信路４と１個以上の中継ノード３ｂと他グループ（グループＡ）の１個以上の分散処理ノード３ａＡ［γ］のうち少なくとも１つを介して、同じグループＢに属する前後の番号の分散処理ノード３ａ［δ＋１］と接続されるように、指定される必要がある。
【０１４９】
グループが３個以上となる場合も同様であり、各グループに属する分散処理ノード３ａは、１個以上の通信路４と１個以上の中継ノード３ｂと他グループの１個以上の分散処理ノード３ａのうち少なくとも１つを介して、同じグループに属する前後の番号の分散処理ノード３ａと接続されるように、指定される必要がある。
【０１５０】
図１９（Ａ）、図１９（Ｂ）に、各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）を、グループＡに属するＮａ個（ここではＮａ＝５）の分散処理ノード３ａＡ［γ］（γ＝１，・・・，Ｎａ）、グループＢに属するＮｂ個（ここではＮｂ＝６）の分散処理ノード３ａＢ［δ］（δ＝１，・・・，Ｎｂ）、あるいは中継ノード３ｂの何れかに指定した状態を示す。なお、図１９（Ａ）、図１９（Ｂ）では中継ノード３ｂと分散処理制御部５のおよび制御用ネットワーク６の記載を省略している。
【０１５１】
図１９（Ａ）は、同一グループに属する分散処理ノード間の経路と他のグループに属する分散処理ノード間の経路とが重なっている区間がない構成を示している。図１９（Ｂ）は、同一グループに属する分散処理ノード間の経路と他のグループに属する分散処理ノード間の経路とが重なっている区間がある構成を示している。どちらの構成についても、分散処理ノードとして機能する各リングノード３が後述する処理を行うことによって、各構成の２グループは、それぞれ、独立した第１の実施例の分散処理システムとして動作することができる。
【０１５２】
なお、中継ノード３ｂとして機能する各リングノード３については、第２の実施例において説明した処理と同じ処理を行えばよく、通信路４を介して接続された隣接するリングノード３から受け取った中間集計データＲ*または集計データＲを、これらデータを転送すべき方向に存在する隣接するリングノード３に転送すればよい。この転送処理は、中間集計データＲ*または集計データＲを送受信する分散処理ノードのグループに依存しない。
【０１５３】
図２０はグループＡに属する分散処理ノード３ａＡ［γ］の構成例を示すブロック図であり、図２、図１０と同一の構成には同一の符号を付してある。各分散処理ノード３ａＡ［γ］は、サンプル入力部１０と、勾配計算処理部１１と、ノード内集計処理部１２と、集計データ送信部１３ｃと、受信部１４ａと、集計データ生成部１５と、重み更新処理部１６と、ニューラルネットワーク１７と、機能設定部１８ａとを備えている。
【０１５４】
本実施例の機能設定部１８ａは、自分散処理ノードの前後の番号の分散処理ノード３ａのアドレスを含む、全ての分散処理ノード３ａのアドレスを分散処理制御部５から受け取ると共に、自分散処理ノードのグループ識別子を分散処理制御部５から受け取る。
グループＢに属する分散処理ノード３ａＢ［δ］の構成も、分散処理ノード３ａＡ［γ］と同様である。
【０１５５】
図２１は本実施例の分散処理制御部５の構成例を示すブロック図である。本実施例の分散処理制御部５は、機能指定部５０ａと、障害検知通知受信部５１と、機能指定変更部５２ａとを備えている。
【０１５６】
機能指定部５０ａは、第２、第３の実施例と同様に各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）を分散処理ノード３ａＡ［γ］，３ａＢ［δ］あるいは中継ノード３ｂの何れかに指定する際に、各分散処理ノード３ａＡ［γ］，３ａＢ［δ］に対して全ての分散処理ノード３ａＡ［γ］，３ａＢ［δ］のアドレスを通知すると共に、グループ識別子を通知する。
【０１５７】
機能指定変更部５２は、第３の実施例と同様に各リングノード３［ｋ］（ｋ＝１，・・・，Ｋ）の機能指定を変更する際に、変更後の各分散処理ノード３ａＡ［γ］，３ａＢ［δ］に対して変更後の全ての分散処理ノード３ａＡ［γ］，３ａＢ［δ］のアドレスを通知すると共に、変更後のグループ識別子を通知する。
【０１５８】
グループＡまたはＢに属する１番目の分散処理ノード３ａＡ［１］または３ａＢ［１］として機能するリングノード３［ｈ］のノード内集計処理部１２は、第１〜第３の実施例と同様に分散データＤ［ｍ，ｆ］を生成する。
【０１５９】
そして、分散処理ノード３ａＡ［１］または３ａＢ［１］の集計データ送信部１３ｃは、自ノードで生成された分散データＤ［ｍ，１］を中間集計データＲ*［ｍ，１］として、次の番号のリングノード３［ｈ+］（ｈ+＝ｈ＋１、ただしｈ＝Ｋの場合はｈ+＝１）に通信路４［ｈ］を介して送信する。すなわち、集計データ送信部１３ｃは、同じグループに属する次の番号の分散処理ノード３ａＡ［２］または３ａＢ［２］に向けて中間集計データＲ*［ｍ，１］を送信する。
【０１６０】
中継ノード３ｂとして機能するリングノード３［ｔ］は、前の番号ｔ-（ｔ-＝ｔ−１、ただしｔ＝１の場合はｔ-＝Ｋ）のリングノード３［ｔ-］から通信路４［ｔ-］を介して受信した中間集計データＲ*を、後の番号ｔ+（ｔ+＝ｔ＋１、ただしｔ＝Ｋの場合はｔ+＝１）のリングノード３［ｔ+］に通信路４［ｔ］を介して転送する。中継ノード３ｂとして機能するリングノード３［ｕ］もリングノード３［ｔ］と同様である。
【０１６１】
グループＡまたはＢに属する中間の分散処理ノード３ａＡ［ｉ］または３ａＢ［ｉ］（ｉ＝２，・・・，Ｎ−１）として機能するリングノード３［ｚ］のノード内集計処理部１２は、第１〜第３の実施例と同様に分散データＤ［ｍ，ｉ］（ｍ＝１，・・・，Ｍ）を生成する。
【０１６２】
中間の分散処理ノード３ａＡ［ｉ］または３ａＢ［ｉ］の受信部１４ａは、前の番号ｚ-（ｚ-＝ｚ−１、ただしｚ＝１の場合はｚ-＝Ｋ）のリングノード３［ｚ-］から通信路４［ｚ-］を介して、同じグループに属する分散処理ノード３ａＡ［ｉ−１］または３ａＢ［ｉ−１］が生成・送信した中間集計データＲ*［ｍ，ｉ−１］を受信する。
【０１６３】
中間の分散処理ノード３ａＡ［ｉ］または３ａＢ［ｉ］の集計データ生成部１５は、受信した中間集計データＲ*［ｍ，ｉ−１］と自ノードで生成された分散データＤ［ｍ，ｉ］との和を、対応する重みｗ［ｍ］毎に求めることにより、中間集計データＲ*［ｍ，ｉ］を生成する。
【０１６４】
そして、中間の分散処理ノード３ａＡ［ｉ］または３ａＢ［ｉ］の集計データ送信部１３ｃは、自ノードで生成された中間集計データＲ*［ｍ，ｉ］を、次の番号ｚ+（ｚ+＝ｚ＋１、ただしｚ＝Ｋの場合はｚ+＝１）のリングノード３［ｚ+］に通信路４［ｚ］を介して送信する。すなわち、集計データ送信部１３ｃは、同じグループに属する次の番号の分散処理ノード３ａＡ［ｉ＋１］または３ａＢ［ｉ＋１］に向けて中間集計データＲ*［ｍ，ｉ］を送信する。
【０１６５】
グループＡまたはＢに属する最終の分散処理ノード３ａＡ［Ｎ］または３ａＢ［Ｎ］として機能するリングノード３［ｅ］のノード内集計処理部１２は、第１〜第３の実施例と同様に分散データＤ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を生成する。
【０１６６】
最終の分散処理ノード３ａＡ［Ｎ］または３ａＢ［Ｎ］の受信部１４ａは、前の番号ｅ-（ｅ-＝ｅ−１、ただしｅ＝１の場合はｅ-＝Ｋ）のリングノード３［ｅ-］から通信路４［ｅ-］を介して、同じグループに属する分散処理ノード３ａＡ［Ｎ−１］または３ａＢ［Ｎ−１］が生成・送信した中間集計データＲ*［ｍ，Ｎ−１］を受信する。
【０１６７】
最終の分散処理ノード３ａＡ［Ｎ］または３ａＢ［Ｎ］の集計データ生成部１５は、受信した中間集計データＲ*［ｍ，Ｎ−１］と自ノードで生成された分散データＤ［ｍ，Ｎ］との和を、対応する重みｗ［ｍ］毎に求めることにより、集計データＲ［ｍ］を生成する。
【０１６８】
そして、最終の分散処理ノード３ａＡ［Ｎ］または３ａＢ［Ｎ］の集計データ送信部１３ｃは、自ノードで生成された集計データＲ［ｍ］を、前の番号ｅ-のリングノード３［ｅ-］に送信する。すなわち、集計データ送信部１３ｃは、同じグループに属する前の番号の分散処理ノード３ａＡ［Ｎ−１］または３ａＢ［Ｎ−１］に向けて集計データＲ［ｍ］を送信する。最終の分散処理ノード３ａＡ［Ｎ］または３ａＢ［Ｎ］の重み更新処理部１６の動作は、第１の実施例と同様である。
【０１６９】
グループＡまたはＢに属する中間の分散処理ノード３ａＡ［ｉ］または３ａＢ［ｉ］（ｉ＝２，・・・，Ｎ−１）として機能するリングノード３［ｚ］の受信部１４ａは、後の番号ｚ+（ｚ+＝ｚ＋１、ただしｚ＝Ｋの場合はｚ+＝１）のリングノード３［ｚ+］から通信路４［ｚ+］を介して、同じグループに属する分散処理ノード３ａＡ［ｉ＋１］または３ａＢ［ｉ＋１］が送信した集計データＲ［ｍ］を受信する。
【０１７０】
中間の分散処理ノード３ａＡ［ｉ］または３ａＢ［ｉ］の集計データ送信部１３ｃは、前の番号ｚ-（ｚ-＝ｚ−１、ただしｚ＝１の場合はｚ-＝Ｋ）のリングノード３［ｚ-］に通信路４［ｚ-］を介して集計データＲ［ｍ］を送信する。すなわち、集計データ送信部１３ｃは、同じグループに属する前の番号の分散処理ノード３ａ［ｉ−１］に向けて集計データＲ［ｍ］を送信する。中間の分散処理ノード３ａＡ［ｉ］または３ａＢ［ｉ］の重み更新処理部１６の動作は、第１の実施例と同様である。
【０１７１】
グループＡまたはＢに属する１番目の分散処理ノード３ａＡ［１］または３ａＢ［１］として機能するリングノード３［ｈ］の受信部１４ａは、後の番号ｈ+（ｈ+＝ｈ＋１、ただしｈ＝Ｋの場合はｈ+＝１）のリングノード３［ｈ+］から通信路４［ｈ+］を介して、同じグループに属する分散処理ノード３ａＡ［２］または３ａＢ［２］が送信した集計データＲ［ｍ］を受信する。１番目の分散処理ノード３ａＡ［１］または３ａＢ［１］の重み更新処理部１６の動作は、第１の実施例と同様である。
【０１７２】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード３ａＡ［γ］（γ＝１，・・・，Ｎａ），３ａＢ［δ］（δ＝１，・・・，Ｎｂ）は、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード３ａＡ［γ］，３ａＢ［δ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、ニューラルネットワーク１７の推論精度を向上させる。
【０１７３】
以上の処理は、グループＡまたはＢに属する分散処理ノード３ａＡ［γ］または３ａＢ［δ］が、同じグループに属する分散処理ノードが生成したデータを受信した場合の処理であり、第２の実施例で説明した分散処理ノードの処理と同様である。
【０１７４】
一方、他のグループに属する分散処理ノードが生成した中間集計データＲ*や集計データＲを受信した分散処理ノードは、これら中間集計データＲ*や集計データＲに対して中継ノード３ｂとして機能する。
【０１７５】
具体的には、あるグループに属する分散処理ノード３ａＡ［γ］または３ａＢ［δ］として機能するリングノード３［ｔ］は、前の番号ｔ-（ｔ-＝ｔ−１、ただしｔ＝１の場合はｔ-＝Ｋ）のリングノード３［ｔ-］から通信路４［ｔ-］を介して受信した、他のグループの分散処理ノードによって生成された中間集計データＲ*を、後の番号ｔ+（ｔ+＝ｔ＋１、ただしｔ＝Ｋの場合はｔ+＝１）のリングノード３［ｔ+］に通信路４［ｔ］を介して転送する。また、このリングノード３［ｔ］は、後の番号ｔ+（ｔ+＝ｔ＋１、ただしｔ＝Ｋの場合はｔ+＝１）のリングノード３［ｔ+］から通信路４［ｔ+］を介して受信した、他のグループの分散処理ノードから送信された集計データＲを、前の番号ｔ-（ｔ-＝ｔ−１、ただしｔ＝１の場合はｔ-＝Ｋ）のリングノード３［ｔ-］に通信路４［ｔ-］を介して転送する。このように、分散処理ノード３ａＡ［γ］または３ａＢ［δ］は、自グループに属さない分散処理ノードによって生成・送信されたデータを隣接するリングノード３から受け取った場合、このデータをそのまま他方の隣接するリングノード３に送出する。
【０１７６】
第２の実施例では、各分散処理ノード３ａ［ｎ］（ｎ＝１，・・・，Ｎ−１）が生成した中間集計データＲ*［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の集約通信パケットに振り分けて、全ての集約通信パケットを送信し終えるまで、Ｐ個の集約通信パケットを順番に送信する集約通信を行う。また、分散処理ノード３ａ［ｎ］が生成した集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、番号ｍの順番にＬ個ずつＰ個の分配通信パケットに振り分けて、全ての分配通信パケットを送信し終えるまで、Ｐ個の分配通信パケットを順番に送信する分配通信を行う。
【０１７７】
本実施例においても第２の実施例と同様に、分散処理ノード３ａＡ［γ］または３ａＢ［δ］として機能するリングノード３は、データをパケット化して送受信するが、このリングノード３の集計データ送信部１３ｃは、自ノードがどのグループに属するか（パケットがどのグループに属するか）を示すグループ識別子を、集約通信パケットおよび分配通信パケットに付与する。上記のとおり、グループ識別子は、分散処理制御部５から通知される。
【０１７８】
さらに、分散処理ノード３ａＡ［γ］または３ａＢ［δ］として機能するリングノード３の集計データ送信部１３ｃは、受信部１４ａで受信した集約通信パケットまたは分配通信パケットに付与されたグループ識別子に基づいて、同じグループに属する分散処理ノードが生成・送信したパケット（自グループに属するパケット）か否かを判定する。
【０１７９】
分散処理ノード３ａＡ［γ］または３ａＢ［δ］として機能するリングノード３の集計データ送信部１３ｃは、受信した集約通信パケットまたは分配通信パケットが自グループのパケットであれば、これらのパケットから取得したデータ（中間集計データＲ*または集計データＲ）を、同じグループに属する分散処理ノードが生成・送信したデータとして第２、第３の実施例と同様に処理する。また、集計データ送信部１３ｃは、受信した集約通信パケットまたは分配通信パケットが自グループのパケットでない場合は、これらのパケットから取得したデータ（中間集計データＲ*または集計データＲ）を、転送すべき方向に存在する隣接するリングノード３に送出する。
【０１８０】
なお、上記のグループ識別子は、集約通信パケットまたは分配通信パケット内の定められた位置に配置すればよい。パケットがイーサネット（登録商標）フレームの形式に準拠するのであれば、宛先ＭＡＣ（Media Access Control ）アドレスあるいは宛先ＭＡＣアドレスの一部に、ＶＬＡＮタグ（ＶＬＡＮ−ＩＤ）を付与して、このＶＬＡＮタグをグループ識別子とする、などの実装が可能である。
【０１８１】
本実施例では、Ｋ個（Ｋは３以上の整数）のリングノードから構成される物理的なリングシステムを、同時に複数の深層学習を行うシステムとして構成することが可能となる。また、本実施例では、合計の分散処理ノード数がリングノード数以下であるという条件の下、各深層学習においてその学習の規模（サンプルデータ数や計算量）に応じて適切な分散処理ノード数を定めることができる。したがって、１つの深層学習では使いきれなかったリングノードを別の深層学習に割り当てることができるため、効率的な（リングノードの稼働率が高い）システムの運用が可能となる。
【０１８２】
なお、本実施例では、第２の実施例において複数の分散処理システムを１つのリングシステム上に構築する例で説明しているが、第３の実施例において複数の分散処理システムを１つのリングシステム上に構築してもよいことは言うまでもない。
【０１８３】
第１〜第４の実施例で説明した分散処理ノード１とリングノード３（分散処理ノード３ａ、中継ノード３ｂ）と分散処理制御部５の各々は、ＣＰＵ（Central Processing Unit）、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。分散処理ノード１とリングノード３と分散処理制御部５の各々のＣＰＵは、各々の記憶装置に格納されたプログラムに従って第１〜第４の実施例で説明した処理を実行する。
【産業上の利用可能性】
【０１８４】
本発明は、ニューラルネットワークの機械学習を行う技術に適用することができる。
【符号の説明】
【０１８５】
１，３ａ…分散処理ノード、２…分散処理用ネットワーク、３…リングノード、３ｂ…中継ノード、４…通信路、５…分散処理制御部、６…制御用ネットワーク、１０…サンプル入力部、１１…勾配計算処理部、１２…ノード内集計処理部、１３，１３ａ，１３ｂ，１３ｃ…集計データ送信部、１４，１４ａ…受信部、１５…集計データ生成部、１６…重み更新処理部、１７…ニューラルネットワーク、１８，１８ａ…機能設定部、５０，５０ａ…機能指定部、５１…障害検知通知受信部、５２，５２ａ…機能指定変更部。
【図１】
2019215603.tif 000005
【図２】
2019215603.tif 000006
【図３】
2019215603.tif 000007
【図４】
2019215603.tif 000008
【図５】
2019215603.tif 000009
【図６】
2019215603.tif 000010
【図７】
2019215603.tif 000011
【図８】
2019215603.tif 000012
【図９】
2019215603.tif 000013
【図１０】
2019215603.tif 000014
【図１１】
2019215603.tif 000015
【図１２】
2019215603.tif 000016
【図１３】
2019215603.tif 000017
【図１４】
2019215603.tif 000018
【図１５】
2019215603.tif 000019
【図１６】
2019215603.tif 000020
【図１７】
2019215603.tif 000021
【図１８】
2019215603.tif 000022
【図１９】
2019215603.tif 000023
【図２０】
2019215603.tif 000024
【図２１】
2019215603.tif 000025
【図２２】
2019215603.tif 000026
【図２３】
2019215603.tif 000027
【図２４】
2019215603.tif 000028