(57)【要約】【課題】深層学習に適用した場合に効果的な分散処理を行う。【解決手段】分散処理ノード１［１］は、分散データを中間集計データとして通信ポート１０から分散処理ノード１［２］に送信する。分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）は、受信した中間集計データと分散データとから更新後の中間集計データを生成して、通信ポート１０から分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）に送信する。分散処理ノード１［１］は、通信ポート１１を介して受信した中間集計データを集計データとして、通信ポート１１から分散処理ノード１［Ｎ］に送信する。分散処理ノード１［ｋ］は、通信ポート１０を介して受信した集計データを通信ポート１１から分散処理ノード１［ｋ−１］に送信する。各分散処理ノード１は、集計データに基づいてニューラルネットワークの重みを更新する。【選択図】  図１
2020067687.tif 000002
【特許請求の範囲】
【請求項１】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、
ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードは、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備え、
各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、
Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードは、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信し、
前記１番目の分散処理ノードは、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、
前記ｋ番目の分散処理ノードは、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信し、
前記１番目の分散処理ノードは、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信し、
各分散処理ノードは、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とする分散処理システム。
【請求項２】
請求項１記載の分散処理システムにおいて、
各分散処理ノードは、
前記分散データを生成するノード内集計処理部と、
自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信する第１の送信部と、
自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得する第１の受信部と、
自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第２の送信部と、
自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得する第２の受信部と、
自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを生成する集計データ生成部と、
受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とする分散処理システム。
【請求項３】
請求項１または２記載の分散処理システムにおいて、
各分散処理ノードは、前記１番目の分散処理ノードが前記第２の集計データを正常に受信できなかった場合に、前記第１の集計データの送信以降の処理を再度行うことを特徴とする分散処理システム。
【請求項４】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードが、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備えたシステムにおける分散処理方法であって、
各分散処理ノードが、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、
Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信する第２のステップと、
Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードが、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信する第３のステップと、
前記１番目の分散処理ノードが、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信する第４のステップと、
前記ｋ番目の分散処理ノードが、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第５のステップと、
前記１番目の分散処理ノードが、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信する第６のステップと、
各分散処理ノードが、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第７のステップとを含むことを特徴とする分散処理方法。
【請求項５】
請求項４記載の分散処理方法において、
前記第３のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、前記更新後の第１の集計データを生成するステップと、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信するステップとを含み、
前記第４のステップは、前記１番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、取得した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信するステップとを含み、
前記第５のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップと、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信するステップとを含み、
前記第６のステップは、前記１番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップを含むことを特徴とする分散処理方法。
【請求項６】
請求項４または５記載の分散処理方法において、
各分散処理ノードは、前記第６のステップにおいて前記１番目の分散処理ノードが前記第２の集計データを正常に受信できなかった場合に、前記第２のステップ以降の処理を再度行うことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の分散処理ノードを備える分散処理システムに係り、特に、各分散処理ノードから数値データを集計して集計データを生成し、各分散処理ノードに集計データを分配する分散処理システムおよび分散処理方法に関するものである。
【背景技術】
【０００２】
深層学習では、多層のニューロンモデルからなる学習対象について、各ニューロンモデルの重み（前段のニューロンモデルが出力した値に乗じる係数）を、入力したサンプルデータに基づいて更新することにより、推論精度を改善する。
【０００３】
通常、推論精度を改善する手法には、ミニバッチ法が用いられている。ミニバッチ法では、サンプルデータ毎に前記重みに対する勾配を計算する勾配計算処理と、複数の異なるサンプルデータについて前記勾配を集計する（サンプルデータ毎に得られた勾配を重み別に合算する）集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理と、を繰り返す。
【０００４】
これらの処理、特に勾配計算処理は、多数回の演算を必要とするが、推論精度を向上させるために、重みの個数や入力するサンプルデータの個数が増加すると、深層学習に要する時間が増大するという、課題がある。
【０００５】
勾配計算処理を高速化するため、分散処理の手法が用いられている。具体的には、複数の分散処理ノードを設け、各ノードは、各々異なるサンプルデータについて勾配計算処理を行う。これにより、ノード数に比例して単位時間に処理できるサンプルデータ数を増加させることが可能となるため、勾配計算処理を高速化できる（非特許文献１参照）。
【０００６】
深層学習の分散処理において、集計処理を行うためには、各分散処理ノードがサンプルデータ毎に重みに対する勾配を計算する勾配計算処理およびサンプルデータ毎に得られた勾配を重み別に合算するノード内集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理との間に、分散処理ノード毎に得られたデータ（分散データ）を、集計処理を行うノードに転送するための通信（集約通信）と、集約通信により取得したデータに基づいて集計する処理（ノード間集計処理）と、各分散処理ノードから取得した集計したデータ（集計データ）を各分散処理ノードに分配するための通信（分配通信）と、が必要となる。
【０００７】
上記の集約通信や分配通信に要する時間は、深層学習を単一ノードで実施するシステムでは不要であり、深層学習の分散処理を行う上で、処理速度を低下させる要因となっている。
近年、深層学習がより複雑な問題に適用されるようになってきており、重みの総数が増加する傾向にある。このため、分散データや集計データのデータ量が増大し、集約通信時間と分配通信時間が増大している。
【０００８】
このように、深層学習の分散処理システムでは、集約通信時間と分配通信時間の増大によって、分散処理ノード数を増加させることにより、深層学習の高速化の効果が低下するという問題があった。
【０００９】
図１２は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示しており、２００は分散処理ノード数と処理性能の理想的な関係（性能∝ノード数）を示し、２０１は分散処理ノード数と処理性能の実際の関係を示している。分散処理ノード数に比例してノード間集計処理の入力である分散データの総量は増大するが、実際の処理性能が分散処理ノード数に比例して向上しない理由は、集計処理ノードの通信速度が、このノードの通信ポートの物理速度以下に制限されるため、集約通信に要する時間が増大するためである。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】秋葉 拓哉，“分散深層学習パッケージ ChainerMN 公開”，プリファードインフラストラクチャー（Preferred Infrastructure），２０１７年，インターネット＜https://research.preferred.jp/2017/05/chainermn-beta-release/＞
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明は、上記のような事情を考慮してなされたものであり、その目的は、複数の分散処理ノードを備える分散処理システムおいて、深層学習に適用した場合に効果的な分散処理を行うことができる分散処理システムおよび分散処理方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明の分散処理システムは、リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードは、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備え、各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードは、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信し、前記１番目の分散処理ノードは、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、前記ｋ番目の分散処理ノードは、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信し、前記１番目の分散処理ノードは、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信し、各分散処理ノードは、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新することを特徴とするものである。
【００１３】
また、本発明の分散処理システムの１構成例において、各分散処理ノードは、前記分散データを生成するノード内集計処理部と、自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信する第１の送信部と、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得する第１の受信部と、自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第２の送信部と、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得する第２の受信部と、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを生成する集計データ生成部と、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部とを備えることを特徴とするものである。
また、本発明の分散処理システムの１構成例において、各分散処理ノードは、前記１番目の分散処理ノードが前記第２の集計データを正常に受信できなかった場合に、前記第１の集計データの送信以降の処理を再度行うことを特徴とするものである。
【００１４】
また、本発明は、リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードが、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備えたシステムにおける分散処理方法であって、各分散処理ノードが、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信する第２のステップと、Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードが、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信する第３のステップと、前記１番目の分散処理ノードが、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信する第４のステップと、前記ｋ番目の分散処理ノードが、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第５のステップと、前記１番目の分散処理ノードが、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信する第６のステップと、各分散処理ノードが、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第７のステップとを含むことを特徴とするものである。
【００１５】
また、本発明の分散処理方法の１構成例において、前記第３のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、前記更新後の第１の集計データを生成するステップと、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信するステップとを含み、前記第４のステップは、前記１番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、取得した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信するステップとを含み、前記第５のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップと、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信するステップとを含み、前記第６のステップは、前記１番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップを含むことを特徴とするものである。
また、本発明の分散処理方法の１構成例において、各分散処理ノードは、前記第６のステップにおいて前記１番目の分散処理ノードが前記第２の集計データを正常に受信できなかった場合に、前記第２のステップ以降の処理を再度行うことを特徴とするものである。
【発明の効果】
【００１６】
本発明によれば、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードからｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードへの集約通信（第１の集計データをｎ+番目の分散処理ノードに送信する処理）、ｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードが行うノード間集計処理（受信した第１の集計データと自ノードで生成した分散データとに基づいて更新後の第１の集計データを計算する処理）、ｎ番目の分散処理ノードからｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードへの分配通信（第２の集計データをｎ-番目の各分散処理ノードに分配する処理）とを、並行してほぼ同時に行うことが可能であり、効果的な分散処理を行うことができ、ニューラルネットワークの学習効率を向上させることができる。本発明では、各分散処理ノードに第１の通信ポートと第２の通信ポートとを設け、集約通信と分配通信の方向を逆にすることにより、集約通信が完了するまで分配通信の開始を待つ必要がない。また、本発明では、集計処理ノードを設けることなく深層学習の分散処理を行うことができ、集計処理ノードの通信速度によって分散処理の速度が制限されることがなくなる。また、本発明では、Ｎ個の分散処理ノードが同一のハードウェアを備えるノードであっても、１個の親ノード（１番目の分散処理ノード）を定めて親ノードか否かに応じた設定を各分散処理ノードに対して行うことにより、集約通信処理とノード間集計処理と分配通信処理とを実現することが可能となるので、各分散処理ノードに個別に設定を要するシステムと比較して、その管理が極めて簡易になるので、システム管理に要するコストや管理上のミスを削減することができる。
【００１７】
また、本発明では、各分散処理ノードは、１番目の分散処理ノードが第２の集計データを正常に受信できなかった場合に、第１の集計データの送信以降の処理を再度行う。本発明では、１番目の分散処理ノードにおいて送出した第２の集計データが戻ることで全分散処理ノードの正常な処理が保証されるため、各分散処理ノードの状態監視が不要であり、１番目の分散処理ノードのみで簡易かつ低遅延でデータのインテグリティ（完全性）を保証することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【図２】図２は、本発明の第１の実施例に係る分散処理ノードのサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。
【図３】図３は、本発明の第１の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と分配通信処理とを説明するフローチャートである。
【図４】図４は、本発明の第１の実施例に係る分散処理ノードの重み更新処理を説明するフローチャートである。
【図５】図５は、本発明の第２の実施例に係る分散処理ノードの構成例を示すブロック図である。
【図６】図６は、本発明の第２の実施例に係る分散処理ノードの構成例を示すブロック図である。
【図７】図７は、本発明の第２の実施例に係る分散処理ノードの処理の概要を示す図である。
【図８】図８は、本発明の第２の実施例に係る分散処理ノード間の中間集計データおよび集計データの通信のシーケンスを示す図である。
【図９】図９は、本発明の第２の実施例に係る分散処理ノード間の中間集計データおよび集計データの通信のシーケンスを示す図である。
【図１０】図１０は、本発明の第２の実施例に係る分散処理ノード間の中間集計データおよび集計データの通信のシーケンスを示す図である。
【図１１】図１１は、本発明の第１、第２の実施例に係る分散処理ノードを実現するコンピュータの構成例を示すブロック図である。
【図１２】図１２は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示す図である。
【発明を実施するための形態】
【００１９】
［第１の実施例］
以下、本発明の実施例について図面を参照して説明する。図１は本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。図１の分散処理システムは、Ｎ個（Ｎは２以上の整数）の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）と、番号ｎの分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）が次の番号ｎ+（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノード１［ｎ+］と互いに双方向に通信するための通信路２［ｎ］（ｎ＝１，・・・，Ｎ）とを備えている。なお、任意の通信路２［ｎ］（ｎ＝１，・・・，Ｎ）には、伝送路の他に、通信を中継する中継処理ノードが任意に介在することも可能である。
【００２０】
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、双方向の通信が同時に可能な通信ポート１０と通信ポート１１とを備える。通信ポート１０は、分散処理ノード１［ｎ］が分散処理ノード１［ｎ+］（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）と双方向の通信を行うための通信ポートであり、通信路２［ｎ］と接続される。また、通信ポート１１は、分散処理ノード１［ｎ］が分散処理ノード［ｎ-］（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）と双方向の通信を行うための通信ポートであり、通信路２［ｎ-］と接続される。
【００２１】
図２は分散処理ノード１［ｎ］のサンプルデータ入力処理と勾配計算処理とノード内集計処理とを説明するフローチャートである。各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、図示しないデータ収集ノードから異なるＳ個（Ｓは２以上の整数）のサンプルデータｘ［ｎ，ｓ］（ｓ＝１，・・・，Ｓ）をミニバッチ毎に入力する（図２ステップＳ１００）。
【００２２】
なお、本発明は、データ収集ノードによるサンプルデータの収集方法、および収集したサンプルデータをＮ個の集合に振り分けて各分散処理ノード１［ｎ］へ分配する方法に限定されるものではなく、これらの方法の如何を問わず適用が可能である。
【００２３】
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、サンプルデータｘ［ｎ，ｓ］が入力されたとき、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］（ｍ＝１，・・・，Ｍ）の各々について、ニューラルネットワークの損失関数の勾配Ｇ［ｍ，ｎ，ｓ］をサンプルデータｘ［ｎ，ｓ］毎に計算する（図２ステップＳ１０１）。
【００２４】
ニューラルネットワークを各分散処理ノード１［ｎ］にソフトウェアで構築する方法、ニューラルネットワークの重みｗ［ｍ］、ニューラルネットワークの性能の悪さを示す指標である損失関数、および損失関数の勾配Ｇ［ｍ，ｎ，ｓ］については周知の技術であるので、詳細な説明は省略する。
【００２５】
続いて、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］毎に生成して保持する（図２ステップＳ１０２）。分散データＤ［ｍ，ｎ］の計算式は以下のとおりである。
【００２６】
【数１】
2020067687.tif 000003
【００２７】
なお、ステップＳ１０１の勾配計算処理とステップＳ１０２のノード内集計処理とは、サンプルデータ単位でパイプライン化する（あるサンプルデータに対して勾配計算処理を行うと同時にその一つ前のサンプルデータから得た勾配を集計するノード内集計処理とを同時に実行する）ことができる。
【００２８】
さらに、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を生成した後、分散処理ノード間の集約通信を行い、集計データを生成するためのノード間集計処理を行う。
図３は分散処理ノード１［ｎ］の集約通信処理とノード間集計処理と分配通信処理とを説明するフローチャートである。
【００２９】
まず、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められた１番目の分散処理ノード１［１］は、自ノードで生成されたＭ個の分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を、中間集計データＲｔ［ｍ，１］として、自ノードの通信ポート１０および通信路２［１］を介して次の番号の分散処理ノード１［２］に送信する（図３ステップＳ１０３，Ｓ１０４）。すなわち、このときの中間集計データＲｔ［ｍ，１］は、分散データＤ［ｍ，１］と同じである。
Ｒｔ［ｍ，１］＝Ｄ［ｍ，１］                                    ・・・（２）
【００３０】
次に、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目とＮ番目とを除く、予め定められた中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）は、分散処理ノード１［ｉ−１］から中間集計データＲｔ［ｍ，ｉ−１］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１１および通信路２［ｉ−１］を介して受信する（図３ステップＳ１０５，Ｓ１０６）。
【００３１】
中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）は、受信した中間集計データＲｔ［ｍ，ｉ−１］（ｍ＝１，・・・，Ｍ）と自ノードで生成された分散データＤ［ｍ，ｉ］との和を、対応する重みｗ［ｍ］毎に求めることにより、中間集計データＲｔ［ｍ，ｉ］を生成する（図３ステップＳ１０７）。すなわち、中間集計データＲｔ［ｍ，ｉ］は、Ｍ個の数値から構成される。中間集計データＲｔ［ｍ，ｉ］の計算式は以下のとおりである。
Ｒｔ［ｍ，ｉ］＝Ｒｔ［ｍ，ｉ−１］＋Ｄ［ｍ，ｉ］                ・・・（３）
【００３２】
そして、中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）は、自ノードで生成された中間集計データＲｔ［ｍ，ｉ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［ｉ］を介して次の番号の分散処理ノード１［ｉ＋１］に送信する（図３ステップＳ１０８）。
【００３３】
複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められたＮ番目の分散処理ノード１［Ｎ］は、分散処理ノード１［Ｎ−１］から中間集計データＲｔ［ｍ，Ｎ−１］を自ノードの通信ポート１１および通信路２［Ｎ−１］を介して受信する（図３ステップＳ１０９，Ｓ１１０）。
【００３４】
Ｎ番目の分散処理ノード１［Ｎ］は、受信した中間集計データＲｔ［ｍ，Ｎ−１］（ｍ＝１，・・・，Ｍ）と自ノードで生成された分散データＤ［ｍ，Ｎ］との和を、対応する重みｗ［ｍ］毎に求めることにより、中間集計データＲｔ［ｍ，Ｎ］を生成する（図３ステップＳ１１１）。すなわち、中間集計データＲｔ［ｍ，Ｎ］は、Ｍ個の数値から構成される。中間集計データＲｔ［ｍ，Ｎ］の計算式は以下のとおりである。
Ｒｔ［ｍ，Ｎ］＝Ｒｔ［ｍ，Ｎ−１］＋Ｄ［ｍ，Ｎ］                ・・・（４）
【００３５】
そして、Ｎ番目の分散処理ノード１［Ｎ］は、自ノードで生成された中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［Ｎ］を介して１番目の分散処理ノード１［１］に送信する（図３ステップＳ１１２）。
【００３６】
このように、式（２）、式（３）、式（４）により計算された、Ｍ個の数値から構成される中間集計データＲｔ［ｍ，Ｎ］は、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）で生成されたＭ個の数値から構成される分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）に基づいて計算される。中間集計データＲｔ［ｍ，Ｎ］の値は以下の式により表すことができる。
【００３７】
【数２】
2020067687.tif 000004
【００３８】
次に、中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を集計データとして、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）に分配する分配通信を行う。
１番目の分散処理ノード１［１］は、分散処理ノード１［Ｎ］から中間集計データＲｔ［ｍ，Ｎ］を自ノードの通信ポート１１および通信路２［Ｎ］を介して受信する（図３ステップＳ１１３，Ｓ１１４）。
【００３９】
１番目の分散処理ノード１［１］は、受信した中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を、集計データＲ［ｍ］として、自ノードの通信ポート１１および通信路２［Ｎ］を介してＮ番目の分散処理ノード１［Ｎ］に送信する（図３ステップＳ１１５）。すなわち、分散処理ノード１［１］は、分散処理ノード１［Ｎ］からの中間集計データＲｔ［ｍ，Ｎ］を集計データＲ［ｍ］として分散処理ノード［Ｎ］に戻すことになる。集計データＲ［ｍ］は、中間集計データＲｔ［ｍ，Ｎ］と同じである。
【００４０】
【数３】
2020067687.tif 000005
【００４１】
続いて、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目を除く分散処理ノード１［ｋ］（ｋ＝Ｎ，・・・，２）は、次の番号の分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［ｋ］を介して受信する（図３ステップＳ１１６，Ｓ１１７）。
【００４２】
分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目を除く分散処理ノード１［ｋ］（ｋ＝Ｎ，・・・，２）は、受信した集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１１および通信路２［ｋ−１］を介して前の番号の分散処理ノード１［ｋ−１］に送信する（図３ステップＳ１１８）。
【００４３】
１番目の分散処理ノード１［１］は、分散処理ノード１［２］から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［１］を介して受信する（図３ステップＳ１１９，Ｓ１２０）。
【００４４】
ここで、１番目の分散処理ノード１［１］が、Ｍ個の数値から構成される集計データＲ［ｍ］を正常に受信するためには、他の分散処理ノード１［ｋ］（ｋ＝Ｎ，・・・，２）が集計データＲ［ｍ］を正常に受信することが必要である。分散処理ノード間の各通信路２［ｎ］（ｎ＝１，・・・，Ｎ）は、正常ではない集計データＲ［ｍ］を正常に戻す機能を有していない。
【００４５】
したがって、分散処理ノード１［１］が集計データＲ［ｍ］を正常に受信した場合、全ての分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）が正常に集計データＲ［ｍ］を受信できたことが保証される。分散処理ノード１［１］が正常に集計データＲ［ｍ］を受信できなかった場合は（ステップＳ１２０においてＮＯ）、ステップＳ１０３に戻って集約通信からやり直すようにすればよい。
【００４６】
なお、分散処理ノード１［１］が集計データＲ［ｍ］を正常に受信できたかどうかは、例えばステップＳ１１５で送信した集計データＲ［ｍ］とステップＳ１１９，Ｓ１２０で受信した集計データＲ［ｍ］とを比較することにより、判定することができる。すなわち、送信した集計データＲ［ｍ］と受信した集計データＲ［ｍ］とが一致すれば、集計データＲ［ｍ］を正常に受信できたと判定できる。
【００４７】
以上の分配通信により、全ての分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、同一の集計データＲ［ｍ］を取得することができる。
集約通信は、分散処理ノード１［１］→分散処理ノード１［２］→・・・→分散処理ノード１［Ｎ］→分散処理ノード１［１］という経路で行われる。分配通信は、分散処理ノード１［１］→分散処理ノード１［Ｎ］→・・・→分散処理ノード１［２］→分散処理ノード１［１］という経路で行われる。
【００４８】
つまり、集約通信と分配通信とは、互いに通信の方向が逆になる。集約通信と分配通信とは、双方向の通信を同時に行うことが可能な通信ポート１０，１１と通信路２［ｎ］とを介して行わるため、集約通信が完了するまで分配通信の開始を待つ必要がない。
【００４９】
すなわち、分散処理ノード１［１］が中間集計データＲｔ［ｍ，１］（ｍ＝１，・・・，Ｍ）の送信を完了する前に、分散処理ノード１［１］が中間集計データＲｔ［ｍ，Ｎ］を受信開始した場合は、この中間集計データＲｔ［ｍ，Ｎ］を集計データＲ［ｍ］とした分配通信を開始できる。
【００５０】
図４は分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理を説明するフローチャートである。各分散処理ノード１［ｎ］は、集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を受信すると（図４ステップＳ１２１においてＹＥＳ）、受信した集計データＲ［ｍ］に基づいて、自ノード内のニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理を行う（図４ステップＳ１２２）。重み更新処理においては、集計データＲ［ｍ］が示す、損失関数の勾配に基づいて損失関数が最小になるように重みｗ［ｍ］を番号ｍ毎に更新すればよい。重みｗ［ｍ］の更新は周知の技術であるので、詳細な説明は省略する。
【００５１】
このように、重み更新処理は、重みｗ［ｍ］の番号ｍの順番に取得した集計データＲ［ｍ］に基づいて、重みｗ［ｍ］を更新する処理である。このため、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、重みｗ［ｍ］に対する重み更新処理を、番号ｍの順番に行うことができる。
【００５２】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、更新された重みｗ［ｍ］に基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード１［ｎ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、自ノードのニューラルネットワークの推論精度を向上させる。
【００５３】
本実施例で示したように、集約通信が完了するまで分配通信の開始を待つ必要がなく、集約通信中であっても、集計を終えたデータの一部から分配通信を開始することが可能であるため、集約通信を完了してから分配通信を開始するという従来技術と比較して、集約通信の開始から分配通信の完了までの時間を短縮することが可能であるため、より高速な深層学習の分散システムを提供することが可能である。
【００５４】
また、本実施例では、分散処理ノード１［１］が集計データＲ［ｍ］の取得を完了した時点で他の分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）が集計データＲ［ｍ］の取得を完了したことが保証されるため、信頼性の高い深層学習の分散処理システムを提供することが可能である。
【００５５】
［第２の実施例］
次に、本発明の第２の実施例について説明する。本実施例は、第１の実施例をより具体的に説明するものである。図５は本実施例に係る分散処理ノード１［１］の構成例を示すブロック図、図６は本実施例に係る分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の構成例を示すブロック図である。
【００５６】
分散処理ノード１［１］は、通信ポート１０（第１の通信ポート）と、通信ポート１１（第２の通信ポート）と、中間集計データＲｔ［ｍ，１］（ｍ＝１，・・・，Ｍ）をパケット化して自ノードの通信ポート１０に出力する送信部１２（第１の送信部）と、自ノードの通信ポート１０から受信するパケットから集計データＲ［ｍ］を取得する受信部１３（第２の受信部）と、集計データＲ［ｍ］をパケット化して自ノードの通信ポート１１に出力する送信部１４（第２の送信部）と、自ノードの通信ポート１１から受信するパケットから中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を取得する受信部１５（第１の受信部）と、図示しないデータ収集ノードから学習用のサンプルデータを受け取るサンプル入力部１６と、サンプルデータが入力されたときに、ニューラルネットワークの重みｗ［ｍ］の各々について、ニューラルネットワークの損失関数の勾配Ｇ［ｍ，１，ｓ］をサンプルデータ毎に計算する勾配計算処理部１７と、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，１］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部１８と、集計データＲ［ｍ］に基づいてニューラルネットワークの重みを更新する重み更新処理部２０と、ソフトウェア的に構築された数学モデルであるニューラルネットワーク２１とを備えている。
【００５７】
分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）は、通信ポート１０（第１の通信ポート）と、通信ポート１１（第２の通信ポート）と、中間集計データＲｔ［ｍ，ｋ］（ｍ＝１，・・・，Ｍ）をパケット化して自ノードの通信ポート１０に出力する送信部１２（第１の送信部）と、自ノードの通信ポート１０から受信するパケットから集計データＲ［ｍ］を取得する受信部１３（第２の受信部）と、集計データＲ［ｍ］をパケット化して自ノードの通信ポート１１に出力する送信部１４（第２の送信部）と、自ノードの通信ポート１１から受信するパケットから中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）を取得する受信部１５（第１の受信部）と、サンプル入力部１６と、サンプルデータが入力されたときに、ニューラルネットワークの重みｗ［ｍ］の各々について、ニューラルネットワークの損失関数の勾配Ｇ［ｍ，ｋ，ｓ］をサンプルデータ毎に計算する勾配計算処理部１７と、サンプルデータ毎の勾配Ｇ［ｍ，ｋ，ｓ］を集計した数値である分散データＤ［ｍ，ｋ］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部１８と、受信した中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）と自ノードで生成された分散データＤ［ｍ，ｋ］との和を、対応する重みｗ［ｍ］毎に求めて更新後の中間集計データＲｔ［ｍ，ｋ］を生成する集計データ生成部１９と、重み更新処理部２０と、ニューラルネットワーク２１とを備えている。
【００５８】
なお、分散処理ノード１［１］と分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）とは、後述のように同一のハードウェアで実現することが可能である。具体的には、外部からの初期設定により、各分散処理ノードの機能を、親ノード（分散処理ノード１［１］）あるいは子ノード（分散処理ノード１［ｋ］）の何れかに指定することが可能である。これにより、本発明では、全ての分散処理ノードを低コストに実現可能である。
【００５９】
図２のステップＳ１００で説明したとおり、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のサンプル入力部１６は、データ収集ノードからサンプルデータｘ［ｎ，ｓ］（ｓ＝１，・・・，Ｓ）をミニバッチ毎に入力する。
【００６０】
図２のステップＳ１０１で説明したとおり、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の勾配計算処理部１７は、サンプルデータｘ［ｎ，ｓ］が入力されたとき、ニューラルネットワーク２１のＭ個の重みｗ［ｍ］（ｍ＝１，・・・，Ｍ）の各々について、ニューラルネットワーク２１の損失関数の勾配Ｇ［ｍ，ｎ，ｓ］をサンプルデータｘ［ｎ，ｓ］毎に計算する。
【００６１】
図２ステップＳ１０２で説明したとおり、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のノード内集計処理部１８は、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］毎に生成して保持する。
【００６２】
次に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１２は、外部からの初期設定により、親ノード（分散処理ノード１［１］）用の送信部として動作するか、子ノード（分散処理ノード１［ｋ］、ｋ＝２，・・・，Ｎ）用の送信部として動作するかを、設定できるようになっている。
【００６３】
親ノードとして設定された分散処理ノード１［１］の送信部１２は、自ノードのノード内集計処理部１８によって生成されたＭ個の分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を中間集計データＲｔ［ｍ，１］として、この中間集計データＲｔ［ｍ，１］を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した集約通信パケットＳＰ［ｐ，１］（ｐ＝１，・・・，Ｐ、Ｐは２以上の整数）を自ノードの通信ポート１０に出力する。この集約通信パケットＳＰ［ｐ，１］は、通信ポート１０から通信路２［１］を介して次の番号の分散処理ノード１［２］に送信される（図３ステップＳ１０３，Ｓ１０４）。
【００６４】
一方、子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の受信部１５は、分散処理ノード１［ｋ−１］から集約通信パケットＳＰ［ｐ，ｋ−１］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１１および通信路２［ｋ−１］を介して受信し、受信した集約通信パケットＳＰ［ｐ，ｋ−１］から中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）を取得する（図３ステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０）。
【００６５】
子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の集計データ生成部１９は、自ノードの受信部１５によって取得された中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）と自ノードのノード内集計処理部１８によって生成された分散データＤ［ｍ，ｋ］との和を、対応する重みｗ［ｍ］毎（番号ｍ毎）に求めることにより、中間集計データＲｔ［ｍ，ｋ］を番号ｍの順番に生成する（図３ステップＳ１０７，Ｓ１１１）。
【００６６】
そして、各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の送信部１２は、自ノードの集計データ生成部１９によって生成されたＭ個の中間集計データＲｔ［ｍ，ｋ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した集約通信パケットＳＰ［ｐ，ｋ］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１０に出力する。この集約通信パケットＳＰ［ｐ，ｋ］は、通信ポート１０から通信路２［ｋ］を介して次の番号の分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）に送信される（図３ステップＳ１０８，Ｓ１１２）。
【００６７】
次に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１４は、送信部１２と同様に外部からの初期設定により、親ノード（分散処理ノード１［１］）用の送信部として動作するか、子ノード（分散処理ノード１［ｋ］、ｋ＝２，・・・，Ｎ）用の送信部として動作するかを、設定できるようになっている。
【００６８】
親ノードとして設定された分散処理ノード１［１］の受信部１５は、分散処理ノード１［Ｎ］から集約通信パケットＳＰ［ｐ，Ｎ］を自ノードの通信ポート１１および通信路２［Ｎ］を介して受信し、受信した集約通信パケットＳＰ［ｐ，Ｎ］（ｐ＝１，・・・，Ｐ）から中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を取得する（図３ステップＳ１１３，Ｓ１１４）。
【００６９】
親ノードとして設定された分散処理ノード１［１］の送信部１４は、自ノードの受信部１５によって取得された中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を集計データＲ［ｍ］として、この集計データＲ［ｍ］を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した分配通信パケットＤＰ［ｐ，１］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１１に出力する。この分配通信パケットＤＰ［ｐ，１］は、通信ポート１１から通信路２［Ｎ］を介してＮ番目の分散処理ノード１［Ｎ］に送信される（図３ステップＳ１１５）。
【００７０】
一方、子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の受信部１３は、分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）から分配通信パケットＤＰ［ｐ，ｋ+］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１０および通信路２［ｋ］を介して受信し、受信した分配通信パケットＤＰ［ｐ，ｋ+］から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を取得する（図３ステップＳ１１６，Ｓ１１７）。
【００７１】
子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の送信部１４は、受信部１３によって取得された集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した分配通信パケットＤＰ［ｐ，ｋ］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１１に出力する。この分配通信パケットＤＰ［ｐ，ｋ］は、通信ポート１１から通信路２［ｋ−１］を介して分散処理ノード１［ｋ−１］に送信される（図３ステップＳ１１８）。
【００７２】
親ノードとして設定された分散処理ノード１［１］の受信部１３は、分散処理ノード１［２］から分配通信パケットＤＰ［ｐ，２］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１０および通信路２［１］を介して受信し、受信した分配通信パケットＤＰ［ｐ，２］から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を取得する（図３ステップＳ１１９，Ｓ１２０）。
【００７３】
なお、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１２は、Ｍ個の中間集計データＲｔ［ｍ，ｎ］を、重みｗ［ｍ］の番号ｍの順番にＬ（Ｌは１以上Ｍ未満の整数）個ずつＰ個（Ｐは２以上の整数）の集約通信パケットに振り分けて、全ての集約通信パケットを送信し終えるまで、Ｐ個の集約通信パケットを順番に次の番号の分散処理ノード１［ｎ+］（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する集約通信パケットＳＰ［ｐ，ｎ］には、Ｌ個の中間集計データＲｔ［ｒ，ｎ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００７４】
ＭがＬで割り切れない条件では、Ｐ番目の集約通信パケットＳＰ［Ｐ，ｎ］には、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲｔ［ｒ，ｎ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
【００７５】
Ｐ番目の集約通信パケットＳＰ［Ｐ，ｎ］については、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲｔ［ｒ，ｎ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００７６】
また、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１４は、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の分配通信パケットに振り分けて、全ての分配通信パケットを送信し終えるまで、Ｐ個の分配通信パケットを順番に分散処理ノード１［ｎ-］（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する分配通信パケットＤＰ［ｐ，ｎ］には、Ｌ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００７７】
ＭがＬで割り切れない条件では、Ｐ番目の分配通信パケットＤＰ［ｐ，ｎ］には、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
【００７８】
Ｐ番目の分配通信パケットＤＰ［Ｐ，ｎ］については、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００７９】
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理部２０は、自ノードの受信部１３によって取得された集計データＲ［ｍ］に基づいて、自ノード内のニューラルネットワーク２１の重みｗ［ｍ］を更新する重み更新処理を行う（図４ステップＳ１２２）。
【００８０】
図７に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の処理の概要を示す。図８〜図１０に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）間の中間集計データおよび集計データの通信（集約通信と分配通信）のシーケンスを示す。
【００８１】
なお、図９は、図８の８０の部分の処理を示している。また、８１は分散処理ノード１［１］におけるノード間集計処理を示している。同様に、図９の９０，９１，９２は分散処理ノード１［α−１］，１［α］、１［α＋１］（α＝３，・・・，Ｎ−１）におけるノード間集計処理を示している。図１０は、図８の８２の部分の処理、すなわち分散処理ノード１［β＋１］，１［β］、１［β−１］（β＝Ｎ−１，・・・，３）の分配通信処理を示している。
【００８２】
以上のように、分散処理ノード１［１］を起点・終点とした分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）から分散処理ノード［ｎ+］（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）への集約通信（中間集計データＲｔ［ｍ，ｎ］を分散処理ノード［ｎ+］に送信する処理）、分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）が行うノード間集計処理（受信した中間集計データＲｔ［ｍ，ｋ−１］と自ノードで生成した分散データＤ［ｍ，ｋ］とに基づいて中間集計データＲｔ［ｍ，ｋ］を計算する処理）、分散処理ノード１［１］を起点・終点とした分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）から分散処理ノード［ｎ-］（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）への分配通信（集計データＲ［ｍ］を各分散処理ノード［ｎ-］に分配する処理）、の全ては、前記の重みｗ［ｍ］の番号ｍの順番に行われており、番号ｍを単位としたパイプライン化が可能である。
【００８３】
本実施例では、図８〜図１０に示すように、集約通信処理とノード間集計処理と分配通信処理とを、並行してほぼ同時に（番号ｍを単位としたパイプライン処理で）行うことが可能であり、各通信や各処理が終了するまで、次の処理を開始できなかった従来技術と比較したとき、処理時間の大幅な短縮が可能となる。
【００８４】
また、Ｎ個の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）が同一ハードウェアを備えるノードであっても、１個の親ノード（分散処理ノード１［１］）を定めて親ノードか否かに応じた設定を各ノードに対して行うことにより、上述する集約通信処理とノード間集計処理と分配通信処理とを実現することが可能となるので、各ノードに個別に設定を要するシステムと比較して、その管理が極めて簡易になる（１個の親ノードを除く各ノードに同じ設定を行えばよい）ので、システム管理に要するコストや管理上のミスを削減できる。
【００８５】
第１、第２の実施例で説明した各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、ＣＰＵ（Central Processing Unit）、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
【００８６】
このコンピュータの構成例を図１１に示す。コンピュータは、ＣＰＵ１００と、記憶装置１０１と、インターフェース装置（以下、Ｉ／Ｆと略する）１０２とを備えている。Ｉ／Ｆ１０２には、例えば通信ポート１０，１１を含む通信回路が接続される。ＣＰＵ１００は、記憶装置１０１に格納されたプログラムに従って第１、第２の実施例で説明した処理を実行し、本発明の分散処理システムおよび分散処理方法を実現する。
【産業上の利用可能性】
【００８７】
本発明は、ニューラルネットワークの機械学習を行う技術に適用することができる。
【符号の説明】
【００８８】
１…分散処理ノード、２…通信路、１０，１１…通信ポート、１２，１４…送信部、１３，１５…受信部、１６…サンプル入力部、１７…勾配計算処理部、１８…ノード内集計処理部、１９…集計データ生成部、２０…重み更新処理部、２１…ニューラルネットワーク。
【図１】
2020067687.tif 000006
【図２】
2020067687.tif 000007
【図３】
2020067687.tif 000008
【図４】
2020067687.tif 000009
【図５】
2020067687.tif 000010
【図６】
2020067687.tif 000011
【図７】
2020067687.tif 000012
【図８】
2020067687.tif 000013
【図９】
2020067687.tif 000014
【図１０】
2020067687.tif 000015
【図１１】
2020067687.tif 000016
【図１２】
2020067687.tif 000017