【文献】
MU LI, et al.,"Scaling Distributed Machine Learning with the Parameter Server",Proceedings of the 11th USENIX Symposium on Operating Systems Design and Implementation (OSDI'14),[online], USENIX Association,2014年10月08日,Pages 583-598,[平成31年3月11日検索], インターネット, <URL: https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-li_mu.pdf>,ISBN: 978-1-931971-16-4.
【文献】
HEGDE, V., et al.,"Parallel and Distributed Deep Learning",[online],2016年06月09日,Pages 1-8,[平成31年3月12日検索], インターネット, <URL: https://stanford.edu/~rezab/classes/cme323/S16/projects_reports/hedge_usmani.pdf>.
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0022】
[第1の実施例]
以下、本発明の実施例について図面を参照して説明する。
図1は本発明の第1の実施例に係る分散深層学習システムの構成を示すブロック図である。本実施例の分散深層学習システムは、1台のコンピューティングインタコネクト(CI:Computing Interconnect)装置1と、4台の学習ノード2−0〜2−3とを備えている。
なお、本発明において、コンピューティングインタコネクト装置あるいは学習ノードとは、ネットワーク上に分散配置されている機器を意味する。
【0023】
コンピューティングインタコネクト装置1は、4つの通信ポートP0〜P3を持ち、その各通信ポートP0〜P3と、各学習ノード2−0〜2−3の通信ポートとが通信ネットワーク3を介して接続されている。この通信ネットワーク3としては、イーサネットや、インフィニバンド(InfiniBand)などの、通信パケットをやりとりすることで通信を行うネットワークを用いる。
【0024】
<学習ノードの説明>
学習ノード2−0〜2−3は、数学モデルであるニューラルネットワークの出力値を計算し、さらに、学習データに応じてニューラルネットワークの構成パラメータを更新して出力値の精度を向上させていく学習機能をもつ装置である。ニューラルネットワークは、各学習ノード2−0〜2−3内に構築される。
【0025】
学習ノード2−0〜2−3の実現方法としては、CPU(Central Processing Unit)やGPU上のソフトウェアで実現してもよいし、FPGA(Field Programmable Gate Array)やASIC(Application Specific Integrated Circuit)に形成したLSI(Large Scale Integration)回路で実現してもよい。
【0026】
<学習についての説明>
学習ノード2−0〜2−3におけるニューラルネットワークの学習処理について、教師データ付き学習を例に説明する。
図2にニューラルネットワークの例として入力層(第1層)、中間層(第2層)、出力層(第3層)からなるごく単純な2層ニューラルネットワークを示す。
図2のNk(i)は第k層、i番目のニューロンである。x1,x2は入力、y1,y2は出力、w1(11), w1(12),・・・,w1(23)は第1層目の重みパラメータ、w2(11), w2(12),・・・,w2(32)は第2層目の重みパラメータである。
【0027】
教師データ付き学習の場合、各学習データには対応する教師データ(正解データ)が予め用意されており、ニューラルネットワークの出力値が教師データに近くなるように、ニューラルネットワークの構成パラメータを更新していく。
図2の例の場合のニューラルネットワークの構成パラメータは、重みw1(11), w1(12),・・・,w1(23),w2(11),w2(12),・・・,w2(32)である。これらの構成パラメータを最適化していくことにより、ニューラルネットワークの精度を上げていく。
【0028】
具体的には、ニューラルネットワークの出力値が教師データとどれだけ乖離しているかの指標となる損失関数を定め、この損失関数が小さくなるように構成パラメータを更新していく。この例では、入力学習データx1,x2に対応する出力値をy1,y2、教師データをt1,t2とすると、損失関数Lは、例えば次式のようになる。
【0030】
次に、この損失関数Lに対するニューラルネットワークの各構成パラメータによる偏微分値を成分とするベクトル(これを勾配と呼ぶ)を求める。この例では、勾配は以下のようになる。
【0032】
次に、勾配を用いて、損失関数Lがより小さくなるように、ニューラルネットワークの各構成パラメータを更新する。更新の方法はいろいろあるが、例えば勾配降下法を用いて、それぞれの重みパラメータを以下のように更新する。
【0034】
ここで、ηは学習率と呼ばれる定数である。式(3)により、各重みパラメータを、勾配と逆の方向、すなわち、損失関数Lを減少させる方向に学習率ηに比例する量だけ変化させている。そのため、更新後のニューラルネットワークの損失関数Lは更新前より小さくなる。
【0035】
このように、1組の入力学習データに対して、損失関数Lの計算、勾配の計算、構成パラメータの更新の処理を行なう。そして、この構成パラメータの更新されたニューラルネットワークに対して、次の入力学習データを入力して同じ処理を行い、構成パラメータを更新する。このサイクルを繰り返すことにより、損失関数Lが小さいニューラルネットワークに更新していくことで、ニューラルネットワークの学習を行う。
【0036】
ここで、損失関数Lを求める工程では、ニューラルネットワークの入力層から出力層に向かって順番に出力値を計算していくことから、この工程を順伝搬(forward propagation)と呼ぶ。一方、勾配を求める工程では、ニューラルネットワークの出力層から入力層に向かって順番に各層の構成パラメータに対する勾配を計算していく逆伝搬(back propagation)と呼ぶ手法を用いることが多い。
【0037】
<複数学習ノードによる分散学習処理>
以上のようなニューラルネットワークの学習で十分な精度を達成するには、大量の学習データをニューラルネットワークに入力して学習処理を繰り返す必要があり、長い時間を要する。この学習にかかる所要時間を短縮することは大きなメリットがある。
【0038】
学習にかかる所要時間を短縮するため、同じニューラルネットワークの学習ノードを複数用意して、学習データをそれぞれの学習ノードに分けて並列で学習させることにより、トータルの学習時間を短縮する分散協調学習の手法がとられる。従来の分散学習処理の手順を
図3を用いて説明する。
【0039】
最初に、学習データxを学習ノード100−0〜100−3の台数分に分けて、各学習ノード100−0〜100−3に割り当てる。なお、
図3では、各学習ノード100−0〜100−3に割り当てる学習データの代表としてx0〜x3を1つずつ記載しているが、学習データx0〜x3はそれぞれ1乃至複数の学習データの集合からなる。
【0040】
次に、各学習ノード100−0〜100−3は、それぞれ学習データx0〜x3をニューラルネットワークに入力して順伝搬(forward propagation)の手法によりそれぞれ損失関数Lを求める(
図3ステップS100)。なお、得られる損失関数Lは、各学習ノード100−0〜100−3(各ニューラルネットワーク)につき1つである。
【0041】
続いて、各学習ノード100−0〜100−3は、ステップS100で求めた損失関数Lの勾配を逆伝搬(back propagation)の手法により求める(
図3ステップS101)。損失関数Lの勾配とは、式(2)に示すように構成パラメータ毎の成分を含むベクトルである。
【0042】
次に、各学習ノード100−0〜100−3でそれぞれ計算した勾配の平均を例えばヘッドノード102において計算して、計算した結果をヘッドノード102から各学習ノード100−0〜100−3に返送する(
図3ステップS102)。この処理をAll−reduce処理と呼ぶ。なお、勾配の平均の代わりに勾配の和を計算するようにしてもよい。このとき、例えば、次の重みパラメータの更新処理時の学習率ηに(1/学習ノード数)を乗じれば、勾配の平均値を求めるのと同じ結果になる。
【0043】
最後に、各学習ノード100−0〜100−3は、ステップS102で計算された勾配の平均値を用いて、ニューラルネットワークの重みパラメータを更新する(
図3ステップS103)。
以上で、分散学習の1サイクルが終了する。
【0044】
<本実施例の分散処理>
次に、本実施例の分散学習処理の手順を
図4を用いて説明する。本実施例では、各学習ノード2−0〜2−3は、従来と同様に、それぞれ学習データx0〜x3をニューラルネットワークに入力して損失関数Lをそれぞれ計算する(
図4ステップS200)。続いて、この損失関数Lの勾配を計算する(
図4ステップS201)。そして、各学習ノード2−0〜2−3はそれぞれ計算した勾配の計算値を、各学習ノード2−0〜2−3と通信ネットワークで接続されたコンピューティングインタコネクト装置1に送信する(
図4ステップS202)。
【0045】
なお、
図3と同様に、
図4では、各学習ノード2−0〜2−3に割り当てる学習データの代表としてx0〜x3を1つずつ記載しているが、学習データx0〜x3はそれぞれ1乃至複数の学習データの集合からなる。
【0046】
次に、コンピューティングインタコネクト装置1は、各学習ノード2−0〜2−3から送信された各勾配の平均値を計算し、その計算した結果を各学習ノード2−0〜2−3に送信するAll−reduce処理を行なう(
図4ステップS203,S204)。
【0047】
最後に、各学習ノード2−0〜2−3は、コンピューティングインタコネクト装置1から送信された勾配の平均値を用いて、ニューラルネットワークの構成パラメータを更新する(
図4ステップS205)。
なお、勾配の平均の代わりに勾配の和を計算するようにしてもよい。このとき、例えば、次の重みパラメータの更新処理時の学習率ηに(1/学習ノード数)を乗じれば、勾配の平均値を求めるのと同じ結果になる。また、各勾配に重みづけ定数をかけて重み付き平均を用いるようにしてもよいし、勾配の二乗平均平方根をとるようにしてもよい。
以上で、本実施例の分散学習の1サイクルが終了する。
【0048】
通常、勾配計算は逆伝搬の手法に従って、ニューラルネットワークの出力層から入力層に向かって順番に各層の構成パラメータ(重みパラメータ)に対する勾配の成分を計算していく。したがって、各学習ノード2−0〜2−3の勾配計算結果をコンピューティングインタコネクト装置1に送信するにあたっては、全ての層の勾配計算が終わるまで待つ必要はない。
【0049】
そこで、各学習ノード2−0〜2−3は、上記と同様に損失関数Lを計算し(
図5ステップS200)、損失関数Lの勾配を計算するが(
図5ステップS201)、ステップS201においてすべての構成パラメータに対する勾配成分の計算が終了するのを待つことなく、計算が終わった構成パラメータに対する勾配成分からコンピューティングインタコネクト装置1に送信することができる(
図5ステップS206)。
【0050】
コンピューティングインタコネクト装置1は、各学習ノード2−0〜2−3から送信された勾配成分の平均値を計算し(
図5ステップS207)、計算が終わった勾配成分の平均値を各学習ノード2−0〜2−3に送信する(
図5ステップS208)。
【0051】
各学習ノード2−0〜2−3は、コンピューティングインタコネクト装置1から計算結果を受信すると、全ての計算結果を受信するまで待つことなく、受信した勾配成分の平均値を用いて、対応する構成パラメータを更新する(
図5ステップS209)。
こうして、勾配計算とAll−reduce処理と構成パラメータ更新とをパイプライン式に処理できるので、更なる高速化が可能である。
【0052】
<コンピューティングインタコネクト装置の動作の概要>
図6(A)、
図6(B)はコンピューティングインタコネクト装置1の動作の概要を説明する図である。周知のとおり、通信パケットは、ヘッダ200とデータペイロード201とからなる。
【0053】
各学習ノード2−0〜2−3は、各構成パラメータに対する勾配成分を計算すると、その計算結果を通信パケットRP0〜RP3のデータペイロードに格納してコンピューティングインタコネクト装置1に送信する。例えば、
図6(A)の例では、学習ノード2−0が3つの勾配成分値G0_0,G0_1,G0_2を通信パケットRP0のデータペイロードに格納してコンピューティングインタコネクト装置1に送信している。このとき、データペイロードには、この通信パケットのシーケンシャル番号(
図6(A)の例では“003”)も格納される。
【0054】
各学習ノード2−0〜2−3からの、シーケンシャル番号が同一の通信パケットに格納された勾配成分同士の和を計算するように制御することで、各学習ノード2−0〜2−3の対応する勾配成分同士を加算演算できるように保証する。
【0055】
本発明では、同一のニューラルネットワークを、同一構成の複数の学習ノード2−0〜2−3に構築して、学習データをそれぞれの学習ノード2−0〜2−3に分けて並列で学習させることを想定している。各学習ノード2−0〜2−3において行われる処理の順番や通信パケットの仕様は、全ての学習ノード2−0〜2−3で同一である。したがって、各学習ノード2−0〜2−3から送信される、シーケンシャル番号が同一の通信パケットには、同一の構成パラメータに対する勾配成分が各通信パケット内の同じ位置に格納される。
【0056】
図6(A)の例では、通信パケットRP0〜RP3に格納された勾配値G0〜G3のうち、「_」以降の符号が同一の値は、ニューラルネットワークの同一の構成パラメータについての勾配成分値であることを示している。例えばG0_0,G1_0,G2_0,G3_0は、同一の構成パラメータについて各学習ノード2−0〜2−3が計算した勾配成分である。また、G0_1,G1_1,G2_1,G3_1は、ニューラルネットワークの別の構成パラメータについて各学習ノード2−0〜2−3が計算した勾配成分である。
【0057】
コンピューティングインタコネクト装置1は、全ての学習ノード2−0〜2−3から同一のシーケンシャル番号の通信パケットRP0〜RP3を受信すると、ニューラルネットワークの同一の構成パラメータに対する勾配成分値同士の和を次式のように計算する。
ΣG_0=G0_0+G1_0+G2_0+G3_0 ・・・(4)
ΣG_1=G0_1+G1_1+G2_1+G3_1 ・・・(5)
ΣG_2=G0_2+G1_2+G2_2+G3_2 ・・・(6)
【0058】
そして、コンピューティングインタコネクト装置1は、計算した勾配成分の和の計算結果ΣG_0,ΣG_1,ΣG_2を通信パケットTP0〜TP3のデータペイロードに格納し、各学習ノード2−0〜2−3に送信する(
図6(B))。このとき、コンピューティングインタコネクト装置1は、各学習ノード2−0〜2−3からの通信パケットRP0〜RP3に格納されていた勾配から計算した結果ΣG_0,ΣG_1,ΣG_2を、元の勾配成分と同じ順番で通信パケットTP0〜TP3のデータペイロードに格納する。
【0059】
<コンピューティングインタコネクト装置の構成>
図7に本実施例のコンピューティングインタコネクト装置1の構成を示す。コンピューティングインタコネクト装置1は、学習ノード2−0〜2−3のそれぞれと通信ネットワーク3で接続された送受信用のポートP0〜P3と、学習ノード2−0〜2−3毎に設けられ、学習ノード2−0〜2−3から送信された通信パケットを受信する受信部10−0〜10−3と、学習ノード2−0〜2−3毎に設けられ、各受信部10−0〜10−3が受信した通信パケットのヘッダやデータペイロードを解析するパーサ(解析部)11−0〜11−3と、学習ノード2−0〜2−3毎に設けられ、各受信部10−0〜10−3によって受信された通信パケットに格納されていた複数の勾配の計算結果を一時的に記憶するバッファ12−0〜12−3と、バッファ12−0〜12−3の並列出力段数と同数設けられ、同一の構成パラメータに対する勾配の和を計算する処理を、複数の勾配の各々について並列に行う加算器(演算器)13−0〜13−2と、バッファ12−0〜12−3の並列出力段数と同数設けられ、各加算器13−0〜13−2によって計算された勾配の和の計算結果を一時的に記憶する出力バッファ14−0〜14−2と、出力バッファ14−0〜14−2に記憶された勾配の和の計算結果をデータペイロードに格納した通信パケットを生成するパケット生成部15と、学習ノード2−0〜2−3毎に設けられ、パケット生成部15によって生成された通信パケットを学習ノード2−0〜2−3に送信する送信部16−0〜16−3とを備えている。
【0060】
なお、バッファ12−0〜12−3としてFIFOメモリを用いてもよい。また、加算器13−0〜13−2として、勾配の和を計算する代わりに勾配の平均値を求める演算器を用いてもよい。
【0061】
<コンピューティングインタコネクト装置の動作>
次に、コンピューティングインタコネクト装置1の詳細な動作を
図8を用いて説明する。コンピューティングインタコネクト装置1の受信部10−0〜10−3は、それぞれ学習ノード2−0〜2−3からの通信パケットRP0〜RP3を受信する。
【0062】
コンピューティングインタコネクト装置1のパーサ11−0〜11−3は、それぞれ受信部10−0〜10−3によって受信された通信パケットRP0〜RP3のヘッダやデータペイロードの内容を解析し、データペイロードから勾配値を取り出してバッファ12−0〜12−3に格納する。バッファ12−0〜12−3に一旦格納する理由は、同一のシーケンシャル番号が付与された通信パケット(すなわち、同一の構成パラメータに対応する通信パケット)であっても、各学習ノード2−0〜2−3から完全に同一のタイミングで到着するとは限らないためである。
【0063】
パーサ11−0〜11−3は、対応する全ての学習ノード2−0〜2−3から受信した、同一のシーケンシャル番号が付与された通信パケットRP0〜RP3から取り出した勾配成分値G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2をバッファ12−0〜12−3に書き込んだ場合、これら勾配成分値をバッファ12−0〜12−3から出力させる。
【0064】
各バッファ12−0〜12−3は、それぞれパーサ11−0〜11−3によって書き込まれる勾配成分値G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2を順番に記憶して、並列に出力することが可能である。各バッファ12−0〜12−3の並列出力段数n
buffが、各通信パケットRP0〜RP3のデータペイロードに格納可能な勾配成分値の最大個数n
dataより小さい場合は、n
data個のデータをn
buff個ずつに分けて並列計算を複数回行えばよい。
図7、
図8の例では、n
buff=n
data=3である。すなわち、各バッファ12−0〜12−3は、それぞれ3つの勾配成分値を同時に出力可能である。
【0065】
また、パーサ11−0〜11−3は、バッファ12−0〜12−3から出力させた勾配成分値G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2に対応するシーケンシャル番号(
図8の例では“003”)をパケット生成部15に渡す。
【0066】
コンピューティングインタコネクト装置1の各加算器13−0〜13−2は、各バッファ12−0〜12−3から出力された勾配成分値の和を、各バッファ12−0〜12−3の同一の出力段毎に計算する。加算器13−0〜13−2は、バッファ12−0〜12−3の並列出力段数n
buffと同数設けられ、構成パラメータの順番に従って昇順で配置されている。そして、上記のとおり各パーサ11−0〜11−3は、それぞれ対応する学習ノード2−0〜2−3から受信した、同一のシーケンシャル番号が付与された通信パケットから取り出した勾配成分値をバッファ12−0〜12−3に書き込み、各バッファ12−0〜12−3は、それぞれ対応するパーサ11−0〜11−3によって書き込まれる勾配成分値を順番に記憶する。
【0067】
したがって、各バッファ12−0〜12−3の同一の出力段から出力される各勾配成分値はニューラルネットワークの同一の構成パラメータに対する勾配成分値となるので、各加算器13−0〜13−2は、同一の構成パラメータに対する勾配成分値同士の和ΣG_0〜ΣG_2を式(4)〜式(6)のように計算することになる。
【0068】
コンピューティングインタコネクト装置1の出力バッファ14−0〜14−2は、バッファ12−0〜12−3の並列出力段数n
buffと同数設けられ、構成パラメータの順番に従って昇順で配置されている。各出力バッファ14−0〜14−2は、それぞれ対応する加算器13−0〜13−2によって計算された勾配成分の和の計算結果ΣG_0〜ΣG_2を一時的に記憶する。
【0069】
コンピューティングインタコネクト装置1のパケット生成部15は、パーサ11−0〜11−3から受け取ったシーケンシャル番号を各学習ノード2−0〜2−3宛の通信パケットTP0〜TP3のデータペイロードに格納すると共に、出力バッファ14−0〜14−2に記憶された勾配成分の和の計算結果ΣG_0〜ΣG_2を読み出して、通信パケットTP0〜TP3のデータペイロードに格納する。このとき、パケット生成部15は、各出力バッファ14−0〜14−2に記憶された勾配成分の和の計算結果ΣG_0〜ΣG_2を、出力バッファ14−0〜14−2の順番(すなわち、元の勾配G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2の順番)で通信パケットTP0〜TP3のデータペイロードに格納する。
【0070】
そして、コンピューティングインタコネクト装置1の送信部16−0〜16−3は、パケット生成部15によって生成された通信パケットTP0〜TP3をそれぞれ対応する学習ノード2−0〜2−3へ同時に送信する。
【0071】
以上のようなコンピューティングインタコネクト装置1は、FPGAやASICに形成したLSI回路で実現することができる。以下の実施例のコンピューティングインタコネクト装置についても同様である。
【0072】
図9は学習ノード2−0の構成例を示すブロック図である。学習ノード2−0は、学習データを受け取る入力部20と、学習データが入力されたときに、損失関数Lを計算する損失関数計算部21と、損失関数Lの勾配を計算する勾配計算部22と、勾配計算部22によって計算された勾配値をパケット化してコンピューティングインタコネクト装置1に送信する送信部23と、コンピューティングインタコネクト装置1から送信された通信パケットを受信する受信部24と、コンピューティングインタコネクト装置1から送信された通信パケットに格納されている勾配の和を用いてニューラルネットワークの構成パラメータ(重みパラメータ)を更新する構成パラメータ更新部25と、数学モデルであるニューラルネットワークの出力値を計算する機能をもつニューラルネットワーク26とを備えている。
【0073】
図9の例では、学習ノード2−0の構成を示しているが、他の学習ノード2−1〜2−3の構成も学習ノード2−0と同様である。
各学習ノード2−0〜2−3の勾配計算部22は、損失関数Lの勾配を計算する。
【0074】
各学習ノード2−0〜2−3の送信部23は、勾配計算部22によって計算された勾配成分の計算結果G0_0〜G0_2,G1_0〜G1_2,G2_0〜G2_2,G3_0〜G3_2と、シーケンシャル番号とを通信パケットRP0〜RP3のデータペイロードに書き込んで、コンピューティングインタコネクト装置1に送信する。このとき、各学習ノード2−0〜2−3の送信部23は、勾配計算部22によって計算された勾配成分の計算結果G0_0〜G0_2,G1_0〜G1_2,G2_0〜G2_2,G3_0〜G3_2をニューラルネットワーク26の対応する構成パラメータの順に通信パケットRP0〜RP3のデータペイロードに格納する。
なお、勾配成分の個数が各通信パケットRP0〜RP3のデータペイロードに格納可能な勾配成分値の最大個数n
dataより大きい場合は、勾配成分をn
dataごとに複数の通信パケットに分けて格納して送信すればよい。この場合、各通信パケットに割り振ったシーケンシャル番号によってデータペイロードに格納されたデータがどの勾配成分になるのかを識別する。
図8はn
data=3の場合を例に示している。
【0075】
各学習ノード2−0〜2−3の受信部24は、コンピューティングインタコネクト装置1から受信した通信パケットTP0〜TP3のデータペイロードから勾配成分の和の計算結果ΣG_0〜ΣG_2を取り出す。
【0076】
上記のとおり、各学習ノード2−0〜2−3からコンピューティングインタコネクト装置1に送信される通信パケットRP0〜RP3のデータペイロードには、ニューラルネットワーク26の構成パラメータの順に勾配成分の計算結果G0_0〜G0_2,G1_0〜G1_2,G2_0〜G2_2,G3_0〜G3_2が格納される。そして、これら勾配成分と同じ順番で通信パケットTP0〜TP3のデータペイロードに格納された勾配成分の和の計算結果ΣG_0〜ΣG_2がコンピューティングインタコネクト装置1から返送される。
【0077】
各学習ノード2−0〜2−3の受信部24が取り出した勾配成分の和の計算結果ΣG_0〜ΣG_2は対応する構成パラメータの順に並んでいるので、各学習ノード2−0〜2−3の構成パラメータ更新部25は、これら勾配成分の和の計算結果ΣG_0〜ΣG_2に基づいて、ニューラルネットワーク26の対応する構成パラメータを更新することが可能である。
【0078】
以上のように、本実施例では、All−reduce処理にコンピューティングインタコネクト装置1を用いることで、各学習ノード2−0〜2−3からの通信パケットの到着時刻のばらつきに基づく僅かな遅延はあるものの、各学習ノード2−0〜2−3との間の通信パケットの送受信処理を同時並行して高速にハードウェア処理できるため、従来技術のヘッドノードで通信処理や勾配の加算処理をソフトウェア処理する場合に比べて、高速に処理することが可能になる。
【0079】
さらに、本実施例では、各学習ノード2−0〜2−3からの複数の勾配成分の和の計算値ΣG_0〜ΣG_2をコンピューティングインタコネクト装置1の複数の加算器13−0〜13−2で同時に演算するため、ソフトウェアを用いて逐次的に演算するよりも高速に処理することができる。
【0080】
[第2の実施例]
次に、本発明の第2の実施例について説明する。第1の実施例では、コンピューティングインタコネクト装置1で勾配の和の演算を行い、各学習ノード2−0〜2−3でニューラルネットワークの構成パラメータの更新演算を行うが、本実施例では、勾配の和の演算に加えて、ニューラルネットワークの構成パラメータの更新演算もコンピューティングインタコネクト装置で行なう。
【0081】
図10は本実施例に係る分散深層学習システムの構成を示すブロック図である。本実施例の分散深層学習システムは、1台のコンピューティングインタコネクト装置1aと、4台の学習ノード2a−0〜2a−3と、コンピューティングインタコネクト装置1aと学習ノード2a−0〜2a−3とを接続する通信ネットワーク3とから構成されている。
【0082】
<コンピューティングインタコネクト装置の動作の概要>
図11(A)、
図11(B)は本実施例のコンピューティングインタコネクト装置1aの動作の概要を説明する図である。
第1の実施例と同様に、各学習ノード2a−0〜2a−3は、ニューラルネットワークの構成パラメータに対する損失関数の勾配を計算すると、その計算結果を通信パケットRP0〜RP3のデータペイロードに格納してコンピューティングインタコネクト装置1aに送信する。例えば、
図11(A)の例では、学習ノード2a−0が3つの勾配成分値G0_0,G0_1,G0_2を通信パケットRP0のデータペイロードに格納してコンピューティングインタコネクト装置1aに送信している。このとき、データペイロードには、この通信パケットのシーケンシャル番号(
図11(A)の例では“003”)も格納される。
【0083】
各学習ノード2a−0〜2a−3からの、シーケンシャル番号が同一の通信パケットに格納された勾配成分同士の和を計算するように制御することで、各学習ノード2a−0〜2a−3の対応する勾配成分同士を加算演算できるように保証する。
【0084】
コンピューティングインタコネクト装置1aは、全ての学習ノード2a−0〜2a−3から同一のシーケンシャル番号の通信パケットRP0〜RP3を受信すると、ニューラルネットワークの同一の構成パラメータに対する勾配成分値同士の和ΣG_0,ΣG_1,ΣG_2を式(4)〜式(6)のように計算する。
【0085】
さらに、コンピューティングインタコネクト装置1aは、計算した勾配成分の和の計算結果ΣG_0,ΣG_1,ΣG_2を基に、ニューラルネットワークの構成パラメータの更新後の値wnew_0,wnew_1,wnew_2を構成パラメータ毎に計算する。そして、コンピューティングインタコネクト装置1aは、構成パラメータの更新後の値wnew_0,wnew_1,wnew_2を通信パケットTP0〜TP3のデータペイロードに格納し、各学習ノード2a−0〜2a−3に送信する(
図11(B))。
【0086】
このとき、コンピューティングインタコネクト装置1aは、各学習ノード2a−0〜2a−3からの通信パケットRP0〜RP3に格納されていた勾配成分から計算した構成パラメータの更新後の値wnew_0,wnew_1,wnew_2を、元の勾配成分と同じ順番で通信パケットTP0〜TP3のデータペイロードに格納する。
【0087】
<コンピューティングインタコネクト装置の構成>
図12は本実施例のコンピューティングインタコネクト装置1aの構成を示すブロック図であり、
図7と同一の構成には同一の符号を付してある。本実施例のコンピューティングインタコネクト装置1aは、学習ノード2a−0〜2a−3のそれぞれと通信ネットワーク3で接続された送受信用のポートP0〜P3と、受信部10−0〜10−3と、パーサ11−0〜11−3と、バッファ12−0〜12−3と、加算器13−0〜13−2と、出力バッファ14−0〜14−2と、パケット生成部15と、送信部16−0〜16−3と、各学習ノード2a−0〜2a−3の学習対象のニューラルネットワーク26の構成パラメータを記憶する構成パラメータメモリ17と、ニューラルネットワークの構成パラメータ(重みパラメータ)の更新後の値を計算するNN(ニューラルネットワーク)構成パラメータ更新演算部18−0〜18−2とを備えている。
【0088】
<コンピューティングインタコネクト装置の動作>
次に、コンピューティングインタコネクト装置1aの詳細な動作を
図13を用いて説明する。学習開始時点において、各学習ノード2a−0〜2a−3のニューラルネットワーク26は、全ての学習ノード2a−0〜2a−3で同じ構成パラメータの初期値が設定されている。この構成パラメータの初期値の全てを、例えば学習ノード2a−0〜2a−3から通信パケットを用いてコンピューティングインタコネクト装置1aに送信する。
【0089】
構成パラメータの初期値を受信したコンピューティングインタコネクト装置1aでは、この構成パラメータの初期値を構成パラメータメモリ17に格納する。これら構成パラメータの初期値は、所定の順番、すなわち各学習ノード2a−0〜2a−3において勾配が計算され、通信パケットに書き込まれる順番で格納されている。
【0090】
第1の実施例と同様に、各学習ノード2a−0〜2a−3は、この構成パラメータの初期値が設定されたニューラルネットワーク26のそれぞれに学習データを入力し、損失関数Lを計算する。次に、その損失関数Lの勾配を計算する。そして、各学習ノード2a−0〜2a−3の送信部23は、勾配計算部22によって計算された勾配成分の計算結果と、シーケンシャル番号とを通信パケットRP0〜RP3のデータペイロードに書き込んで、コンピューティングインタコネクト装置1aに送信する。
【0091】
したがって、コンピューティングインタコネクト装置1aの受信部10−0〜10−3で受信する通信パケットRP0〜RP3のデータペイロードには、それぞれ学習ノード2a−0〜2a−3で計算された勾配成分値(
図13のG0_0〜G0_2,G1_0〜G1_2,G2_0〜G2_2,G3_0〜G3_2)と、シーケンシャル番号(
図13の例では“003”)とが格納されている。
なお、勾配成分の個数が各通信パケットRP0〜RP3のデータペイロードに格納可能な勾配成分値の最大個数n
dataより大きい場合は、勾配成分をn
dataごとに複数の通信パケットに分けて格納して送信すればよい。この場合、各通信パケットに割り振ったシーケンシャル番号によってデータペイロードに格納されたデータがどの勾配成分になるのかを識別する。
図13はn
data=3の場合を例に示している。
【0092】
コンピューティングインタコネクト装置1aのパーサ11−0〜11−3は、それぞれ受信部10−0〜10−3によって受信された通信パケットRP0〜RP3のヘッダやデータペイロードの内容を解析し、データペイロードから勾配値を取り出してバッファ12−0〜12−3に格納する。第1の実施例で説明したとおり、バッファ12−0〜12−3に一旦格納する理由は、同一のシーケンシャル番号が付与された通信パケットであっても、各学習ノード2a−0〜2a−3から完全に同一のタイミングで到着するとは限らないためである。
【0093】
パーサ11−0〜11−3は、対応する全ての学習ノード2a−0〜2a−3から受信した、同一のシーケンシャル番号が付与された通信パケットRP0〜RP3から取り出した勾配成分値G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2をバッファ12−0〜12−3に書き込んだ場合、これら勾配成分値をバッファ12−0〜12−3から出力させる。
【0094】
第1の実施例と同様に、各バッファ12−0〜12−3は、それぞれパーサ11−0〜11−3によって書き込まれる勾配成分値G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2を順番に記憶し、並列に出力することが可能である。また、パーサ11−0〜11−3は、バッファ12−0〜12−3から出力させた勾配成分値G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2に対応するシーケンシャル番号(
図13の例では“003”)をパケット生成部15に渡す。
【0095】
コンピューティングインタコネクト装置1aの加算器13−0〜13−2は、バッファ12−0〜12−3の並列出力段数n
buffと同数設けられ、各バッファ12−0〜12−3から出力された勾配成分値の和を、各バッファ12−0〜12−3の同一の出力段毎に計算する。これにより、各加算器13−0〜13−2は、同一の構成パラメータに対する勾配成分値同士の和ΣG_0〜ΣG_2を式(4)〜式(6)のように計算する。
【0096】
コンピューティングインタコネクト装置1aのNN構成パラメータ更新演算部18−0〜18−2は、バッファ12−0〜12−3の並列出力段数n
buffと同数設けられ、構成パラメータの順番に従って昇順で配置されている。各NN構成パラメータ更新演算部18−0〜18−2は、それぞれ対応する加算器13−0〜13−2によって勾配成分の和ΣG_0〜ΣG_2が計算された構成パラメータの初期値wold_0〜wold_2を、構成パラメータメモリ17に記憶されている構成パラメータの初期値の中から取り出す。
【0097】
そして、各NN構成パラメータ更新演算部18−0〜18−2は、取り出した初期値wold_0〜wold_2と、対応する加算器13−0〜13−2によって計算された勾配成分の和ΣG_0〜ΣG_2とを基に、ニューラルネットワークの構成パラメータの更新後の値wnew_0〜wnew_2を計算して出力バッファ14−0〜14−2に出力する。更新方法として例えば、勾配降下法を用いる場合は以下のような計算を行う。
wnew_0←wold_0−η×ΣG_0 ・・・(7)
wnew_1←wold_1−η×ΣG_1 ・・・(8)
wnew_2←wold_2−η×ΣG_2 ・・・(9)
【0098】
ηは学習率と呼ばれる定数である。第1の実施例で説明したとおり、各加算器13−0〜13−2は構成パラメータの順番に従って昇順で配置されているので、各加算器13−0〜13−2から出力される勾配成分の和ΣG_0〜ΣG_2も、構成パラメータの順に並んでいることになる。したがって、NN構成パラメータ更新演算部18−0〜18−2は、昇順に並んでいる構成パラメータの初期値wold_0〜wold_2を、バッファ12−0〜12−3の並列出力段数n
buffと同数だけ一括して構成パラメータメモリ17から取り出すことを繰り返すことにより、加算器13−0〜13−2から出力された勾配成分の和ΣG_0〜ΣG_2に対応する構成パラメータの初期値wold_0〜wold_2を取り出すことが可能である。
【0099】
また、NN構成パラメータ更新演算部18−0〜18−2は、構成パラメータの更新後の値wnew_0〜wnew_2を出力バッファ14−0〜14−2に出力すると同時に、構成パラメータメモリ17に格納されている当該構成パラメータの値wold_0〜wold_2を、更新後の値wnew_0〜wnew_2によって上書きする。
【0100】
第1の実施例と同様に、コンピューティングインタコネクト装置1aの出力バッファ14−0〜14−2は、バッファ12−0〜12−3の並列出力段数n
buffと同数設けられ、構成パラメータの順番に従って昇順に配置されている。各出力バッファ14−0〜14−2は、それぞれ対応するNN構成パラメータ更新演算部18−0〜18−2によって計算された構成パラメータの更新後の値wnew_0〜wnew_2を一時的に記憶する。
【0101】
コンピューティングインタコネクト装置1aのパケット生成部15は、パーサ11−0〜11−3から受け取ったシーケンシャル番号を各学習ノード2a−0〜2a−3宛の通信パケットTP0〜TP3のデータペイロードに格納すると共に、出力バッファ14−0〜14−2に記憶された構成パラメータの更新後の値wnew_0〜wnew_2を読み出して、通信パケットTP0〜TP3のデータペイロードに格納する。
【0102】
このとき、パケット生成部15は、各出力バッファ14−0〜14−2に記憶された構成パラメータの更新後の値wnew_0〜wnew_2を、出力バッファ14−0〜14−2の順番(すなわち、元の勾配G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2の順番)で通信パケットTP0〜TP3のデータペイロードに格納する。
【0103】
そして、コンピューティングインタコネクト装置1aの送信部16−0〜16−3は、パケット生成部15によって生成された通信パケットTP0〜TP3をそれぞれ対応する学習ノード2a−0〜2a−3へ同時に送信する。
【0104】
以上のようなコンピューティングインタコネクト装置1aは、FPGAやASICに形成したLSI回路で実現することができる。
【0105】
図14は学習ノード2a−0の構成例を示すブロック図であり、
図9と同一の構成には同一の符号を付してある。学習ノード2a−0は、入力部20と、損失関数計算部21と、勾配計算部22と、送信部23と、受信部24aと、コンピューティングインタコネクト装置1aから送信された通信パケットに格納されている構成パラメータの更新後の値wnew_0〜wnew_2を用いてニューラルネットワーク26の構成パラメータを更新する構成パラメータ更新部25aと、ニューラルネットワーク26とを備えている。
【0106】
図14の例では、学習ノード2a−0の構成を示しているが、他の学習ノード2a−1〜2a−3の構成も学習ノード2a−0と同様である。
各学習ノード2a−0〜2a−3の受信部24aは、コンピューティングインタコネクト装置1aから受信した通信パケットTP0〜TP3のデータペイロードから構成パラメータの更新後の値wnew_0〜wnew_2を取り出す。
【0107】
各学習ノード2a−0〜2a−3の構成パラメータ更新部25aは、ニューラルネットワーク26の複数の構成パラメータ(上記のwold_0〜wold_2と同じ値)を、構成パラメータの更新後の値wnew_0〜wnew_2によって上書きすることにより、ニューラルネットワーク26を更新する。
【0108】
本実施例では、All−reduce処理とニューラルネットワークの構成パラメータの更新演算とにコンピューティングインタコネクト装置1aを用いることで、各学習ノード2a−0〜2a−3からの通信パケットの到着時刻のばらつきに基づく僅かな遅延はあるものの、各学習ノード2a−0〜2a−3との間の通信パケットの送受信処理を同時並行して高速にハードウェア処理できるため、従来技術のヘッドノードで通信処理や勾配の加算処理をソフトウェア処理する場合に比べて、高速に処理することが可能になる。
【0109】
特に、本実施例では、構成パラメータの更新演算処理についても専用演算回路を用意することで、高速化を図ることができる。また、勾配成分の和演算も、構成パラメータの更新演算も、ニューラルネットワーク26の構成によらず、構成パラメータ毎に独立して同じ演算を行えばよいので、学習ノード2a−0〜2a−3でのニューラルネットワーク26の構成を変えた場合でも、コンピューティングインタコネクト装置1aの演算器は同じ専用演算回路を用いることができるというメリットもある。
【0110】
さらに、本実施例では、各学習ノード2a−0〜2a−3からの複数の勾配成分の和の計算値ΣG_0〜ΣG_2をコンピューティングインタコネクト装置1aの複数の加算器13−0〜13−2で同時に演算するため、ソフトウェアを用いて逐次的に演算するよりも高速に処理することができる。
【0111】
[第3の実施例]
次に、本発明の第3の実施例について説明する。第2の実施例では、コンピューティングインタコネクト装置1aの構成パラメータメモリ17に、学習対象のニューラルネットワークの現在の構成パラメータ値を全て記録しておくようにしたが、本実施例では、学習ノードから勾配データとそれに対応する構成パラメータの現在値とをセットで送信し、この構成パラメータの現在値のみ構成パラメータバッファに記録する。これにより、この構成パラメータバッファは、第2の実施例の、構成パラメータ全部を記録しておく必要がある構成パラメータメモリ17に比べてずっと小さくすることができる。
【0112】
図15は本実施例に係る分散深層学習システムの構成を示すブロック図である。本実施例の分散深層学習システムは、1台のコンピューティングインタコネクト装置1bと、4台の学習ノード2a−0〜2a−2,2b−3と、コンピューティングインタコネクト装置1aと学習ノード2a−0〜2a−2,2b−3とを接続する通信ネットワーク3とから構成されている。
【0113】
<コンピューティングインタコネクト装置の構成>
図16は本実施例のコンピューティングインタコネクト装置1bの構成を示すブロック図であり、
図7、
図12と同一の構成には同一の符号を付してある。本実施例のコンピューティングインタコネクト装置1bは、学習ノード2a−0〜2a−2,2b−3のそれぞれと通信ネットワーク3で接続された送受信用のポートP0〜P3と、受信部10−0〜10−3と、パーサ11−0〜11−2,11b−3と、バッファ12−0〜12−3と、加算器13−0〜13−2と、出力バッファ14−0〜14−2と、パケット生成部15と、送信部16−0〜16−3と、NN構成パラメータ更新演算部18b−0〜18b−2と、構成パラメータバッファ19とを備えている。
【0114】
<コンピューティングインタコネクト装置の動作>
次に、コンピューティングインタコネクト装置1bの詳細な動作を
図17を用いて説明する。第1の実施例と同様に、各学習ノード2a−0〜2a−2,2b−3は、構成パラメータの初期値が設定されたニューラルネットワーク26のそれぞれに学習データを入力し、損失関数Lを計算する。次に、その損失関数Lの勾配を計算する。そして、各学習ノード2a−0〜2a−2,2b−3の送信部は、勾配計算部22によって計算された勾配の計算結果と、シーケンシャル番号とを通信パケットRP0〜RP3のデータペイロードに書き込んで、コンピューティングインタコネクト装置1bに送信する。
【0115】
このとき、本実施例では、勾配の計算結果に加えて、その勾配を計算した対象の構成パラメータの現在値も通信パケットのデータペイロードに書き込んでコンピューティングインタコネクト装置1bに送信する。各学習ノード2a−0〜2a−2,2b−3のニューラルネットワーク26の構成パラメータの現在値は、各学習ノード2a−0〜2a−2,2b−3で同じ値である。
【0116】
そこで、本実施例では、学習ノード2b−3においてのみ、ニューラルネットワーク26の構成パラメータの現在値wold_0〜wold_2を通信パケットRP3に書き込んでコンピューティングインタコネクト装置1bに送信する。このとき、構成パラメータの現在値wold_0〜wold_2のそれぞれに対して学習ノード2b−3が計算した勾配成分値がG3_0〜G3_2となる。
【0117】
コンピューティングインタコネクト装置1bのパーサ11−0〜11−2,11b−3は、それぞれ受信部10−0〜10−3によって受信された通信パケットRP0〜RP3のヘッダやデータペイロードの内容を解析し、データペイロードから勾配成分値を取り出してバッファ12−0〜12−3に格納する。
【0118】
さらに、パーサ11b−3は、受信部10−3によって受信された通信パケットRP3のデータペイロードから構成パラメータの値wold_0〜wold_2を取り出して構成パラメータバッファ19に格納する。構成パラメータバッファ19は、パーサ11b−3によって書き込まれる構成パラメータの値wold_0〜wold_2を順番に記憶し、並列に出力することが可能である。
【0119】
パーサ11−0〜11−2,11b−3は、対応する全ての学習ノード2a−0〜2a−2,2b−3から受信した、同一のシーケンシャル番号が付与された通信パケットRP0〜RP3から取り出した勾配成分値G0_0〜G3_0,G0_1〜G3_1,G0_2〜G3_2をバッファ12−0〜12−3に書き込んだ場合、これら勾配成分値をバッファ12−0〜12−3から出力させる。加算器13−0〜13−2の動作は、第1、第2の実施例で説明したとおりである。
【0120】
コンピューティングインタコネクト装置1bのNN構成パラメータ更新演算部18b−0〜18b−2は、バッファ12−0〜12−3の並列出力段数n
buffと同数設けられ、構成パラメータの順番に従って昇順で配置されている。各NN構成パラメータ更新演算部18b−0〜18b−2は、それぞれ対応する加算器13−0〜13−2によって勾配成分の和ΣG_0〜ΣG_2が計算された構成パラメータの値wold_0〜wold_2を、構成パラメータバッファ19から取り出す。
【0121】
そして、各NN構成パラメータ更新演算部18b−0〜18b−2は、取り出した構成パラメータの値wold_0〜wold_2と、対応する加算器13−0〜13−2によって計算された勾配成分の和ΣG_0〜ΣG_2とを基に、ニューラルネットワークの構成パラメータの更新後の値wnew_0〜wnew_2を式(7)〜式(9)のように計算して出力バッファ14−0〜14−2に出力する。
【0122】
なお、本実施例では、更新対象の構成パラメータの現在値が更新の度に学習ノード2b−3から送信されるので、NN構成パラメータ更新演算部18b−0〜18b−2は、第2の実施例のNN構成パラメータ更新演算部18−0〜18−2と異なり、構成パラメータバッファ19に記憶されている値を更新する必要はない。
パケット生成部15と送信部16−0〜16−3の動作は、第2の実施例で説明したとおりである。
【0123】
図18は学習ノード2b−3の構成例を示すブロック図であり、
図9、
図14と同一の構成には同一の符号を付してある。学習ノード2b−3は、入力部20と、損失関数計算部21と、勾配計算部22と、送信部23bと、受信部24aと、構成パラメータ更新部25aと、ニューラルネットワーク26とを備えている。
学習ノード2a−0〜2a−2の構成は
図14で説明したとおりである。
【0124】
学習ノード2b−3の送信部23bは、ニューラルネットワーク26の構成パラメータの現在値wold_0〜wold_2と、これらに対応する勾配の計算結果G3_0〜G3_2と、シーケンシャル番号とを通信パケットRP3のデータペイロードに書き込んで、コンピューティングインタコネクト装置1bに送信する。このとき、送信部23bは、構成パラメータの現在値wold_0〜wold_2と、対応する勾配成分の計算結果G3_0〜G3_2とを同じ順番で通信パケットRP3のデータペイロードに格納する。学習ノード2b−3の他の構成は第2の実施例で説明したとおりである。
【0125】
本実施例では、All−reduce処理とニューラルネットワークの構成パラメータの更新演算とにコンピューティングインタコネクト装置1bを用いることで、各学習ノード2a−0〜2a−2,2b−3からの通信パケットの到着時刻のばらつきに基づく僅かな遅延はあるものの、各学習ノード2a−0〜2a−2,2b−3との間の通信パケットの送受信処理を同時並行して高速にハードウェア処理できるため、従来技術のヘッドノードで通信処理や勾配の加算処理をソフトウェア処理する場合に比べて、高速に処理することが可能になる。
【0126】
特に、本実施例では、構成パラメータの更新演算処理についても専用演算回路を用意することで、高速化を図ることができる。また、勾配成分の和演算も、構成パラメータの更新演算も、ニューラルネットワーク26の構成によらず、構成パラメータ毎に独立して同じ演算を行えばよいので、学習ノード2a−0〜2a−2,2b−3でのニューラルネットワーク26の構成を変えた場合でも、コンピューティングインタコネクト装置1bの演算器は同じ専用演算回路を用いることができるというメリットもある。さらに、本実施例では、各学習ノード2a−0〜2a−2,2b−3からの複数の勾配成分の和の計算値ΣG_0〜ΣG_2をコンピューティングインタコネクト装置1bの複数の加算器13−0〜13−2で同時に演算するため、ソフトウェアを用いて逐次的に演算するよりも高速に処理することができる。
【0127】
また、本実施例では、第2の実施例の構成パラメータメモリ17よりも、容量の小さい構成パラメータバッファ19を用意すればよいという利点がある。ただし、第2の実施例には、通信パケットで送るデータ量が小さくてすむという利点がある。
【0128】
第1〜第3の実施例で説明した学習ノードの各々は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)等の演算資源、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。学習ノードの各々のCPU、GPU等の演算資源は、各々の記憶装置に格納されたプログラムに従って第1〜第3の実施例で説明した処理を実行する。