【文献】
LIU, Shaoli, et al.,Cambricon: An Instruction Set Architecture for Neural Networks,2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture (ISCA),2016年,pp.393-405,https://ieeexplore.ieee.org/document/7551409
(58)【調査した分野】(Int.Cl.,DB名)
番号を前記エリアに記憶する前に、前記空間の開始アドレス及びサイズを決定するステップ、又は前記複数のオブジェクトのうち第2のものに前記1つの領域内の第2のエリアを割り振るステップを更に含むか、或いは
前記複数の所定のアドレスは、複数のスライスの始まりであるか、或いは
前記RAM内の前記第2の空間は、前記メインメモリ内の前記空間と実質的に同じサイズを有し、前記メインメモリ内の前記空間と実質的に同じ方式で領域及びスライスに分割され、前記送信は、前記メインメモリ内の前記空間と実質的に同じ方式で前記第2の空間内の内容を配置することを含む、請求項7に記載の方法。
前記複数の加算器は、累算器であり、前記複数のマルチプレクサの第2のサブセットは、前記複数の加算器と接続され、前記マルチプレクサの第2のサブセットは、前記1つ以上の命令のうち1つに基づいて第2のセットの制御信号を受信するように構成され、前記第2のサブセットの制御信号は、前記複数の加算器のうち1つ以上において累算を可能にするための複数の所定のオプションのうち1つを決定する、請求項12に記載の集積回路。
前記複数のマルチプレクサの第2のサブセットは、前記複数の加算器により生成された項目を受信して前記RAMに送信するようにプログラムされ、前記マルチプレクサの第2のサブセットは、前記1つ以上の命令のうち1つに基づいて第2のセットの制御信号を受信するように構成され、前記第2のセットの制御信号は、前記複数の加算器により生成された項目を、前記RAM内の第2の複数の所定のアドレスからの第2のオフセットに送信するための第2の複数の所定の経路のうち1つを決定する、請求項12に記載の集積回路。
【発明を実施するための形態】
【0019】
本発明の好ましい実施形態がここに示されて記載されるが、このような実施形態は例示としてのみ提供されることは当業者に明らかである。複数の変更、変形及び置換は、本発明から逸脱することなく当業者に思い浮かぶ。ここに記載の本発明の実施形態への様々な代替物が本発明を実施する際に使用されてもよいことが理解されるべきである。
【0020】
メモリアクセス時間を低減して計算効率を改善するためのデータ管理のためのシステム及び方法が提供される。ここに記載の本発明の様々な態様は、以下に記載の特定の用途のいずれかに適用されてもよい。当該方法及びシステムは、畳み込みニューラルネットワーク及び他のディープラーニング用途に適用されてもよい。当該方法及びシステムは、モデル訓練又は用途に使用されてもよい。本発明の異なる態様は、個々に、併せて、或いは互いに組み合わせて認識できることが理解されるものとする。
【0021】
ここに提供されるシステム及び方法は、現在の技術より低いコスト及び電力消費並びに高い性能の利点を有し得る。改善された計算性能は、少なくとも並列演算を実行できる計算ユニットにより達成され得る。データは、効率的な計算のために並列に処理されてもよい。並列演算は、畳み込みニューラルネットワークの層におけるデータ処理に対応し、パイプライン方式で次の層に供給してもよい。並列演算は、少数の命令を使用して実現されてもよい。これは、メモリストレージを節約して計算効率を改善する際に有利になり得る。さらに、当該方法及びシステムは、メインメモリとチップとの間の効率的なデータ送信を提供し、チップは並列演算を実装する。効率的なデータ送信は、密なパラメータ及び入力データパッキングにより達成され得る。このデータ配置はまた、命令を単純化してメモリアクセスを低減し得る。並列演算は、CNN層内の演算を含んでもよく、層間の円滑なデータパイプライン又はシームレスなデータフローは、データ管理により提供されてもよい。データは、チップ上の複数の計算回路内の1つ以上のデータフロー構成に従って配置及び記憶されてもよい。再配置されたデータは、チップの単純さ及びコンパクトさが達成できるように、計算性能を改善し、計算回路の効率的な利用を可能にし得る。
【0022】
畳み込みニューロンネットワーク(CNN:Convolutional neuron network)システムは、一般的に、畳み込み、プーリング、アップスケーリング及び完全接続ニューロンネットワークの異なるタイプの層から構成される。いくつかの場合、正規化線形ユニット(rectified linear unit)のような活性化関数がいくつかの層において使用されてもよい。CNNシステムでは、演算のタイプ毎に1つ以上の層が存在できる。CNNシステムの入力データは、分析されるべきデータでもよい。画像データは、画像データ、オーディオ、ビデオデータ及び様々な他のものでもよい。
図1は、1つ以上の畳み込み層と、1つ以上のプーリング層と、様々な他の演算とを含む典型的なCNNシステム101(Krizhevsky, A., Sutskever, I., &Hinton, G. E. (2012), Imagenet classification with deep convolutional neural networks, Advances in neural information processing systems, pp. 1097-1105)を示す。部分Aに示すように、CNNシステムは、異なるタイプの演算のためにいずれかの数の層及びいずれかの数の層を含んでもよい。畳み込みニューラルネットワークの最も単純なアーキテクチャは、入力層(例えば、画像)で始まり、続いて畳み込み層及びプーリング層の系列があり、完全接続層で終わる。いくつかの場合、畳み込み層に続いてReLU活性化関数の層がある。他の活性化関数、例えば、飽和双曲線正接関数、恒等関数、2進ステップ関数、ロジスティック関数、arcTan関数、ソフトサイン関数、パラメータ正規化線形ユニット関数、指数線形ユニット関数、softPlus関数、ベント恒等(bent identity)関数、softExponential関数、Sinusoid関数、Sinc関数、ガウス関数、シグモイド関数及び様々な他のものも使用できる。畳み込み層、プーリング層及びReLU層は、学習可能な特徴抽出器として動作し得るが、完全接続層は、機械学習分類器として動作する。
【0023】
いくつかの場合、畳み込み層及び完全接続層は、パラメータ又は重みを含んでもよい。これらのパラメータ又は重みは、訓練段階で学習できる。パラメータは、CNNが計算するクラススコアが各画像の訓練セットにおけるラベルと一致するように、勾配降下で訓練されてもよい。パラメータは、生成又は適用プロセスと同じハードウェアを使用して実行されてもよく或いは実行されなくてもよい逆伝搬ニューラルネットワーク訓練プロセスから取得されてもよい。
【0024】
畳み込み層は、1つ以上のフィルタを含んでもよい。これらのフィルタは、入力データに同じ特定の構造を見つけたときに活性化する。いくつかの場合、入力データは、1つ以上の画像でもよく、畳み込み層では、1つ以上のフィルタ演算が、画像の画素に適用されてもよい。畳み込み層は、フィルタのエントリと入力画像との間のドット積を計算して、画像を空間的にスライドさせる学習可能なフィルタのセットを含んでもよい。フィルタ演算は、部分Bに例示的に示すように、全体の画像にわたるカーネルの畳み込みとして実装されてもよい。フィルタは、この開示を通じてカーネルを同義的に示してもよい。カーネルは、1つ以上のパラメータを含んでもよい。フィルタ演算の結果は、畳み込み層から次のプーリング層への出力を提供するために、チャネルにわたって一緒に合計されてもよい。畳み込み層は、高次元の畳み込みを実行してもよい。フィルタは、入力画像の完全な深さまで拡張するべきである。例えば、サイズ32×32のカラー画像にサイズ5×5のフィルタを適用したい場合、フィルタは、画像の全ての3つのカラーチャネル(赤、緑、青)をカバーする深さ3(5×5×3)を有するべきである。
【0025】
いくつかの場合、畳み込み層は、depthwiseの分離可能な畳み込みでもよい。このようなシナリオでは、畳み込み層は、depthwiseの畳み込みの出力を組み合わせるように、depthwiseの畳み込みと1×1のpointwiseの畳み込みとに分解されてもよい。畳み込み層は、フィルタリングのための層(すなわち、depthwiseの畳み込み層)と結合のための層(すなわち、pointwiseの畳み込み層)とに分割されてもよい。いくつかの場合、depthwiseの畳み込み層では、単一のフィルタが各入力チャネルに適用されてもよく、pointwiseの畳み込み層では、depthwiseの層の出力を結合するために1×1の畳み込みが実行されてもよい。いくつかの場合、depthwiseの畳み込み層とpointwiseの畳み込み層との双方に続いて、活性化層がある。いくつかの場合、CNNがdepthwiseの分離可能な畳み込み上に構築されるとき、最初の層は依然として完全な畳み込みでもよい。
【0026】
畳み込み層に供給される入力データは、一次元、二次元、三次元、四次元、五次元、六次元、七次元以上でもよい。いくつかの実施形態では、畳み込み層のような入力層に供給される入力データは、データ特性に依存してもよい。例えば、入力データが画像データである場合、入力データは三次元でもよい。
図1に示すように、入力データは、3つのチャネルのそれぞれについて224×224の画素平面を表す224×224×3のボリュームサイズを有する画像でもよい。層により生成される出力特徴マップは、後の層についての入力特徴マップとして使用されてもよい。隠れ層についての入力特徴マップ(例えば、入力データ)のサイズは、前の層におけるフィルタ数及び1つ以上のハイパーパラメータを含む複数の要因により決定されてもよい。畳み込み層は、埋め込まれた視覚特性を抽出して出力特徴マップを生成するように、入力特徴マップにフィルタを適用する。いくつかの実施形態では、パラメータの次元は四次元でもよく、入力/出力特徴マップは三次元でもよい。例えば、各特徴マップは、数個のチャネルにわたって二次元平面を含む三次元でもよく、三次元特徴マップは、畳み込み層内の三次元フィルタのグループにより処理される。いくつかの場合、畳み込み結果に追加される一次元バイアスが存在してもよい。例えば、CチャネルにわたってH×H(すなわち、重み及び高さ)のサイズを有する入力特徴マップ面の形状、及びN個のフィルタがそれぞれフィルタ面の次元R×R(すなわち、重み及び高さ)を有するCチャネルを有する場合、畳み込み層の計算は、以下のように定義されてもよい。
【0027】
【数1】
ここで、O、I、W及びBは、それぞれ、出力特徴マップ、入力特徴マップ、フィルタ及びバイアスのマトリクスを表す。Uはストライドのサイズを表す。
【0028】
各畳み込み層は、畳み込み演算のための複数のパラメータを含んでもよい。1つ以上のフィルタは、各畳み込み層に含まれてもよい。各フィルタは、1つ以上のパラメータ又は重みを含んでもよい。フィルタ/カーネルのサイズとフィルタ/カーネルの数は、一緒に各畳み込み層に必要なパラメータを決定してもよい。例えば、畳み込み層は、4つのカーネルを含んでもよく、それぞれが3つのチャネルについての2×2の平面(plane)であり、したがって、層についての重みの結果としての総数は4×2×2×3である。いくつかの実施形態では、パラメータはまた、バイアスを含んでもよい。
【0029】
畳み込み層の出力ボリュームのサイズはまた、ハイパーパラメータに依存してもよい。ハイパーパラメータはまた、畳み込み層の出力ボリュームのサイズを制御してもよい。いくつかの場合、ハイパーパラメータは、深さ、ストライド及びゼロパディングを含んでもよい。
【0030】
出力ボリュームの深さは、入力ボリュームの同じ領域に接続する層内のニューロン数を制御する。これらのニューロンの全ては、入力における異なる特徴を活性化するように学習する。例えば、第1の畳み込み層が生の画像を入力として受け取る場合、深さの次元に沿った異なるニューロンが、様々な配向されたエッジ又は色の塊(blob)の存在で活性化されてもよい。
【0031】
ストライドは、空間次元(幅及び高さ)の周りの深さのカラムがどのように割り当てられるかを制御する。ストライドが1であるとき、ニューロンの新しい深さのカラムは、1つの空間単位だけ離れた空間位置に割り当てられる。これは、カラムの間のかなり重複した受容野をもたらし、また、大きい出力ボリュームをもたらす。逆に、より高いストライドが使用される場合、受容野はあまり重複せず、結果の出力ボリュームは、空間的により小さい次元を有する。
【0032】
場合によっては、入力ボリュームの境界にゼロを用いた入力をパディングすることが便利である。このゼロパディングのサイズは、他のハイパーパラメータである。ゼロパディングは、出力ボリュームの空間サイズの制御を提供する。特に、場合によっては、入力ボリュームの空間サイズを正確に保持することが望ましい。
【0033】
出力ボリュームの空間サイズは、入力ボリュームサイズW、畳み込み層ニューロンのカーネルフィールドサイズK、これらが適用されるストライドS、及びゼロパディング量Pの関数として計算できる。所与のボリュームにおいて何個のニューロンが適合するかを計算するための式は(W-K+2P)/S+1により与えられる。この数が整数でない場合、ストライドは不正確に設定され、ニューロンは入力ボリュームにわたって対称的に適合するようにタイル(tile)することができない。一般的に、ストライドがS=1であるときにゼロパディングをP=(K-1)/2に設定することは、入力ボリューム及び出力ボリュームが空間的に同じサイズを有することを確保する。いくつかの場合、前の層の全てのニューロンを使い果たす必要はない。
【0034】
図1の部分Bは、畳み込み層の計算を示す。畳み込み層は、入力としてN個の特徴マップを受信する。各入力特徴マップは、1つの出力特徴マップにおいて1つの画素を生成するように、K×Kのカーネルを有するシフトウインドウにより畳み込まれる。シフトウインドウのストライドはSであり、通常ではこれはKより小さい。合計でM個の出力特徴マップは、次の畳み込み層のための入力特徴マップのセットを形成する。
【0035】
図1の部分Aは、CNNの適用を示す。このCNNは8つの層から構成される。最初の5個の層は、畳み込み層であり、層6〜8は、完全接続の人工ニューラルネットワークを形成する。アルゴリズムは、元の256×256の3チャネルのRGB画像から3つの224×224の入力画像を受信する。1000個の要素の出力ベクトルは、1000個のカテゴリの可能性を表す。図面に示すように、層1は、224×224の解像度の3つの入力特徴マップと、55×55の解像度の96個の出力特徴マップとを受信する。層1の出力は、2つのセットに分割され、それぞれが48個の特徴マップのサイズになる。層1のカーネルサイズは11×11であり、スライディングウインドウは4つの画素のストライドで特徴マップにわたってシフトする。以下の層も同様の構造を有する。他の層の畳み込みウインドウのスライディングストライドは1つの画素である。
【0036】
特徴マップの数は、前の層において使用されたフィルタの数を制御することで制御できる。入力層内の特徴マップの数は、チャネルの数(例えば、R、G、B)に対応してもよい。フィルタは、1つ以上のパラメータ又は重みを含んでもよい。畳み込み層は、複数のフィルタを含んでもよい。いくつかの場合、フィルタ数及びフィルタのサイズ(すなわち、パラメータの数)は、計算ユニットを十分に利用するために選択されてもよく、或いはハードウェアの計算能力に従って選択されてもよい。いくつかの場合、フィルタ数及びフィルタのサイズは、高効率のハードウェア構成が可変入力データに使用できるように選択されてもよい。
【0037】
いくつかの実施形態では、畳み込み層及び/又は完全接続層に続いて、正規化線形ユニット(ReLU:rectified linear unit)のような活性化層がある。ReLU層は、ゼロにおける最大(0,x)の閾値設定のような要素毎の活性化関数を適用してもよい。これは、入力データのボリュームを不変にしてもよい。他の活性化関数、例えば、飽和双曲線正接関数、恒等関数、2進ステップ関数、ロジスティック関数、arcTan関数、ソフトサイン関数、パラメータ正規化線形ユニット関数、指数線形ユニット関数、softPlus関数、ベント恒等(bent identity)関数、softExponential関数、Sinusoid関数、Sinc関数、ガウス関数、シグモイド関数等も使用されてもよい。いくつかの場合、CNNがdepthwiseの分離可能な畳み込みを含むとき、depthwiseの畳み込み層及びpointwiseの畳み込み層のそれぞれに続いて、ReLU層があってもよい。
【0038】
図1の部分Aに示す例では、CNNシステムは、いくつかの畳み込み層及びプーリング層又はサブサンプリング層から構成されてもよい。プーリング層は、非線形ダウンサンプリングの形式でもよい。プーリング層は、所与の特徴マップを低減した特徴マップのスタックに低減するために、ダウンサンプリングを実行してもよい。プーリング層は、入力データの空間的サイズを漸進的に低減し、ネットワーク内のパラメータ及び計算の量を低減し、したがって、オーバーフィッティングも制御してもよい。最大プーリング、平均プーリング、L2ノルムプーリングのように、プーリングを実装するためのいくつかの関数が存在する。例えば、最大プーリング演算では、所与の特徴マップは、重複しない矩形のセットに分割されてもよく、そのようなサブ領域のそれぞれについて、最大値を出力する。他の例では、平均プーリングでは、サブ領域の平均値が出力されてもよい。所与の特徴マップは、いずれかのサイズで分割されてもよい。例えば、プーリングは、それぞれの深さのスライスにおいて2のストライドで適用されるサイズ2×2のフィルタで適用されてもよい。2のストライドを有するサイズ2×2のプーリング層は、所与の特徴マップをその元のサイズの1/4に縮小する。
【0039】
プーリング層の出力は、パターン検出を実行するために、完全接続層に供給されてもよい。いくつかの場合、完全接続層は、フィルタが入力特徴マップ上に適用されるという分類目的のためでもよい。フィルタは、入力特徴マップと同じサイズでもよい。完全接続層は、その入力において重み又はパラメータのセットを適用し、完全接続層の出力として結果を累算してもよい。いくつかの場合、活性化層が完全接続層の直後に続き、CNNシステムの結果を出力してもよい。例えば、分類目的のために、出力データは、分類スコアを保持するベクトルでもよい。
【0040】
計算アーキテクチャは、予め訓練された畳み込みニューラルネットワークでもよい。CNNモデルは、1つ以上の畳み込み層を含んでもよい。CNNモデルは、1〜数百の畳み込み層を含んでもよい。CNNモデルは、1つ以上のプーリング層を含んでもよい。いくつかの場合、プーリング層が畳み込み層の直後に続いてもよい。いくつかの実施形態では、ReLU活性化演算は、畳み込み結果が直ちに活性化関数により処理されるように、畳み込み演算と組み合わされる。いくつかの実施形態において、畳み込み層及びプーリング層は、データが完全接続層に送信される前に、入力データに数回適用されてもよい。完全接続層は、パターンが認識されたか否かを決定するためにテストされる最終出力値を出力してもよい。
【0041】
特に設計された集積回路を通じた改善した並列処理及びメモリアクセスにより、選択アルゴリズムの実装を加速させるシステムが提供される。CNNの適用のような選択アルゴリズムは、多数のマトリクス・マトリクス乗算及び/又はマトリクス・ベクトル乗算を含んでもよい。集積回路は、低減した数の制御信号に基づいて並列演算の数回の繰り返しを実行可能なメモリユニット及び計算ユニットを含んでもよい。いくつかの場合、データの配置が所定のハードウェア構成と整合されるように、データが配置されるか、及び/又はゼロでパディングされる。データは、ハードウェア回路の構成に基づいて、所定のデータフロー又はデータパスに従うように配置されてもよい。
【0042】
CNNシステムでは、関与するデータは、CNNパラメータ及び入出力特徴を含む。上記のような典型的なCNNシステムは、マルチチャネル畳み込み層と、最大又は平均プーリング層と、正規化線形ユニット(ReLU:Rectified Linear Unit)と、完全接続層とを含んでもよい。完全接続層とマルチチャネルの畳み込み層との双方は、ニューロンの間の接続の強度を表す多数の数値重み又はパラメータを含む。チップ上の集積回路にロードされるべきデータは、ホストプロセッサにより準備されてメインメモリに記憶されてもよく、データはバッチ方式でチップに送信されてもよい。
【0043】
CNNパラメータは、上記のような重み又はパラメータ、バイアス、パディングのようなハイパーパラメータ、ストライド及び深さを含むが、これらに限定されない、畳み込み層のための複数のパラメータを含んでもよい。CNNパラメータはまた、完全接続層のような他のタイプの層で使用されるべきパラメータを含んでもよい。
【0044】
パラメータは、複数のグループに配置されて分類されてもよい。いくつかの実施形態では、パラメータは、層によりグループ化されてもよい。例えば、CNNシステムの異なる層は、パラメータの異なるグループに対応してもよい。各層のパラメータは、大きい次元のマトリクスでもよい。パラメータのグループは、隣接空間に記憶されてもよい。グループに含まれるパラメータ又は層に対応するパラメータは、隣接空間に連続して記憶されてもよい。グループ内のパラメータは、CNNの層で実行される機能又は演算に従って配置されてもよい。データ配置についての詳細は後述する。
【0045】
入力データは、画像データ又はサンプリングされた音声信号を含むことができる。例えば、画像データは、複数の画像画素値を含んでもよい。データは、スカラー整数、スカラー浮動小数点、パック整数(packed integer)、パック浮動小数点(packed floating point)、ベクトル整数、ベクトル浮動小数点等のような様々なデータタイプとすることができる。
【0046】
図2は、CNNを適用するためにここに開示されるシステムの例示的なアーキテクチャを示す。当該システムは、CNNシステムの適用を実装する集積回路210を含んでもよい。当該システムはまた、集積回路210により処理されるべきデータを配置及び記憶するためのメインプロセッサ201及びメインメモリ203を含んでもよい。集積回路は、乗算、追加及び他の関係する演算を実行するための計算ユニット207と、計算ユニットに供給されるべきパラメータ、バイアス及び入力データのような項目のセットを記憶するためのオンボードメモリユニット209と、集積回路とメインプロセッサ201との間のデータ送信を処理するための通信ユニット211と、様々な他の機能回路とを含んでもよい。いくつかの実施形態では、集積回路210は、項目のセットを隣接空間に記憶するように構成されたランダムアクセスメモリ(RAM:random-access memory)と、命令によりトリガーされた並列演算を実行するように構成された複数の乗算器、及び複数の乗算器に接続された1つ以上のマルチプレクサを含む計算ユニットとを含んでもよく、1つ以上のマルチプレクサは、複数の所定のアドレスからの1つのオフセットを使用することにより、並列演算のために複数の乗算器に送信されるべき項目のセットのサブセットを生成するようにプログラムされる。
【0047】
当該システムは、データ管理及び処理に使用されてもよい。処理されるべきデータは、デバイス205によりキャプチャされ、プロセッサ201に送信されてもよい。例えば、入力データは、画像センサ205によりキャプチャされた画像データでもよい。プロセッサにより受信された入力データは、チップ210のハードウェア構成に従って配置及び編成されてもよい。次いで、配置された入力データは、メインメモリ203内の隣接空間に記憶されてもよい。CNN処理に使用される複数のカーネルパラメータ、バイアス及び様々な他のデータを含む1つ以上のCNNモデルが、メインメモリに記憶されてもよい。CNNモデルデータ及び入力データは、プロセッサ210により発行されたデータ転送命令に応じて、バッチアクセスモジュール211によりチップに送信されてもよい。CNNモデルデータ及び入力データは、同じ通信リンクを使用して送信されてもよく、或いは送信されなくてもよい。CNNモデルデータ及び入力データは、同じオンチップメモリに送信されてもよく、或いは送信されなくてもよい。いくつかの場合、CNNモデルデータは、メインメモリからオンチップRAM209に転送されてもよいが、入力データは、チップ上の入力データバッファに転送されてもよい。典型的には、入力データとCNNモデルデータとの双方は、オンチップRAMの隣接領域に転送されて記憶される。データは、RAMとメインメモリとの間で同じ記憶レイアウトを有してもよい。更なる命令がメインメモリからも送信される。命令は、命令デコーダ213により制御信号にデコードされ、チップの計算ユニット207内で計算ユニットとオンチップRAMとの間のデータフロー及びデータパスを制御するために使用されてもよい。入力データ、パラメータ及びバイアスは、RAMから取得され、所定のデータ経路又はデータパスに従ってチップの計算ユニットに供給されてもよい。1つ以上のマルチプレクサ215は、命令からデコードされた制御信号に従ってデータ経路又はデータパスを制御するために使用されてもよい。演算の層の出力結果は、次の演算の層のための入力特徴マップとして計算ユニットにフィードバックされてもよい。次いで、CNNシステムの最終出力結果は、バッチアクセスモジュールによりメインメモリに戻すように転送されてもよい。
【0048】
集積回路210は、いずれか適切な計算プラットフォーム、マイクロプロセッサ又は論理デバイスとすることができる。集積回路は、ハンドヘルドデバイス、タブレット、ノートブック、システム・オン・チップ・デバイス、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタントのようないずれか他のデバイス、及びマイクロコントローラ、デジタルシグナルプロセッサ、システム・オン・チップ、ネットワークコンピュータ、セットトップボックス、ネットワークハブ、スマート機器のような埋め込みアプリケーション、又はここのどこかの箇所に記載の機能及び動作を実行できるいずれか他のシステムに統合できる。
【0049】
メモリユニット209は、集積回路に搭載されてもよい。メモリユニットは、スタティック・ランダムアクセスメモリ(SRAM:static random-access memory)、ダイナミック・ランダムアクセスメモリ(DRAM:dynamic random-access memory)、シンクロナス・ダイナミック・ランダムアクセスメモリ(SDRAM:synchronous dynamic random-access memory)、ダブルデータレート(DDR:double data rate)、ダブルデータレート・シンクロナス・ダイナミック・ランダムアクセスメモリ(DDR SDRAM:double data rate synchronous dynamic random-access memory)、DDR、DDR2、DDR3、T-RAM、Z-RAM等を含むいずれか適切なRAMとすることができる。
【0050】
計算ユニット207は、CNNの異なる層を実行するための複数の計算コンポーネントを含んでもよい。いくつかの実施形態では、複数の計算コンポーネントは、CNNの異なる層の要件に適合されてもよい。例えば、複数の計算コンポーネントは、畳み込み層における畳み込み演算、プーリング層の平均又は最大演算、及び/又は完全接続層におけるドット積演算を実行するために使用されてもよい。いくつかの場合、計算ユニットの構成は、複数の計算回路の間の相互接続を通じて制御されてもよい。
【0051】
計算ユニット207は、計算回路のアレイを含んでもよい。計算回路は、演算論理ユニット(ALU:arithmetic logic unit)を含んでもよい。ALUは、データフロー要件に依存し得るネットワークを介して接続されるアレイ内にあってもよい。いくつかの場合、計算ユニットは、FPGAのような細かい空間アーキテクチャの形式になってもよい。特定用途向け集積回路(ASIC:application-specific integrated circuit)のような他のアーキテクチャも使用できる。いくつかの場合、計算回路は、複数の乗算器を含んでもよい。いくつかの場合、計算回路は、複数の乗算器・累算器ユニット(MAC:multiplier-accumulator unit)を含んでもよい。計算ユニットは、乗算を実行して、続いて加算/累算を実行できるALUデータパスを含んでもよい。いくつかの場合、FIFOが、計算ユニットに対して出入りするトラフィックを制御するために使用されてもよい。計算ユニットは、複数の乗算器及び累算器を含んでもよい。例えば、計算ユニットは、32個、64個、128個、256個、512個及び更に多くの乗算器を含んでもよい。各乗算器は、入力信号の値を受信するための第1の入力と、重み又はカーネルパラメータを受信するための第2の入力とを含んでもよい。乗算器は、整数入力又は固定小数点入力の乗算演算を実行するハードウェアコンポーネントでもよい。乗算器は、例えば、8ビット又は16ビットの固定小数点乗算器でもよい。
【0052】
累算器は、乗算器の出力からの積を合計するための1つ以上の加算器を含んでもよい。加算器は、数入力の加算器でもよい。例えば、加算器は、2入力の加算器、4入力の加算器、8入力の加算器でもよい。いくつかの場合、加算器及び乗算器の入力は、1つ以上のマルチプレクサにより選択的に制御されてもよい。
【0053】
1つ以上のマルチプレクサ215は、複数の乗算器及び/又は加算器に接続されてもよい。1つ以上のマルチプレクサは、データを複数のマルチプレクサに送信するための所定の複数の経路のうち1つを決定するために、制御信号のセットを受信してもよい。制御信号は、画像バッファ又はRAM内の前の層の出力のいずれかからの計算のための入力ソース選択、パラメータの選択、バイアス、RAM内の入力特徴等を含む、マルチプレクサのための様々なコマンドからデコードされてもよい。マルチプレクサはまた、畳み込み層に組み込まれた調整器の有効化を制御するための1つ以上の調整器に接続されてもよい。例えば、マルチプレクサは、調整器を制御するための、活性化関数有効化命令からデコードされた制御信号を受信してもよい。いくつかの場合、1つ以上のマルチプレクサはまた、層の計算結果をメモリに出力するために含まれてもよい。マルチプレクサは、1つのデータ入力及び複数の選択入力を受け取ってもよく、これらはいくつかの出力を有する。これらは、選択入力の値に依存して、データ入力を出力のうち1つに転送する。
【0054】
各マルチプレクサは、n個の入力のための数個の入力セレクタピンを含み、1つの選択された入力を出力してもよい。マルチプレクサは、n対1のいずれかのサイズでもよく、nは2、4、8、16、32等とすることができる。いくつかの場合、少数の大型マルチプレクサが使用されてもよい。いくつかの場合、多数の小型マルチプレクサが使用されてもよい。いくつかの場合、マルチプレクサは、大型マルチプレクサを構成するように一緒につなげられてもよい。
【0055】
いくつかの実施形態では、同じ計算ユニットが、コンポーネントの構成及び相互接続を変更することなく、畳み込み、平均、最大値又はドット積演算を実行するために使用されてもよい。いくつかの実施形態では、異なる計算回路が、異なるタイプの層に使用されてもよい。例えば、異なるセットの計算回路が、畳み込み層、プーリング層及びアップスケーリング層に対応してもよい。
【0056】
集積回路は、チップ上の様々な内部通信及び外部メモリとチップとの間の通信のための他のコンポーネントを更に含んでもよい。コンポーネントは、入力又は中間データの効率的な再利用のためのバッファを含んでもよい。バッファのサイズは、100kBから500kBのようないずれかの範囲とすることができる。
【0057】
上記のように、マルチプレクサに入力される制御信号は、1つ以上の命令デコーダ213によりデコードされてもよい。命令デコーダは、命令をデコードし、1つ以上のマイクロ演算、マイクロコード入力点、マイクロ命令、マルチプレクサのための制御信号、他の命令、又は他の制御信号の出力を生成してもよく、これらは、元の命令からデコードされるか、或いは元の命令を反映するか、或いは元の命令から導出される。デコーダは、様々な適切な機構を使用して実現できる。例えば、デコーダは、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA:programmable logic array)、マイクロコード読み取り専用メモリ(ROM:read only memory)等を使用して実装できる。デコーダは、1つ以上のマルチプレクサに結合され、FIFOを介して命令を記憶するメインメモリに接続されてもよい。いくつかの場合、デコーダは、1つ以上の命令レジスタに記憶された命令をデコードするように構成されてもよい。
【0058】
集積回路はまた、1つ以上のレジスタを含んでもよい。レジスタは、命令、記憶アドレス、割り込み番号又はいずれかの種類のデータ(ビット系列又は個々の文字等)を保持してもよい。レジスタは、様々なサイズを有してもよく、例えば、レジスタは、長い命令を保持するために長さが64ビットでもよく、或いはより短い命令のためのハーフレジスタでもよい。レジスタについての詳細は後述する。
【0059】
集積回路は、外部プロセッサ又はメモリとの通信を補助するための様々な他のコンピュータアーキテクチャを含んでもよい。通信モジュールは、命令及びデータ転送のための適切な手段を含んでもよい。周辺コンポーネント相互接続カード、PCIエクスプレス、PCI-X、HyperTransport等を含むがこれらに限定されないコンピュータバスのような通信のための様々な手段が使用できる。集積回路は、データバス(例えば、AXI4liteバス)を通じてメインメモリ203からコマンド及びパラメータを受信し、FIFOインターフェースを通じてメインメモリバッチアクセスモジュール211と通信する。メインメモリバッチアクセスモジュールは、データバスを通じて外部メモリにアクセスできる。いくつかの場合、割り込み機構は、正確な時間測定を提供するために、集積回路と外部プロセッサとの間で有効化されてもよい。いくつかの場合、データローディングルーチンは、メインメモリへの高帯域幅アクセスを達成するために、直接メモリアクセス方法で実装されてもよい。メインメモリからオンチップRAMにロードされるべきデータは、カーネルパラメータ、バイアス等のようなCNNモデルに含まれる様々なデータを含んでもよい。データは、メモリ上の隣接空間に予め配置されて記憶されてもよい。いくつかの場合、隣接空間のアドレス及びサイズは、データを送信するための命令において指定されてもよい。データは、チップ上のRAMに直接ロードされてもよい。いくつかの場合、データは、直接メモリアクセス方法でオンチップRAMに直接書き込まれてもよい。
【0060】
当該システムは、集積回路の外部のメインプロセッサ201を含んでもよい。プロセッサは、データを集積回路にロードする前に、パラメータ及び/又は入力データを前処理又は配置するように構成されてもよい。プロセッサは、パラメータ及び/又は入力データをグループに配置してもよい。いくつかの場合、グループはCNNシステムの層に対応してもよい。
【0061】
プロセッサは、中央処理装置(CPU:central processing unit)、グラフィック処理装置(GPU:graphic processing unit)又は汎用処理装置のようなハードウェアプロセッサでもよい。プロセッサは、計算プラットフォーム又はマイクロプロセッサ、論理デバイス等のようないずれか適切な集積回路とすることができる。開示は、プロセッサに関して説明されるが、他のタイプの集積回路及び論理デバイスも適用可能である。データ配置及びデータ操作は、データ操作を実行可能ないずれかのプロセッサ又は機械に適用可能である。プロセッサ又は機械は、データ演算能力により限定されなくてもよい。プロセッサ又は機械は、512ビット、256ビット、128ビット、64ビット、32ビット又は16ビットのデータ演算を実行してもよい。
【0062】
いくつかの実施形態では、プロセッサは、コンピュータシステムの処理ユニットでもよい。コンピュータシステムに関する詳細は、後述する
図15を参照して説明する。
【0063】
いくつかの場合、プロセッサ201は、入力データを受信するために他のデバイス又はデータソースに結合されてもよい。入力データはCNNシステムにより分析されるべきである。入力データは、画像、テキスト、オーディオ等とすることができる。入力データは、他のデバイス又はシステムから取得されてもよい。例えば、入力データは、撮像デバイス205によりキャプチャされた画像データとすることができる。撮像デバイスにより生成された画像データは、静止画像(例えば、写真)、動画像(例えば、ビデオ)又はこれらの適切な組み合わせでもよい1つ以上の画像を含むことができる。画像データは、多色性(例えば、RGB、CMYK、HSV)又は単色性(例えば、グレースケール、白黒、セピア)とすることができる。画像データは、画像フレームの解像度に依存して様々なサイズを有してもよい。画像フレーム解像度は、フレーム内の画素数により定義されてもよい。例えば、画像解像度は、約128×128画素、32×32画素、64×64画素、88×72画素、352×420画素、480×320画素、720×480画素、1280×720画素、1440×1080画素、1920×1080画素、2048×1080画素、3840×2160画素、4096×2160画素、7680×4320画素又は15360×8640画素以上でもよい。
【0064】
いくつかの実施形態では、プロセッサは、入力データを前処理するか、及び/又は入力データを粗く分析するように構成されてもよい。いくつかの場合、プロセッサは、メモリ空間を節約するように入力データを再処理してもよい。いくつかの場合、プロセッサは、CNN演算に使用されるべきパラメータを決定するために、予備情報を得るための、画像データの粗い分析を実行してもよい。例えば、入力データが画像であるとき、画像は、例えば、所望のデータサイズに一致するようにサイズ変更されてもよい。いくつかの場合、画像はセグメントに分割され、次いで、処理後に元の画像にマージして戻される。いくつかの場合、画像は、いずれかの適切なダウンサイジング技術を使用してダウンサイジングされてもよい。いくつかの場合、画像は分割されてもよい。画像は、画像から抽出されたターゲットに従って分割されてもよい。画像は、関心のオブジェクト又はターゲットパターンに従って予め分類されてもよい。例えば、画像は、画像に含まれる車のような特定のターゲットを抽出するように検査されてもよい。したがって、車両タイプに対応するCNNモデルは、更なるCNN分析のためにプロセッサにより選択されてもよい。様々なパターン認識又はパターンマッチング技術が、教師あり又は教師なし機械学習技術のような事前分類プロセスに使用されてもよい。
【0065】
図3は、システムのメインメモリ300内の例示的なデータ編成を示す。メインメモリは、プロセッサにより使用されてもよく、或いはプロセッサに結合されてもよい。メインメモリは、スタティック・ランダムアクセスメモリ(SRAM:static random-access memory)、ダイナミック・ランダムアクセスメモリ(DRAM:dynamic random-access memory)、シンクロナス・ダイナミック・ランダムアクセスメモリ(SDRAM:synchronous dynamic random-access memory)、ダブルデータレート(DDR:double data rate)、ダブルデータレート・シンクロナス・ダイナミック・ランダムアクセスメモリ(DDR SDRAM:double data rate synchronous dynamic random-access memory)、DDR、DDR2、DDR3、T-RAM、Z-RAM等を含むいずれか適切なメモリとすることができる。
【0066】
メインメモリは、様々な命令と、入力データを含む処理用のデータと、CNNシステムにロードされるべきパラメータとを記憶してもよい。いくつかの場合、メインメモリはまた、CNNシステムの出力結果及び/又はCNN演算中に生成された中間結果を受信してもよい。データは、CNNシステムを使用して分析されるべき入力データを含んでもよい。入力データは、画像、テキスト、オーディオ等とすることができる。入力データは、他のデバイス又はシステムから取得されてもよい。例えば、入力データは、撮像デバイスによりキャプチャされた画像データでもよい。撮像デバイスにより生成された画像データは、静止画像(例えば、写真)、動画像(例えば、ビデオ)又はこれらの適切な組み合わせでもよい1つ以上の画像を含むことができる。
【0067】
画像は、入力バッファ301に記憶される前に前処理されてもよい。画像は、例えば、所望のデータサイズに一致するようにサイズ変更されてもよい。いくつかの場合、画像はセグメントに分割され、次いで、処理後に元の画像にマージして戻される。いくつかの場合、画像は、いずれかの適切なダウンサイジング技術を使用してダウンサイジングされてもよい。いくつかの場合、画像は分割されてもよい。画像は、画像から抽出されたターゲットに従って分割されてもよい。画像は、関心のオブジェクト又はターゲットパターンに従って予め分類されてもよい。例えば、画像は、画像に含まれる車のような特定のターゲットを抽出するように検査されてもよい。したがって、車両タイプに対応するCNNモデルは、更なるCNN分析のために選択されてもよい。様々なパターン認識又はパターンマッチング技術が、教師あり又は教師なし機械学習技術のような事前分類プロセスに使用されてもよい。いくつかの実施形態では、メインメモリは、CNNモデルに関する情報及びメインメモリの全体レイアウトを保持するための空間インデックス302を含む。いくつかの場合、空間インデックス302のサイズは2MB未満である。
【0068】
上記のように、ターゲット分類が識別されると、対応するCNNモデルが選択されてもよい。1つ以上のCNNモデルは、メインメモリの静的空間305に記憶されてもよい。いくつかの実施形態では、各モデルのためのネットワークパラメータ及び対応する命令は、約2MBを必要とし、約32MBは静的空間305に割り当てられる。いくつかの場合、各モデルは、項目のカテゴリ又はクラスに関連付けられてもよい。例えば、人間に関連するモデルは、異なる人間のタイプ(例えば、男性、女性、子供又は大人)を分類するためにCNN演算において使用されるべきパラメータを含んでもよいが、車両に関連するモデルは、CNNシステムが異なる車両のタイプを分類するためのパラメータを含んでもよい。1つ以上のモデルは、予め訓練されてもよい。各モデルは、CNNシステムの異なる層についての複数のパラメータを含んでもよい。後述するように、複数のパラメータは、メインメモリと集積回路との間のトラフィックを低減するように配置及びグループ化されてもよい。
【0069】
上記のように、CNNモデルに含まれるデータは、メインメモリからオンチップRAM320にロードされてもよい。データは、カーネルパラメータ、バイアス等のようなCNNモデルに含まれる様々なデータを含んでもよい。データは、メモリ内の隣接空間に予め配置されて記憶されてもよい。いくつかの場合、隣接空間のアドレス及びサイズは、データを送信するための命令において指定されてもよい。データは、チップ上のRAMに直接ロードされてもよい。いくつかの場合、データは、直接メモリアクセス方法でオンチップRAMに直接書き込まれてもよい。
【0070】
いくつかの実施形態では、メインメモリはまた、データが集積回路のSRAMからメインメモリに転送又は溢れる必要がある場合の動的空間303を含んでもよい。いくつかの場合、一時データ及びいくつかの出力データを保持するために、動的空間303のサイズは約6MBである。溢れたデータは、CNN演算中に生成される中間結果でもよい。CNNシステムの最終出力はまた、集積回路からメインメモリに送信され、動的空間303に記憶されてもよい。いくつかの場合、分類スコアのみがメインメモリに送信されてもよい。いくつかの場合、各層の出力結果がメインメモリに送信されてもよい。
【0071】
メインメモリは、命令307の記憶のための空間を含んでもよい。様々な命令セットは、集積回路のFIFOを介してメインメモリから1つ以上のバッファにロードされてもよい。命令は、CNNシステム内の異なるレベルの動作に対応してもよい。例えば、命令は、層のタイプ(例えば、畳み込み、プーリング、アップスケール等)のようなCNNの層に対応するハイレベルの命令、マトリクス/マトリクス若しくはベクトル/マトリクスデータレベルでの畳み込み、要素毎の畳み込み、アップスケール、リターン、又はプーリングを含むがこれらに限定されない、異なるタイプの動作に対応するローレベルの命令、及びメインメモリとチップ上のSRAMとの間の読み取り/書き込み、及びチップ上のバッファから計算ユニットへのデータのフェッチのような様々なデータ転送命令を含んでもよい。
【0072】
命令は、計算命令、論理命令、制御命令及びデータ転送命令を含むが、これらに限定されない様々なタイプを有してもよい。異なる命令は、有効ビット数において異なってもよい。命令長は固定されてもよく、或いは固定されなくてもよい。いくつかの場合、命令長は、メモリのアライメント及びロード/記憶/デコードロジックの設計の簡素化のために、固定されてもよい(例えば、64ビット)。
【0073】
命令は、マトリクス・マトリクス乗算命令のようなマトリクス命令を含んでもよい。命令は、入力特徴マップマトリクス及びパラメータマトリクスのアドレス及びサイズを指定してもよい。命令は、畳み込み演算を呼び出すために使用されてもよい。命令は、マトリクス・マトリクス乗算及び要素毎の活性化命令を含んでもよい。この命令は、畳み込み及びReLU活性化を命令するために使用されてもよい。命令は、入力特徴マップマトリクス、パラメータマトリクス及びバイアスベクトルのアドレス及びサイズを指定してもよい。命令は、プーリング演算のための論理命令(例えば、MAX比較関数ユニット)を含んでもよい。例えば、命令は、プーリングウインドウの中の最大値を探すために、畳み込み層により生成された出力要素を比較してもよい。
【0074】
上記のように、畳み込み層では、式に示される畳み込み演算は、高い並列処理で実行できる。しかし、かなりの量の中間データ、すなわち、畳み込み結果の部分和が、並列乗算器・累算器ユニットにより同時に生成される可能性があり、これは、更なる記憶を必要とし、更なるメモリ読み取り/書き込みエネルギーを消費する。幸いなことに、畳み込み層における重み共有特性のため、入力データは多くの演算にわたって共有できる。例えば、各フィルタ又はカーネルのパラメータは、同じ入力特徴マップ平面において数回再利用されてもよく、各入力特徴マップ画素は、いくつかのフィルタにわたって再利用されてもよい。したがって、中間結果の量を低減して共有パラメータ又は入力データの再利用を増加させるために、入力データ及びパラメータを配置する方法が提供され、これは、次に、計算ユニットとRAMとの間のデータ送信帯域幅を低減し、スループット及びエネルギー効率を増加させる。データ管理は、1つ以上の計算の層がかなり低減したメモリアクセス時間で同時に実行されることを可能にし、いくつかの場合、全体の層の出力特徴マップのみが出力されてメモリに記憶されてもよい。
【0075】
図4は、本発明の実施形態に従って、畳み込み計算のためのCNNパラメータ及び入力特徴を設定するシステムのプロセッサにより実行される例示的な方法400のフロー図を示す。方法400は、ハードウェア(例えば、回路、専用ロジック、プログラマブルロジック又はマイクロコード)、ソフトウェア(例えば、処理デバイス、汎用コンピュータシステム又は専用機械上で実行される命令)、ファームウェア又はこれらの組み合わせを含んでもよい処理ロジックにより実行されてもよい。いくつかの実施形態では、方法400は、
図2に関してプロセッサ201により実行されてもよい。
【0076】
例示目的のために、方法400は、行為又は動作の系列として示される。しかし、この開示による行為は、様々な順序で、及び/又はここに表現及び記載されていない他の行為と同時に、発生することができる。さらに、当該方法に記載される行為の全てが、当該方法を実装するために実行される必要はない。当業者は、当該方法400が、代替として、状態図又はイベントを介した一連の相互関係の状態として表されてもよいことを理解及び認識する。
【0077】
図4を参照すると、集積回路又はチップは、メインプロセッサにより予め配置されたデータ及びパラメータを含むメインメモリに結合されてもよい。チップは、CNNシステムに関連する畳み込み演算、平均又は最大プーリング演算、ReLU活性化又はドット積演算のうちいずれか1つを実行するように構成されてもよい処理ロジックを含んでもよい。ステップ401において、メインプロセッサは、プロセッサに結合されたメモリ内に1つ以上のCNNモデルを記憶してもよい。各CNNモデルは、カーネルパラメータ、バイアス又はハイパーパラメータ、及びCNN演算のための他のデータ(例えば、層のタイプ)を含んでもよい。いくつかの場合、CNNモデルは予め訓練されて、チップの外部のメインメモリに記憶されてもよい。いくつかの場合、CNNモデルは、モデルが訓練されるべきパラメータ及びデータの初期値を含み得るように訓練されるべき初期モデルでもよい。メインプロセッサは、CNNモデルの全てのパラメータがメモリ内の隣接空間にコンパクトに記憶できるように、各CNNモデルに関連するパラメータを配置してもよい。いくつかの場合、パラメータは、CNN内の畳み込み層に関連する各グループによって、複数のグループに分類されてもよい。層/グループ内のパラメータは、隣接空間に連続して配置及び記憶されてもよい。同じ層内のパラメータの記憶のための隣接空間は、アドレス及びサイズにより識別できる。いくつかの場合、アドレスは隣接空間の先頭アドレスとすることができる。いくつかの場合、アドレスは、隣接空間の先頭アドレスから基づくオフセットとすることができる。CNNモデルは、1つ以上の畳み込み層を含んでもよく、したがって、パラメータの1つ以上のグループを含んでもよい。パラメータ記憶のためのグループ間/層間順序は、CNN演算の順序と同じでもよく、或いは同じでなくてもよい。いくつかの場合、後の畳み込み層に関連するパラメータは、前の層の前のアドレスで記憶されてもよい。いくつかの実施形態では、隣接空間は、複数の領域に分割されてもよく、各領域は隣接してよい。いくつかの場合、各領域はスライスに更に分割されてもよい。各スライスは、隣接空間でもよい。データ配置に関する詳細は後述する。
【0078】
ステップ403において、メインプロセッサは、入力値を受信してもよい。入力値は、画像又は音声信号、テキストのような入力データでもよく、これから特定のパターンがCNNシステムにより分析される。入力データは、いずれかのフォーマットであり、8ビット、16ビット、32ビット、又はデータストレージに適切に記憶され得るいずれかの数のビットのようないずれかのデータ長を有することができる。入力データは、どのCNNモデルがCNN演算に使用されるべきかを決定するために、メインプロセッサにより処理されてもよい。例えば、入力データが画像データである場合、いずれかの適切な画像処理技術が、画像からパターン又はターゲットを抽出し、抽出された情報(例えば、車両、動物、人間の表情、ジェスチャ等)に従ってCNNモデルを選択するために使用されてもよい。CNNモデルは、様々な基準に基づいて選択されてもよい。例えば、CNNモデルは、入力データに含まれるターゲットの分類又はカテゴリ、入力データのタイプ(例えば、オーディオ、画像、テキスト等)、及び入力データの様々な他の特性に従って選択されてもよい。他の例では、CNNモデルは、CNN分析の目標又はCNN演算の性能要件(例えば、計算速度、能力等)に基づいて選択されてもよい。
【0079】
ステップ405において、メインプロセッサは、入力データを配置し、データをメインメモリ上の空間に記憶してもよい。メインメモリに記憶されたデータは、生の入力データでもよく、或いはメインプロセッサにより再配置された処理済の入力データでもよい。例えば、処理済の入力データは、ダウンサイジングされた画像データ又はセグメント化された画像データでもよい。いくつかの場合、入力データは、選択されたCNNモデルに従って配置されてもよい。いくつかの場合、入力データは、CNNデータフロー又はデータ送信経路を決定するチップの所定の構成に従って配置されてもよい。いくつかの場合、入力データは、CNNシステムにおけるデータフロー又はデータ送信経路のためのチップの所定の構成に適合するように配置されてゼロパディングされてもよい。いくつかの場合、入力データは、メモリ内の隣接空間に記憶されるように配置されてもよい。隣接空間は、空間のアドレス及びサイズにより識別されてもよい。隣接空間は、複数の隣接スライスを含んでもよい。入力データの配置は、パラメータの配置と同様でもよい。
【0080】
ステップ407において、入力データ、様々なCNNモデルパラメータ及び関連データは、メインメモリからチップ上のランダムアクセスメモリ(RAM:random-access-memory)に送信されてもよい。送信されるべきデータは、配置された入力データ、パラメータ、及び選択されたCNNモデルに関連するバイアス、命令セットのような他のデータを含んでもよい。データは、オンチップRAMにロードされ、メインメモリに記憶されたデータと同様の方式で記憶される。例えば、パラメータ及び入力データは、依然として、空間のアドレス及びサイズにより識別できる隣接空間に記憶されてもよい。隣接空間は、1つ以上の隣接領域に分割されてもよい。隣接空間又は領域は、1つ以上の隣接スライスに分割されてもよい。スライスは、隣接領域の基本アドレス及びスライスのサイズに従ってオフセットアドレスにより識別されてもよい。いくつかの場合、スライスのサイズは、層内のパラメータの総サイズ及びスライスの総数に依存して可変でもよい。スライスの総数は、変数又は固定数でもよい。いくつかの場合、スライスの総数及びスライス方向に沿ったユニット数は、一緒に計算ユニットによりバッチ方式で処理されるべきデータブロックを規定する。いくつかの場合、スライスのサイズは所定のサイズでもよいが、スライスの総数は可変でもよい。スライスのサイズは、1バイトから数千バイトのような広い範囲で変化してもよい。例えば、3つのチャネル内に128×128ピクセルを有する入力画像と、3つのチャネル内に16個の5×5のカーネルを有するCNNの第1の層とが与えられると、システムは、入力画像を保存するための8つのスライスを有することを選択できる。各スライスのサイズは、入力画像内の全ての特徴に適合するように、8,192B(2〜13乗)とすることができる。このサイズはまた、以下に更に説明するように、所定のチップレイアウトの1つを利用するようにパディングを可能にする。当該システムはまた、CNN重みを記憶するための8つのスライスを有することを選択でき、各スライスは約150Bを有し、CNNバイアスを記憶するための4つのスライスを有する。
【0081】
いくつかの場合、RAM内の隣接空間は、メインメモリ内の隣接空間と同じサイズを有してもよい。RAM内の隣接部分は、データの配置を交互にすることなく、メインメモリ内の隣接空間からデータを受信してもよい。いくつかの場合、データ配置に関する情報もまた、RAMに送信されてもよい。このような情報は、隣接空間のアドレス及びサイズ、隣接領域のアドレス及びサイズ、スライス番号、スライスインデックス、隣接領域内のオフセット等を含んでもよい。当該情報は、命令の中に、或いはメインメモリからチップに送信されるデータと共に含まれてもよい。
【0082】
プロセッサは、選択されたCNNを所与の入力特徴に適用するための命令(ハイレベルの関数呼び出しを含む)を発行する。このような命令は、上記のように、最初にメモリ内の特定の領域に記憶される。次いで、選択されたCNNに関連する命令セットは、集積回路のFIFOを介して、メインメモリから1つ以上のバッファに送信されてもよい。命令は、選択されたCNNモデル内の異なるレベルの動作に対応してもよい。例えば、命令は、層のタイプ(例えば、畳み込み、プーリング、アップスケール等)のようなCNNの層に対応するハイレベルの命令、マトリクス/マトリクス若しくはベクトル/マトリクスデータレベルでの畳み込み、要素毎の畳み込み、アップスケール、リターン、又はプーリングを含むがこれらに限定されない、異なるタイプの動作に対応するローレベルの命令、及びメインメモリとチップ上のSRAMとの間の読み取り/書き込みのような様々な外部データ転送命令、及びバッファからチップ上の計算ユニットへのデータのフェッチのような内部データフロー命令を含んでもよい。
【0083】
データ送信は、命令に応じて実行されてもよい。命令は、プロセッサから発行されてもよい。例えば、データ送信は、プロセッサ上で動作するソフトウェア又はアプリケーションにより制御できる。命令は、入力データを記憶する隣接空間を一緒に識別する少なくともアドレス及びサイズと、CNNモデルのパラメータを記憶する隣接空間を識別するアドレス及びサイズとを含んでもよい。例えば、入力データ又はパラメータのサイズは、データ転送命令におけるデータ幅オペランドにより指定されてもよい。いくつかの場合、データ転送命令はまた、グループ/層内のスライスのオフセット及びスライスの所定のサイズを含んでもよい。命令は、FIFOを介して集積回路に送信され、デコーダによりデコードされてもよい。次いで、デコーダにより生成された制御信号は、メインメモリバッチアクセスモジュールに対してメモリからSRAMにデータをロードするようにトリガーしてもよい。
【0084】
ステップ409において、全てのCNN演算が行われた後に、割り込み制御信号がチップ上のデコーダにより生成され、メインメモリバッチアクセスモジュールに送信され、RAMからメインメモリに出力データを送信するようにトリガーする。いくつかの場合、CNNシステムの出力結果は、分類スコアベクトルでもよい。出力結果は記憶されてもよく、及び/又はメインメモリに結合されたコンピュータシステム/プロセッサを介してユーザに提示されてもよい。分類結果は、様々な方法で使用でき、様々な用途に適用できる。例えば、出力結果は、ユーザに対してディスプレイデバイス上に表示でき、或いは他のデバイスを制御するための制御信号又は命令を生成するために使用できる。
【0085】
上記のように、CNNに使用されるパラメータ及び様々な他のデータ(例えば、バイアス)は、メインメモリ及びチップ上のRAMに記憶されるように配置されてもよい。パラメータ及び様々な他のデータ(例えば、バイアス)は、複数のグループに分類されてもよい。グループ化されたパラメータは、各領域がグループに対応する複数の領域に記憶されてもよい。CNNのための様々なデータは、CNNの異なる層に従ってグループ化されてもよい。いくつかの実施形態では、複数のグループは、CNNの複数の層に対応してもよい。いくつかの場合、グループは、畳み込み層、完全接続層のような層に対応する。いくつかの場合、グループは、2つ以上の層又は異なる演算に対応する。例えば、グループは、畳み込み層及びプーリング層、畳み込み層及びReLU活性化、畳み込み層及びアップスケール層、完全接続層及びReLU活性化層等に対応してもよい。
【0086】
図5は、システムのチップ上のメインメモリ又はランダムアクセスメモリ(RAM:random access memory)内のCNNパラメータの例示的な配置を示す。図示の空間501は、CNNモデルに関連するデータの記憶のための隣接空間でもよい。データは、CNNシステムで使用されるパラメータでもよい。データはまた、CNNシステムのためのバイアスのような他のデータを含んでもよい。CNNは、1つ以上の畳み込み層を含んでもよい。異なる畳み込み層は、異なるカーネル数、異なるカーネルサイズ及び異なるチャネル数を有していてもよく、或いは有さなくてもよい。図面に示すパラメータは、各層についてのカーネルパラメータであるが、隣接空間はまた、各層についてのバイアスのような他のデータを記憶してもよい点に留意すべきである。いくつかの場合、全てのデータが複数の乗算器のための入力として使用される。いくつかの場合、データのいくつかは複数の除算器のための入力として使用されるが、他のものは使用されない。図面に示すように、パラメータは、複数の乗算器に並列に供給されるべきである。当該例では、CNNは5つの畳み込み層を含んでもよい。層0 503は、入力層でもよい。層0は、507に示すように、四次元パラメータを含んでもよい。例えば、層0のパラメータは、4つのカーネルに対応する4×2×2×2×8の次元を有し、各カーネルは、3つのチャネルにわたって2×2の平面である。パラメータは、メモリ内の隣接領域503に記憶されてもよい。データ点の系列K
iR
jS
mC
nは層0に含まれるパラメータを表し、iはカーネル(K)のインデックス数、j及びmは平面内のカーネルの行(R)及び列(S)のインデックスを表し、nはチャネル(C)のインデックスを表す。各隣接領域は、層に関連する複数のパラメータに対応してもよい。隣接領域は、層のパラメータの総数により決定される可変サイズを有してもよい。代替として、隣接領域は、隣接領域が整列され得るように、固定サイズを有してもよい。隣接領域は、異なる層の異なる数のパラメータに依存して完全に満たされてもよく、或いは満たされなくてもよい。いくつかの場合、隣接空間は、未使用空間を低減するために、密にパックされてもよい。例えば、小領域層5 505は、他の小領域層3と一緒に記憶されてもよく、或いは層1及び層2は、全体の空間501が隣接してコンパクトになり得るように、一緒に記憶されてもよい。異なるグループのパラメータは、未使用空間が低減され得るように、隣接領域の長さで整列される。接続空間は、未使用空間なしの、或いは低減した未使用空間の、メモリ上の空間を示してもよい。このようなタイプのデータ配置は、固定領域サイズに関するデータ構造アライメントを提供し、データ記憶のための総メモリ空間を節約する。
【0087】
層に関連するパラメータのグループ内のパラメータは、CNNについての情報に従って配置されてもよい。CNNに関する情報は、例えば、フィルタ/カーネル数[K]、チャネル数[C]及びフィルタサイズ[P]の別個の組み合わせを含んでもよい。いくつかの実施形態では、層に関連するデータが記憶される隣接領域内の空間は、複数のスライスに分割されてもよい。代替として、スライス数及び各スライスのサイズは、一般的に、カーネルサイズに基づいて決定されてもよい。畳み込み演算が異なる次元に沿って適用される順序に基づいて領域をスライスに分割するために、様々な他の方法が使用されてもよい。スライスへのパラメータの異なる配置は、計算ユニット内の異なるデータフローを決定してもよい。いくつかの実施形態では、スライス数及び各スライスのサイズは、チャネル数に基づいて決定されてもよい。いくつかの場合、スライス数は、チャネル次元のサイズとカーネル数との双方に基づいて決定されてもよい。上記のように、パラメータは、カーネル数、チャネル、平面サイズを含む四次元のような高次元である。平面サイズ(すなわち、カーネルサイズ)は、制御することが困難な入力データで分析されるべきオブジェクトに依存してもよい。カーネルサイズと独立して、チャネル数及びカーネル数のような比較的制御が簡単な次元に関連する固定帯域幅(すなわち、スライス数)を有するデータブロックを設計することが有利になり得る。代替として、制御が容易な次元がカーネルサイズであるとき、スライス数もまた、カーネルサイズに基づいて決定できる。いくつかの場合、K個のカーネル、C個のチャネル及び各カーネル内のP個パラメータに対応する畳み込み層のパラメータについて、スライス数はK*(C/NR)により決定でき、NRはデータブロックの行数である。いくつかの場合、行数は、C、K又はMに基づいてプロセッサにより決定される。スライス数は、並列の畳み込み演算のために複数の乗算器に供給されるデータのチャンクのサイズに基づいて決定されてもよい。いくつかの場合、データのチャンクのサイズは、ハードウェア構成に従って決定されてもよい。例えば、データのチャンクが4つの行のデータブロックであり、計算回路が4つの乗算器に供給される各入力で128個の入力値を取ることができるとき、スライス数は128/4/4=8である。このように、各クロックサイクルについて、同じオフセットの全てのスライスに配置されたデータは、同時に計算回路に読み取られる。
図6は、隣接領域内の割り当てられた空間内でスライスに記憶されるカーネルパラメータの例示的な配置を示す。いくつかの場合、スライスのサイズは、カーネルのサイズにより決定されてもよい。カーネルサイズ/パラメータ数が大きいほど、スライスサイズは大きくなる。図面に示すように、畳み込み層は4つのカーネルK0〜K3を含んでもよく、各カーネルは2×2のパラメータ(すなわち、R0〜R1、S0〜S1)を含んでもよく、各カーネルは8つのチャネルC0〜C7を有する。パラメータを記憶するための隣接空間は、8つのスライスPs1〜8に分割されてもよい。図示の例では、4つの行を指すそれぞれの行オフセットと、それぞれの2つの列/スライスが、8つのチャネルにわたってフィルタ内の2D平面の点(すなわち、K0R0S0C
i)に対応するパラメータを含んでもよい。或る点に対応するスライス数は、チャネル数により決定されてもよい。例えば、4つのチャネルが存在するとき、1つのスライスは、点に関するパラメータを記憶するのに十分になり得る。他の例では、16個のチャネルが存在するとき、4つのスライスが点に関するパラメータを記憶するために使用されてもよい。
【0088】
いくつかの実施形態では、スライス内のパラメータは、スライス数の開始点から同じオフセットに記憶された全ての項目が並列演算に使用されるように配置されてもよい。このように、パラメータのチャンクは、スライスのインデックス又はスライス数及びオフセット又は行数により識別されてもよい。パラメータのチャンクは、並列の畳み込み演算のために複数の乗算器に供給されてもよい。パラメータのチャンクは、1つ以上の行及び1つ以上のスライスを含むデータブロックでもよい。いくつかの場合、数個の行がクエリのためのデータブロックを提供してもよく、このような複数行のデータブロックは、一度に1つのクエリを順次に表すように到着してもよい。例えば、第1のクエリは、パラメータからの最初の4つの行及び8つのスライスの全てを複数の乗算器に到着させてもよく、第2のクエリは、処理のために、行5〜8を乗算器に到着させてもよい。各パラメータは、スライスインデックス及びオフセットにより識別されてもよい。各パラメータは、8ビット、16ビット、32ビット等のようないずれかのサイズとすることができる。いくつかの場合、いくつかのバイトは、同じデータエントリを含むように結合される。
【0089】
入力データ又は入力特徴マップは、同様の方法でメインメモリ又はオンチップRAMに記憶されてもよい。入力特徴マップは、隣接空間に記憶されてもよい。隣接空間はまた、複数のスライスに分割されてもよい。各スライスは、隣接空間でもよい。スライス数は、チャネル数に基づいて決定されてもよい。スライス数は、並列の畳み込み演算のために複数の乗算器に供給されるデータのチャンクのサイズに基づいて決定されてもよい。いくつかの場合、データのチャンクのサイズは、ハードウェア構成に従って決定されてもよい。例えば、データのチャンクが4つの行のデータブロックであり、計算回路が4つの乗算器に供給される各入力で128個の入力値を取ることができるとき、スライス数は128/4/4=8である。このように、各クロックサイクルについて、同じオフセットの全てのスライスに配置されるデータは、同時に計算回路に読み取られる。
【0090】
いくつかの実施形態では、入力特徴に使用されるスライス数は、どのくらいのデータがサイクル当たり計算ユニットにより処理されるかに依存する。一般的に、スライス数はC*P/NRであり、NRはスライスの行数である。さらに、前の層は、入力データに対する現在の層の要件に従って、スライス内で出力データを生成すべきである。したがって、更に以下に説明するように、次の層がK4C8P4構成を有するとき、現在の層の出力は8つのスライスに書き込むことができ、次の演算がK1C16P8構成を有するとき、現在の層の出力は32個のスライスに書き込むことができ、次の演算がK8C16P1構成を使用するとき、現在層の出力は4つのスライスに書き込むことができる。
【0091】
図7は、隣接領域内のスライスに記憶される入力特徴の例示的な配置を示す。図面に示すように、入力特徴マップは、8つのチャネルC0〜C7にわたって平面次元で4×4(すなわち、H×W)でもよい。パラメータを記憶するための隣接空間は、8つのスライスIs1〜8に分割されてもよい。図示の例では、4つの行を指すそれぞれの行オフセットと、それぞれの2つの列/スライスが、8チャネルにわたってフィルタ内の2D平面の点に対応するパラメータ(すなわち、H0W0Ci)を一緒に記憶してもよい。点に対応するスライス数は、チャネル数により決定されてもよい。例えば、4つのチャネルが存在するとき、1つのスライスは、点に関するパラメータを記憶するのに十分になり得る。他の例では、16個のチャネルが存在するとき、4つのスライスが点に関するパラメータを記憶するために使用されてもよい。ハードウェア特性に依存して、いずれかの数のスライスが使用されてもよい。
【0092】
いくつかの実施形態では、スライス内の入力特徴マップは、複数のスライスの開始点から同じオフセットで記憶された全ての項目が並列演算に使用されるように配置されてもよい。このように、入力特徴マップデータのチャンクは、スライスのインデックス又はスライス数及びオフセット又は行数として識別される。入力特徴マップデータのチャンクは、並列の畳み込み演算のために複数の乗算器に供給されてもよい。入力特徴マップデータのチャンクは、1つ以上の行及び1つ以上のスライスを含むデータブロックでもよい。いくつかの場合、数個の行がクエリのためのデータブロックを提供してもよく、このような複数行のデータブロックは、一度に1つのクエリを順次に表すように到着してもよい。例えば、第1のクエリは、入力特徴マップからの最初の4つの行及び8つのスライスの全てを複数の乗算器に到着させてもよく、第2のクエリは、処理のために、行5〜8を乗算器に到着させてもよい。各入力特徴マップデータは、スライスインデックス及びオフセットにより識別されてもよい。各データは、8ビット、16ビット、32ビット等のようないずれかのサイズでもよい。いくつかの場合、いくつかのバイトは、同じデータエントリを含むように結合される。
【0093】
上記の例では、所定数の行及びスライスが、複数の乗算器を同時に使用して処理されてもよい。並列に処理されるべき行及びスライスの数は、データ記憶の異なる構成に対応してもよい。いくつかの場合、データが同じ構成で配置されるとき、同じ計算回路及び相互接続構成のセットが、畳み込み演算を実行するために使用できる。例えば、K4C8P4、K1C16P8及びK8C16P1のCNN構成について最適化されたチップ設計を有することが可能である。いくつかの場合、入力データ又はパラメータデータは、チャネル又はフィルタサイズに関係しつつ、データ記憶の所定の構成と整合されない可能性がある。この場合、入力データ又はパラメータデータは、データ配置がチップの所定の構成と整合されるように、ゼロでパディングされてもよい。
図8は、異なるサイズのカーネル及びチャネル数を収容するためにスライスをパディングする例を示す。上記の例では、メモリアクセスクエリは、4つの行及び8つのスライスのデータを占めてもよい。入力データが、128×128の画素及び3つのチャネルの次元を有する画像データ801である場合、入力データは、128×128×3の元の次元を有する入力データが、4つの行のクエリ構成に整列した128×64×8に変換されるように、ゼロの行でパディングされてもよい。パラメータがK個のカーネルからのものであり、それぞれが8つのチャネル803にわたって5×5のサイズである例(すなわち、5×5×3)では、パラメータデータが4行のクエリ構成で整列されるように5×3×8に変換されるように、パラメータはゼロでパディングされて配置されてもよい。カーネルのサイズを4倍にするか、或いはチャネル数を4倍にするために、ゼロは行の上部若しくは下部又は最初の列若しくは最後の列のような様々な位置に配置できる点に留意すべきである。他の例805に示すように、K個カーネルからのパラメータのそれぞれは、3つのチャネルにわたって3×3のパラメータ(すなわち、3×3×3)を有し、パラメータの配置が4行の8スライスのクエリと整列されるように3×2×8に変換されるように、ゼロでパディングされる。
【0094】
他の態様では、チップ上の集積回路が、マトリクス・マトリクス及び/又はマトリクス・ベクトル乗算演算を実行するために提供される。
図9は、本発明の実施形態による畳み込み計算のためのチップの例を示す。チップの計算ユニットは、CNNモデルに関連する命令に応じて複数の並列演算を実行してもよい。計算ユニットは、CNNにおける演算を実行するための複数の計算回路を含んでもよい。計算ユニットは、畳み込み層に含まれる複数のカーネルによって入力値の畳み込みを実行するための複数の乗算器及び累算器を含んでもよい。同じ計算ユニットが異なる畳み込み層に使用されてもよい。データパスは、取得されて計算ユニットに供給されるべき入力特徴マップ及びカーネルを決定するように、1つ以上のマルチプレクサにより制御されてもよい。いくつかの場合、ReLU活性化演算が畳み込み層に含まれてもよい。同じセットの計算回路が、ReLU活性化を有する畳み込み層又はReLU活性化のない畳み込み層を実行するために使用できる。いくつかの場合、畳み込み層及びReLUは、中間結果をメモリに記憶せずに実行できる。いくつかの場合、活性化関数は、命令により有効化又は無効化されてもよい。いくつかの実施形態では、同じセットの計算回路が、畳み込み層、プーリング層、アップスケール、ReLU又は完全接続層を含む異なるタイプの層に使用できる。いくつかの場合、異なる演算が、演算に従ってデータパス又はデータフローを制御するために、マルチプレクサを使用することにより同じセットの計算回路を共有してもよい。いくつかの実施形態では、異なるセットの計算回路が、異なる層に関して使用されてもよい。例えば、第1のセットの計算回路が畳み込み層又は畳み込み及びReLUに使用されてもよく、第2のセットの計算回路がプーリングに使用されてもよく、第3のセットの計算回路が完全接続層に使用されてもよい。いくつかの場合、異なるセットの計算回路が、命令/制御信号に応じて異なる演算を実行するために決定されてもよい。同じセットの計算回路がCNNの異なる層に再利用される場合、演算が繰り返されてもよく、層の出力特徴マップは、計算ユニットの入力特徴マップとしてフィードバックされてもよい。異なるセットの計算回路がCNNの異なる層に使用される場合、第1の層に対応する第1のセットの計算回路からの出力結果は、異なる層に対応する第2のセットの計算回路への入力として受信されてもよい。例えば、プーリング層のための第2のセットの計算回路は、プーリング演算を実行するために畳み込み及びReLU層のための第1のセットの計算回路からの出力結果を受信してもよく、完全接続層のための第3のセットの計算回路は、ドット積又は要素毎の畳み込みを実行するために畳み込み又はプーリング層からの出力を受信してもよい。完全接続層からの結果は、入力値におけるパターンを検出するために使用されてもよい。様々な計算回路は、計算精度又はビット深度に関して構成可能であってもよく、或いは構成可能でなくてもよい。
【0095】
各層から生成された出力特徴マップは、次の層の演算に使用されるようにRAMに記憶されてもよい。出力特徴マップは、入力データと同じ方式で配置されてもよい。例えば、出力特徴マップは、隣接スライスに分割された隣接空間に記憶されてもよい。いくつかの場合、各層からの出力データをRAM上の異なるスライスに記憶することは、1つ以上のマルチプレクサにより制御されてもよい。例えば、スライスインデックスを示す制御信号が、メモリ内の対応するスライスに接続するマルチプレクサの出力ピンを選択するために使用されてもよい。いくつかの場合、前の層の入出力特徴マップを記憶するための空間は、後に生成される結果を記憶するために再利用されてもよい。隠れ層からの出力結果は、結果がCNNにおける層についての入力として使用された後に記憶されてもよく、或いは記憶されなくてもよい。いくつかの場合、隠れ層からの出力結果は、1つ、2つ、3つ、4つ、5つ以上の層の演算のために記憶されてもよく、次いで、結果を記憶するための空間は解放されて、後の出力結果のために再利用されてもよい。
【0096】
集積回路は、いずれか適切な計算プラットフォーム、マイクロプロセッサ又は論理デバイスとすることができる。集積回路は、ハンドヘルドデバイス、タブレット、ノートブック、システム・オン・チップ・デバイス、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタントのようないずれか他のデバイス、及びマイクロコントローラ、デジタルシグナルプロセッサ、ネットワークコンピュータ、セットトップボックス、ネットワークハブ、他のスマート機器のような埋め込みアプリケーション、又はここのどこかの箇所に記載の機能及び動作を実行できるいずれか他のシステムに統合できる。チップは、
図2に記載のものと同じ集積回路210とすることができる。
【0097】
メモリユニット901は、集積回路に搭載されてもよい。メインメモリは、CNN分析のためのデータ、パラメータ及び命令の記憶のために使用されてもよい。いくつかの場合、メインメモリはまた、CNNの出力結果を受信及び記憶してもよい。メモリユニットは、スタティック・ランダムアクセスメモリ(SRAM:static random-access memory)、ダイナミック・ランダムアクセスメモリ(DRAM:dynamic random-access memory)、シンクロナス・ダイナミック・ランダムアクセスメモリ(SDRAM:synchronous dynamic random-access memory)、ダブルデータレート(DDR:double data rate)、ダブルデータレート・シンクロナス・ダイナミック・ランダムアクセスメモリ(DDR SDRAM:double data rate synchronous dynamic random-access memory)、DDR、DDR2、DDR3、T-RAM、Z-RAM等を含むいずれか適切なRAMとすることができる。
【0098】
チップは、RAMとデータ通信する計算ユニット903を含んでもよい。計算ユニットは、CNNの異なる層を実行するための複数の計算コンポーネントを含んでもよい。いくつかの実施形態では、複数の計算コンポーネントは、CNNの異なる層の要件に適合されてもよい。例えば、複数の計算コンポーネントは、畳み込み層における畳み込み演算、プーリング層の平均又は最大演算、及び/又は完全接続層におけるドット積演算を実行するために使用されてもよい。いくつかの場合、計算ユニットの構成は、複数の計算回路の間の相互接続を通じて制御されてもよい。
【0099】
計算ユニットは、計算回路のアレイを含んでもよい。計算回路は、演算論理ユニット(ALU:arithmetic logic unit)を含んでもよい。ALUは、データフロー要件に依存し得るネットワークを介して接続されるアレイ内にあってもよい。いくつかの場合、計算ユニットは、FPGAのような細かい空間アーキテクチャの形式になってもよい。特定用途向け集積回路(ASIC:application-specific integrated circuit)のような他のアーキテクチャも使用できる。いくつかの場合、計算回路は、複数の乗算器を含んでもよい。いくつかの場合、計算回路は、複数の乗算器・累算器ユニット(MAC:multiplier-accumulator unit)を含んでもよい。計算ユニットは、乗算を実行して、続いて加算/累算を実行できるALUデータパスを含んでもよい。いくつかの場合、FIFOが、計算ユニットに対して出入りするトラフィックを制御するために使用されてもよい。計算ユニットは、複数の乗算器及び累算器を含んでもよい。例えば、計算ユニットは、32個、64個、128個又は256個の乗算器を含んでもよい。
【0100】
各乗算器は、入力信号の値を受信するための第1の入力と、重み又はカーネルパラメータを受信するための第2の入力とを含んでもよい。乗算器は、整数入力又は固定小数点入力の乗算演算を実行するハードウェアコンポーネントでもよい。乗算器は、例えば、8ビット又は16ビットの固定小数点乗算器でもよい。累算器は、乗算器の出力からの積を合計するための1つ以上の加算器を含んでもよい。加算器は、数入力の加算器でもよい。例えば、加算器は、4入力の加算器でもよい。
【0101】
いくつかの実施形態では、同じ計算ユニットが、コンポーネント及び相互接続を変更することなく、畳み込み、平均、最大値又はドット積演算を実行するために使用されてもよい。いくつかの実施形態では、異なる計算回路が、異なるタイプの層に使用されてもよい。例えば、図面に示すように、計算ユニットは、異なる機能ユニットを含んでもよい。異なる機能ユニットは、少なくとも、畳み込みユニット903-1と、プーリングユニット903-2と、アップスケールユニット903-3とを含んでもよい。いくつかの場合、各機能ユニットは、異なるセットの計算回路を使用して実装されてもよい。代替として、機能ユニットのうち2つ以上は、同じセットの計算回路を共有する。
【0102】
いくつかの場合、調整器は、畳み込み層と結合されてもよく、計算ユニットからの出力結果は、活性化関数により処理された畳み込み結果でもよい。ここのどこかの箇所に記載のように、様々な活性化関数が使用できる。いくつかの場合、正規化線形ユニット(ReLU:rectified linear unit)活性化関数が使用されてもよい。ReLU層は、ゼロにおける最大(0,x)の閾値設定のような要素毎の活性化関数を適用してもよい。関数は、マルチプレクサのような様々なコンポーネントにより実装できる。例えば、活性化関数としての正規化線形ユニットは、入力の符号ビットに基づいて、元の値又はゼロの間を選択する2対1のマルチプレクサで実装できる。
【0103】
いくつかの場合、計算ユニットはまた、畳み込み層と共にプーリング層を処理できてもよい。プーリング演算は、隣接する入力のセットから最大/平均値を抽出することにより入力次元を低減する。プーリングは、最大プーリング又は平均プーリングでもよい。最大プーリング演算では、入力特徴マップは、重複しない矩形のセットに分割されてもよく、そのようなサブ領域のそれぞれについて、最大値を出力する。他の例では、平均プーリングでは、サブ領域の平均値が出力されてもよい。入力特徴マップは、いずれかのサイズで分割されてもよい。例えば、プーリングは、それぞれの深さのスライスにおいて2のストライドで適用されるサイズ2×2のフィルタで適用されてもよい。2のストライドを有するサイズ2×2のプーリング層は、入力画像をその元のサイズの1/4に縮小する。プーリング演算は、様々な論理コンポーネントを使用して実装できる。例えば、MAX比較関数ユニットは、畳み込み結果を出力する累算器又はプーリングウインドウサイズに従っていくつかの出力結果にわたって最大値を抽出するための調整器のそれぞれに接続されてもよい。いくつかの場合、一時的なストレージが、最大プーリングプロセスの中間結果を記憶するために使用されてもよい。他の例では、畳み込み計算回路(すなわち、加算器又はReLU)からの出力は、中間出力のための一時的なストレージを使用することなく、平均計算回路にパイプライン接続されてもよい。このように、畳み込み層及び平均プーリング層はパイプラインとして構築されてもよい。
【0104】
いくつかの場合、アップスケール層もまた、畳み込み層で演算されてもよい。アップスケーリング演算は、補間のような適切な方法により、特徴マップの解像度を増加させてもよい。アップスケーリング演算は、加算器、累算器、比較器、補間器又は平均等のような様々な論理素子を使用して実装されてもよい。
【0105】
畳み込み、プーリング、アップスケーリング、ReLU活性化の様々な演算は、同じセットの計算回路又は異なるセットの計算回路を個々に或いは併せて使用して実行できる。様々な組み合わせは、この開示により提供される方式で配置された入力特徴マップ、パラメータ及び出力結果で、計算ユニットにより実行されてもよい。提供される方法及びシステムを使用して、様々な組み合わせの演算は、中間結果を記憶するための、低減したメモリアクセスを必要としてもよく、或いはメモリアクセスのないことを必要としてもよい。畳み込みとReLUとの組み合わせ、畳み込みとReLUとプーリングとの組み合わせ、畳み込みとReLUとアップスケーリングとの組み合わせ等のように、異なる演算が様々な方法で組み合わせられることができる。
【0106】
集積回路は、チップ上の様々な内部通信及び外部メモリとチップとの間の通信のための他のコンポーネントを更に含んでもよい。コンポーネントは、入力又は中間データの効率的な再利用のためのバッファを含んでもよい。いくつかの実施形態では、リサイズバッファは約24KBである。一般的に、バッファのサイズは、100kB〜500kBのようないずれかの範囲とすることができる。
【0107】
上記のように、マルチプレクサに入力される制御信号は、1つ以上の命令デコーダ905によりデコードされてもよい。命令デコーダは、命令をデコードし、1つ以上のマイクロ演算、マイクロコード入力点、マイクロ命令、マルチプレクサのための制御信号、他の命令、又は他の制御信号の出力を生成してもよく、これらは、元の命令からデコードされるか、或いは元の命令を反映するか、或いは元の命令から導出される。例えば、CNN関数呼び出しデコーダは、関数呼び出しをマイクロ命令の系列にデコードしてもよく、CNN命令デコーダは、マイクロ命令の系列を制御信号にデコードしてもよい。デコーダは、様々な適切な機構を使用して実現できる。例えば、デコーダは、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA:programmable logic array)、マイクロコード読み取り専用メモリ(ROM:read only memory)等を使用して実装できる。デコーダは、1つ以上のマルチプレクサに結合され、FIFO907を介して命令を記憶するメインメモリに接続されてもよい。いくつかの場合、デコーダは、1つ以上の命令レジスタに記憶された命令をデコードするように構成されてもよい。
【0108】
集積回路はまた、1つ以上のレジスタ909を含んでもよい。レジスタは、命令、記憶アドレス、割り込み番号又はいずれかの種類のデータ(ビット系列又は個々の文字等)を保持してもよい。例えば、レジスタR0〜R3は、関数呼び出しキューの開始、長さ、先頭及び末尾を記憶するCNN関数呼び出しキューの維持のためのものであり、レジスタR4は、DDRメインメモリアクセスのための基本アドレスを保持するために使用される。いくつかのレジスタは、状態の指示のために使用される。例えば、CNN演算が行われたとき、レジスタはCNN結果の状態が準備完了であることを示すように設定されてもよい。例えば、レジスタR4及びR5は、CNNプロセスの終了を示す割り込み番号を記憶するために使用されてもよい。R4及びR5内の値は命令により指定されてもよい。
【0109】
いくつかの命令は、命令の一部としてレジスタを指定する。例えば、命令は、2つの規定されたレジスタの内容が一緒に加算され、次いで指定されたレジスタに配置されることを指定してもよい。他の例では、命令は、メインメモリからエンコードされて取り出されてもよい。レジスタは、様々なサイズを有してもよく、例えば、レジスタは、長い命令を保持するために長さが64ビットでもよく、或いはより短い命令のためのハーフレジスタでもよい。1つ以上のレジスタは、アドレスレジスタ又は修正レジスタとしても知られる数個のインデックスレジスタを含んでもよい。集積回路内のいずれかのエンティティの有効アドレスは、基本アドレス、インデックスアドレス及び相対アドレスを含み、これらの全てがインデックスレジスタに記憶できる。1つ以上のレジスタは、シフトレジスタ、典型的にはフリップフロップのカスケードを含んでもよい。1つ以上のレジスタは、スカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、実行されるべき次の命令のアドレスである命令ポインタ)のような1つ以上の異なるデータタイプを記憶してもよい。
【0110】
集積回路は、外部プロセッサ又はメモリとの通信を容易にするための様々な他のコンピュータコンポーネントを含んでもよい。通信モジュール(例えば、メインメモリバッチアクセスモジュール901)は、ダブルデータレートのような命令及びデータ転送のための適切な手段を含んでもよい。周辺コンポーネント相互接続カード、PCIエクスプレス、PCI-X、HyperTransport等を含むがこれらに限定されないコンピュータバスのような通信のための様々な手段が使用できる。適切な通信手段は、集積回路の帯域幅及び互換性の要件に従って選択されてもよい。例えば、1つのデータバスは、コマンド転送(例えば、AXI4liteバス)のためのものでもよく、異なるデータバス(例えば、AXI4バス)は、データ転送のために使用されてもよく、CNN集積回路は、AXI4バス上のIPとして機能してもよい。集積回路は、データバス(例えば、AXI4liteバス)を通じてメインメモリ920からコマンド及びパラメータを受信し、FIFOインターフェースを通じてメインメモリバッチアクセスモジュール901と通信する。メインメモリバッチアクセスモジュールは、データバスを通じて外部メモリにアクセスできる。いくつかの場合、割り込み機構は、正確な時間測定を提供するために、集積回路と外部プロセッサとの間で有効化されてもよい。
【0111】
集積回路は、1つ以上のマルチプレクサを含む。1つ以上のマルチプレクサは、複数の乗算器及び他の計算回路に接続されてもよい。マルチプレクサは、制御信号に従って異なるレベルの機能を実現するように構成されてもよい。例えば、第1のレベルのマルチプレクサは、RAM内の異なるアドレス空間(特徴、重み、バイアス、命令の出力を含む)を選択するように構成されてもよく、第2のレベルのマルチプレクサは、アドレス空間内でRAMからのどのデータ(どの隣接領域、どの層の空間、空間内のどのスライス等)がどのMACにマッピングされるかを決定するためのものであり、第3のレベルは、RAM内の記憶のための特定のMAC結果を選択するために使用され、第4のレベルは、アドレス空間内のどこに(どの隣接領域、どの層の空間、空間内のどのスライス等)単一のMACの結果が記憶されるべきかを決定するために使用される。各マルチプレクサは、n個の入力のための数個の入力セレクタピンを含み、1つの選択された入力を出力してもよい。マルチプレクサは、n対1のいずれかのサイズでもよく、nは2、4、8、16、32等とすることができる。いくつかの場合、少数の大型マルチプレクサが使用されてもよい。いくつかの場合、多数の小型マルチプレクサが使用されてもよい。いくつかの場合、マルチプレクサは、大型マルチプレクサを構成するように一緒につなげられてもよい。
【0112】
図10は、マルチプレクサが、チップ上の畳み込み計算における別個のメモリアクセスパターンの実装を容易にすることを示す。1つ以上のマルチプレクサ1001は、データを複数のマルチプレクサのうち1つに送信するための所定の複数の経路のうち1つを選択するために、制御信号1007のセットを受信してもよい。制御信号は、マルチプレクサのための様々なコマンドからデコードされてもよい。これらの制御信号は、活性化関数の有効化を含み、また、画像バッファ又は前の層の出力のいずれかからの計算のための入力ソース選択、パラメータの選択、バイアス、入力特徴マップアドレス(すなわち、スライスインデックス、スライスにおけるオフセット)、パラメータのサイズ又は入力データ等を含む。一例では、制御信号は、パラメータのセット又は入力特徴マップデータのサブセットを複数の乗算器に送信するための所定の複数の経路のうち1つを決定してもよい。制御信号は、スライスインデックス、スライス内のオフセット、スライス数又は行数のようなデータアドレスを含むデータ転送命令又は畳み込み演算命令からデコードされてもよい。
【0113】
いくつかの場合、数個の乗算器及び数個の加算器/累算器との間の相互接続又はデータ送信経路は、1つ以上のマルチプレクサにより制御されてもよい。例えば、1つ以上のマルチプレクサは、マルチプレクサに供給されるデータを選択するように、乗算器の数個の入力に接続されてもよい。いくつかの場合、1つ以上のマルチプレクサは、複数の乗算器により生成された積を合計するための複数の加算器又は累算器に接続されてもよい。1つ以上のマルチプレクサは、複数の乗算器により生成された項目を複数の加算器のうち1つ以上に送信するためのデータ転送経路を決定するための制御信号を受信してもよい。更に他の例では、1つ以上の調整器は、ReLU演算のために数個の累算器の1つ以上の出力に接続されてもよい。1つ以上のマルチプレクサは調整器に接続されてもよく、制御信号に基づいて1つ以上の調整器の有効化又は無効化を行ってもよい。
【0114】
図面に示すように、1つ以上のマルチプレクサ1001は、オンチップRAMからパラメータ及び入力特徴マップデータを取得するように構成されてもよい。いくつかの場合、パラメータ、バイアス及び入力特徴マップは、RAM1009、1011、1013内の別個の隣接空間に記憶されてもよい。メモリ空間1009及び1013は別個のものとして示されるが、入力特徴マップのためのメモリ空間1009は、出力特徴マップのために再利用されてもよく、逆も同様である。いくつかの場合、パラメータ及びバイアスがRAMに記憶される一方で、入力データはバッファに記憶されてもよい。1つ以上のマルチプレクサ1001は、パラメータ、バイアス及び/又は入力データ/入力特徴マップを取り出すためのアドレス空間を決定するための制御信号のセットを受信してもよい。いくつかの実施形態では、更なるマルチプレクサ1001は、アドレス空間内のどのデータが計算ユニット1005内のどの乗算器に供給されるべきかを更に決定するために使用されてもよい。更なるマルチプレクサは、複数の乗算器に接続されてもよい。マルチプレクサは、乗算器に直接接続されてもよい。
【0115】
1つ以上のマルチプレクサ1003は、計算ユニット1005からの出力特徴マップ又は出力結果がどのようにRAM1013に記憶されるべきかを決定するために含まれてもよい。マルチプレクサは、調整器により生成された項目をRAM内の1つのスライス又はスライス内の1つのオフセットに送信するための複数の所定の経路のうち1つを決定する制御信号を受信してもよい。1つ以上のマルチプレクサは、出力結果が次のCNN層の入力特徴マップとして使用できるように、入力特徴マップと同様の方法で出力特徴マップを記憶してもよい。例えば、マルチプレクサは、どのRAMスライスにおいて或いはスライス内のどのオフセットにおいて、単一のMACの結果が記憶されるかを決定してもよい。いくつかの場合、1つのマルチプレクサ1003は、1つのデータ入力及び複数の選択入力を受け取ってもよく、これらは、いくつかのメモリアドレス(例えば、スライスインデックス又はオフセット)に対応するいくつかの出力を有する。これらは、選択入力の値に依存して、データ入力を、出力の1つが記憶されるべき位置に転送する。1つ以上のマルチプレクサは、複数の累算器/加算器及び/又は複数の調整器(調整器が含まれるか否かに依存する)に接続されてもよい。
【0116】
計算ユニットは、複数のマルチプレクサ、乗算器、加算器/累算器、及び/又はスプリッタ又は遅延素子のような他の素子を使用して実装されてもよい。計算ユニットは、様々な構成で実装できる。様々な計算回路は、様々な異なる方法で相互接続されてもよい。計算回路の構成は、異なる入力データ/パラメータのレイアウトに適応しつつ、複数の計算回路の効率的な利用を可能にするのに有利である。いくつかの場合、構成は、乗算演算の効率を改善するために、乗算器を完全に利用することにより、計算ユニットが畳み込みを演算することを可能にしてもよい。いくつかの場合、計算回路の構成は、カーネルサイズとは独立である。代替として、計算回路の構成は、他のパラメータ次元とは独立とすることができる。
図11〜13は、異なる畳み込み層に適合可能な例示的な構成を示す。いくつかの場合、畳み込み層は、depthwiseの分離可能な畳み込みでもよい。いくつかの場合、畳み込み層は、depthwise畳み込み層又はpointwise畳み込み層とすることができる。乗算器及び加算器の数は、単に例示目的のためのものであり、如何なる数の乗算器(例えば、32、64、128、256、512等)及び如何なる数の加算器が計算ユニットにおいて利用できる点に留意すべきである。
【0117】
図11に示すように、計算ユニットは、畳み込み演算のために複数の加算器1103に接続された128個の乗算器1101を含んでもよい。いくつかの場合、複数の加算器は、2レベルの加算器ネットワークを形成してもよい。同じ計算ユニット構成は、異なるチャネル数及び/又は異なるカーネルサイズのような可変サイズの入力特徴マップ及びパラメータを処理するために使用されてもよい。1つ以上のマルチプレクサ1111は、データ送信経路を制御するための制御信号を受信してもよい。データ送信経路は、オンチップRAMから計算ユニットへのデータを取り出すことを含んでもよい。いくつかの場合、データ送信経路はまた、乗算器と加算器との間の相互接続を含んでもよい。各サイクルにおいて、計算ユニットは、複数の入力値を並列に処理できてもよい。図示の例では、計算ユニットは、128個の入力特徴マップデータ及び128個のパラメータを並列に処理できてもよい。128個の乗算器は、並列に乗算を実行するように構成されてもよく、複数の累算器1103のそれぞれは、4つの乗算器の出力を合計し、1以上のサイクルについて部分和結果を累算してもよい。次いで、累算された部分結果は、畳み込み層の最終出力を生成するように、1つ以上の累算器により更に合計及び累算されてもよい。いくつかの場合、バッファ記憶はデータフローにより必要とされない。いくつかの場合、RAM上のバッファ又はメモリ空間は、中間結果を記憶するために使用されてもよく、メモリ又はバッファにアクセスする数が低減されてもよい。
【0118】
図11に示す例では、入力特徴マップは、
図6に更に示すように、8つのチャネルを有してもよい。各サイクルにおいて、4つの行及び8つのスライス1107に記憶される入力特徴の部分が使用される。1つの層のパラメータは、
図7に更に示すように、それぞれが8チャネルにわたって2×2のパラメータを有する4つのカーネルを含む。各サイクルにおいて、4つの行及び8つのスライス1109に記憶されたパラメータの部分が使用される。いくつかの場合、各サイクルにおいて、全てのフィルタの全チャネルにわたってカーネルの1つのポイント(点)が使用され、入力特徴マップ内の4つのポイントと乗算される。1107における入力特徴及び1109におけるパラメータは、取り出されて128個の乗算器に供給され、各パラメータは、4つの乗算器にフィードする。乗算器のそれぞれは、入力データの値を受信するための第1の入力と、カーネルパラメータ/重みを受信するための第2の入力とを含んでもよい。乗算器は、整数入力又は固定小数点入力の乗算演算を実行してもよい。例えば、乗算器は、8ビットの固定小数点乗算器でもよい。加算器0のような第1のレベルの加算器又は累算器は、乗算器1〜4の出力からの積を合計するために使用されてもよい。加算器/累算器は、4入力の加算器/累算器でもよい。
【0119】
具体的には、入力特徴H0W0C0-7は、第1の8つの乗算器のそれぞれの第1の入力に供給されてもよく、パラメータK0R0S0C0-7は、第1の8つの乗算器の第2の入力に供給されてもよい。加算器/累算器のネットワークは、第1及び第2のセットの乗算器からの出力をそれぞれ合計するための2つの第1のレベルの加算器(例えば、加算器0及び加算器1)と、2つの第1のレベル加算器からの出力を合計するための第2のレベルの累算器1105(例えば、加算器0')とを含んでもよい。第2のレベルの累算器は、数個の入力を有することができる。数個の入力は、同じチップレイアウトが異なる構成に適合できるように、選択的に制御できる。例えば、入力特徴マップが8つのチャネルを有する図示の例では、4つの入力のうち2つは、隣接する8個の乗算器の積を合計するためにゼロを供給される。同じレイアウトはまた、隣接する16個の乗算器の積を合計することにより、16個のチャネル入力特徴マップにも使用できる。いくつかの場合、加算器/累算器は乗算器と並列に動作し、したがって、第1のクロックサイクルの後の加算器0'の結果は、入力特徴マップの第1のポイントと8つのチャネルにわたるカーネルの第1のポイントとの畳み込みである。次のクロックサイクルでは、加算器0'の結果は、i=0-7についてΣH0W1Ci*K0R0S1Ciである。代替として、このように以降のクロックサイクルで動作する加算器/累算器は、第1のポイントの畳み込みを出力するために3つのクロックサイクル(例えば、乗算のための1つ及び2レベルの加算のための2つ)を必要としてもよい。乗算の数はカーネルサイズにより決定される。この例では、少なくとも4つのサイクルの後に、出力特徴マップ内の1つのチャネルについての1つのポイントのような畳み込み出力データが取得されてもよい。同様に、第2のカーネルK2に関して、出力特徴マップ内の1つのチャネルについての1つのポイントのような第2の畳み込み出力データを生成するために、第2のセットの8個の乗算器及び2つの第1のレベル及び第2のレベルの累算器が使用されてもよい。出力データポイントは、一時メモリに保存されてもよく、全体の層について計算が行われたとき、累算結果は、入力特徴マップが記憶されたRAM内の空間に記憶されてもよい。例示的な構成では、2つの第1のレベルの累算器及び1つの第2のレベルの累算器が、出力結果を生成するために、少なくとも4つのクロックサイクルにわたって8つの乗算器により生成された乗算結果を合計するために使用される。クロックサイクルの数は、カーネルパラメータの数/カーネルサイズにより決定されてもよい。いくつかの場合、出力機能を更に活性化させるために、調整器が累算器の出力に接続されてもよい。この場合、ReLU演算のために更なるクロックサイクルが必要とされてもよい。
【0120】
いくつかの場合、入力特徴マップデータ又はデータブロックのバッチ(例えば、8つのスライス×4つの行)が処理によって終了した後に、オフセットは、データブロックサイズ(例えば、4つの行)だけ増加し、データの次のバッチは、パラメータ及び入力特徴マップの全てが演算層に対して処理されるまで、繰り返し計算ユニットにフェッチされる。いくつかの場合、データブロックの処理中に中間結果を記憶するために一時的なメモリアクセスは必要とされない。いくつかの場合、中間結果が生成され、以降のクロックサイクルで更に処理するために一時メモリ(例えば、レジスタ、チップ上のバッファ、メインメモリ上のバッファ)に記憶されてもよい。いくつかの場合、入力データのバッチが処理された後に、1つ以上の累算器に記憶されたデータはクリアされてもよい。
【0121】
演算層が終了した後に、入力特徴マップデータ及びパラメータは、空間1009及び1011に再ロードされてもよい。例えば、パラメータは、CNNが記憶された隣接空間からロードされてもよく、入力特徴マップは、前の層からの出力データが記憶された隣接空間からロードされてもよい。演算層が終了した後に、層の出力特徴マップは、1つ以上の演算層のためにRAMに記憶されてもよく、次いで、出力特徴マップを記憶するためのメモリ空間は、再利用のために解放されてもよい。
【0122】
いくつかの場合、全てのCNN演算が行われた後に、RAMからメインメモリへの出力データの送信をトリガーするために、割り込み制御信号がデコーダにより生成され、メインメモリバッチアクセスモジュールに送信されてもよい。いくつかの場合、CNNシステムの出力結果は、分類スコアベクトルでもよい。出力結果は、メインメモリに結合されたコンピュータシステムを介してユーザに記憶及び/又は提示されてもよい。分類結果は、様々な方法で使用でき、様々な用途に適用できる。例えば、出力結果は、ユーザに対してディスプレイデバイス上に表示でき、或いは他のデバイスを制御するための制御信号又は命令を生成するために使用できる。
【0123】
いくつかの場合、マルチプレクサは、乗算器と加算器/累算器との間のデータフロー又はデータ経路を制御するために使用されてもよい。例えば、同じ4入力の第2のレベルの累算器が、異なるハードウェア構成のために使用されてもよく、
図11に示すような第1の例では、4つの入力のうち2つは、第1のレベルの累算器からの結果を合計するために選択されてもよい。加算器/累算器への選択的入力は、マルチプレクサを制御する制御信号により達成されてもよい。
【0124】
入力特徴マップ及びパラメータは、可変のサイズ及び次元を有してもよい。入力特徴マップ及びパラメータは、入力特徴マップのためのスライスの数がパラメータのためのスライスの数と等しくても等しくなくてもよい複数のスライスに配置されてもよい。
図12Aに示す他の例では、前の例とは異なる数のチャネルで入力特徴マップ及びパラメータを処理するために、同じ計算ユニット構成が使用されてもよく、同じ構成はまた、様々なカーネルサイズ又は形状に適合される。いくつかの場合、入力特徴マップは多数のチャネルを有してもよく、カーネルの数は小さくてもよい。例えば、入力特徴マップは、16個のチャネルを有し、32個のスライス1207に配置されてもよい。入力特徴マップは、16個のチャネルにわたって8つのパラメータを含む1つのカーネルで畳み込まれてもよい。カーネルの形状は、1×8、8×1、2×4又は4×2とすることができる。パラメータは、4つのスライス1209に配置されてもよい。クロックサイクルにおいて、入力特徴マップの4つの行及び32個のスライス並びにパラメータの4つのスライスがフェッチされ、128個の乗算器に供給されてもよく、各パラメータを8つの乗算器(例えば、乗算器0、16、32、48、64、80、96、112)に供給し、各入力値を1つの乗算器に供給する。加算器0のような第1のレベルの加算器又は累算器は、乗算器1〜4の出力からの積を合計するために使用されてもよい。加算器/累算器は、4入力の加算器/累算器とすることができる。乗算器、加算器及び乗算器と加算器との間の相互接続は、
図11に示すものと同じとすることができる。上記の例と同様に、データブロック1207及び1209に記憶された入力特徴マップデータ及びパラメータデータは、1つのクロックサイクルを使用して処理されてもよい。
【0125】
具体的には、16個の入力値H0W0C0-15は、第1の16個の乗算器の第1の入力ピンに供給されてもよく、16個のパラメータK0R0S0C0-15は、16個の乗算器の第2の入力ピンに供給されてもよい。加算器/累算器のネットワークは、4つのセットの乗算器からの出力をそれぞれ合計するための4つの第1のレベルの加算器(例えば、加算器0及び加算器1)と、4つの第1のレベルの加算器からの出力を合計するための第2のレベルの累算器1205(例えば、加算器0')とを含んでもよい。第1のクロックサイクルの後の加算器0'の結果は、入力特徴マップの第1のポイントと16個のチャネルにわたるカーネルの第1のポイントとの畳み込みである。次のクロックサイクルでは、加算器0'の結果は、i=0-15についてΣH0W1Ci*K0R0S1Ciである。乗算の数はカーネルサイズにより決定される。図示の例では、カーネルは8つのパラメータを含むので、加算器0'のような第2のレベルの加算器は、畳み込み結果を出力するために、8つのサイクルの間、加算器0及び加算器1からの積を累算してもよい。畳み込み演算は、全体の入力特徴マップにわたって適用される。例えば、少なくとも8つのサイクルの後に、8つの畳み込み出力結果は、8つの第2のレベルの加算器0'-7'から取得されてもよい。出力データポイントは、一時メモリに保存されてもよく、全体の層について計算が行われたとき、累算結果は、入力特徴マップが記憶されたRAM内の空間に記憶されてもよい。例示的な構成では、4つの第1のレベルの累算器及び1つの第2のレベルの累算器が、出力結果を生成するために、少なくとも8つのクロックサイクルにわたって16個の乗算器により生成された乗算結果を合計するために使用される。1つの出力結果を生成するためのクロックサイクルの数は、カーネルパラメータの数/カーネルサイズにより決定されてもよい。
【0126】
いくつかの場合、同じ構成がdepthwise畳み込み層に適合できる。代替として、構成のバリエーションがdepthwise畳み込み層に使用されてもよい。上記のdepthwise畳み込み層は、各入力チャネルに対して畳み込みを生成してもよい。
図12Bに示す例では、前の例からの計算ユニット構成のバリエーションが、前の例と同じ数のチャネルで入力特徴マップ及びパラメータを処理するために使用されてもよく、同じ構成が、様々なカーネルサイズ又は形状に適合される。例えば、入力特徴マップは16個のチャネルを有し、32個のスライスに配置されてもよい。入力特徴マップは、各チャネルについて8つのパラメータを含む1つのカーネルで畳み込まれてもよい。カーネルの形状は、1×8、8×1、2×4又は4×2とすることができる。パラメータは、上記の例に示すものと同じ方法で、4つのスライスに配置されてもよい。クロックサイクルにおいて、入力特徴マップの4つの行及び32個のスライス並びにパラメータの4つのスライスがフェッチされ、128個の乗算器に供給されてもよく、各パラメータを8つの乗算器(例えば、乗算器0、16、32、48、64、80、96、112)に供給し、各入力値を1つの乗算器に供給する。Accu2のような累算器は、乗算器2の出力からの積を合計するために使用されてもよい。この構成は、乗算器からの積を合計するようにそれぞれ構成された128個の累算器を含んでもよい。各累算器により生成された合計結果は、入力特徴マップのチャネルに適用されるフィルタの畳み込み結果である。
【0127】
具体的には、クロックサイクル後のAccu0の結果は、入力特徴マップの第1のチャネルと、カーネルの行にわたるカーネルの第1のチャネル(すなわち、第1のカーネル)との畳み込みである。次のクロックサイクルでは、Accu0の結果は、i=0-15についてΣH0W1C0*K0R1S1C0である。乗算の数はカーネルサイズにより決定される。図示の例では、カーネルは8つのパラメータを含むので、Accu0は、畳み込み結果を出力するために、8つのサイクルの間、全体のカーネルにわたって合計してもよい。畳み込み演算は、全体の入力特徴マップにわたって適用される。出力データポイントは、一時メモリに保存されてもよく、全体の層について計算が行われたとき、累算結果は、入力特徴マップが記憶されたRAM内の空間に記憶されてもよい。例示的な構成では、128個の累算器が、出力マップ内の1つのチャネルのポイントを生成するため、16個の乗算器により生成された乗算結果を合計するために使用される。1つの出力結果を生成するためのクロックサイクルの数は、カーネルパラメータの数/カーネルサイズにより決定されてもよい。depthwise畳み込み層の出力は、ReLU層に続いて1×1のpointwise畳み込み層に供給されてもよい。
【0128】
図13は、入力特徴マップ及びカーネルの他のレイアウトについて畳み込みを実行するために同じ構成を使用する他の例を示す。いくつかの場合、入力特徴マップのサイズは小さくてもよく、カーネルの数は大きくてもよい。入力特徴マップは、4つのスライスに配置されて記憶されてもよい。パラメータは、32個のスライスに配置されてもよい。入力特徴マップは、16個のチャネルを有し、4つのスライスに配置されてもよい。入力特徴マップは、16個のチャネルにわたって1つのパラメータをそれぞれ含む7つのカーネルで畳み込まれてもよい。パラメータは、4つのスライスに配置されてもよい。クロックサイクルにおいて、入力特徴マップの4つの行及び4個のスライス並びにパラメータの32個のスライスがフェッチされ、128個の乗算器に供給されてもよく、各値を8つの乗算器(例えば、乗算器0、16、32、48、64、80、96、112)に供給し、各パラメータを1つの乗算器に供給する。各乗算器は、入力値の値を受信するための第1の入力と、カーネルパラメータ/重みを受信するための第2の入力とを含んでもよい。乗算器は、整数入力又は固定小数点入力の乗算演算を実行してもよい。例えば、乗算器は、8ビットの固定小数点乗算器でもよい。加算器0のような第1のレベルの加算器又は累算器は、乗算器1〜4の出力からの積を合計するために使用されてもよい。加算器/累算器は、4入力の加算器/累算器でもよい。乗算器、加算器及び乗算器と加算器との間の相互接続は、
図11及び
図12Aに示すものと同じものとすることができる。
【0129】
具体的には、16個の入力値H0W0C0-15は、第1の16個の乗算器の第1の入力ピンに供給されてもよく、16個のパラメータK0R0S0C0-15は、16個の乗算器の第2の入力ピンに供給されてもよい。加算器/累算器のネットワークは、4つのセットの乗算器からの出力をそれぞれ合計するための4つの第1のレベルの加算器(例えば、加算器0及び加算器1)と、4つの第1のレベルの加算器からの出力を合計するための第2のレベルの累算器(例えば、加算器0')とを含んでもよい。第1のクロックサイクルの後の加算器0'の結果は、入力特徴マップの第1のポイントと16個のチャネルにわたるカーネルの第1のポイントとの畳み込みである。次のクロックサイクルでは、加算器0'の結果は、i=0-15についてΣH0W1Ci*K0R0S1Ciである。乗算の数はカーネルサイズにより決定される。図示の例では、カーネルは1つのみのパラメータを含むので、各サイクルで加算器0'のような第2のレベルの加算器は畳み込み結果を出力する。畳み込み演算は、終了するまで全体の入力特徴マップにわたって適用される。例えば、少なくとも1つのサイクルの後に、8つの畳み込み出力結果は、8つの第2のレベルの加算器0'-7'から取得されてもよい。出力データポイントは、一時メモリに保存されてもよく、全体の層について計算が行われたとき、累算結果は、入力特徴マップが記憶されたRAM内の空間に記憶されてもよい。例示的な構成では、4つの第1のレベルの累算器及び1つの第2のレベルの累算器が、出力マップにおける16個のチャネルを有するポイントを生成するために、少なくとも1つのクロックサイクルにわたって16個の乗算器により生成された乗算結果を合計するために使用される。1つの出力結果を生成するためのクロックサイクルの数は、カーネルパラメータの数/カーネルサイズにより決定されてもよい。
【0130】
いくつかの実施形態では、1つのみのレベルの加算器/累算器が使用されてもよい。
図14に示す構成の変形例として、計算ユニットは、第2のレベルの累算器のない4つの乗算器とそれぞれ接続された32個の累算器を含んでもよい。4つの乗算器(例えば、第1の4つの乗算器)のそれぞれが、入力特徴マップの2×2の領域とカーネルとの乗算を実行するために使用されてもよく、積は加算器/累算器(例えば、加算器0)により合計されて累算される。複数のサイクルクロックが、1つの出力結果を生成するために必要とされてもよい。サイクルの数はカーネルサイズ及びチャネル数により決定されてもよい。例えば、図示の例では、カーネルサイズが4であり、畳み込みが8つのチャネルに適用されるので、1つの出力を生成するためのクロックサイクルの総数は8サイクル=2(8つのチャネルにわたる1つのパラメータに対するサイクル)×4(パラメータ)である。8つのスライスと8つの行とを含むデータブロックに記憶された入力特徴マップデータを処理するために、少なくとも8つのサイクルを要してもよい。
図14に示す構成は、
図11の構成と同じでもよく、同じでなくてもよいことに留意すべきである。いくつかの場合、
図11で使用される第2のレベルの累算器は、2つの構成が同じとなるように、1つ以上のマルチプレクサにより無効化されてもよい。
【0131】
いくつかの実施形態では、32個の4入力の加算器が128個の乗算器の出力を受信し、他の16個の2入力の加算器が32個の4入力の加算器の出力を受信する。次いで、16個の2入力の加算器の出力がRAMに記憶される。このレイアウトは、CNN構成K4C8P4にとって十分である。CNN構成K1C16P8又はK8C16P1では、16個の2入力の加算器の16個の出力は、8つの2入力の加算器に更に供給され、8つの2入力の加算器の8つの出力はRAMに記憶される。
【0132】
図15は、本出願に開示されたいずれかのコンピュータシステムを実装するように構成できるコンピュータシステム1501を示す。コンピュータシステム1501は、移動電話、タブレット、ウェアラブルデバイス、ラップトップコンピュータ、デスクトップコンピュータ、中央サーバ等を含むことができる。
【0133】
コンピュータシステム1501は、中央処理ユニット(CPU、ここでは「プロセッサ」及び「コンピュータプロセッサ」でもある)1505を含み、これは、単一コア又はマルチコアプロセッサ、又は並列処理のための複数のプロセッサとすることができる。CPUは、上記のようなプロセッサとすることができる。コンピュータシステム1501はまた、メモリ又はメモリ位置1510(例えば、ランダムアクセスメモリ、読み取り専用メモリ、フラッシュメモリ)、電子記憶ユニット1515(例えば、ハードディスク)、1つ以上の他のシステムと通信するための通信インターフェース1520(例えば、ネットワークアダプタ)、及びキャッシュ、他のメモリ、データストレージ及び/又は電子ディスプレイアダプタのような周辺デバイス1525を含む。いくつかの場合、通信インターフェースは、コンピュータが撮像デバイス又はオーディオデバイスのような他のデバイスと通信することを可能にしてもよい。コンピュータは、分析のために結合されたデバイスから入力データを受信できてもよい。メモリ1510、記憶ユニット1515、インターフェース1520及び周辺デバイス1525は、マザーボードのような通信バス(実線)を通じてCPU1505と通信する。記憶ユニット1515は、データを記憶するためのデータ記憶ユニット(又はデータリポジトリ)とすることができる。コンピュータシステム1501は、通信インターフェース1520の支援によって、コンピュータネットワーク(「ネットワーク」)1530に動作可能に結合できる。ネットワーク1530は、インターネット、インターネット及び/又はエクストラネット、又はインターネットと通信するイントラネット及び/又はエクストラネットとすることができる。いくつかの場合、ネットワーク1530は、電気通信及び/又はデータネットワークである。ネットワーク1530は、クラウドコンピューティングのような分散コンピューティングを可能にできる1つ以上のコンピュータサーバを含むことができる。いくつかの場合、ネットワーク1530は、コンピュータシステム1501の支援によって、ピアツーピアネットワークを実装でき、これは、コンピュータシステム1501に結合されたデバイスがクライアント又はサーバとして振舞うことを可能にしてもよい。
【0134】
CPU1505は、プログラム又はソフトウェアに具現化できる一連の機械読み取り可能命令を実行できる。命令は、メモリ1510のようなメモリ位置に記憶されてもよい。命令は、CPU1505に導かれることができ、CPU1505は、その後、本開示の方法を実装するようにCPU1505をプログラムするか、或いは他の方法で構成することができる。CPU1505により実行される動作の例は、フェッチ、デコード、実行及びライトバックを含むことができる。
【0135】
CPU1505は、集積回路のような回路の一部とすることができる。システム1501の1つ以上の他のコンポーネントが回路に含められることができる。いくつかの場合、回路は特定用途向け集積回路(ASIC:application specific integrated circuit)である。
【0136】
記憶ユニット1515は、ドライバ、ライブラリ及び保存されたプログラムのようなファイルを記憶できる。記憶ユニット1515は、ユーザデータ、例えば、ユーザプリファレンス及びユーザプログラムを記憶できる。いくつかの場合、コンピュータシステム1501は、イントラネット又はインターネットを通じてコンピュータシステム1501と通信する遠隔サーバに位置するような、コンピュータシステム1501の外部にある1つ以上の更なるデータ記憶ユニットを含むことができる。
【0137】
コンピュータシステム1501は、ネットワーク1530を通じて1つ以上の遠隔コンピュータシステムと通信できる。例えば、コンピュータシステム1501は、ユーザの遠隔コンピュータシステムと通信できる。遠隔コンピュータシステムの例は、パーソナルコンピュータ、スレート又はタブレットPC、スマートフォン、パーソナルデジタルアシスタント等を含む。ユーザは、ネットワーク1530を通じてコンピュータシステム1501にアクセスできる。
【0138】
ここに記載の方法は、コンピュータシステム1501の電子記憶位置、例えばメモリ1510又は電子記憶ユニット1515に記憶された機械(例えば、コンピュータプロセッサ)実行可能コードにより実装できる。機械実行可能コード又は機械読み取り可能コードは、ソフトウェアの形式で提供できる。使用中に、コードは、プロセッサ1505により実行できる。いくつかの場合、コードは、記憶ユニット1515から取り出され、プロセッサ1505による即時アクセスのためにメモリ1510に記憶される。いくつかの状況では、電子記憶ユニット1515は排除でき、機械実行可能命令はメモリ1510に記憶される。
【0139】
コードは、コードを実行するように適合されたプロセッサを有する機械と共に使用するように予めコンパイル及び構成でき、或いはランタイム中にコンパイルできる。コードは、コードが予めコンパイルされた状態又はコンパイルされた状態で実行可能なプログラミング言語で供給できる。
【0140】
コンピュータシステム1501のような、ここに提供されるシステム及び方法の態様は、プログラミングで具現化できる。技術の様々な態様は、典型的には、機械(又はプロセッサ)実行可能コード及び/又は機械読み取り可能媒体のタイプで搬送されるか或いは具現化される関連データの形式の「プロダクト」又は「製造物」と考えられてもよい。機械実行可能コードは、メモリ(例えば、読み取り専用メモリ、ランダムアクセスメモリ、フラッシュメモリ)又はハードディスクのような電子記憶ユニットに記憶できる。「ストレージ」タイプの媒体は、コンピュータ、プロセッサ等の有形のメモリのいずれか又は全部、又は様々な半導体メモリ、テープドライブ、ディスクドライブ等のような、その関連モジュールを含むことができ、これらは、ソフトウェアプログラミングのためにいつでも非一時的なストレージを提供し得る。ソフトウェアの全部又は一部は、場合によってはインターネット又は様々な他の電気通信ネットワークを通じて通信されてもよい。このような通信は、例えば、1つのコンピュータ又はプロセッサから他のもの、例えば、管理サーバ又はホストコンピュータからアプリケーションサーバのコンピュータプラットフォームへのソフトウェアのロードを可能にしてもよい。したがって、ソフトウェアエレメントを保持し得る他のタイプの媒体は、ローカルデバイスの間の物理インターフェースにわたって、有線及び光の地上線ネットワーク並びに様々なエアリンクを通じて使用されるような、光波、電波及び電磁波を含む。有線又は無線リンク、光リンク等のような、このような波を搬送する物理要素もまた、ソフトウェアを保持する媒体と考えられてもよい。ここで使用される、非一時的な有形の「記憶」媒体に限定されない限り、コンピュータ又は機械「読み取り可能媒体」のような用語は、実行のために命令をプロセッサに提供することに関与するいずれかの媒体を示す。
【0141】
したがって、コンピュータ実行可能コードのような機械読み取り可能媒体は、有形の記憶媒体、搬送波媒体又は物理伝送媒体を含むが、これらに限定されない多くの形式をとってもよい。不揮発性記憶媒体は、例えば、図面に示すデータベース等を実装するために使用され得るような、いずれかのコンピュータ等の記憶デバイスのいずれかのような光又は磁気ディスクを含む。揮発性記憶媒体は、そのようなコンピュータプラットフォームのメインメモリのようなダイナミックメモリを含む。有形の伝送媒体は、同軸ケーブル、銅線及び光ファイバを含み、コンピュータシステム内のバスを含むワイヤを含む。搬送波伝送媒体は、電気信号若しくは電磁気信号、又は無線周波数(RF:radio frequency)及び赤外線(IR:infrared)データ通信中に生成されるもののような音波又は光波の形式をとってもよい。したがって、コンピュータ読み取り可能媒体の一般的な形式は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、いずれかの他の磁気媒体、CD-ROM、DVD若しくはDVD-ROM、いずれかの他の光媒体、パンチカード紙テープ、孔のパターンを有するいずれかの他の物理記憶媒体、RAM、ROM、PROM及びEPROM、FLASH-EPROM、いずれかの他のメモリチップ若しくはカートリッジ、データ若しくは命令を運ぶ搬送波、そのような搬送波を運ぶケーブル若しくはリンク、又はコンピュータがプログラミングコード及び/又はデータを読み取り得るいずれかの他の媒体を含む。これらの形式のコンピュータ読み取り可能媒体の多くは、実行のために1つ以上の命令の1つ以上の系列をプロセッサに搬送することに関与してもよい。
【0142】
コンピュータシステム1501は、例えば、管理インターフェースを提供するためのユーザインターフェース1540を含む電子ディスプレイ1535を含むか、或いはこれと通信することができる。UIの例は、限定することなく、グラフィカルユーザインターフェース(GUI:graphical user interface)及びウェブベースユーザインターフェースを含む。
【0143】
本開示の方法及びシステムは、1つ以上のアルゴリズムにより実装できる。アルゴリズムは、中央処理装置1505により実行されると、ソフトウェアにより実装できる。
【0144】
本発明の好ましい実施形態をここに図示/説明したが、このような実施形態は例示のみとして提供されることが、当業者にとって明らかである。数々の変形、変更及び置換が本発明を逸脱せずに当業者に思い浮かぶ。ここに記載した本発明の実施形態の様々な代替物が本発明を実施する際に使用されてもよいことを理解すべきである。以下の特許請求の範囲は本発明の範囲を規定し、これらの請求項及びその等価物の範囲内の方法及び構造がこれによってカバーされることを意図する。