JP6888074B2 - チップ装置および関連製品 - Google Patents

チップ装置および関連製品 Download PDF

Info

Publication number
JP6888074B2
JP6888074B2 JP2019221534A JP2019221534A JP6888074B2 JP 6888074 B2 JP6888074 B2 JP 6888074B2 JP 2019221534 A JP2019221534 A JP 2019221534A JP 2019221534 A JP2019221534 A JP 2019221534A JP 6888074 B2 JP6888074 B2 JP 6888074B2
Authority
JP
Japan
Prior art keywords
circuit
convolution
data
basic
calculation
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.)
Active
Application number
JP2019221534A
Other languages
English (en)
Other versions
JP2020177641A (ja
Inventor
シャオリ リォウ
シャオリ リォウ
ティエンス チェン
ティエンス チェン
ビンルイ ワン
ビンルイ ワン
ヤオ ジャン
ヤオ ジャン
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.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp 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 Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to JP2019221534A priority Critical patent/JP6888074B2/ja
Publication of JP2020177641A publication Critical patent/JP2020177641A/ja
Application granted granted Critical
Publication of JP6888074B2 publication Critical patent/JP6888074B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Complex Calculations (AREA)

Description

本開示は、通信およびチップ技術の分野に関し、特にチップ装置および関連製品に関する。
人工ニューラルネットワーク(ANN)は、20世紀80年代以降の人工知能の分野における研究ホットスポットである。それは情報処理の観点から人間の脳ニューロンネットワークを抽象化し、単純なモデルを確立し、そして異なる接続方法に従って異なるネットワークを形成する。エンジニアリングおよび学界では、それはしばしばニューラルネットワークまたは類ニューラルネットワークと直接呼ばれる。ニューラルネットワークは、互いに接続された多数のノード(またはニューロン)からなる計算モデルである。既存のニューラルネットワークの計算は、CPU(Central Processing Unit,中央処理装置)またはGPU(Graphics Processing Unit,グラフィック処理装置)に基づいて実現され、このような計算は消費電力が大きく、計算時間が長い。
本開示の実施形態は、計算時間を短縮し、モジュールの電力消費を低減することができるニューラルネットワーク計算方法および関連製品を提供する。
第1の態様では、本開示の実施形態は、メインユニットと複数の基本ユニットとを備えるチップ装置において適用されるニューラルネットワークの計算方法を提供する。この方法は、以下のステップを含む。メインユニットは計算予定データブロックと演算コマンドとを取得し、演算コマンドに従って計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。メインユニットは配信データブロックを分割して複数の基本データブロックを得て、前記複数の基本データブロックを複数の基本ユニットに配信し、メインユニットはブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信する。メインユニットは演算結果を処理し、前記計算予定データブロックと演算コマンドとのコマンド結果を得る。
任意選択で、メインユニットはブロードキャストデータブロックを複数の基本ユニットにブロードキャストすることは、以下を含む。
前記メインユニットは、前記ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストする。
任意選択で、前記基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信することは、以下を含む。
基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して演算結果を得て、その演算結果をメインユニットに送信する。
任意選択で、前記演算結果は内積処理の結果であり、メインユニットは演算結果を処理し、前記計算予定データブロックと演算コマンドとのコマンド結果を得ることは、以下を含む。
前記メインユニットは前記演算結果を累算して累算結果を得て、その累算結果を配列し前記計算予定データブロックと演算コマンドとのコマンド結果とを得る。
任意選択で、前記メインユニットはブロードキャストデータブロックを複数の基本ユニットにブロードキャストすることは、以下を含む。
前記ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、その複数の部分ブロードキャストデータブロックを前記複数の基本ユニットに数回でブロードキャストする。
任意選択で、前記基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信することは、以下を含む。
前記基本ユニットは、前記部分ブロードキャストデータブロックおよび基本データブロックに対して内積処理を一回行い内積処理の結果を得て、その内積処理の結果を累算して部分演算結果を得て、その部分演算結果をメインユニットに送信する。
任意選択で、前記基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信することは、以下を含む。
前記基本ユニットは、当該部分ブロードキャストデータブロックをn回繰り返し使用して当該部分ブロードキャストデータブロックおよびn個の基本データブロックの内積演算を行いn個の部分処理結果を得て、n個の部分処理結果を累算してn個の部分演算結果を得て、そのn個の部分演算結果をメインユニットに送信し、ここで、nは2以上の整数となる。
第2の態様では、メインユニットと複数の基本ユニットとを備えるチップ装置が提供される。前記基本ユニットは、計算予定データブロックと演算コマンドとを取得し、演算コマンドに従って計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。配信データブロックを分割して複数の基本データブロックを得て、複数の基本データブロックを複数の基本ユニットに配信し、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信する。メインユニットは、演算結果を処理して、計算予定データブロックと演算コマンドとのコマンド結果を得る。
任意選択で、チップ装置は、分岐ユニットをさらに備える。分岐ユニットは、メインユニットと基本ユニットとの間に配置される。分岐ユニットはデータを転送するために使用される。
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストするために使用される。
任意選択で、基本ユニットは具体的に、基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して演算結果を得て、その演算結果をメインユニットに送信するために使用される。
任意選択で、メインユニットは、演算結果が内積処理の結果である場合、演算結果を累算して累算結果を得て、累算結果を配列して計算予定データブロックと演算コマンドとのコマンド結果を得る。
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、複数の部分ブロードキャストデータブロックを複数の基本ユニットに数回でブロードキャストするために使用される。
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックおよび基本データブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して部分演算結果を得て、部分演算結果をメインユニットに送信するために使用される。
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックをn回繰り返し使用して部分ブロードキャストデータブロックおよびn個の基本データブロックの内積演算を行い、n個の部分処理結果を得て、n個の部分処理結果をそれぞれ累算した後、n個の部分演算結果を得て、n個の部分演算結果をメインユニットに送信するために使用され、ここで、nは2以上の整数である。
任意選択で、メインユニットは、メインレジスタまたはメインオンチップキャッシュ回路の1つまたは任意の組み合わせを備える。
基礎ユニットは、基本レジスタまたは基本オンチップキャッシュ回路の1つまたは任意の組み合わせを備える。
任意選択で、メインユニットは、ベクトル演算回路、算術論理演算回路、アキュムレータ回路、マトリックス転置回路、直接メモリアクセス回路、またはデータ並べ替え回路のうちの1つまたは任意の組み合わせを備える。
任意選択で、ユニットは内積演算回路またはアキュムレータ回路などのうちの1つまたは任意の組合せを備える。
任意選択で、分岐ユニットは複数の分岐ユニットであり、メインユニットは複数の分岐ユニットにそれぞれ接続され、各分岐ユニットは少なくとも1つの基礎ユニットに接続される。
任意選択で、分岐ユニットは複数の分岐ユニットであり、複数の分岐ユニットは直列に接続されてからメインユニットに接続され、各分岐ユニットはそれぞれ少なくとも1つの基礎ユニットに接続される。
任意選択で、分岐ユニットは具体的に、メインユニットと基礎ユニットとの間のデータを転送するために使用される。
任意選択で、分岐ユニットは具体的に、メインユニットと基礎ユニットまたは他の分岐ユニットとの間のデータを転送するために使用される。
任意選択で、データは、ベクトル、マトリックス、三次元データブロック、四次元データブロック、およびn次元データブロックのうちの1つまたは任意の組み合わせである。
任意選択で、演算コマンドが乗算コマンドであれば、乗数データブロックがブロードキャストデータブロックであり、被乗数データブロックが配信データブロックであると確定される。
演算コマンドが畳み込みコマンドであれば、入力データブロックはブロードキャストデータブロックであり、畳み込みカーネルは配信データブロックであると確定される。
第3の態様では、第2の態様によって提供されるチップ装置の適用方法が提供される。当該チップ装置はマトリックスとマトリックスの乗算、マトリックスとベクトルの乗算、畳み込み演算、または完全接続演算のうちの1つまたは任意の組み合わせを行うために使用される。
第4の態様では、第2の態様によって提供されるチップ装置を集積するチップが提供される。
第5の態様では、第6の態様によって提供されるチップを備えるスマートデバイスが提供される。
本開示の実施形態を実施すると、以下の有益な効果が得られる。
わかるように、本開示の実施形態によれば、データと演算コマンドを受信した後、データは配信データとブロードキャストデータに分割され、配信データは基本データブロックに分割されてから、複数の基本ユニットに配信されて内積演算が行われる。このように、演算量が最も多い内積演算を複数の基本ユニットに分散して同時に行うので、演算時間が短縮され、消費電力が節約されるという利点がある。
本開示の実施形態における技術案をより明確に例示するために、実施形態の説明に使用される図面を以下に簡単に説明する。以下の説明における図面は、本開示のいくつかの実施形態であることは明らかであり、当業者にとっては、これらの図面に基づいて他の図面を創造的な仕事をすることなく得ることもできる。
図1aは、本開示によって提供されるチップ装置の概略構造図である。 図1bは、本開示によって提供される別のチップ装置の概略構造図である。 図1cは、本開示によって提供されるチップ装置のデータ配信の概略図である。 図1dは、チップ装置のデータ返しの概略図である。 図2は、本開示の実施形態によって提供されるニューラルネットワークの計算方法の概略フローチャートである。 図2aは、本開示の実施形態によって提供されるマトリックスAにマトリックスBをかける概略図である。 図3は、本開示の実施形態によって提供されるニューラルネットワークの計算方法の概略フローチャート図である。 図3aは、完全接続1の単一サンプルデータの概略図である。 図3bは、完全接続2のマルチサンプルデータの概略図である。 図3cは、畳み込み1のM個の畳み込みカーネルデータの概略図である。 図3dは、畳み込み2入力データの概略図である。 図3eは、入力データの3次元データブロックの演算ウィンドウの概略図である。 図3fは、入力データの三次元データブロックの別の演算ウィンドウの概略図である。 図3gは、入力データの三次元データブロックのさらに別の演算ウィンドウの概略図である。
本開示の実施形態における技術案は、本開示の実施形態における添付の図面を参照して以下に明確かつ完全に説明されるが、記載された実施形態は本開示の実施形態の一部であり全ての実施形態ではない。本開示の実施形態に基づいて、当業者が創造的な仕事をすることなくて得られる他のすべての実施形態は、本開示の範囲に属する。
本開示の明細書、特許請求の範囲および図面に記載の「第1」、「第2」、「第3」、「第4」等の用語は、異なる対象を区別するためのものであり、特定の順序を説明するわけではない。さらに、用語「含む」、「備える」およびそれらの変形は、非排他的な包含をカバーすることを意図している。例えば、一連のステップまたはユニットを含むプロセス、方法、システム、製品、または装置は、列挙されたステップまたはユニットに限定されず、任意選択で、列挙されていないステップまたはユニットも含む。或いは、任意選択で、これらのプロセス、方法、製品または機器に固有の他のステップユニットも含む。
本明細書での「実施形態」は、実施形態に関連して説明された特定の特徴、構造、または特性が本開示の少なくとも1つの実施形態に含まれてもよいことを意味する。本明細書の様々な箇所でのこの単語の出現は、必ずしも同じ実施形態を指しているわけではなく、他の実施形態と相互に排他的で独立なまたは代替的な実施形態ではない。当業者は、本明細書に記載の実施形態を他の実施形態と組み合わせることができることを明示的または黙示的に理解するであろう。
以下にCPUを例として、ニューラルネットワークの演算方法を説明する。ニューラルネットワークではマトリックスとマトリックスとの乗算が広く用いられているが、ここではマトリックスAとマトリックスBの乗算を例としてCPUにおける論理積演算を説明する。以下に示すように、マトリックスAとマトリックスBとの論理積の結果がCとなり、つまりC=A*Bであるとする。
Figure 0006888074
Figure 0006888074
したがって、CPUまたはGPUでは、一行ずつ計算する必要があり、1行目の計算を終えてから2行目の計算を行い、そして3行目の計算を行い、すべての行の計算を完成させるまで。ニューラルネットワークでは、数千行のデータの場合もあるため、計算時間が非常に長い。計算中、CPUは長時間稼働状態にあり、エネルギー消費量も多くなる。
図1bを参照する。図1bはチップ装置の概略構造図であり、図1bに示すように、チップ装置は、メインユニット回路、基本ユニット回路、および分岐ユニット回路を備える。メインユニット回路はレジスタおよび/またはオンチップキャッシュ回路を備える。メインユニットはさらにベクトル演算回路、ALU(Arithmetic and Logic Unit,算術論理ユニット)回路、アキュムレータ回路、マトリックス転置回路、およびDMA(Direct Memory Access,直接メモリアクセス)回路、データ並べ替え回路などのうちの1つまたは任意の組み合わせを備えてもよい。各基礎ユニットはベースレジスタおよび/またはベースオンチップキャッシュ回路を備えてもよい。各基礎ユニットはさらに内積演算回路、ベクトル演算回路、アキュムレータ回路などのうちの1つまたは任意の組み合わせを備えてもよい。前記回路は全て集積回路としてもよい。分岐ユニットが存在する場合、メインユニットは分岐ユニットに接続され、その分岐ユニットは基本ユニットに接続される。基本ユニットはデータブロック間での内積演算を行い、メインユニットは外部データを送受信し、そして外部データを分岐ユニットに配信する。分岐ユニットはメインユニットまたは基本ユニットのデータを送受信するために用いられる。メインユニットについては、接続されるユニットの数が限られているので、より多い基本ユニットのアクセスを実現するためにメインユニットと基本ユニットとの間に分岐ユニットを追加する必要があることで、複雑なデータブロックの計算を実現する。よって、図1bに示す構造は、複雑なデータの計算に適している。
分岐ユニットと基礎ユニットとの接続構造は任意でよく、図1bのH型構造に限定されない。任意選択で、メインユニットから基礎ユニットへは、ブロードキャストや配信の構成であり、基礎ユニットからメインユニットへは、収集(gather)の構成である。ブロードキャスト、配信および収集の定義は以下のとおりである。
メインユニットから基礎ユニットへのデータ伝送方法は以下を含んでもよい。
メインユニットは複数の分岐ユニットにそれぞれ接続され、各分岐ユニットは複数の基礎ユニットにそれぞれ接続されている。
メインユニットは1つの分岐ユニットに接続され、当該分岐ユニットは1つの分岐ユニットに接続され、以下同様であり、複数の分岐ユニットは直列に接続され、そして各分岐ユニットは複数の基礎ユニットに接続される。
メインユニットは複数の分岐ユニットにそれぞれ接続され、各分岐ユニットは複数の基礎ユニットと直列に接続される。
メインユニットは1つの分岐ユニットに接続され、当該分岐ユニットは1つの分岐ユニットに接続され、以下同様であり、複数の分岐ユニットは直列に接続され、そして各分岐ユニットは複数の基礎ユニットと直列に接続される。
データを配信するとき、メインユニットは一部または全部の基礎ユニットにデータを送信し、データを受信する各基礎ユニットによって受信されるデータは異なってもよい。
データをブロードキャストするとき、メインユニットは一部または全部の基礎ユニットにデータを送信し、データを受信する各基礎ユニットは同じデータを受信する。
データが収集されるとき、一部または全部の基礎ユニットがデータをメインユニットに送信する。注意すべきことは、図1aまたは図1bに示されるチップ装置は独立の物理的チップであってもよいが、もちろん実際の応用では、当該チップ装置は他のチップ(例えばCPU、GPU)に集積されてもよい。本発明の実施形態は、上記のチップ装置の物理的表現を限定しない。
図1cを参照する。図1cは、チップ装置のデータ配信の概略図である。図1cの矢印で示すように、矢印はデータ配信方向であり。図1cに示すように、メインユニットが外部データを受信した後、外部データを分割してから、複数の分岐ユニットに配信し、分岐ユニットは分割データをメインユニットに送信する。
図1dを参照する。図1dは、チップ装置のデータ返しの概略図である。図1dの矢印で示すように、矢印はデータ返し方向である。図1dに示すように、基本ユニットはデータ(例えば内積計算結果)を分岐ユニットに返して、分岐ユニットはメインユニットに返す。
図1aを参照する。図1aは別のチップ装置の概略構造図である。チップ装置はメインユニットと基本ユニットを備え、当該メインユニットは基本ユニットに接続されている。図1aに示される構造は、基本ユニットがメインユニットに直接物理的に接続されているので、当該構造は接続する基本ユニットの数は制限され、簡単なデータ計算に適している。
図2を参照する。図2は、上記のチップ装置を使用してニューラルネットワークの計算方法を提供する。当該方法は、図1aまたは図1bに示すようなチップ装置を使用して実行される。当該方法は図2に示すように、以下のステップを含む。
ステップS201で、チップ装置のメインユニットは、計算予定データブロックと演算コマンドとを取得する。
上記ステップS201における計算予定データブロックは、具体的に、マトリックス、ベクトル、3次元データ、4次元データ、多次元データ等であってもよく、本開示は前述のデータブロックの具体的な表現を、特に限定しない。演算コマンドは、具体的に、乗算コマンド、畳み込みコマンド、加算コマンド、減算コマンド、BLAS(英語:Basic Linear Algebra Subprograms、基本線形代数サブプログラム)関数または活性化関数等であってもよい。
ステップS202で、メインユニットは、演算コマンドに応じて、計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。
前述のステップS202の実施方法は、具体的には以下の通りである。
当該演算コマンドが乗算コマンドであれば、乗数データブロックはブロードキャストデータブロックであり、被乗数データブロックは配信データブロックであると確定される。
演算コマンドが畳み込みコマンドであれば、入力データブロックはブロードキャストデータブロックであり、畳み込みカーネルは配信データブロックであると確定される。
ステップS2031で、メインユニットは、配信データブロックを分割処理して複数の基本データブロックを得て、当該複数の基本データブロックを複数の基本ユニットに配信する。
ステップS2032において、メインユニットは、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。
任意選択で、前述のステップS2031およびステップS2032は繰り返して実行されても良い。データ量が比較的多い場合、メインユニットは配信データブロックを分割して複数の基本データブロックを得て、各基本データブロックをm個の基本データサブブロックに分割し、ブロードキャストデータブロックもm個のブロードキャストデータサブブロックに分割する。メインユニットは毎回1つの基本データサブブロックを配信し、1つのブロードキャストデータサブブロックをブロードキャストする。当該基本データサブブロックおよびブロードキャストデータサブブロックは、並列ニューラルネットワーク計算の実行可能なデータブロックである。例えば、1000*1000のマトリックスAに1000*1000のマトリックスBをかけるのを例にとると、基本データブロックはマトリックスAのz行目のデータであり、基本データサブブロックはマトリックスAのz行目のデータの最初の20列のデータであり、ブロードキャストデータサブブロックは、マトリックスBのz行目の列の最初の20行のデータであってもよい。
上記ステップS203における基本データブロックは、具体的に内積演算が可能な最小データブロックであってもよい。マトリックス乗算を例にとると、基本データブロックはマトリックスの1行のデータであってもよい。例えば、畳み込み演算の場合、基本データブロックは畳み込みカーネルの重みであってもよい。
前述のステップS203における配信の方法については、以下の実施形態の説明を参照してもよく、ここで贅言しない。ブロードキャストデータブロックをブロードキャストする方法については、以下の実施形態の説明を参照してもよく、ここで贅言しない。
ステップS2041で、チップ装置の基本ユニットは、基本データブロックとブロードキャストデータブロックに対して内積演算を行い、演算結果(中間結果かもしれない)を得る。
ステップS2042で、演算結果が中間結果でなければ、演算結果をメインユニットに返す。
上記ステップS204における返し方式については、以下の実施形態の説明を参照してもよく、ここで贅言しない。
ステップS205で、メインユニットは、演算結果を処理して計算予定データブロックと演算コマンドとのコマンド結果とを得る。
上記ステップS205の処理方式は、累算、配列等でもよく、本開示は上記処理の具体的な方式に限定されなく、その具体的な方式は例えば非線形変換等を含み、異なる演算コマンドに応じて構成されてもよい。
本開示によって提供される技術案において、演算を行うとき、メインユニットは計算予定データブロックおよび演算コマンドを含む外部データを受信し、計算予定データブロックおよび演算コマンドを取得し、演算コマンドに従って計算予定データブロックの配信データブロックおよびブロードキャストデータブロックを確定し、配信データブロックを複数の基本データブロックに分割し、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストし、複数の基本データブロックを複数の基本ユニットに配信する。複数の基本ユニットはそれぞれ、基本データブロックとブロードキャストデータブロックとに対して内積演算を行い、演算結果を得る。複数の基本ユニットは、その演算結果をメインユニットに返し、メインユニットは、返された演算結果に従って演算コマンドのコマンド結果を得る。この技術案の技術的なポイントは以下にある。ニューラルネットワークに関して、大量の演算がデータブロックとデータブロックとの間の内積演算にあり、内積演算のオーバーヘッドが大きく、計算時間が長いので、本開示の実施形態は、当該演算コマンドと演算予定コマンドによって、まず計算予定データブロック内の配信データブロックとブロードキャストデータブロックを区別する。ブロードキャストデータブロックは、内積演算を行う際に使用しなければならないデータブロックであり、配信データブロックは、内積演算において分割可能なデータブロックである。マトリックス乗算を例にとると、例えば、計算予定データブロックはマトリックスAとマトリックスBであり、演算コマンドはマトリックス乗算コマンド(A*B)であり、マトリックス乗算において、被乗数マトリックスAは複数の基本データブロックに分割可能であり、乗数マトリックスBはブロードキャストであってもよいので、マトリックス乗算の規則に従って、マトリックスAは分割可能なデータブロックであり、マトリックスBはブロードキャストデータブロックであると確定される。マトリックス乗算の定義によれば、被乗数マトリックスAの各行のデータがそれぞれ乗数マトリックスBと内積演算を行う必要があるので、本出願の技術案ではマトリックスAをM個の基本データブロックに分割する。そのM個の基本データブロックでは、各基本データブロックが、マトリックスAの1行のデータであってもよい。そのため、マトリックス乗算では、時間のかかる演算時間を複数の基本ユニットによってそれぞれ行うため、内積演算では、複数の基本ユニットで結果を高速で並列に算出することができることで、計算時間を短縮される。より短い計算時間はまた、チップ装置の動作時間を短縮することができ、それによって消費電力を低減することができる。
本開示によって提供される技術案の効果が、実際的な例を通して以下に説明される。図2aに示すように、マトリックスAにベクトルBをかける概略図である。図2aに示すように、マトリックスAはM行、L列で、ベクトルBはL行である。演算器がマトリックスAの1行とベクトルBとの内積を算出するのに要する時間をt1とすると、CPUまたはGPUで計算する場合、1行の計算を終えた後に次の行を計算する必要があり、GPUまたはCPUで計算する方法では計算する時間T0=m*t1となる。本開示の実施形態によって提供される技術案によれば、M個の基本ユニットを有すると仮定すると、マトリックスAはM個の基本データブロックに分割され、各基本データブロックはマトリックスAの1行の行データであり、M個の基本ユニットが内積演算を同時に行う場合、計算時間はt1であり、本開示の実施形態によって提供される技術案を採用するのに必要な時間はT1=t1+t2+t3である。ここで、t2はメインユニットがデータを分割する時間で、t3は内積演算の演算結果を処理してコマンド結果を得るのに必要な時間である。データ分割および演算結果を処理する計算量が非常に小さいので、かかる時間が非常に短いので、T0>>T1である。よって、本開示の実施形態の技術案を採用するのは、計算時間を大幅に短縮することができる。同時に、演算予定データの電力消費について、T0>>T1により、本開示によって提供されるチップ装置は、その作業時間短い。チップ装置の作業時間が非常に短い場合、そのエネルギー消費量は長い作業時間よりもはるかに少ないと実験によって証明されたので、エネルギーを節約するという利点がある。
上記ステップS203において、メインユニットは、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストすることを実現する方法はたくさんある。具体的には以下の通りである。
方式A:ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストする。(ブロードキャストとは、「一対多数」のデータ送信、つまり、メインユニットが複数の(全部または一部の)基礎ユニットに同じデータブロックを同時に送信することを指す)。例えば、マトリックスA*マトリックスBにおいて、マトリックスBはブロードキャストデータブロックであり、マトリックスBを複数の基本ユニットに一回でブロードキャストする。別の例で、畳み込みでは、入力データはブロードキャストデータブロックであり、入力データブロックを一回で複数の基本ユニットにブロードキャストする。この方式の利点は、メインユニットと基本ユニットのデータ伝送量を節約できることである。つまり、すべてのブロードキャストデータを1回のブロードキャストで複数の基本ユニットに送信できる。
方法B:ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、複数の部分ブロードキャストデータブロックを複数の基本ユニットに例えば数回でブロードキャストする。例えば、マトリックスBは複数の基本ユニットに数回でブロードキャストされる。具体的に、毎回、マトリックスBのN列のデータをブロードキャストする。この方式の利点は、基本ユニットの構成を削減できることである。基本ユニットに配置されるレジスタの記憶容量が大きくない。データ量の大きいマトリックスBである場合、一回でマトリックスBを基本ユニットに配信すると、これらのデータを格納するために比較的大きなレジスタ容量が必要である。基本ユニット数が多いため、レジスタ容量を大きくすることが必然的にコストアップに大きな影響を与えるので、ここでブロードキャストデータブロックを数回でブロードキャストする方式を採用する。すなわち、基本ユニットは、毎回ブロードキャストされるブロードキャストデータブロックのデータの一部を格納するだけでよく、それによってコストが削減される。
説明したいことは、前述のステップS203において複数の基本データブロックを複数の基本ユニットに配信するのに、上述の方式Aまたは方式Bを採用してもよい。相違点は、その伝送方式がユニキャスト方式で、かつ伝送されるデータが基本データブロックであることだけである。
前述のステップS204の実施方法は、具体的には以下の通りである。
方式Aによってブロードキャストデータブロックをブロードキャストするおよび方式Aによって基本データブロックを配信する場合(図3aに示すように)、基本ユニットは基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い、内積処理の結果を得る。すなわち一回で1行の内積演算を行い、その内積処理の結果(演算結果の一つ)をメインユニットに送信し、メインユニットがその内積処理の結果を累算する。もちろん実際の応用では、基本ユニットが内積処理の結果を累算した後、累算結果(演算結果のもう一つ)をメインユニットに送信する。上記方法によれば、メインユニットと基本ユニットとの間のデータ伝送量を低減し、計算速度を向上させることができる。
方式Bのブロードキャストデータブロックが採用される場合、任意選択の技術案では、基本ユニットが部分ブロードキャストデータブロックを受信するたびに、基本ユニットは、基本データブロックと部分ブロードキャストデータブロックとの部分内積演算を行い、処理結果をメインユニットに送信し、メインユニットは処理結果を累算する。別の任意選択の案では、基本ユニットがn個の基本データブロックを受信する場合、ブロードキャストデータブロックを繰り返し使用し、当該ブロードキャストデータブロックとn個の基本データブロックの内積演算を行い、n個の部分処理結果を得る。基本ユニットは、そのn個の処理結果をメインユニットに送信し、メインユニットは、n個の処理結果をそれぞれ累算する。もちろん、上記の累算は基本ユニットでも行うことができる。
上記の場合、ブロードキャストデータブロックのデータ量は一般的に非常に大きく、かつ配信データブロックも大きい。チップ装置は、ハードウェアの構成に属するため、配置される基本ユニットの数は理論上で無限であるが、実際には、その数は限られており、一般的には数十個の基本ユニットである。技術の発展に伴い、例えば増えることで、その数は絶えず変化する可能性がある。しかし、ニューラルネットワークにおけるマトリックスとマトリックスの乗算では、マトリックスAの行数が数千行になり、マトリックスBの列数も数千列になるので、一回のブロードキャストデータでマトリックスBを基本ユニットに送信するのは実現できない。そして、毎回マトリックスBの一部のデータ、例えば最初の5列のデータをブロードキャストするという実現方法でもよい。マトリックスAについても同様の方法を採用してもよい。基本ユニットについては、毎回部分内積計算を行えばよく、そして、部分内積計算の結果をレジスタに格納し、その行の全ての内積演算が実行された後、その行の全ての内積演算の結果を累算して一種類の演算結果を得て、その演算結果をメインユニットに送信する。この方式は、計算速度を向上させる利点を有する。
図3を参照する。図3はニューラルネットワークの計算方法を提供する。この実施形態における計算は、マトリックスA*マトリックスBの計算方式によって説明されている。マトリックスA*マトリックスBは図3aに示すマトリックスの概略図であってもよい。説明の便宜上、図3に示したニューラルネットワークの計算方法は図1bに示したチップ装置で行われる。図1bに示すように、チップ装置は16個の基本ユニットを有する。ここでは説明と割り当ての便宜のために、Mの値は32、Nの値は15、Lの値は20になるように設定してもよい。当然のことながら、計算装置は、任意の数の基本ユニットを有してもよいことを理解されたい。この方法は図3に示すように、以下のステップを含む。
ステップS301において、メインユニットは、マトリックスA、マトリックスB、および乗法演算コマンドA*Bを受信する。
ステップS302において、メインユニットは、乗法演算コマンドA*Bに従って、マトリックスBがブロードキャストデータブロックであり、マトリックスAが配信データブロックであると確定し、マトリックスAを32個の基本データブロックに分割し、各基本データブロックがマトリックスAの1行のデータである。
ステップS303において、メインユニットは、32個の基本データブロックを均等に16個の基本ユニットに割り当て、32個の基本データブロックを均等に16個の基本ユニットに割り当てることは、各基本ユニットが2個の基本データブロックを受信することである。この2つのデータブロックの割り当て方法は、任意の繰り返さない割り当て順序にしてもよい。
上記ステップS303の割り当て方法は、他のいくつかの割り当て方法を採用してもよい。例えば、各基礎ユニットにデータブロックの数を均等に割り当てられない場合、データベースは各基礎ユニットに不均等に割り当てられてもよい。そのなかのいくつかの均等に割り当てられないデータブロックを分割してから、均等に割り当てるなどの方法でもよい。本開示の実施形態は、上記の基本データブロックが複数の基本ユニットに割り当てられる方法を限定しない。
ステップS304において、メインユニットは、マトリックスBの最初の数列(例えば最初の5列)の部分データを抽出し、マトリックスBの最初の5列の部分データを16個の基本ユニットにブロードキャストする。
ステップS305において、16個の基本ユニットは、最初の5列の部分データを繰り返し使用し2つの基本データブロックと内積演算および累積演算を行い、32*5個の前処理結果を得て、その32*5個の前処理結果をメインユニットに送信する。
ステップS306において、メインユニットは、マトリックスBの5列の部分データを抽出し、マトリックスBの5列の部分データを16個の基本ユニットにブロードキャストする。
ステップS307において、16個の基本ユニットは、中央の5列の部分データを繰り返し使用して2個の基本データブロックと内積演算および累積演算を行い、32*5個の中処理結果を得て、その32*5個の中処理結果をメインユニットに送信する。
ステップS308において、メインユニットは、マトリックスBの最後の5列の部分データを抽出し、マトリックスBの最後の5列の部分データを16個の基本ユニットにブロードキャストする。
ステップS309において、16個の基本ユニットは、最後の5列の部分データを繰り返し使用して2個の基本データブロックと内積演算および累積演算を行い、32*5個の後処理結果を得て、32*5個の後処理結果をメインユニットに送信する。
ステップS310、メインユニットは、32*5個の前処理結果、32*5個の中処理結果、および32*5個の後処理結果を前、中、後に準じて組み合わせて、32*15のマトリックスCを得る。このマトリックスCは、マトリックスA*マトリックスBのコマンド結果である。
図3に示す技術案は、マトリックスAを32個の基本データブロックに分割し、次にマトリックスBをバッチでブロードキャストするので、基本ユニットはコマンド結果をバッチで得ることができる。内積が16個の基本ユニットに分割されて計算されるので、計算
時間が大幅に短縮され、計算時間が短くエネルギー消費が少ないという利点がある。
図1aを参照する。図1aは、本開示により提供されるチップ装置であり、チップ装置は、メインユニットと基本ユニットとを備え、メインユニットはハードウェアチップ装置であり、基本ユニットもハードウェアチップ装置である。
メインユニットは、ニューラルネットワーク演算における各連続的演算、並びに基本ユニットとのデータ伝送を行うように用いられる。
基本ユニットは、メインユニットによって伝送されたデータに基づき、ニューラルネットワークにおける並列で加速される演算を行い、演算結果をメインユニットに送信するように用いられる。
上記の並列で加速される演算には、データブロックとデータブロックとの間の乗法演算、畳み込み演算などの大規模で並列化可能な演算が含まれるが、これらに限定されない。
上記の各連続的演算には、累積演算、マトリックス転置演算、データ配列演算などの連続的演算が含まれるが、これらに限定されない。
メインユニットと複数の基本ユニットについて、メインユニットは、計算予定データブロックおよび演算コマンドを取得し、演算コマンドに応じて、計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。配信データブロックを分割して複数の基本データブロックを得て、複数の基本データブロックを複数の基本ユニットに配信し、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。基本ユニットは、基本データブロックとブロードキャストデータブロックとに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信する。前記メインユニットは前記演算結果を処理し、計算予定データブロックと演算コマンドとのコマンド結果を得る。
任意選択で、チップ装置はさらに分岐ユニットを備え、当該分岐ユニットは、メインユニットと基本ユニットとの間に配置され、データを転送するように用いられる。
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストするように用いられる。
任意選択で、基本ユニットは具体的に、基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して演算結果を得て、その演算結果をメインユニットに送信するように用いられる。
任意選択で、メインユニットは、演算結果が内積処理の結果である場合、演算結果を累算して累算結果を得、累算結果を配列して計算予定データブロックと演算コマンドとのコマンド結果を得るように用いられる。
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、複数の部分ブロードキャストデータブロックを複数の基本ユニットに数回でブロードキャストするように用いられる。
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックおよび基本データブロックに対して内積処理を一回行い内積処理の結果を得て、内積処理の結果を累算して部分演算結果を得て、部分演算結果をメインユニットに送信するように用いられる。
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックをn回繰り返し使用して部分ブロードキャストデータブロックとn個の基本データブロックとの内積演算を行い、n個の部分処理結果を得て、n個の部分処理結果をそれぞれに累算した後、n個の部分演算結果を得て、n個の部分演算結果をメインユニットに送信するように用いられる。ここ、nは2以上の整数である。
本開示の実施形態は、図1aに示されるようなチップ装置の適用方法をさらに提供する。当該方法は具体的に、マトリックスとマトリックスの乗法演算、マトリックスとベクトルの乗法演算、畳み込み演算、または完全接続演算のうちの1つまたは任意の組み合わせを実行するように使用され得る。
具体的には、メインユニットは、pooling(プール化)演算、正則化(規格化)演算、例えばbatch normalization(バッチ正規化)、lrnなどのニューラルネットワーク演算ステップを行ってもよい。
本出願の実施形態はまた、図1aまたは図1bに示すようなチップ装置を備えるチップを提供する。
本願の実施形態は、上記のチップを備えるスマートデバイスをさらに提供し、当該チップには、図1aまたは図1bに示すようなチップ装置が集積されている。スマートデバイスは、スマートフォン、タブレットコンピュータ、パーソナルデジタルアシスタント、スマートウォッチ、スマートカメラ、スマートTV、スマート冷蔵庫などを含むが、これらに限定されない。上述のデバイスは例示の目的のためだけであり、本出願の実施形態は上記デバイスの特定の形に限定されない。
上記のマトリックスかけるマトリックスの演算は、図3に示す実施形態の説明を参照してもよく、ここでは贅言しない。
チップ装置を使用し完全接続演算を行う。
完全接続層の入力データが長さLのベクトル(例えば図3aに示す「完全接続1−単一サンプル」のベクトルB)であり(すなわち、ニューラルネットワークの入力が単一サンプルである)、完全接続層の出力が長さMのベクトルであり、完全接続層の重みがM*Lのマトリックス(例えば「図3b完全接続1-単一サンプル」のマトリックスA)である場合、完全接続層の重みマトリックスをマトリックスA(すなわち、分割データブロック)とし、入力データをベクトルB(すなわち、ブロードキャストデータブロック)として、図2に示す方法1に従って演算を行う。具体的な演算方法は次のとおりであってもよい。
完全接続層の入力データがマトリックスであり(すなわち、ニューラルネットワークの入力が複数のサンプルに対しバッチで演算を行う場合)(完全接続層の入力データがN個の入力サンプルを表し、各サンプルは長さLのベクトルであり、入力データはL*Nのマトリックスで表され、例えば「図3b完全接続1―複数のサンプル」のマトリックスBで表す)、各サンプルに対した完全接続層の出力は長さMのベクトルである場合、完全接続層の出力データは「図3a完全接続―1複数のサンプル」の結果マトリックスのようなM*Nのマトリックスであり、完全接続層の重みはM*Lのマトリックスであり(例えば「図3a完全接続―1複数のサンプル」のマトリックスA)、完全接続層の重みマトリックスをマトリックスA(すなわち分割データブロック)とし、入力データマトリックスをマトリックスB(すなわちブロードキャストデータブロック)とし、または完全接続層の重みマトリックスをマトリックスB(ブロードキャストデータブロック)とし、入力ベクトルをマトリックスA(分割データブロック)とし、上述した図2に示す方法1に従って演算する。
チップ装置
チップ装置を使用して人工ニューラルネットワーク演算を行う場合、ニューラルネットワークにおける畳み込み層、プール化層、および正規化層(規格化層とも呼ばれ、例えばBN(Batch normalization)またはLRN(Local Response Normalization))などの入力データは、「図3d畳み込み2−入力データ」に示されるように(明確に表すため、各サンプルを表す3次元データブロックは、例としてC=5、H=10、W=12を用いて説明されるが、実際の使用において、N、C、H、Wの大きさは図3dに示す値に限定されず)、図3dの各3次元データブロックは1つのサンプルがこの層の入力データに対応することを表す。各3次元データブロックの3つの次元はそれぞれC、H、Wで、そのような3次元データブロックはN個ある。
上記のニューラルネットワーク層の計算を行う際、メインユニットは入力データを受信した後、各入力データのサンプルに対して、メインユニットのデータ並べ替え回路を用いて、入力データをある順序で並べる。当該順序は任意の順序であってもよい。
任意選択で、当該順序は、例えばNHWCおよびNWHCなどのように、上記の概略図に表されるC次元座標の変化が最も速い方式で入力データを並べる。中には、Cがデータブロックの最内層の次元で、Nがデータブロックの最外層の次元で、HとWが中間層の次元である。こうする結果は、Cのデータが隣接しているので、演算の並列度を向上させることを容易にし、そして複数の特徴マップの並列演算を実行することをより容易にする。
以下は、C、H、およびWが異なるニューラルネットワーク演算に対してどのように理解されるかを説明する。畳み込みとプール化の場合、HとWは畳み込みとプール化の演算を行うときの関連する演算ウィンドウのスライドする次元である(演算ウィンドウがW次元においてスライドする例は例え図3eの「畳み込み3―スライドA」および図3fの「畳み込み3―スライドB」の2つの図に示され、演算ウィンドウがH次元においてスライドすることは例え図3gに示される)。演算ウィンドウのサイズとM個の畳み込みカーネルの1つの畳み込みカーネルのサイズとが一致する。図3cに示されるようなM個の畳み込みカーネルで、各畳み込みカーネルは5*3*3の三次元データブロックであり、その演算ウィンドウも5*3*3の三次元データブロックである。図3cに示されるM個の畳み込みカーネルのKHとKWは、KHに対応する次元が入力データのH次元であり、KWに対応する次元が入力データのW次元であることを示している。図3e、3f、3gの灰色部分のキューブは毎回演算ウィンドウをスライドして計算を行うのに使用されるデータである。そのスライド方向は、Hをスライド方向として、その後Wをスライド方向としてもよく、またはWをスライド方向とし、次いでHをスライド方向としてもよい。具体的に、畳み込みの場合、各スライディングウィンドウでの演算は、図の灰色部分のキューブで表されるデータブロックと「図3cの畳み込み1―畳み込みカーネル」で表されるM個の畳み込みカーネルデータブロックとに対してそれぞれ行われる内積演算である。畳み込みでは、各スライディングウィンドウ位置について各畳み込みカーネルに対応する値を出力する。プール化の場合、各スライディングウィンドウでの演算は、図の灰色のキューブで表されるデータブロックがH次元およびW次元において(図の例では、灰色のデータブロックのうち、同一平面上の9つの数値のうち)最大値を選択するか、平均値を計算するなどの演算である。プール化では、スライディングウィンドウの位置ごとにC個の値が出力される。Cは、単一サンプルの3次元データブロックにおいて、HとW以外の別の次元である。Nは、合計N個のサンプルでこの層の演算を同時に実行することを表す。正則化アルゴリズムのLRNでは、C次元の定義は以下の通りである。毎回の基本的LRN演算では、C次元に沿って1つの連続データブロック(すなわち、Y*1*1のデータブロック)選択される。ここで、Y*1*1のデータブロックのYがC次元における値であり、Yの値がC次元の最大値以下であり、1番目の1はH次元を表し、2番目の1はW次元を表す。残りの2つの次元はHおよびW次元と定義し、すなわち各サンプルの3次元データブロックのそれぞれについて、LRN正則化演算が実行されるたびに、同じW座標および同じH座標で異なるC座標における連続的一部のデータに対して演算を行う。正則化アルゴリズムBNの場合、N個のサンプルの3次元データブロック内の同じC次元の座標を持つすべての数値に対して平均値および分散(または標準偏差)を求める。
「図3c〜図3g」において、1つのキューブを使って1つの数値を表し、重みとも呼ばれる。概略図で使用される数字は、例に限定される。実際の場合、次元データは任意の数値であり得る(ある次元が1である場合も含み、その場合、4次元データブロックは自動的に3次元データブロックになる。例えば、同時に計算されるサンプル数が1の場合、入力データは3次元データブロックである。他の例で、畳み込みカーネルの数量が1の場合、畳み込みとデータは3次元データブロックとなる)。チップ装置を用いて入力データBと畳み込みカーネルAとの畳み込み演算を行う。
畳み込み層の場合、その重み(すべての畳み込みカーネル)は「図3c畳み込み1―畳み込みカーネル」に示すように、畳み込みカーネルの数はMで、各畳み込みカーネルはC個のKH行KW列のマトリックスから構成されるので、畳み込み層の重みは、4の次元がそれぞれM、C、KH、KWである4次元データブロックとして表すことができる。「図3d畳み込み2―入力データ」に示すように、畳み込み層の入力データは4次元データブロックで、N個の3次元データブロックからなり、各3次元データブロックは、C個のH行W列の特徴マトリックスから構成される(すなわち、4つの次元はそれぞれN、C、H、Wのデータブロックである)。メインユニットからK個の基礎ユニットのうちのある1個にM個の畳み込みカーネルうちのそれぞれの畳み込みカーネルの重みを配信し、基礎ユニットのオンチップキャッシュおよび/またはレジスタに格納する(この時点ではM個の畳み込みカーネルは配信データブロックであり、各畳み込みカーネルは基本データブロックであってもよいが、もちろん、実際の応用では、基本データブロックは、1つの畳み込みカーネルの1つの平面マトリックスのようなより小さな温度にも変更されてもよい)。具体的な配信方法は下記の通りであってもよい。畳み込みカーネルの数M≦Kの場合、1つの畳み込みカーネルの重みをM個の基礎ユニットにそれぞれ配信する。畳み込みカーネルの数M>Kの場合、1つまたは複数の畳み込みカーネルの重みを各基礎ユニットにそれぞれ配信する(i番目の基礎ユニットに配信される畳み込みカーネル重みセットはAiであり、合計Mi個の畳み込みカーネルを有する)。各基礎ユニットにおいて、例えばi番目の基本ユニットにおいて、受信された、メインユニットによって配信された畳み込みカーネル重みAiをそのレジスタおよび/またはオンチップキャッシュに格納し、入力データの各部分(すなわち図3e、図3fまたは3gに示されるようなスライディングウィンドウ)をブロードキャスト方式で各基礎ユニットに伝送し(上記のブロードキャストの方式は、前述の方式Aまたは方式Bを採用してもよい)、ブロードキャストする場合、数回のブロードキャストの方式で全ての基本ユニットに演算ウィンドウの重みをブロードキャストすることができ、具体的に、毎回一部の演算ウィンドウの重みをブロードキャストしてもよく、例えば毎回1つの平面のマトリックスをブロードキャストするが、図3eを例にとると、毎回C平面のKH*KWマトリックスをブロードキャストすることができ、もちろん実際の応用では、C平面のKH*HWマトリックスの最初のn行または最初のn列のデータを一回でブロードキャストすることができ、本開示は、上記の部分データの伝送方法および部分データの配列方式を限定しない。;入力データの並べ方は、任意の次元順序の並べ方に変換し、次に入力データの各部分を順序に従い順次でメインユニットにブロードキャストする。任意選択で、前述の配信データである畳み込みカーネルの送信方式も、入力データの演算ウィンドウと類似的方法送信方式を採用してもよく、ここでは贅言しない。任意選択で、入力データの並べ方は、Cが最も内側のループに変換される。こうする結果は、Cのデータが隣接になるので、畳み込み演算の並列度を向上し、複数の特徴マップにおいて並列演算を実行することをより容易にする。任意選択で、入力データの並べ方を次元順序がNHWCまたはNWHCである並べ方に変換する。各基礎ユニット、例えばi番目の基礎ユニットが、重みAiにおける畳み込みカーネルと受信されたブロードキャストデータの対応部分(即ち、演算ウィンドウ)との内積を計算する。重みAiの対応部分のデータは、オンチップキャッシュから直接読み出し使用することができ、または繰り返し使用のために先ずレジスタに読み取ることができる。各基礎ユニットの内積演算の結果は累算され、そしてメインユニットに伝送し返される。基礎ユニットが毎回内積演算を実行して得た部分和をメインユニットに伝送し返されて累算する。毎回基礎ユニットが内積演算を行って得た部分和を、基礎ユニットのレジスタおよび/またはオンチップキャッシュに格納して、累算が終了後、メインユニットに返送される。各基本ユニットが内積演算を行って得た部分和を、場合によっては基礎ユニットのレジスタおよび/またはオンチップキャッシュへの部分および部分格納して累算し、場合によってはメインユニットに送信して累算し、累算が終了後、メインユニットに返送する。
チップ装置を用いたBLAS(英語:Basic Linear Algebra Subprograms、基本線形代数サブプログラム)関数の実現方法
GEMM、GEMM計算は、BLASライブラリー内のマトリックス - マトリックス
乗算の演算を指す。この演算の通常の表現は次のとおりである。C=alpha*op(A)*op(B)+beta*C。ここでAとBは入力の2つのマトリックス、Cは出力マトリックス、alphaとbetaはスカラー、opはマトリックスAまたはBに対するある操作を表する。さらに、マトリックスAおよびBの幅と高さを説明するためのパラメータとして、いくつかの補助となる整数がある。
当該装置を使用してGEMM計算を実現するステップは次のとおりである。
入力マトリックスAおよびマトリックスBにそれぞれのop操作を行う。op操作は
、マトリックスの転置操作であってもよいが、もちろん、非線形関数演算、プール化などの他の操作であってもよい。マトリックスop操作は、メインユニットのベクトル演算機能を使用して実現される。あるマトリックスのopが空であってもよい場合、メインユニットはそのマトリックスに対していかなる操作も行わない。
op(A)とop(B)との間のマトリックス乗算は、図2に示す方法によって行われる。
メインユニットのベクトル演算機能を用いて、op(A)*op(B)の結果の中の各値にalphaをかける操作を行う。
メインユニットのベクトル演算機能を用いて、マトリックスalpha*op(A)*op(B)とbeta*Cとの対応する位置の加算ステップを実現する。
GEMV
GEMV計算は、BLASライブラリーにおけるマトリックス−ベクター乗算の演算を指す。この演算の通常の表現は次のとおりである。C=alpha*op(A)*B+beta*C。ここで、Aは入力マトリックス、Bは入力ベクトル、Cは出力ベクトル、alphaとbetaはスカラー、opはマトリックスAに対するある操作を表す。
前記装置を使用してGEMV計算を実現するステップは以下の通りである。
入力マトリックスAに対して対応するop操作を行う、チップ装置は、図2に示す方法を使用してマトリックスop(A)とベクトルBとの間のマトリックス−ベクトル乗算を完了させる。メインユニットのベクトル演算機能を用いて、op(A)*Bの結果の各値にalphaをかける操作を行う。メインユニットのベクトル演算機能を用いて、マトリックスalpha*op(A)*Bとbeta*Cとの間の対応する位置の加算ステップを実現する。
チップ装置を用いた活性化関数の実現方法
活性化関数は、通常、1つのデータブロック(ベクトルまたは多次元マトリックスであってもよい)のデータそれぞれに対して非線形演算を実行することを指す。たとえば、活性化関数はy=max(m,x)であってもよく、ここでxは入力値、yは出力値、mは1つの定数である。活性化関数はy=tanh(x)であってもよく、xは入力値、y=sigmoid(x)である。活性化関数は区分線形関数であってもよい。活性化関数は1つのデータを入力し、1つのデータを出力する任意の関数であってもよい。
活性化関数を実現する場合、チップ装置は、メインユニットのベクトル計算機能を用いて、ベクトルを入力し、ベクトルの活性化ベクトルを算出する。メインユニットは、入力ベクトルの各値に活性化関数を適用し(活性化関数の入力も1つの数値で、出力も1つの数値である)、1つの数値出力から出力ベクトルへの対応する位置を算出する。
上記入力ベクトルのソースは、チップ装置の外部データ、およびチップ装置の分岐ユニットによって転送された基本ユニットの計算結果データを含むが、これらに限定されない。
上記計算結果データは、具体的に、マトリックスにベクトルをかける演算結果であってもよい。上記計算結果データは、さらに具体的に、マトリックスにマトリックスをかける演算結果であってもよい。上記入力データは、メインユニットがオフセットを施すことを実現した後の演算結果であってもよい。
チップ装置を使用してオフセットを施す操作を実現
2つのベクトルまたは2つのマトリックスの加算機能を、メインユニットによって実現することができる。メインユニットによって、マトリックスの各行にベクトルを加える、または各列に加える機能を実現することができる。
任意選択で、上記マトリックスは、装置がマトリックスとマトリックスの乗法演算を実行する結果からのものでもよい。マトリックスは、装置がマトリックスにベクトルをかける演算を実行する結果からのものでもよい。マトリックスは、装置のメインユニットが外部から受信したデータでもよい。ベクトルは、装置のメインユニットが外部から受信したデータであってもよい。
なお、上記の入力データおよび計算結果データは例に過ぎなく、実際の応用では他の種類やソースからのデータも可能であり、本開示の実施形態は上記のデータのソースや表現方法を限定するものではない。
前述の方法の実施形態では、簡潔さのために、それらはすべて一連の動作の組み合わせとして説明されているが、当業者は、本開示が説明された動作シーケンスによって限定されないことを理解されたい。なぜなら、特定のステップは、本開示に従って他のシーケンスでまたは同時に実行され得るからである。さらに、当業者はまた、本明細書に記載されている実施形態は任意選択可能な実施形態であり、関連する動作およびモジュールは必ずしも本開示によって必要とされないことを理解されたい。
上記の実施形態では、様々な実施形態の説明がそれぞれの重点があり、ある実施形態で詳述されていない部分は、他の実施形態の関連する説明を参照してもよい。
本明細書で提供されるいくつかの実施形態では、開示された装置は他の方法でも実施され得ることを理解されたい。例えば、上述した装置の実施形態は単なる例示であり、例えば、ユニットの分割は論理的な機能の分割のみであり、実際に実施する場合、他の分割方法、例えば複数のユニット又は構成要素を組み合わせてもよく、別のシステムに集積するか、または一部の特徴を無視したり行わなくてもよい。さらに、図示または説明した相互カップリングまたは直接カップリングまたは通信可能な接続は、何らかのインターフェース、デバイスまたはユニットを介した間接カップリングまたは通信可能な接続でもよく、電気的またはその他の方式でもよい。
また、本開示の各実施形態における各機能ユニットは、1つの処理ユニットに集積されていても、物理的に別々に存在していても、2つ以上の装置が集積されていてもよい。上記の集積されたユニット/モジュールはハードウェアの形で実施される。例えば、ハードウェアは、デジタル回路、アナログ回路などを含む回路としてもよい。ハードウェア構造の物理的実現は、物理装置を含むが、これらに限定されなく、物理装置はトランジスタ、メモリスタなどを含むがこれらに限定されない。計算装置内の計算モジュールは、CPU、GPU、FPGA、DSP、ASICなどの任意の適切なハードウェアプロセッサとしてもよい。記憶装置は、RRAM(登録商標)、DRAM、SRAM、EDRAM、HBM、HMCなどの任意の適切な磁気記憶媒体または光磁気記憶媒体としてもよい。
説明されたユニットは、物理的に分離されていてもいなくてもよく、すなわち一箇所に配置されてもよく、または複数のネットワークユニットにわたって分散されてもよい。実施形態の解決策の目的を達成するために、実際の必要性に応じていくつかまたはすべてのユニットを選択してもよい。
以上、本開示の実施形態について詳細に説明したが、具体的な例を用いて本開示の原理および実施形態を本明細書に記載したが、実施形態の上記の説明は、本開示の方法およびその核となる概念の理解をサポートすることのみを目的とする。同時に、当業者であれば、本開示の概念によって、実施形態および本出願の応用範囲において変更することがある。まとめて、上記の明細書の内容は本開示を限定するものとして解釈されるべきではない。


Claims (15)

  1. 畳み込み演算方法であって、
    マスター回路およびk個のスレーブ回路を備えるチップ装置に適用される前記畳み込み演算方法は、
    前記マスター回路は、入力データと重みを受信し、重みを複数の基礎データブロックに分割し、複数の基礎データブロックを前記k個のスレーブ回路に配信し、前記スレーブ回路は、配信された基礎データブロックを格納するステップと、
    前記マスター回路は、入力データうちの各部分データを前記k個のスレーブ回路にブロードキャストし、前記k個のスレーブ回路は、各部分データブロックと前記配信された基礎データブロックとに対してそれぞれ演算を行い演算結果を得て、演算結果を前記マスター回路に送信するステップと、
    前記マスター回路は、k個のスレーブ回路のすべての演算結果に従って畳み込み演算の計算結果を得るステップとを含み、前記kはスレーブ回路の数であり、kの値の範囲は2以上の整数であ
    前記入力データおよび重みはともに4次元データブロックであり、前記入力データの4つの次元はN、H、W、Cであり、前記重みの4つの次元はM、C、KH、KWであり、
    前記Mの次元の値がmである場合、前記重みはm個の畳み込みカーネルを含み、前記マスター回路は重みを複数の基礎データブロックに分割するステップは具体的に、
    前記マスター回路は、前記m個の畳み込みカーネルをm個の基礎データブロックに分割するステップを含む、または、
    前記マスター回路はm個の畳み込みカーネルをm*c個の基礎データブロックに分割するステップを含み、前記cは前記重みがCの次元における値であり、cの値の範囲は1以上の整数である、
    ことを特徴とする畳み込み演算方法。
  2. 請求項に記載の方法であって、
    前記マスター回路は重みを複数の基礎データブロックに分割するステップは具体的に、
    m>kの場合、前記マスター回路はm個の畳み込みカーネルをm個の基礎データブロックに分割し、m個の基礎データブロックの1つ以上をk個のスレーブ回路に配信するステップと、
    m≦kの場合、前記マスター回路はm個の畳み込みカーネルをm個の基礎データブロックに分割し、m個の基礎データブロックの1つをk個のスレーブ回路に配信するステップとを含む、
    ことを特徴とする畳み込み演算方法。
  3. 請求項に記載の方法であって、
    前記マスター回路は、入力データの各部分データを前記k個のスレーブ回路にブロードキャストするステップは、
    前記マスター回路は、各部分データうちの1つの部分データとして入力データから前記基礎データブロックと同じサイズの入力データブロックを切り取り、入力データブロックを基本切り取り単位として、ステップサイズで入力データを切り取って各部分データを得て、各部分データうちの1つ以上の部分データをk個のスレーブ回路にブロードキャストするステップを、含む、
    ことを特徴とする畳み込み演算方法。
  4. 請求項に記載の方法であって、
    前記k個のスレーブ回路は、各部分データと前記配信された基礎データブロックとに対してそれぞれ演算を行い、演算結果を得て、前記マスター回路はk個のスレーブ回路のすべての演算結果に基づく、畳み込み演算の計算結果を得るステップは具体的に、
    前記k個のスレーブ回路のそれぞれは、1つの部分データの要素値と配信された基礎データブロックの対応する位置の要素値とに対して乗法積算を行い、複数の乗算結果を得て、前記複数の乗算結果をマスター回路に送信し、マスター回路は各スレーブ回路が送信した前記複数の乗算結果を累加して複数の畳み込み結果を得て、マスター回路は複数の畳み込み結果をソートして畳み込み演算の計算結果を得るステップを含む、または、
    前記k個のスレーブ回路のそれぞれは、1つの部分データの要素値と、配信された基礎データブロックの対応する位置の要素値とに対して乗算演算を行い、複数の乗算結果を得て、複数の乗算結果を累加して畳み込み結果を得て、畳み込み結果をマスター回路に送信し、マスター回路はすべての畳み込み結果をソートして、畳み込み演算の計算結果を得るステップを、含む、
    ことを特徴とする畳み込み演算方法。
  5. 請求項1または2に記載の方法であって、
    前記チップ装置は、分岐回路をさらに備え、前記分岐回路は、前記マスター回路と複数のスレーブ回路とを接続し、前記方法はさらに、
    前記分岐回路は、前記マスター回路と複数のスレーブ回路との間のデータを転送するステップを含む、
    ことを特徴とする畳み込み演算方法。
  6. 請求項1または2に記載の方法であって、
    前記マスター回路は、ベクトル演算回路、算術論理ユニット回路、アキュムレータ回路、マトリックス転置回路、直接メモリアクセス回路、または、データ並べ替え回路の1つまたは任意の組み合わせを含む、
    ことを特徴とする畳み込み演算方法。
  7. 請求項1または2に記載の方法であって、
    前記スレーブ回路は、内積演算回路またはアキュムレータ回路などの1つまたは任意の組み合わせを含む、
    ことを特徴とする畳み込み演算方法。
  8. マスター回路とk個のスレーブ回路とを備えるチップ装置であって、
    前記マスター回路は、入力データと重みを受信するように用いられ、重みを複数の基礎データブロックに分割し、複数の基礎データブロックを前記k個のスレーブ回路に配信し、入力データの各部分データを前記k個のスレーブ回路にブロードキャストし、
    前記スレーブ回路は、配信された基礎データブロックを格納し、各部分データおよび配信された基礎データブロックに対して演算を行い演算結果を得て、演算結果を前記マスター回路に送信し、
    前記マスター回路は、k個のスレーブ回路のすべての演算結果に従って、畳み込み演算の計算結果を得るように用いられ、前記kはスレーブ回路の数であり、kの値の範囲は2以上の整数であ
    前記入力データおよび重みはともに4次元データブロックであり、前記入力データの4つの次元はN、H、W、Cであり、前記重みの4つの次元はM、C、KH、KWであり、
    Mの次元における値はmである場合、前記重みはm個の畳み込みカーネルを含み、前記マスター回路は具体的に、前記m個の畳み込みカーネルをm個の基礎データブロックに分割するように用いられる、または、
    前記マスター回路は具体的に、m個の畳み込みカーネルをm*c個の基礎データブロックに分割するように用いられ、前記cは前記Cの次元における値であり、cの値の範囲は1以上の整数である、
    ことを特徴とするチップ装置。
  9. 請求項に記載のチップ装置であって、
    m>kの場合、前記マスター回路は具体的にm個の畳み込みカーネルをm個の基礎データブロックに分割し、m個の基礎データブロックの1つ以上をk個のスレーブ回路に配信し、
    m≦kの場合、前記マスター回路は具体的にm個の畳み込みカーネルをm個の基礎データブロックに分割し、m個の基礎データブロックの1つをk個のスレーブ回路に配信する、
    ことを特徴とするチップ装置。
  10. 請求項に記載のチップ装置であって、
    前記マスター回路は具体的に、各部分データうちの1つの部分データとして入力データから前記基礎データブロックと同じサイズの入力データブロックを切り取り、入力データブロックを基本切り取り単位として、ステップサイズで入力データを切り取って各部分データを得て、各部分データうちの1つ以上の部分データをk個のスレーブ回路にブロードキャストするように用いられる、
    ことを特徴とするチップ装置。
  11. 請求項10に記載のチップ装置であって、
    前記スレーブ回路は具体的に、1つの部分データの要素値と、配信された基礎データブロックの対応する位置の要素値とに対して乗算演算を行い、複数の乗算結果を得て、複数の乗算結果をマスター回路に送信するように用いられ、
    前記マスター回路は具体的に、各スレーブ回路が送信した前記複数の乗算結果を累加して複数の畳み込み結果を得て、マスター回路は複数の畳み込み結果をソートして畳み込み演算の計算結果を得るように用いられる、
    ことを特徴とするチップ装置。
  12. 請求項10に記載のチップ装置であって、
    前記スレーブ回路は具体的に、1つの部分データの要素値と、配信された基礎データブロックの対応する位置の要素値とに対して乗算演算を行い、複数の乗算結果を得て、複数の乗算結果を累加して畳み込み結果を得て、畳み込み結果をマスター回路に送信し、マスター回路はすべての畳み込み結果をソートして、畳み込み演算の計算結果を得るように用いられる、
    ことを特徴とするチップ装置。
  13. 請求項8または9に記載のチップ装置であって、
    前記チップ装置は分岐回路をさらに備え、前記分岐回路は前記マスター回路と複数のスレーブ回路とを接続し、
    前記分岐回路は、前記マスター回路と複数のスレーブ回路の間のデータを転送するように用いられる、
    ことを特徴とするチップ装置。
  14. 請求項8または9に記載のチップ装置であって、
    前記マスター回路は、ベクトル演算回路、算術論理ユニット回路、アキュムレータ回路、マトリックス転置回路、直接メモリアクセス回路、またはデータ並べ替え回路の1つまたは任意の組み合わせを含む、
    ことを特徴とするチップ装置。
  15. 請求項8または9に記載のチップ装置であって、
    前記スレーブ回路は、内積演算回路またはアキュムレータ回路などの1つまたは任意の組み合わせを含む、
    ことを特徴とするチップ装置。
JP2019221534A 2019-12-06 2019-12-06 チップ装置および関連製品 Active JP6888074B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019221534A JP6888074B2 (ja) 2019-12-06 2019-12-06 チップ装置および関連製品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019221534A JP6888074B2 (ja) 2019-12-06 2019-12-06 チップ装置および関連製品

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2019553977A Division JP7065877B2 (ja) 2017-08-31 2017-08-31 チップ装置および関連製品

Publications (2)

Publication Number Publication Date
JP2020177641A JP2020177641A (ja) 2020-10-29
JP6888074B2 true JP6888074B2 (ja) 2021-06-16

Family

ID=72937284

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019221534A Active JP6888074B2 (ja) 2019-12-06 2019-12-06 チップ装置および関連製品

Country Status (1)

Country Link
JP (1) JP6888074B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115470176B (zh) * 2021-06-10 2024-04-09 中科寒武纪科技股份有限公司 计算装置、利用计算装置实施卷积运算的方法及相关产品

Also Published As

Publication number Publication date
JP2020177641A (ja) 2020-10-29

Similar Documents

Publication Publication Date Title
JP7065877B2 (ja) チップ装置および関連製品
CN109615061B (zh) 一种卷积运算方法及装置
JP6888074B2 (ja) チップ装置および関連製品
JP6888073B2 (ja) チップ装置および関連製品
CN109615062B (zh) 一种卷积运算方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191206

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20191206

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20201023

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210203

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210511

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210519

R150 Certificate of patent or registration of utility model

Ref document number: 6888074

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250