(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-15
(45)【発行日】2023-08-23
(54)【発明の名称】データ処理方法、装置、記憶媒体及び電子機器
(51)【国際特許分類】
G06F 17/10 20060101AFI20230816BHJP
G06F 15/80 20060101ALI20230816BHJP
【FI】
G06F17/10 A
G06F15/80
(21)【出願番号】P 2021569505
(86)(22)【出願日】2020-04-20
(86)【国際出願番号】 CN2020085660
(87)【国際公開番号】W WO2020259031
(87)【国際公開日】2020-12-30
【審査請求日】2021-11-26
(31)【優先権主張番号】201910569119.3
(32)【優先日】2019-06-27
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】516010548
【氏名又は名称】セインチップス テクノロジー カンパニーリミテッド
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】王洪
(72)【発明者】
【氏名】徐科
(72)【発明者】
【氏名】魯国寧
(72)【発明者】
【氏名】甄徳根
(72)【発明者】
【氏名】孔徳輝
(72)【発明者】
【氏名】張暁
【審査官】坂東 博司
(56)【参考文献】
【文献】中国特許出願公開第106228238(CN,A)
【文献】中国特許出願公開第107392305(CN,A)
【文献】米国特許出願公開第2018/0082181(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06F 15/80
(57)【特許請求の範囲】
【請求項1】
全ての入力
チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力
チャンネルの重みを読み取り、ここで、M*Nの値と前記予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定され、M、N及びYはいずれも正の整数であることと、
読み取られた特徴マップデータ及び前記予め設定された数の出力
チャンネルの重みを前記予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行うことであって、ここで、畳み込み計算の方法は、前記特徴マップデータまたは前記出力
チャンネルの重みがゼロである場合に、前記畳み込み計算を行わず、複数の特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して前記畳み込み計算を行うことを含むことと、
前記畳み込み計算の結果を出力することと、を含
み、
読み取られた特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行うことは、
第1サイクルにおいて、第1入力チャンネルの第1行のM*1の特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの計算アレイに入力し、第1グループのZ*1個の乗算・加算ユニットを利用して乗算・加算を行って、Z個の計算結果を取得し、ここで、Zは前記予め設定されたY*Y重みによって決定されることと、
第2サイクルにおいて、前記第1入力チャンネルの第2行のM*1の特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの計算アレイに入力し、第2グループのZ*1個の乗算・加算ユニットを利用して乗算・加算計算を行って、次の行のZ個の点の中間結果を取得し、同じ出力点の全ての乗算・加算計算をいずれも同一の乗算・加算ユニットで実現するように、前記第1行の特徴マップデータを左に移動させることと、
第3サイクルにおいて、第3行のM*1の特徴マップデータを入力し、前のサイクルと同様な操作を実行することと、
前記読み取り操作を実行した後の第Yサイクルの乗算・加算計算の操作が完了した後に、第Y+1サイクルにおいて、第Y+1行のM*1の特徴マップデータを入力し、前のサイクルと同様な操作を実行し、前記第1入力チャンネルのM*Nの特徴マップデータを全体で置換し、ここで、前記読み取り操作は、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取る操作であることと、
第Y+2サイクルにおいて、第Y+2行のM*1の特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの計算アレイに入力し、第Y+2グループのZ*1個の乗算・加算ユニットを利用して乗算・加算を行って、Z個の計算結果を取得し、前記読み取り操作を実行し後の第Y*Yサイクルの後に、第1行のZ個のデータの前記第1入力チャンネルにおける全ての乗算・加算計算はいずれも完了することと、
前記予め設定された数の入力チャンネルのM*Nの特徴マップデータを前記計算アレイに順次入力し、入力チャンネルの特徴マップデータごとに、各行のM*1の特徴マップデータの乗算・加算操作を順次実行し、前記読み取り操作を実行した後のY*Y*の予め設定された数のサイクルの後に、第1行のZ個のデータの全ての乗算・加算計算はいずれも完了し、計算結果を出力することと、
全ての入力チャンネルのM*Nの特徴マップデータを順次読み取り、全ての入力チャンネルの特徴マップデータの計算がいずれも完了するまで第1行のZ個のデータの全ての乗算・加算計算を完了することと同様な操作を繰り返して実行することと、を含む、
ことを特徴とするデータ処理方法。
【請求項2】
全ての入力
チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力
チャンネルの重みを読み取ることは、
全ての入力
チャンネルのM*Nの特徴マップデータを読み取ってメモリに格納することと、
予め設定された数の出力
チャンネルの重みを読み取って前記メモリに格納することと、を含む、
ことを特徴とする請求項1に記載のデータ処理方法。
【請求項3】
全ての入力
チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力
チャンネルの重みを読み取るように設置された読み取りモジュールであって、ここで、M*Nの値と前記予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定され、M、N及びYはいずれも正の整数である読み取りモジュールと、
読み取られた特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行うように設置された畳み込みモジュールであって、ここで、畳み込み計算の方法は、前記特徴マップデータまたは前記出力
チャンネルの重みがゼロである場合に、前記畳み込み計算を行わず、複数の特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して前記畳み込み計算を行う畳み込みモジュールと、
前記畳み込み計算の結果を出力するように設置された出力モジュールと、を備え
、
前記畳み込みモジュールは、
第1サイクルにおいて、第1入力チャンネルの第1行のM*1の特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの計算アレイに入力し、第1グループのZ*1個の乗算・加算ユニットを利用して乗算・加算を行って、Z個の計算結果を取得し、ここで、Zは前記予め設定されたY*Y重みによって決定され、
第2サイクルにおいて、前記第1入力チャンネルの第2行のM*1の特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの計算アレイに入力し、第2グループのZ*1個の乗算・加算ユニットを利用して乗算・加算計算を行って、次の行のZ個の点の中間結果を取得し、同じ出力点の全ての乗算・加算計算をいずれも同一の乗算・加算ユニットで実現するように、前記第1行の特徴マップデータを左に移動させ、
第3サイクルにおいて、第3行のM*1の特徴マップデータを入力し、前のサイクルと同様な操作を実行し、
前記読み取り操作を実行した後の第Yサイクルの乗算・加算計算の操作が完了した後に、第Y+1サイクルにおいて、第Y+1行のM*1の特徴マップデータを入力し、前のサイクルと同様な操作を実行し、前記第1入力チャンネルのM*Nの特徴マップデータを全体で置換し、ここで、前記読み取り操作は、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取る操作であり、
第Y+2サイクルにおいて、第Y+2行のM*1の特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの計算アレイに入力し、第Y+2グループのZ*1個の乗算・加算ユニットを利用して乗算・加算を行って、Z個の計算結果を取得し、前記読み取り操作を実行し後の第Y*Yサイクルの後に、第1行のZ個のデータの前記第1入力チャンネルにおける全ての乗算・加算計算はいずれも完了し、
前記予め設定された数の入力チャンネルのM*Nの特徴マップデータを前記計算アレイに順次入力し、入力チャンネルの特徴マップデータごとに、各行のM*1の特徴マップデータの乗算・加算操作を順次実行し、前記読み取り操作を実行した後のY*Y*の予め設定された数のサイクルの後に、第1行のZ個のデータの全ての乗算・加算計算はいずれも完了し、計算結果を出力し、
全ての入力チャンネルのM*Nの特徴マップデータを順次読み取り、全ての入力チャンネルの特徴マップデータの計算がいずれも完了するまで第1行のZ個のデータの全ての乗算・加算計算を完了することと同様な操作を繰り返して実行する、ように設置された、
ことを特徴とするデータ処理装置。
【請求項4】
前記読み取りモジュールは、
全ての入力
チャンネルのM*Nの特徴マップデータを読み取ってメモリに格納するように設置された第1読み取りユニットと、
予め設定された数の出力
チャンネルの重みを読み取って前記メモリに格納するように設置された第2読み取りユニットと、を含む、
ことを特徴とする請求項
3に記載のデータ処理装置。
【請求項5】
実行される際に請求項1~
2のいずれかに記載のデータ処理方法を実行するように設置されたコンピュータプログラムが格納されている、
ことを特徴とする記憶媒体。
【請求項6】
コンピュータプログラムが格納されているメモリと、請求項1~
2のいずれかに記載のデータ処理方法を実行するように、前記コンピュータプログラムを実行するように設置されたプロセッサと、を備える、
ことを特徴とする電子装置。
【発明の詳細な説明】
【関連出願の相互参照】
【0001】
本願は、2019年6月27日に中国専利局に出願された、出願番号が201910569119.3である中国特許出願に基づく優先権を主張し、その開示全体は援用により本願に組み込まれるものとする。
【技術分野】
【0002】
本願は、コンピュータ分野に関し、例えば、データ処理方法、装置、記憶媒体及び電子機器に関する。
【背景技術】
【0003】
人工知能は活況を呈しているが、中央処理装置(Central Processing Unit、CPU)、画像処理装置(Graphics Processing Unit、GPU)、現場でプログラム可能なゲートアレイ(Field Programmable Gate Array、FPGA)などのチップの基本的なアーキテクチャは、この人工知能の飛躍的進歩のずっと前から存在しており、人工知能のために特別に設計されるものではないため、人工知能を実現するタスクを完全に引き受けることができない。人工知能(Artificial Intelligence、AI)アルゴリズムは依然として絶えず変化しており、AIチップはエネルギー効率の高い汎用ディープラーニングエンジンになるように、全てのアルゴリズムに適応できる構造を見つける必要がある。
【0004】
ディープラーニングアルゴリズムは、多層の大規模なニューラルネットワークに構築されるものであり、ニューラルネットワークは、本質的に行列積と畳み込み操作を含む計算量が大きな関数である。通常、まず、回帰問題の分散、分類時のクロスエントロピーを含むコスト関数を定義し、次に、データをバッチでネットワークに渡し、パラメータに基づいてコスト関数値を導出し、ネットワークモデル全体を更新する必要がある。これは通常、少なくとも数百万回の乗算処理を意味し、膨大な量の計算になる。一般的には、A*B+Cの計算が数百万回含まれており、計算力の消費は膨大である。したがって、ディープラーニングアルゴリズムは、主に畳み込み部分を加速する必要があり、畳み込み部分の累積によって計算力を高める。従来の殆どのアルゴリズムと比べて、従来のアルゴリズムの計算の複雑さが高く、ディープラーニングの計算の複雑さとストレージの複雑さとの関係は逆であり、ストレージ部分による性能のボトルネック及び消費電力のボトルネックは計算部分よりも遥かに大きい。畳み込みアクセラレータを簡単に設計しても、ディープラーニングコンピューティングの性能を向上させることができない。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本願の実施例には、少なくとも、従来技術において人工知能における畳み込み部分を如何にして効率的に加速するかが存在しないという問題を解決するように、データ処理方法、装置、記憶媒体及び電子装置が提供される。
【課題を解決するための手段】
【0006】
本願の一実施例によれば、データ処理方法が提供され、当該方法は、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取り、ここで、M*Nの値と前記予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定されることと、読み取られた特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行うことであって、ここで、畳み込み計算の方法は、前記特徴マップデータまたは前記出力チャンネルの重みがゼロである場合に、前記畳み込み計算を行わず、複数の前記特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して前記畳み込み計算を行うことを含むことと、前記畳み込み計算の結果を出力することと、を含む。
【0007】
本願の別の実施例によれば、データ処理装置がさらに提供され、当該装置は、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取るように設置された読み取りモジュールであって、ここで、M*Nの値と前記予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定される読み取りモジュールと、読み取られた特徴マップデータ及び前記予め設定された数の出力チャンネルの重みを前記予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行うように設置された畳み込みモジュールであって、ここで、畳み込み計算の方法は、前記特徴マップデータまたは前記出力チャンネルの重みがゼロである場合に、前記畳み込み計算を行わず、複数の前記特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して前記畳み込み計算を行う畳み込みモジュールと、前記畳み込み計算の結果を出力するように設置された出力モジュールと、を備える。
【0008】
本願の別の実施例によれば、実行される際に本願のいずれかの方法実施例を実行するように設置されたコンピュータプログラムが格納されている記憶媒体がされに提供される。
【0009】
本願の別の実施例によれば、コンピュータプログラムが格納されているメモリと、本願のいずれかの方法実施例を実行するように、前記コンピュータプログラムを実行するように設置されたプロセッサと、を備える電子装置がさらに提供される。
【図面の簡単な説明】
【0010】
【
図1】
図1は、本願の実施例に提供されるデータ処理方法の端末のハードウェア構成ブロック図である。
【
図2】
図2は、本願の実施例に提供されるデータ処理方法のフローチャートである。
【
図3】
図3は、本願の実施例に提供される全体設計を示す図である。
【
図4】
図4は、本願の実施例に提供されるAI処理アーキテクチャを示す図である。
【
図5】
図5は、本願の代替実施例に提供されるステップS4020のデータストリームを示す図である。
【
図6】
図6は、本願の代替実施例に提供されるステップS4030のデータストリームを示す図である。
【
図7】
図7は、本願の代替実施例に提供されるステップS4050のデータストリームを示す図である。
【
図8】
図8は、本願の代替実施例に提供される畳み込みニューラルネットワーク(Convolutional Neural Networks、CNN)の加速部分を示す図である。
【
図9】
図9は、本願の実施例に提供される消費電力低減を示す図である。
【
図10】
図10は、本願の実施例に提供される別の消費電力低減を示す図である。
【
図11】
図11は、本願の実施例に提供されるデータ処理装置の構成を示す図である。
【発明を実施するための形態】
【0011】
以下、図面を参照しながら、実施例を組み合わせて本願を説明する。
【0012】
本願の明細書における「第1」、「第2」等の用語は、指定された順序又は優先順位を記載するのではなく、類似する対象を区分するために使用されている。
【0013】
実施例1
本願の実施例1に提供された方法実施例は、端末、コンピュータ端末または類似する演算装置で実行されることができる。端末で実行することを例とすると、
図1は、本願の実施例に提供されるデータ処理方法の端末のハードウェア構成ブロック図である。
図1に示されるように、端末10は、1つまたは複数(
図1では、1つのみが示されている)のプロセッサ102(プロセッサ102は、マイクロプロセッサ(Microcontroller Unit、MCU)またはフィールドプログラマブルゲートアレイFPGA等の処理装置を含むが、これらに限らない)と、データを格納するように設けられたメモリ104とを含むことができ、選択できるように、上記の端末は、通信機能を有するように設けられた伝送装置106と、入出力装置108とをさらに含むことができる。
図1に示される構成は模式的なものだけであり、上記の端末の構成を限定するものではない。例えば、端末10は、
図1に示されるものよりも多くまたは少ない部品、或いは、
図1に示されるものと異なる配置をさらに含んでもよい。
【0014】
メモリ104は、コンピュータプログラム、例えば、本願の実施例におけるデータ処理方法に対応するコンピュータプログラムのような、アプリケーションソフトウェアのソフトウェアプログラム及びモジュールを格納するように設けられることができ、プロセッサ102は、メモリ104に格納されたコンピュータプログラムを実行することにより、複数の機能アプリケーション及びデータ処理を実行し、即ち、上記の方法を実現する。メモリ104は、高速ランダムアクセスメモリを含むことができ、不揮発性メモリ、例えば1つまたは複数の磁気記憶装置、フラッシュメモリ、またはその他の不揮発性ソリッドステートメモリをさらに含むことができる。幾つかの実例において、メモリ104は、プロセッサ102に対して遠隔的に設けられたメモリをさらに含むことができ、これらのリモートメモリは、ネットワークを介して端末10に接続されることができる。上記のネットワークの実例は、インターネット、企業イントラネット、ローカルエリアネットワーク、モバイル通信ネットワーク、及びそれらの組み合わせを含むが、これらに限らない。
【0015】
伝送装置106は、1つのネットワークを介してデータを送受信するように設けられている。上記のネットワークの具体的な実例は、端末10の通信プロバイダによって提供される無線ネットワークを含むことができる。1つの実例において、伝送装置106は、1つのネットワークインターフェースコントローラー(Network Interface Controller、NIC)を備え、NICは、基地局を介して他のネットワークデバイスと接続されてインターネットと通信可能である。1つの実例において、伝送装置106は、無線周波数(Radio Frequency、RF)モジュールであってもよく、ワイヤレスでインターネットと通信するように設けられる。
【0016】
本実施例には、上記の端末で実行されるデータ処理方法が提供され、
図2は、本願の実施例に提供されるデータ処理方法のフローチャートであり、
図2に示されるように、当該フローチャートには、以下のステップを含む。
【0017】
ステップS202、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取り、ここで、M*Nの値と予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定され、M、N及びYはいずれも正の整数である。
【0018】
予め設定されたY*Y重み(weights)が3*3/1*1である場合、M*N=(15+2)*(9+2)であり、weightsが5*5である場合、M*N=(15+4)*(25+4)であり、weightsが7*7である場合、M*N=(15+6)*(49+6)であり、weightsが11*11である場合、M*N=(15+10)*(121+10)である。
【0019】
予め設定されたY*Y重み(weights)が3*3/1*1である場合、oc_num(予め設定された数)=16であり、weightsが5*5である場合、oc_num=5であり、weightsが7*7である場合、oc_num=3であり、weightsが11*11である場合、oc_num=1である。
【0020】
ステップS204、読み取られた特徴マップデータ及び出力チャンネルの重みを予め設定された数の出力チャンネルの乗算・加算アレイ(multiply add array)に入力して畳み込み計算を行い、ここで、畳み込み計算の方法は、特徴マップデータまたは出力チャンネルの重みがゼロである場合に、畳み込み計算を行わず、複数の特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して畳み込み計算を行うことを含む。
【0021】
ステップS206、畳み込み計算の結果を出力する。
【0022】
上記のステップS202~ステップS206によれば、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取った後、畳み込みを行う方法は、特徴マップデータまたは出力チャンネルの重みがゼロである場合に、畳み込み計算を行わず、複数の特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して畳み込み計算を行うことである。つまり、特徴マップデータと重みにはゼロの値があるため、これらの値の乗算の結果は必ず0であり、この場合、今回の乗算計算と累積計算を省いて消費電力を減少させることができ、また、特徴マップデータには複数の値が同じである場合、後の同じ特徴マップデータの値の場合に乗算計算を行う必要がなくなり、前回の計算結果を直接に使用して済み、消費電力も減少し、これによって、人工知能における畳み込み部分を如何にして効率的に加速するかが存在しないという問題を解決し、畳み込み部分を効率的に加速し、消費電力を低減するという効果が得られる。
【0023】
本実施例の代替実施形態において、本実施例におけるステップS202に係る、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取るという方法、以下のことであってもよい。
【0024】
ステップS202-110、全ての入力チャンネルのM*Nの特徴マップデータを読み取ってメモリに格納する。
【0025】
ステップS202-120、予め設定された数の出力チャンネルの重みを読み取ってメモリに格納する。
【0026】
上記のステップS202は適用シナリオにおいて以下のことであってもよい。
全ての入力チャンネル(input channel)のM*Nの特徴マップ(featuremap)データを読み取って内部スタティックランダムアクセスメモリ(Static Random Access Memory、SRAM)に格納する。oc_num個の出力チャンネル(output channel)のweightsを読み取って内部SRAMに格納する。
【0027】
本実施例の代替実施形態において、本願のステップS204に係る、読み取られた特徴マップデータ及び出力チャンネルの重みを予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行うという方法は、以下のステップで実現できる。
【0028】
ステップS10、第1入力チャンネルのM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに入力し、第1グループのZ*1個の乗算・加算ユニットを利用して乗算・加算計算を行って、Z個の計算結果を取得し、ここで、Zは予め設定されたY*Y重みによって決定される。
【0029】
ステップS20、次のサイクルにおいて、次の行のM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに順次入力し、読み取り操作を実行した後の第Yサイクルの後に、全ての特徴マップデータを全体で置換し、ここで、読み取り操作は、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取ることである。
【0030】
ここで、このステップS20は、以下のことを含む。
【0031】
ステップS210、次のサイクルでは、第1入力チャンネルの次の行のM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに入力し、第2グループのZ*1個の乗算・加算ユニットを利用して乗算・加算計算を行って、次の行のZ個の点の中間結果を取得し、同じ出力点の全ての乗算・加算をいずれも同一の乗算・加算ユニットで実現するように、第1行の特徴マップデータを左に移動させる。
【0032】
ステップS220、次の行のM*1の特徴マップデータを継続して入力し、ステップS210と同様な処理を行う。
【0033】
ステップS230、読み取り操作後の第Yサイクルの後に、次の行のM*1の特徴マップデータを継続して入力し、ステップS210と同様な処理を行い、全ての特徴マップデータを全体で置換する。
【0034】
ステップS30、次の行のM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに継続して入力し、次のグループのZ*1個の乗算・加算ユニットを順次利用して乗算・加算計算を行って、Z個の計算結果を取得し、読み取り操作を実行し後の第Y*Yサイクルの後に、第1行のZ個のデータの第1入力チャンネルにおける全ての乗算・加算計算はいずれも完了する。
【0035】
ステップS40、第1入力チャンネルの次の入力チャンネルの特徴マップデータを計算アレイに入力し、上記のステップS10~S40を繰り返して実行する。
【0036】
ステップS50、読み取り操作を実行した後のY*Y*の予め設定された数のサイクルの後に、第1行のZ個のデータの全ての乗算・加算計算はいずれも完了し、計算結果を出力する。
【0037】
ステップS60、全ての入力チャンネルの次のM*Nの特徴マップデータを読み取り、全ての入力チャンネルの特徴マップデータの計算がいずれも完了するまで上記のステップS10~ステップS50を繰り返して実行する。
【0038】
上記のステップS10~ステップS60は適用シナリオにおいて以下のことであってもよい。
【0039】
ステップS3010、input channel0のM*1のfeaturemapデータをoc_num個のoutput channelの計算アレイに送り、第1グループの15*1個の乗算・加算ユニットを利用して、第1行の乗算・加算計算を行い、15点の中間結果を得る。
【0040】
weightsが3*3/1*1である場合、計算アレイには、15*9個の乗算・加算ユニットが含まれ、weightsが5*5である場合、計算アレイには、15*25個の乗算・加算ユニットが含まれ、weightsが7*7である場合、計算アレイには、15*49個の乗算・加算ユニットが含まれ、weightsが11*11である場合、乗算・加算ユニットには、15*121個の乗算・加算ユニットが含まれる。
【0041】
ステップS3020、次のサイクル(cycle)では、input channel0の次の行のM*1のfeaturemapデータをoc_num個のoutput channelの計算アレイに送り、第2グループの15*1個の乗算・加算ユニットを利用して、第2行の乗算・加算計算を行い、次の行の15点の中間結果を取得し、同時に、同じ出力点の全ての乗算・加算をいずれも同一の乗算・加算ユニットで実現するように、第1行のデータレジスタ0(dataregister0)0~25を左に移動させる。
【0042】
ステップS3030、次の行のM*1のfeaturemapデータを継続して入力し、同様な処理を行う。
【0043】
ステップS3040、ステップS202後のK個のcycleの後に、次の行のM*1のfeaturemapデータを継続して入力し、同様な処理を行う。そして、行データの多重化を実現するように、全てのdata registerを全体で置換し、data register1の値をdata register0に割り当て、data register2の値をdata register1に割り当てる……。
【0044】
ステップS3050、次の行のM*1のfeaturemapデータを継続して入力し、S3030と同様な処理を行う。
【0045】
ステップS3060、ステップS202の後のK*K個のサイクルの後(当該K*Kは上記のY*Yと一致し、即ち、KとYは同じ意味を有し、下記のK及びK*Kも同じである)に、第1行の15のデータのinput channel0における全ての乗算・加算計算は既に完了した。input channel1のM*1のfeaturemapデータを計算アレイに送り込み、ステップS3010~ステップS3060を繰り返す。
【0046】
ステップS3070、ステップS202後のK*K*ic_num(input channelの数)個のcycleの後に、第1行の15のデータの全ての乗算・加算計算は既に完了し、それをダブルデータレート同期ダイナミックランダムアクセスメモリ(Double Data Rate Synchronous Dynamic Random Access Memory、DDRSDRAM)に出力する。
【0047】
ステップS3080、全てのinput channelの次のM*Nのfeaturemapデータを読み取り、全てのinput channelデータの処理が完了するまで、ステップS3010~ステップS3070を繰り返す。
【0048】
以下、本願の代替実施形態を組み合わせて本願を説明する。
【0049】
本代替実施形態には、効率的なAI処理方法が提供され、当該処理方法は、畳み込みアルゴリズムを分析することにより、
図3に示されるように、F個のinput channel(入力
チャンネル)のfeaturemap(特徴マップ)を畳み込んで(F個のK*KのWeightsに対応する)累積してから1つのoutput channel(出力
チャンネル)のfeaturemapを出力する。複数のoutput channelのfeaturemapを出力する必要がある場合に、同じF個のinput channelのfeaturemap(別のF個のK*KのWeightsに対応する)を累積して得られる。そうすると、featuremapのデータの繰り返し使用回数はoutput channelの数であるため、DDRSDRAMによって読み取られた帯域幅及び消費電力の需要を低減するように、featuremapデータをできる限り1回だけ読み取る。
【0050】
乗算と加算の数(即ち、計算力)が固定されているため、1つのcycle内で算出できるoutlput channelの数も決定されており、計算力を向上/低下させる場合、1回計算されたoutput channelの数を調整することで、計算力の拡張と削減を実現できる。つまり、featuremapとweightsには幾つかの0の値があり、これらの値の乗算結果は必ず0であるため、今回の乗算と累積計算を省いて電力消費を減少させることができる。固定点量子化の関係により、featuremapには同じ数値が多数あり、後の同じfeaturemap値の場合に、乗算は不要になり、前回の計算の結果を直接に使用して済む。
【0051】
本実施形態を用いて、DDRSDRAMに格納されたデータを1回だけ読み取る必要があるため、帯域幅の消費が減少する。計算の過程において、全てのデータはシフト(shift)によって多重化され、SRAMによる複数回の読み取りの消費電力が低減される。
【0052】
図4は、本願の実施例に提供されるAI処理アーキテクチャを示す図であり、
図4に基づいて、本代替実施形態の効率的なAI処理方法は、以下のステップを含む。
【0053】
ステップS4010、全てのinput channelのM*Nのfeaturemapデータを読み取って(weightsが3*3/1*1である場合、M*N=(15+2)*(9+2)であり、weightsが5*5である場合、M*N=(15+4)*(25+4)であり、weightsが7*7である場合、M*N=(15+6)*(49+6)であり、weightsが11*11である場合、M*N=(15+10)*(121+10)である)内部SRAMに格納する。oc_num(weightsが3*3/1*1である場合、oc_num=16であり、weightsが5*5である場合、oc_num=5であり、weightsが7*7である場合、oc_num=3であり、weightsが11*11である場合、oc_num=1である)個のoutput channelのweightsを読み取って内部SRAMに格納する。
【0054】
ステップS4020、input channel0のM*1のfeaturemapデータをoc_num個のoutput channelの計算アレイに送り(weightsが3*3/1*1である場合、計算アレイには15*9個の乗算・加算ユニットが含まれ、weightsが5*5である場合、計算アレイには15*25個の乗算・加算ユニットが含まれ、weightsが7*7である場合、計算アレイには15*49個の乗算・加算ユニットが含まれ、weightsが11*11である場合、計算アレイには15*121の乗算・加算ユニットが含まれる)、第1グループの15*1個の乗算・加算ユニットを使用して、第1行の乗算・加算を行い、15点の中間結果を得る。
【0055】
ステップS4020のデータストリームを
図5に示す。
【0056】
ステップS4030、次のcycleでは、input channel0の次の行のM*1のfeaturemapデータをoc_num個のoutput channelの計算アレイに送り、第2グループの15*1個の乗算・加算ユニットを使用して、第2行の乗算・加算を行い、次の行の15点の中間結果を得る。同時に、同じ出力点の全ての乗算・加算をいずれも同一の乗算・加算ユニットで実現するように、第1行のdataregister00~25を左に移動させる。
【0057】
ステップS4030のデータストリームを
図6に示す。
【0058】
ステップS4040、次の行のM*1のfeaturemapデータを継続して入力し、同様な処理を行う。
【0059】
ステップS4050、ステップS4010のK個のcycleの後に、次の行のM*1のfeaturemapデータを継続して入力し、同様な処理を行う。そして、行データの多重化を実現するように、全てのdata registerを全体で置換し、data register1の値をdata register0に割り当て、data register2の値をdata register1に割り当てる……。
【0060】
ステップS4050のデータストリームを
図7に示す。
【0061】
ステップS4060、次の行のM*1のfeaturemapデータを継続して入力し、ステップS4040と同様な処理を行う。
【0062】
ステップS4070、ステップS4010のK*K個のcycleの後に、第1行の15のデータのinput channel0における全ての乗算・加算計算は既に完了した。input channel1のM*1のfeaturemapデータを計算アレイに送り込み、ステップS4020~ステップS4060を繰り返す。
【0063】
ステップS4080、ステップS4010のK*K*ic_num(input channelの数)個のcycleの後に、第1行の15のデータの全ての乗算・加算計算は既に完了し、それをDDRSDRAMに出力する。
【0064】
ステップS4090、全てのinput channelの次のM*Nのfeaturemapデータを読み取り、全てのinput channelのデータの処理が完了するまでステップS4010~ステップS4060を繰り返す。
【0065】
上記のステップS4010~ステップS4090を3つの部分に分けて、それぞれ3つのモジュールによって実行すると、当該3つのモジュールは、入力制御(INPUT_CTRL)、畳み込み加速及び出力制御(OUTPUT_CTRL)を含み、その機能説明及びステップは、次のように対応する。
【0066】
A.INPUT_CTRL
上記のステップS4010に対応し、本モジュールは、後続の畳み込み加速、読み取りの使用のために、主に高度な拡張可能なインターフェイス(Advanced eXtensible Interface、AXI)バスを介してDDRSDRAMからfeaturemap及びweightsを読み取って、SRAMに格納する。SRAMのスペースが限られているため、weightsのサイズに応じて、全てのinput channel featuremapに対応する小さな範囲のデータを読み取ってSRAMに格納し、この範囲のデータの全てのoutput channelデータを算出してから解放し、全てのinput channel featuremapの次の小さな範囲のデータを引き続き使用する。
【0067】
B.畳み込み加速
上記のステップS4020~ステップS4070に対応し、本モジュールは、主に、CNN畳み込みネットワークに対してハードウェア加速を行い、
図8に示されるように、INPUT_CTRLによって送信されたデータを乗算・加算アレイに分散して畳み込み計算し、そして、計算結果をOUTPUT_CTRLに戻させる。
【0068】
計算の過程において、以下の2つの方法によって演算過程における電力消費を低減する。
1)方法1:
図9に示されるように、featuremapまたはweightsが0である場合、乗算及び累積計算を行わない。
2)方法2:
図10に示されるように、featuremapの複数のデータの値が同じである場合、1つのデータの乗算のみが行われ、他のデータの乗算を行わずに、1番目のデータの乗算の結果を直接に使用する。
【0069】
C.OUTPUT_CTRL
上記のステップS4080及びステップS4090に対応し、本モジュールは、次の層の畳み込み加速の使用のために、主にAXIバスを介して畳み込み加速された全てのoutput channel featuremapデータをアービトレーション及びアドレス管理によって制御してからDDRSDRAMに書き込む。
【0070】
以下に、2160個の乗算・加算リソース、kernelが3*3であることを例とすると、本代替実施形態の効率的なAI処理過程について例を挙げて説明し、当該処理過程のステップは、以下のとおりである。
【0071】
ステップS5010、全てのinput channelの17*11のfeaturemapデータを読み取って内部SRAMに格納する。16のoutput channelのweightsを読み取って内部SRAMに格納する。
【0072】
ステップS5020、input channel0の17*1のfeaturemapデータを16のoutput channelの計算アレイに送り、第1グループの15*1個の乗算・加算ユニットを利用して第1行の乗算・加算計算を行い、15点の中間結果を得る。
【0073】
ステップS5030、次のcycleでは、input channel0の次の行の17*1のfeaturemapデータを16のoutput channelの計算アレイに送り、第2グループの15*1個の乗算・加算ユニットを利用して第2行の乗算・加算計算を行って、次の行の15点の中間結果を得る。同時に、同じ出力点の全ての乗算・加算をいずれも同一の乗算・加算ユニットで実現するように、第1行のdataregister00~25を左に移動させる。
【0074】
ステップS5040、次の行の17*1のfeaturemapデータを継続して入力し、同様な処理を行う。
【0075】
ステップS5050、ステップS5010の3つのcycleの後に、次の行の17*1のfeaturemapデータを継続して入力し、同様な処理を行う。そして、行データの多重化を実現するように、全てのdata registerを全体で置換し、data register1の値をdata register0に割り当て、data register2の値をdata register1に割り当てる……。
【0076】
ステップS5060、次の行の17*1のfeaturemapデータを継続して入力し、ステップS5040と同様な処理を行う。
【0077】
ステップS5070、ステップS5010の9つのcycleの後に、第1行の15のデータのinput channel0における全ての乗算・加算計算は既に完了した。input channel1の17*1のfeaturemapデータを計算アレイに送り込み、S5020~S5060を繰り返す。
【0078】
ステップS5080、ステップS5010の2304(input channelの数が256である場合)のcycleの後に、第1行の15のデータの全ての乗算・加算計算は既に完了し、それをDDRSDRAMに出力する。
【0079】
ステップS5090、全てのinput channelの次の17*11のfeaturemapデータを読み取り、全てのinput channelのデータの処理が完了するまでステップS5010~ステップS5070を繰り返す。
【0080】
本代替実施形態により、DDRSDRAMにデータを格納するには1回だけ読み取る必要があり、帯域幅の消費が減少する。計算の過程において、全てのデータはshiftによって多重化され、SRAMによる複数回の読み取りの消費電力が低減される。
【0081】
以上の実施形態の説明から分かるように、上記の実施例に係る方法は、ソフトウェアと必要な汎用ハードウェアプラットフォームの組み合わせによって実現できてもよいし、ハードウェアによって実現してもよい。本願の技術考案は、ソフトウェア製品の形で具体化されることができ、当該コンピュータソフトウェア製品は、1つの記憶媒体(例えば、ROM/RAM、磁気ディスク、光ディスク)に格納され、1つの端末装置(携帯電話、コンピュータ、サーバ、またはネットワークデバイス等であってもよい)に本願の実施例に記載の方法を実行させるように複数の命令を含む。
【0082】
実施例2
本実施例には、データ処理装置がさらに提供され、当該装置は、上記の実施例及び実施形態を実現するように設置され、説明した内容について再び説明しない。以下に使用されるように、「モジュール」という用語は所定の機能を有するソフトウェアおよび/またはハードウェアとの組み合わせを実現することができる。以下の実施例に記載の装置がソフトウェアで実現することができるが、ハードウェア、またはソフトウェアとハードウェアとの組み合わせによる実現も可能でありかつ予想できる。
【0083】
図11は、本願の実施例に提供されるデータ処理装置の構成ブロック図であり、
図11に示されるように、当該装置は、全ての入力
チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力
チャンネルの重みを読み取るように設置された読み取りモジュールであって、ここで、M*Nの値と予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定され、M、N及びYはいずれも正の整数である読み取りモジュール92と、読み取られた特徴マップデータ及び出力チャンネルの重みを予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行うように設置され、読み取りモジュール92と結合して接続される畳み込みモジュールであって、ここで、畳み込み計算の方法は、特徴マップデータまたは出力
チャンネルの重みがゼロである場合に、畳み込み計算を行わず、複数の特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して畳み込み計算を行う畳み込みモジュール94と、畳み込み計算の結果を出力するように設置され、畳み込みモジュール94と結合して接続される出力モジュール96と、を備える。
【0084】
選択できるように、本願における読み取りモジュール92は、全ての入力チャンネルのM*Nの特徴マップデータを読み取ってメモリに格納するように設置された第1読み取りユニットと、予め設定された数の出力チャンネルの重みを読み取ってメモリに格納するように設置された第2読み取りユニットとを含むことができる。
【0085】
選択できるように、本願における畳み込みモジュール94は以下のステップを実行するように設置される。
【0086】
ステップS1、第1入力チャンネルのM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに入力し、第1グループのZ*1個の乗算・加算ユニットを利用して乗算・加算計算を行って、Z個の計算結果を取得し、ここで、Zは予め設定されたY*Y重みによって決定される。ステップS2、次のサイクルにおいて、次の行のM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに順次入力し、読み取り操作を実行した後の第Yサイクルの後に、全ての特徴マップデータを全体で置換し、ここで、読み取り操作は、全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取ることである。ステップS3、次の行のM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに継続して入力し、次のグループのZ*1個の乗算・加算ユニットを順次利用して乗算・加算計算を行って、Z個の計算結果を取得し、読み取り操作を実行し後の第Y*Yサイクルの後に、第1行のZ個のデータの第1入力チャンネルにおける全ての乗算・加算計算はいずれも完了する。ステップS4、第1入力チャンネルの次の入力チャンネルの特徴マップデータを計算アレイに入力し、上記のステップS1~S4を繰り返して実行する。ステップS5、読み取り操作を実行してからY*Y*の予め設定された数のサイクルの後に、第1行のZ個のデータの全ての乗算・加算計算はいずれも完了し、計算結果を出力する。ステップS6、全ての入力チャンネルの次のM*Nの特徴マップデータを読み取り、全ての入力チャンネルの特徴マップデータの計算がいずれも完了するまで上記のステップS1~ステップS5を繰り返して実行する。
【0087】
ステップS2は、以下のステップを含むことができる。
【0088】
ステップS21、次のサイクルでは、第1入力チャンネルの次の行のM*1の特徴マップデータを予め設定された数の出力チャンネルの計算アレイに送り、第2グループのZ*1個の乗算・加算ユニットを利用して乗算・加算計算を行って、次の行のZ個の点の中間結果を取得し、同じ出力点の全ての乗算・加算をいずれも同一の乗算・加算ユニットで実現するように、第1行の特徴マップデータを左に移動させる。ステップS22、次の行のM*1の特徴マップデータを継続して入力し、ステップS21と同様な処理を行う。ステップS23、読み取り操作の第Yサイクルの後に、次の行のM*1の特徴マップデータを継続して入力し、ステップS21と同様な処理を行い、全ての特徴マップデータを全体で置換する。
【0089】
上記の複数のモジュールは、ソフトウェアまたはハードウェアによって実現でき、後者については、以下の方法によって実現できるが、これらに限定されない。
上記のモジュールはいずれも同じプロセッサ内に位置するか、または、上記の複数のモジュールは任意に組み合わせることでそれぞれ異なるプロセッサ内に位置する。
【0090】
実施例3
本願の実施例には、実行される際に上記のいずれかの方法実施例におけるステップを実行するように設置されたコンピュータプログラムが格納されている記憶媒体がさらに提供される。
【0091】
選択できるように、本実施例において、上記の記憶媒体は、以下のステップを実行するためのコンピュータプログラムを格納するように設置されることができる:
全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取り、ここで、M*Nの値と予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定されるステップ、
読み取られた特徴マップデータ及び出力チャンネルの重みを予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行い、ここで、畳み込み計算の方法は、特徴マップデータまたは出力チャンネルの重みがゼロである場合に、畳み込み計算を行わず、複数の特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して畳み込み計算を行うことを含むステップ、
畳み込み計算の結果を出力するステップ。
【0092】
選択できるように、本実施例において、上記の記憶媒体は、USBメモリ、読み取り専用メモリ(Read-Only Memory、ROM)、ランダムアクセスメモリ(Random Access Memory、RAM)、ポータブルハードディスク、磁気ディスク、または光ディスクなどの、コンピュータプログラムを格納可能である様々な媒体を含むが、これらに限定されない。
【0093】
本願の実施例には、コンピュータプログラムが格納されているメモリと、上記のいずれかの方法実施例におけるステップを実行するように、コンピュータプログラムを実行するように設置されたプロセッサと、を備える電子装置がさらに提供される。
【0094】
選択できるように、上記の電子装置は、上記のプロセッサに接続された伝送装置と、上記のプロセッサに接続された入出力装置とをさらに含むことができる。
【0095】
選択できるように、本実施例において、上記のプロセッサは、コンピュータプログラムによって以下のステップを実行するように設置されることができる:
全ての入力チャンネルのM*Nの特徴マップデータ及び予め設定された数の出力チャンネルの重みを読み取り、ここで、M*Nの値と予め設定された数の値は、それぞれ予め設定されたY*Y重みによって決定されるステップ、
読み取られた特徴マップデータ及び出力チャンネルの重みを予め設定された数の出力チャンネルの乗算・加算アレイに入力して畳み込み計算を行い、ここで、畳み込み計算の方法は、特徴マップデータまたは出力チャンネルの重みがゼロである場合に、畳み込み計算を行わず、複数の特徴マップデータの値が同じである場合に、複数の同じ値の中から1つを選択して畳み込み計算を行うことを含むステップ、
畳み込み計算の結果を出力するステップ。
【0096】
選択できるように、本実施例における具体的な例は、上述した実施例及び代替実施形態に記載の例を参照することができ、本実施例では、ここで再び説明しない。
【0097】
上記の本願の複数のモジュールまたは複数のステップは、汎用計算機によって実現でき、それらは単一の計算機に集中されるか、または複数の計算機からなるネットワークに分布されてもよく、選択できるように、それらは計算機によって実行可能なプログラムコードによって実現できるため、記憶装置に格納されて計算機によって実行されることができる。また、場合によっては、ここに示したり説明したりするステップをここと異なる順序で実行することができ、または、それらを、それぞれ複数の集積回路モジュールに作製したり、それらのうちの複数のモジュールまたはステップを単一の集積回路に作製したりすることで実現することができる。このように、本願は、任意に指定されたハードウェアとソフトウェアとの組み合わせに限定されない。