JP2022088844A - 演算処理装置、演算処理方法および演算処理プログラム - Google Patents

演算処理装置、演算処理方法および演算処理プログラム Download PDF

Info

Publication number
JP2022088844A
JP2022088844A JP2020200914A JP2020200914A JP2022088844A JP 2022088844 A JP2022088844 A JP 2022088844A JP 2020200914 A JP2020200914 A JP 2020200914A JP 2020200914 A JP2020200914 A JP 2020200914A JP 2022088844 A JP2022088844 A JP 2022088844A
Authority
JP
Japan
Prior art keywords
processes
learning
flag
update information
superiority
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2020200914A
Other languages
English (en)
Inventor
真弘 三輪
Masahiro Miwa
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020200914A priority Critical patent/JP2022088844A/ja
Priority to EP21199253.2A priority patent/EP4009241A1/en
Priority to US17/488,356 priority patent/US20220180161A1/en
Priority to CN202111216473.1A priority patent/CN114611657A/zh
Publication of JP2022088844A publication Critical patent/JP2022088844A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/543Local

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Image Processing (AREA)
  • Image Analysis (AREA)

Abstract

【課題】学習を実行するプロセス数を減らした場合の学習の優位性を1回の集約処理により判定する。【解決手段】演算処理装置は、ディープニューラルネットワークの学習を実行可能な演算部を有する演算処理装置であって、複数のプロセスを前記演算部に割り当てて前記学習を並列に実行し、前記複数のプロセスのそれぞれによる学習により得られた、前記ディープニューラルネットワークで使用する複数の変数の更新にそれぞれ使用する複数の変数更新情報を、前記複数の変数毎に前記複数のプロセス間で集約する集約処理を実行し、前記集約処理中に、前記複数のプロセス間で集約された変数更新情報である第1変数更新情報と、集約途中の変数更新情報である第2変数更新情報とに基づいて、前記複数のプロセスのプロセス数より少ない所定数のプロセスによる学習の優位性を判定する。【選択図】図13

Description

