(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-12
(45)【発行日】2022-12-20
(54)【発明の名称】分散処理システムおよび分散処理方法
(51)【国際特許分類】
G06N 3/08 20060101AFI20221213BHJP
【FI】
G06N3/08
(21)【出願番号】P 2021524503
(86)(22)【出願日】2019-06-03
(86)【国際出願番号】 JP2019021943
(87)【国際公開番号】W WO2020245864
(87)【国際公開日】2020-12-10
【審査請求日】2021-10-18
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100098394
【氏名又は名称】山川 茂樹
(74)【代理人】
【識別番号】100153006
【氏名又は名称】小池 勇三
(74)【代理人】
【識別番号】100064621
【氏名又は名称】山川 政樹
(74)【代理人】
【識別番号】100121669
【氏名又は名称】本山 泰
(72)【発明者】
【氏名】川合 健治
(72)【発明者】
【氏名】加藤 順一
(72)【発明者】
【氏名】ゴー フィクー
(72)【発明者】
【氏名】有川 勇輝
(72)【発明者】
【氏名】伊藤 猛
(72)【発明者】
【氏名】坂本 健
【審査官】福西 章人
(56)【参考文献】
【文献】特開2018-36779(JP,A)
【文献】特開2019-80232(JP,A)
【文献】特開平5-108595(JP,A)
【文献】特開2018-18220(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 15/173
(57)【特許請求の範囲】
【請求項1】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたN個(Nは2以上の整数)の分散処理ノードを備え、
n番目(n=1,・・・,N)の分散処理ノードは、それぞれn
+番目(n
+=n+1、ただしn=Nの場合はn
+=1)の分散処理ノード、n
-番目(n
-=n-1、ただしn=1の場合はn
-=N)の分散処理ノードと双方向の通信が同時に可能なM個(Mは2以上の整数)の通信部を備え、
各分散処理ノードは、学習対象のニューラルネットワークの重み毎の分散データをMグループ分生成し、
N個の分散処理ノードのうち、予め指定された1番目の分散処理ノードは、自ノードで生成されたMグループ分の分散データを第1の集計データとして、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して2番目の分散処理ノードに向けて送信し、
N個の分散処理ノードのうち、前記1番目を除くk番目(k=2,・・・,N)の分散処理ノードは、(k-1)番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データと自ノードで生成されたグループ毎の分散データとの和を、重み毎およびグループ毎に求めて更新後の第1の集計データを生成し、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介してk
+番目(k
+=k+1、ただしk=Nの場合はk
+=1)の分散処理ノードに向けて送信し、
前記1番目の分散処理ノードは、N番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データを第2の集計データとして、これらの第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して前記N番目の分散処理ノードに向けて送信し、
前記k番目の分散処理ノードは、k
+番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して(k-1)番目の分散処理ノードに向けて送信し、
前記1番目の分散処理ノードは、2番目の分散処理ノードから自ノードの前記M個の通信部を介して第2の集計データを受信し、
各分散処理ノードは、受信した前記第2の集計データに基づいて前記ニューラルネットワークの重みを更新することを特徴とする分散処理システム。
【請求項2】
請求項1記載の分散処理システムにおいて、
各分散処理ノードは、
前記M個の通信部と、
前記重み毎の分散データを生成するように構成されたノード内集計処理部と、
前記ノード内集計処理部によって生成された分散データをMグループ分に分割するように構成されたデータ分割部と、
自ノードが前記k番目の分散処理ノードとして機能する場合に、前記更新後の第1の集計データを生成するように構成された集計データ生成部と、
受信した前記第2の集計データに基づいて前記ニューラルネットワークの重みを更新するように構成された重み更新処理部とを備えることを特徴とする分散処理システム。
【請求項3】
請求項1記載の分散処理システムにおいて、
各分散処理ノードは、
前記M個の通信部と、
内部通信路を介して前記M個の通信部と接続されたM個の分散データ生成部とを備え、
各分散データ生成部は、
グループ毎の前記分散データを生成するように構成されたノード内集計処理部と、
自ノードが前記k番目の分散処理ノードとして機能する場合に、前記更新後の第1の集計データをグループ毎に生成するように構成された集計データ生成部と、
受信した前記第2の集計データに基づいて前記ニューラルネットワークの重みを更新するように構成された重み更新処理部とを備え、
各分散データ生成部は、グループ毎の前記分散データを前記内部通信路を介して対応する前記通信部に転送し、
各通信部は、グループ毎の前記第1、第2の集計データを前記内部通信路を介して対応する前記分散データ生成部に転送することを特徴とする分散処理システム。
【請求項4】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたN個(Nは2以上の整数)の分散処理ノードを備え、n番目(n=1,・・・,N)の分散処理ノードが、それぞれn
+番目(n
+=n+1、ただしn=Nの場合はn
+=1)の分散処理ノード、n
-番目(n
-=n-1、ただしn=1の場合はn
-=N)の分散処理ノードと双方向の通信が同時に可能なM個(Mは2以上の整数)の通信部を備えたシステムにおける分散処理方法であって、
各分散処理ノードが、学習対象のニューラルネットワークの重み毎の分散データをMグループ分生成する第1のステップと、
N個の分散処理ノードのうち、予め指定された1番目の分散処理ノードが、自ノードで生成されたMグループ分の分散データを第1の集計データとして、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して2番目の分散処理ノードに向けて送信する第2のステップと、
N個の分散処理ノードのうち、前記1番目を除くk番目(k=2,・・・,N)の分散処理ノードが、(k-1)番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データと自ノードで生成されたグループ毎の分散データとの和を、重み毎およびグループ毎に求めて更新後の第1の集計データを生成し、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介してk
+番目(k
+=k+1、ただしk=Nの場合はk
+=1)の分散処理ノードに向けて送信する第3のステップと、
前記1番目の分散処理ノードが、N番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データを第2の集計データとして、これらの第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して前記N番目の分散処理ノードに向けて送信する第4のステップと、
前記k番目の分散処理ノードが、k
+番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して(k-1)番目の分散処理ノードに向けて送信する第5のステップと、
前記1番目の分散処理ノードが、2番目の分散処理ノードから自ノードの前記M個の通信部を介して第2の集計データを受信する第6のステップと、
各分散処理ノードが、受信した前記第2の集計データに基づいて前記ニューラルネットワークの重みを更新する第7のステップとを含むことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数の分散処理ノードを備える分散処理システムに係り、特に、各分散処理ノードから数値データを集計して集計データを生成し、各分散処理ノードに集計データを分配する分散処理システムおよび分散処理方法に関するものである。
【背景技術】
【0002】
深層学習では、多層のニューロンモデルからなる学習対象について、各ニューロンモデルの重み(前段のニューロンモデルが出力した値に乗じる係数)を、入力したサンプルデータに基づいて更新することにより、推論精度を改善する。
【0003】
通常、推論精度を改善する手法には、ミニバッチ法が用いられている。ミニバッチ法では、サンプルデータ毎に前記重みに対する勾配を計算する勾配計算処理と、複数の異なるサンプルデータについて前記勾配を集計する(サンプルデータ毎に得られた勾配を重み別に合算する)集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理と、を繰り返す。
【0004】
これらの処理、特に勾配計算処理は、多数回の演算を必要とするが、推論精度を向上させるために、重みの個数や入力するサンプルデータの個数が増加すると、深層学習に要する時間が増大するという、課題がある。
【0005】
勾配計算処理を高速化するため、分散処理の手法が用いられている。具体的には、複数の分散処理ノードを設け、各ノードは、各々異なるサンプルデータについて勾配計算処理を行う。これにより、ノード数に比例して単位時間に処理できるサンプルデータ数を増加させることが可能となるため、勾配計算処理を高速化できる(非特許文献1参照)。
【0006】
深層学習の分散処理において、集計処理を行うためには、各分散処理ノードがサンプルデータ毎に重みに対する勾配を計算する勾配計算処理およびサンプルデータ毎に得られた勾配を重み別に合算するノード内集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理との間に、分散処理ノード毎に得られたデータ(分散データ)を、集計処理を行うノードに転送するための通信(集約通信)と、集約通信により取得したデータに基づいて集計する処理(ノード間集計処理)と、各分散処理ノードから取得した集計したデータ(集計データ)を各分散処理ノードに分配するための通信(分配通信)と、が必要となる。
【0007】
上記の集約通信や分配通信に要する時間は、深層学習を単一ノードで実施するシステムでは不要であり、深層学習の分散処理を行う上で、処理速度を低下させる要因となっている。
近年、深層学習がより複雑な問題に適用されるようになってきており、重みの総数が増加する傾向にある。このため、分散データや集計データのデータ量が増大し、集約通信時間と分配通信時間が増大している。
【0008】
このように、深層学習の分散処理システムでは、集約通信時間と分配通信時間の増大によって、分散処理ノード数を増加させることにより、深層学習の高速化の効果が低下するという問題があった。
【0009】
図13は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示しており、200は分散処理ノード数と処理性能の理想的な関係(性能∝ノード数)を示し、201は分散処理ノード数と処理性能の実際の関係を示している。分散処理ノード数に比例してノード間集計処理の入力である分散データの総量は増大するが、実際の処理性能が分散処理ノード数に比例して向上しない理由は、集計処理ノードの通信速度が、このノードの通信ポートの物理速度以下に制限されるため、集約通信に要する時間が増大するためである。
【先行技術文献】
【非特許文献】
【0010】
【文献】秋葉 拓哉,“分散深層学習パッケージ ChainerMN 公開”,プリファードインフラストラクチャー(Preferred Infrastructure),2017年,インターネット<https://research.preferred.jp/2017/05/chainermn-beta-release/>
【発明の概要】
【発明が解決しようとする課題】
【0011】
本発明は、上記のような事情を考慮してなされたものであり、その目的は、複数の分散処理ノードを備える分散処理システムおいて、深層学習に適用した場合に効果的な分散処理を行うことができる分散処理システムおよび分散処理方法を提供することにある。
【課題を解決するための手段】
【0012】
本発明の分散処理システムは、リング状に配置され、隣接するノードと通信路を介して互いに接続されたN個(Nは2以上の整数)の分散処理ノードを備え、n番目(n=1,・・・,N)の分散処理ノードは、それぞれn+番目(n+=n+1、ただしn=Nの場合はn+=1)の分散処理ノード、n-番目(n-=n-1、ただしn=1の場合はn-=N)の分散処理ノードと双方向の通信が同時に可能なM個(Mは2以上の整数)の通信部を備え、各分散処理ノードは、学習対象のニューラルネットワークの重み毎の分散データをMグループ分生成し、N個の分散処理ノードのうち、予め指定された1番目の分散処理ノードは、自ノードで生成されたMグループ分の分散データを第1の集計データとして、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して2番目の分散処理ノードに向けて送信し、N個の分散処理ノードのうち、前記1番目を除くk番目(k=2,・・・,N)の分散処理ノードは、(k-1)番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データと自ノードで生成されたグループ毎の分散データとの和を、重み毎およびグループ毎に求めて更新後の第1の集計データを生成し、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介してk+番目(k+=k+1、ただしk=Nの場合はk+=1)の分散処理ノードに向けて送信し、前記1番目の分散処理ノードは、N番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データを第2の集計データとして、これらの第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して前記N番目の分散処理ノードに向けて送信し、前記k番目の分散処理ノードは、k+番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して(k-1)番目の分散処理ノードに向けて送信し、前記1番目の分散処理ノードは、2番目の分散処理ノードから自ノードの前記M個の通信部を介して第2の集計データを受信し、各分散処理ノードは、受信した前記第2の集計データに基づいて前記ニューラルネットワークの重みを更新することを特徴とするものである。
【0013】
また、本発明は、リング状に配置され、隣接するノードと通信路を介して互いに接続されたN個(Nは2以上の整数)の分散処理ノードを備え、n番目(n=1,・・・,N)の分散処理ノードが、それぞれn+番目(n+=n+1、ただしn=Nの場合はn+=1)の分散処理ノード、n-番目(n-=n-1、ただしn=1の場合はn-=N)の分散処理ノードと双方向の通信が同時に可能なM個(Mは2以上の整数)の通信部を備えたシステムにおける分散処理方法であって、各分散処理ノードが、学習対象のニューラルネットワークの重み毎の分散データをMグループ分生成する第1のステップと、N個の分散処理ノードのうち、予め指定された1番目の分散処理ノードが、自ノードで生成されたMグループ分の分散データを第1の集計データとして、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して2番目の分散処理ノードに向けて送信する第2のステップと、N個の分散処理ノードのうち、前記1番目を除くk番目(k=2,・・・,N)の分散処理ノードが、(k-1)番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データと自ノードで生成されたグループ毎の分散データとの和を、重み毎およびグループ毎に求めて更新後の第1の集計データを生成し、これらの第1の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介してk+番目(k+=k+1、ただしk=Nの場合はk+=1)の分散処理ノードに向けて送信する第3のステップと、前記1番目の分散処理ノードが、N番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第1の集計データを第2の集計データとして、これらの第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して前記N番目の分散処理ノードに向けて送信する第4のステップと、前記k番目の分散処理ノードが、k+番目の分散処理ノードから自ノードの前記M個の通信部を介して受信したグループ毎の第2の集計データを自ノードのグループ毎の前記通信部からグループ毎の前記通信路を介して(k-1)番目の分散処理ノードに向けて送信する第5のステップと、前記1番目の分散処理ノードが、2番目の分散処理ノードから自ノードの前記M個の通信部を介して第2の集計データを受信する第6のステップと、各分散処理ノードが、受信した前記第2の集計データに基づいて前記ニューラルネットワークの重みを更新する第7のステップとを含むことを特徴とするものである。
【発明の効果】
【0014】
本発明によれば、集約通信(第1の集計データをn番目の分散処理ノードからn+番目の分散処理ノードに送信する処理)が完了するまで分配通信(第2の集計データをn番目の分散処理ノードからn-番目の各分散処理ノードに分配する処理)の開始を待つ必要がない。本発明では、集約通信中であっても、集計を終えたデータの一部から分配通信を開始することが可能であるため、集約通信を完了してから分配通信を開始するという従来技術と比較して、集約通信の開始から分配通信の完了までの時間を短縮することが可能であるため、より高速な深層学習の分散システムを提供することが可能である。また、本発明では、分散処理ノード間をM本の通信路で接続し、各分散処理ノードが備えるM個の通信部が各々集約通信と分配通信とを行う。このため、本発明では、各分散処理ノードが備える1個の通信部で集約通信と分配通信とを行う分散システムと比較すると、各通信路と各通信部とが転送するデータ量を1/Mに削減することができる。その結果、本発明では、データの転送に要する時間を大幅に短縮することが可能である。また、本発明では、1番目の分散処理ノードが第2の集計データの取得を完了した時点で他の分散処理ノードが第2の集計データの取得を完了したことが保証されるため、信頼性の高い深層学習の分散処理システムを提供することが可能である。
【図面の簡単な説明】
【0015】
【
図1】
図1は、本発明の第1の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【
図2】
図2は、本発明の第1の実施例に係る分散処理ノードの構成例を示すブロック図である。
【
図3】
図3は、本発明の第1の実施例に係る分散処理ノードの構成例を示すブロック図である。
【
図4】
図4は、本発明の第1の実施例に係る分散処理ノードのサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。
【
図5】
図5は、本発明の第1の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と分配通信処理のシーケンスを示す図である。
【
図6】
図6は、本発明の第1の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と分配通信処理のシーケンスを示す図である。
【
図7】
図7は、本発明の第1の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と分配通信処理のシーケンスを示す図である。
【
図8】
図8は、本発明の第1の実施例に係る分散処理ノードの重み更新処理を説明するフローチャートである。
【
図9】
図9は、本発明の第2の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【
図10】
図10は、本発明の第2の実施例に係る分散処理ノードの構成例を示すブロック図である。
【
図11】
図11は、本発明の第2の実施例に係る分散処理ノードの構成例を示すブロック図である。
【
図12】
図12は、本発明の第1、第2の実施例に係る分散処理ノードを実現するコンピュータの構成例を示すブロック図である。
【
図13】
図13は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示す図である。
【発明を実施するための形態】
【0016】
[第1の実施例]
以下、本発明の実施例について図面を参照して説明する。
図1は本発明の第1の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
図1の分散処理システムは、N個(Nは2以上の整数)の分散処理ノード1[n](n=1,・・・,N)と、番号nの分散処理ノード1[n]が次の番号n
+(n
+=n+1、ただしn=Nの場合はn
+=1)の分散処理ノード1[n
+]と互いに双方向に通信するためのM本(Mは2以上の整数)の通信路2[n,m](n=1,・・・,N、m=1,・・・,M)とを備える。なお、任意の通信路2[n,m]には、伝送路の他に、通信を中継する中継処理ノードが任意に介在することも可能である。
【0017】
図2は分散処理ノード1[1]の構成例を示すブロック図である。分散処理ノード1[1]は、グループ毎に設けられ、双方向の通信が同時に可能なM個の通信部10[1,m](n=1,・・・,N、m=1,・・・,M)と、図示しないデータ収集ノードから学習用のサンプルデータを受け取るサンプル入力部16と、サンプルデータが入力されたときに、ニューラルネットワークの重みw[z]の各々について、ニューラルネットワークの損失関数の勾配G[z,1,s]をサンプルデータ毎に計算する勾配計算処理部17と、サンプルデータ毎の勾配G[z,1,s]を集計した数値である分散データD[z,1]を重みw[z]毎に生成して保持するノード内集計処理部18と、集計データに基づいてニューラルネットワークの重みを更新する重み更新処理部20と、ソフトウェア的に構築された数学モデルであるニューラルネットワーク21と、ノード内集計処理部18によって生成された分散データD[z,1]をMグループ分に分割するデータ分割部22とを備えている。
【0018】
図3は分散処理ノード1[k](k=2,・・・,N)の構成例を示すブロック図である。分散処理ノード1[k]は、グループ毎に設けられ、双方向の通信が同時に可能なM個の通信部10[k,m]と、サンプル入力部16と、サンプルデータが入力されたときに、ニューラルネットワークの重みw[z]の各々について、ニューラルネットワークの損失関数の勾配G[z,k,s]をサンプルデータ毎に計算する勾配計算処理部17と、サンプルデータ毎の勾配G[z,k,s]を集計した数値である分散データD[z,k]を重みw[z]毎に生成して保持するノード内集計処理部18と、受信した中間集計データと自ノードで生成された分散データD[z,k]との和を、重み毎およびグループ毎に求めて更新後の中間集計データを生成する集計データ生成部19と、重み更新処理部20と、ニューラルネットワーク21と、ノード内集計処理部18によって生成された分散データD[z,k]をMグループ分に分割するデータ分割部22とを備えている。
【0019】
各分散処理ノード1[n]の通信部10[n,m]は、それぞれ双方向の通信が同時に可能な通信ポート100[n,m]と通信ポート101[n,m]とを備える。通信ポート100[n,m]は、分散処理ノード1[n]が分散処理ノード1[n+](n+=n+1、ただしn=Nの場合はn+=1)と双方向の通信を行うための通信ポートであり、通信路2[n,m]と接続される。また、通信ポート101[n,m]は、分散処理ノード1[n]が分散処理ノード[n-](n-=n-1、ただしn=1の場合はn-=N)と双方向の通信を行うための通信ポートであり、通信路2[n-,m]と接続される。
【0020】
図4は分散処理ノード1[n]のサンプルデータ入力処理と勾配計算処理とノード内集計処理とを説明するフローチャートである。
各分散処理ノード1[n]のサンプル入力部16は、図示しないデータ収集ノードから異なるS個(Sは2以上の整数)のサンプルデータx[n,s](s=1,・・・,S)をミニバッチ毎に入力する(
図4ステップS100)。
【0021】
なお、本発明は、データ収集ノードによるサンプルデータの収集方法、および収集したサンプルデータをN個の集合に振り分けて各分散処理ノード1[n]へ分配する方法に限定されるものではなく、これらの方法の如何を問わず適用が可能である。
【0022】
各分散処理ノード1[n]の勾配計算処理部17は、サンプルデータx[n,s]が入力されたとき、学習対象のニューラルネットワーク21のz個(Zは2以上の整数)の重みw[z](z=1,・・・,Z)の各々について、ニューラルネットワーク21の損失関数の勾配G[z,n,s]をサンプルデータx[n,s]毎に計算する(
図4ステップS101)。
【0023】
ニューラルネットワーク21を各分散処理ノード1[n]にソフトウェアで構築する方法、ニューラルネットワーク21の重みw[z]、ニューラルネットワーク21の性能の悪さを示す指標である損失関数、および損失関数の勾配G[z,n,s]については周知の技術であるので、詳細な説明は省略する。
【0024】
続いて、各分散処理ノード1[n]のノード内集計処理部18は、サンプルデータ毎の勾配G[z,n,s]を集計した数値である分散データD[z,n](z=1,・・・,Z)を、重みw[z]毎に生成して保持する(
図4ステップS102)。分散データD[z,n]の計算式は以下のとおりである。
【0025】
【0026】
なお、ステップS101の勾配計算処理とステップS102のノード内集計処理とは、サンプルデータ単位でパイプライン化する(あるサンプルデータに対して勾配計算処理を行うと同時にその一つ前のサンプルデータから得た勾配を集計するノード内集計処理とを同時に実行する)ことができる。
【0027】
各分散処理ノード1[n]のデータ分割部22は、ノード内集計処理部18によって生成されたZ個の分散データD[z,n]をM個に分割する(
図4ステップS103)。
【0028】
各通信部10[n,m](n=1,・・・,N、m=1,・・・,M)のデータ転送速度が全て同じである場合、データ分割部22は、分散データのデータ量が均等になるよう分割(グループ分け)することが、以後に説明するノード間集計処理の高速化のために望ましい。このような分割の方法としては、例えば、Z個の分散データD[z,n]を番号zの順にZ/M個ずつに分割する方法がある。すなわち、M個のグループの各要素を、D[j,n](j=Z/M×(m-1)+1,・・・,Z/M×m,n=1,・・・,N、m=1,・・・,M)とすることにより、各グループのデータ量を均等化できる。
【0029】
ただし、この分割方法が成立するのはZ/Mが整数の場合である。データ分割部22は、Z/Mが整数ではない場合、各グループに属する分散データの個数ができるだけZ/Mに近い値となるよう配分する。
上記の説明から明らかなように、番号jは、重みの番号zのうち、各分散処理ノード1[n]内のグループ毎(通信部毎)に異なる範囲の数値をとる。
【0030】
さらに、各分散処理ノード1[n]は、分散データD[j,n]を生成した後、分散処理ノード間の集約通信を行い、集計データを生成するためのノード間集計処理を行う。
図5~
図7に、各分散処理ノード1[n]の集約通信処理とノード間集計処理と分配通信処理のシーケンスを示す。なお、
図6は、
図5の80の一部の処理を示している。また、81は分散処理ノード1[1]におけるノード間集計処理を示している。同様に、
図6の90,91,92は分散処理ノード1[N-2],1[N-1]、1[N]におけるノード間集計処理を示している。
図7は、
図5の82の一部の処理、すなわち分散処理ノード1[N],1[N-1]、1[N-2]の分配通信処理を示している。
【0031】
まず、複数の分散処理ノード1[n]のうち、予め定められた1番目の分散処理ノード1[1]の各通信部10[1,m]は、自ノードのデータ分割部22によって生成された分散データD[j,1]を中間集計データRtm[j,1]として、この中間集計データRtm[j,1]をパケット化し、生成した集約通信パケットSP[p,1,m](p=1,・・・,P、Pは2以上の整数)を通信ポート100[1,m]に出力する。このM個のグループの集約通信パケットSP[p,1,m]は、それぞれ通信ポート10[1,m]から通信路2[1,m]を介して次の番号の分散処理ノード1[2]に送信される(
図5ステップS104)。このときの中間集計データ中間集計データRtm[j,1]は、分散データD[j,1]と同じである。
Rtm[j,1]=D[j,1] ・・・(2)
【0032】
次に、複数の分散処理ノード1[n]のうち、1番目とN番目とを除く、予め定められた中間の分散処理ノード1[i](i=2,・・・,N-1)の各通信部10[i,m]は、それぞれ分散処理ノード1[i-1]から集約通信パケットSP[p,i-1,m](p=1,・・・,P)を通信路2[i-1,m]および通信ポート101[i,m]を介して受信し、受信した集約通信パケットSP[p,i-1,m]から中間集計データRtm[j,i-1]を取得する(
図5ステップS105)。
【0033】
中間の分散処理ノード1[i](i=2,・・・,N-1)の集計データ生成部19は、自ノードの通信部10[i,m]によって取得された中間集計データRtm[j,i-1]と自ノードのデータ分割部22によって生成されたD[j,i]との和を、対応する重みw[j]毎(番号j毎)およびグループ毎に求めることにより、中間集計データRtm[j,i]をグループ毎に生成する(
図5ステップS106)。中間集計データRtm[j,i]の計算式は以下のとおりである。
Rtm[j,i]=Rtm[j,i-1]+D[j,i]・・・(3)
【0034】
そして、中間の分散処理ノード1[i](i=2,・・・,N-1)の各通信部10[i,m]は、自ノードの集計データ生成部19によって生成された中間集計データRtm[j,i]をパケット化し、生成した集約通信パケットSP[p,i,m](p=1,・・・,P)を通信ポート100[i,m]に出力する。この集約通信パケットSP[p,i,m]は、それぞれ通信ポート100[i,m]から通信路2[i,m]を介して次の番号の分散処理ノード1[i+1]に送信される(
図5ステップS107)。
【0035】
複数の分散処理ノード1[n]のうち、予め定められたN番目の分散処理ノード1[N]の各通信部10[N,m]は、それぞれ分散処理ノード1[N-1]から集約通信パケットSP[p,N-1,m](p=1,・・・,P)を通信路2[N-1,m]および通信ポート101[N,m]を介して受信し、受信した集約通信パケットSP[p,N-1,m]から中間集計データRtm[j,N-1]を取得する(
図5ステップS108)。
【0036】
N番目の分散処理ノード1[N]の集計データ生成部19は、自ノードの通信部10[N,m](m=1,・・・,M)によって取得された中間集計データRtm[j,N-1]と自ノードのデータ分割部22によって生成されたD[j,N]との和を、対応する重みw[j]毎(番号j毎)およびグループ毎に求めることにより、中間集計データRtm[j,N]をグループ毎に生成する(
図5ステップS109)。中間集計データRtm[j,N]の計算式は以下のとおりである。
Rtm[j,N]=Rtm[j,N-1]+D[j,N]・・・(4)
【0037】
そして、N番目の分散処理ノード1[N]の各通信部10[N,m]は、自ノードの集計データ生成部19によって生成された中間集計データRtm[j,N]をパケット化し、生成した集約通信パケットSP[p,N,m](p=1,・・・,P)を通信ポート100[N,m]に出力する。この集約通信パケットSP[p,N,m]は、それぞれ通信ポート100[N,m]から通信路2[N,m]を介して1番目の分散処理ノード1[1]に送信される(
図5ステップS110)。
【0038】
このように、式(2)、式(3)、式(4)により計算された中間集計データRtm[j,N]は、各分散処理ノード1[n]で生成されたD[j,N]に基づいて計算される。中間集計データRtm[j,N]の値は以下の式により表すことができる。
【0039】
【0040】
次に、中間集計データRtm[j,N]を集計データRm[j]として、各分散処理ノード1[n]に分配する分配通信を行う。
【0041】
1番目の分散処理ノード1[1]の各通信部10[1,m]は、分散処理ノード1[N]から集約通信パケットSP[p,N,m](p=1,・・・,P)を通信路2[N,m]および自ノードの通信ポート101[1,m]を介して受信し、受信した集約通信パケットSP[p,N,m]から中間集計データRtm[j,N]を取得する(
図5ステップS111)。
【0042】
1番目の分散処理ノード1[1]の各通信部10[1,m]は、受信した中間集計データRtm[j,N]を集計データRm[j]として、この集計データRm[j]をパケット化し、生成した分配通信パケットDP[p,1,m](p=1,・・・,P)を自ノードの通信ポート101[1,m]に出力する。この分配通信パケットDP[p,1,m]は、それぞれ通信ポート101[1,m]から通信路2[N,m]を介してN番目の分散処理ノード1[N]に送信される(
図5ステップS112)。すなわち、分散処理ノード1[1]は、分散処理ノード1[N]からの中間集計データRtm[j,N]を集計データRm[j]として分散処理ノード1[N]に戻すことになる。集計データRm[j]は、中間集計データRtm[j,N]と同じである。
【0043】
【0044】
続いて、複数の分散処理ノード1[n]のうち、1番目を除く分散処理ノード1[k](k=N,・・・,2)の各通信部10[k,m]は、次の番号の分散処理ノード1[k
+](k
+=k+1、ただしk=Nの場合はk
+=1)から分配通信パケットDP[p,k
+,m](p=1,・・・,P)を通信路2[k,m]および自ノードの通信ポート100[k,m]を介して受信し、受信した分配通信パケットDP[p,k
+,m]から集計データRm[j]を取得する(
図5ステップS113)。
【0045】
分散処理ノード1[k](k=N,・・・,2)の各通信部10[k,m]は、受信した集計データRm[j]をパケット化し、生成した分配通信パケットDP[p,k,m](p=1,・・・,P)を自ノードの通信ポート101[k,m]に出力する。この分配通信パケットDP[p,k,m]は、それぞれ通信ポート101[k,m]から通信路2[k-1,m]を介して分散処理ノード1[k-1]に送信される(
図5ステップS114)。
【0046】
1番目の分散処理ノード1[1]の各通信部10[1,m]は、分散処理ノード1[2]から分配通信パケットDP[p,2,m](p=1,・・・,P)を通信路2[1,m]および自ノードの通信ポート100[1,m]を介して受信し、受信した分配通信パケットDP[p,2,m]から集計データRm[j]を取得する(
図5ステップS115)。
【0047】
ここで、1番目の分散処理ノード1[1]が、集計データRm[j]を正常に受信するためには、他の分散処理ノード1[k](k=N,・・・,2)が集計データRm[j]を正常に受信することが必要である。通信路2[n,m](n=1,・・・,N)や通信部10[n,m]は、集計データRm[j]のエラーを正常に戻す機能を有していない。
【0048】
したがって、分散処理ノード1[1]が備えるM個の通信部10[1,m]が集計データRm[j]を正常に受信した場合、全ての分散処理ノード1[n]が正常に集計データRm[j]を受信できたことが保証される。分散処理ノード1[1]の各通信部10[1,m]のうち少なくとも1つが集計データRm[j]を正常に受信できなかった場合は、ステップS104に戻って集約通信からやり直すようにすればよい。
【0049】
なお、分散処理ノード1[1]の各通信部10[1,m]が集計データRm[j]を正常に受信できたかどうかは、例えばステップS112で送信した集計データRm[j]とステップS115で受信した集計データRm[j]とを比較することにより、判定することができる。すなわち、送信した集計データRm[j]と受信した集計データRm[j]とが一致すれば、集計データRm[j]を正常に受信できたと判定できる。
【0050】
以上の分配通信により、全ての分散処理ノード1[n]は、同一の集計データRm[j]を取得することができる。
集約通信は、分散処理ノード1[1]→分散処理ノード1[2]→・・・→分散処理ノード1[N]→分散処理ノード1[1]という経路で行われる。分配通信は、分散処理ノード1[1]→分散処理ノード1[N]→・・・→分散処理ノード1[2]→分散処理ノード1[1]という経路で行われる。
【0051】
つまり、集約通信と分配通信とは、互いに通信の方向が逆になる。集約通信と分配通信とは、双方向の通信を同時に行うことが可能な通信ポート100[n,m],101[n,m]と通信路2[n,m]とを介して行わるため、集約通信が完了するまで分配通信の開始を待つ必要がない。
【0052】
すなわち、分散処理ノード1[1]が中間集計データRtm[j,1]の送信を完了する前に、分散処理ノード1[1]が中間集計データRtm[j,N]を受信開始した場合は、この中間集計データ中間集計データRtm[j,N]を集計データRm[j]とした分配通信を開始できる。
【0053】
図8は分散処理ノード1[n]の重み更新処理を説明するフローチャートである。各分散処理ノード1[n]の重み更新処理部20は、自ノードの通信部10[n,m]によって取得された集計データRm[j]を受信すると(
図8ステップS122においてYES)、受信した集計データRm[j]に基づいて、自ノード内のニューラルネットワーク21の重みw[j]を更新する重み更新処理を行う(
図8ステップS123)。重み更新処理においては、集計データRm[j]が示す、損失関数の勾配に基づいて損失関数が最小になるように重みw[j]を番号j毎に更新すればよい。重みw[j]の更新は周知の技術であるので、詳細な説明は省略する。
【0054】
このように、重み更新処理は、重みw[j]の番号jの順番に取得した集計データRm[j]に基づいて、重みw[j]を更新する処理である。このため、各分散処理ノード1[n]は、重みw[j]に対する重み更新処理を、番号jの順番に行うことができる。
【0055】
重み更新処理の終了により、1回のミニバッチ学習が終了し、各分散処理ノード1[n](n=1,・・・,N)は、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード1[n]は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、自ノードのニューラルネットワークの推論精度を向上させる。
【0056】
本実施例で示したように、集約通信が完了するまで分配通信の開始を待つ必要がなく、集約通信中であっても、集計を終えたデータの一部から分配通信を開始することが可能であるため、集約通信を完了してから分配通信を開始するという従来技術と比較して、集約通信の開始から分配通信の完了までの時間を短縮することが可能であるため、より高速な深層学習の分散システムを提供することが可能である。
【0057】
また、本実施例では、分散処理ノード間をM本の通信路2[n,m]で接続し、各分散処理ノード1[n]が備えるM個の通信部10[n,m]が各々集約通信と分配通信とを行う。このため、本実施例では、各分散処理ノードが備える1個の通信部で集約通信と分配通信とを行う分散システムと比較すると、各通信路2[n,m]と各通信部10[n,m]とが転送するデータ量を1/Mに削減することができる。その結果、本実施例では、データの転送に要する時間が集約通信と分配通信にかかる時間の大半を占める分散処理システムにおいて、データの転送に要する時間を大幅に短縮することが可能である。
【0058】
また、本実施例では、分散処理ノード1[1]が集計データRm[j]の取得を完了した時点で他の分散処理ノード1[k](k=2,・・・,N)が集計データRm[j]の取得を完了したことが保証されるため、信頼性の高い深層学習の分散処理システムを提供することが可能である。
【0059】
[第2の実施例]
次に、本発明の第2の実施例について説明する。
図9は本発明の第2の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
図9の分散処理システムは、N個の分散処理ノード1a[n](n=1,・・・,N)と、M本の通信路2[n,m](n=1,・・・,N、m=1,・・・,M)とを備える。なお、任意の通信路2[n,m]には、伝送路の他に、通信を中継する中継処理ノードが任意に介在することも可能である。
【0060】
図10は分散処理ノード1a[1]の構成例を示すブロック図である。分散処理ノード1a[1]は、M個の通信部10[1,m]と、M個の分散データ生成部11[1,m]と、ニューラルネットワーク21とを備える。通信部10[1,m]と分散データ生成部11[1,m]との間は、内部通信路12[1]によって接続されている。
各分散データ生成部11[1,m]は、それぞれサンプル入力部16aと、勾配計算処理部17aと、ノード内集計処理部18aと、重み更新処理部20aとを備えている。
【0061】
図11は分散処理ノード1a[k](k=2,・・・,N)の構成例を示すブロック図である。分散処理ノード1a[k]は、M個の通信部10[k,m]と、M個の分散データ生成部11[k,m]と、ニューラルネットワーク21とを備える。通信部10[k,m]と分散データ生成部11[k,m]との間は、内部通信路12[k]によって接続されている。
各分散データ生成部11[k,m]は、それぞれサンプル入力部16aと、勾配計算処理部17aと、ノード内集計処理部18aと、集計データ生成部19aと、重み更新処理部20aとを備えている。
【0062】
各分散処理ノード1a[n]の通信部10[n,m]は、それぞれ双方向の通信が同時に可能な通信ポート100[n,m]と通信ポート101[n,m]とを備える。通信ポート100[n,m]は、分散処理ノード1a[n]が分散処理ノード1a[n+](n+=n+1、ただしn=Nの場合はn+=1)と双方向の通信を行うための通信ポートであり、通信路2[n,m]と接続される。また、通信ポート101[n,m]は、分散処理ノード1a[n]が分散処理ノード[n-](n-=n-1、ただしn=1の場合はn-=N)と双方向の通信を行うための通信ポートであり、通信路2[n-,m]と接続される。
【0063】
本実施例においても、分散処理ノード1a[n]のサンプルデータ入力処理と勾配計算処理とノード内集計処理の流れは第1の実施例と同様である。
各分散処理ノード1a[n]の各分散データ生成部11[n,m]内のサンプル入力部16aは、それぞれ図示しないデータ収集ノードから異なるS個(Sは2以上の整数)のサンプルデータx[n,m,s](s=1,・・・,S)をミニバッチ毎に入力する(
図4ステップS100)。
【0064】
各分散処理ノード1a[n]の各分散データ生成部11[n,m]内の勾配計算処理部17aは、サンプルデータx[n,m,s]が入力されたとき、学習対象のニューラルネットワーク21のZ個(Zは2以上の整数)の重みw[z](z=1,・・・,Z)の各々について、ニューラルネットワーク21の損失関数の勾配G[z,n,m,s]をサンプルデータx[n,m,s]毎に計算する(
図4ステップS101)。
【0065】
続いて、各分散処理ノード1a[n]の各分散データ生成部11[n,m]内のノード内集計処理部18aは、ノード内集計処理を行う(
図4ステップS102)。本実施例におけるノード内集計処理は、分散処理ノード1[n]が計算したサンプルデータx毎の勾配G[z,n,m,s]を内部通信路12[n]を介して集計し、分散データD[j,n]を生成する処理である。ノード内集計処理によって、各分散データ生成部11[n,m]内のノード内集計処理部18aは、それぞれ重みの番号jの範囲が異なる分散データD[j,n]を取得する。分散データD[j,n]の計算式は、以下の通りである。
【0066】
【0067】
第1の実施例と同様に、番号jは、重みの番号zのうち、各分散処理ノード1a[n]内のグループ毎(分散データ生成部毎)に異なる範囲の数値をとる。
上記のノード内集計処理の例として、ring all reduceと呼ばれる処理がある(文献「kfukuda,上野裕一郎,“分散深層学習を支える技術:AllReduceアルゴリズム”,2018年,インターネット<https://research.preferred.jp/2018/07/prototype-allreduce-library/>」)。本実施例では、各分散データ生成部11[n,m]に全ての分散データD[z,n]が格納されているのではなく、分散データD[j,m]を構成する数値のみ、すなわち全ての分散データD[z,m]をM個のグループに分けたときの1個のグループを構成する数値のみがこのグループに対応する分散データ生成部11に格納された状態となる。したがって、各分散データ生成部11[n,m]は、上記の例に示されたような効率的なノード内集計処理を行うのみで、分散データD[j,m]を取得することができる。
【0068】
さらに、各分散処理ノード1a[n]は、分散データ[j,n]を、各分散データ生成部11[n,m]から、内部通信路12[n]を介して通信部10[n,m]に転送し、分散処理ノード間の集約通信を行い、集計データを生成するためのノード間集計処理を行う。
【0069】
本実施例においても、分散処理ノード1a[n]の集約通信処理とノード間集計処理と分配通信処理の流れは第1の実施例と同様である。
まず、複数の分散処理ノード1a[n]のうち、予め定められた1番目の分散処理ノード1a[1]の各通信部10[1,m]は、それぞれ対応する分散データ生成部11[1,m]から転送された分散データD[j,1]を中間集計データRtm[j,1]として、この中間集計データRtm[j,1]をパケット化し、生成した集約通信パケットSP[p,1,m](p=1,・・・,P)を通信ポート100[1,m]に出力する。この集約通信パケットSP[p,1,m]は、それぞれ通信ポート100[1,m]から通信路2[1,m]を介して次の番号の分散処理ノード1a[2]に送信される(
図5ステップS104)。
【0070】
次に、複数の分散処理ノード1a[n]のうち、1番目とN番目とを除く、予め定められた中間の分散処理ノード1a[i](i=2,・・・,N-1)の各通信部10[i,m]は、それぞれ分散処理ノード1a[i-1]から集約通信パケットSP[p,i-1,m]を通信路2[i-1,m]および通信ポート101[i,m]を介して受信し、受信した集約通信パケットSP[p,i-1,m]から中間集計データRtm[j,i-1]を取得する(
図5ステップS105)。
【0071】
分散処理ノード1a[i]の各分散データ生成部11[i,m]内の集計データ生成部19aは、それぞれ対応する通信部10[i,m]によって取得された中間集計データRtm[j,i-1]と各分散データ生成部11[i,m]内のノード内集計処理部18aによって生成された分散データD[j,i]との和を、対応する重みw[j]毎(番号j毎)およびグループ毎に求めることにより、中間集計データRtm[j,i]をグループ毎に生成する(
図5ステップS106)。
【0072】
そして、分散処理ノード1a[i]の各通信部10[i,m]は、それぞれ対応する分散データ生成部11[i,m]の集計データ生成部19aによって生成された中間集計データRtm[j,i]をパケット化し、生成した集約通信パケットSP[p,i,m](p=1,・・・,P)を通信ポート100[i,m]に出力する。この集約通信パケットSP[p,i,m]は、それぞれ通信ポート100[i,m]から通信路2[i,m]を介して次の番号の分散処理ノード1a[i+1]に送信される(
図5ステップS107)。
【0073】
複数の分散処理ノード1a[n]のうち、予め定められたN番目の分散処理ノード1a[N]の各通信部10[N,m]は、それぞれ分散処理ノード1a[N-1]から集約通信パケットSP[p,N-1,m]を通信路2[N-1,m]および通信ポート101[N,m]を介して受信し、受信した集約通信パケットSP[p,N-1,m]から中間集計データRtm[j,N-1]を取得する(
図5ステップS108)。
【0074】
N番目の分散処理ノード1a[N]の各分散データ生成部11[N,m]内の集計データ生成部19aは、それぞれ対応する通信部10[N,m]によって取得された中間集計データRtm[j,N-1]と各分散データ生成部11[N,m]内のノード内集計処理部18aによって生成された分散データD[j,N]との和を、対応する重みw[j]毎(番号j毎)およびグループ毎に求めることにより、中間集計データRtm[j,N]をグループ毎に生成する(
図5ステップS109)。
【0075】
そして、N番目の分散処理ノード1a[N]の各通信部10[N,m]は、それぞれ対応する分散データ生成部11[N,m]の集計データ生成部19aによって生成された中間集計データRtm[j,N]をパケット化し、生成した集約通信パケットSP[p,N,m]を通信ポート100[N,m]に出力する。この集約通信パケットSP[p,N,m]は、それぞれ通信ポート100[N,m]から通信路2[N,m]を介して1番目の分散処理ノード1a[1]に送信される(
図5ステップS110)。
【0076】
次に、中間集計データRtm[j,N]を集計データRm[j]として、各分散処理ノード1a[n]に分配する分配通信を行う。
1番目の分散処理ノード1a[1]の各通信部10[1,m]は、分散処理ノード1a[N]から集約通信パケットSP[p,N,m]を通信路2[N,m]および自ノードの通信ポート101[1,m]を介して受信し、受信した集約通信パケットSP[p,N,m]から中間集計データRtm[j,N]を取得する(
図5ステップS111)。
【0077】
1番目の分散処理ノード1a[1]の各通信部10[1,m]は、受信した中間集計データRtm[j,N]を集計データRm[j]として、この集計データRm[j]をパケット化し、生成した分配通信パケットDP[p,1,m]を自ノードの通信ポート101[1,m]に出力する。この分配通信パケットDP[p,1,m]は、それぞれ通信ポート101[1,m]から通信路2[N,m]を介してN番目の分散処理ノード1a[N]に送信される(
図5ステップS112)。
【0078】
続いて、複数の分散処理ノード1a[n]のうち、1番目を除く分散処理ノード1a[k](k=N,・・・,2)の各通信部10[k,m]は、次の番号の分散処理ノード1a[k
+](k
+=k+1、ただしk=Nの場合はk
+=1)から分配通信パケットDP[p,k
+,m]を通信路2[k,m]および自ノードの通信ポート100[k,m]を介して受信し、受信した分配通信パケットDP[p,k
+,m]から集計データRm[j]を取得する(
図5ステップS113)。
【0079】
分散処理ノード1a[k]の各通信部10[k,m]は、受信した集計データRm[j]をパケット化し、生成した分配通信パケットDP[p,k,m]を自ノードの通信ポート101[k,m]に出力する。この分配通信パケットDP[p,k,m]は、それぞれ通信ポート101[k,m]から通信路2[k-1,m]を介して分散処理ノード1a[k-1]に送信される(
図5ステップS114)。
【0080】
1番目の分散処理ノード1a[1]の各通信部10[1,m]は、分散処理ノード1a[2]から分配通信パケットDP[p,2,m]を通信路2[1,m]および自ノードの通信ポート100[1,m]を介して受信し、受信した分配通信パケットDP[p,2,m]から集計データRm[j]を取得する(
図5ステップS115)。集計データRm[j]の計算式は以下のとおりである。
【0081】
【0082】
さらに、各分散処理ノード1a[n]は、取得した集計データRm[j]を、各通信部10[n,m]から内部通信路12[n]を介して分散データ生成部11[n,m]に転送する。
さらに、各分散処理ノード1a[n]の各分散データ生成部11[n,m]は、ノード内分配処理を行う。ノード内分配処理は、各分散データ生成部11[n,m]が取得した集計データRm[j]を、内部通信路12[n]を介して、分散処理ノード1a[n]が備える他の分散データ生成部[n,m’](m’=1,・・・,M,m’≠m)に分配することにより、分散処理ノード1a[n]が備える全ての分散データ生成部11[n,m]が、全ての集計データRm[j]を取得する処理である。
【0083】
本実施例においても、分散処理ノード1a[n]の重み更新処理の流れは第1の実施例と同様である。
各分散処理ノード1a[n]の各分散データ生成部11[n,m]内の重み更新処理部20aは、集計データRm[j]を受信すると(
図8ステップS122においてYES)、受信した集計データRm[j]に基づいて、自ノード内のニューラルネットワーク21の重みw[j]を更新する重み更新処理を行う(
図8ステップS123)。
【0084】
重み更新処理の終了により、1回のミニバッチ学習が終了し、各分散処理ノード1a[n]は、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード1a[n]は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、自ノードのニューラルネットワークの推論精度を向上させる。
【0085】
上述したように、分散データD[j,n](式(7))を計算するノード内集計処理は、重みの番号j別の処理である。同様に、集計データRm[j](式(8))を計算する集約通信処理も、重みの番号j別の処理と単純なデータ送受信(重みの番号j別の数値の通信)の組み合わせである。さらに、重み更新処理も、重みの番号j別の処理である。また、分散データ生成部11[n,m]から通信部10[n,m]への分散データD[j,n]の転送と、分配通信と、通信部10[n,m]から分散データ生成部11[n,m]への集計データRm[j]の転送と、ノード内分配処理とは、単純なデータ転送(重みの番号j別の数値の転送)あるいはデータ送受信(重みの番号j別の数値の通信)であるため、重みの番号j別の処理である。
【0086】
したがって、サンプルデータ毎の勾配計算処理を終えた後の処理(ノード内集計処理と、分散データ生成部11[n,m]から通信部10[n,m]への分散データD[j,n]の転送と、集約通信処理と、分配通信処理と、通信部10[n,m]から分散データ生成部11[n,m]への集計データRm[j]の転送処理と、ノード内分配処理と、重み更新処理)については、重みの番号z単位で、パイプライン化が可能である。
【0087】
このように、ノード内集計処理から重み更新処理までの処理をほほ同時に(数値を単位としたパイプライン処理で)行うことが可能であり、各通信や各処理が終了するまで、次の処理を開始できなかった従来技術と比較したとき、処理時間の大幅な短縮が可能となる。なお、データ転送やデータ送受信の最小単位は、複数の数値をカプセル化したパケット単位で行うことが一般的であり、このようなシステムでは、パケット単位でのパイプライン処理となる。
【0088】
また、第1の実施例と同様に、本実施例では、分散処理ノード間をM本の通信路2[n,m]で接続し、各分散処理ノード1a[n]が備えるM個の通信部10[n,m]が各々集約通信と分配通信とを行う。集約通信と分配通信とを各々M並列化しているため、本実施例では、各分散処理ノードが備える1個の通信部で集約通信と分配通信とを行う分散システムと比較すると、各通信路2[n,m]と各通信部10[n,m]とが転送するデータ量を1/Mに削減することができる。その結果、本実施例では、データの転送に要する時間が集約通信と分配通信にかかる時間の大半を占める分散処理システムにおいて、データの転送に要する時間を大幅に短縮することが可能である。
【0089】
また、本実施例では、各分散処理ノード1a[n]が通信部10[n,m]と同数の分散データ生成部11[n,m]を備えることによって、一般的には処理負荷の大きい勾配計算処理をM並列化しているため、深層学習処理の大幅な時間短縮が可能である。
【0090】
また、各分散処理ノード1a[n]では、データ量を1/Mに分割したデータの各々を、通信部10[n,m]と対応する分散データ生成部11[n,m]との間で転送する処理を行う(データ転送をM並列化している)。この転送処理では、番号m毎(グループ毎)に異なる経路が使用されるため、各転送が同時に行われても経路の共用が原因の転送速度の劣化は生じない。
【0091】
また、内部通信路12[n]の例としては、PCI Express規格に準拠した通信路がある。このような内部通信路12[n]では、複数デバイス(本実施例では通信部や分散データ生成部)間でデータ転送を可能するためのスイッチが存在する。また、通常は番号m後のデータ転送において同一のスイッチが共用されるが、一般的にはスイッチ内の転送処理はノンブロッキングで行われる(転送元と転送先が異なる複数の転送を同時に行っても各転送の速度が劣化しないことが保証される)。このため、スイッチの共用が原因の転送速度の劣化は生じない。
【0092】
このように、本実施例では、深層学習処理にかかる時間うち大半を占める、勾配計算処理と集約通信処理と分配通信処理とをM並列化することで高速化する。さらに、本実施例では、ノード内集計処理からノード内分配処理までの全処理をM並列化することにより、重みの番号z単位でこれらの処理をパイプライン化したときに、ノード内でのデータ転送の帯域制約による律速を防止することができる。
【0093】
なお、本実施例では、ノード内分配処理の後に、分散データ生成部11[n,m]の各々が、全ての重みw[z]に対する重み更新処理を行っていた。この順序を逆転させることにより、重み更新処理を含めてM並列化することも可能である。すなわち、分散データ生成部11[n,m]は、通信部10[n,m]から転送された集計データRm[j](j=Z/M×(m-1)+1,・・・,Z/M×m)を用いて重みw[j]を更新した後に、更新された重みw[j]を、他の分散データ生成部[n,m’](m’=1,・・・,M,m’≠m)に分配する。これにより、重み更新処理において各分散データ生成部11[n,m]が扱う重みの個数を1/Mに削減できる。
【0094】
第1、第2の実施例で説明した各分散処理ノード1[n],1a[n]は、CPU(Central Processing Unit)、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
【0095】
このコンピュータの構成例を
図12に示す。コンピュータは、CPU300と、記憶装置301と、インターフェース装置(以下、I/Fと略する)302とを備えている。I/F302には、例えば通信ポート100,101を含む通信回路が接続される。CPU300は、記憶装置301に格納されたプログラムに従って第1、第2の実施例で説明した処理を実行し、本発明の分散処理システムおよび分散処理方法を実現する。
【産業上の利用可能性】
【0096】
本発明は、ニューラルネットワークの機械学習を行う技術に適用することができる。
【符号の説明】
【0097】
1,1a…分散処理ノード、2…通信路、11…分散データ生成部、12…内部通信路、16,16a…サンプルデータ入力部、17,17a…勾配計算処理部、18,18a…ノード内集計処理部、19,19a…集計データ生成部、20,20a…重み更新処理部、21,21a…ニューラルネットワーク、22…データ分割部、100,101…通信ポート。