以下に、本願の開示する情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムが限定されるものではない。
図1は、情報処理装置のハードウェア構成図である。情報処理装置1は、深層学習を実行する。以下では、深層学習を実行する情報処理装置1について説明するが、機械学習を実行する情報処理装置であっても同様の機能を有する。情報処理装置1は、ノードと呼ばれる場合もある。図1に示すように、情報処理装置1は、CPU(Central Processing Unit)11、深層学習用プロセッサ12、メモリ13、ストレージ14及びネットワークインタフェース15を有する。
CPU11は、深層学習用プロセッサ12が行わない演算を実行する。例えば、CPU11は、システムプログラムの処理などを実行する。
深層学習用プロセッサ12は、深層学習の演算に特化したプロセッサである。深層学習用プロセッサ12は、CPU11と比較して、深層学習の演算を高速に実行することが可能である。
メモリ13は、揮発性メモリである。メモリ13は、ストレージ14から読み込んだ学習用のデータを、深層学習向けのプロセッサに読み込んで転送するまで一時的に保持する。
ストレージ14は、HDD(Hard Disk Drive)又はSSD(Solid State Drive)などの不揮発性メモリである。ストレージ14は、情報処理装置1において深層学習を実行する際に使用するデータが格納される。
ネットワークインタフェース15は、イーサネット(登録商標)やインフィニバンド(登録商標)を経由して他の情報処理装置1に接続するためのインタフェースである。ネットワークインタフェース15は、CPU11と他の情報処理装置1に搭載されたCPU11との間のデータの送受信の中継を行う。
情報処理装置1は、図2に示すように多層のニューラルネットワークを用いて深層学習を行う。図2は、学習の過程を説明するための図である。情報処理装置1は、各層における演算を繰り返すことで認識精度を高める。例えば、図2に示すように、各層のそれぞれで演算#1~#Nが行われる場合、情報処理装置1は、学習データを用いて演算#1~#Nを繰り返す。ここで、図2に示すように、繰り返しにおける演算#1~#Nまでを実行する1回の学習の期間2をイテレーションと呼ぶ。すなわち、情報処理装置1は、イテレーションを複数回繰り返すことで深層学習を完了する。
次に、図3を参照して、本実施例に係る情報処理装置1が有する深層学習の機能について説明する。図3は、実施例1に係る情報処理装置のブロック図である。
図3に示すように、情報処理装置1は、深層学習フレームワーク100及び学習データ記憶部200を有する。学習データ記憶部200は、例えば、図1に示すストレージ14により実現される。学習データ記憶部200は、深層学習で使用する複数の学習データが予め格納される。
深層学習フレームワーク100は、深層学習のアプリケーションを容易に作成するために開発されたソフトウェアライブラリ群である。深層学習フレームワーク100は、図1に示すCPU11、深層学習用プロセッサ12及びメモリ13で実現される。
深層学習フレームワーク100は、ユーザアプリケーション101、実行制御部102、演算部103、演算データ型判定部104、学習データ読込部105、演算データ型データベース106及び表現可能割合データベース107を有する。具体的には、ユーザアプリケーション101、実行制御部102、演算データ型104及び学習データ読込部105の機能が、CPU11により実現される。これに対して、演算部103の機能は、深層学習用プロセッサ12により実現される。また、演算データ型データベース106及び表現可能割合データベース107は、メモリ13に配置される。
ユーザアプリケーション101は、操作者が作成した深層学習のアプリケーションである。ユーザアプリケーション101は、深層学習の実行を実行制御部102に指示する。
演算データ型データベース106は、各層に含まれる各演算のそれぞれで32bit浮動小数点数又は8bit固定小数点数のいずれの演算データ型が用いられるかが登録されるデータベースである。図4は、実施例1に係る演算データ型データベースの登録情報の一例の図である。演算データ型データベース106は、図4に示すように、演算ID(Identification)に対応させてそれぞれの演算で用いる演算データ型を保持する。演算IDは、1回のイテレーション中に行う各演算に対して一意に設定された識別情報である。例えば、図4の状態であれば、演算#1では32bit浮動小数点数が用いられる。また、演算#2~#4では、8bit固定小数点数が用いられる。
表現可能割合データベース107は、各イテレーションでの演算結果に含まれるテンソル要素数おいて、所定の小数点位置を用いて8bit固定小数点数で表現可能なテンソル要素数の割合が登録されるデータベースである。ここで、テンソル要素数とは、各イテレーションにおいて各層で実行されるテンソル演算で用いられる演算対象に含まれる各要素の値である。演算対象とは、演算に用いられる数値や行列などの被演算子である。例えば、テンソル演算においてk×k行列が演算対象である場合、k×k行列に含まれるk×k個の行列要素の各々がテンソル要素数にあたる。
図5は、実施例1に係る表現可能割合データベースの登録情報の一例の図である。表現可能割合データベース107は、図5に示すように、イテレーションIDに対応させて演算ID及び割合が登録される。イテレーションIDは、深層学習の学習段階におけるイテレーション毎に一意に設定された識別子である。例えば、図5に示した表現可能割合データベース107では、イテレーションIDがit1のイテレーションにおける演算#1の演算結果に含まれる8bit固定小数点数を用いた場合の小数点位置から表現可能なテンソル要素数の割合は、20.6%である。以下では、8bit固定小数点数を用いた場合の小数点位置から表現可能なテンソル要素数の割合を「表現可能割合」という。
実行制御部102は、深層学習の処理を統括制御する。実行制御部102は、演算指示部121、演算データ型要求部122、データベース更新指示部123及びデータ読込制御部124を有する。
データベース更新指示部123は、ユーザアプリケーション101からの深層学習の実行指示の入力を受けると、演算データ型データベース106の初期化を演算データ型判定部104の演算データ型決定部141に指示する。また、データベース更新指示部123は、表現可能割合データベース107の初期化を演算データ型判定部104の演算データ型判定部104に指示する。
次に、データベース更新指示部123は、データベースの初期化完了の通知をデータ読込制御部124へ出力する。その後、データベース更新指示部123は、各イテレーションにおける各演算の終了毎に、演算結果を演算部103から取得する。そして、データベース更新指示部123は、取得した演算結果をデータベース更新部142へ出力し、表現可能割合データベース107の更新を指示する。
データ読込制御部124は、データベースの初期化完了の通知の入力をデータベース更新指示部123から受ける。さらに、データ読込制御部124は、学習に使用する学習データの取得要求を演算指示部121から受ける。そして、データ読込制御部124は、学習に使用する学習データの読み込みを学習データ読込部105に指示する。その後、データ読込制御部124は、学習に使用する学習データを学習データ読込部105から取得する。そして、データ読込制御部124は、取得した学習データを演算指示部121へ出力する。
その後、データ読込制御部124は、イテレーション終了毎に演算指示部121から学習データの取得要求を演算指示部121から受ける。そして、データ読込制御部124は、イテレーション毎に、学習データの読み込みを学習データ読込部105に指示して学習データを取得し、取得した学習データを演算指示部121へ出力する。
演算指示部121は、ユーザアプリケーション101から入力された深層学習の実行指示を取得する。そして、演算指示部121は、各イテレーションの開始時に以下の処理を行う。
演算指示部121は、学習に使用する学習データの取得要求をデータ読込制御部124へ出力する。そして、演算指示部121は、取得要求の応答として、学習データの入力をデータ読込制御部124から受ける。
次に、演算指示部121は、演算データ型の送信要求を演算データ型要求部122へ出力する。その後、演算指示部121は、送信要求の応答として次のイテレーションにおける各演算で使用されるそれぞれの演算データ型の入力を演算データ型要求部122から取得する。例えば、1回目のイテレーションでは、全ての演算において32bit浮動小数点数が用いられる。その後、演算指示部121は、学習データ及び各演算で使用されるそれぞれの演算データ型を演算部103へ出力し、さらに演算の実行を指示する。
その後、演算指示部121は、イテレーションの完了通知の入力を演算部103から受ける。そして、演算指示部121は、学習データ及び演算データ型を取得して演算を演算部103に実行させる処理を繰り返す。
演算指示部121は、深層学習が完了するまでイテレーション毎の各層における演算を演算部103に繰り返させる。ここで、演算指示部121は、予め決められた回数のイテレーションが終了した場合又は認識精度が9割を超えた場合などのように予め決められた条件を満たした場合に深層学習が完了したと判定する。認識精度は、所定回数のイテレーションが完了する毎に試験用データを用いて認識処理が行われることで取得される。
演算データ型要求部122は、演算データ型の送信要求の入力を演算指示部121から受ける。そして、演算データ型要求部122は、演算データ型決定部141に対して演算データ型の取得を要求する。その後、演算データ型要求部122は、次のイテレーションの各演算で使用する演算データ型の入力を演算データ型決定部141から受ける。そして、演算データ型要求部122は、取得した次のイテレーションの各演算で使用する演算データ型を演算指示部121へ出力する。
演算部103は、各イテレーションの開始時に、学習データの入力を演算指示部121から受ける。さらに、演算部103は、次のイテレーションにおける各演算で使用する演算データ型の入力を演算指示部121から受ける。1回目のイテレーションでは、演算部103は、各演算で使用する演算データ型として32bit浮動小数点数を用いる指示を演算指示部121から受ける。そして、演算部103は、学習データを入力として、各演算で32bit浮動小数点数を用いて各演算を行い1回目のイテレーションを終了する。その後、演算部103は、各演算の演算結果をデータベース更新指示部123へ出力する。また、演算部103は、イテレーションに含まれる演算が全て完了すると、イテレーションの完了通知を演算指示部121へ出力する。演算部103は、演算指示部121からの演算の実行指示が停止するまで演算処理を繰り返す。
演算データ型判定部104は、演算データ型決定部141及びデータベース更新部142を有する。
データベース更新部142は、表現可能割合データベース107の初期化の指示をデータベース更新指示部123から受ける。そして、データベース更新部142は、表現可能割合データベース107における登録情報を全て削除して初期化する。
その後、データベース更新部142は、イテレーションの完了毎に各演算における演算結果の入力をデータベース更新指示部123から受ける。そして、データベース更新部142は、各演算における演算結果に含まれる各テンソル要素数を表現するための適切な小数点位置を決定する。その後、データベース更新部142は、各演算における演算結果に含まれる各テンソル要素数のそれぞれについて、決定した小数点位置で8bit固定小数点数を用いた表現が可能か否かを判定する。この8ビット固定小数点数が、「所定ビットの固定小数点数」の一例にあたる。
次に、データベース更新部142は、各演算の演算結果における決定した小数点位置から8bit固定小数点数を用いて表現可能なテンソル要素数の割合を算出する。その後、データベース更新部142は、イテレーション毎に各演算における決定した小数点位置から8bit固定小数点数を用いて表現可能なテンソル要素数の割合である表現可能割合を表現可能割合データベース107に登録する。
ここで、データベース更新部142による表現可能割合の算出について詳細に説明する。小数点位置をQ8とした場合、Q8は、次の数式(1)により決定される。
xminは、テンソル要素数の最小値である。また、xmaxはテンソル要素数の最大値である。そして、ceil(X)は、Xを超える最小の整数を求める関数である。すなわち、テンソル要素数の最小値の絶対値と、テンソル要素数の最大値とでいずれか大きい方を2進数で表した場合の整数部分の桁のbit数と符号ビットの1bitとを8bitから減算した値により小数点位置Q8が算出される。この場合、小数点位置Q8により表現可能な値の範囲Rは、-128×2-Q~127×2-Qとなる。
したがって、表現可能なテンソル要素数の割合Pは、テンソル要素数をNとすると次の数式(2)により算出される。
すなわち、データベース更新部142は、数式(1)で求まる小数点位置Q8の場合の範囲Rを用いて、数式(2)から各演算における表現可能割合を算出する。
演算データ型決定部141は、演算データ型データベース106の初期化の指示をデータベース更新指示部123から受ける。そして、演算データ型決定部141は、各演算で使用する演算データ型を32bit浮動小数点数として演算データ型データベース106に登録して初期化する。
その後、演算データ型決定部141は、各演算の演算データ型の送信の要求を演算データ型要求部122から受ける。次に、演算データ型決定部141は、演算データ型データベース106を確認して各演算の現在の演算データ型を取得する。そして、演算データ型決定部141は、既に8bit固定小数点数を演算データ型とした演算を特定する。演算データ型決定部141は、特定した既に8bit固定小数点数を演算データ型とした演算については8bit固定小数点数を演算データ型として演算データ型要求部122に通知する。
これに対して、32bit浮動小数点数を演算データ型とした演算について、演算データ型決定部141は、表現可能割合データベース107から最新のイテレーションから判定範囲内のイテレーションにおける表現可能割合を取得する。
例えば、図6を参照して、その時点でイテレーションが1504回終了した場合で説明する。図6は、実施例1に係る演算データ型の決定処理を説明するための図である。図6のテーブル170は、表現可能割合データベース107を分かり易いように並べ直したテーブルである。
例えば、判定範囲を4回のイテレーションとした場合、演算データ型決定部141は、図6における、使用範囲71~74内の表現可能割合を演算毎に取得する。ここでは、演算#1~#4のこの時点における演算データ型は、32bit浮動小数点数である。次に、演算データ型決定部141は、各演算の最新のイテレーションにおける表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をTf1とした場合、演算データ型決定部141は、次の数式(3)を満たすか否かを判定する。
ここで、最新のイテレーションにおける表現可能割合の割合閾値であるTf1は、例えば、80%~90%とすることができる。
閾値を超えていない場合にはその時点での状態では、8bit固定小数点数で表現すると適切な演算精度を維持することが困難であると考えられる。そこで、演算データ型決定部141は、その演算の演算データ型を32bit浮動小数点数と決定し、演算データ型要求部122に通知する。例えば、割合閾値を80%とした場合、図6においてイテレーションIDがit1504のイテレーションでの演算#1の表現可能割合は、46.5%であり、割合閾値以下である。そこで、演算データ型決定部141は、演算#1の演算データ型を32bit浮動小数点数と決定する。
これに対して、表現可能割合が閾値を超えた演算について、演算データ型決定部141は、判定範囲内での表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部141は、次の数式(4)を用いて演算fについてのイテレーション間のゆらぎであるΔfを算出する。演算fについてこのイテレーション間のゆらぎΔfが、「割合の変動」の一例にあたる。
ここで、iは、その時点で完了したイテレーション回数である。また、Iは、判定範囲である。そして、fは、i-Iからiまでのいずれかの整数を表す。また、Δfiは、i回目のイテレーションにおける演算fのイテレーション間のゆらぎを示す。そして、Pojは、判定範囲内のj番目のイテレーションにおける表現可能割合である。また、Poiは、i番目のイテレーションにおける表現可能割合である。すなわち、演算データ型決定部141は、数式(4)を用いてその時点での表現可能割合と判定範囲内のイテレーションにおける表現可能割合との差の最大値をゆらぎΔfiとして算出する。
次に、演算データ型決定部141は、算出したゆらぎが予め決められたゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をTf2とした場合、演算データ型決定部141は、次の数式(5)を満たすか否かを判定する。
ゆらぎが予め決められゆらぎ閾値未満の場合、演算の小数点位置が収束しつつあると言える。そこで、演算データ型決定部141は、算出したゆらぎがたゆらぎ閾値未満の場合、その演算の演算データ型を8bit固定小数点数と決定し、演算データ型要求部122に通知する。これに対して、算出したゆらぎがゆらぎ閾値以上の場合、演算データ型決定部141は、その演算の演算データ型を32bit浮動小数点数と決定し、演算データ型要求部122に通知する。
ここで、ゆらぎ閾値であるTf2は、例えば、10%~20%とすることができる。ゆらぎ閾値を10%とした場合、図6において演算#3の使用範囲73におけるゆらぎは、ゆらぎ閾値以上である。これに対して、演算#2及び#4のゆらぎは、ゆらぎ閾値未満である。そこで、演算データ型決定部141は、演算#3の演算データ型を32bit浮動小数点数と決定し、演算#2及び#4の演算データ型を8bit固定小数点数と決定する。
8bit固定小数点数を演算データ型として通知して、実行制御部102を介して演算部103に8bit固定小数点数を用いて演算を行わせる処理が、「所定ビットの固定小数点数を用いて演算部に演算を実行させる」処理にあたる。
さらに、演算データ型決定部141は、各演算について決定した演算データ型を演算データ型データベース106に登録する。これにより、演算データ型決定部141は、演算データ型データベース106を用いて次のイテレーションにおいて各演算がどちらの演算データ型を使用したかが確認できるようになる。
学習データ読込部105は、学習に使用する学習データの読み込みの指示をデータ読込制御部124から受ける。そして、学習データ読込部105は、指定された学習データを学習データ記憶部200から読み込む。その後、学習データ読込部105は、読み込んだ隔週データをデータ読込制御部124へ送信する。
次に、図7を参照して、実施例1に係る情報処理装置1による演算データ型決定処理の全体的な流れの概要について説明する。図7は、実施例1に係る情報処理装置による演算データ型決定処理のシーケンス図である。
ユーザアプリケーション101は、深層学習の実行指示を実行制御部102に出力する(ステップS101)。
実行制御部102は、深層学習の実行指示をユーザアプリケーション101から受けると、演算データ型データベース106の初期化を演算データ型判定部104に指示する(ステップS102)。
演算データ型判定部104は、演算データ型データベース106の初期化の指示を受けて、演算データ型データベース106の各演算の演算データ型を32bit浮動小数点数に更新して初期化する(ステップS103)。
その後、演算データ型判定部104は、演算データ型データベース106の初期化完了を実行制御部102に通知する(ステップS104)。
実行制御部102は、演算データ型データベース106の初期化完了の応答を受信すると、表現可能割合データベース107の初期化を演算データ型判定部104に指示する(ステップS105)。
演算データ型判定部104は、表現可能割合データベース107の初期化の指示を受けて、表現可能割合データベース107に登録済みのデータを消去して初期化する(ステップS106)。
その後、演算データ型判定部104は、表現可能割合データベース107の初期化完了を実行制御部102に通知する(ステップS107)。
実行制御部102は、表現可能割合データベース107の初期化完了の応答を受信すると、学習に使用する学習データの読み込みを学習データ読込部105に指示する(ステップS108)。
学習データ読込部105は、学習データの読み込み指示を受けて、指定された学習データを学習データ記憶部200から読み込む(ステップS109)。
その後、学習データ読込部105は、読み込んだ学習データを実行制御部102へ送信する(ステップS110)。
実行制御部102は、学習データを学習データ読込部105から取得する。次に、実行制御部102は、次のイテレーションの各演算で使用する演算データ型の取得要求を演算データ型判定部104へ出力する(ステップS111)。
演算データ型判定部104は、演算データ型の取得要求の入力を受けて、演算データ型データベース106及び表現可能割合データベース107を用いて各演算で使用する演算データ型を決定する(ステップS112)。
そして、演算データ型判定部104は、決定した各演算で使用する演算データ型の通知を実行制御部102へ出力する(ステップS113)。
実行制御部102は、各演算で用いる演算データ型を取得する。そして、実行制御部102は、取得した学習データを演算部103へ出力し、さらに各演算で用いる演算データ型を演算部103に通知して演算を実行させる(ステップS114)。
その後、実行制御部102は、演算結果の入力を演算部103から受ける(ステップS115)。
次に、実行制御部102は、取得した演算結果を演算データ型判定部104へ出力して表現可能割合データベース107の更新を指示する(ステップS116)。
演算データ型判定部104は、演算結果に含まれるテンソル要素数を用いて表現可能割合を算出し、算出した表現可能割合を登録して表現可能割合データベース107を更新する(ステップS117)。
その後、演算データ型判定部104は、表現可能割合データベース107の更新完了の通知を実行制御部102へ出力する(ステップS118)。
次に、実行制御部102は、演算データ型データベース106の更新を演算データ型判定部104に指示する(ステップS119)。
演算データ型判定部104は、最新のイテレーションにおいて各演算で使用された演算データ型を登録して演算データ型データベース106を更新する(ステップS120)。
その後、演算データ型判定部104は、演算データ型データベース106の更新完了の通知を実行制御部102へ出力する(ステップS121)。
実行制御部102は、演算データ型データベース106の更新完了の通知の入力を実行制御部102から受ける。実行制御部102、演算部103、演算データ型判定部104及び学習データ読込部105は、1回のイテレーションに含まれる演算全てが完了するまで、ステップS111~S121を繰り返す。さらに、実行制御部102、演算部103、演算データ型判定部104及び学習データ読込部105は、深層学習が完了するまで、ステップS108~S121を繰り返す。その後、実行制御部102は、深層学習の完了をユーザアプリケーション101に通知する(ステップS122)。
次に、図8を参照して、実施例1に係る演算データ型決定処理の詳細な流れについて説明する。図8は、実施例1に係る演算データ型決定処理のフローチャートである。
ユーザアプリケーション101からの深層学習の実行指示を受けると、データベース更新指示部123は、演算データ型データベース106の初期化の指示を演算データ型決定部141へ出力する。また、データベース更新指示部123は、表現可能割合データベース107の初期化の指示をデータベース更新部142へ出力する。演算データ型決定部141は、演算データ型データベース106に登録された各演算の演算データ型を32bit浮動小数点数に変更して演算データ型データベース106を初期化する。また、データベース更新部142は、表現可能割合データベース107に登録された表現可能割合を削除して初期化する。これにより、演算データ型判定部104は、データベースの初期化を行う(ステップS201)。
データ読込制御部124は、データベースの初期化完了の通知をデータベース更新指示部123から受ける。また、データ読込制御部124は、学習データの取得要求を演算指示部121から受ける。そして、データ読込制御部124は、学習データの読込要求を学習データ読込部105へ出力する。学習データ読込部105は、学習データの読込要求を受けて、学習データ記憶部200から指定された学習データを読み込む(ステップS202)。その後、学習データ読込部105は、読み込んだ学習データをデータ読込制御部124へ出力する。データ読込制御部124は、取得した学習データを演算指示部121へ出力する。
演算指示部121は、ユーザアプリケーション101から入力された深層学習の実行指示から実行するイテレーションにおける次の演算を選択する(ステップS203)。
そして、演算指示部121は、選択した演算で使用する演算データ型の取得要求を演算データ型決定部141へ出力する。演算データ型決定部141は、取得要求を受けると、選択された演算の使用範囲内のイテレーションでの表現可能割合を表現可能割合データベース107から取得する(ステップS204)。ただし、イテレーションが進んでおらず、使用範囲内のイテレーションがそろっていない場合、演算データ型決定部141は、表現可能割合の取得をエラーと判定する。
次に、演算データ型決定部141は、取得した表現可能割合を数式(4)に用いて表現可能割合のゆらぎを算出する(ステップS205)。ただし、表現可能割合の取得がエラーの場合、演算データ型決定部141は、表現可能割合のゆらぎを算出せずに未算出とする。
次に、演算データ型決定部141は、選択された演算が既に8bit固定小数点数で実行されたか否かを判定する(ステップS206)。既に8bit固定小数点で演算が実行された場合(ステップS206:肯定)、演算データ型決定部141は、選択された演算で用いる演算データ型を8bit固定小数点数のまま維持して、ステップS210へ進む。
これに対して、未だ8bit固定小数点数で演算が実行されていない場合(ステップS206:否定)、演算データ型決定部141は、表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する(ステップS207)。
表現可能割合のゆらぎがゆらぎ閾値未満の場合(ステップS207:肯定)、演算データ型決定部141は、最新の表現可能割合が割合閾値より大きいか否かを判定する(ステップS208)。
最新の表現可能割合が割合閾値より大きい場合(ステップS208:肯定)、演算データ型決定部141は、演算データ型を8bit固定小数点数に決定する。その後、演算データ型決定部141は、選択された演算の演算データ型として8bit固定小数点数を使用することを演算指示部121に通知し、演算データ型を8bit固定小数点数に変更させる。(ステップS209)。
演算指示部121は、8bit固定小数点数を用いて選択した演算を演算部103に実行させる(ステップS210)。
一方、ゆらぎがゆらぎ閾値未満でない場合(ステップS207:否定)又は最新の表現可能割合が割合閾値以下の場合(ステップS208:否定)、演算データ型決定部141は、選択された演算の演算データ型を32bit浮動小数点数に維持する。ここで、表現可能割合のゆらぎが未算出の場合も、演算データ型決定部141は、ゆらぎがゆらぎ閾値未満でない場合と判定する。この場合、本実施例では演算データ型決定部141は、演算データ型の変更の指示を演算指示部121への通知は行わない。ただし、演算データ型決定部141は、選択された演算の演算データ型として32bit浮動小数点数を使用することを演算指示部121に通知してもよい。演算指示部121は、32bit浮動小数点数を用いて選択した演算を演算部103に実行させる(ステップS211)。
その後、演算データ型要求部122は、選択された演算の演算結果を演算部103から取得する。そして、演算データ型要求部122は、取得した演算結果をデータベース更新部142へ出力するとともに表現可能割合データベース107の更新を指示する。データベース更新部142は、入力された演算結果に含まれるテンソル要素数を用いて表現可能割合を計算する(ステップS212)。
次に、データベース更新部142は、算出した表現可能割合を表現可能割合データベース107に保存する(ステップS213)。
演算指示部121は、演算部103からイテレーションの完了通知を取得したか否かにより、1イテレーション中の全ての演算処理が完了したか否かを判定する(ステップS214)。実行していない演算処理が存在する場合(ステップS214:否定)、演算指示部121は、ステップS203に戻る。
これに対して、1イテレーション中の全ての演算処理が完了した場合(ステップS214:肯定)、演算指示部121は、深層学習が完了したか否かを判定する(ステップS215)。深層学習が完了していない場合(ステップS215:否定)、演算指示部121は、ステップS202へ戻る。
これに対して、深層学習が完了した場合(ステップS215:肯定)、演算指示部121は、深層学習の実行完了をユーザアプリケーション101へ通知する。そして、演算指示部121は、演算データ型の切り替えを伴う深層学習の実行を終了する。
以上に説明したように、本実施例に係る情報処理装置は、演算結果に含まれる要素数の8bit固定小数点数での表現可能割合を求め、求めた表現可能割合が閾値以上であり、且つゆらぎが閾値未満であれば演算データ型を8bit固定小数点数に切り替える。このように、8bit固定小数点数で十分に表現可能となったタイミングで演算データ型が自動的に切り替わるため、操作者が試行錯誤して演算データ型のタイミングを指定しなくてよく、容易に深層学習や機械学習の学習効率を向上させることができる。また、表現可能な要素数を基に演算データ型の切り替えを行うため、事前学習が不十分なことで生じる演算精度不足による学習の停滞も軽減することができる。
さらに、学習演算中に演算データ型を自動で変更するため、他のシステムで構築された深層学習のモデルを利用して追加学習や転移学習を行う場合などに、操作者はモデルで定義された各演算について演算データ型を指定しなくてもよい。すなわち、このような場合にも操作性を向上することができる。
また、本実施例では、演算データ型を32bit浮動小数点数から8bit固定小数点数に自動で切り替えた。ただし、機械学習や深層学習の分野では、演算性能よりも学習後の認識精度を重視する操作者も一定数存在すると考えられる。そのため、学習後の認識精度を重視する操作者を考慮することも重要である。
そこで、本実施例に係る情報処理装置は、8bit固定小数点数への自動切り替えと、全ての演算の32bit浮動小数点数での実行とを選択できる構成としてもよい。8bit固定小数点数への自動切り替えが指定された場合、情報処理装置は、上述した処理と同様の処理を実行する。これに対して、全ての演算の32bit浮動小数点数での実行が指定された場合、情報処理装置は、8bit固定小数点数への演算データ型の切り替えを行わずに、深層学習が完了するまで全ての演算を32bit浮動小数点数で実行する。
(変形例)
実施例1では単一の情報処理装置1で学習を行う場合を例に説明したが、複数の情報処理装置を使用した学習の場合にも同様の機能を適用することができ、同様の効果を得ることができる。
例えば、図9は、2つの情報処理装置を用いた学習を表す図である。ここでは、学習データ格納ストレージ81に格納された学習データを、情報処理装置1A及び1Bの双方が利用する。
情報処理装置1Aは、学習データ格納ストレージ81から学習データを取得して学習を進める。この場合、データベース156Aが、図3の演算データ型データベース106及び表現可能割合データベース107となる。情報処理装置1Aは、演算結果のテンソル要素数からイテレーション毎の表現可能割合を算出してデータベース156Aに格納する。そして、情報処理装置1Aは、データベース156Aに格納された表現可能割合から演算データ型を決定して、自動的に演算#1~#nで用いる演算データ型を8bit固定小数点数に切り替える。
同様に、情報処理装置1Bは、学習データ格納ストレージ81から学習データを取得して学習を進める。この場合、データベース156Bが、図3の演算データ型データベース106及び表現可能割合データベース107となる。情報処理装置1Bは、演算結果のテンソル要素数からイテレーション毎の表現可能割合を算出してデータベース156Bに格納する。そして、情報処理装置1Bは、データベース156Bに格納された表現可能割合から演算データ型を決定して、自動的に演算#1~#nで用いる演算データ型を8bit固定小数点数に切り替える。
その後、情報処理装置1A及び1Bのそれぞれにおける学習結果がまとめられて、学習が完了する。このように、複数の情報処理装置を学習に用いる場合でも、各情報処理装置において容易に機械学習の学習効率を向上させることができる。
次に、実施例2について説明する。本実施例に係る情報処理装置1は、8bit固定小数点数では未だ表現することが困難だが、16bit固定小数点数では表現可能な一部の演算を、16bit固定小数点数を用いて実行することが実施例1と異なる。本実施例に係る情報処理装置1のブロック図も図3で表される。以下の説明では、演算データ型の決定処理を主に説明し、実施例1と同様の各部の機能については説明を省略する。
本実施例に係る表現可能割合データベース107は、図10に示すフォーマットを有する。図10は、実施例2に係る表現可能割合データベースの登録情報の一例の図である。本実施例に係る表現可能割合データベース107は、図10に示すように、各イテレーションの演算毎に、演算結果に含まれるテンソル要素数の8bit固定小数点数での表現可能割合及び16bit固定小数点数での表現可能割合が登録される。
また、本実施例に係る演算データ型データベース106は、図11に示すフォーマットを有する。図11は、実施例2に係る演算データ型データベースの登録情報の一例の図である。本実施例に係る演算データ型データベース106は、図11に示すように、演算データ型として、各演算IDに対応させて、32bit浮動小数点数、16bit固定小数点数又は8bit固定小数点数のいずれかが各演算で用いられる演算データ型として登録される。
データベース更新部142は、最新のイテレーションにおいて実行された演算の演算結果の入力をデータベース更新指示部123から受ける。次に、データベース更新部142は、演算結果からテンソル要素数を取得する。次に、データベース更新部142は、取得したテンソル要素数と数式(1)とを用いて、演算結果を8bit固定小数点数で表現する場合のその演算における適切な小数点位置Q8を決定する。そして、数式(2)を用いて小数点位置Q8の場合の8bit固定小数点数でのテンソル要素数の表現可能割合P8を算出する。そして、データベース更新部142は、最新のイテレーションの各演算における8bit固定小数点数での表現可能割合を表現可能割合データベース107に登録する。
次に、データベース更新部142は、取得したテンソル要素数と次の数式(6)とを用いて、演算結果を16bit固定小数点数で表現する場合のその演算における適切な小数点位置Q16を決定する。
次に、データベース更新部142は、次の数式(7)を用いて小数点位置Q16の場合の16bit固定小数点数でのテンソル要素数の表現可能割合P16を算出する。そして、データベース更新部142は、表現可能割合データベース107に最新のイテレーションの各演算における16bit固定小数点数での表現可能割合を登録する。
これにより、データベース更新部142は、図10で示されるデータを表現可能割合データベース107に登録する。すなわち、表現可能割合データベース107には、8bit浮動小数点数を用いた場合の表現可能割合及び16bit浮動小数点数を用いた場合の表現可能割合が登録される。
ここで、8bit固定小数点数が、「第1所定ビットの固定小数点数」の一例にあたり、16bit固定小数点数が、「第2所定ビットの固定小数点数」の一例にあたる。以下では、8bit浮動小数点数を用いた場合の表現可能割合を「8bit表現可能割合」といい、16bit浮動小数点数を用いた場合の表現可能割合を「16bit表現可能割合」と言う。
演算データ型決定部141は、各演算についての演算データ型の取得要求の入力を演算データ型要求部122から受ける。次に、演算データ型決定部141は、演算データ型データベース106を確認して各演算の現在の演算データ型を取得する。そして、演算データ型決定部141は、既に8bit固定小数点数を演算データ型とした演算を特定する。演算データ型決定部141は、特定した既に8bit固定小数点数を演算データ型とした演算については8bit固定小数点数を演算データ型として演算データ型要求部122に通知する。
これに対して、8bit固定小数点数以外を演算データ型とした演算について、演算データ型決定部141は、表現可能割合データベース107から最新のイテレーションから判定範囲内のイテレーションにおける8bit表現可能割合を取得する。
例えば、図12を参照して、その時点でイテレーションが1504回終了した場合で説明する。図12は、実施例2に係る演算データ型の決定処理を説明するための図である。図12のテーブル171は、表現可能割合データベース107を分かり易いように並べ直したテーブルである。
例えば、判定範囲を4回のイテレーションとした場合、演算データ型決定部141は、図12における、使用範囲711、713、715内の8bit表現可能割合を演算毎に取得する。ここでは、演算#1~#3におけるこの時点での演算データ型は、32bit浮動小数点数である。次に、演算データ型決定部141は、各演算の最新のイテレーションにおける8bit表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をTf1とした場合、演算データ型決定部141は、数式(3)を満たすか否かを判定する。
閾値を超えた演算について、演算データ型決定部141は、演算データ型決定部141は、判定範囲内での8bit表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部141は、数式(4)を用いて演算fについてのイテレーション間のゆらぎであるΔfを算出する。
次に、演算データ型決定部141は、算出した8bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をTf2とした場合、演算データ型決定部141は、数式(5)を満たすか否かを判定する。
8bit表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を8bit固定小数点数と決定し、演算データ型要求部122に通知する。
これに対して、8bit表現可能割合が割合閾値以下の演算及び8bit表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部141は、既に16bit固定小数点数を演算データ型とした演算を特定する。演算データ型決定部141は、特定した既に16bit固定小数点数を演算データ型とした演算については16bit固定小数点数を演算データ型として演算データ型要求部122に通知する。
これに対して、16bit固定小数点数以外を演算データ型とした演算について、演算データ型決定部141は、表現可能割合データベース107から最新のイテレーションから判定範囲内のイテレーションにおける16bit表現可能割合を取得する。この場合、16bit固定小数点数以外を演算データ型とした演算とは、演算データ型として32bit浮動小数点数が用いられた演算である。
例えば、演算データ型決定部141は、図12における、使用範囲712、714、716内の16bit表現可能割合を演算毎に取得する。次に、演算データ型決定部141は、各演算の最新のイテレーションにおける16bit表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をTf1とした場合、演算データ型決定部141は、数式(3)を満たすか否かを判定する。
閾値を超えた演算について、演算データ型決定部141は、演算データ型決定部141は、判定範囲内での16bit表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部141は、数式(4)を用いて演算fについてのイテレーション間のゆらぎであるΔfを算出する。
次に、演算データ型決定部141は、算出した16bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をTf2とした場合、演算データ型決定部141は、数式(5)を満たすか否かを判定する。16bit表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を16bit固定小数点数と決定し、演算データ型要求部122に通知する。
これに対して、16bit表現可能割合が割合閾値以下の演算及び16bit表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部141は、その演算の演算データ型を32bit浮動小数点数と決定する。そして、演算データ型決定部141は、その演算の演算データ型として32bit浮動小数点数を用いることを演算データ型要求部122に通知する。
ここで、本実施例では、演算データ型決定部141は、演算データ型を8bit固定小数点や16bit固定小数点に設定した演算に関して、8bit表現可能割合及び16bit表現可能割合の変動を確認する。この処理が可能になるのは、以下の理由による。演算時には演算部103は、8bit固定小数点や16bit固定小数点で演算を行う場合にも、演算内部でより大きな演算精度の中間データを用いて演算を行い、出力を8bit固定小数点や16bit固定小数点の精度とする。そして、データベース更新部142は、8bit固定小数点や16bit固定小数点の精度に変更する前の演算結果である中間データを用いて8bit表現可能割合及び16bit表現可能割合を算出する。そのため、演算データ型決定部141は、8bit固定小数点や16bit固定小数点を用いた演算の演算結果についても、8bit表現可能割合及び16bit表現可能割合の変動を判定することができる。
例えば、図12において割合閾値を80%とし、ゆらぎ閾値を10%とした場合の演算データ型決定部141による演算データ型決定処理について説明する。演算データ型決定部141は、イテレーションIDがit1504のイテレーションでの演算#1の8bit表現可能割合は46.5%で割合閾値以下であり、16bit表現可能割合は99.2%で割合閾値より大きいと判定する。そこで、演算データ型決定部141は、演算#1の演算データ型としては8bit固定小数点数を用いないと決定する。さらに、演算データ型決定部141は、使用範囲712の16bit表現可能割合のゆらぎを求めて、その求めた値がゆらぎ閾値未満と判定する。そこで、演算データ型決定部141は、演算#1の演算データ型を16bit固定小数点数と決定する。
また、演算データ型決定部141は、イテレーションIDがit1504のイテレーションでの演算#2の8bit表現可能割合は97.2%で割合閾値より大きいと判定する。次に、演算データ型決定部141は、使用範囲713の8bit表現可能割合のゆらぎを求めて、その求めた値がゆらぎ閾値未満と判定する。これにより、演算データ型決定部141は、演算#2の演算データ型を8bit固定小数点数と決定する。
また、演算データ型決定部141は、イテレーションIDがit1504のイテレーションでの演算#3の8bit表現可能割合は96.9%であり割合閾値より大きく、16bit表現可能割合は99.2%で割合閾値より大きいと判定する。そこで、演算データ型決定部141は、使用範囲715の8bit表現可能割合のゆらぎを求めて、その求めた値がゆらぎ閾値以上と判定する。次に、演算データ型決定部141は、使用範囲716の16bit表現可能割合のゆらぎを求めて、これもゆらぎ閾値以上と判定する。この場合、演算データ型決定部141は、演算#3の演算データ型としては8bit固定小数点数及び16bit固定小数点数を用いないと決定する。そこで、演算データ型決定部141は、演算#3の演算データ型を32bit浮動小数点数と決定定する。
次に、図13を参照して、実施例2に係る演算データ型決定処理の詳細な流れについて説明する。図13は、実施例2に係る演算データ型決定処理のフローチャートである。
演算データ型判定部104は、演算データ型データベース106及び表現可能割合データベース107の初期化を行う(ステップS301)。
データ読込制御部124は、データベースの初期化完了の通知をデータベース更新指示部123から受ける。また、データ読込制御部124は、学習データの取得要求を演算指示部121から受ける。そして、データ読込制御部124は、学習データの読込要求を学習データ読込部105へ出力する。学習データ読込部105は、学習データの読込要求を受けて、学習データ記憶部200から指定された学習データを読み込む(ステップS302)。その後、学習データ読込部105は、読み込んだ学習データをデータ読込制御部124へ出力する。データ読込制御部124は、取得した学習データを演算指示部121へ出力する。
演算指示部121は、ユーザアプリケーション101から入力された深層学習の実行指示から実行するイテレーションにおける次の演算を選択する(ステップS303)。
そして、演算指示部121は、選択した演算で使用する演算データ型の取得要求を演算データ型決定部141へ出力する。演算データ型決定部141は、取得要求を受けると、選択された演算の使用範囲内のイテレーションでの8bit表現可能割合及び16bit表現可能割合を表現可能割合データベース107から取得する(ステップS304)。ただし、イテレーションが進んでおらず、使用範囲内のイテレーションがそろっていない場合、演算データ型決定部141は、表現可能割合の取得をエラーと判定する。
次に、演算データ型決定部141は、取得した8bit表現可能割合及び16bit表現可能割合を数式(4)に用いて8bit表現可能割合及び16bit表現可能割合のゆらぎを算出する(ステップS305)。ただし、表現可能割合の取得がエラーの場合、演算データ型決定部141は、表現可能割合のゆらぎを算出せずに未算出とする。
次に、演算データ型決定部141は、選択された演算が既に8bit固定小数点数で実行されたか否かを判定する(ステップS306)。既に8bit固定小数点で演算が実行された場合(ステップS306:肯定)、演算データ型決定部141は、選択された演算で用いる演算データ型を8bit固定小数点数のまま維持して、ステップS310へ進む。
これに対して、未だ8bit固定小数点数で演算が実行されていない場合(ステップS306:否定)、演算データ型決定部141は、8bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する(ステップS307)。
8bit表現可能割合のゆらぎがゆらぎ閾値未満の場合(ステップS307:肯定)、演算データ型決定部141は、最新の8bit表現可能割合が割合閾値より大きいか否かを判定する(ステップS308)。
最新の8bit表現可能割合が割合閾値より大きい場合(ステップS308:肯定)、演算データ型決定部141は、演算データ型を8bit固定小数点数に決定する。その後、演算データ型決定部141は、選択された演算の演算データ型として8bit固定小数点数を使用することを演算指示部121に通知し、演算データ型を8bit固定小数点数に変更させる。(ステップS309)。
演算指示部121は、8bit固定小数点数を用いて選択した演算を演算部103に実行させる(ステップS310)。
一方、8bit表現可能割合のゆらぎがゆらぎ閾値未満でない場合(ステップS307:否定)又は最新の8bit表現可能割合が割合閾値以下の場合(ステップS308:否定)、演算データ型決定部141は、以下の処理を行う。ここで、8bit表現可能割合のゆらぎが未算出の場合も、演算データ型決定部141は、ゆらぎがゆらぎ閾値未満でない場合と判定する。演算データ型決定部141は、選択された演算が既に16bit固定小数点数で実行されたか否かを判定する(ステップS311)。既に16bit固定小数点で演算が実行された場合(ステップS311:肯定)、演算データ型決定部141は、選択された演算で用いる演算データ型を16bit固定小数点数のまま維持して、ステップS315へ進む。
これに対して、未だ16bit固定小数点数で演算が実行されていない場合(ステップS311:否定)、演算データ型決定部141は、16bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する(ステップS312)。
16bit表現可能割合のゆらぎがゆらぎ閾値未満の場合(ステップS312:肯定)、演算データ型決定部141は、最新の16bit表現可能割合が割合閾値より大きいか否かを判定する(ステップS313)。
最新の16bit表現可能割合が割合閾値より大きい場合(ステップS313:肯定)、演算データ型決定部141は、演算データ型を16bit固定小数点数に決定する。その後、演算データ型決定部141は、選択された演算の演算データ型として16bit固定小数点数を使用することを演算指示部121に通知し、演算データ型を16bit固定小数点数に変更させる(ステップS314)。
演算指示部121は、16bit固定小数点数を用いて選択した演算を演算部103に実行させる(ステップS315)。
一方、16bit表現可能割合のゆらぎがゆらぎ閾値未満でない場合(ステップS312:否定)又は最新の16bit表現可能割合が割合閾値以下の場合(ステップS313:否定)、演算データ型決定部141は、以下の処理を行う。ここで、16bit表現可能割合のゆらぎが未算出の場合も、演算データ型決定部141は、ゆらぎがゆらぎ閾値未満でない場合と判定する。演算データ型決定部141は、選択された演算の演算データ型を32bit浮動小数点数で維持することを決定する。この場合、本実施例では演算データ型決定部141は、演算データ型の変更の指示を演算指示部121への通知は行わない。ただし、演算データ型決定部141は、選択された演算の演算データ型として32bit浮動小数点数を使用することを演算指示部121に通知してもよい。演算指示部121は、32bit浮動小数点数を用いて選択した演算を演算部103に実行させる(ステップS316)。
その後、演算データ型要求部122は、選択された演算の演算結果を演算部103から取得する。そして、演算データ型要求部122は、取得した演算結果をデータベース更新部142へ出力するとともに表現可能割合データベース107の更新を指示する。データベース更新部142は、入力された演算結果に含まれるテンソル要素数を用いて8bit表現可能割合及び16bit表現可能割合を計算する(ステップS317)。
次に、データベース更新部142は、算出した8bit表現可能割合及び16bit表現可能割合を表現可能割合データベース107に保存する(ステップS318)。
演算指示部121は、演算部103からイテレーションの完了通知を取得したか否かにより、1つのイテレーション中の全ての演算処理が完了したか否かを判定する(ステップS319)。実行していない演算処理が存在する場合(ステップS319:否定)、演算指示部121は、ステップS303に戻る。
これに対して、1つのイテレーション中の全ての演算処理が完了した場合(ステップS319:肯定)、演算指示部121は、深層学習が完了したか否かを判定する(ステップS320)。深層学習が完了していない場合(ステップS320:否定)、演算指示部121は、ステップS302へ戻る。
これに対して、深層学習が完了した場合(ステップS320:肯定)、演算指示部121は、深層学習の実行完了をユーザアプリケーション101へ通知する。そして、演算指示部121は、演算データ型の切り替えを伴う深層学習の実行を終了する。
以上に説明したように、本実施例に係る情報処理装置は、演算結果に含まれる要素数の8bit表現可能割合及び16bit表現可能割合での表現可能割合を求め、求めた8bit表現可能割合及び16bit表現可能割合に応じて演算データ型を切り替える。このように、8bit固定小数点数又は16bit固定小数点数で十分に表現可能となったタイミングで演算データ型が自動的に切り替わるため、操作者が試行錯誤して演算データ型のタイミングを指定しなくてよい。そのため、本実施例に係る情報処理装置は、容易に深層学習や機械学習の学習効率を向上させることができる。また、表現可能な要素数を基に演算データ型の切り替えを行うため、事前学習が不十分なことで生じる演算精度不足による学習の停滞も軽減することができる。
なお、本実施例に係る情報処理装置は、8bit固定小数点数及び16bit固定小数点への自動切り替えと、全ての演算の32bit浮動小数点数での実行とを選択できる構成としてもよい。8bit固定小数点数及び16bit固定小数点への自動切り替えが指定された場合、情報処理装置は、上述した処理と同様の処理を実行する。これに対して、全ての演算の32bit浮動小数点数での実行が指定された場合、情報処理装置は、8bit固定小数点数への演算データ型の切り替えを行わずに、深層学習が完了するまで全ての演算を32bit浮動小数点数で実行する。
図14は、実施例3に係る情報処理装置のブロック図である。本実施例に係る情報処理装置1は、演算データ型データベース106を有さないことが実施例1及び2と異なる。
本実施例に係る情報処理装置1は、以前の演算データ型を参照せずにイテレーション毎に演算データ型を判定することが実施例1及び2と異なる。すなわち、本実施例に係る情報処理装置1では、8bit固定小数点数を演算データ型とした演算が、16bit固定小数点数や32bit浮動小数点数を演算データ型として使用する状態に戻る場合がある。また、16bit固定小数点数を演算データ型とした演算が、32bit浮動小数点数を演算データ型として使用する状態に戻る場合がある。
以下の説明では、実施例2と同様に8bit固定小数点数及び16bit固定小数点数を用いる場合を例に説明するが、実施例3の情報処理装置1は、実施例1と同様の8bit固定小数点数を固定小数点数として用いる場合も動作可能である。以下の説明では、演算データ型の決定処理を主に説明し、実施例2と同様の各部の機能については説明を省略する。
本実施例に係る表現可能割合データベース107は、図10に示すフォーマットと同様のフォーマットを有する。すなわち、本実施例に係る表現可能割合データベース107は、各イテレーションの演算毎に、演算結果に含まれるテンソル要素数の8bit固定小数点数での表現可能割合及び16bit固定小数点数での表現可能割合が登録される。
実行制御部102は、深層学習の実行指示をユーザアプリケーション101から受けると、表現可能割合データベース107の初期化を演算データ型判定部104に指示する。この場合、演算データ型データベース106は存在しないので、演算データ型データベース106の初期化は行われない。
演算データ型判定部104は、表現可能割合データベース107の初期化の指示を受けて、表現可能割合データベース107に登録済みのデータを消去して初期化する。
演算データ型決定部141は、各演算についての演算データ型の取得要求の入力を演算データ型要求部122から受ける。次に、演算データ型決定部141は、演算データ型データベース106を確認して各演算の現在の演算データ型を取得する。そして、演算データ型決定部141は、判定範囲内のイテレーションにおける8bit表現可能割合を表現可能割合データベース107から取得する。
次に、演算データ型決定部141は、各演算の最新のイテレーションにおける8bit表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をTf1とした場合、演算データ型決定部141は、数式(3)を満たすか否かを判定する。
閾値を超えた演算について、演算データ型決定部141は、演算データ型決定部141は、判定範囲内での8bit表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部141は、数式(4)を用いて演算fについてのイテレーション間のゆらぎであるΔfを算出する。
次に、演算データ型決定部141は、算出した8bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をTf2とした場合、演算データ型決定部141は、数式(5)を満たすか否かを判定する。
演算データ型決定部141は、8bit表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を8bit固定小数点数と決定し、演算データ型要求部122に通知する。
一方、8bit表現可能割合が割合閾値以下の演算及び8bit表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部141は、判定範囲内のイテレーションにおける16bit表現可能割合を取得する。
次に、演算データ型決定部141は、各演算の最新のイテレーションにおける16bit表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をTf1とした場合、演算データ型決定部141は、数式(3)を満たすか否かを判定する。
閾値を超えた演算について、演算データ型決定部141は、判定範囲内での16bit表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部141は、数式(4)を用いて演算fについてのイテレーション間のゆらぎであるΔfを算出する。
次に、演算データ型決定部141は、算出した16bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をTf2とした場合、演算データ型決定部141は、数式(5)を満たすか否かを判定する。演算データ型決定部141は、16bit表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を16bit固定小数点数と決定し、演算データ型要求部122に通知する。
これに対して、16bit表現可能割合が割合閾値以下の演算及び16bit表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部141は、その演算の演算データ型を32bit浮動小数点数と決定する。そして、演算データ型決定部141は、その演算の演算データ型として32bit浮動小数点数を用いることを演算データ型要求部122に通知する。
ここで、図15を参照して、本実施例における演算データ型の遷移について説明する。図15は、演算データ型の遷移を説明するための図である。図15のテーブル172は、表現可能割合データベース107を分かり易いように並べ直したテーブルである。ここでは、割合閾値を80%とし、ゆらぎ閾値を10%とした場合の演算データ型決定部141による演算データ型決定処理について説明する。
まず、演算#1における演算データ型の遷移について説明する。イテレーションIDがit1505のイテレーションの段階で、演算#1の8bit表現可能割合が割合閾値以下であるので、演算データ型決定部141は、演算#1の演算データ型として8bit固定小数点数は使用しない。一方、使用範囲721においてイテレーションIDがit1505のイテレーションでの16bit表現可能割合が割合閾値を超えており、16bit表現可能割合のゆらぎがゆらぎ閾値未満である。そこで、演算データ型決定部141は、16bit固定小数点数を演算#1の演算データ型とする。そのため、イテレーションIDがit1506のイテレーションでは、演算#1の演算データ型として16bit固定小数点数が用いられることになり、割合722は、16bit固定小数点数を用いて算出される。
その後、イテレーションIDがit1507のイテレーションの段階で、8bit表現可能割合及び16bit表現可能割合のいずれも割合閾値以下となる。また、使用範囲723における16bit表現可能割合のゆらぎもゆらぎ閾値以上となる。そこで、演算データ型決定部141は、32bit浮動小数点数を演算#1の演算データ型とする。これにより、イテレーションIDがit1508のイテレーション以降では、演算データ型の変更が無ければ、32bti浮動小数点数が演算#1の演算データ型として用いられる。
次に、演算#2における演算データ型の遷移について説明する。イテレーションIDがit1504のイテレーションの段階で、使用範囲724のように、8bit表現可能割合及び16bit表現可能割合のいずれも割合閾値を超えており、各ゆらぎはゆらぎ閾値未満である。そこで、演算データ型決定部141は、8bit固定小数点数を演算#2の演算データ型とする。これにより、イテレーションIDがit1505のイテレーション以降の範囲725のイテレーションでは、演算データ型の変更が無ければ、8bti固定小数点数が演算#2の演算データ型として用いられる。
次に、演算#3における演算データ型の遷移について説明する。イテレーションIDがit1504のイテレーションの段階で、使用範囲726のように、8bit表現可能割合及び16bit表現可能割合のいずれも割合閾値を超えており、各ゆらぎはゆらぎ閾値未満である。そこで、演算データ型決定部141は、8bit固定小数点数を演算#2の演算データ型とする。これにより、イテレーションIDがit1505のイテレーションの割合727は、8bti固定小数点数を用いて算出される。
しかし、イテレーションIDがit1506のイテレーションの段階で、使用範囲728では、イテレーションIDがit1506のイテレーションの8bit使用可能割合が割合閾値以下となり、8bit使用可能割合のゆらぎもゆらぎ閾値以下となる。そこで、演算データ型決定部141は、演算#3の演算データ型として8bit固定小数点数は使用しない。一方、使用範囲729においてイテレーションIDがit1506のイテレーションでの16bit表現可能割合が割合閾値より大きく、16bit表現可能割合のゆらぎがゆらぎ閾値未満である。そこで、演算データ型決定部141は、16bit固定小数点数を演算#3の演算データ型とする。これにより、イテレーションIDがit1507のイテレーション以降の範囲730のイテレーションでは、演算データ型の変更が無ければ、16bti固定小数点数が演算#3の演算データ型として用いられる。
次に、図16を参照して、実施例3に係る情報処理装置1による演算データ型決定処理の全体的な流れの概要について説明する。図16は、実施例3に係る情報処理装置による演算データ型決定処理のシーケンス図である。
ユーザアプリケーション101は、深層学習の実行指示を実行制御部102に出力する(ステップS401)。
実行制御部102は、深層学習の実行指示をユーザアプリケーション101から受けると、表現可能割合データベース107の初期化を演算データ型判定部104に指示する(ステップS402)。
演算データ型判定部104は、表現可能割合データベース107の初期化の指示を受けて、表現可能割合データベース107に登録済みのデータを消去して初期化する(ステップS403)。
その後、演算データ型判定部104は、表現可能割合データベース107の初期化完了を実行制御部102に通知する(ステップS404)。
実行制御部102は、表現可能割合データベース107の初期化完了の応答を受信すると、学習に使用する学習データの読み込みを学習データ読込部105に指示する(ステップS405)。
学習データ読込部105は、学習データの読み込み指示を受けて、指定された学習データを学習データ記憶部200から読み込む(ステップS406)。
その後、学習データ読込部105は、読み込んだ学習データを実行制御部102へ送信する(ステップS407)。
実行制御部102は、学習データを学習データ読込部105から取得する。次に、実行制御部102は、次のイテレーションの各演算で使用する演算データ型の取得要求を演算データ型判定部104へ出力する(ステップS408)。
演算データ型判定部104は、演算データ型の取得要求の入力を受けて、表現可能割合データベース107を用いて各演算で使用する演算データ型を決定する(ステップS409)。
そして、演算データ型判定部104は、決定した各演算で使用する演算データ型の通知を実行制御部102へ出力する(ステップS410)。
実行制御部102は、各演算で用いる演算データ型を取得する。そして、実行制御部102は、取得した学習データを演算部103へ出力し、さらに各演算で用いる演算データ型を演算部103に通知して演算を実行させる(ステップS411)。
その後、実行制御部102は、演算結果の入力を演算部103から受ける(ステップS412)。
次に、実行制御部102は、取得した演算結果を演算データ型判定部104へ出力して表現可能割合データベース107の更新を指示する(ステップS413)。
演算データ型判定部104は、演算結果に含まれるテンソル要素数を用いて表現可能割合を算出し、算出した表現可能割合を登録して表現可能割合データベース107を更新する(ステップS414)。
その後、演算データ型判定部104は、表現可能割合データベース107の更新完了の通知を実行制御部102へ出力する(ステップS415)。
実行制御部102は、演算データ型データベース106の更新完了の通知の入力を実行制御部102から受ける。実行制御部102、演算部103、演算データ型判定部104及び学習データ読込部105は、1回のイテレーションに含まれる演算全てが完了するまで、ステップS111~S121を繰り返す。さらに、実行制御部102、演算部103、演算データ型判定部104及び学習データ読込部105は、深層学習が完了するまで、ステップS108~S121を繰り返す。その後、実行制御部102は、深層学習の完了をユーザアプリケーション101に通知する(ステップS416)。
次に、図17を参照して、実施例3に係る演算データ型決定処理の詳細な流れについて説明する。図17は、実施例3に係る演算データ型決定処理のフローチャートである。
演算データ型判定部104は、表現可能割合データベース107を初期化する(ステップS501)。
データ読込制御部124は、データベースの初期化完了の通知をデータベース更新指示部123から受ける。また、データ読込制御部124は、学習データの取得要求を演算指示部121から受ける。そして、データ読込制御部124は、学習データの読込要求を学習データ読込部105へ出力する。学習データ読込部105は、学習データの読込要求を受けて、学習データ記憶部200から指定された学習データを読み込む(ステップS502)。その後、学習データ読込部105は、読み込んだ学習データをデータ読込制御部124へ出力する。データ読込制御部124は、取得した学習データを演算指示部121へ出力する。
演算指示部121は、ユーザアプリケーション101から入力された深層学習の実行指示から実行するイテレーションにおける次の演算を選択する(ステップS503)。
そして、演算指示部121は、選択した演算で使用する演算データ型の取得要求を演算データ型決定部141へ出力する。演算データ型決定部141は、取得要求を受けると、選択された演算の使用範囲内のイテレーションでの8bit表現可能割合及び16bit表現可能割合を表現可能割合データベース107から取得する(ステップS504)。ただし、イテレーションが進んでおらず、使用範囲内のイテレーションがそろっていない場合、演算データ型決定部141は、表現可能割合の取得をエラーと判定する。
次に、演算データ型決定部141は、取得した8bit表現可能割合及び16bit表現可能割合を数式(4)に用いて8bit表現可能割合及び16bit表現可能割合のゆらぎを算出する(ステップS505)。ただし、表現可能割合の取得がエラーの場合、演算データ型決定部141は、表現可能割合のゆらぎを算出せずに未算出とする。
次に、演算データ型決定部141は、8bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する(ステップS506)。
8bit表現可能割合のゆらぎがゆらぎ閾値未満の場合(ステップS506:肯定)、演算データ型決定部141は、最新の8bit表現可能割合が割合閾値より大きいか否かを判定する(ステップS507)。
最新の8bit表現可能割合が割合閾値より大きい場合(ステップS507:肯定)、演算データ型決定部141は、演算データ型を8bit固定小数点数に決定する(ステップS508)。
その後、演算データ型決定部141は、選択された演算の演算データ型として8bit固定小数点数を使用することを演算指示部121に通知する。演算指示部121は、8bit固定小数点数を用いて選択した演算を演算部103に実行させる(ステップS509)。
一方、8bit表現可能割合のゆらぎがゆらぎ閾値未満でない場合(ステップS506:否定)又は最新の8bit表現可能割合が割合閾値以下の場合(ステップS507:否定)、演算データ型決定部141は、以下の処理を行う。ここで、8bit表現可能割合のゆらぎが未算出の場合も、演算データ型決定部141は、ゆらぎがゆらぎ閾値未満でない場合と判定する。演算データ型決定部141は、16bit表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する(ステップS510)。
16bit表現可能割合のゆらぎがゆらぎ閾値未満の場合(ステップS510:肯定)、演算データ型決定部141は、最新の16bit表現可能割合が割合閾値より大きいか否かを判定する(ステップS511)。
最新の16bit表現可能割合が割合閾値より大きい場合(ステップS511:肯定)、演算データ型決定部141は、演算データ型を16bit固定小数点数に決定する(ステップS512)。
その後、演算データ型決定部141は、選択された演算の演算データ型として16bit固定小数点数を使用することを演算指示部121に通知する。演算指示部121は、16bit固定小数点数を用いて選択した演算を演算部103に実行させる(ステップS513)。
一方、16bit表現可能割合のゆらぎがゆらぎ閾値未満でない場合(ステップS510:否定)又は最新の16bit表現可能割合が割合閾値以下の場合(ステップS511:否定)、演算データ型決定部141は、以下の処理を行う。演算データ型決定部141は、選択された演算の演算データ型を32bit浮動小数点数と決定する(ステップS514)。ここで、16bit表現可能割合のゆらぎが未算出の場合も、演算データ型決定部141は、ゆらぎがゆらぎ閾値未満でない場合と判定する。
そして、演算データ型決定部141は、選択された演算の演算データ型として32bit浮動小数点数を使用することを演算指示部121に通知する。演算指示部121は、32bit浮動小数点数を用いて選択した演算を演算部103に実行させる(ステップS515)。
その後、演算データ型要求部122は、選択された演算の演算結果を演算部103から取得する。そして、演算データ型要求部122は、取得した演算結果をデータベース更新部142へ出力するとともに表現可能割合データベース107の更新を指示する。データベース更新部142は、入力された演算結果に含まれるテンソル要素数を用いて8bit表現可能割合及び16bit表現可能割合を計算する(ステップS516)。
次に、データベース更新部142は、算出した8bit表現可能割合及び16bit表現可能割合を表現可能割合データベース107に保存する(ステップS517)。
演算指示部121は、演算部103からイテレーションの完了通知を取得したか否かにより、1つのイテレーション中の全ての演算処理が完了したか否かを判定する(ステップS518)。実行していない演算処理が存在する場合(ステップS518:否定)、演算指示部121は、ステップS503に戻る。
これに対して、1つのイテレーション中の全ての演算処理が完了した場合(ステップS518:肯定)、演算指示部121は、深層学習が完了したか否かを判定する(ステップS519)。深層学習が完了していない場合(ステップS519:否定)、演算指示部121は、ステップS502へ戻る。
これに対して、学習が完了した場合(ステップS519:肯定)、演算指示部121は、深層学習の実行完了をユーザアプリケーション101へ通知する。そして、演算指示部121は、演算データ型の切り替えを伴う深層学習の実行を終了する。
以上に説明したように、本実施例に係る情報処理装置は、以前の演算データ型を参照せずにイテレーション毎に演算データ型を決定する。これにより、8bit固定小数点や16bit固定小数点に演算データ型を切替えた後に、演算精度不足によって学習が進まなくなる状態の発生を軽減することができ、学習精度を向上させることができる。
なお、本実施例に係る情報処理装置においても、8bit固定小数点数及び16bit固定小数点への自動切り替えと、全ての演算の32bit浮動小数点数での実行とを選択できる構成としてもよい。8bit固定小数点数及び16bit固定小数点への自動切り替えが指定された場合、情報処理装置は、上述した処理と同様の処理を実行する。これに対して、全ての演算の32bit浮動小数点数での実行が指定された場合、情報処理装置は、8bit固定小数点数への演算データ型の切り替えを行わずに、深層学習が完了するまで全ての演算を32bit浮動小数点数で実行する。