本発明は、演算処理装置、演算処理方法および演算処理プログラムに関する。
深層学習において、複数のプロセス(計算ノード)が学習データの異なる部分を使用して、ディープニューラルネットワークの学習を並列に実行する手法が知られている。ディープニューラルネットワークの学習を複数のプロセスで並列に実行する場合、バックワード処理とアップデート処理との間に、変数(ニューラルネットワークの重みの勾配情報)を複数のプロセス間で集約するオールリデュース等の集約処理が実行される(例えば、特許文献1-3参照)。
特開2020-068016号公報 特開2020-046713号公報 特開2019-109875号公報
ディープニューラルネットワークの学習では、画像等の認識精度が所定の精度以上になるまで学習が繰り返し実行される。認識精度が所定の精度以上になるまでの学習時間は、学習を実行するプロセス数(すなわち、並列数)が多くなると短縮されることがある。しかしながら、学習を実行するプロセス数を減らしても、学習時間をほとんど変えることなく、プロセス数を減らす前と同等の認識精度が得られる場合がある。少ないプロセス数でも同等の認識精度を達成できる場合、プロセスが使用するハードウェア資源(電力)を少なくすることができる。以降、少ないプロセス数でも同等の認識精度が得られることを学習の優位性があるという。プロセス数を減らせるか否かは、バックワード処理後、学習結果を集約するプロセス数が異なる場合の集約処理をそれぞれ実行し、集約結果を比較することで判定する。
1つの側面では、本発明は、学習を実行するプロセス数を減らした場合の学習の優位性を1回の集約処理により判定することを目的とする。
一つの観点によれば、演算処理装置は、ディープニューラルネットワークの学習を実行可能な演算部を有する演算処理装置であって、複数のプロセスを前記演算部に割り当てて前記学習を並列に実行し、前記複数のプロセスのそれぞれによる学習により得られた、前記ディープニューラルネットワークで使用する複数の変数の更新にそれぞれ使用する複数の変数更新情報を、前記複数の変数毎に前記複数のプロセス間で集約する集約処理を実行し、前記集約処理中に、前記複数のプロセス間で集約された変数更新情報である第1変数更新情報と、集約途中の変数更新情報である第2変数更新情報とに基づいて、前記複数のプロセスのプロセス数より少ない所定数のプロセスによる学習の優位性を判定する。
学習を実行するプロセス数を減らした場合の学習の優位性を1回の集約処理により判定することができる。
一実施形態における演算処理装置の一例を示すブロック図である。 図1のサーバにより実行されるDNNの学習の一例を示す説明図である。 プロセス間通信の1つであるオールリデュース通信の概要を示す説明図である。 図1のサーバによりDNNの学習に使用するプロセス数を最適化する処理の一例を示す説明図である。 DNNの学習において、プロセス数の相違による認識精度の違いの一例を示す説明図である。 図1のサーバが図4のプロセス間通信としてリングオールリデュース通信を実行する例を示す説明図である。 図6の続きを示す説明図である。 図7の続きを示す説明図である。 図8の続きを示す説明図である。 図9の続きを示す説明図である。 図10の続きを示す説明図である。 図11の続きを示す説明図である。 図12の続きを示す説明図である。 図13の続きを示す説明図である。 図14の続きを示す説明図である。 図15の続きを示す説明図である。 図16の続きを示す説明図である。 図17の続きを示す説明図である。 図1のサーバによるDNNの学習の一例を示すフロー図である。
以下に図面を参照して、実施形態が説明される。
図1は、一実施形態における演算処理装置の一例を示す。この実施形態の演算処理装置は、例えば、サーバ100である。サーバ100は、プロセッサ210およびメモリ220が搭載されるアクセラレータボード200と、ホストCPU(Central Processing Unit)310およびメモリ320が搭載されるホスト300と、ストレージ400とを有する。プロセッサ210とホスト300のホストCPU310とは、例えば、PCIe(Peripheral Component Interconnect express)バス等の通信バスで相互に接続される。
図1では、サーバ100は、2枚のアクセラレータボード200を含むが、1枚または3枚以上のアクセラレータボード200を含んでもよい。また、アクセラレータボード200は、複数のプロセッサ210を含んでもよい。この場合、アクセラレータボード200に搭載される複数のプロセッサ210は、同じ種類でもよく、異なる種類でもよい。
なお、アクセラレータボード200またはプロセッサ210が単独でDNNの学習を実行可能な場合、アクセラレータボード200またはプロセッサ210を、本実施形態の演算処理装置として機能させてもよい。さらに、DNNの学習を複数のサーバ100を含むクラスタにより実行する場合、クラスタを本実施形態の演算処理装置として機能させてもよい。
例えば、プロセッサ210は、GPU(Graphics Processing Unit)、CPUまたはディープラーニング用の専用プロセッサである。プロセッサ210は、マトリックス状に配置された複数の処理部PE(Processing Element)を有する。例えば、各処理部PEは、積和演算器等の演算器およびレジスタ等を有する。各処理部PEに搭載される演算器は、浮動小数点演算器でもよく、固定小数点演算器でもよい。プロセッサ210は、ニューラルネットワークの学習を実行可能な演算部の一例である。
メモリ220は、例えば、DRAM(Dynamic Random Access Memory)等のメインメモリであり、各処理部PEがディープニューラルネットワークの学習で使用するデータ(DNNの各レイヤの入力データ、重み等の変数、出力データ等)が格納される。
ホストCPU310は、プロセッサ210を制御して、プロセッサ210にDNNの学習を実行させる。例えば、ホストCPU310は、DRAM等のメインメモリであるメモリ320に展開された演算処理プログラムを実行することで、プロセッサ210にDNNの学習を実行させる。ホストCPU310は、階層的に設けられたメモリ320とストレージ400とに接続される。例えば、ストレージ400は、HDD(Hard Disk Drive)またはSSD(Solid State Drive)の少なくともいずれかを含む。そして、ホストCPU310は、DNNの学習において、ストレージ400に格納された学習データ410を使用して、プロセッサ210に学習を実行させる。
図2は、図1のサーバ100により実行されるDNNの学習の一例を示す。図2の上側は、本実施形態による学習の流れを示し、図2の下側は、他の手法による学習の流れ(比較例)を示す。サーバ100は、DNNの学習を実行するタスクをn-1個のプロセスP(P0、P1、P2、...、Pn)を使用して並列に実行する。各プロセスPは、異なるデータを使用して共通のDNNの学習を実行する。なお、この実施形態では、説明を分かりやすくするため、サーバ100が4個のプロセスPを並列に実行する例を示すが、プロセスPの並列数は、4個に限定されない。なお、サーバ100が実行するDNNの学習に使用する各種計算は、サーバ100からの指示に基づいてプロセッサ210により実行される。
サーバ100は、フォワード処理FWD、バックワード処理BWD、プロセス間通信COMMおよびアップデート処理UPを繰り返すことでDNNの学習を実行する。サーバ100は、プロセスP毎のフォワード処理FWDにおいて、DNNに入力されたデータと重みとの演算を、入力側のレイヤから順に実行し、出力データを得る。サーバ100は、プロセスP毎に、出力データと正解データとの差である誤差(損失関数)を算出する。
サーバ100は、プロセスP毎のバックワード処理BWDにおいて、誤差が小さくなる重みを得るための重み勾配データ(ニューラルネットワークの重みパラメータに関する損失関数の勾配)を算出する。次に、サーバ100は、プロセス間通信COMMにおいて、各プロセスPにより算出された重み勾配データを全てのプロセスPで共有し、全てのプロセスPに重み勾配データの平均を取得する。例えば、プロセス間通信COMMとして、リングオールリデュース通信が使用される。プロセス間通信COMMおよびリングオールリデュース通信は、重み勾配データを集約する集約処理の一例である。
そして、サーバ100は、プロセスP毎のアップデート処理UPにおいて、プロセスP間で平均化された重み勾配データを使用して重みを更新する。更新された重みは、次の学習において全てのプロセスPで共通に使用される。サーバ100は、更新した重みを使用して、次の学習(フォワード処理FWD、バックワード処理BWD、プロセス間通信COMMおよびアップデート処理UP)を繰り返し実行する。サーバ100は、損失関数の減少によりDNNによる認識精度が所定以上に向上した場合、または、所定のエポック数の学習を実行した場合、DNNの学習を終了する。
図2の上側では、3通りの異なるプロセス数(P0-P3の4プロセス、P0-P2の3プロセス、P0-P1の2プロセス)の重み勾配データの平均が、1回のプロセス間通信COMMにより算出される。3通りの異なるプロセス数(P0-P3の4プロセス、P0-P2の3プロセス、P0-P1の2プロセス)の重み勾配データの平均を1回のプロセス間通信COMMにより算出する例は、図6から図14で説明される。図2の下側の比較例では、3通りのプロセス数(P0-P3の4プロセス、P0-P2の3プロセス、P0-P1の2プロセス)の重み勾配データの平均が、3回のプロセス間通信COMMによりそれぞれ算出される。
サーバ100は、プロセスP3またはプロセスP2-P3による学習を省略した場合でも、所定のエポック数で認識精度を規定の精度以上に向上できると判断した場合、プロセスPの数を減らして、以降の学習を継続する。学習を実行するプロセス数を少なくすることで、以降の学習で使用するプロセッサ210、アクセラレータボード200またはサーバ100の数を削減することができ、ハードウェア資源を削減しつつ、電力を削減することができる。
この実施形態では、1回のプロセス間通信COMMにより、複数通りのプロセス数の重み勾配データの平均を算出できるため、図2の下側の比較例に比べて、学習時間を短縮することができ、学習効率を向上することができる。換言すれば、学習を実行させるプロセス数を減らした場合の学習の優位性を1回の集約処理により判定することができる。
図3は、プロセス間通信COMMの1つであるオールリデュース通信の概要を示す。図3では、4つのプロセスP0-P3間で、配列中の2つ要素(i=0、1)の和を算出するオールリデュース通信の例が示される。オールリデュース通信で集約するときの演算として、SUM(和)の他に、MAX(最大)およびMIN(最小)がある。
オールリデュース通信では、各プロセスPは、4つのプロセスP0-P3の各要素iの値を足し込むことで和を算出する。図3に示す例では、オールリデュース通信による足し込みにより、各プロセスPが保持する要素i=0、1の値は、それぞれ"13"、"14"になる。また、各要素i=0、1の値がプロセス数で除算されることで、平均値が算出可能である。以下では、オールリデュース通信は、単にオールリデュースとも称される。
図4は、図1のサーバ100によりDNNの学習に使用するプロセス数を最適化する処理の一例を示す説明図である。図2の上側の処理と同様の処理については、詳細な説明は省略する。図4において、符号wg(weight gradient)は、プロセスP毎にバックワード処理BWDで算出されたの重み勾配データを示し、符号wgの末尾の数値は、プロセスPを識別するプロセス番号を示す。重み勾配データは、変数更新情報の一例である。
符号wgidealは、プロセス数を削減しない4つのプロセスP0-P3の理想的な重み勾配データの平均を示す(全てのプロセス数の学習結果を使用する場合を理想とする)。符号wgtmp_1は、プロセス数を1つ削減した3つのプロセスP0、P1、P2の重み勾配データの平均を示す。符号wgtmp_2は、プロセス数を2つ削減した2つのプロセスP0、P1の重み勾配データの平均を示す。
サーバ100は、1回のプロセス間通信COMMで算出した3種類の重み勾配データのそれぞれの平均を使用して、重み勾配データの理想値wgidealからの違い(理想のベクトルからの差のノルムΔ1、Δ2)を算出する。プロセス数を1つ削減した場合の差のノルムΔ1は、norm(wgideal-wgtmp_1)である。プロセス数を2つ削減した場合の差のノルムΔ2は、norm(wgideal-wgtmp_2)である。
サーバ100は、差のノルムΔ1、Δ2のそれぞれが所定の閾値以下(例えば、20%以内)であるかを判定する。この例では、差のノルムΔ1は、所定の閾値より小さく、差のノルムΔ2は、所定の閾値より大きい。このため、サーバ100は、以降の学習において、例えば、プロセスP3を除いた3つのプロセスP0-P2を使用して、学習を継続することを決定する。
そして、サーバ100は、プロセスP0-P2のリングオールリデュースにより平均化された重み勾配データの平均wgtmp_1を使用したアップデート処理UPにより、重みの更新値を算出し、算出した重みの更新値を各プロセスP0-P2に反映する。そして、サーバ100は、プロセスP0-P2を使用して、学習を継続する。
図5は、DNNの学習において、プロセス数の相違による認識精度の違いの一例を示す。図5は、例えば、32個のGPUに32個のプロセスを割り当て、ディープニューラルネットワークの一種であるResNet-50と、標準データセットであるImageNetとを使用して学習を実行する例が示される。エポック数は、学習の反復回数であり、エポック数が少ないほど学習時間が短いことを示す。
プロセスを取り除くことなく学習を実行したときの認識精度は、86エポックで75.91%である。ここで、目標の認識精度は、例えば、75.9%以上である。目標の認識精度を達成した学習は、取り除くプロセス数が1個、2個、4個、8個の場合である。16個のプロセスを取り除いた場合、90エポックの学習を実行しても認識精度は75.69%である。図5より、8個のプロセスを取り除き、24個のプロセスで学習を実行することで、学習時間を増加させることなく、所定の認識精度が得られることが分かる。
図6から図18は、図1のサーバ100が図4のプロセス間通信COMMとしてリングオールリデュース通信を実行する例を示す。サーバ100は、図6から図18に示すリングオールリデュース通信による集約結果に基づいて、プロセスP0-P3の数が削減可能か否かを判定する。以下では、リングオールリデュース通信は、単にリングオールリデュースとも称される。図6から図18に示す各ステップは、リングオールリデュース通信によるプロセス間でのデータの転送を示し、ステップの総数は、リングオールリデュース通信のコストを示す。
図6から図18において、白抜きの矢印は、データが転送される方向を示す。この例においても、図4に示したように、4個のプロセスP0-P3を使用して、フォワード処理およびバックワード処理が並列に実行される。リングオールリデュースは、サーバ100のホストCPU310が演算処理プログラムを実行することで実現されるが、以下では、プロセスP0-P3の動作として説明される。
例えば、各プロセスP0-P3は、1次元のデータ(要素)を保持する4個の領域PR(PRn0-PRn3;nはプロセス番号)と、バッファBUFと、フラグ領域PG2、PG3とを有する。各プロセスP0-P3に設けられる領域PRの数は、4個に限定されないが、リングオールリデュース処理を効率的に実行するために、プロセス数の整数倍であることが好ましい。
各プロセスP0-P3の4つの領域PRn0-PRn3、バッファBUFおよびフラグ領域PG2、PG3は、例えば、図1のメモリ220または図1のプロセッサ210内の内部メモリに割り当てられる。なお、バッファBUFおよびフラグ領域PG2、PG3は、図1のプロセッサ210内のレジスタに割り当てられてもよい。
図6は、バックワード処理BWDにより重み勾配データが算出された後、リングオールリデュースが開始される前の初期状態を示している。プロセスP0の4つの領域PR00-PR03は、プロセスP0のバックワード処理BWDにより算出された4個の重み勾配データP00、P01、P02、P03をそれぞれ保持する。プロセスP1の4つの領域PR10-PR13は、プロセスP1のバックワード処理BWDにより算出された4個の重み勾配データP10、P11、P12、P13をそれぞれ保持する。
プロセスP2の4つの領域PR20-PR23は、プロセスP2のバックワード処理BWDにより算出された4個の重み勾配データP20、P21、P22、P23をそれぞれ保持する。プロセスP3の4つの領域PR30-PR33は、プロセスP3のバックワード処理BWDにより算出された4個の重み勾配データP30、P31、P32、P33をそれぞれ保持する。
各プロセスP0-P3は、図7から図14において、バックワード処理BWDにより4つの領域PRn0-PRn3に保持した重み勾配データを順次集約する。また、各プロセスP0-P3は、重み勾配データの集約中に、プロセス数を2個または3個にしたときの重み勾配データの理想値からの差のノルムが所定の閾値以下かどうかの判定結果をフラグ領域PG2、PG3に設定する。
フラグ領域PG2は、プロセス数が2個に設定されたときの重み勾配データの理想値からの差のノルムが閾値以下の場合、"True"に設定され、閾値を超える場合、"False"に設定される。フラグ領域PG3は、プロセス数が3個に設定されたときの重み勾配データの理想値からの差のノルムが閾値以下の場合、"True"に設定され、閾値を超える場合、"False"に設定される。例えば、"True"は、論理値1を示し、"False"は、論理値0を示す。フラグ領域PG2、PG3は、初期状態で"-1"(例えば、16進数の連続するF)に設定される。
図7から図14において、破線の矢印は、データの転送経路を示し、太枠の領域PRは、重み勾配データが更新されたことを示す。また、各プロセスは、各ステップで隣のプロセスに送信する。隣のプロセスとは、自身のプロセス番号であるjに1を加えた番号を持つプロセスである。このとき、jに1を加えたプロセス番号が"プロセス数-1"を超える場合、"(j+1)%(プロセス数-1)"とする(%は剰余計算を表す)。具体的に、P0はP1に送信し、P1はP2に送信し、P2はP3に送信し、P3はP0に送信する。反対に、P1はP0より受信し、P2はP1より受信し、P3はP2より受信し、P0はP3より受信する。送受信の相手となるプロセスは以降のステップで共通である。
図7において、各プロセスP0-P3は、重み勾配データのリングオールリデュースの最初のステップであるステップ1を実行する。各プロセスPj(jはプロセス番号)は、末尾の数値が"j-(現在のステップ番号)+1"の領域PRに保持された重み勾配データを隣のプロセスに送信する。ステップ1では、末尾の数値が"j-1+1"すなわち、"j"の領域PRに保持された重み勾配データを送信する。具体的に、P0は、jの値が0となるので、PR00のデータを送信する。P1は、jの値が1となるので、PR01のデータを送信する。P2は、jの値が2となるので、PR02のデータを送信する。P3は、jの値が3となるので、PR03のデータを送信する。
そして、各プロセスは受信した重み勾配データをバッファBUFに格納する。そして、各プロセスは、バッファに格納した重み勾配データを末尾の番号が"j-(現在のステップ番号)"の領域PRに保持されている重み勾配データに足し込む。ステップ1では、"j-1"となる。ここで、"j-1"が負の値となる場合、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-1"の値が-1となるので、プロセス数である4を足して、3が得られる。そこで、P0は末尾の番号が3の領域PR03に足し込む。P1は、"j-1"の値が0となるので、末尾の番号が0の領域PR10に足し込む。P2は、"j-1"の値が1となるので、PR21に足し込む。P3は、"j-1"の値が2となるので、PR32に足し込む。
次に、図8において、各プロセスP0-P3は、重み勾配データのリングオールリデュースの2番目の転送であるステップ2を実行する。各プロセスPjは、末尾の数値が"j+(現在のステップ番号)-1"の領域PRに保持されている重み勾配データを隣のプロセスに送信する。ステップ2では、末尾の番号が"j-2+1"、すなわち、"j-1"の領域PRに保持されている重み勾配データを送信する。ここで、"j-1"が負の値となる場合は、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-1"が-1となるので、プロセス数の値である4を足し、3が得られる。したがって、PR03のデータを送信する。P1は、"j-1"が0となるので、PR10のデータを送信する。P2は、"j-1"が1となるので、PR21のデータを送信する。P3は、"j-1"が2となるので、PR32のデータを送信する。
そして、各プロセスPjは、隣のプロセスから受信した重み勾配データをバッファBUFに格納する。そして、各プロセスPjは、バッファBUFに格納した重み勾配データを、末尾の番号が"j-(ステップ番号)"の領域PRに保持されている重み勾配データに足し込む。ステップ2では、"j-2"となる。ここで、"j-2"が負の値となる場合、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-2"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR02に足し込む。P1は、"j-2"が-1となるので、プロセス数の値である4を足し、3が得られる。したがって、PR13に足し込む。P2は、"j-2"が0となるので、PR20に足し込む。P3は、"j-2"が1となるので、PR31に足し込む。
次に、図9において、各プロセスP0-P3は、重み勾配データのリングオールリデュースの3番目の転送であるステップ3を実行する。各プロセスPjは、末尾の数値が"j+(現在のステップ番号)-1"の領域PRに保持されている重み勾配データを隣のプロセスに送信する。ステップ3では、末尾の番号が"j-3+1"、すなわち、"j-2"の重み勾配データを送信する。ここで、"j-2"が負の値となる場合は、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-2"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、プロセス0はPR02のデータを送信する。P1は、"j-2"が-1となるので、プロセス数の値である4を足し、3が得られる。したがって、PR13のデータを送信する。P2は、"j-2"が0となるので、PR20のデータを送信する。P3は、"j-2"が1となるので、PR31のデータを送信する。
そして、各プロセスPjは、隣のプロセスから受信した重み勾配データをバッファBUFに格納する。そして、各プロセスPjは、バッファBUFに格納した重み勾配データを、末尾の番号が"j-(ステップ番号)"の領域PRに保持されている重み勾配データに足し込む。ステップ3では、"j-3"となる。ここで、"j-3"が負の値となる場合、正の値となるまでプロセス数の値を足す。具体的には、P0は、"j-3"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR01に足し込む。P1は、"j-3"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR12に足し込む。P2は、"j-3"が-1となるので、プロセス数の値である4を足し、3が得られる。したがって、PR23に足し込む。P3は、"j-3"が0となるので、PR30に足し込む。
ステップ3が完了した時点で、各プロセスPjの4個の領域PRのうち、各プロセスPjがステップ3で足し込んだ領域PRは、プロセスP0-P3の重み勾配データの集約が完了する。集約により足し込まれたP00+P10+P20+P30、P01+P11+P21+P31、P02+P12+P22+P32、P03+P13+P23+P33は、プロセスP0-P3間で集約された第1変数更新情報の一例である。
次に、図10において、各プロセスP0-P3は、重み勾配データのリングオールリデュースの4番目の転送であるステップ4を実行する。ステップ4、ステップ5およびステップ6では、ステップ3で集約が完了した重み勾配データの転送が実行される。
各プロセスPjは、末尾の数値が"j+(現在のステップ番号)-1"の領域PRに保持されている重み勾配データを隣のプロセスに送信する。ステップ4では、末尾の番号が"j-4+1"、すなわち、"j-3"の重み勾配データを送信する。ここで、"j-3"が負の値となる場合は、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-3"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR01のデータを送信する。P1は、"j-3"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR12のデータを送信する。P2は、"j-3"が-1となるので、プロセス数の値である4を足し、3が得られる。したがって、PR23を送信する。P3は、"j-3"が0となるので、PR30を送信する。
そして、各プロセスPjは、隣のプロセスから受信した重み勾配データをバッファBUFに格納する。そして、各プロセスPjは、バッファBUFに格納した重み勾配データを、末尾の番号が"j-(ステップ番号)"の領域PRに保持されている重み勾配データに上書きする。ステップ4では、"j-4"となる。ここで、"j-4"が負の値となる場合、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-4"が-4となるので、プロセス数の値である4を足し、0が得られる。したがって、PR00に上書きする。P1は、"j-4"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR11に上書きする。P2は、"j-4"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR22に上書きする。P3は、"j-4"が-1となるので、プロセス数の値である4を足し、3が得られる。したがって、PR33に上書きする。
次に、図11および図12において、各プロセスP0-P3は、重み勾配データのリングオールリデュースの5番目の転送であるステップ5を実行する。図11に示すステップ5(1)において、各プロセスPjは、末尾の数値が"j+(現在のステップ番号)-1"の領域PRに保持されている重み勾配データを隣のプロセスに送信する。ステップ5では、末尾の番号が"j-5+1"、すなわち、"j-4"の重み勾配データを送信する。ここで、"j-4"が負の値となる場合は、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-4"が-4となるので、プロセス数の値である4を足し、0が得られる。したがって、PR0のデータを送信する。P1は、"j-4"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR11のデータを送信する。P2は、"j-4"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR22を送信する。P3は、"j-4"が-1となるので、プロセス数の値である4を足し、3が得られる。したがって、PR33を送信する。
そして、各プロセスPjは、隣のプロセスから受信した集約された重み勾配データをバッファBUFに格納する。各プロセスPjは、バッファBUFに保持された4個のプロセスPの重み勾配データの平均と、末尾の数値が"j-(ステップ番号)"の領域PRに保持された2個のプロセスPの重み勾配データの平均とを比較する。ステップ5では、"j-5"の領域PRが対象となる。ここで、"j-5"が負の値となる場合は、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-5"が-5となるので、プロセス数の値である4を正の値になるまで繰り返し足すことで、3が得られる。したがって、PR03がBUFと比較対象となる領域である。P1は、"j-5"が-4となるので、プロセス数の値である4を足し、0が得られる。したがって、PR10がBUFと比較対象となる領域である。P2は、"j-5"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR21がBUFと比較対象となる領域である。P3は、"j-5"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR32がBUFと比較対象となる領域である。各プロセスにおける末尾の数字が"j-5"の領域PRに保持された2個のプロセスPの重み勾配データ(P00+P10、P11+P21、P22+P32、P03+P33)は、集約途中の第2変数更新情報の一例である。
例えば、各プロセスPjは、4個のプロセスPの重み勾配データの平均と、2個のプロセスPの重み勾配データの平均とを使用して、図4に示した差のノルムΔ2を算出する。そして、各プロセスPjは、差のノルムΔ2が閾値以下の場合、フラグ領域PG2にフラグ"True"(論理値1)を設定する。各プロセスPjは、差のノルムΔ2が閾値を超える場合、フラグ領域PG2にフラグ"False"(論理値0)を設定する。
図11に示す例では、プロセスP1のフラグ領域PG2のみが"True"に設定される。図11において、太枠のフラグ領域PG2は、フラグ"True"またはフラグ"False"のいずれかが設定されたことを示す。フラグ領域PG2のフラグ"True"は、2個のプロセスPによる認識精度が、4個のプロセスPによる認識精度と同等程度と判定したことを示す。フラグ領域PG2のフラグ"False"は、2個のプロセスPによる認識精度が、4個のプロセスPによる認識精度未満と判定したことを示す。
図11に示すように、この実施形態では、重み勾配データのリングオールリデュース中に、集約が完了した重み勾配データと集約途中の重み勾配データとを比較することで、プロセスP毎に、学習の優位性を判定することができる。そして、判定した学習の優位性を示す情報をフラグとしてフラグ領域PG2に保持することで、図15から図18に示す判定結果を集約するリングオールリデュースを実行することができる。
次に、図12のステップ5(2)において、各プロセスPjは、バッファBUFに格納した重み勾配データを、末尾の番号が"j-(ステップ番号)"の領域PRに保持されている重み勾配データに上書きする。ステップ5では、"j-5"となる。ここで、"j-5"が負の値となる場合、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-5"が-5となるので、プロセス数の値である4を正の値になるまで繰り返し足すことで、3が得られる。したがって、PR03に上書きする。P1は、"j-5"が-4となるので、プロセス数の値である4を足し、0が得られる。したがって、PR10に上書きする。P2は、"j-5"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR21に上書きする。P3は、"j-5"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR32に上書きする。
次に、図13および図14において、各プロセスP0-P3は、重み勾配データのリングオールリデュースの6番目の転送であるステップ6を実行する。図13に示すステップ6(1)において、各プロセスPjは、末尾の数値が"j+(現在のステップ番号)-1"の領域PRに保持されている重み勾配データを隣のプロセスに送信する。ステップ6では、末尾の番号が"j-6+1"、すなわち、"j-5"の重み勾配データを送信する。ここで、"j-5"が負の値となる場合は、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-5"が-5となるので、プロセス数の値である4を正の値になるまで繰り返し足すことで、3が得られる。したがって、PR03のデータを送信する。P1は、"j-5"が-4となるので、プロセス数の値である4を足し、0が得られる。したがって、PR10のデータを送信する。P2は、"j-5"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR21を送信する。P3は、"j-5"が-2となるので、プロセス数の値である4を足し、2が得られる。したがって、PR32を送信する。
そして、各プロセスPjは、隣のプロセスから受信した集約された重み勾配データをバッファBUFに格納する。各プロセスPjは、バッファBUFに保持された4個のプロセスPの重み勾配データの平均と、末尾の数値が"j-(ステップ番号)"の領域PRに保持された3個のプロセスPの重み勾配データの平均とを比較する。具体的に、P0は、"j-6"が-6となるので、プロセス数の値である4を正の値になるまで繰り返し足すことで、2が得られる。したがって、PR02がBUFと比較対象となる領域である。P1は、"j-6"が-5となるので、プロセス数の値である4を足し、3が得られる。したがって、PR13がBUFと比較対象となる領域である。P2は、"j-6"が-4となるので、プロセス数の値である4を足し、0が得られる。したがって、PR20がBUFと比較対象となる領域である。P3は、"j-6"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR31がBUFと比較対象となる領域である。各プロセスにおける末尾の数字が"j-6"の領域PRに保持された3個のプロセスPの重み勾配データ"P00+P10+P20、P11+P21+P31、P02+P22+P32、P03+P13+P33"は、集約途中の第2変数更新情報の一例である。
例えば、各プロセスPjは、4個のプロセスPの重み勾配データの平均と、3個のプロセスPの重み勾配データの平均とを使用して、図4に示した差のノルムΔ1を算出する。そして、各プロセスPjは、差のノルムΔ1が閾値以下の場合、フラグ領域PG3にフラグ"True"(論理値1)を設定する。各プロセスPjは、差のノルムΔ1が閾値を超える場合、フラグ領域PG3にフラグ"False"(論理値0)を設定する。
図13に示す例では、全てのプロセスP0-P3のフラグ領域PG3が"True"に設定される。図13において、太枠のフラグ領域PG3は、フラグ"True"またはフラグ"False"のいずれかが設定されたことを示す。フラグ領域PG3のフラグ"True"は、3個のプロセスPによる認識精度が、4個のプロセスPによる認識精度と同等程度と判定したことを示す。フラグ領域PG3のフラグ"False"は、3個のプロセスPによる認識精度が、4個のプロセスPによる認識精度未満と判定したことを示す。
図13においても、重み勾配データのリングオールリデュース中に、集約が完了した重み勾配データと集約途中の重み勾配データとを比較することで、プロセスP毎に、学習の優位性を判定することができる。そして、判定した学習の優位性を示す情報をフラグとしてフラグ領域PG3に保持することで、図15から図18に示す優位性の判定結果を集約するリングオールリデュースを実行することができる。
次に、図14のステップ6(2)において、各プロセスPjは、バッファBUFに格納した重み勾配データを、末尾の番号が"j-(ステップ番号)"の領域PRに保持されている重み勾配データに上書きする。ステップ6では、"j-6"となる。ここで、"j-6"が負の値となる場合、正の値となるまでプロセス数の値を足す。具体的に、P0は、"j-6"が-6となるので、プロセス数の値である4を正の値になるまで繰り返し足すことで、2が得られる。したがって、PR02に上書きする。P1は、"j-6"が-5となるので、プロセス数の値である4を正の値になるまで繰り返し足すことで、3が得られる。したがって、PR13に上書きする。P2は、"j-6"が-4となるので、プロセス数の値である4を足し、0が得られる。したがって、PR20に上書きする。P3は、"j-6"が-3となるので、プロセス数の値である4を足し、1が得られる。したがって、PR31に上書きする。
以上により、各プロセスP0-P3において、集約された重み勾配データの平均が全ての領域PRに保持されるとともに、フラグ"True"またはフラグ"False"のいずれかがフラグ領域PG2、PG3にそれぞれ設定される。但し、フラグ領域PG2、PG3に設定されたフラグ"True"またはフラグ"False"は、各プロセスP0-P3で計算された値である。このため、図15から図18に示すように、プロセスP0-P3間でフラグを集約するリングオールリデュース処理が実行される。
ここで、全てのプロセスP0-P3のフラグ領域PG2に"True"が設定されている場合、プロセスP0-P3間で"True"の合意が取得される。合意の取得は、後続の学習を2つのプロセスPを使用して実行する場合にも、所定のエポック数で所定以上の認識精度を得ることが可能であると判定したことを示す。一方、プロセスP0-P3のフラグ領域PG2の少なくともいずれかに"False"が設定されている場合、プロセスP0-P3間で"True"の合意が取得されず、2つのプロセスPを使用した後続の学習では、所定以上の認識精度を得ることができないと判定したことを示す。
同様に、全てのプロセスP0-P3のフラグ領域PG3に"True"が設定されている場合、プロセスP0-P3間で"True"の合意が取得される。合意の取得は、後続の学習を3つのプロセスPを使用して実行する場合にも、所定のエポック数で所定以上の認識精度を得ることが可能であると判定したことを示す。
プロセスP0-P3のフラグ領域PG2、PG3のそれぞれが、全て"True"であるか否かを判定するために、フラグ領域PG2、PG3に対するリングオールリデュースでは、MIN(最小)が判定される。これにより、例えば、全てのフラグ領域PG2が"True"(論理値1)である場合のみ、リングオールリデュースの結果である最小値を"1"にすることができ、最小値に基づいて"True"の合意を取得することができる。すなわち、フラグのリングオールリデュースにより、最小値を求める論理演算を実行することで、プロセスP0-P3の全てで"True"となる結果がPG3であることが分かる。
図15から図18は、フラグ領域PG2、PG3のみの状態の遷移が示される。図15から図18において、各フラグ領域PG2、PG3の破線の上の領域は、説明のための領域であり、フラグ領域PG2、PG3に格納される情報を示すものではない。各フラグ領域PG2、PG3の破線の下の領域は、フラグのリングオールリデュースによるMIN(最小)の判定結果を示し、図11から図14と同様に、フラグ領域PG2、PG3に格納される情報である。
各フラグ領域PG2、PG3の破線の上の領域は、図11および図13で取得されたフラグの状態を示し、末尾の"F"は"False"を示し、末尾の"T"は、"True"を示す。先頭の"Px"(xは、0-3のいずれか)は、フラグを生成したプロセスを示す。"Px"の後の"PG2"または"PG3"は、フラグ領域を示す。
図15の左側は、フラグのリングオールリデュースが実行されるフラグステップの開始前の初期状態を示し、図14のステップ6の終了時のフラグ領域PG2、PG3の状態を示す。図15の右側のフラグステップ1において、プロセスP0は、フラグ領域PG2のフラグ"P0PG2F"(False)をプロセスP1に転送する。プロセスP1は、フラグ領域PG2に保持されているフラグ"P1PG2T"と、受信したフラグ"P0PG2F"とのMIN判定を実行し、フラグを"True"から"False"に変更する。
プロセスP1は、フラグ領域PG3のフラグ"P1PG3T"(True)をプロセスP2に転送する。プロセスP2は、フラグ領域PG3に保持されているフラグ"P2PG3T"と、受信したフラグ"P1PG3T"とのMIN判定を実行し、フラグの"True"を維持する。図15から図18において、太枠のフラグ領域PG2、PG3は、フラグのMIN判定が実行されたことを示す。
次に、図16の左側のフラグステップ2において、プロセスP1は、フラグ領域PG2のフラグ"P0PG2F+P1PG2T"(False)をプロセスP2に転送する。プロセスP2は、フラグ領域PG2に保持されているフラグ"P2PG2F"と、受信したフラグ"P0PG2F+P1PG2T"とのMIN判定を実行し、フラグの"False"を維持する。
プロセスP2は、フラグ領域PG3のフラグ"P1PG3T+P2PG3T"(True)をプロセスP3に転送する。プロセスP3は、フラグ領域PG3に保持されているフラグ"P3PG3T"と、受信したフラグ"P1PG3T+P2PG3T"とのMIN判定を実行し、フラグの"True"を維持する。
次に、図16の右側のフラグステップ3において、プロセスP2は、フラグ領域PG2のフラグ"P0PG2F+P1PG2T+P2PG2F"(False)をプロセスP3に転送する。プロセスP3は、フラグ領域PG2に保持されているフラグ"P3PG2F"と、受信したフラグ"P0PG2F+P1PG2T+P2PG2F"とのMIN判定を実行し、フラグの"False"を維持する。
プロセスP3は、フラグ領域PG3のフラグ"P1PG3T+P2PG3T+P3PG3T"="True"をプロセスP0に転送する。プロセスP0は、フラグ領域PG3に保持されているフラグ"P0PG3T"と、受信したフラグ"P1PG3T+P2PG3T+P3PG3T"とのMIN判定を実行し、フラグの"True"を維持する。
フラグステップ3により、プロセスP3のフラグ領域PG2とプロセスP0のフラグ領域PG3へのフラグ("True"または"False")の集約が完了する。そして、フラグステップ4以降で、集約が完了したフラグの転送が実行される。
図17の左側のフラグステップ4において、プロセスP3は、フラグ領域PG2のフラグ"P0PG2F+P1PG2T+P2PG2F+P3PG2F"(False)をプロセスP0に転送する。プロセスP0は、受信したフラグ"P0PG2F+P1PG2T+P2PG2F+P3PG2F"をフラグ領域PG2に上書きし、フラグの"False"を維持する。
プロセスP0は、フラグ領域PG3のフラグ"P0PG3T+P1PG3T+P2PG3T+P3PG3T"(True)をプロセスP1に転送する。プロセスP1は、受信したフラグ"P0PG3T+P1PG3T+P2PG3T+P3PG3T"をフラグ領域PG3に上書きし、フラグの"True"を維持する。
次に、図17の右側のフラグステップ5において、プロセスP0は、フラグ領域PG2のフラグ"P0PG2F+P1PG2T+P2PG2F+P3PG2F"(False)をプロセスP1に転送する。プロセスP1は、受信したフラグ"P0PG2F+P1PG2T+P2PG2F"をフラグ領域PG2に上書きし、フラグの"False"を維持する。
プロセスP1は、フラグ領域PG3のフラグ"P0PG3T+P1PG3T+P2PG3T+P3PG3T"(True)をプロセスP2に転送する。プロセスP2は、受信したフラグ"P0PG3T+P1PG3T+P2PG3T+P3PG3T"をフラグ領域PG2に上書きし、フラグの"True"を維持する。
次に、図18のフラグステップ6において、プロセスP1は、フラグ領域PG2のフラグ"P0PG2F+P1PG2T+P2PG2F+P3PG2F"(False)をプロセスP2に転送する。プロセスP2は、受信したフラグ"P0PG2F+P1PG2T+P2PG2F+P3PG2F"をフラグ領域PG2に上書きし、フラグの"False"を維持する。
プロセスP2は、フラグ領域PG3のフラグ"P0PG3T+P1PG3T+P2PG3T+P3PG3T"(True)をプロセスP3に転送する。プロセスP3は、受信したフラグ"P0PG3T+P1PG3T+P2PG3T+P3PG3T"をフラグ領域PG3に上書きし、フラグの"True"を維持する。以上により、フラグのリングオールリデュースによる集約が完了し、各プロセスP0-P3のフラグ領域PG2、PG3には、それぞれ共通のフラグが保持される。
そして、サーバ100は、フラグ領域PG2、PG3に保持されたフラグの集約結果に基づいて、プロセスP0-P3の数が削減可能か否かを判定する。図18に示す例では、サーバ100は、各プロセスP0-P3のフラグ領域PG2が"False"(=論理値0)であるため、プロセス数を2個削減して2個のプロセスPのみの学習結果で学習を実行する場合、所定以上の認識精度を得ることができない、すなわち、学習の優位性がないと判定する。
また、サーバ100は、各プロセスP0-P3のフラグ領域PG3が"True"(=論理値1)であるため、プロセス数を1個削減して3個のプロセスPで学習を実行した場合でも、所定以上の認識精度を得ることが可能、すなわち、学習の優位性があると判定する。これにより、サーバ100は、プロセス数を1個削減して、3個のプロセスPをして後続の学習を実行することができる。学習を実行するプロセス数を少なくすることで、後続の学習で使用するプロセッサ210、アクセラレータボード200または処理部PEの数を削減することができ、ハードウェア資源を削減しつつ、電力を削減することができる。
なお、図6から図18では、"False"を論理値0とし、"True"を論理値1とする例を示すが、"False"を論理値1とし、"True"を論理値0としてもよい。この場合、図15から図18では、リングオールリデュースによりMAX(最大)が集約され、最大値が求められる。そして、サーバ100は、各プロセスP0-P3のフラグ領域PG3が"True"(=論理値0)であるため、プロセス数を1個削減して3個のプロセスPで学習を実行した場合でも、所定以上の認識精度を得ることが可能、すなわち、学習の優位性があると判定する。このように、フラグのリングオールリデュースにより、最大値を求める論理演算を実行することでも、プロセスP0-P3間で"True"の合意を取得することができる。
上述した図6から図14において、重み勾配データのオールリデュースは、6ステップで完了する。また、上述した図15から図18において、フラグ領域PG2、PG3のフラグのオールリデュース通信は、6ステップで完了する。すなわち、プロセス数をNとするとき、重み勾配データおよびフラグのオールリデュース通信は、それぞれ2(N-1)ステップで完了する。したがって、図15から図18に示すオールリデュースは、2*2(N-1)ステップ(この例では、12ステップ)で完了することができる。
これに対して、図2の下側に示したように、2プロセスのオールリデュースと3プロセスのオールリデュース通信とを、4プロセスのオールリデュースとは別に実行する場合、n_pg*2(N-1)ステップを要する(この例では、18ステップ)。ここで、n_pgは、重み勾配データのプロセスグループの数を示し、図2では、"3"である。
図19は、図1のサーバ100によるDNNの学習の一例を示す。例えば、図19に示す処理フローは、サーバ100のホストCPU310が演算処理プログラムを実行することで実現される。すなわち、図19は、サーバ100が実行する演算処理方法の一例および演算処理プログラムの一例を示す。なお、図19に示す処理フローは、サーバ100に搭載されるFPGA(Field-Programmable Gate Array)等のハードウェアにより実現されてもよく、ハードウェアとソフトウェアを協働させることにより実現されてもよい。
まず、ステップS10において、ホストCPU310は、図4に示したように、複数のプロセスPを使用して、フォワード処理FWDおよびバックワード処理BWDを実行する。次に、ステップS12において、ホストCPU310は、全てのプロセスP間で重み勾配データを集約する通常のリングオールリデュースを実行する。
通常のリングオールリデュースでは、図6から図14の処理に対応する。但し、フラグ領域PG2、PG3は使用されないため、図15から図18に示したプロセスP間でフラグを集約するリングオールリデュースは実行されない。このため、通常のリングオールリデュースのステップ数は、2(N-1)である。したがって、後述するステップS20で実行される評価用のリングオールリデュースに比べて、リングオールリデュースに掛かる時間を短縮することができる。
次に、ステップS14において、ホストCPU310は、ステップS12によりプロセスP間で平均化された重み勾配データを使用して重みを更新するアップデート処理UPを実行する。ステップS10からステップS14の学習は、複数のプロセスP0-P3全ての学習結果を使用して実行される優位性の判定を含まない学習の一例である。次に、ステップS16において、ホストCPU310は、例えば、所定のエポック数を実行したか否かを判定する。すなわち、ホストCPU310は、優位性の判定を含まない複数のプロセスP0-P3全ての学習結果を使用して実行される学習を所定回数実行したか否かを判定する。
ホストCPU310は、所定のエポック数を実行した場合、ステップS18を実行し、所定のエポック数を実行していない場合、ステップS10に戻る。ステップS10に戻った場合、ステップS14で更新された重みを使用して、次の学習のフォワード処理FWDおよびバックワード処理BWDが実行される。ステップS16で判定するエポック数は、ステップS10からステップS16のループ中に、認識精度の向上の程度に応じて減らされてもよい。
ここで、所定のエポック数は、ステップS20で集約されるフラグ("True"または"False")により、プロセス数の削減が可能な否かを判定できる程度のエポック数である。したがって、1回のエポック数の学習でプロセス数の削減が可能な否かを判定できる場合、ステップS16の判定を実行せずに、ステップS14の後、ステップS18が実行されてもよい。さらに、ステップS10からステップS16を省略し、ステップS18から学習が開始されてもよい。
ステップS18において、ホストCPU310は、図4に示した評価用のリングオールリデュースを実行する前のフォワード処理FWDおよびバックワード処理BWDを実行する。次に、ステップS20において、ホストCPU310は、図4に示した評価用のリングオールリデュースを実行する。すなわち、ホストCPU310は、図6から図18に示したリングオールリデュースを実行し、プロセス数を削減可能な否かを判定する。ステップS18、S20による学習は、複数のプロセスP0-P3を使用した優位性の判定を含む学習の一例である。
次に、ステップS22において、ホストCPU310は、プロセス数を削減してもDNNを所定の認識精度まで向上可能と判定した場合、ステップS24を実行する。ホストCPU310は、プロセス数を削減した場合、DNNを所定の認識精度まで向上することが困難な場合、ステップS26を実行する。ステップS24おいて、ホストCPU310は、ステップS20での判定に基づいて、プロセス数を削減し、ステップS26を実行する。
ステップS26において、ホストCPU310は、ステップS20、S22、S24の処理により決定した数のプロセスPを使用して、フォワード処理FWDおよびバックワード処理BWDを実行する。次に、ステップS28において、ホストCPU310は、ステップS12と同様に、全てのプロセスP間で重み勾配データを集約する通常のリングオールリデュースを実行する。したがって、ステップS20で実行される評価用のリングオールリデュースに比べて、リングオールリデュースに掛かる時間を短縮することができる。
次に、ステップS30において、ホストCPU310は、ステップS28よりプロセスP間で平均化された重み勾配データを使用して重みを更新するアップデート処理UPを実行する。ステップS26からステップS30の学習は、ステップS22による優位性の判定によりプロセス数が削減可能と判定された場合に、削減したプロセス数により実行される優位性の判定を含まない後続の学習の一例である。ステップS26以降の学習がプロセス数を削減して実行される場合、サーバ100の消費電力を削減することができる。
次に、ステップS32において、ホストCPU310は、認識精度が所定以上になったか否かを判定する。ホストCPU310は、認識精度が所定以上になった場合、図19に示す学習を終了する。ホストCPU310は、認識精度が所定未満の場合、ステップS34を実行する。ステップS34において、ホストCPU310は、エポック数が上限に達したか否かを判定する。
ホストCPU310は、エポック数が上限に達した場合、図19に示す動作を終了する。ホストCPU310は、エポック数が上限に達していない場合、ステップS26に戻り、ステップS30で更新された重みを使用して、次の学習のフォワード処理FWDおよびバックワード処理BWDを実行する。
以上、この実施形態では、1回のオールリデュースにより、複数通りのプロセス数の重み勾配データの平均を算出できるため、図2の下側の比較例に比べて、学習時間を短縮することができ、学習効率を向上することができる。換言すれば、学習を実行させるプロセス数を変えた場合の認識精度の優位性を1回の集約処理により判定することができる。
重み勾配データのリングオールリデュース中に、集約が完了した重み勾配データと集約途中の重み勾配データとを比較することで、プロセスP毎に、学習の優位性を判定することができる。そして、判定した学習の優位性を示す情報をフラグとしてフラグ領域PG2、PG3に保持することで、学習の優位性の判定結果を集約するリングオールリデュースを実行することができる。
フラグのリングオールリデュースにより、最小値を求める論理演算を実行することで、複数のプロセスP間で"True"の合意を取得することができる。あるいは、フラグのリングオールリデュースにより、最大値を求める論理演算を実行することで、複数のプロセスP間で"True"の合意を取得することができる。
評価用のリングオールリデュースを実行する学習の前に、フラグ領域PG2、PG3のフラグを集約しない通常のリングオールリデュースを実行することで、リングオールリデュースのステップ数を削減することができ、学習時間を短縮することができる。学習を実行するプロセス数を少なくして後続の学習を実行することで、学習に使用するハードウェア資源を削減しつつ、電力を削減することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
100 サーバ
200 アクセラレータボード
210 プロセッサ
220 メモリ
300 ホスト
310 ホストCPU
320 メモリ
400 ストレージ
410 学習データ
BUF バッファ
BWD バックワード処理
COMM プロセス間通信
FWD フォワード処理
プロセス P(P0-P3)
PE 処理部
PG2、PG3 フラグ領域
PR(PRn0-PRn3) 領域
UP アップデート処理

