(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024015679
(43)【公開日】2024-02-06
(54)【発明の名称】演算処理装置
(51)【国際特許分類】
G06F 17/16 20060101AFI20240130BHJP
G06N 3/063 20230101ALI20240130BHJP
【FI】
G06F17/16 K
G06N3/063
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022117909
(22)【出願日】2022-07-25
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成30年度、国立研究開発法人新エネルギー・産業技術総合開発機構「AIチップ開発加速のためのイノベーション推進事業/研究開発項目2:AIチップ開発を加速する共通基盤技術の開発」委託研究、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】301021533
【氏名又は名称】国立研究開発法人産業技術総合研究所
(72)【発明者】
【氏名】大内 真一
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB31
(57)【要約】
【課題】注意機構をベースとするネットワークモデルの計算を高速化できる演算処理装置を提供する。
【解決手段】演算処理装置10のM個の演算ユニット11それぞれの内部に、第1の行列aおよび第2の行列bのうち列ベクトルの組[a
m,b
m]をm番目の演算ユニットに1組記憶し、M個の演算ユニットを直列のネットワーク14で接続し、そのうちの任意の演算ユニットからN次元の列ベクトルb
mの配列データを送り出し、順次後段に隣接する演算ユニットに伝播し、第2の行列の各々の列ベクトルb
0,b
1,b
2,…,b
M-1と演算ユニット内部に蓄えたa
mとのドット積、すなわちM×M次元の第3の行列の配列の部分をなすM次元列ベクトルx
m=[a
m・b
0,a
m・b
1,a
m・b
2,…,a
m・b
M-1]
Tをm番目の演算ユニット内部で計算し、このM次元の列ベクトルx
mをm番目の演算ユニット内部に保存することによって行う。
【選択図】
図1
【特許請求の範囲】
【請求項1】
M個のN次元列ベクトルからなる、M×N次元の第1の行列a=[a0,a1,a2,…,aM-1]および第2の行列b=[b0,b1,b2,…,bM-1]に関して、該第1の行列と該第2の行列に属するすべての列ベクトルの組み合わせに関するドット積を要素に持つM個のM次元列ベクトルからなるM×M次元の第3の行列x=[x0,x1,x2,…,xM-1]を求める計算を、行列の積x=aTbによって求める際に、
演算処理装置の構成最小単位であるM個の演算ユニットそれぞれの内部に、前記第1の行列a=[a0,a1,a2,…,aM-1]および前記第2の行列b=[b0,b1,b2,…,bM-1]のうち列ベクトルの組[am,bm]をm番目の演算ユニットに1組記憶し、前記M個の演算ユニットを直列のネットワークで接続し、そのうちの任意の演算ユニットからN次元の列ベクトルbmの配列データを送り出し、順次後段に隣接する演算ユニットに伝播し、前記第2の行列の各々の列ベクトルb0,b1,b2,…,bM-1と演算ユニット内部に蓄えたamとのドット積、すなわちM×M次元の第3の行列の配列の部分をなすM次元列ベクトルxm=[am・b0,am・b1,am・b2,…,am・bM-1]Tをm番目の演算ユニット内部で計算し、このM次元の列ベクトルxmをm番目の演算ユニット内部に保存することによって行う、当該演算処理装置、ここで、am、bmおよびxmは配列として演算器内部に記憶される列ベクトルである。
【請求項2】
m番目の演算ユニット内部に蓄えられた前記第3の行列に属する列ベクトルx
mとあらかじめ蓄えられたM×N次元の第4の行列c=[c
0,c
1,c
2,…,c
M-1]とから行列の積y=[y
0,y
1,y
2,…,y
M-1]=cxによって生成される第5の行列のデータのうち、この部分をなし、m番目の演算ユニットに蓄える列ベクトルy
mすなわち
【数7】
を計算する際に、
前記演算ユニットを直列に接続した前記ネットワークを用い、各演算ユニット内部に蓄えられたN次元列ベクトルc
mの要素をc
m0, c
m1, c
m2, …,c
m(N-1)の順に前記ネットワーク上に送出し、前記N次元の列ベクトルy
mを計算し、それぞれのm番目の演算ユニット内部に保存する、請求項1に記載の演算処理装置。
【請求項3】
M×L次元行列を構成する列ベクトルd
m=[d
m0,d
m1,d
m2,…,d
m(L-1)]
Tに対してリニア層の計算をMチャネル分行う際に、N×L次元の係数行列UまたはN次元のバイアスベクトルVを外部から前記直列に接続したネットワークに順次入力して伝播させ、あらかじめ各m番目の演算ユニットに蓄えられた前記列ベクトルd
mとの間で、
【数8】
を計算し、m番目のN次元列ベクトルz
mを各々の演算ユニット内部に保存する、但しuおよびvは各々係数行列U、バイアスベクトルVの要素を表す、請求項1または2に記載の演算処理装置。
【請求項4】
アテンションのマルチヘッド化を行う際に、ヘッド数H分の前記ネットワークおよび前記M個の演算ユニットの組を有し、ヘッド分割する直前のリニア層の係数行列の行数をヘッド数Hで分割し、分割された区分行列を各々h番目のヘッド用通信路に順次入力し、共有された被演算ベクトルデータd
mとの間で、
【数9】
を計算することによってマルチヘッド化を行う、請求項1または2に記載の演算処理装置。
【請求項5】
演算処理装置は、前記アテンションのマルチヘッド化を行う際に、マルチヘッド化されたベクトルを結合するために、結合直後のリニア層の係数行列の列数をヘッド数Hで分割し、分割された区分行列を各々h番目のヘッド用通信路に順次入力し、ヘッド毎に分割された部分和を合算し所定の演算ユニット内部に格納する機能を有する、請求項4に記載の演算処理装置。
【請求項6】
順次前記ネットワークにデータを読み出すデータ読み出し用デイジーチェインとデータを前記演算ユニットに入力するためのデータ入力用デイジーチェインを基本構造とする前記ネットワークを有し、前記データ読み出し用デイジーチェインの出力を前記データ入力用デイジーチェインに結合し、読み出したデータが直列に前記演算器ユニットに順次入力する、請求項1または2に記載の演算処理装置。
【請求項7】
前記ネットワークに演算コードをデータとともに順次直列に伝播する、請求項6に記載の演算処理装置。
【請求項8】
ハードウェアを追加することなくマルチヘッド化された列ベクトルデータの処理を行うために、配列の授受と積和演算の累算をヘッド順に区切って順次行うことで、マルチヘッド処理を模擬する、請求項1または2に記載の演算処理装置。
【請求項9】
チャネル数ないしシーケンス数の異なる問題に対応できるように、前記ネットワークをチャネル数またはシーケンス数に合わせて分割し、前記データ読み出し用デイジーチェインと前記データ入力用デイジーチェインとを結合する回路要素を有する、請求項6に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は演算システムに係り、特に機械学習処理を効率的に行う演算処理装置に関する。
【背景技術】
【0002】
画像処理演算装置(GPU:Graphical Processing Unit)による汎用計算(GPGPU:General Purpose computing on GPU)によって、機械学習の速度は飛躍的に向上している。
【0003】
一方で、機械学習のネットワークモデルは、単純な畳み込み演算だけでなく、注意機構と呼ばれるベクトルの内積演算を用いるものに関しても、自動翻訳や画像処理など有用な応用が多数知られるようになってきている(例えば、特許文献1、非特許文献1、2参照。)。
【先行技術文献】
【特許文献】
【0004】
【非特許文献】
【0005】
【非特許文献1】A. Vaswani et al., “Attention is all you need”, 31st Conference on Neural Information Processing Systems (NIPS 2017), Long Beach, CA, USA, Dec. 4-9, 2017. https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
【非特許文献2】A. Dosovitskiy et al., “An image is worth 16x16 words: transformers for image recognition at scale”, The 9th International Conference on Learning Representations (ICLR 2021), Virtual Only, May 3-7, 2021. https://iclr.cc/virtual/2021/poster/3013
【発明の概要】
【発明が解決しようとする課題】
【0006】
画像処理演算装置は、一般的に多くの種類の行列演算を実行できるように汎用性が高くできており、その装置上で走らせるソフトウェアライブラリによって具体的な処理を行う構造となっている。この場合、汎用性のために、余分な消費電力を消費すること、ソフトウェア処理が入るために、速度が低下することが知られている。一方で、完全な専用回路を作ることは、他の計算を実行することができないという短所を生ずる。
【0007】
本発明の目的は、注意機構(以下、「アテンション」とも称する。)をベースとするネットワークモデルの計算を高速化できる演算処理装置を提供することである。
【課題を解決するための手段】
【0008】
本発明の一態様によれば、演算処理装置は、M個のN次元列ベクトルからなる、M×N次元の第1の行列a=[a0,a1,a2,…,aM-1]および第2の行列b=[b0,b1,b2,…,bM-1]に関して、その第1の行列とその第2の行列に属するすべての列ベクトルの組み合わせに関するドット積を要素に持つM個のM次元列ベクトルからなるM×M次元の第3の行列x=[x0,x1,x2,…,xM-1]を求める計算を、行列の積x=aTbによって求める際に、上記演算処理装置の構成最小単位であるM個の演算ユニットそれぞれの内部に、上記第1の行列a=[a0,a1,a2,…,aM-1]および上記第2の行列b=[b0,b1,b2,…,bM-1]のうち列ベクトルの組[am,bm]をm番目の演算ユニットに1組記憶し、上記M個の演算ユニットを直列のネットワークで接続し、そのうちの任意の演算ユニットからN次元の列ベクトルbmの配列データを送り出し、順次後段に隣接する演算ユニットに伝播し、上記第2の行列の各々の列ベクトルb0,b1,b2,…,bM-1と演算ユニット内部に蓄えたamとのドット積、すなわちM×M次元の第3の行列の配列の部分をなすM次元列ベクトルxm=[am・b0,am・b1,am・b2,…,am・bM-1]Tをm番目の演算ユニット内部で計算し、このM次元の列ベクトルxmをm番目の演算ユニット内部に保存することによって行う、当該演算処理装置、ここで、am、bmおよびxmは配列として演算器内部に記憶される列ベクトルである。
【0009】
演算処理装置は、上記一態様において、m番目の演算ユニット内部に蓄えられた上記第3の行列に属する列ベクトルx
mとあらかじめ蓄えられたM×N次元の第4の行列c=[c
0,c
1,c
2,…,c
M-1]とから行列の積y=[y
0,y
1,y
2,…,y
M-1]=cxによって生成される第5の行列のデータのうち、この部分をなし、m番目の演算ユニットに蓄える列ベクトルy
mすなわち
【数1】
を計算する際に、上記演算ユニットを直列に接続した上記ネットワークを用い、各演算ユニット内部に蓄えられたN次元列ベクトルc
mの要素をc
m0, c
m1, c
m2, …,c
m(N-1)の順に上記ネットワーク上に送出し、上記N次元の列ベクトルy
mを計算し、それぞれのm番目の演算ユニット内部に保存してもよい。
【0010】
演算処理装置は、上記各態様において、M×L次元行列を構成する列ベクトルd
m=[d
m0,d
m1,d
m2,…,d
m(L-1)]
Tに対してリニア層の計算をMチャネル分行う際に、N×L次元の係数行列UまたはN次元のバイアスベクトルVを外部から上記直列に接続したネットワークに順次入力して伝播させ、あらかじめ各m番目の演算ユニットに蓄えられた上記列ベクトルd
mとの間で、
【数2】
を計算し、m番目のN次元列ベクトルz
mを各々の演算ユニット内部に保存してもよい。但し、uおよびvは各々係数行列U、バイアスベクトルVの要素を表す。
【0011】
演算処理装置は、上記各態様において、アテンションのマルチヘッド化を行う際に、ヘッド数H分の上記ネットワークおよび上記M個の演算ユニットの組を有し、ヘッド分割する直前のリニア層の係数行列の行数をヘッド数Hで分割し、分割された区分行列を各々h番目のヘッド用通信路に順次入力し、共有された被演算ベクトルデータd
mとの間で、
【数3】
を計算することによってマルチヘッド化を行ってもよい。
【0012】
演算処理装置は、上記アテンションのマルチヘッド化を行う際に、マルチヘッド化されたベクトルを結合するために、結合直後のリニア層の係数行列の列数をヘッド数Hで分割し、分割された区分行列を各々h番目のヘッド用通信路に順次入力し、ヘッド毎に分割された部分和を合算し所定の演算ユニット内部に格納する機能を有してもよい。
【0013】
演算処理装置は、上記各態様において、順次上記ネットワークにデータを読み出すデータ読み出し用デイジーチェインとデータを上記演算ユニットに入力するためのデータ入力用デイジーチェインを基本構造とする上記ネットワークを有し、上記データ読み出し用デイジーチェインの出力を上記データ入力用デイジーチェインに結合し、読み出したデータが直列に上記演算器ユニットに順次入力するようにしてもよい。
【0014】
また、演算処理装置は、上記各態様において、上記ネットワークに演算コードをデータとともに順次直列に伝播するようにしてもよい。
【0015】
演算処理装置は、上記各態様において、ハードウェアを追加することなくマルチヘッド化された列ベクトルデータの処理を行うために、配列の授受と積和演算の累算をヘッド順に区切って順次行うことで、マルチヘッド処理を模擬するようにしてもよい。
【0016】
演算処理装置は、チャネル数ないしシーケンス数の異なる問題に対応できるように、上記ネットワークをチャネル数またはシーケンス数に合わせて分割し、上記データ読み出し用デイジーチェインと上記データ入力用デイジーチェインを結合する回路要素を有してもよい。
【発明の効果】
【0017】
上記態様によれば、行列の結合時に部分和を加算する処理を除き、ネットワークは相隣る演算要素のみにデータを送ることによってほぼすべての処理を可能である。したがって、相互無依存な高い並列性が実現されるため、注意機構をベースとするネットワークモデルの計算を高速化することが可能である。
【図面の簡単な説明】
【0018】
【
図1】本発明の一実施形態に係る演算処理装置の概要構成を示す図である。
【
図2】本発明の一実施形態においてドット積x
m=[a
m・b
0,a
m・b
1,a
m・b
2,…,a
m・b
M-1]
Tを求める動作の説明図である。
【
図3】本発明の一実施形態においてM個のM次元列ベクトルx
mからなるM×M次元行列と、M個のN次元列ベクトルから構成される行列c=[c
0,c
1,c
2,
…,c
(M-1)]の行列の積によってM個のN次元列ベクトルを求める動作の説明図である。
【
図4】本発明の一実施形態においてリニア層の処理を行う動作の説明図である。
【発明を実施するための形態】
【0019】
次に、本発明の実施形態について図面を参照して説明する。
【0020】
図1は、本発明の一実施形態に係る演算処理装置の概要構成を示す図である。
図1を参照するに、演算処理装置10は、複数の演算ユニット11を有する。複数の演算ユニット11は、右方向にデータを伝播する第1デイジーチェイン12と左方向にデータを伝播する第2デイジーチェイン13によってデータ交換を行うネットワーク14に接続されている。第1および第2デイジーチェイン12、13は、第1マルチプレクサ15によって結合されており、外部から第1デイジーチェイン12にデータを直接入力することも可能である。これらの構成要素の組を演算ユニットセット16と称する。
【0021】
演算処理装置10は、区分行列処理、すなわちマルチヘッド処理をH並列に行うために、独立にH組の演算ユニットセット16を有する。区分行列処理を終了ののち行列を結合する代わりに分割された行と列の内積を行う際にH分割された部分和を合算するための加算用ネットワーク18を第1および第2デイジーチェイン12、13と直交する形で配置する。なお、このために演算器実装のためのコストが高い場合には、別途CPU(Central Processing Unit)などにより処理をしてもよい。さらに、処理すべきベクトルの次元数に合わせて第1および第2デイジーチェイン12、13を分割し、データを適切に伝播するために第2マルチプレクサ19を有する。以下、本実施形態上で、ドット積やリニア層の計算を行う方法について説明する。
【0022】
図2は、本発明の一実施形態においてドット積の組x
m=[a
m・b
0,a
m・b
1,a
m・b
2,…,a
m・b
M-1]
Tを求める動作の説明図であり、最も基本的なドット積を実行するための計算方法を示したものである。
図2では、演算ユニットセット16について、一番先頭のシーケンス長を2の場合とMの場合を第2マルチプレクサ19によって切り換えられるようにする場合を例示する。シーケンス長がMの場合、
図2を
図1と合わせて参照するに、M×N次元行列である、第1の行列a=[a
0,a
1,a
2,…,a
M-1]および第2の行列b=[b
0,b
1,b
2,…,b
M-1]から行列の積a
Tbによって算出されるM個のM次元列ベクトルx
m=[a
m・b
0,a
m・b
1,a
m・b
2,…,a
m・b
M-1]
T,m=0,1,2,・・・,M-1を求めることを考える。演算処理装置10の演算ユニットセット16は、構成最小単位である演算ユニット11をM個有する。演算ユニット11のIDはm=0,1,2,…,M-1とする。1つの演算ユニット11は、内部にスクラッチパッドSRAM20を含み、ID番号mに対応するN次元の配列a
mおよびb
mを演算ユニット11の内部に記憶する。配列a
mおよびb
mは、列ベクトルである。
【0023】
この第1の行列aと第2の行列bから導かれる行列の積x=aTb、すなわちM個のM次元列ベクトルxm=[am・b0,am・b1,am・b2,…,am・bM-1]Tを計算する際には、演算ユニットセット16は、bmの要素を演算ユニット11から第2デイジーチェイン13に対して、b0=[b00,b01,b02,…,b0(N-1)]、b1=[b10,b11,b12,…,b1(N-1)]、b2=[b20,b21,b22,…,b2(N-1)]、…、bM-1=[b(M-1)0,b(M-1)1,b(M-1)2,…,b(M-1)(N-1)]のようにそれぞれの配列を連続に送出し、第1マルチプレクサ15によって第1デイジーチェイン12に移し替え、演算ユニット11のm=0から順にデータbmnを受け取り積和演算を実行する。この順で配列データbを創出することによって、積を連続して累算可能となる。結果のN次元列ベクトルxmのデータは再度スクラッチパッドSRAM20に格納する。一方、一番先頭のシーケンス長がM=2である場合、後続のm=2以降は、第2マルチプレクサ19によって第2デイジーチェイン13にショートカットされるように経路の選択をし、m=0,1を用いるシーケンス長2のシーケンスとは異なる、別のシーケンスを扱うことができるようにする。本演算は、例えばTransformerでは、クエリqとキーkのドット積アテンションに相当することは当業者に理解される。
【0024】
図3は、本発明の一実施形態においてM個のM次元列ベクトルx
mからなるM×M次元行列と、M個のN次元列ベクトルから構成される行列c=[c
0,c
1,c
2,
…,c
(M-1)]の行列の積によってM個のN次元列ベクトルを求める動作の説明図である。
図3では、演算ユニットセット16が、一番先頭のシーケンス長が2の場合を例示する。
図3を参照するに、
図2に示す方法で生成したM個のM次元列ベクトルを表す行列x=[x
0,x
1,x
2,…,x
M-1]と、M個のN次元配列の行列c=[c
0,c
1,c
2,
…,c
(M-1)]の行列の積によってM個のN次元列ベクトルを生成する計算方法を示したものである。すなわち、
【数4】
を実行する際には、演算ユニットセット16は、各演算ユニット11に蓄えられた配列の組cを
図2とは異なる順序c
00、c
10、c
20、…、c
(M-1)0、c
01、c
11、c
21、…c
(M-1)1、c
02、c
12、…、c
(M-1)(N-1)で各演算ユニット11から第2デイジーチェイン13によって読み出し、演算ユニット11のm=0から順にデータb
mnを受け積和演算を実行する。結果のN次元データy
mは再度スクラッチパッドSRAM20に格納する。本演算は、例えばTransformerでは、ドット積アテンションaによってvの加重出力計算y=avに相当することは当業者に理解される。ここで、説明の簡単のために区分行列処理すなわちマルチヘッド処理は仮定していない。
【0025】
図4は、本発明の一実施形態においてリニア層の処理を行う動作の説明図であり、
図1で示す構造中でリニア層の計算を行う方法を示したものである。
図4を参照するに、Mチャンネル分あるいはMシーケンス分のL次元ベクトルデータ、すなわちM個のL次元配列d
mlから下記の式で表すM個のN次元配列z
m
【数5】
を求める際には、演算ユニットセット16は、第1マルチプレクサ15を介して外部から右向きにデータを伝播する第1デイジーチェイン12から行列要素u
nl,v
nをu
00、u
01、u
02、…、u
0(L-1)、u
10、u
11、u
12、…u
1(L-1)、u
20、u
21、…、u
(N-1)(L-1)、v
0、v
1、v
2、…、v
(N-1)の順に入力し、演算ユニット11のm=0から順にデータu
nl,v
nを受け積和演算を実行する。結果のN次元データz
mは再度スクラッチパッドSRAM20に格納する。本演算は、例えばTransformerでは、任意のベクトルデータをリニア層によって、クエリq、キーk、バリューvの各ベクトルを生成することに対応する。ここで、説明の簡単のために区分行列処理は仮定していない。
【0026】
図2~
図4では、区分行列処理を行わない場合について述べた。区分行列処理を導入する場合には、
図1に示すように、ヘッド数H分の演算ユニットセット16を演算処理装置10上に持ち、ヘッド分割する直前のリニア層の係数行列の行数を分割し各ヘッド用通信路に順次入力し、共有された被演算ベクトルデータとの間で下記の式表される配列z
hm
【数6】
を計算することによってマルチヘッド化を行うことが可能である。ここで、リニア層の被演算ベクトルは、区分行列処理に係る演算ユニットに共通のコピーを設けることによって演算が可能になるほか、ヘッド分割方向で共有する通信路を設ける、あるいは区分行列処理に係るユニット共通の記憶領域を設けることによっても実現が可能である。
【0027】
また、マルチヘッド化された行列を結合する際には、結合した直後に演算を行うリニア層の係数行列を列方向に分割し各ヘッド用通信路に順次入力し、ヘッドに分割された部分和を
図1に示す加算用ネットワーク18によって合算し所定の演算ユニット内部に格納する機能によって実装可能である。
【0028】
命令を実行するために演算ユニット11に演算コードは、順次伝播させることにより実行可能であることから、ネットワーク14の第1デイジーチェイン12または/および第2デイジーチェイン13に沿って送信すればよい。
【0029】
図1ではヘッド数Hに応じて演算ユニット11を増加させたが、演算リソース数に限りがある場合には、スクラッチパッドSRAM20の記憶容量のみを増加させ、配列の授受と積和演算の累算をヘッド順に区切って順次行うことで、マルチヘッド処理を模擬することも可能である。
【0030】
また、
図2およびその説明で例示したように、チャネル数ないしシーケンス数の異なる問題に対応できるように、ネットワーク14を第2マルチプレクサ19によってチャネル数またはシーケンス数に合わせて分割し、データ読み出し用の第1デイジーチェイン12と入力用の第2デイジーチェイン13を短い各々の部分で結合することによって、短いシーケンスに対応した複数の演算処理経路を形成することが可能となる。
【符号の説明】
【0031】
10 演算処理装置
11 演算ユニット
12 第1デイジーチェイン
13 第2デイジーチェイン
14 ネットワーク
15 第1マルチプレクサ
16 演算ユニットセット
18 加算用ネットワーク
19 第2マルチプレクサ
20 スクラッチパッドSRAM