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

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

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

特許7524667情報処理装置、機械学習方法及び機械学習プログラム
<>
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図1
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図2
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図3
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図4
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図5
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図6
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図7
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図8
  • 特許-情報処理装置、機械学習方法及び機械学習プログラム 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-22
(45)【発行日】2024-07-30
(54)【発明の名称】情報処理装置、機械学習方法及び機械学習プログラム
(51)【国際特許分類】
   G06N 20/00 20190101AFI20240723BHJP
   G06F 17/16 20060101ALI20240723BHJP
【FI】
G06N20/00
G06F17/16 Z
【請求項の数】 9
(21)【出願番号】P 2020138823
(22)【出願日】2020-08-19
(65)【公開番号】P2022034897
(43)【公開日】2022-03-04
【審査請求日】2023-05-11
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】忽滑谷 淳史
【審査官】北川 純次
(56)【参考文献】
【文献】国際公開第2020/039493(WO,A1)
【文献】国際公開第2019/050771(WO,A1)
【文献】特開2019-204487(JP,A)
【文献】特開2020-64635(JP,A)
【文献】米国特許出願公開第2019/0034796(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 20/00
G06N 3/02-3/10
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
機械学習における一連の複数の演算を順次行なう演算部と、
各前記演算に用いるデータ型を1次決定する1次データ型決定部と、
前記演算毎の演算時間及び前記データ型の変換にかかる変換時間を含む全体処理時間が短くなるように、前記演算のそれぞれで使用される前記データ型を前記1次データ型決定部により前記1次決定された前記データ型よりも高精度なデータ型に修正するデータ型修正部と、
前記データ型修正部により修正された各前記演算の前記データ型を基に各前記演算を実行するように前記演算部を制御する実行制御部と
を備えたことを特徴とする情報処理装置。
【請求項2】
前記1次データ型決定部は、各前記演算に用いるデータ型を第1データ型及び前記第1データ型よりも高精度な第2データ型のいずれかに前記1次決定し
前記データ型修正部は、前記1次データ型決定部により前記第1データ型を用いると前記1次決定された修正対象演算のそれぞれについて、前記全体処理時間が小さくなるように、使用する前記データ型を前記第1データ型から前記第2データ型に修正する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記データ型修正部は、複数の前記演算のうち同じデータ型を用いる連続する前記演算をクラスタ化し、生成したクラスタのうち前記修正対象演算を含む修正対象クラスタを選択し、選択した各前記修正対象クラスタに含まれる全ての前記修正対象演算で使用する前記データ型を前記第1データ型から前記第2データ型に変更した場合の前記全体処理時間が変更前の前記全体処理時間以下となる場合、それぞれの前記修正対象クラスタに含まれる全ての前記修正対象演算で使用する前記データ型を前記第2データ型に修正することを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記データ型修正部は、前記修正対象クラスタを1つずつ選択し、選択した前記修正対象クラスタに含まれる全ての前記修正対象演算において前記第2データ型を使用した場合の演算時間が、選択した前記修正対象クラスタに含まれる全ての前記修正対象演算において前記第1データ型を使用した場合の演算時間に前記データ型の変換時間を加算した値以下の場合、選択した前記修正対象クラスタに含まれる全ての前記修正対象演算で使用する前記データ型を前記第2データ型に修正することを特徴とする請求項3に記載の情報処理装置。
【請求項5】
前記演算部は、一連の複数の前記演算の実行を1回のイテレーションとして、前記イテレーションを繰り返すことで前記機械学習を実行し、
前記1次データ型決定部、前記データ型修正部及び前記実行制御部は、前記イテレーション毎に前記データ型の前記1次決定、前記データ型の修正及び前記演算部の前記制御を行う
ことを特徴とする請求項1~4のいずれか一つに記載の情報処理装置。
【請求項6】
各前記演算における前記データ型のそれぞれを使用した場合の前記演算時間及び各前記データ型間の前記変換時間を予め記憶する記憶部をさらに備え、
前記データ型修正部は、前記記憶部が記憶する前記演算時間及び前記変換時間を基に、前記修正を行うことを特徴とする請求項1~5のいずれか一つに記載の情報処理装置。
【請求項7】
前記データ型修正部は、前記機械学習における一連の複数の前記演算を実行する前に、各前記演算における前記データ型のそれぞれを使用した場合の前記演算時間及び各前記データ型間の前記変換時間を求め、求めた前記演算時間及び前記変換時間を基に、前記修正を行うことを特徴とする請求項1~5のいずれか一つに記載の情報処理装置。
【請求項8】
機械学習における一連の複数の演算の各前記演算に用いるデータ型を1次決定し、
前記演算毎の演算時間及び前記データ型の変換にかかる変換時間を含む全体処理時間が短くなるように、前記演算のそれぞれで使用されるデータ型を前記1次決定した前記データ型よりも高精度なデータ型に修正し、
前記修正した各前記演算の前記データ型を基に各前記演算を実行する
ことを特徴とする機械学習方法。
【請求項9】
機械学習における一連の複数の演算の各前記演算に用いるデータ型を1次決定し、
前記演算毎の演算時間及び前記データ型の変換にかかる変換時間を含む全体処理時間が短くなるように、前記演算のそれぞれで使用されるデータ型を前記1次決定した前記データ型よりも高精度なデータ型に修正し、
前記修正した各前記演算の前記データ型を基に各前記演算を実行する
処理をコンピュータに実行させることを特徴とする機械学習プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、機械学習方法及び機械学習プログラムに関する。
【背景技術】
【0002】
近年、様々な企業において、深層学習に最適化されたプロセッサの開発への取り組みが行われている。これは機械学習についても同様である。深層学習は、機械学習の手法の一つである。
【0003】
深層学習で用いられる演算は主にテンソル演算であり、学習が進むにつれてテンソルの各要素の値のばらつきが小さくなるという特徴がある。このような深層学習で行われる多くの演算の特殊な性質に着目し、8bitの整数で推論演算するプロセッサなどといった深層学習向けのプロセッサが発表されている。一般的に、8ビットまたは16ビットの固定小数点数を用いて演算を行う場合、演算時間を短くすることができる。
【0004】
これらのプロセッサは、演算精度を低くして演算することにより、電力対演算性能を向上させることが期待されている。しかし、既存のプロセッサは、予め演算精度がハードウェアで決まっているため、学習が進むにつれてテンソルの各要素の変動が小さくなるという深層学習で行われる演算の特徴を生かし切れていない。また、深層学習で用いられる演算であっても、演算によっては演算精度を低くすると学習が進まない場合があるという問題もある。そのような演算を特定することは困難である。
【0005】
そこで、演算の内容に応じて、32ビットの浮動小数点で演算を行うか8ビットの固定小数点で演算を行うかを決定する技術がある。ただし、深層学習における1イタレーションで行われる演算の中には、学習がある程度進んだ後でもテンソルの各要素の変化が大きくなるものが存在する。そのように途中で各要素の変化が大きくなる演算では、演算の内容に応じて予め演算精度を低くした場合、正確な演算を行うことが困難になるおそれがある。
【0006】
なお、深層学習における演算処理の技術として、入力テンソルの各要素について事前計算を行って演算を2の累乗表現の形式に変換し、畳み込み演算用の重みテンソルと入力テンソルとを用いて加算およびシフト演算により演算を行う従来技術がある。また、固定総数点数のデータに対する命令の実行結果のビットの分布についての統計情報を取得し、固定小数点数の小数点位置を更新する従来技術がある。また、一連の演算から第1の演算を識別し、第1の演算とグループ化される第2の演算を選択し、グループ化した演算で入力データを処理する従来技術がある。
【先行技術文献】
【特許文献】
【0007】
【文献】特開2018-181313号公報
【文献】特開2018-124681号公報
【文献】特開2019-169150号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、32bit浮動小数点数から16bit又は8bitの固定小数点数への変換およびその逆を行う場合、データ型の変換による遅延が発生する。そのため、32bit浮動小数点数を8ビット固定小数点数に変換したうえで演算を行い、再度32bit浮動小数点数へ戻すなどの処理を行う場合、常に演算時間が短くなるとは限らず、処理時間が減少する保証はない。例えば、データ型の変換に時間がかかり、トータルで見た場合に32bitの浮動小数点数を用いて処理した方が高速に演算できる場合がある。このように、個々の演算に注目して局所的な処理時間が短くなるように各演算でのデータ型を決定した場合、深層学習全体における処理時間を最低に抑えることが困難となるおそれがある。そのため、深層学習の効率を向上させることが困難となる。ここで、処理時間の間に演算を行なうために電力消費が行われ且つ演算資源が確保されるため、演算に掛かる費用は処理時間に比例すると考えることができることから、処理時間は演算コストと呼ばれる場合がある。
【0009】
また、畳み込み演算用の重みテンソルと入力テンソルとを用いて加算およびシフト演算により演算を行う従来技術でも、各演算の効率を向上させることはできるが、深層学習全体における処理時間を短く抑えることは困難である。また、命令の実行結果のビットの分布についての統計情報を基に固定小数点数の小数点位置を更新する従来技術であっても、深層学習全体での処理時間は考慮されておらず、処理時間を短く抑えることは困難である。また、一連の演算をグループ化して入力データを処理する従来技術であっても、データ型の変換による遅延については考慮されていないため、深層学習全体における処理時間を短く抑えることは困難である。したがって、いずれの従来技術であっても、深層学習の効率を向上させることは困難である。
【0010】
開示の技術は、上記に鑑みてなされたものであって、深層学習の効率を向上させる情報処理装置、機械学習方法及び機械学習プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
本願の開示する情報処理装置、機械学習方法及び機械学習プログラムの一つの態様において、演算部は、機械学習における一連の複数の演算を順次行なう。1次データ型決定部は、各前記演算に用いるデータ型を1次決定する。データ型修正部は、前記演算毎の演算時間及び前記データ型の変換にかかる変換時間を含む全体処理時間が短くなるように、前記演算型のそれぞれで使用される前記データ型を前記第1データ型決定部により前記1次決定された前記データ型よりも高精度なデータ型に修正する。演算制御部は、前記データ型修正部により修正された各前記演算の前記データ型を基に各前記演算を実行するように演算部101を制御する。
【発明の効果】
【0012】
1つの側面では、本発明は、機械学習の効率を向上させることができる。
【図面の簡単な説明】
【0013】
図1図1は、情報処理装置のハードウェア構成図である。
図2図2は、学習の過程を説明するための図である。
図3図3は、実施例に係る情報処理装置のブロック図である。
図4図4は、計算グラフの一例を示す図である。
図5図5は、演算時間及び変換時間の一例を示す図である。
図6図6は、演算時間管理表及び変換時間管理表の一例を表す図である。
図7図7は、演算のクラスタ化を表す図である。
図8図8は、計算グラフにおける演算のデータ型の修正を説明するための図である。
図9図9は、実施例に係る情報処理装置による深層学習のフローチャートである。
【発明を実施するための形態】
【0014】
以下に、本願の開示する情報処理装置、機械学習方法及び機械学習プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、機械学習方法及び機械学習プログラムが限定されるものではない。
【実施例1】
【0015】
図1は、情報処理装置のハードウェア構成図である。情報処理装置1は、深層学習を実行する。以下では、深層学習を実行する情報処理装置1について説明するが、他の機械学習を実行する場合であっても同様の機能を有する。情報処理装置1は、ノードと呼ばれる場合もある。図1に示すように、情報処理装置1は、プロセッサ11、メモリ12、ストレージ13及びネットワークインタフェース14を有する。
【0016】
プロセッサ11は、例えば、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)を用いることができる。プロセッサ11は、バスを介してメモリ12、ストレージ13及びネットワークインタフェース14に接続される。プロセッサ11は、深層学習における演算を含む各種演算を実行する。
【0017】
メモリ12は、揮発性メモリである。メモリ12は、ストレージ13から読み込んだ学習用のデータをプロセッサ11に転送するまで一時的に保持する。また、メモリ12は、プロセッサ11が実行する演算処理に用いる各種データを保持する。
【0018】
ストレージ13は、HDD(Hard Disk Drive)又はSSD(Solid State Drive)などの不揮発性メモリである。ストレージ13は、情報処理装置1において深層学習を実行する際に使用する学習データが格納される。
【0019】
ネットワークインタフェース14は、イーサネット(登録商標)やインフィニバンド(登録商標)を経由して他の情報処理装置1に接続するためのインタフェースである。ネットワークインタフェース14は、プロセッサ11と他の情報処理装置1に搭載されたプロセッサ11との間のデータの送受信の中継を行う。
【0020】
情報処理装置1は、図2に示すように多層のニューラルネットワークを用いて深層学習を行う。図2は、学習の過程を説明するための図である。情報処理装置1は、各層における演算を繰り返すことで認識精度を高める。例えば、図2に示すように、各層のそれぞれで演算#1~#Nが行われる場合、情報処理装置1は、学習データを用いて演算#1~#Nを繰り返す。ここで、図2に示すように、繰り返しにおける演算#1~#Nまでを実行する1回の学習の期間2をイテレーションと呼ぶ。すなわち、情報処理装置1は、イテレーションを複数回繰り返すことで深層学習を完了する。
【0021】
次に、図3を参照して、本実施例に係る情報処理装置1が有する深層学習の機能について説明する。図3は、実施例に係る情報処理装置のブロック図である。
【0022】
図3に示すように、情報処理装置1は、深層学習フレームワーク10、ユーザアプリケーション実行部20及び学習データ記憶部30を有する。学習データ記憶部30は、例えば、図1に示すストレージ13により実現される。学習データ記憶部30は、深層学習で使用する複数の学習データが予め格納される。
【0023】
ユーザアプリケーション実行部20は、予め入力されたユーザプログラムを読み込み実行することで、操作者が作成した深層学習のアプリケーションを動作させる。そして、ユーザアプリケーション実行部20は、動作させたユーザアプリケーションで指定された深層学習の実行命令を実行制御部102へ出力する。
【0024】
深層学習フレームワーク10は、深層学習のアプリケーションを容易に作成するために開発されたソフトウェアライブラリ群である。深層学習フレームワーク10は、図1に示すプロセッサ11及びメモリ12で実現される。深層学習フレームワーク10は、演算部101、実行制御部102、データ型修正部103、1次データ型決定部104、学習データ読込部105、管理表格納部106及び計算グラフ格納部107を有する。
【0025】
計算グラフ格納部107は、1回のイテレーションに含まれる各演算の過程をグラフ化した計算グラフを保持する。計算グラフは、各演算を表すノードを有し、ノード毎に演算内容及び使用するデータ型が登録される。その後、計算グラフ格納部107が保持する計算グラフに対して、1次データ型決定部104により各演算のデータ型の仮登録が行われる。次に、仮登録されたデータ型がデータ型修正部103のデータ型制御部132により修正されて、各演算のデータ型が計算グラフ格納部107に登録される。
【0026】
図4は、計算グラフの一例を示す図である。図4に示す計算グラフ200は、ノード201~207に示される7つの演算を含む。計算グラフ200には、ノード201~207で実行される演算の情報が登録される。例えば、ノード203は、ノード201及び202の演算結果を入力として指定された演算を実行し、その演算結果がノード204の入力となる。
【0027】
計算グラフ格納部107には、各演算で使用されるデータ型が未登録の状態の計算グラフ200が実行する深層学習に応じて登録される。例えば、ユーザアプリケーション実行部20が、深層学習の実行指示とともに実行する深層学習に応じた計算グラフを計算グラフ格納部107に登録してもよい。
【0028】
演算部101は、深層学習の演算として指定された演算を実行して深層学習を行う。演算部101は、各イテレーションの開始時に、学習データの入力を実行制御部102の演算指示部121から受ける。その後、演算部101は、演算の実行指示を実行制御部102の演算指示部121から受ける。そして、演算部101は、計算グラフ格納部107に格納された計算グラフを読み出して、学習データを入力として計算グラフにしたがい演算を実行し、1回のイテレーションを終了する。演算部101は、1回のイテレーションに含まれる演算が全て完了すると、イテレーションの完了通知を演算指示部121へ出力する。演算部101は、演算指示部121から深層学習の完了の通知を受けるまで演算処理を繰り返す。
【0029】
実行制御部102は、深層学習における各種処理を統括制御する。実行制御部102は、演算指示部121、管理表作成指示部122、演算データ型制御指示部123及びデータ読込指示部124を有する。
【0030】
演算指示部121、深層学習の開始の指示を管理表作成指示部122から受ける。そして、演算指示部121は、深層学習の演算を開始する。演算指示部121は、深層学習における各イテレーションの開始時に以下の処理を行う。
【0031】
演算指示部121は、学習に使用する学習データの取得要求をデータ読込指示部124へ出力する。そして、演算指示部121は、取得要求の応答として、学習データの入力をデータ読込指示部124から受ける。
【0032】
次に、演算指示部121は、演算データ型の決定処理の実行を演算データ型制御指示部123に指示する。その後、演算指示部121は、データ型決定の通知を演算データ型制御指示部123から受ける。そして、演算指示部121は、学習データを演算部101へ出力して演算の実行を指示する。
【0033】
その後、演算指示部121は、イテレーションの完了通知の入力を演算部101から受ける。そして、演算指示部121は、学習データの取得、演算データ型の決定処理の実行指示及び演算を演算部101に実行させる処理を繰り返す。
【0034】
演算指示部121は、深層学習が完了するまでイテレーション毎の各層における演算を演算部101に繰り返させる。ここで、演算指示部121は、予め決められた回数のイテレーションが終了した場合又は認識精度が9割を超えた場合などのように予め決められた条件を満たした場合に深層学習が完了したと判定する。認識精度は、所定回数のイテレーションが完了する毎に試験用データを用いて認識処理が行われることで取得される。演算指示部121は、深層学習が完了したと判定した場合、深層学習の完了の通知を演算部101に通知する。
【0035】
管理表作成指示部122は、ユーザアプリケーション実行部20から実行制御部102に対して入力された深層学習の実行指示を取得する。そして、管理表作成指示部122は、1回のイテレーションに含まれる各演算の実行に掛かる演算時間及び演算データの変換に掛かる変換時間の算出をデータ型修正部103の個別値算出部131に指示する。その後、管理表作成指示部122は、管理表の作成完了の応答を個別値算出部131から受ける。そして、管理表作成指示部122は、深層学習の開始を演算指示部121に指示する。
【0036】
演算データ型制御指示部123は、演算データ型の決定処理の実行の指示を演算指示部121から受ける。そして、演算データ型制御指示部123は、データ型の1次決定処理の実行を1次データ型決定部104に指示する。ここで、データ型の1次決定とは、演算毎に演算結果の状態を考慮して、各演算において最適と考えられるデータ型を仮決定する処理である。
【0037】
その後、演算データ型制御指示部123は、各演算のデータ型の仮決定の通知を1次データ型決定部104から受ける。次に、演算データ型制御指示部123は、データ型の修正をデータ型修正部103のデータ型制御部132に指示する。その後、演算データ型制御指示部123は、データ型の確定の通知をデータ型制御部132から受ける。そして、演算データ型制御指示部123は、データ型決定の通知を演算指示部121に通知する。
【0038】
データ読込指示部124は、学習に使用する学習データの取得要求を演算指示部121から受ける。そして、データ読込指示部124は、学習に使用する学習データの読み込みを学習データ読込部105に指示する。その後、データ読込指示部124は、学習に使用する学習データを学習データ読込部105から取得する。そして、データ読込指示部124は、取得した学習データを演算指示部121へ出力する。
【0039】
その後、データ読込指示部124は、イテレーション終了毎に演算指示部121から学習データの取得要求を演算指示部121から受ける。そして、データ読込指示部124は、イテレーション毎に、学習データの読み込みを学習データ読込部105に指示して学習データを取得し、取得した学習データを演算指示部121へ出力する。
【0040】
学習データ読込部105は、学習に使用する学習データの読み込みの指示をデータ読込指示部124から受ける。そして、学習データ読込部105は、指定された学習データを学習データ記憶部30から読み込む。その後、学習データ読込部105は、読み込んだ学習データをデータ読込指示部124へ送信する。
【0041】
1次データ型決定部104は、データ型の1次決定処理の実行指示を演算データ型制御指示部123から受ける。そして、1次データ型決定部104は、1つ前のイテレーションにおける各演算の演算結果を演算部101から取得する。そして、1次データ型決定部104は、各演算の演算結果における決定した小数点位置から、32bitの浮動小数点をデータ型として用いる演算について8bitの固定小数点を用いて表現可能なテンソル要素数の割合である表現可能割合を算出する。次に、1次データ型決定部104は、算出した表現可能割合が閾値を超えた演算について、表現可能割合の変動を表すイテレーション毎のゆらぎを求める。次に、1次データ型決定部104は、算出したゆらぎがゆらぎ閾値未満か否かを判定する。ゆらぎがゆらぎ閾値未満の場合、その演算の小数点位置が収束しつつある判定して、1次データ型決定部104は、その演算の演算データ型を8bit固定小数点数と1次決定する。ここでは、8bitの固定小数点に変換する場合で説明したが、16bitの固定小数点など他の情報量を減らした低精度なデータ型への変換の場合でも、1次データ型決定部104は、同様に各演算のデータ型の1次決定を行うことができる。
【0042】
その後、1次データ型決定部104は、1次決定した各演算のデータ型を計算グラフ格納部107が保持する計算グラフに登録して、計算グラフの各演算に用いられるデータ型の情報を更新する。これにより、図4の紙面に向かって下段に示すように、計算グラフ200は、各ノード201~207において用いられるデータ型が登録される。図4では、1次データ型決定部104は、塗りつぶした円で表したノード203、205及び206において、8bitの固定小数点数をデータ型として用いることを仮決定する。また、1次データ型決定部104は、ノード201、202、204及び207では、32bitの浮動小数点数を用いることを仮決定する。その後、1次データ型決定部104は、各演算のデータ型の仮決定の通知を演算データ型制御指示部123へ出力する。
【0043】
データ型修正部103は、仮決定された各演算のデータ型を、イテレーション全体の処理時間に応じて修正する。データ型修正部103は、個別値算出部131及びデータ型制御部134を有する。
【0044】
個別値算出部131は、1回のイテレーションに含まれる各演算の実行に掛かる演算時間及び演算データの変換に掛かる変換時間の算出の指示を管理表作成指示部123から受ける。そして、個別値算出部131は、計算グラフ格納部107から計算グラフを取得する。
【0045】
次に、個別値算出部131は、予め与えられた演算時間算出用の値を用いて計算グラフの各ノードの演算を実行することにより、プロファイラを用いて各演算の演算時間を算出する。この場合、個別値算出部131は、演算時間算出用の値として32bitの浮動小数点数及び8bitの固定小数点数の双方を用いて、32bitの浮動小数点数を用いた場合の演算時間及び8bitの固定小数点数を用いた場合の演算時間を算出する。ここで、個別値算出部131は、計算グラフの中の各演算をそれぞれ異なる演算とする。すなわち、同じ種類の演算であっても1回のイテレーションの中で実行されるタイミングが異なる演算であれば、個別値算出部131は、異なる演算として取り扱う。
【0046】
図4に示す計算グラフ200の場合、個別値算出部131は、ノード201~207のそれぞれで行われる演算について、32bitの浮動小数点数を用いた場合の演算時間及び8bitの固定小数点数を用いた場合の演算時間を算出する。例えば、個別値算出部131は、図5に示すように、各ノード201~207で用いられる演算の演算時間を算出する。図5は、演算時間及び変換時間の一例を示す図である。図5の各ノード201~207には、演算名、32bitの浮動小数点数を用いた場合の演算時間及び8bitの固定小数点数を用いた場合の演算時間を記載した。演算名は、ノード201~207で実行される各演算を一意に識別するために割り当てられた識別情報である。
【0047】
そして、個別値算出部131は、各演算の32bitの浮動小数点数を用いた場合の演算時間及び8bitの固定小数点数を用いた場合の演算時間を登録した図6に示す演算時間管理表211を生成する。図6は、演算時間管理表及び変換時間管理表の一例を表す図である。
【0048】
次に、個別値算出部131は、予め与えられた演算時間算出用のデータを用いて各ノード間でデータ変換を行った場合の変換時間を算出する。この場合も、個別値算出部131は、32bitの浮動小数点数から8bitの固定小数点数への変換、及び、8bitの固定小数点数から32bitの浮動小数点数への変換の双方の変換時間を算出する。
【0049】
例えば、図4に示す計算グラフ200の場合、個別値算出部131は、図5に示すように、データ型変換221~225について32bitの浮動小数点数から8bitの固定小数点数への変換の変換時間を算出する。また、個別値算出部131は、データ型変換221~225について、8bitの固定小数点数から32bitの浮動小数点数への変換の変換時間を算出する。図5では、各データ型変換221~225を示す矢印に付加した吹き出し内の上段に32bitの浮動小数点数から8bitの固定小数点数への変換の変換時間を記載し、下段に8bitの固定小数点数から32bitの浮動小数点数への変換の変換時間を記載した。ここで、本実施例では、個別値算出部131は、データ型の統一が決められた演算間については変換時間の算出を省略する。例えば、計算グラフ200のノード205とノード206では同じデータ型の使用が要求されるので、個別値算出部131は、その間のデータ変換の変換時間は算出しない。
【0050】
そして、個別値算出部131は、図6に示す、32bitの浮動小数点数から8bitの固定小数点数への変換、及び、8bitの固定小数点数から32bitの浮動小数点数への変換の双方の変換時間を登録した変換時間管理表212を生成する。
【0051】
その後、個別値算出部131は、演算時間管理表211を管理表格納部106に格納する。また、個別値算出部131は、変換時間管理表212を管理表格納部106に格納する。そして、個別値算出部131は、管理表の作成完了の応答を管理表作成指示部122に通知する。
【0052】
ここで、個別値算出部131は、深層学習の実行命令を受ける前に、プロファイラを用いて演算時間及び変換時間を予め算出してもよい。また、個別値算出部131は、各演算で用いられるテンソル型や演算の種類及びパラメータによって決まる演算毎の性質を使用して、各演算の演算時間及び変換時間を事前に算出しておいてもよい。
【0053】
データ型制御部132は、データ型の修正指示を演算データ型制御指示部123から受けると、演算時間管理表211及び変換時間管理表212を管理表格納部106から取得する。また、データ型制御部132は、計算グラフを計算グラフ格納部107から取得する。
【0054】
ここで、1回のイテレーションにおける全体処理時間は、各演算の演算時間とデータ型の変換時間の総和によって求められる。すなわち、次の数式(1)により1回のイテレーションの仮全体処理時間が算出される。
【0055】
【数1】
【0056】
ここで、Ctotalは、全体処理時間である。また、Co8は、8bitの固定小数点数で演算する演算群の総処理時間である。また、Co32は、32bitの浮動小数点数で演算する演算群の総処理時間である。また、Cc8→32は、8bitの固定小数点数から32bitの浮動小数点数へのデータ型の変換の総変換時間である。また、Cc32→8は、32bitの浮動小数点数から8bitの固定小数点数へのデータ型の変換の総変換時間である。
【0057】
データ型制御部132は、上述した数式(1)で表される全体処理時間を最小化するように、仮のデータ型に対してデータ型の修正を加える。ここで、データ型制御部132は、データ型の変換として、連続する同じデータ型を用いる演算で用いられるデータ型を変換する。そこで、データ型制御部132は、計算グラフにおいて連続する同じデータ型を用いる演算をまとめてクラスタ化する。すなわち、データ型制御部132は、計算グラフにおいてデータ型が切り替わる演算と演算の間を境界としてクラスタを構築する。
【0058】
図4に示した計算グラフ200を用いる場合、データ型制御部132は、図7に示すように、各ノード201~207の演算をクラスタ化する。図7は、演算のクラスタ化を表す図である。この場合、データ型制御部132は、ノード201及び202を含むクラスタ231、ノード203を含むクラスタ232、ノード204を含むクラスタ233、ノード205及び206を含むクラスタ234、並びに、ノード207を含むクラスタ235を生成する。
【0059】
次に、データ型制御部132は、データ型として8bitの固定小数点数を用いて演算を行なうクラスタを特定する。例えば、図4の計算グラフであれば、データ型制御部132は、クラスタ232及び234をデータ型として8bitの固定小数点数を用いて演算を行なうクラスタとして特定する。
【0060】
次に、データ型制御部132は、特定した各クラスタの8bitの固定小数点数を用いた場合の処理時間を、次の数式(2)に演算時間管理表211及び変換時間管理表212の各値を用いて算出する。この場合、データ型制御部132は、8bitの固定小数点数を用いた場合の処理時間の中に、データ型の変換による変換時間も含める。
【0061】
【数2】
【0062】
ここで、cは、クラスタ内の演算を8bitの固定小数点数を用いた場合に必要となる処理時間である。また、Nは、クラスタ内に含まれる演算数である。また、Nは、クラスタに入力されるテンソルの個数である。また、Nは、クラスタから出力されるテンソルの個数である。また、ci8は、演算iに関して、8bitの固定小数点数で演算した時の演算コストである。また、cn32→8は、入力nに関して、32bit浮動小数点数から8bitの固定小数点数へデータ型を変換するための変換時間である。また、cm8→32は、入力mに関して、8bit浮動小数点数から32bitの固定小数点数へデータ型を変換するための変換時間である。
【0063】
次に、データ型制御部132は、特定した各クラスタの32bitの浮動小数点数を用いた場合の処理時間を、次の数式(3)に演算時間管理表211及び変換時間管理表212の各値を用いて算出する。
【0064】
【数3】
【0065】
ここで、c32は、クラスタ内の演算を32bitの浮動小数点数を用いた場合に必要となる処理時間である。また、ci32は、演算iに関して、32bitの浮動小数点数で演算した時の演算コストである。
【0066】
計算グラフの各ノードには演算名も合わせて登録されるため、データ型制御部132は、演算時間管理表211から演算名をキーとしてそれぞれの演算時間を検索して取得する。また、演算間のデータ型の変換については、データ型制御部132は、<データ変換元の演算名>-<データ変換先の演算名>をキーとして一致する関数間のデータ変換を変換時間管理表212から検索して取得する。例えば、データ型制御部132は、図8に示すように、各演算の演算時間とデータ型の変換時間とを取得する。図8は、計算グラフにおける演算のデータ型の修正を説明するための図である。
【0067】
次に、データ型制御部132は、特定した各クラスタについて、8bitの固定小数点数を用いた場合の処理時間と32bitの浮動小数点数を用いた場合の処理時間とを比較する。8bitの固定小数点数を用いた場合の処理時間が32bitの浮動小数点数を用いた場合の処理時間以上の場合、データ型制御部132は、そのクラスタのデータ型を32bitの浮動小数点数へ戻すと決定する。
【0068】
例えば、データ型制御部132は、図8におけるクラスタ232の8bitの固定小数点数を用いた場合の処理時間を、1.0+0.5+1.2+8.2=10.9msと算出する。また、データ型制御部132は、クラスタ232の32bitの浮動小数点数を用いた場合の処理時間を、10.6msと算出する。この場合、8bitの固定小数点数を用いた場合の処理時間が32bitの浮動小数点数を用いた場合の処理時間以上であるので、データ型制御部132は、クラスタ232のデータ型を32bitの浮動小数点数へ戻すと決定する。
【0069】
また、データ型制御部132は、図8におけるクラスタ234の8bitの固定小数点数を用いた場合の処理時間を、0.9+2.3+1.1+1.4=5.7msと算出する。また、データ型制御部132は、クラスタ232の32bitの浮動小数点数を用いた場合の処理時間を、8.6+2.3=10.9msと算出する。この場合、8bitの固定小数点数を用いた場合の処理時間が32bitの浮動小数点数を用いた場合の処理時間未満であるので、データ型制御部132は、クラスタ234のデータ型を8bitの固定小数点数のまま維持すると決定する。
【0070】
次に、データ型制御部132は、計算グラフ格納部107に格納された計算グラフにおいて、データ型を32bitの浮動小数点数へ戻すと決定したクラスタに含まれる各演算で用いるデータ型を32bitの浮動小数点数へ修正して計算グラフを修正する。これにより、計算グラフ200は、図8の紙面に向かって下段に示した状態に修正される。その後、データ型制御部132は、データ型の確定の通知を演算データ型制御指示部123へ応答する。この8bitの固定小数点数が「第1データ型」の一例にあたる。また、32bitの浮動小数点数が「第2データ型」の一例にあたる。
【0071】
次に、図9を参照して、実施例に係る情報処理装置1による深層学習の流れについて説明する。図9は、実施例に係る情報処理装置による深層学習のフローチャートである。
【0072】
管理表作成指示部122は、深層学習の実行指示をユーザアプリケーション実行部20から受ける。そして、管理表作成指示部122は、管理表の作成を個別値算出部131に指示する。個別値算出部131は、予め与えられた値を用いて各演算を実行して、プロファイラを用いて各演算の演算時間及び各データ型の変換時間を求める(ステップS1)。そして、個別値算出部131は、演算時間管理表211及び変換時間管理表212を作成して、管理表格納部106に格納する。その後、演算データ型制御指示部123は、管理表の作成完了を演算指示部121に通知する。
【0073】
演算指示部121は、管理表の作成完了の通知を受けると、入力データの読み込みを行う(ステップS2)。具体的には、演算指示部121は、データ読込指示部124に要求する。データ読込指示部124は、学習データの読み込みを学習データ読込部105に指示する。学習データ読込部105は、データ読込指示部124からの指示を受けて、学習データを学習データ記憶部30から読み込む。データ読込指示部124は、学習データを学習データ読込部105から取得して演算指示部121に転送する。
【0074】
次に、演算指示部121は、データ型の決定を演算データ型制御指示部123に指示する。演算データ型制御指示部123は、演算指示部121からの指示を受けて、データ型の1次決定を1次データ型決定部104に依頼する。1次データ型決定部104は、演算部101から演算結果を取得して、演算結果の8bitの固定小数点数による表現可能割合を求める。また、1次データ型決定部104は、表現可能割合の変動を表すイテレーション毎のゆらぎを求める。そして、1次データ型決定部104は、表現可能割合及びゆらぎを基に、各演算のデータ型を1次決定する(ステップS3)。その後、1次データ型決定部104は、1次決定した各演算型のデータ型を計算グラフ格納部107が有する計算グラフに登録する。
【0075】
次に、演算データ型制御指示部123は、データ型の修正をデータ型制御部132に指示する。データ型制御部132は、演算データ型制御指示部123からの指示を受けて、演算時間管理表211及び変換時間管理表212を管理表格納部106から取得する。また、データ型制御部132は、1次決定されたデータ型が登録された計算グラフを計算グラフ格納部107から取得する。次に、データ型制御部132は、計算グラフの演算をクラスタ化する。次に、データ型制御部132は、8ビットの固定小数点数をデータ型とするクラスタの全てについてデータ型の修正の判定が完了したか否かを判定する(ステップS4)。
【0076】
データ型の修正の判定を行っていない8ビットの固定小数点数をデータ型とするクラスタが残っている場合(ステップS4:否定)、データ型制御部132は、判定を行っていない8ビットの固定小数点数をデータ型とするクラスタの中から1つクラスタを選択する(ステップS5)。
【0077】
次に、データ型制御部132は、選択したクラスタにおいて8bitの固定小数点数を用いた場合の処理時間である修正前処理時間を算出する(ステップS6)。
【0078】
次に、データ型制御部132は、選択したクラスタにおいて32bitの浮動小数点数を用いた場合の処理時間である修正後処理時間を算出する(ステップS7)。
【0079】
次に、データ型制御部132は、修正前処理時間が修正後処理時間以上であるか否かを判定する(ステップS8)。修正前処理時間が修正後処理時間未満の場合(ステップS8:否定)、データ型制御部132は、ステップS4へ戻る。
【0080】
これに対して、修正前処理時間が修正前処理時間以上の場合(ステップS8:肯定)、データ型制御部132は、計算グラフに登録された選択したクラスタに属する全ての演算に用いるデータ型を32bitの浮動小数点数に戻す(ステップS9)。その後、データ型制御部132は、ステップS4へ戻る。
【0081】
一方、8ビットの固定小数点数をデータ型とするクラスタの全てについてデータ型の修正の判定が完了した場合(ステップS4:肯定)、演算データ型制御指示部123は、データ型の決定を演算指示部121に通知する。演算指示部121は、データ型の決定の通知を受けて、計算グラフ格納部107に格納された計算グラフを用いて1イテレーション分の演算を実行する(ステップS10)。
【0082】
次に、演算指示部121は、予め決められた条件を満たしたか否かにより学習が完了したか否かを判定する(ステップS11)。学習が完了していない場合(ステップS11:否定)、演算指示部121は、ステップS2へ戻る。
【0083】
これに対して、学習が完了した場合(ステップS11:肯定)、演算指示部121は、学習の完了を演算部101に通知して深層学習の実行を終了する。
【0084】
ここで、本実施例では、32bitの浮動小数点数と8bitの固定小数点数とを例に説明したが、32bitの浮動小数点数と16bitの固定小数点数を用いる場合でもよく、また、8bitの固定小数点数と16bitの固定小数点数を用いる場合でもよい。他にも、精度の異なるデータ型であって、精度を高くした場合に処理時間が短くなることがある演算であれば他のデータ型の組み合わせであってもよい。
【0085】
以上に説明したように、本実施例に係る情報処理装置は、イテレーション毎に、1回のイテレーションに含まれる個別の演算における演算性能の評価を基に各演算で用いるデータ型を1次決定する。次に、情報処理装置は、演算をクラスタ化して、8bitの固定小数点数を用いるよりも32bitの浮動小数点数を用いる場合の方が処理時間が短くなるクラスタを特定する。次に、情報処理装置は、特定したクラスタに属する演算で使用されるデータ型を32bitの浮動小数点数に修正する。その後、情報処理装置は、修正を加えた各演算のデータ型を用いてイテレーション毎の演算を行なう。これにより、一部の演算を32bitの浮動小数点数からより低精度なデータ型に切り替えた場合に発生するデータ型の変換時間によって、32bitの浮動小数点数で演算するよりも全体処理時間が延びる問題を回避することができる。したがって、機械学習全体における処理時間を短く抑えることができ、機械学習の効率が向上する。
【符号の説明】
【0086】
1 情報処理装置
10 深層学習フレームワーク
20 ユーザアプリケーション実行部
30 学習データ記憶部
101 演算部
102 実行制御部
103 データ型修正部
104 1次データ型決定部
105 学習データ読込部
106 管理表格納部
107 計算グラフ格納部
121 演算指示部
122 管理表作成指示部
123 演算データ型制御指示部
124 データ読込指示部
131 個別値算出部
132 データ型制御部
図1
図2
図3
図4
図5
図6
図7
図8
図9