Claims (8)

  1. ディープニューラルネットワークの学習を実行可能な演算部を有する演算処理装置であって、
    複数のプロセスを前記演算部に割り当てて前記学習を並列に実行し、
    前記複数のプロセスのそれぞれによる学習により得られた、前記ディープニューラルネットワークで使用する複数の変数の更新にそれぞれ使用する複数の変数更新情報を、前記複数の変数毎に前記複数のプロセス間で集約する集約処理を実行し、
    前記集約処理中に、前記複数のプロセス間で集約された変数更新情報である第1変数更新情報と、集約途中の変数更新情報である第2変数更新情報とに基づいて、前記複数のプロセスのプロセス数より少ない所定数のプロセスによる学習の優位性を判定する
    演算処理装置。
  2. 前記複数のプロセスのそれぞれにおいて、前記複数の変数のいずれかに対応する前記第1変数更新情報と前記第2変数更新情報とに基づいて、変数毎に前記優位性を判定し、
    前記複数のプロセスのそれぞれで判定した変数毎の前記優位性の判定結果を集約処理により前記複数のプロセス間で集約し、集約結果に基づいて前記所定数のプロセスによる学習の優位性を判定する
    請求項1に記載の演算処理装置。
  3. 前記優位性の判定結果を論理値として保持するフラグを前記複数のプロセスに割り当て、前記優位性の判定結果を集約する集約処理により前記フラグが保持する論理値を論理演算することで、前記優位性の判定結果を前記複数のプロセス間で集約する
    請求項2に記載の演算処理装置。
  4. 前記優位性があると判定した場合、前記フラグに論理値1を保持し、前記優位性がないと判定した場合、前記フラグに論理値0を保持し、前記優位性の判定結果を集約する集約処理により最小値を求め、前記優位性の判定結果を集約する集約処理後に前記複数のプロセスの前記フラグが論理値1の場合、前記所定数のプロセスによる学習に優位性があると判定する
    請求項3に記載の演算処理装置。
  5. 前記優位性がある場合、前記フラグに論理値0を保持し、前記優位性がない場合、前記フラグに論理値1を保持し、前記優位性を集約する集約処理により最大値を求め、前記優位性を集約する集約処理後に前記複数のプロセスの前記フラグが論理値0の場合、前記所定数のプロセスによる学習に優位性があると判定する
    請求項3に記載の演算処理装置。
  6. 前記複数のプロセスを使用して、前記優位性の判定を含まない学習を所定回数実行した後、
    前記複数のプロセスを使用して、前記優位性の判定を含む学習を実行し、
    前記優位性の判定により前記所定数のプロセスによる認識精度が優位と判定した場合、前記所定数のプロセスを使用して、前記優位性の判定を含まない後続の学習を実行する
    請求項1ないし請求項5のいずれか1項に記載の演算処理装置。
  7. ディープニューラルネットワークの学習を実行可能な演算部を有する演算処理装置による演算処理方法であって、
    複数のプロセスを前記演算部に割り当てて前記学習を並列に実行し、
    前記複数のプロセスのそれぞれによる学習により得られた、前記ディープニューラルネットワークで使用する複数の変数の更新にそれぞれ使用する複数の変数更新情報を、前記複数の変数毎に前記複数のプロセス間で集約する集約処理を実行し、
    前記集約処理中に、前記複数のプロセス間で集約された変数更新情報である第1変数更新情報と、集約途中の変数更新情報である第2変数更新情報とに基づいて、前記複数のプロセスのプロセス数より少ない所定数のプロセスによる学習の優位性を判定する
    演算処理方法。
  8. ディープニューラルネットワークの学習を実行可能な演算部を有する演算処理装置が実行する演算処理プログラムであって、
    複数のプロセスを前記演算部に割り当てて前記学習を並列に実行し、
    前記複数のプロセスのそれぞれによる学習により得られた、前記ディープニューラルネットワークで使用する複数の変数の更新にそれぞれ使用する複数の変数更新情報を、前記複数の変数毎に前記複数のプロセス間で集約する集約処理を実行し、
    前記集約処理中に、前記複数のプロセス間で集約された変数更新情報である第1変数更新情報と、集約途中の変数更新情報である第2変数更新情報とに基づいて、前記複数のプロセスのプロセス数より少ない所定数のプロセスによる学習の優位性を判定する
    処理を前記演算処理装置に実行させる演算処理プログラム。
