IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2023-169550並列機械学習プログラム、並列機械学習方法および情報処理装置
<>
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図1
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図2
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図3
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図4
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図5
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図6
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図7
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図8
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図9
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図10
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図11
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図12
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図13
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図14
  • 特開-並列機械学習プログラム、並列機械学習方法および情報処理装置 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023169550
(43)【公開日】2023-11-30
(54)【発明の名称】並列機械学習プログラム、並列機械学習方法および情報処理装置
(51)【国際特許分類】
   G06F 9/52 20060101AFI20231122BHJP
   G06N 20/00 20190101ALI20231122BHJP
   G06N 3/08 20230101ALN20231122BHJP
【FI】
G06F9/52 150Z
G06N20/00
G06N3/08
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022080723
(22)【出願日】2022-05-17
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】バイダ マリナ
(72)【発明者】
【氏名】大辻 弘貴
(57)【要約】
【課題】並列機械学習において訓練データの先読み遅延に起因して発生する待ち時間を削減する。
【解決手段】コンピュータは、バッファ領域から訓練データを読み出して機械学習モデルのパラメータ値を更新する学習処理と、バッファ領域に記憶される訓練データが特定のデータ量になるように、他のコンピュータと共通に使用されるストレージ装置に訓練データを要求する先読み処理とをそれぞれ含み、他のコンピュータと同期して実行される複数のイテレーションのうちの第1のイテレーションにおいて、バッファ領域から訓練データを読み出す第1の読み出し時間を測定する。コンピュータは、第1の読み出し時間が、第1のイテレーションにおいて他のコンピュータで測定される第2の読み出し時間より大きいことを含む第1の遅延条件を満たす場合、第1のイテレーションよりも後の第2のイテレーションにおいて使用される特定のデータ量を増加させる。
【選択図】図9
【特許請求の範囲】
【請求項1】
バッファ領域から訓練データを読み出して機械学習モデルのパラメータ値を更新する学習処理と、前記バッファ領域に記憶される訓練データが特定のデータ量になるように、他のコンピュータと共通に使用されるストレージ装置に訓練データを要求する先読み処理とをそれぞれ含み、前記他のコンピュータと同期して実行される複数のイテレーションのうちの第1のイテレーションにおいて、前記バッファ領域から訓練データを読み出す第1の読み出し時間を測定し、
前記第1の読み出し時間が、前記第1のイテレーションにおいて前記他のコンピュータで測定される第2の読み出し時間より大きいことを含む第1の遅延条件を満たす場合、前記第1のイテレーションよりも後の第2のイテレーションにおいて使用される前記特定のデータ量を増加させる、
処理をコンピュータに実行させる並列機械学習プログラム。
【請求項2】
前記第1の遅延条件は、前記第2の読み出し時間に対する前記第1の読み出し時間の比が、1より大きい第1の閾値を超えることである、
請求項1記載の並列機械学習プログラム。
【請求項3】
前記第1のイテレーションにおいて、前記ストレージ装置から訓練データを先読みして前記バッファ領域に記憶する第1の先読み時間を測定し、
前記第1の先読み時間が、前記第1のイテレーションより前の第3のイテレーションにおいて前記コンピュータで測定される第2の先読み時間より大きいことを含む第2の遅延条件を満たす場合、前記第2のイテレーションにおいて使用される前記特定のデータ量を減少させる、
処理を前記コンピュータに更に実行させる請求項1記載の並列機械学習プログラム。
【請求項4】
前記第2の遅延条件は、前記第2の先読み時間に対する前記第1の先読み時間の比が、1より大きい第2の閾値を超えることである、
請求項3記載の並列機械学習プログラム。
【請求項5】
前記特定のデータ量の増加は、増加された前記特定のデータ量を前記他のコンピュータにも適用させる処理を含む、
請求項1記載の並列機械学習プログラム。
【請求項6】
バッファ領域から訓練データを読み出して機械学習モデルのパラメータ値を更新する学習処理と、前記バッファ領域に記憶される訓練データが特定のデータ量になるように、他のコンピュータと共通に使用されるストレージ装置に訓練データを要求する先読み処理とをそれぞれ含み、前記他のコンピュータと同期して実行される複数のイテレーションのうちの第1のイテレーションにおいて、前記バッファ領域から訓練データを読み出す第1の読み出し時間を測定し、
前記第1の読み出し時間が、前記第1のイテレーションにおいて前記他のコンピュータで測定される第2の読み出し時間より大きいことを含む第1の遅延条件を満たす場合、前記第1のイテレーションよりも後の第2のイテレーションにおいて使用される前記特定のデータ量を増加させる、
処理をコンピュータが実行する並列機械学習方法。
【請求項7】
他の情報処理装置と共通に使用されるストレージ装置から受信される訓練データを記憶するバッファ領域を含む記憶部と、
前記バッファ領域から訓練データを読み出して機械学習モデルのパラメータ値を更新する学習処理と、前記バッファ領域に記憶される訓練データが特定のデータ量になるように前記ストレージ装置に訓練データを要求する先読み処理とをそれぞれ含み、前記他の情報処理装置と同期して実行される複数のイテレーションのうちの第1のイテレーションにおいて、前記バッファ領域から訓練データを読み出す第1の読み出し時間を測定し、前記第1の読み出し時間が、前記第1のイテレーションにおいて前記他の情報処理装置で測定される第2の読み出し時間より大きいことを含む第1の遅延条件を満たす場合、前記第1のイテレーションよりも後の第2のイテレーションにおいて使用される前記特定のデータ量を増加させる処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は並列機械学習プログラム、並列機械学習方法および情報処理装置に関する。
【背景技術】
【0002】
複数の情報処理装置が協調して同一の機械学習モデルを訓練することで、機械学習時間を短縮する並列機械学習がある。並列機械学習では、複数の情報処理装置が、異なる訓練データから並列に、機械学習モデルのパラメータ値を更新するための断片的情報を生成する。複数の情報処理装置は、これら断片的情報を集計してパラメータ値を更新する。通常、更新後のパラメータ値は複数の情報処理装置の間で同一である。複数の情報処理装置は、パラメータ値を更新するイテレーションを同期しながら繰り返す。
【0003】
例えば、複数の情報処理装置はそれぞれ、ミニバッチと呼ばれる一定量の訓練データからニューラルネットワークの出力の誤差を算出し、誤差逆伝播法によってパラメータ値の誤差勾配を算出する。複数の情報処理装置は、異なる訓練データから算出された誤差勾配を集計し、集計した誤差勾配を用いてパラメータ値を更新する。複数の情報処理装置は、訓練データを変えながら上記のイテレーションを繰り返す。
【0004】
なお、複数の計算ノードを用いてニューラルネットワークを訓練する並列機械学習の際に、キャッシュメモリのライン衝突を検出し、キャッシュウェイを変更することでライン衝突を解消するキャッシュ最適化方法が提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許出願公開第2021/0349835号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
複数の情報処理装置が使用する訓練データは、共通のストレージ装置に記憶されていることがある。複数の情報処理装置は、イテレーションを進めながらストレージ装置から訓練データを適宜読み込むことがある。その際、ストレージ装置から1つの情報処理装置への訓練データの読み込みは、2以上の情報処理装置からの要求が衝突するなどの偶発的理由によって一時的に遅延することがある。訓練データの受信待ちによって1つの情報処理装置でイテレーションの処理開始が遅れると、イテレーションの同期を通じてその影響が他の情報処理装置に及び、他の情報処理装置で待ち時間が発生することがある。
【0007】
そこで、複数の情報処理装置はそれぞれ、あるイテレーションで使用する訓練データを、当該イテレーションの前にストレージ装置に要求しておく先読み処理を行うことが考えられる。先読み処理によって受信される訓練データは、バッファ領域に記憶される。しかし、バッファ領域のデータ量を固定にすると、設定されたデータ量が不適切であることがあり、訓練データの先読み遅延に起因して待ち時間が発生することがある。
【0008】
例えば、バッファ領域のデータ量が過小であると、一時的な先読み遅延がバッファリングによってカバーされない可能性があり、イテレーションの開始時点で、使用する訓練データがバッファ領域に揃っていない可能性がある。一方、バッファ領域のデータ量が過大であると、複数の情報処理装置が一斉に多量の訓練データを先読みしようとすることがある。その結果、ストレージ装置の負荷が高くなってスループットが低下し、かえって複数の情報処理装置で先読み遅延が発生する可能性がある。
【0009】
そこで、1つの側面では、本発明は、並列機械学習において訓練データの先読み遅延に起因して発生する待ち時間を削減することを目的とする。
【課題を解決するための手段】
【0010】
1つの態様では、以下の処理をコンピュータに実行させる並列機械学習プログラムが提供される。バッファ領域から訓練データを読み出して機械学習モデルのパラメータ値を更新する学習処理と、バッファ領域に記憶される訓練データが特定のデータ量になるように、他のコンピュータと共通に使用されるストレージ装置に訓練データを要求する先読み処理とをそれぞれ含み、他のコンピュータと同期して実行される複数のイテレーションのうちの第1のイテレーションにおいて、バッファ領域から訓練データを読み出す第1の読み出し時間を測定する。第1の読み出し時間が、第1のイテレーションにおいて他のコンピュータで測定される第2の読み出し時間より大きいことを含む第1の遅延条件を満たす場合、第1のイテレーションよりも後の第2のイテレーションにおいて使用される特定のデータ量を増加させる。
【0011】
また、1つの態様では、並列機械学習方法が提供される。また、1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。
【発明の効果】
【0012】
1つの側面では、並列機械学習において訓練データの先読み遅延に起因して発生する待ち時間が削減される。
【図面の簡単な説明】
【0013】
図1】第1の実施の形態の情報処理装置を説明するための図である。
図2】第2の実施の形態の情報処理システムの例を示す図である。
図3】計算ノードのハードウェア例を示すブロック図である。
図4】ニューラルネットワークの構造例を示す図である。
図5】複数の計算ノードによる並列機械学習の例を示す図である。
図6】ストレージサーバに記憶される訓練データの例を示す図である。
図7】ストレージ先読みの一時的遅延の例を示す図である。
図8】ストレージサーバのスループット低下の例を示す図である。
図9】バッファサイズの変更例を示す図である。
図10】バッファサイズの変更例を示す図(続き)である。
図11】計算ノードのソフトウェア階層の例を示すブロック図である。
図12】計算ノードの機能例を示すブロック図である。
図13】機械学習の手順例を示すフローチャートである。
図14】イテレーション実行の手順例を示すフローチャートである。
図15】イテレーション実行の手順例を示すフローチャート(続き)である。
【発明を実施するための形態】
【0014】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0015】
図1は、第1の実施の形態の情報処理装置を説明するための図である。
第1の実施の形態の情報処理装置10は、情報処理装置22などの他の情報処理装置と協調して並列機械学習を実行する。情報処理装置10,22は、機械学習モデル15に含まれるパラメータ値を更新するイテレーションを同期して繰り返す。情報処理装置10,22は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置10,22が、コンピュータ、ノードまたは機械学習装置と呼ばれてもよい。
【0016】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12が、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの電子回路を含んでもよい。プロセッサは、例えば、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。プロセッサの集合が、マルチプロセッサまたは単に「プロセッサ」と呼ばれてもよい。
【0017】
記憶部11は、バッファ領域13を含む。バッファ領域13は、ストレージ装置21から受信される訓練データを記憶する。ストレージ装置21は、情報処理装置10,22が機械学習に使用する訓練データを記憶しており、情報処理装置10,22から共通にアクセスされる。ストレージ装置21は、HDDやフラッシュメモリなどの不揮発性記憶デバイスに訓練データを格納している。ストレージ装置21は、サーバ装置であってもよい。ストレージ装置21は、情報処理装置10,22からの要求に応じて訓練データを読み出し、読み出した訓練データを送信する。
【0018】
情報処理装置10,22とストレージ装置21とは、LAN(Local Area Network)などのネットワークを介して通信してもよい。例えば、情報処理装置10,22およびストレージ装置21は、ネットワークスイッチに接続されている。訓練データは、機械学習モデル15に入力される入力データと、機械学習モデル15の出力の正解を示す教師データとを対応付けた複数のレコードを含む。機械学習モデル15が画像認識モデルである場合、例えば、入力データが画像データを含み、教師データが正解クラスを含む。機械学習モデル15は、1以上のパラメータ値を含む。機械学習モデル15はニューラルネットワークであってもよく、エッジの重みを示すパラメータ値を含んでもよい。
【0019】
処理部12は、情報処理装置22と同期して複数のイテレーションを実行する。あるイテレーションから次のイテレーションに進むタイミングが、情報処理装置10,22の間で同期する。よって、あるイテレーションにおいて情報処理装置10が一定の処理を完了しても、情報処理装置22が一定の処理を完了するまで次のイテレーションに進まずに待機する場合がある。各イテレーションは、学習処理および先読み処理を含む。
【0020】
学習処理は、バッファ領域13から一定量の訓練データを読み出して機械学習モデル15のパラメータ値を更新する。一定量の訓練データは、例えば、一定個数の訓練データレコードである。一定量の訓練データはバッチまたはミニバッチと呼ばれることがあり、一定量はバッチサイズまたはミニバッチサイズと呼ばれることがある。一定量の訓練データは、例えば、クラスラベルがそれぞれ付された一定枚数の画像データである。
【0021】
例えば、学習処理は、機械学習モデル15に入力データを入力し、機械学習モデル15の出力と教師データとの間の誤差を算出する。学習処理は、一定量の訓練データの中で平均誤差を算出する。学習処理は、誤差逆伝播法によってパラメータ値に対する誤差勾配を算出する。学習処理は、算出された誤差勾配を示す誤差情報を情報処理装置10,22の間で交換して、誤差勾配の合計または平均を算出する。学習処理は、集計された誤差勾配に学習率を乗じた分だけパラメータ値を変動させる。
【0022】
先読み処理は、バッファ領域13に記憶される訓練データがデータ量14になるように、ストレージ装置21に訓練データを要求する。データ量14が、先読み量またはバッファサイズと呼ばれてもよい。先読み処理は、あるイテレーションで使用される訓練データを、当該イテレーションより前にストレージ装置21に要求する。先読み処理は、ストレージ装置21から受信された訓練データをバッファ領域13に格納する。例えば、先読み処理は、次のイテレーションの開始時点でバッファ領域13の訓練データがデータ量14に到達するように、不足分だけストレージ装置21に訓練データを要求する。データ量14の初期値は、例えば、ミニバッチサイズである。その場合、先読み処理は、あるイテレーションで使用される訓練データを、当該イテレーションの1つ前のイテレーションでストレージ装置21に要求する。学習処理と先読み処理とは並行に実行される。
【0023】
理想的には、あるイテレーションで使用される訓練データが、当該イテレーションの開始時点でバッファ領域13に揃っていることが好ましい。しかし、先読み処理の遅延によって、あるイテレーションで使用される訓練データが、当該イテレーションの開始時点でバッファ領域13に揃っていない可能性がある。その場合、学習処理は、使用する訓練データが揃うまでバッファ領域13を監視し続けることになり、訓練データの読み出しを開始してから終了するまでの読み出し時間が長くなることがある。その結果、当該イテレーションの実行時間が長くなることがある。
【0024】
先読み処理の遅延は、2以上の情報処理装置からの要求が偶発的に衝突することによって発生する一時的遅延であることがある。一時的遅延は、予期しない遅延または偶発的遅延と呼ばれてもよい。一時的遅延は、ストレージ装置21の負荷の一時的上昇や、ストレージ装置21に接続された通信装置の負荷の一時的上昇などによって発生し得る。一時的遅延は、2以上の情報処理装置のうちの一部の情報処理装置についてのみ発生することがある。よって、情報処理装置10がストレージ装置21に訓練データを要求してから訓練データを受信するまでの応答時間が変動するという遅延揺れが発生し得る。情報処理装置10で先読み処理の遅延があると、情報処理装置10,22がイテレーションを同期させるため、情報処理装置22で待ち時間が生じる可能性がある。
【0025】
そこで、処理部12は、待ち時間が削減されるようにデータ量14を動的に調整する。処理部12は、第1のイテレーションにおいて、バッファ領域13から訓練データを読み出すために要した読み出し時間16を測定する。読み出し時間16は、第1のイテレーションで使用する訓練データの読み出しを開始してから、一定量の訓練データの読み出しが完了するまでの経過時間である。第1のイテレーションの開始時点でバッファ領域13の訓練データが一定量に満たない場合、読み出し時間16が長くなることがある。
【0026】
情報処理装置22も、第1のイテレーションにおいて、情報処理装置22がもつバッファ領域から訓練データを読み出すために要した読み出し時間23を測定する。処理部12は、読み出し時間16が読み出し時間23より大きいことを含む遅延条件を満たす場合、第1のイテレーションよりも後の第2のイテレーションの先読み処理で使用されるデータ量14を増加させる。例えば、処理部12は、情報処理装置22から読み出し時間23を受信し、読み出し時間16が遅延条件を満たすか判定する。
【0027】
遅延条件は、例えば、読み出し時間23に対する読み出し時間16の比が、1より大きい閾値を超えることである。第2のイテレーションは、例えば、第1のイテレーションの1つ後のイテレーションである。先読み処理のデータ量14が増加することで、一時的遅延によってイテレーションの開始時点でバッファ領域13の訓練データが不足しているリスクが低下する。なお、情報処理装置10がデータ量14を増加させた際、情報処理装置22もバッファ領域のデータ量を増加させてもよい。また、情報処理装置22はバッファ領域のデータ量を、情報処理装置10のデータ量14と一致させてもよい。
【0028】
以上説明したように、第1の実施の形態の情報処理装置10は、第1のイテレーションにおいて、バッファ領域13から訓練データを読み出す読み出し時間16を測定する。情報処理装置10は、読み出し時間16が、情報処理装置22の読み出し時間23より大きいことを含む遅延条件を満たす場合、第1のイテレーションよりも後の第2のイテレーションにおいて使用されるデータ量14を増加させる。
【0029】
これにより、情報処理装置10は、現在の先読みデータ量のもとでカバーされない訓練データの受信遅延を検出することができ、検出された受信遅延がカバーされるように先読みデータ量を調整することができる。よって、並列機械学習において訓練データの受信遅延に起因して発生する待ち時間が削減される。また、適切なデータ量14をユーザが指定しなくてもよく、情報処理装置の台数や訓練データの総量やストレージ装置21のハードウェア性能などのシステム要件に適合するように、データ量14が自動的に調整される。
【0030】
なお、遅延条件は、読み出し時間23に対する読み出し時間16の比が閾値を超えることであってもよい。これにより、情報処理装置10は、読み出し時間16,23のスケールに依存せずに閾値を設定することができ、データ量14の調整を様々な機械学習タスクに適用することができる。また、情報処理装置10は、データ量14の増加を情報処理装置22に適用させてもよい。情報処理装置10で発生した一時的遅延は情報処理装置22でも発生する可能性があるため、これにより待ち時間が削減される。
【0031】
また、情報処理装置10は、第1のイテレーションにおいて、ストレージ装置21から訓練データを先読みしてバッファ領域13に記憶するための第1の先読み時間を測定してもよい。情報処理装置10は、第1の先読み時間が、第1のイテレーションより前の第3のイテレーションで情報処理装置10によって測定された第2の先読み時間より大きいことを含む遅延条件を満たす場合、データ量14を減少させてもよい。この遅延条件は、第2の先読み時間に対する第1の先読み時間の比が閾値を超えることであってもよい。
【0032】
複数の情報処理装置の先読みデータ量が増加すると、これら複数の情報処理装置がストレージ装置21に対して一斉に多量の訓練データを要求する可能性がある。これにより、ストレージ装置21の負荷が増大し、スループットが低下して応答時間が長くなる可能性がある。これにより、かえって複数の情報処理装置の全体で先読み処理が遅延する可能性がある。これに対して、上記の処理によって、情報処理装置10は、ストレージ装置21のスループットの低下を検出することができ、ストレージ装置21のハードウェア性能に対して先読みデータ量が過大になることを抑制できる。
【0033】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
【0034】
第2の実施の形態の情報処理システムは、ネットワークスイッチ31と、ストレージサーバ32と、計算ノード33,34,35を含む複数の計算ノードとを有する。計算ノードの台数は、例えば、1000台である。ストレージサーバ32および計算ノード33,34,35は、ネットワークスイッチ31に接続されている。
【0035】
ネットワークスイッチ31は、ストレージサーバ32と計算ノード33,34,35との間の通信を中継する通信装置である。ただし、ストレージサーバ32と計算ノード33,34,35とを接続するネットワークが、複数台のネットワークスイッチを含んでもよく、ルータなどの他の種類の通信装置を含んでもよい。
【0036】
ストレージサーバ32は、機械学習に使用される訓練データを記憶するサーバコンピュータである。ストレージサーバ32は、HDDやフラッシュメモリなどの不揮発性記憶デバイスに訓練データを記憶している。ストレージサーバ32は、計算ノード33,34,35から要求を受信し、要求された訓練データを読み出して返信する。第2の実施の形態で訓練される機械学習モデルは画像認識モデルであり、第2の実施の形態の訓練データはクラスラベルが付与された画像データである。ストレージサーバ32は、例えば、1枚当たり1メガバイトの画像データを100万枚分記憶している。
【0037】
計算ノード33,34,35は、並列機械学習に使用されるクライアントコンピュータまたはサーバコンピュータである。計算ノード33,34,35は、協調して単一の機械学習モデルを訓練する。計算ノード33,34,35は、機械学習モデルのパラメータ値として同一の初期値をもつ。計算ノード33,34,35は、互いに異なる訓練データをストレージサーバ32から読み込み、機械学習モデルのパラメータ値を更新するための断片的情報をそれぞれ生成する。計算ノード33,34,35は、異なる断片的情報を通信によって集計し、機械学習モデルのパラメータ値をそれぞれ更新する。その結果、計算ノード33,34,35は、同一の更新されたパラメータ値をもつ。計算ノード33,34,35は、上記のイテレーションを同期しながら繰り返す。
【0038】
なお、ストレージサーバ32は、第1の実施の形態のストレージ装置21に対応する。計算ノード33は、第1の実施の形態の情報処理装置10に対応する。計算ノード34は、第1の実施の形態の情報処理装置22に対応する。
【0039】
図3は、計算ノードのハードウェア例を示すブロック図である。
計算ノード33は、バスに接続されたCPU101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。ストレージサーバ32や計算ノード34,35が、計算ノード33と同様のハードウェアを有してもよい。
【0040】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムおよびデータをRAM102にロードし、プログラムを実行する。計算ノード33は、複数のプロセッサを有してもよい。
【0041】
RAM102は、CPU101で実行されるプログラムおよびCPU101で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。計算ノード33は、RAM以外の種類の揮発性メモリを有してもよい。
【0042】
HDD103は、オペレーティングシステム(OS:Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムと、データとを記憶する不揮発性ストレージである。計算ノード33は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の不揮発性ストレージを有してもよい。
【0043】
GPU104は、CPU101と連携して画像処理を行い、計算ノード33に接続された表示装置111に画像を出力する。表示装置111は、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイまたはプロジェクタである。計算ノード33に、プリンタなどの他の種類の出力デバイスが接続されてもよい。また、GPU104は、GPGPU(General Purpose Computing on Graphics Processing Unit)として使用されてもよい。GPU104は、CPU101からの指示に応じてプログラムを実行し得る。計算ノード33は、RAM102以外の揮発性半導体メモリをGPUメモリとして有してもよい。
【0044】
入力インタフェース105は、計算ノード33に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112は、例えば、マウス、タッチパネルまたはキーボードである。計算ノード33に複数の入力デバイスが接続されてもよい。
【0045】
媒体リーダ106は、記録媒体113に記録されたプログラムおよびデータを読み取る読み取り装置である。記録媒体113は、例えば、磁気ディスク、光ディスクまたは半導体メモリである。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)およびHDDが含まれる。光ディスクには、CD(Compact Disc)およびDVD(Digital Versatile Disc)が含まれる。媒体リーダ106は、記録媒体113から読み取られたプログラムおよびデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、CPU101によって実行されることがある。
【0046】
記録媒体113は、可搬型記録媒体であってもよい。記録媒体113は、プログラムおよびデータの配布に用いられることがある。また、記録媒体113およびHDD103が、コンピュータ読み取り可能な記録媒体と呼ばれてもよい。
【0047】
通信インタフェース107は、ケーブルによってネットワークスイッチ31と接続される。通信インタフェース107は、ネットワークスイッチ31を介して、ストレージサーバ32や計算ノード34,35と通信する。ただし、計算ノード33が、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースを有してもよい。
【0048】
次に、並列機械学習について説明する。
図4は、ニューラルネットワークの構造例を示す図である。
ニューラルネットワーク140は、第2の実施の形態の機械学習モデルの例である。ニューラルネットワーク140は、画像データの入力を受け付け、画像データに写った物体のクラスを推定する。ニューラルネットワーク140は、層141,142,143,144などの複数の層を含む。層141は、画像データを示すテンソルを受け付ける入力層である。層142は、層141の1つ後の中間層である。層143は、層144の1つ前の中間層である。層144は、クラス推定結果を出力する出力層である。
【0049】
各層は1以上のノード(通常は複数のノード)を含む。層141以外の各層に含まれるノードは、1つ前の層に含まれるノードとの間にエッジをもつ。層144以外の各層に含まれるノードは、1つ後の層に含まれるノードとの間にエッジをもつ。各エッジは、機械学習を通じて最適化されるパラメータ値として重みをもつ。ニューラルネットワーク140は、畳み込みニューラルネットワークであってもよい。畳み込みニューラルネットワークは、畳み込み層、プーリング層および全結合層を含んでもよい。畳み込み層は、テンソル中の要素の値を当該要素の周囲にある他の要素の値を用いて更新する畳み込み演算を行う。プーリング層は、テンソル中で隣接する数個の要素を1つの要素に変換する。変換後の要素の値は、例えば、変換前の要素の値の平均値または最大値である。
【0050】
ニューラルネットワーク140を訓練する機械学習は、エッジの重みを更新するイテレーションを反復的に実行する。機械学習は、層141に画像データを入力する。機械学習は、ある層に含まれるノードの値にエッジの重みを乗じた積を、次段の層に含まれるノードに渡す。機械学習は、前段の層に含まれるノードから渡された値を合計し、活性化関数を用いて合計値を一定の値域(例えば、0以上1以下)をもつ値に変換する。機械学習は、上記の計算を層141から層144に向かって連続的に実行し、層144からクラス推定結果を抽出する。上記の処理は順方向処理(フォワード処理)と呼ばれることがある。
【0051】
機械学習は、入力した画像データに対応するクラスラベルとクラス推定結果とを比較して誤差を算出する。誤差は、例えば、平均二乗誤差(MSE:Mean Squared Error)である。機械学習は、一定量の画像データについてフォワード処理を行って、平均誤差を算出する。1つのイテレーションで使用される画像データの量は、バッチサイズまたはミニバッチサイズと呼ばれることがある。ミニバッチサイズは、例えば、画像10枚である。
【0052】
機械学習は、誤差情報を層144から層141に向かって伝播することで、各エッジの重みに対する誤差勾配を算出する。誤差勾配は、エッジの重みを微少量だけ変化させた場合の誤差の変化量を示す。上記の処理は、逆方向処理(バックワード処理)と呼ばれることがある。機械学習は、誤差勾配と学習率とを用いてエッジの重みを更新する。学習率は、ユーザから指定されるハイパーパラメータ値である。例えば、機械学習は、誤差勾配に学習率を乗じた積だけエッジの重みを減少させる。エッジの重みの更新は、更新処理(アップデート処理)と呼ばれることがある。
【0053】
機械学習は、ニューラルネットワーク140に入力する画像データを変えながら上記のイテレーションを繰り返す。イテレーション回数は、数十回から数千回程度である。また、機械学習は、異なる画像データを用いた複数のイテレーションを1セットとして、前のセットと同じ画像データを用いてイテレーションのセットを繰り返す。イテレーションのセットはエポックと呼ばれることがある。エポック数は、数十回程度である。上記のようなエッジの重みの更新方法は、誤差逆伝播法と呼ばれることがある。第2の実施の形態では、フォワード処理とバックワード処理とを合わせて「誤差逆伝播」と呼ぶことがある。
【0054】
並列機械学習の場合、計算ノード33,34,35は、ニューラルネットワーク140に対して異なる画像データを用いて異なる誤差勾配を並列に算出する。計算ノード33,34,35は、相互に通信して、算出された誤差勾配を集計する。例えば、計算ノード33,34,35は、算出された誤差勾配の平均または合計を算出する。誤差勾配の集計は、通信処理(コミュニケート処理)と呼ばれることがある。並列機械学習は、集計された誤差勾配を用いてエッジの重みを更新する。
【0055】
よって、並列機械学習では、バックワード処理とアップデート処理との間にコミュニケート処理が挿入される。第2の実施の形態では、コミュニケート処理とアップデート処理とを合わせて「重み共有」と呼ぶことがある。
【0056】
図5は、複数の計算ノードによる並列機械学習の例を示す図である。
計算ノード33は、画像10枚分の画像データを用いて誤差逆伝播151aを実行する。計算ノード34は、誤差逆伝播151aと並列に、誤差逆伝播151aと異なる画像10枚分の画像データを用いて誤差逆伝播151bを実行する。計算ノード35は、誤差逆伝播151a,151bと並列に、誤差逆伝播151a,151bと異なる画像10枚分の画像データを用いて誤差逆伝播151cを実行する。誤差逆伝播151a,151b,151cの全てが完了すると、計算ノード33,34,35は重み共有152を実行する。これによって1つのイテレーションが終了する。
【0057】
次に、計算ノード33は、誤差逆伝播151a,151b,151cと異なる画像10枚分の画像データを用いて誤差逆伝播153aを実行する。計算ノード34は、誤差逆伝播153aと並列に、誤差逆伝播151a,151b,151c,153aと異なる画像10枚分の画像データを用いて誤差逆伝播153bを実行する。計算ノード35は、誤差逆伝播153a,153bと並列に、誤差逆伝播151a,151b,151c,153a,153bと異なる画像10枚分の画像データを用いて誤差逆伝播153cを実行する。誤差逆伝播153a,153b,153cの全てが完了すると、計算ノード33,34,35は重み共有154を実行する。これによって1つのイテレーションが終了する。
【0058】
図6は、ストレージサーバに記憶される訓練データの例を示す図である。
ストレージサーバ32は、クラスラベルが付与された画像データを記憶する。例えば、ストレージサーバ32は、画像100万枚分の画像データを記憶する。ストレージサーバ32に記憶された画像データは、計算ノード33,34,35を含む複数の計算ノードによって使用される。例えば、あるイテレーションにおいて、画像データ#1~#10が計算ノード33によって使用され、画像データ#11~#20が計算ノード34によって使用され、画像データ#21~#30が計算ノード35によって使用される。
【0059】
各計算ノードが使用する画像データは、その計算ノードのノード番号と現在のイテレーション番号とから特定され得る。例えば、計算ノード33,34,35はそれぞれ、ノード番号とイテレーション番号とから、他の計算ノードと重複しないように画像データ番号を算出し、画像データ番号を指定してストレージサーバ32に画像データを要求する。
【0060】
並列機械学習では、計算ノード33,34,35は多量の画像データを使用する。そこで、計算ノード33,34,35は、イテレーションを進めながら、ストレージサーバ32から画像データを継続的に読み込む。計算ノード33,34,35は、あるイテレーションで使用する画像データを当該イテレーションより前のイテレーションにおいてストレージサーバ32に要求する先読み処理を行う。計算ノード33,34,35はそれぞれ、先読みされた画像データを記憶するバッファ領域をもつ。バッファ領域は、例えば、計算ノード33,34,35が有するRAMに含まれる。
【0061】
第2の実施の形態では、イテレーションの開始時点でバッファ領域に記憶されている画像データの枚数の最大値を、バッファサイズと呼ぶことがある。バッファサイズは、ミニバッチサイズの定数倍である。例えば、バッファサイズは、ミニバッチサイズの1倍、2倍、3倍、4倍または5倍である。よって、例えば、バッファサイズは、画像10枚、画像20枚、画像30枚、画像40枚または画像50枚である。バッファ領域の物理的記憶容量は、例えば、50メガバイトである。バッファサイズがミニバッチサイズの1倍である場合、計算ノード33,34,35は、各イテレーションにおいて次のイテレーションで使用する画像データをストレージサーバ32に要求する。
【0062】
ただし、ストレージサーバ32からバッファ領域への画像データの先読みは遅延することがある。先読みの遅延には、一時的遅延とスループット低下とがある。一時的遅延は、2以上の計算ノードからストレージサーバ32への要求が偶然衝突することによって発生する偶発的事象である。一時的遅延は、ストレージサーバ32から計算ノード33,34,35への応答時間の揺れに起因する。一時的遅延は、同一イテレーションにおいて複数の計算ノードのうちの一部の計算ノードについてのみ発生する。
【0063】
スループット低下は、同一イテレーションにおいて全ての計算ノードがストレージサーバ32に多量の画像データを要求し、ストレージサーバ32の負荷が上昇することによって発生する。スループット低下によって、ストレージサーバ32から全ての計算ノードへの応答時間が長くなる。よって、全ての計算ノードで画像データの先読みが遅延する。
【0064】
応答時間の揺れが比較的大きい情報処理システムにおいて、バッファサイズが過小に設定された場合、あるイテレーションで使用する画像データが当該イテレーションの開示時点でバッファ領域に揃っていないことが起こり得る。その場合、一部の計算ノードで誤差逆伝播の開始が遅延し、重み共有の開始までに他の計算ノードで待ち時間が発生する。一方、バッファサイズが過大に設定された場合、スループット低下が発生し得る。その場合、全ての計算ノードで誤差逆伝播の開始が遅延することがある。
【0065】
図7は、ストレージ先読みの一時的遅延の例を示す図である。
計算ノード33は、ストレージサーバ32に画像データを要求して計算ノード33のバッファ領域に画像データを記憶するストレージ先読み161aを開始する。計算ノード33は、ストレージ先読み161aの完了の少し前(例えば、画像10枚中7枚分の画像データがバッファ領域に書き込まれた時)に、バッファ領域からミニバッチサイズの画像データを読み出すバッファ読み出し162aを開始する。計算ノード33は、ストレージ先読み161aが完了すると、バッファ読み出し162aによって読み出される画像データを用いて誤差勾配を算出する誤差逆伝播163aを開始する。
【0066】
また、計算ノード33は、誤差逆伝播163aと並行して、次以降のイテレーションのための画像データをストレージサーバ32から先読みするストレージ先読み164aを開始する。ストレージ先読み164aは、バッファ読み出し162aによって不足する分だけ画像データを補充する。画像データの要求量は、バッファサイズから、イテレーション開始時のバッファ済み画像データ量を引いて、ミニバッチサイズを足した量である。
【0067】
計算ノード34は、計算ノード33と並列に、ストレージ先読み161bを開始する。計算ノード34は、ストレージ先読み161bの完了の少し前にバッファ読み出し162bを開始する。計算ノード34は、ストレージ先読み161bが完了すると、誤差逆伝播163bおよびストレージ先読み164bを開始する。
【0068】
計算ノード35は、計算ノード33,34と並列に、ストレージ先読み161cを開始する。計算ノード35は、ストレージ先読み161cの完了の少し前にバッファ読み出し162cを開始する。計算ノード35は、ストレージ先読み161cが完了すると、誤差逆伝播163cおよびストレージ先読み164cを開始する。誤差逆伝播163a,163b,163cが完了すると、計算ノード33,34,35は、誤差勾配を集計して重みを更新する重み共有165を実行する。これにより、1つのイテレーションが終了する。
【0069】
計算ノード33は、重み共有165の完了の少し前にバッファ読み出し166aを開始する。ただし、一時的遅延によってストレージ先読み164aの所要時間が長くなっている。ここではバッファサイズが小さいため、バッファ読み出し166aの開始時点でバッファ領域にはミニバッチサイズの画像データが揃っていない。そのため、バッファ読み出し166aはバッファ領域にミニバッチサイズの画像データが揃うのを待つことになり、バッファ読み出し166aの所要時間が長くなる。
【0070】
計算ノード33は、ストレージ先読み164aが完了すると、誤差逆伝播167aおよび次のストレージ先読みを開始する。ストレージ先読み164aの遅延によって、重み共有165と誤差逆伝播167aとの間に待ち時間が発生している。
【0071】
計算ノード34は、重み共有165の完了の少し前にバッファ読み出し166bを開始する。計算ノード34は、ストレージ先読み164bおよび重み共有165が完了すると、誤差逆伝播167bおよび次のストレージ先読みを開始する。計算ノード33と異なり、ストレージ先読み164bには一時的遅延が発生していない。このため、重み共有165と誤差逆伝播167bとの間に待ち時間は発生しない。
【0072】
計算ノード35は、重み共有165の完了の少し前にバッファ読み出し166cを開始する。計算ノード35は、ストレージ先読み164cおよび重み共有165が完了すると、誤差逆伝播167cおよび次のストレージ先読みを開始する。計算ノード33と異なり、ストレージ先読み164cには一時的遅延が発生していない。このため、重み共有165と誤差逆伝播167cとの間に待ち時間は発生しない。
【0073】
誤差逆伝播167a,167b,167cが完了すると、計算ノード33,34,35は、重み共有168を実行する。このとき、計算ノード33における一時的遅延の影響で、誤差逆伝播167b,167cの完了時点で誤差逆伝播167aはまだ完了していない。このため、誤差逆伝播167bと重み共有168との間に待ち時間が発生し、誤差逆伝播167cと重み共有168との間に待ち時間が発生している。このように、バッファサイズが過小であると、ストレージサーバ32の応答遅延がバッファリングによってカバーされないことがあり、予期しない待ち時間が発生することがある。
【0074】
図8は、ストレージサーバのスループット低下の例を示す図である。
計算ノード33は、ストレージ先読み171aを開始する。計算ノード34は、ストレージ先読み171bを開始する。計算ノード35は、ストレージ先読み171cを開始する。ストレージ先読み171a,171b,171cは、最初のイテレーションを早期に開始するために、ミニバッチサイズの画像データをストレージサーバ32に要求する。
【0075】
その後、計算ノード33は、バッファ読み出し172aを開始する。計算ノード33は、ストレージ先読み171aが完了すると、誤差逆伝播173aおよびストレージ先読み174aを開始する。計算ノード34は、バッファ読み出し172bを開始する。計算ノード34は、ストレージ先読み171bが完了すると、誤差逆伝播173bおよびストレージ先読み174bを開始する。計算ノード35は、バッファ読み出し172cを開始する。計算ノード35は、ストレージ先読み171cが完了すると、誤差逆伝播173cおよびストレージ先読み174cを開始する。
【0076】
ここではバッファサイズが大きいため、ストレージ先読み174a,174b,174cは、ストレージ先読み171a,171b,171cよりも多い画像データをストレージサーバ32に要求する。計算ノード33,34,35から多量の画像データが要求されるため、ストレージサーバ32では、スループットが低下して応答時間が長くなる。よって、ストレージ先読み174a,174b,174cの所要時間が長くなる。
【0077】
誤差逆伝播173a,173b,173cが完了すると、計算ノード33,34,35は、重み共有175を実行する。しかし、重み共有175が完了した時点で、計算ノード33,34,35のバッファ領域には十分な画像データが記憶されていない。
【0078】
計算ノード33は、ストレージ先読み174aの完了の少し前にバッファ読み出し176aを開始する。計算ノード33は、ストレージ先読み174aが完了すると、誤差逆伝播177aおよび次のストレージ先読みを開始する。計算ノード34は、ストレージ先読み174bの完了の少し前にバッファ読み出し176bを開始する。計算ノード34は、ストレージ先読み174bが完了すると、誤差逆伝播177bおよび次のストレージ先読みを開始する。計算ノード35は、ストレージ先読み174cの完了の少し前にバッファ読み出し176cを開始する。計算ノード35は、ストレージ先読み174cが完了すると、誤差逆伝播177cおよび次のストレージ先読みを開始する。
【0079】
ストレージ先読み174aの遅延によって、重み共有175と誤差逆伝播177aとの間に待ち時間が発生している。また、ストレージ先読み174bの遅延によって、重み共有175と誤差逆伝播177bとの間に待ち時間が発生している。また、ストレージ先読み174cの遅延によって、重み共有175と誤差逆伝播177cとの間に待ち時間が発生している。誤差逆伝播177a,177b,177cが完了すると、計算ノード33,34,35は、重み共有178を実行する。
【0080】
このように、バッファサイズが過大であると、ストレージサーバ32のスループットが低下し、かえって先読み処理が遅延して待ち時間が発生することがある。そこで、第2の実施の形態の情報処理システムは、バッファサイズを自動的に調整する。
【0081】
図9は、バッファサイズの変更例を示す図である。
ここでは、ミニバッチサイズが画像10枚であり、バッファサイズの初期値が画像10枚である場合を想定する。計算ノード33は、10枚の画像データを要求するストレージ先読み181aを開始する。計算ノード34は、10枚の画像データを要求するストレージ先読み181bを開始する。計算ノード35は、10枚の画像データを要求するストレージ先読み181cを開始する。これにより、計算ノード33,34,35のバッファ領域には、それぞれ10枚の画像データが蓄積される。
【0082】
計算ノード33は、10枚の画像データを読み出すバッファ読み出し182aを開始する。そして、計算ノード33は、誤差逆伝播183aと、10枚の画像データを要求するストレージ先読み184aとを開始する。ここでは、一時的遅延によってストレージ先読み184aの所要時間が長くなっている。計算ノード34は、10枚の画像データを読み出すバッファ読み出し182bを開始する。そして、計算ノード34は、誤差逆伝播183bと、10枚の画像データを要求するストレージ先読み184bとを開始する。
【0083】
計算ノード35は、10枚の画像データを読み出すバッファ読み出し182cを開始する。そして、計算ノード35は、誤差逆伝播183cと、10枚の画像データを要求するストレージ先読み184cとを開始する。これにより、計算ノード33,34,35のバッファ領域には、それぞれ10枚の画像データが蓄積される。計算ノード33,34,35は、誤差逆伝播183a,183b,183cが完了すると、重み共有185を実行する。これにより、1つのイテレーションが終了する。
【0084】
計算ノード33は、10枚の画像データを読み出すバッファ読み出し186aを開始する。そして、計算ノード33は、誤差逆伝播187aと、10枚の画像データを要求するストレージ先読み188aとを開始する。ここでは、ストレージ先読み184aの遅延によってバッファ読み出し186aの所要時間が長くなっている。計算ノード33は、バッファ読み出し186aに要したバッファ読み出し時間t1を測定する。バッファ読み出し時間は、画像データの読み出しのためにバッファ領域にアクセスし始めてから、ミニバッチサイズの画像データの読み出しが完了するまでの時間である。
【0085】
計算ノード34は、10枚の画像データを読み出すバッファ読み出し186bを開始する。そして、計算ノード34は、誤差逆伝播187bと、10枚の画像データを要求するストレージ先読み188bとを開始する。計算ノード34は、バッファ読み出し186bに要したバッファ読み出し時間t2を測定する。また、計算ノード34は、ストレージ先読み188bに要したストレージ先読み時間t3を測定する。ストレージ先読み時間は、ストレージサーバ32に画像データを要求し始めてから、要求した全ての画像データのバッファ領域への書き込みが完了するまでの時間である。
【0086】
計算ノード35は、10枚の画像データを読み出すバッファ読み出し186cを開始する。そして、計算ノード35は、誤差逆伝播187cと、10枚の画像データを要求するストレージ先読み188bcとを開始する。これにより、計算ノード33,34,35のバッファ領域には、それぞれ10枚の画像データが蓄積される。計算ノード33,34,35は、誤差逆伝播187a,187b,187cが完了すると、重み共有189を実行する。これにより、1つのイテレーションが終了する。
【0087】
ここで、計算ノード33は、計算ノード34からバッファ読み出し時間t2を取得する。計算ノード33は、計算ノード33のバッファ読み出し時間t1を計算ノード34のバッファ読み出し時間t2で割ったノード間比率t1/t2を算出し、事前に設定された閾値Th1と比較する。閾値Th1は、1より大きい数値である。ノード間比率t1/t2が閾値Th1より大きい場合、計算ノード33は、次のイテレーションからバッファサイズを増加することを決定する。計算ノード34,35も、計算ノード33と同様の判定を行う。少なくとも1つの計算ノードがバッファサイズの増加を決定すると、計算ノード33,34,35の全てがバッファサイズを増加させる。よって、計算ノード33,34,35のバッファサイズは統一される。ここでは、計算ノード33,34,35のバッファサイズが画像50枚に増加する場合を想定する。
【0088】
図10は、バッファサイズの変更例を示す図(続き)である。
計算ノード33は、10枚の画像データを読み出すバッファ読み出し191aを開始する。そして、計算ノード33は、誤差逆伝播192aと、50枚の画像データを要求するストレージ先読み193aとを開始する。計算ノード34は、10枚の画像データを読み出すバッファ読み出し191bを開始する。そして、計算ノード34は、誤差逆伝播192bと、50枚の画像データを要求するストレージ先読み193bとを開始する。
【0089】
計算ノード35は、10枚の画像データを読み出すバッファ読み出し191cを開始する。そして、計算ノード35は、誤差逆伝播192cと、50枚の画像データを要求するストレージ先読み193cとを開始する。これにより、計算ノード33,34,35のバッファ領域には、それぞれ50枚の画像データが蓄積される。計算ノード33,34,35は、誤差逆伝播192a,192b,192cが完了すると、重み共有194を実行する。これにより、1つのイテレーションが終了する。
【0090】
バッファサイズが急増したため、ストレージ先読み193a,193b,193cは、一斉に多量の画像データをストレージサーバ32に要求している。ここでは、ストレージサーバ32の負荷が増大し、スループット低下によってストレージ先読み193a,193b,193cの所要時間が長くなっている。計算ノード34は、ストレージ先読み193bに要したストレージ先読み時間t4を算出する。
【0091】
ここで、計算ノード34は、ストレージ先読み時間t4を、1つ前のイテレーションのストレージ先読み時間t3で割ったイテレーション間比率t4/t3を算出し、事前に設定された閾値Th2と比較する。閾値Th2は、1より大きい数値である。イテレーション間比率t4/t3が閾値Th2より大きい場合、計算ノード34は、次のイテレーションからバッファサイズを減少させることを決定する。計算ノード33,35も、計算ノード34と同様の判定を行う。ここでは、計算ノード33,34,35のバッファサイズが画像40枚に減少する場合を想定する。
【0092】
計算ノード33は、10枚の画像データを読み出すバッファ読み出し195aを開始し、誤差逆伝播196aを開始する。このイテレーションでは、ストレージサーバ32に画像データを要求しなくても、バッファ領域にはバッファサイズ相当の画像データが確保される。よって、計算ノード33は、ストレージ先読みを実行しない。
【0093】
計算ノード34は、10枚の画像データを読み出すバッファ読み出し195bを開始し、誤差逆伝播196bを開始する。計算ノード35は、10枚の画像データを読み出すバッファ読み出し195cを開始し、誤差逆伝播196cを開始する。これにより、計算ノード33,34,35のバッファ領域には、それぞれ40枚の画像データが蓄積される。計算ノード33,34,35は、誤差逆伝播196a,196b,196cが完了すると、重み共有197を実行する。これにより、1つのイテレーションが終了する。
【0094】
次のイテレーションでは、計算ノード33は、10枚の画像データを要求するストレージ先読み198aを開始する。計算ノード34は、10枚の画像データを要求するストレージ先読み198bを開始する。計算ノード35は、10枚の画像データを要求するストレージ先読み198cを開始する。これにより、計算ノード33,34,35のバッファ領域には、それぞれ40枚の画像データが蓄積される。
【0095】
このように、計算ノード33,34,35は、ノード間比率が閾値Th1を超える場合、バッファリングでカバーされない一時的遅延が発生したと判定し、バッファサイズを増加させる。一方、計算ノード33,34,35は、イテレーション間比率が閾値Th2を超える場合、ストレージサーバ32のスループット低下が発生したと判定し、バッファサイズを減少させる。これにより、システム環境に合わせてバッファサイズが適切に調整される。収束後のバッファサイズは、ストレージサーバ32の応答時間の揺れをカバーでき、かつ、ストレージサーバ32のキャパシティを超えないようなバッファサイズである。
【0096】
ここで、並列機械学習の延べ学習時間について説明する。Tを延べ学習時間、Nを計算ノード数、Iをイテレーション数とする。また、xを遅延なし時の1イテレーション当たりの実行時間、xを一時的遅延による平均遅延時間、xをスループット低下による平均遅延時間、pを一時的遅延の発生確率、pをスループット低下の発生確率とする。
【0097】
バッファサイズを過小な固定値に設定する場合、T=I×N×(x+p×x)である。バッファサイズを過大な固定値に設定する場合、T=I×N×(x+p×x)である。一方、第2の実施の形態の方法でバッファサイズを自動調整する場合、T=I×N×xである。バッファサイズを過大な固定値に設定する場合と比べた第2の実施の形態の改善率は、(x+p×x)/xである。
【0098】
次に、計算ノード33,34,35の機能および処理手順について説明する。
図11は、計算ノードのソフトウェア階層の例を示すブロック図である。
計算ノード33は、OS121、フレームワーク低レベル部122、フレームワーク高レベル部123およびニューラルネットワーク124を有する。計算ノード34,35が、計算ノード33と同様のソフトウェア階層を有してもよい。
【0099】
OS121は、計算ノード33が有するCPU101、RAM102、GPU104などの計算リソースを管理する。機械学習にGPU104が使用されてもよい。フレームワーク低レベル部122は、機械学習用ライブラリプログラムを含む機械学習フレームワークのうち、計算ノード間通信やバッファ領域の確保などの低レベル制御を行うモジュールである。フレームワーク低レベル部122は、前述の方法によってバッファサイズを自動的に調整するバッファサイズ制御部133を有する。
【0100】
フレームワーク高レベル部123は、機械学習フレームワークのうち、訓練データの読み込みや機械学習モデルのパラメータ更新などの高レベル制御を行うモジュールである。フレームワーク高レベル部123は、画像データをストレージサーバ32からバッファ領域に読み込むデータロード部134を有する。ニューラルネットワーク124は、並列機械学習によって訓練されるパラメータ値を含む機械学習モデルである。
【0101】
図12は、計算ノードの機能例を示すブロック図である。
計算ノード33は、訓練データ記憶部131、モデル記憶部132、バッファサイズ制御部133、データロード部134および重み更新部135を有する。訓練データ記憶部131およびモデル記憶部132は、例えば、RAM102またはHDD103を用いて実装される。バッファサイズ制御部133、データロード部134および重み更新部135は、例えば、CPU101またはGPU104とプログラムとを用いて実装される。
【0102】
訓練データ記憶部131は、バッファ領域を含む。バッファ領域には、データロード部134によって画像データが書き込まれる。また、バッファ領域からは、重み更新部135によって画像データが読み出される。画像データには、クラスラベルが付与されている。モデル記憶部132は、機械学習モデルとしてニューラルネットワークを記憶する。ニューラルネットワークは、エッジの重みを示すパラメータ値を含む。
【0103】
バッファサイズ制御部133は、バッファ領域のバッファサイズを制御する。バッファサイズ制御部133は、イテレーション毎にバッファ読み出し時間およびストレージ先読み時間を測定する。バッファサイズ制御部133は、ノード番号が1つ大きい隣接の計算ノードに計算ノード33のバッファ読み出し時間を送信し、ノード番号が1つ小さい隣接の計算ノードから当該計算ノードのバッファ読み出し時間を受信する。
【0104】
バッファサイズ制御部133は、バッファ読み出し時間からノード間比率を算出し、ストレージ先読み時間からイテレーション間比率を算出する。バッファサイズ制御部133は、ノード間比率およびイテレーション間比率に基づいて、次イテレーションのバッファサイズを選択する。バッファサイズ制御部133は、選択したバッファサイズを他の全ての計算ノードに送信し、複数の計算ノードの間で統一されたバッファサイズを決定する。バッファサイズ制御部133は、バッファサイズをデータロード部134に通知する。
【0105】
データロード部134は、イテレーション毎に、訓練データ記憶部131に記憶された画像データの現在のデータ量とミニバッチサイズとバッファサイズとから、先読みデータ量を算出する。データロード部134は、先読みデータ量に相当する画像データをストレージサーバ32に要求し、受信された画像データを訓練データ記憶部131に書き込む。時間測定のため、データロード部134は、ストレージ先読みの開始および終了をバッファサイズ制御部133に通知する。また、データロード部134は、バッファ読み出しの開始および終了をバッファサイズ制御部133に通知する。
【0106】
重み更新部135は、並列機械学習のイテレーションを実行する。重み更新部135は、イテレーション毎に、訓練データ記憶部131からミニバッチサイズの画像データを読み出す。重み更新部135によるバッファ読み出しは、データロード部134によって監視される。重み更新部135は、読み出された画像データを用いて誤差逆伝播を実行する。重み更新部135は、他の計算ノードと通信することで全ての計算ノードで誤差逆伝播が完了したことを検出し、重み共有を実行する。これにより、重み更新部135は、モデル記憶部132に記憶されたパラメータ値を更新する。
【0107】
なお、バッファサイズ制御部133は、隣接の1つの計算ノードとのみバッファ読み出し時間を比較すればよい。バッファサイズは、最終的に複数の計算ノードの中で最大のものに統一されるため、他の全ての計算ノードとバッファ読み出し時間を比較する場合と同様のバッファサイズが得られる。また、他の全ての計算ノードとバッファ読み出し時間を比較する場合と比べて、通信量や計算時間が削減される。
【0108】
図13は、機械学習の手順例を示すフローチャートである。
ここでは、計算ノード33の処理について説明する。計算ノード34,35においても、計算ノード33と同様の処理が実行され得る。
【0109】
(S10)バッファサイズ制御部133は、バッファサイズ倍率bufを1に初期化する。バッファサイズ倍率は、バッファサイズがミニバッチサイズ(イテレーション1つ当たりの訓練データ使用量)の何倍に相当するかを示す。バッファサイズ倍率の候補は、1,2,3,4,5である。重み更新部135は、エポック数を0に初期化する。
【0110】
(S11)重み更新部135は、エポック数が、事前に設定された最大エポック数未満であるか判断する。エポック数が最大エポック数未満である場合、ステップS12に処理が進む。エポック数が最大エポック数に達した場合、ステップS17に処理が進む。
【0111】
(S12)重み更新部135は、イテレーション数iを0に初期化する。
(S13)重み更新部135は、イテレーション数が、事前に設定された最大イテレーション数未満であるか判断する。イテレーション数が最大イテレーション数未満である場合、ステップS14に処理が進む。イテレーション数が最大イテレーション数に達した場合、ステップS16に処理が進む。
【0112】
(S14)計算ノード33は、後述するイテレーション実行を行う。
(S15)重み更新部135は、イテレーション数を1つ増加させる。そして、ステップS13に処理が戻る。
【0113】
(S16)重み更新部135は、エポック数を1つ増加させる。そして、ステップS11に処理が戻る。
(S17)重み更新部135は、訓練されたニューラルネットワークを出力する。重み更新部135は、ニューラルネットワークを不揮発性ストレージに保存してもよいし、表示装置111に表示してもよいし、他の情報処理装置に送信してもよい。
【0114】
図14は、イテレーション実行の手順例を示すフローチャートである。
(S20)データロード部134は、バッファサイズに応じたデータ量の画像データをストレージサーバ32に要求して、ストレージサーバ32からバッファ領域に画像データを読み込むストレージ先読みを開始する。
【0115】
(S21)バッファサイズ制御部133は、ステップS20で開始されたストレージ先読みについて、ストレージ先読み時間t4の測定を開始する。
(S22)重み更新部135は、バッファ領域から1イテレーション分の画像データ、すなわち、ミニバッチサイズの画像データを読み出すバッファ読み出しを開始する。
【0116】
(S23)バッファサイズ制御部133は、ステップS22で開始されたバッファデータ読み出しについて、バッファ読み出し時間t1の測定を開始する。
(S24)重み更新部135は、ステップS22のバッファ読み出しによって読み出された画像データを用いて、重みに対する誤差勾配を算出する誤差逆伝播を実行する。
【0117】
(S25)バッファサイズ制御部133は、ノード番号が1つ大きい次の計算ノードにバッファ読み出し時間t1を送信する。また、バッファサイズ制御部133は、ノード番号が1つ小さい前の計算ノードからバッファ読み出し時間t2を受信する。
【0118】
(S26)重み更新部135は、誤差勾配を複数の計算ノードの間で集計して、集計された誤差勾配を用いて重みを更新する重み共有を実行する。
(S27)バッファサイズ制御部133は、ステップS23,S25によって取得されるバッファ読み出し時間t1,t2を用いて、ノード間比率t1/t2を算出する。
【0119】
(S28)バッファサイズ制御部133は、ステップS27によって算出されるノード間比率が、事前に設定された閾値Th1より大きいか判断する。ノード間比率が閾値Th1より大きい場合、ステップS29に処理が進む。ノード間比率が閾値Th1以下である場合、後述するステップS30に処理が進む。
【0120】
(S29)バッファサイズ制御部133は、バッファサイズ倍率を増加させる。例えば、バッファサイズ制御部133は、バッファサイズ倍率を1だけ増やす。ただし、バッファサイズ倍率が既に最大値(例えば、5)である場合、バッファサイズ制御部133は、現在のバッファサイズ倍率を維持する。そして、ステップS35に処理が進む。
【0121】
図15は、イテレーション実行の手順例を示すフローチャート(続き)である。
(S30)バッファサイズ制御部133は、イテレーション数が0であるか判断する。イテレーション数が0である場合、ステップS31に処理が進む。イテレーション数が1以上である場合、ステップS32に処理が進む。
【0122】
(S31)バッファサイズ制御部133は、イテレーション間比率を1とみなす。そして、ステップS33に処理が進む。
(S32)バッファサイズ制御部133は、1つ前のイテレーションで測定されたストレージ先読み時間t3とステップS21によって取得されるストレージ先読み時間t4とを用いて、イテレーション間比率t4/t3を算出する。なお、バッファサイズ制御部133は、次のイテレーションのためにストレージ先読み時間t4を保存しておく。
【0123】
(S33)バッファサイズ制御部133は、ステップS31,S32によって算出されるイテレーション間比率が、事前に設定された閾値Th2より大きいか判断する。閾値Th2は、閾値Th1と同じでもよいし異なってもよい。イテレーション間比率が閾値Th2より大きい場合、ステップS34に処理が進む。イテレーション間比率が閾値Th2以下である場合、ステップS35に処理が進む。
【0124】
(S34)バッファサイズ制御部133は、バッファサイズ倍率を減少させる。例えば、バッファサイズ制御部133は、バッファサイズ倍率を1だけ減らす。ただし、バッファサイズ倍率が既に最小値(例えば、1)である場合、バッファサイズ制御部133は、現在のバッファサイズ倍率を維持する。
【0125】
(S35)バッファサイズ制御部133は、計算ノード33が算出したバッファサイズの情報を、他の全ての計算ノードに送信する。また、バッファサイズ制御部133は、他の計算ノードが算出したバッファサイズの情報を、他の計算ノードから受信する。バッファサイズの情報は、バッファサイズ倍率でもよいし、バッファサイズ倍率にミニバッチサイズを乗じたバッファサイズ自体でもよい。
【0126】
(S36)バッファサイズ制御部133は、計算ノード33よりも大きいバッファサイズを算出した他の計算ノードがあるか判断する。該当する他の計算ノードがある場合、ステップS37に処理が進む。それ以外の場合、イテレーション実行が終了する。
【0127】
(S37)バッファサイズ制御部133は、他の計算ノードが算出したバッファサイズのうち最大のバッファサイズを特定する。バッファサイズ制御部133は、計算ノード33のバッファサイズを、特定した最大のバッファサイズに変更する。
【0128】
以上説明したように、第2の実施の形態の情報処理システムは、計算ノード33,34,35を用いて、異なる訓練データに対応する異なる誤差情報を並列に算出し、誤差情報を集計してニューラルネットワークの重みを更新する。これにより、ニューラルネットワークを訓練する機械学習の学習時間が短縮される。また、情報処理システムは、計算ノード33,34,35にバッファ領域を設定し、ストレージサーバ32から計算ノード33,34,35に訓練データを先読みする。これにより、ストレージサーバ32の応答遅延の影響が軽減され、イテレーションの実行時間が短縮される。
【0129】
また、情報処理システムは、各計算ノードのバッファ読み出し時間を測定し、異なる計算ノードの間でバッファ読み出し時間を比較する。情報処理システムは、バッファ読み出し時間から算出されるノード間比率が閾値を超える場合、全ての計算ノードのバッファサイズを増加させる。これにより、現在のバッファリングによってカバーされない大きな一時的遅延が検出され、この一時的遅延がカバーされるようにバッファサイズが調整される。また、ノード間比率は、ノード番号が連続する隣接する計算ノードの間でのみ行われる。これにより、通信量や計算時間が抑制される。また、比率と閾値とが比較されるため、バッファ読み出し時間のスケールに依存せずに判定が行われる。
【0130】
また、情報処理システムは、各計算ノードのストレージ先読み時間を測定し、イテレーション間でストレージ先読み時間を比較する。情報処理システムは、ストレージ先読み時間から算出されるイテレーション間比率が閾値を超える場合、その計算ノードのバッファサイズを減少させる。これにより、ストレージサーバ32の過負荷によるスループット低下が検出され、スループットが改善するようにバッファサイズが調整される。その結果、バッファサイズが、システム環境に適合した適切なサイズに収束する。また、バッファサイズは自動的に調整され、ユーザが調整する負担が軽減される。また、比率と閾値とが比較されるため、ストレージ先読み時間のスケールに依存せずに判定が行われる。
【符号の説明】
【0131】
10,22 情報処理装置
11 記憶部
12 処理部
13 バッファ領域
14 データ量
15 機械学習モデル
16,23 読み出し時間
21 ストレージ装置
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15