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

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

Info

Publication number
JP2022094508A
JP2022094508A JP2020207436A JP2020207436A JP2022094508A JP 2022094508 A JP2022094508 A JP 2022094508A JP 2020207436 A JP2020207436 A JP 2020207436A JP 2020207436 A JP2020207436 A JP 2020207436A JP 2022094508 A JP2022094508 A JP 2022094508A
Authority
JP
Japan
Prior art keywords
data
compression
bit
compression method
unit
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
JP2020207436A
Other languages
English (en)
Inventor
真紀子 伊藤
Makiko Ito
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 JP2020207436A priority Critical patent/JP2022094508A/ja
Priority to EP21207651.7A priority patent/EP4016281A1/en
Priority to US17/526,010 priority patent/US20220188077A1/en
Priority to CN202111448493.1A priority patent/CN114637489A/zh
Publication of JP2022094508A publication Critical patent/JP2022094508A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/74Selecting or encoding within a word the position of one or more bits having a specified value, e.g. most or least significant one or zero detection, priority encoders
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Molecular Biology (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Memory System (AREA)

Abstract

【課題】メモリに転送するディープニューラルネットワークの学習に使用するデータの圧縮効率を向上することで、学習時間を短縮する。【解決手段】演算処理装置は、ディープニューラルネットワークの学習を実行可能な演算処理装置であって、固定小数点数データの演算を実行する演算部と、演算部が実行する演算により得られる演算結果データの最上位ビットの分布を示す統計情報を取得する統計取得部と、統計取得部が取得した統計情報に基づいて、演算に使用する固定小数点数データのビット範囲を更新する更新部と、統計取得部が取得した統計情報に基づいて、複数の圧縮方式による演算結果データの圧縮後のデータ量を推定し、データ量が最小となる圧縮方式を決定する圧縮方式決定部と、圧縮方式決定部が決定した圧縮方式を使用して圧縮された演算結果データをメモリに転送するメモリインタフェースと、を有する。【選択図】図1

Description

本発明は、演算処理装置、演算処理方法および演算処理プログラムに関する。
ディープニューラルネットワーク(以下、DNNとも称する)の認識性能を高めるために、DNNの学習で使用する学習データが増加する傾向にある。これに伴い、学習を実行する計算機と、学習で使用するデータを保持するメモリとを接続するメモリバスの帯域幅が増加する傾向にある。そこで、学習に使用するデータを圧縮することで、メモリバスの帯域幅を削減する手法が提案されている(例えば、特許文献1参照)。データの圧縮は、圧縮前のデータのバイト毎に"0"または"非0"を示すフラグを設け、"非0"データが圧縮後のデータサイズに収まるように"非0"データの所定のビットを切り捨てることで実施される。
また、DNNの学習等に固定小数点数データを使用し、演算により得られる固定小数点数データのビット位置の分布に基づいて小数点位置を更新することで、データ量を削減しつつ学習の精度を向上する手法が提案されている(例えば、特許文献2参照)。さらに、固定小数点数データのビット位置の分布を算出する場合、演算器の組から演算結果を順番に取得することで、取得部の数と信号配線の数とを少なくして回路規模を削減する手法が提案されている(例えば、特許文献3参照)。
特表2020-517014号公報 特開2018-124681号公報 国際公開第2020/084723号
DNNの学習では、大量のデータの演算が実行され、演算により得られるデータなどの学習に使用するデータの特性(分布、値など)はその都度変化する。演算により得られる固定小数点数データのビット位置の分布に基づいて小数点位置を更新する場合も、学習に使用するデータの特性はその都度変化する。このため、学習に使用するデータを特定の圧縮方式で圧縮する場合、データの特性に応じて圧縮効率が変動するおそれがある。圧縮効率が低下する場合、メモリに対するデータ転送時間が増加し、学習時間が増加する。
1つの側面では、本発明は、メモリに転送するディープニューラルネットワークの学習に使用するデータの圧縮効率を向上することで、学習時間を短縮することを目的とする。
一つの観点によれば、演算処理装置は、ディープニューラルネットワークの学習を実行可能な演算処理装置であって、固定小数点数データの演算を実行する演算部と、前記演算部が実行する演算により得られる演算結果データの最上位ビットの分布を示す統計情報を取得する統計取得部と、前記統計取得部が取得した統計情報に基づいて、演算に使用する固定小数点数データのビット範囲を更新する更新部と、前記統計取得部が取得した統計情報に基づいて、複数の圧縮方式による前記演算結果データの圧縮後のデータ量を推定し、前記データ量が最小となる圧縮方式を決定する圧縮方式決定部と、前記圧縮方式決定部が決定した圧縮方式を使用して圧縮された前記演算結果データをメモリに転送するメモリインタフェースと、を有する。
メモリに転送するディープニューラルネットワークの学習に使用するデータの圧縮効率を向上することで、学習時間を短縮することができる。
一実施形態における演算処理装置の一例を示すブロック図である。 図1の演算処理装置が搭載されるサーバの一例を示すブロック図である。 図2のサーバによるDNNの学習の概要を示す説明図である。 図2のサーバによる学習中に固定小数点数データの小数点位置を更新する一例を示す説明図である。 図1の演算処理装置によるDNNの学習において、演算結果の多くが"0"になるレイヤでのデータの分布の一例を示す説明図である。 図1の圧縮伸長部で圧縮するデータの圧縮方式の一例を示す説明図である。 図1の圧縮伸長部で圧縮するデータの圧縮方式の別の例を示す説明図である。 図1の圧縮伸長部で圧縮するデータの圧縮方式のさらなる別の例を示す説明図である。 図2のサーバによるDNNの学習の一例を示すフロー図である。 図9のステップS400で実行されるミニバッチの学習の一例を示すフロー図である。 図9のステップS600で実行される圧縮方式の決定方法の一例を示すフロー図である。 図11のステップS620で実行される圧縮データ量の予測方法の一例を示すフロー図である。 図12の各領域の圧縮データ量を予測する場合の桁毎に算出される圧縮データ量の一例を示す説明図である。 別の実施形態における演算処理装置の一例を示すブロック図である。
以下、図面を参照して、実施形態について説明する。以下では、信号等の情報が伝達される信号線には、信号名と同じ符号を使用する。また、図中に単線で示す信号線が、複数ビットの場合もある。
図1は、一実施形態における演算処理装置の一例を示す。図1に示す演算処理装置100は、命令制御部10、レジスタ部20、ベクトルユニット30、スカラユニット40、統計情報集約部50およびメモリインタフェース60、70を有する。演算処理装置100は、CPU(Central Processing Unit)等のプロセッサである。命令制御部10は、メモリインタフェース60を介して命令メモリ216に接続される。ベクトルユニット30およびスカラユニット40は、メモリインタフェース70を介してデータメモリ218に接続される。例えば、メモリインタフェース60、70は、メモリアクセスコントローラである。なお、メモリインタフェース70は、圧縮伸長部72を有する。
命令制御部10は、プログラムカウンタPCおよび命令デコーダDEC等を有する。命令制御部10は、プログラムカウンタPCが示すアドレスに基づいて命令メモリ216から命令をフェッチし、フェッチした命令を命令デコーダDECに供給する。命令デコーダDECは、フェッチされた命令をデコードし、デコード結果をレジスタ部20、ベクトルユニット30およびスカラユニット40に発行する。レジスタ部20、ベクトルユニット30およびスカラユニット40は、命令デコーダDECがデコードした命令を実行する演算ユニットとして機能する。なお、命令制御部10は、命令をプリフェッチしておく命令バッファや命令キャッシュを有してもよい。
レジスタ部20は、ベクトルユニット30が使用する複数のベクトルレジスタを含むベクトルレジスタファイルVRFと、所定数のベクトルレジスタに対応する複数のベクトルアキュムレータVACCとを有する。また、レジスタ部20は、スカラユニット40が使用する複数のスカラレジスタを含むスカラレジスタファイルSRFと、スカラアキュムレータACCとを有する。以下では、レジスタ部20内の各種レジスタは、単にレジスタとも称される。
さらに、レジスタ部20は、統計情報格納部22を有する。統計情報格納部22は、統計情報集約部50によって取得された統計情報が格納される。例えば、統計情報は、ベクトルユニット30またはスカラユニット40での演算結果データ(固定小数点数データ)の各々の最上位ビットの位置の分布を示す度数分布データ、および、度数分布データを得るための最上位ビットの位置を示す情報である。
ベクトルユニット30は、例えば、8要素の演算ユニットを有する。ベクトルユニット30は、整数演算と、ベクトルアキュムレートレジスタを用いた積和演算などを実行する機能を有する。また、ベクトルユニット30は、ベクトルアキュムレートレジスタのクリア、積和演算(MAC:Multiply and Accumulate)、累積加算、およびベクトルレジスタへのデータの転送などを実行する。さらに、ベクトルユニット30は、データメモリ218からのデータのロードと、データメモリ218へのデータのストアを実行する。
ベクトルユニット30の各演算ユニットは、整数演算器(OP)32、データ変換部34および統計取得部36を有する。データ変換部34および統計取得部36は、整数演算器32毎に設けられる。整数演算器32は演算部の一例であり、データ変換部34は更新部の一例である。なお、データ変換部34の機能は、整数演算器32に含まれてもよい。
例えば、ベクトルユニット30は、ベクトルレジスタに保持されるデータを入力し、8要素の演算ユニットの整数演算器32で演算を並列に実行する。そして、ベクトルユニット30は、演算結果である出力データをベクトルレジスタに格納する。また、ベクトルユニット30は、8要素の整数演算器32でそれぞれ積和演算を実行し、積和演算結果の累積加算値をベクトルアキュムレータVACCにそれぞれ格納する。
例えば、整数演算器32は、8ビットの演算器である。整数演算器32は、8ビットデータの演算だけでなく、2つの4ビットデータの並列演算、4つの2ビットデータの並列演算を実行可能である。各データは、符号ビットを含むため、演算に使用されるデータ値を表すビット数は、データのビット数より1ビット少ない。なお、整数演算器32は、16ビットの演算器でもよく、この場合、整数演算器32は、16ビットの演算器を、2つの8ビットの演算器として機能させてよい。
スカラユニット40は、整数演算器(OP)42、データ変換部44および統計取得部46を有する。整数演算器42は演算部の一例であり、データ変換部44は更新部の一例である。なお、データ変換部44の機能は、整数演算器42に含まれてもよい。スカラユニット40は、四則演算、シフト演算、分岐命令、ロード命令およびストア命令などを実行する機能を有する。スカラユニット40は、スカラレジスタとスカラアキュムレータACCとを使用して演算を実行する。
例えば、整数演算器42は、スカラレジスタのいずれかに格納されている入力データを演算し、演算結果である出力データをスカラレジスタに格納する。整数演算器42は、積和演算を実行する場合、積和演算の結果をスカラアキュムレータACCに格納する。スカラユニット40による演算結果は、スカラレジスタ、スカラアキュムレータACCまたはデータメモリ218のいずれかに格納される。例えば、整数演算器42は、整数演算器32と同様に、8ビットの演算器でもよく、16ビットの演算器でもよい。なお、整数演算器32、42のビット数は、8ビットまたは16ビットに限定されない。
各データ変換部34は、演算命令に基づいて整数演算器32から出力される固定小数点数データ(演算結果データ)を受信する。各データ変換部34は、ビット幅情報に基づいて、受信した固定小数点数データのうちの所定のビット数(ビット幅)のデータを選択することで、ビット位置(ビット範囲)を変更する。この際、各データ変換部34は、オーバーフローする上位側のビットに対する飽和処理と、アンダーフローする下位側のビットに対する丸め処理を実行する。
例えば、各データ変換部34は、整数演算器32の出力データのビット幅である24ビットの固定小数点数データを、整数演算器32の入力データのビット幅である8ビットの固定小数点数データに変換する。そして、各データ変換部34は、ビット位置を変更した固定小数点数データをレジスタ部20に格納する。
データ変換部44の機能は、データ変換部34の機能と同様である。すなわち、データ変換部44は、演算命令に基づいて整数演算器42から出力される固定小数点数データ(演算結果データ)のうちの所定のビット数(ビット幅)のデータを、ビット幅情報に基づいて選択することで、ビット位置(ビット範囲)を変更する。この際、データ変換部44は、飽和処理および丸め処理を実行する。
例えば、データ変換部44は、整数演算器42の出力データのビット幅である24ビットの固定小数点数データを、整数演算器42の入力データのビット幅である8ビットの固定小数点数データに変換する。そして、データ変換部44は、ビット位置を変更した固定小数点数データをレジスタ部20に格納する。
各統計取得部36は、演算命令に基づいて整数演算器32から出力される固定小数点数データ(演算結果データ)を受信する。各統計取得部36は、例えば、受信した固定小数点数データの最上位ビットの位置を取得し、取得した最上位ビットの位置を示す位置情報を統計情報集約部50に出力する。
統計取得部46は、演算命令に基づいて整数演算器42から出力される固定小数点数データ(演算結果データ)を受信する。統計取得部46は、受信した固定小数点数データの最上位ビットの位置を取得し、取得した最上位ビットの位置を示す位置情報を統計情報集約部50に出力する。
なお、各統計取得部36、46は、命令デコーダDECによる命令のデコード結果が統計情報の取得の指示を含む場合のみ、演算結果データの最上位ビットの位置を示す位置情報を取得し、取得した位置情報を統計情報集約部50に出力してもよい。また、1つのデータ変換部34および1つの統計取得部36が、複数の整数演算器32に共通に設けられてもよい。この場合、統計取得部36は、複数の各整数演算器32から出力される固定小数点数データの最上位ビットの位置を取得する。
ここで、各統計取得部36、46が取得する最上位ビットの位置は、符号ビットが"0"(データが正値)の場合、"1"が最初に現れる上位側のビット位置である。また、符号ビットが"1"(データが負値)の場合、"0"が最初に現れる上位側のビット位置である。
統計情報集約部50は、統計取得部36、46から受信する最上位ビットの位置を示す位置情報を集約して統計情報を生成し、生成した統計情報を統計情報格納部22に格納する。そして、統計情報格納部22には、上述したように、演算結果データ(固定小数点数データ)の各々の最上位ビットの位置の分布を示す度数分布データが保持される。統計情報集約部50により集約され、統計情報格納部22に格納された統計情報の例は、図4および図5で説明される。
この実施形態では、メモリインタフェース70の圧縮伸長部72は、例えば、演算処理装置100を制御する上位のコンピュータ等から通知された圧縮方式に基づいて、レジスタ部20から出力される固定小数点数データを圧縮する。そして、圧縮伸長部72は、圧縮した固定小数点数データをデータメモリ218(外部メモリ)に格納する。ここで、レジスタ部20から出力される固定小数点数データは、データ変換部34、44から出力され、レジスタ部20に格納された、ビット位置が変更された固定小数点数データであり、例えば、ディープニューラルネットワークの学習の途中データである。
また、圧縮伸長部72は、データメモリ218から読み出される圧縮された固定小数点数データを伸長し、伸長した固定小数点数データをDNNの学習に使用するためにレジスタ部20等に格納する。DNNの学習の途中データを圧縮してデータメモリ218に格納し、データメモリ218から読み出されるデータを伸長して元のデータに戻すことで、データメモリ218に対するデータ転送量を圧縮しない場合に比べて削減することができる。
これにより、レジスタ部20とデータメモリ218間でのデータ転送に掛かる時間を短縮することができる。したがって、DNNの学習において、メモリアクセス速度が演算速度に比べて低く、演算器に待ち時間が発生する場合にも、待ち時間を少なくすることができ、演算効率を向上して、学習時間を短縮することができる。例えば、DNNの学習においてメモリアクセス速度が演算速度に比べて著しく低い例として、データ配列の要素毎に演算を実行するレイヤ等がある。
さらに、圧縮伸長部72をデータメモリ218の近くに位置するメモリインタフェース70に設けることで、ベクトルユニット30から出力される演算結果データおよびスカラユニット40から出力される演算結果データの両方を圧縮することができる。また、圧縮部と伸長部とに分けることなく、圧縮伸長部72を演算処理装置100内に搭載することができる。この結果、データの圧縮および伸長に関係するデータ線等の配線領域を最小限にすることができ、演算処理装置100の回路規模を最小限にすることができる。
上位のコンピュータ(計算機)等または演算処理装置100は、統計情報格納部22に格納された統計情報に基づいて、複数の圧縮方式による演算結果データの圧縮後のデータ量を推定し、データ量が最小となる圧縮方式を決定する圧縮方式決定部を有してもよい。この場合、圧縮伸長部72は、圧縮方式決定部から指示される圧縮方式により、演算結果データを圧縮し、圧縮された演算結果データを伸長する。
図2は、図1の演算処理装置100が搭載されるサーバ200の一例を示す。演算処理装置100が搭載されるサーバ200は、DNNの学習を実行する情報処理装置または演算処理装置として機能する計算機である。
サーバ200は、演算処理装置100およびメインメモリ214が搭載されるアクセラレータボード210と、ホスト220と、ストレージ230とを有する。演算処理装置100とホスト220とは、PCIe(Peripheral Component Interconnect express)バス等の通信バスで相互に接続される。このため、演算処理装置100は、PCIeインタフェース(I/F)回路212を有し、ホスト220は、PCIeインタフェース(I/F)回路222を有する。
演算処理装置100は、マトリックス状に配置された複数の処理部PE(Processing Element)を有する。例えば、各処理部PEは、図1の整数演算器32、データ変換部34および統計取得部36と、各種レジスタとを有する演算ユニットである。または、図1の整数演算器42、データ変換部44および統計取得部46と、各種レジスタとを有する演算ユニットである。なお、処理部PEに搭載される回路要素は、上記に限定されない。
また、図示を省略するが、図2に示す演算処理装置100は、図1の命令制御部10、レジスタ部20、統計情報集約部50およびメモリインタフェース60、70を有する。メインメモリ214は、例えば、DRAM(Dynamic Random Access Memory)を含み、図1の命令メモリ216およびデータメモリ218に対応する。
ホスト220は、ホストCPU224とDRAM等のメモリ226とを有する。ホストCPU224は、PCIeインタフェース回路222を介して演算処理装置100に接続され、演算処理装置100を制御して演算処理装置100にDNNの学習を実行させる。
例えば、ホストCPU224は、メモリ226に展開された演算処理プログラムを実行することで、演算処理装置100にDNNの学習を実行させる。また、ホストCPU224は、演算処理プログラムを実行することで、演算結果データのデータ量を最小にする圧縮方式を推定する。
ホストCPU224は、階層的に設けられたメモリ226とストレージ230とに接続される。例えば、ストレージ230は、HDD(Hard Disk Drive)またはSSD(Solid State Drive)の少なくともいずれかを含む。そして、ホストCPU224は、DNNの学習において、ストレージ230に格納された学習データ232を使用して学習を実行する。
図3は、図2のサーバ200によるDNNの学習の概要を示す説明図である。図3に例示するDNNは、1層目の畳み込み層(Conv_1)およびプーリング層(Pool_1)と、2層目の畳み込み層(Conv_2)およびプーリング層(Pool_2)と、全結合層1(fc1)と、全結合層2(fc2)とを有する。
例えば、DNNの深層学習は、処理の単位であるミニバッチ毎に実行される。ミニバッチはバッチの一例である。図3では、ミニバッチは、学習対象の入力データの集合をk個に分割した分割データを各々使用して実行される。
まず、図2のホストCPU224は、ミニバッチを実行する前に、浮動小数点数データによる学習を試行し(例えば、ミニバッチ1回など)、学習に使用する重み等の各変数の初期の小数点位置を決定する。初期の小数点位置は、ユーザにより指定されてもよい。ホストCPU224は、初期の小数点位置をデータ変換部34、44に通知する。
そして、ホストCPU224は、各ミニバッチおいて、分割された入力データを使用してConv_1層からfc2層に向けてフォワード処理を実行する。また、ホストCPU224は、各ミニバッチにおいて、フォワード処理の結果と正解データとを使用してfc2層からConv_1層に向けてバックワード処理を実行する。そして、ホストCPU224は、例えば、勾配降下法を使用して重み等の変数を更新する。
図1の統計情報集約部50は、各ミニバッチにおいて、統計取得部36が取得した各層で使用する変数毎の最上位ビットの位置情報を集約し、統計情報格納部22に格納する。各層で使用するデータ(変数を含む)は、図1のデータメモリ218から読み出され、各層の計算で得られたデータは、データメモリ218に格納される。ミニバッチの学習中にデータのオーバーフローが発生した場合は、飽和処理が行われ、学習が続行される。
なお、最初のk回のミニバッチでは、図1の圧縮伸長部72は、データを圧縮することなくデータメモリ218に格納する。2巡目以降のk回のミニバッチでは、圧縮伸長部72は、ホストCPU224から指定された圧縮方式でデータを圧縮した後、データメモリ218に格納し、データメモリ218から読み出したデータを伸長する。
ホストCPU224は、k回のミニバッチの終了後、統計情報格納部22に格納された統計情報(最上位ビットの位置の分布を示す度数分布データ)を使用して、次のk回のミニバッチで使用する固定小数点数データの小数点位置を決定する。また、ホストCPU224は、k回のミニバッチの終了後、統計情報格納部22に格納された統計情報を使用して、次のk回のミニバッチで使用する圧縮方式を決定する。ホストCPU224は、決定した小数点位置をデータ変換部34、44に通知し、決定した圧縮方式を圧縮伸長部72に通知する。データ変換部34、44は、小数点位置を通知された小数点位置に更新する。圧縮伸長部72は、圧縮方式を通知された圧縮方式に更新する。
そして、3巡目以降、1つ前のk回のミニバッチで更新された小数点位置と更新された圧縮方式とを使用して、次のk回のミニバッチによる学習処理が繰り返し実行される。学習処理は、正解データとの差が予め設定された値以下になるまで繰り返される。
k回のミニバッチ毎に、統計情報格納部22に格納された統計情報を使用してデータメモリ218に格納するデータの圧縮方式を決定することで、DNNの学習時のデータメモリ218に対して読み書きされるデータの転送時間を削減することができる。換言すれば、統計情報格納部22に格納された統計情報を使用して、次のk回のミニバッチにおいてデータメモリ218に対して読み書きするデータの転送時間を最小にする圧縮方式を予測することができる。
図4は、図2のサーバ200による学習中に固定小数点数データの小数点位置を更新する一例を示す。すなわち、この実施形態では、動的固定小数点数データを使用して、DNNの学習が実行される。図4は、統計情報集約部50により集約され、統計情報格納部22に格納された統計情報により示されるデータの最上位ビットの分布の例を示している。
図4の左側は、分布が表現可能な領域に収まらない場合を示し、右側は、分布が表現可能な領域に収まる場合を示す。分布の横軸の数値は、最上位ビットのビット位置(2進数の桁位置)を示す。"15"は"215"を示し、"-3"は"2-3"を示す。なお、図4では、表現可能な領域が16ビットで示されるが、表現可能な領域は、8ビットでもよい。表現可能な領域は、整数演算器32、42の演算に使用する固定小数点数データのビット範囲の一例である。以下では、表現可能な領域は、ビット範囲とも称される。
図4の左側において、表現可能な領域の上限より上位側にビット値の最上位ビットがある固定小数点数データは、飽和処理が実行される(オーバーフロー)。一方、表現可能な領域の下限より下位側にビット値の最上位ビットがある固定小数点数データは、丸め処理が実行される(アンダーフロー)。ホストCPU224は、統計情報集約部50により取得された分布に基づいて、現在のビット精度(Q5.10)で表現される固定小数点数データの分布が上位側に偏っていると判定し、次の学習処理でのビット精度を(Q3.12)に決定する。
そして、ホストCPU224は、ビット精度(Q3.12)をデータ変換部34、44に通知する。例えば、ホストCPU224は、ビット精度により示される16ビットが分布の中心になるように、固定小数点数データの小数点位置を決定する。ここで、ビット精度(Q5.10)、(Q3.12)は、Qフォーマットでの固定小数点数データの表記を示している。
なお、ホストCPU224は、(オーバーフローしたデータ数)/(全体のデータ数)が所定の既定値より小さくなるように、小数点位置を更新してもよい。あるいは、ホストCPU224は、(アンダーフローしたデータ数)/(全体のデータ数)に応じて小数点位置を更新してもよく、オーバーフローしたデータ数とアンダーフローしたデータ数、またはそれらの比率に基づいて、小数点位置を更新してもよい。
一方、図4の右側において、分布が表現可能な領域に収まる場合、ホストCPU224は、例えば、分布の中心がビット精度により示される16ビットの中央になるように、小数点位置を決定する。図4に示す例では、ホストCPU224は、統計情報集約部50により取得された分布に基づいて、現在のビット精度(Q3.12)で表現される固定小数点数データの分布が上位側に偏っていると判定し、次の学習処理でのビット精度を(Q1.14)に決定する。
図5は、図1の演算処理装置100によるDNNの学習において、演算結果の多くが"0"になるレイヤでのデータの分布の一例を示す。図5に示す例は、全結合層において、積和演算により得られた複数の24ビットのデータacciを、8ビット固定小数点に変換する例が示される。8ビット固定小数点への変換は、図1のデータ変換部34(またはデータ変換部44)で実行される。
例えば、データ変換部34は、8ビット固定小数点のビット位置(Q-2.9)をホストCPU224から予め通知される。図5の左下は、統計情報集約部50により集計された積和演算結果の最上位ビットの分布の例が示される。表現可能な領域(Q-2.9)より下位のビットは、アンダーフロービットであり、データ変換部34により丸め処理される。
なお、図5の度数分布は、データacciの絶対値の分布を示している。このため、例えば、ビット位置の"-9"の度数は、2-8≦acc<2-7のデータ数と、-2-7≦acc<-2-8のデータ数の合計を示す。図6以降に示す度数分布についても、絶対値の分布である。
図5の右側は、各積和演算結果データのアンダーフロービットがデータ変換部34により丸め処理され、8ビット固定小数点に変換された後の最上位ビットの分布の例が示される。アンダーフローデータは確率的な丸め処理により多くは、切り下げにより"0"になり、一部は、切り上げにより"2-9"になる。このため、図5の右側の枠内の上側に示すように、変換後の(Q-2.9)でのデータ値(8ビットの値)の多くは"0"になり、"1"および"-1"も散在する。
図6は、図1の圧縮伸長部72で圧縮するデータの圧縮方式の一例を示す。図6に示す圧縮方式による圧縮後のデータは、フラグ列とデータ列とを含む。フラグ列は、各データ(8ビット)が"0"または"非0"のいずれであるかを示すフラグを含む。フラグの数は、圧縮前の元のデータ列のデータ数と同じである。各フラグは、1ビットであり、対応するデータが"非0"のとき"1"に設定され、対応するデータが"0"のとき"0"に設定される。
データ列は、符号ビット付きの8ビットの"非0"の演算結果データのみを含む。以下では、図6に示す圧縮方式は0スキップ圧縮方式と称される。0スキップ圧縮方式は、第1圧縮方式の一例である。なお、元のデータ列のサイズは、8ビットとデータ数の積である。図において、符号"*"は乗算を示す。
図1のホストCPU224は、統計情報集約部50により集約された統計情報(図6に度数分布で示される情報)に基づいて、0スキップ圧縮方式での圧縮データのデータ量を推定する。すなわち、ホストCPU224は、演算結果データの最上位ビットの位置の分布に基づいて、圧縮データのデータ量を推定することができる。
ホストCPU224は、ビット範囲(表現可能な領域)より上位ビット側の上位側範囲と、ビット範囲と、ビット範囲より下位ビット側の下位側範囲とのそれぞれについて、圧縮後のデータ量であるサブ圧縮データ量を推定する。そして、ホストCPU224は、3つのサブ圧縮データ量の総和を圧縮データ量とする。
ホストCPU224は、上位側範囲におけるサブ圧縮データ量を、上位側範囲の各ビット位置での度数とデータサイズ(8ビット)との積を足し込むことにより算出する。同様に、ホストCPU224は、ビット範囲におけるサブ圧縮データ量を、各ビット位置の度数の総和とデータサイズ(8ビット)との積を足し込むことにより算出する。
ホストCPU224は、下位側範囲におけるサブ圧縮データ量を、丸め処理により"1"または"-1"になるビット位置(桁位置)毎の確率と、各ビット位置の度数との積の総和により算出する。ここで、丸め処理により"1"または"-1"になるとは、ビット範囲へ丸め処理される切り上げを示す。
例えば、ホストCPU224は、2-10のビット位置では、50%以上100%未満の確率で"1"または"-1"になるため、100%の確率で"1"または"-1"になると推定する。100%の確率で切り上げられるため、ホストCPU224は、2-10のビット位置での圧縮データ量を、度数とデータサイズ(8ビット)との積により算出する。
ホストCPU224は、2-11のビット位置では、25%以上50%未満の確率で"1"または"-1"になるため、50%の確率で"1"または"-1"になると推定する。このため、ホストCPU224は、2-11のビット位置での圧縮データ量を、度数とデータサイズ(8ビット)と"0.5"との積により算出する。
ホストCPU224は、2-12のビット位置では、12.5%以上25%未満の確率で"1"または"-1"になるため、25%の確率で"1"または"-1"になると推定する。このため、ホストCPU224は、2-11のビット位置での圧縮データ量を、度数とデータサイズ(8ビット)と"0.25"との積により算出される。
ホストCPU224は、2-13以下のビット位置のデータ量も上記と同様に算出し、下位側範囲の演算結果データの全てのビット位置でのデータ量の総和を下位側範囲におけるサブ圧縮データ量とする。そして、ホストCPU224は、上位側範囲、ビット範囲および下位側範囲におけるサブ圧縮データ量の総和にフラグ列のサイズ(総データ数と1ビットとの積)を加えることで、0スキップ圧縮方式での圧縮データ量を算出する。0スキップ圧縮方式は、演算結果データにおける"0"の比率が高いほど、圧縮効率を高くすることができる。
図7は、図1の圧縮伸長部72で圧縮するデータの圧縮方式の別の例を示す説明図である。図6と同様の要素については、詳細な説明は省略する。図7に示す圧縮方式による圧縮後のデータは、フラグ列とデータ列とを含む。フラグ列は、各データ(8ビット)が"0"、"1"、"-1"のいずれであるか、"0"、"1"、"-1"のいずれでもないかを示すフラグを含む。フラグの数は、圧縮前の元のデータ列のデータ数と同じである。各フラグは、2ビットであり、対応するデータが"0"のとき"00"に設定され、対応するデータが"1"のとき"01"に設定される。また、各フラグは、対応するデータが"-1"のとき"10"に設定され、対応するデータが"0"、"1"、"-1"のいずれでもないとき"11"に設定される。
データ列は、"0"、"1"、"-1"のいずれでもない符号ビット付きの8ビットの演算結果データを含む。以下では、図7に示す圧縮方式は、01圧縮方式と称される。01圧縮方式は、第2圧縮方式の一例である。
ホストCPU224は、統計情報集約部50により集約された統計情報(図7に度数分布で示される情報)に基づいて、01圧縮方式での圧縮データのデータ量を推定する。すなわち、ホストCPU224は、演算結果データの最上位ビットの位置の分布に基づいて、圧縮データのデータ量を推定することができる。
ホストCPU224は、上位側範囲と、ビット範囲と、下位側範囲とのそれぞれについて、圧縮後のデータ量であるサブ圧縮データ量を推定する。そして、ホストCPU224は、3つのサブ圧縮データ量の総和を圧縮データ量とする。
ホストCPU224は、図6と同様に、上位側範囲におけるサブ圧縮データ量を、各ビット位置での度数とデータサイズ(8ビット)との積を足し込むことにより算出する。同様に、ホストCPU224は、ビット範囲におけるサブ圧縮データ量を、各ビット位置での度数とデータサイズ(8ビット)との積を足し込むことにより算出する。
図7では、"0"、"1"、"-1"のいずれかに丸められる下位側範囲のデータは、フラグ列のフラグにより表現される。このため、ホストCPU224は、下位側範囲におけるサブ圧縮データ量を"0"とする。そして、ホストCPU224は、上位側範囲およびビット範囲におけるサブ圧縮データ量の総和にフラグ列のサイズ(総データ数と2ビットとの積)を加えることで、01圧縮方式での圧縮データ量を算出する。01圧縮方式は、演算結果データにおける"0"、"1"、"-1"の比率が高いほど、圧縮効率を高くすることができる。
図8は、図1の圧縮伸長部72で圧縮するデータの圧縮方式のさらなる別の例を示す説明図である。図6と同様の要素については、詳細な説明は省略する。図8に示す圧縮方式による圧縮後のデータは、フラグ列とデータ列とを含む。フラグ列は、各演算結果データ(符号ビットを除くビット範囲内の7ビット)を表現するビット数が設定されるフラグを含む。換言すれば、各フラグは、各演算結果データのビット範囲内での最上位ビットまでのビット数を示す。
フラグの数は、圧縮前の元のデータ列のデータ数と同じである。ビット範囲(7ビット)で表現可能な"0"から"127(絶対値)"までデータのビット数が、各フラグにより示されるため、各フラグは、3ビットである。
データ列は、フラグで示されるビット数のデータと各データの符号ビットとのペアを含む。例えば、データ"93"は、"0"の符号ビットSと7ビットの"93"とで表される。データ"0"は、"0"の符号ビットSのみで表される。データ"-1"は、"1"の符号ビットSと1ビットの"1"とで表される。データ"1"は、"0"の符号ビットSと1ビットの"1"とで表される。データ"42"は、"0"の符号ビットSと6ビットの"42"とで表される。以下では、図8に示す圧縮方式は、可変長圧縮方式と称される。可変長圧縮方式は、第3圧縮方式の一例である。
ホストCPU224は、統計情報集約部50により集約された統計情報(図8に度数分布で示される情報)に基づいて、可変長圧縮方式での圧縮データのデータ量を推定する。すなわち、ホストCPU224は、演算結果データの最上位ビットの位置の分布に基づいて、圧縮データのデータ量を推定することができる。
ホストCPU224は、上位側範囲と、ビット範囲と、下位側範囲とのそれぞれについて、圧縮後のデータ量を推定する。そして、ホストCPU224は、3つのサブ圧縮データ量の総和を圧縮データ量とする。
ホストCPU224は、図6と同様に、上位側範囲におけるサブ圧縮データ量を、各ビット位置での度数とデータサイズ(8ビット)との積を足し込むことにより算出する。また、ホストCPU224は、ビット範囲におけるサブ圧縮データ量を、各ビット位置での度数と、データの桁数および符号ビットのビット数である符号ビット数(="1")の和との積を足し込むことにより算出する。
図8に示す度数分布において、データの桁数は、2-3のビット位置では、"7"になり、2-5のビット位置では、"5"になり、2-7のビット位置では、"3"になり、2-9のビット位置では、"1"になる。
ホストCPU224は、下位側範囲におけるサブ圧縮データ量を、各ビット位置において、丸め処理(切り上げ)により"1"または"-1"になる確率と、丸め処理(切り下げ)により"0"になる確率とに基づいて算出する。例えば、ホストCPU224は、"1"または"-1"になる確率の2倍と、"0"になる確率の1倍との和を、ビット位置毎に算出する。そして、ホストCPU224は、算出したビット位置毎の和と、各ビット位置での度数との積を足し込むことにより、下位側範囲におけるサブ圧縮データ量を算出する。
ここで、圧縮後のデータ列において、"1"または"-1"は符号ビットSを含めて2ビットで表現されるため、"1"または"-1"になる確率は2倍される。圧縮後のデータ列において、"0"は符号ビットSのみの1ビットで表現されるため、"0"になる確率は1倍される。可変長圧縮方式は、演算結果データにおける"0"、"1"、"-1"のいずれでもない値の比率が高いほど、圧縮効率を高くすることができる。
なお、図6から図9に示される圧縮方式は一例である。本実施形態で使用される圧縮方式は、上述した3つに限定されない。また、圧縮方式の種類は、2以上であればよい。
図9は、図2のサーバ200によるDNNの学習の一例を示す。例えば、図9に示す処理フローは、サーバ200のホストCPU224が演算処理プログラムを実行することで、実現される。すなわち、図9は、サーバ200が実行する演算処理方法の一例および演算処理プログラムの一例を示す。
なお、図9に示す処理フローは、FPGA(Field-Programmable Gate Array)等のハードウェアにより実現されてもよく、ハードウェアとソフトウェアを協働させることより実現されてもよい。
まず、ステップS100において、ホストCPU224は、小数点位置の初期値である初期小数点位置を決定する。ホストCPU224は、過去の実験値、実績値、あるいは、ユーザ指定により各変数の初期小数点位置を決定すればよい。
次に、ステップS200において、ホストCPU224は、ミニバッチの繰返し回数kを"0"に初期化する。また、ホストCPU224は、演算処理プログラム内で統計情報を格納する変数を初期化する。
次に、ステップS300において、ホストCPU224は、学習終了の条件を充足するか否かを判定する。ホストCPU224は、例えば、図3に示した全結合層(fc2)でのエラーが予め設定した基準値以下になった場合、または、学習回数が規定の回数に到達した場合、学習を終了する。学習終了の条件が充足されない場合、ホストCPU224は、次のミニバッチを実行するために、ステップS400を実行する。
ステップS400において、ホストCPU224は、演算処理装置100にミニバッチの学習を実行させ、各レイヤの各変数の統計情報を統計情報格納部22に累積させる。そして、ホストCPU224は、ミニバッチの学習の完了に基づいて繰り返し回数kを"1"増加し、ステップS500を実行する。
ステップS500において、ホストCPU224は、繰り返し回数kが固定小数点数データの小数点位置と圧縮方式との更新間隔に達したか否かを判定する。繰り返し回数kが更新間隔に達していない場合、ホストCPU224は、ステップS300の処理に戻り、回数kが更新間隔に達した場合、ステップS600を実行する。
ステップS600において、ホストCPU224は、ミニバッチの実行により統計情報格納部22に蓄積された統計情報を読み出す。そして、ホストCPU224は、読み出した統計情報に基づいて、図4で説明したように、各レイヤの各変数の小数点位置を更新する。また、ホストCPU224は、k回のミニバッチの実行毎に、次のk回のミニバッチで採用する圧縮方式(図6から図8で説明した圧縮方式のいずれか、または、無圧縮)を決定する。ホストCPU224は、繰り返し回数kを"0"に初期化し、統計情報を格納する統計情報格納部22等の記憶領域をリセットする。そして、ホストCPU224は、ステップS300の処理に戻る。
図10は、図9のステップS400で実行されるミニバッチの学習の一例を示す。図10に示す処理は、ホストCPU224による制御に基づいて、演算処理装置100により実行される。演算処理装置100は、ホストCPU224からの指示に基づいて、DNNの全て入力チャネルと全ての出力チャネルとの組み合わせにおいて、ステップS410、S420の処理を実行する。
ステップS410では、メモリインタフェース70は、データメモリ218からデータ(圧縮された演算結果データ)を読み出す。圧縮伸長部72は、データメモリ218から読み出されたデータを伸長し、レジスタ部20に転送する。例えば、メモリインタフェース70は、圧縮されたデータとともに、圧縮方式を示す方式情報をデータメモリ218から読み出す。そして、圧縮伸長部72は、データメモリ218から読み出された方式情報により示される圧縮方式に対応して、データを伸長する。次に、ステップS420では、整数演算器32(または42)は、レジスタ部20に格納されたデータを使用して積和演算を実行する。
次に、ステップS430において、データ変換部34(または44)は、積和演算により得られたデータの有効なビット範囲であるビット精度を変更し、表現可能な有効領域から外れるビット値の飽和処理と丸め処理とを実行する。例えば、データ変換部34(または44)は、レジスタ等に格納された演算結果データを使用して、ビット精度を変更する。
また、統計情報集約部50は、積和演算により得られ、統計取得部36(または46)で取得されたデータの統計情報(最上位ビットの位置を示す位置情報)を取得する。データ変換部34(または44)および統計取得部36(または46)による処理対象のデータは、全ての入力チャネルに対する出力チャネル毎の積和演算の結果データである。
次に、ステップS440において、メモリインタフェース70は、データ変換部34(または44)により有効なビット範囲が変更されたデータを、圧縮伸長部72を使用して圧縮する。例えば、圧縮伸長部72は、ホストCPU224から指示される圧縮方式を使用してデータを圧縮する。ホストCPU224は、前回のk回のミニバッチにより決定した圧縮方式を圧縮伸長部72に予め通知する。例えば、メモリインタフェース70は、圧縮されたデータを、圧縮方式を示す方式情報とともにデータメモリ218に書き込む。そして、ステップS410、S420による入力チャネル毎の積和演算処理と、ステップS430、S440による出力チャネル毎のデータ変換処理、統計情報取得処理およびデータ圧縮処理が、繰り返し実行される。
図11は、図9のステップS600で実行される圧縮方式の決定方法の一例を示す。図11に示す処理を実行するホストCPU224は、圧縮方式決定部の一例である。
まず、ステップS610において、ホストCPU224は、k回のミニバッチの学習での演算結果データ(無圧縮)のデータ量を初期のデータ量に設定し、初期の圧縮方式の候補として無圧縮を選択する。そして、ホストCPU224は、ステップS620、S630、S640の処理を実行することで、全ての圧縮方式による圧縮データ量を順次予測し、圧縮データ量が最も少ない圧縮方式を次のk回のミニバッチの学習で使用する圧縮方式に決定する。例えば、圧縮方式aは、図6から図8に示した0スキップ圧縮方式、01圧縮方式または可変長圧縮方式のいずれかである。
ステップS620において、ホストCPU224は、圧縮方式のいずれかを使用する場合の圧縮データ量を予測する。次に、ステップS630において、ホストCPU224は、ステップS620で予測した圧縮データ量がデータ量より小さいか否かを判定する。ここで、比較対象のデータ量は、初回の処理ループでは、ステップS610で設定された無圧縮時のデータ量であり、2巡目以降の処理ループでは、ステップS640で決定したデータ量である。ホストCPU224は、圧縮データ量がデータ量より小さい場合、ステップS640の処理を実行し、圧縮データ量がデータ量以上の場合、ステップS620に戻って、次の圧縮方式での圧縮データ量を予測する。
ステップS640において、ホストCPU224は、ステップS620で予測した圧縮データ量を、この後の処理ループでの比較対象のデータ量に設定する。また、ホストCPU224は、ステップS620で予測し圧縮方式aを圧縮方式の候補に設定する。そして、ホストCPU224は、全ての圧縮方式による圧縮データ量の予測を完了したのち、圧縮方式の候補として残っている圧縮方式を、次のk回のミニバッチで使用することを決定し、図11に示す処理を終了する。
ステップS620からステップS640を圧縮方式毎に繰り返し実行することで、全ての圧縮方式のうち、圧縮データ量が最小になる圧縮方式が選択される。なお、各圧縮方式での圧縮データ量が無圧縮時のデータ量以上の場合、ステップS640は一度も実行されず、圧縮方式の候補として無圧縮が選択される。固定の圧縮方式で演算結果データを圧縮する場合、圧縮効率の高低にかかわらず、演算結果データは常に圧縮される。この実施形態では、複数の圧縮方式と無圧縮とのいずれかを圧縮データ量に応じて選択できるため、無圧縮を含めて、データ量の少ない方式を選択することができる。すなわち、無圧縮より圧縮効率の低い圧縮方式が選択されることを抑止することができる。
図12は、図11のステップS620で実行される圧縮データ量の予測方法の一例を示す。図13は、図12の各領域の圧縮データ量を予測する場合の桁毎に算出される圧縮データ量の一例を示す。図12に示す処理は、ホストCPU224により圧縮方式毎に実行される。図12および図13において、桁dは、"-9"(2-9)、"-11"(2-11)等の最上位ビットのビット位置を示し、"x"は、"-9"(ビット範囲の最下位ビットの位置)を示す。
まず、ステップS622において、ホストCPU224は、k回のミニバッチの学習での演算結果データのデータ数とフラグのビット数との積を算出し、以降のデータ量を足し込む初期データ量として設定する。フラグのビット数は、図6の0スキップ圧縮方式では1ビットであり、図7の01圧縮方式では2ビットであり、図8の可変長圧縮方式では3ビットである。
ステップS624において、ホストCPU224は、最上位桁からx+7桁(=-2)までの各桁についてデータ量を算出して累計することで、上位側範囲のサブ圧縮データ量を推定する。ステップS624の処理は、0スキップ圧縮方式、01圧縮方式および可変長圧縮方式において共通である。ホストCPU224は、桁dでの度数(データ数)である統計情報(d)と8ビットとの積を、データ量として桁dを更新しながら順次足し込んでいく。
ステップS626において、ホストCPU224は、x+6桁(=-3)からx桁(=-9)までの各桁についてデータ量を算出し、ステップS624で累計したデータ量に足し込んでいく。ステップS626により、上位側範囲のサブ圧縮データ量とビット範囲のサブ圧縮データ量との和が推定される。
ホストCPU224は、0スキップ圧縮方式、01圧縮方式および可変長圧縮方式の各々において、桁dの度数である統計情報(d)とf(d,x)との積を、桁dを更新しながら順次足し込んでいく。f(d,x)は、0スキップ圧縮方式および01圧縮方式において共通であり、可変長圧縮方式では、0スキップ圧縮方式および01圧縮方式と異なる。
0スキップ圧縮方式および01圧縮方式では、f(d,x)は"8"に設定される。可変長圧縮方式では、f(d,x)は、"d-x+1+1"に設定される。"d-x+1+1"において、"d-x+1"は、データの桁数を示し、最後の"1"は、符号ビットを示す。このため、可変長圧縮方式では、例えば、f(d,x)は、桁d=-3では"8"に設定され、桁d=-5では"6"に設定され、桁d=-9では"2"に設定される。
ステップS628において、ホストCPU224は、x-1桁(=-10)から最下位桁までの各桁についてデータ量を算出し、ステップS626で累計したデータ量に足し込んでいく。ステップS628では、ホストCPU224は、0スキップ圧縮方式、01圧縮方式および可変長圧縮方式の各々において、桁dの度数である統計情報(d)とg(d,x)との積を、桁dを更新しながら順次足し込んでいく。但し、g(d,x)は、0スキップ圧縮方式、01圧縮方式および可変長圧縮方式においてそれぞれ異なる。
0スキップ圧縮方式では、g(d,x)は、"8*2^(d-x+1)"に設定される。符号"^"は、べき乗を示す。g(d,x)の"8"は、各データが8ビットであることを示し、"2^(d-x+1)"は、"1"または"-1"となるデータの確率を示す。確率は、図6に示したように、桁d=-10では"2^0=1(=100%)"に設定され、桁d=-11では"2^-1=0.5(=50%)"に設定され、桁d=-12では"2^-2=0.25(=25%)"に設定される。
01圧縮方式では、図7に示したように、下位側範囲のデータは、圧縮後のデータ列として存在しないため、g(d,x)は"0"に設定される。
可変長圧縮方式では、g(d,x)は、"2*2^(d-x+1)+1*(1-2^(d-x+1)"に設定される。先頭の"2"は、2ビットを示し、"2^(d-x+1)"は、"1"または"-1"となるデータの確率を示す。"1*(1-2^(d-x+1)"の先頭の"1"は、1ビットを示し、"(1-2^(d-x+1)"は、"0"となる確率を示す。
なお、ステップS624、S626、S628を処理する順序は任意である。また、ステップS624において上位側範囲のサブ圧縮データ量のみが累計され、ステップS626においてビット範囲のサブ圧縮データ量のみが累計され、ステップS628において下位側範囲のサブ圧縮データ量のみが累計されてもよい。そして、ステップS628の後、ステップS622で算出されたフラグ列のデータ量と、ステップS624、S626、S628のそれぞれで累計されたサブ圧縮データ量とが相互に加算されてもよい。
以上、この実施形態では、DNNの学習の途中データを圧縮してデータメモリ218に格納し、データメモリ218から読み出されるデータを伸長して元のデータに戻すことで、データメモリ218に対するデータ転送量を削減することができる。これにより、DNNの学習において、演算器に待ち時間を少なくすることができ、演算効率を向上して、学習時間を短縮することができる。すなわち、メモリに転送するディープニューラルネットワークの学習に使用するデータの圧縮効率を向上することで、学習時間を短縮することができる。
圧縮伸長部72をデータメモリ218の近くに位置するメモリインタフェース70に設けることで、ベクトルユニット30から出力される演算結果データおよびスカラユニット40から出力される演算結果データの両方を圧縮することができる。また、圧縮部と伸長部とに分けることなく、圧縮伸長部72を演算処理装置100内に搭載することができる。この結果、データの圧縮および伸長に関係するデータ線等の配線領域を最小限にすることができ、演算処理装置100の回路規模を最小限にすることができる。
所定量の学習毎に、統計情報格納部22に格納された統計情報を使用してデータメモリ218に格納するデータの圧縮方式を決定することで、次の所定量の学習でのデータメモリ218に対するデータの転送時間を最小にする圧縮方式を予測することができる。複数の圧縮方式と無圧縮とのいずれかを圧縮データ量に応じて選択できるため、無圧縮を含めて、データ量の少ない方式を選択することができる。すなわち、無圧縮より圧縮効率の低い圧縮方式が選択されることを抑止することができる。
複数の圧縮方式から圧縮データ量が最小になると予測される圧縮方式を選択できるため、k回のミニバッチ毎に変わる圧縮データの特性に合わせて、圧縮データ量が最小になると推定される最適な圧縮方式を次のk回のミニバッチで採用することができる。
例えば、0スキップ圧縮方式は、演算結果データにおける"0"の比率が高いほど、圧縮効率を高くすることができる。01圧縮方式は、演算結果データにおける"0"、"1"、"-1"の比率が高いほど、圧縮効率を高くすることができる。可変長圧縮方式は、演算結果データにおける"0"、"1"、"-1"のいずれでもない値の比率が高いほど、圧縮効率を高くすることができる。
圧縮伸長部72をメモリインタフェース70に搭載することで、複数の整数演算器32、42が設けられる場合にも、共通の圧縮伸長部72により、演算結果データの圧縮と伸長とを効率よく実行することができる。
図14は、別の実施形態における演算処理装置の一例を示す。図1と同様の要素は、同じ符号を付し、詳細な説明は省略する。図14に示す演算処理装置100Aは、図1に示す命令制御部10、ベクトルユニット30、スカラユニット40、メモリインタフェース70の代わりに、命令制御部10A、ベクトルユニット30A、スカラユニット40A、メモリインタフェース70Aを有する。
命令制御部10Aは、圧縮方式決定部12Aを有することを除き、図1の命令制御部10と同様の構成および機能を有する。ベクトルユニット30Aは、図1のデータ変換部34の代わりにデータ変換圧縮部34Aを有し、さらに、新たに伸長部38Aを有することを除き、図1のベクトルユニット30と同様の構成および機能を有する。
スカラユニット40Aは、図1のデータ変換部44の代わりにデータ変換圧縮部44Aを有し、新たに伸長部48Aを有することを除き、図1のスカラユニット40Aと同様の構成および機能を有する。メモリインタフェース70Aは、圧縮伸長部72を持たないことを除き、図1のメモリインタフェース70と同様の構成および機能を有する。
圧縮方式決定部12Aは、図11から図13に示した圧縮方式を決定する処理を、図2に示したサーバ200の代わりに実行する。このため、図9に示したホストCPU224が実行する処理のうち、ステップS600の圧縮方式を決定する処理は、圧縮方式決定部12Aにより実行される。
演算処理装置100Aが搭載されるサーバは、圧縮方式を決定する処理を実行しないことを除き、図2に示したサーバ200と同様の構成および機能を有する。すなわち、図2に示したサーバ200は、この実施形態では、演算処理装置100の代わりに演算処理装置100Aを有する。演算処理装置100Aは、図2と同様に、マトリックス状に配置された複数の処理部PEを有し、メインメモリ214に接続される。
なお、圧縮方式決定部12Aは、統計情報格納部22に格納された統計情報を参照可能であれば、演算処理装置100A内の他の場所に設けられてもよい。また、図14において、メモリインタフェース70Aの代わりに図1に示したメモリインタフェース70が設けられてもよい。この場合、伸長部38A、48Aは削除され、データ変換圧縮部34A、44Aの代わりに、図1に示したデータ変換部34、44が設けられる。さらに、図124において、圧縮方式決定部12Aが削除され、圧縮方式を決定する処理が、図2のサーバ200のホストCPU224により実行されてもよい。
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、DNNの学習の途中データを圧縮してデータメモリ218に対して読み書きすることで、データメモリ218に対するデータ転送量を削減することができ、DNNの学習時間を短縮することができる。すなわち、メモリに転送するディープニューラルネットワークの学習に使用するデータの圧縮効率を向上することで、学習時間を短縮することができる。
さらに、この実施形態では、演算処理装置100A内に圧縮方式決定部12Aを設けることで、演算処理装置100A内で圧縮方式を決定することができる。これにより、圧縮方式を決定するための演算処理装置100Aとホスト220(図2)との間での通信量および通信時間を、上述した実施形態に比べて削減することができ、DNNの学習時間をさらに短縮することができる。
10、10A 命令制御部
12A 圧縮方式決定部
20 レジスタ部
22 統計情報格納部
30、30A ベクトルユニット
32 整数演算器
34 データ変換部
34A データ変換圧縮部
36 統計取得部
38A 伸長部
40、40A スカラユニット
42 整数演算器
44 データ変換部
44A データ変換圧縮部
46 統計取得部
48A 伸長部
50 統計情報集約部
60、70、70A メモリインタフェース
72 圧縮伸長部
100、100A 演算処理装置
214 メインメモリ
200 サーバ
216 命令メモリ
210 アクセラレータボード
212 PCIeインタフェース回路
218 データメモリ
220 ホスト
222 PCIeインタフェース回路
224 ホストCPU
226 メモリ
230 ストレージ
232 学習データ
ACC スカラアキュムレータ
DEC 命令デコーダ
PC プログラムカウンタ
PE 処理部
SRF スカラレジスタファイル
VACC ベクトルアキュムレータ
VRF ベクトルレジスタファイル

Claims (11)

  1. ディープニューラルネットワークの学習を実行可能な演算処理装置であって、
    固定小数点数データの演算を実行する演算部と、
    前記演算部が実行する演算により得られる演算結果データの最上位ビットの分布を示す統計情報を取得する統計取得部と、
    前記統計取得部が取得した統計情報に基づいて、演算に使用する固定小数点数データのビット範囲を更新する更新部と、
    前記統計取得部が取得した統計情報に基づいて、複数の圧縮方式による前記演算結果データの圧縮後のデータ量を推定し、前記データ量が最小となる圧縮方式を決定する圧縮方式決定部と、
    前記圧縮方式決定部が決定した圧縮方式を使用して圧縮された前記演算結果データをメモリに転送するメモリインタフェースと、
    を有する演算処理装置。
  2. 前記統計取得部は、前記ディープニューラルネットワークの学習において、所定数のバッチの実行毎に前記統計情報を取得し、
    前記統計情報に基づいて前記圧縮方式決定部が決定した圧縮方式は、前記統計情報が前記所定数のバッチの次の所定数のバッチの固定小数点数データの演算結果データの圧縮に使用される
    請求項1に記載の演算処理装置。
  3. 前記メモリインタフェースは、前記演算結果データの圧縮に使用した圧縮方式を示す情報を前記圧縮された演算結果データとともに、前記メモリに転送する
    請求項1または請求項2に記載の演算処理装置。
  4. 前記圧縮方式決定部は、前記複数の圧縮方式により推定した前記演算結果データの圧縮後のデータ量が、圧縮前の前記演算結果データのデータ量以上の場合、無圧縮を圧縮方式として決定する
    請求項1ないし請求項3のいずれか1項に記載の演算処理装置。
  5. 前記圧縮方式決定部が決定した圧縮方式を使用して前記演算結果データを圧縮し、前記メモリから転送される圧縮された演算結果データを伸長する圧縮伸長部を有する
    請求項1ないし請求項4のいずれか1項に記載の演算処理装置。
  6. 前記圧縮伸長部は、前記メモリインタフェースに搭載される
    請求項5のいずれか1項に記載の演算処理装置。
  7. 前記複数の圧縮方式は、前記演算結果データの各々が前記ビット範囲において"0"または"非0"のいずれであるかを示すフラグを含むフラグ列と、"非0"の前記演算結果データのみを含むデータ列とを生成する第1圧縮方式を含み、
    前記圧縮方式決定部は、前記第1圧縮方式を使用して前記演算結果データの圧縮後のデータ量を推定する場合、
    前記ビット範囲と、前記ビット範囲の上位ビット側に外れる上位側範囲と、前記ビット範囲の下位ビット側に外れる下位側範囲とのそれぞれについて、前記演算結果データの圧縮後のサブ圧縮データ量を推定し、前記サブ圧縮データ量の総和を前記演算結果データの圧縮後のデータ量とし、
    前記下位側範囲におけるサブ圧縮データ量を、前記下位側範囲の各ビット位置での度数と丸め処理により切り上げられる確率との積に基づいて推定する
    請求項1ないし請求項6のいずれか1項に記載の演算処理装置。
  8. 前記複数の圧縮方式は、前記演算結果データの各々が前記ビット範囲において"0"、"1"、"-1"のいずれであるか、"0"、"1"、"-1"のいずれでもないかを示すフラグを含むフラグ列と、"0"、"1"、"-1"のいずれでもない前記演算結果データのみを含むデータ列とを生成する第2圧縮方式を含み、
    前記圧縮方式決定部は、前記第2圧縮方式を使用して前記演算結果データの圧縮後のデータ量を推定する場合、
    前記ビット範囲と、前記ビット範囲の上位ビット側に外れる上位側範囲と、前記ビット範囲の下位ビット側に外れる下位側範囲とのそれぞれについて、前記演算結果データの圧縮後のサブ圧縮データ量を推定し、前記サブ圧縮データ量の総和を前記演算結果データの圧縮後のデータ量とし、
    前記下位側範囲におけるサブ圧縮データ量を"0"と推定する
    請求項1ないし請求項6のいずれか1項に記載の演算処理装置。
  9. 前記複数の圧縮方式は、前記演算結果データの各々において前記ビット範囲での最上位ビットまでのビット数を示すフラグを含むフラグ列と、前記フラグで示される前記ビット数の前記演算結果データと符号ビットとを含むデータ列とを生成する第3圧縮方式を含み、
    前記圧縮方式決定部は、前記第3圧縮方式を使用して前記演算結果データの圧縮後のデータ量を推定する場合、
    前記ビット範囲と、前記ビット範囲の上位ビット側に外れる上位側範囲と、前記ビット範囲の下位ビット側に外れる下位側範囲とのそれぞれについて、前記演算結果データの圧縮後のサブ圧縮データ量を推定し、前記サブ圧縮データ量の総和を前記演算結果データの圧縮後のデータ量とし、
    前記ビット範囲におけるサブ圧縮データ量を、前記ビット範囲の各ビット位置での度数と、前記ビット数および符号ビット数の和との積に基づいて推定し、
    前記下位側範囲におけるサブ圧縮データ量を、前記下位側範囲の各ビット位置での度数と、丸め処理により切り上げられる確率の2倍および丸め処理により切り下げられる確率の和との積に基づいて推定する
    請求項1ないし請求項6のいずれか1項に記載の演算処理装置。
  10. ディープニューラルネットワークの学習を実行可能な演算処理装置による演算処理方法であって、
    固定小数点数データの演算を実行し、
    演算により得られる演算結果データの最上位ビットの分布の統計情報を取得し、
    取得した統計情報に基づいて、演算に使用する固定小数点数データのビット範囲を更新し、
    取得した統計情報に基づいて、複数の圧縮方式による前記演算結果データの圧縮後のデータ量を推定し、前記データ量が最小となる圧縮方式を決定し、
    決定した圧縮方式を使用して圧縮された前記演算結果データをメモリに転送する
    演算処理方法。
  11. ディープニューラルネットワークの学習を実行可能な演算処理装置が実行する演算処理プログラムであって、
    固定小数点数データの演算を実行し、
    演算により得られる演算結果データの最上位ビットの分布の統計情報を取得し、
    取得した統計情報に基づいて、演算に使用する固定小数点数データのビット範囲を更新し、
    取得した統計情報に基づいて、複数の圧縮方式による前記演算結果データの圧縮後のデータ量を推定し、前記データ量が最小となる圧縮方式を決定し、
    決定した圧縮方式を使用して圧縮された前記演算結果データをメモリに転送する
    処理を前記演算処理装置に実行させる演算処理プログラム。
JP2020207436A 2020-12-15 2020-12-15 演算処理装置、演算処理方法および演算処理プログラム Withdrawn JP2022094508A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2020207436A JP2022094508A (ja) 2020-12-15 2020-12-15 演算処理装置、演算処理方法および演算処理プログラム
EP21207651.7A EP4016281A1 (en) 2020-12-15 2021-11-10 Arithmetic processing device, arithmetic processing method, and arithmetic processing program
US17/526,010 US20220188077A1 (en) 2020-12-15 2021-11-15 Arithmetic processing device, arithmetic processing method, and storage medium
CN202111448493.1A CN114637489A (zh) 2020-12-15 2021-11-30 算术处理装置、算术处理方法和存储介质

Applications Claiming Priority (1)

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

Publications (1)

Publication Number Publication Date
JP2022094508A true JP2022094508A (ja) 2022-06-27

Family

ID=78598877

Family Applications (1)

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

Country Status (4)

Country Link
US (1) US20220188077A1 (ja)
EP (1) EP4016281A1 (ja)
JP (1) JP2022094508A (ja)
CN (1) CN114637489A (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6540725B2 (ja) 2017-01-30 2019-07-10 富士通株式会社 演算処理装置、方法、およびプログラム
US10795836B2 (en) 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
JP7056225B2 (ja) * 2018-02-26 2022-04-19 富士通株式会社 演算処理装置、情報処理装置、情報処理方法、およびプログラム
WO2020084723A1 (ja) 2018-10-24 2020-04-30 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP2020135549A (ja) * 2019-02-21 2020-08-31 富士通株式会社 演算処理装置、情報処理装置および演算処理方法

Also Published As

Publication number Publication date
US20220188077A1 (en) 2022-06-16
EP4016281A1 (en) 2022-06-22
CN114637489A (zh) 2022-06-17

Similar Documents

Publication Publication Date Title
US10810484B2 (en) Hardware accelerator for compressed GRU on FPGA
US20190339939A1 (en) Operation processing device, information processing device, and information processing method
US20230289060A1 (en) Arrangements for storing more data in memory when using a hierarchical memory structure
JP2019139338A (ja) 情報処理装置、情報処理方法、およびプログラム
EP4008057B1 (en) Lossless exponent and lossy mantissa weight compression for training deep neural networks
EP3769208B1 (en) Stochastic rounding logic
JP2000347832A (ja) 浮動小数点演算方式ならびに浮動小数点演算装置およびそれを備える半導体集積回路装置
JP2012113657A (ja) データ圧縮装置及びデータ復元装置及びデータ処理システム及びコンピュータプログラム及びデータ圧縮方法及びデータ復元方法
JP2020135549A (ja) 演算処理装置、情報処理装置および演算処理方法
US11551087B2 (en) Information processor, information processing method, and storage medium
WO2019171238A1 (en) Multiple precision integer multiplier by matrix-matrix multiplications using 16-bit floating point multiplier
EP4016281A1 (en) Arithmetic processing device, arithmetic processing method, and arithmetic processing program
CN111338600A (zh) 计算处理设备和控制计算处理设备的方法
US20230161555A1 (en) System and method performing floating-point operations
US20120280838A1 (en) Data compression device, data compression method, and program
CN112189216A (zh) 数据处理方法及设备
US20210216867A1 (en) Information processing apparatus, neural network computation program, and neural network computation method
US11175957B1 (en) Hardware accelerator for executing a computation task
CN112232499A (zh) 卷积神经网络加速器
KR20220018199A (ko) 희소성 데이터를 이용하는 연산 장치 및 그것의 동작 방법
JP4243277B2 (ja) データ処理装置
WO2023248309A1 (ja) データ処理装置、データ処理プログラム、及びデータ処理方法
CN112541583A (zh) 一种神经网络加速器
JP7371499B2 (ja) 演算処理装置、演算処理装置の制御方法及び演算処理プログラム
JP2021124849A (ja) 演算処理装置、演算処理装置の制御方法及び演算処理プログラム

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