JP2020200914A 2020-12-03 2020-12-03 演算処理装置、演算処理方法および演算処理プログラム Withdrawn JP2022088844A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2020200914A JP2022088844A (ja) 2020-12-03 2020-12-03 演算処理装置、演算処理方法および演算処理プログラム
EP21199253.2A EP4009241A1 (en) 2020-12-03 2021-09-27 Arithmetic processing apparatus, arithmetic processing method, and arithmetic processing program
US17/488,356 US20220180161A1 (en) 2020-12-03 2021-09-29 Arithmetic processing apparatus, arithmetic processing method, and storage medium
CN202111216473.1A CN114611657A (zh) 2020-12-03 2021-10-19 算术处理设备、算术处理方法和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020200914A JP2022088844A (ja) 2020-12-03 2020-12-03 演算処理装置、演算処理方法および演算処理プログラム

Publications (1)

Publication Number Publication Date
JP2022088844A true JP2022088844A (ja) 2022-06-15

Family

ID=77998788

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020200914A Withdrawn JP2022088844A (ja) 2020-12-03 2020-12-03 演算処理装置、演算処理方法および演算処理プログラム

Country Status (4)

Country Link
US (1) US20220180161A1 (ja)
EP (1) EP4009241A1 (ja)
JP (1) JP2022088844A (ja)
CN (1) CN114611657A (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6877393B2 (ja) 2017-12-18 2021-05-26 株式会社東芝 システム、プログラム及び方法
JP2020046713A (ja) 2018-09-14 2020-03-26 日本電気株式会社 並列計算機システム、並列計算機システムの制御方法、及びプログラム
EP3640856A1 (en) 2018-10-19 2020-04-22 Fujitsu Limited A method, apparatus and computer program to carry out a training procedure in a convolutional neural network
WO2020209860A1 (en) * 2019-04-11 2020-10-15 Huawei Technologies Co., Ltd. Leveraging lagging gradients in machine-learning model training

Also Published As

Publication number Publication date
CN114611657A (zh) 2022-06-10
EP4009241A1 (en) 2022-06-08
US20220180161A1 (en) 2022-06-09

Similar Documents

Publication Publication Date Title
US10698730B2 (en) Neural network processor
US11373084B2 (en) Apparatus and methods for forward propagation in fully connected layers of convolutional neural networks
US10410112B2 (en) Apparatus and method for performing a forward operation of artificil neural networks
US20190065958A1 (en) Apparatus and Methods for Training in Fully Connected Layers of Convolutional Networks
KR102175044B1 (ko) 인공 신경망 역방향 트레이닝 실행용 장치와 방법
KR102162749B1 (ko) 뉴럴 네트워크 프로세서
JP2021532437A (ja) 機械学習モデルを改良して局所性を改善させること
WO2020028183A1 (en) A storage-based graph for enabling computation graph optimization
US11694075B2 (en) Partitioning control dependency edge in computation graph
CN114730275A (zh) 使用张量在分布式计算系统中进行矢量化资源调度的方法和装置
CN115237580B (zh) 面向智能计算的流水并行训练自适应调整系统、方法
US11941528B2 (en) Neural network training in a distributed system
US11551095B2 (en) Sharing preprocessing, computations, and hardware resources between multiple neural networks
CN110929856B (zh) 一种npu与主cpu的数据交互方法和装置
JP2022511581A (ja) フレキシブルケーブル接続に基づく分散型aiトレーニングトポロジー
US11409839B2 (en) Programmable and hierarchical control of execution of GEMM operation on accelerator
CN111886593A (zh) 数据处理系统和数据处理方法
JP2022088844A (ja) 演算処理装置、演算処理方法および演算処理プログラム
CN109272112B (zh) 一种面向神经网络的数据重用指令映射方法、系统及装置
CN116048770A (zh) 用于进程调度的方法和设备
CN116438543A (zh) 数据和模型并行化中的共享存储器空间
JP2021043495A (ja) 情報処理プログラムおよび情報処理方法
CN110929855B (zh) 一种数据交互方法和装置
JP7431263B2 (ja) ニューラルネットワーク演算方法及び装置
US20240232630A1 (en) Neural network training in a distributed system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230804

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20240129