IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザ ガバニング カウンシル オブ ザ ユニバーシティ オブ トロントの特許一覧

特表2023-525371深層学習ネットワークのためのメモリ圧縮のシステム及び方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-06-15
(54)【発明の名称】深層学習ネットワークのためのメモリ圧縮のシステム及び方法
(51)【国際特許分類】
   G06N 3/0495 20230101AFI20230608BHJP
【FI】
G06N3/0495
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022569452
(86)(22)【出願日】2021-05-14
(85)【翻訳文提出日】2022-12-28
(86)【国際出願番号】 CA2021050664
(87)【国際公開番号】W WO2021226720
(87)【国際公開日】2021-11-18
(31)【優先権主張番号】63/024,907
(32)【優先日】2020-05-14
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.VERILOG
(71)【出願人】
【識別番号】522443372
【氏名又は名称】ザ ガバニング カウンシル オブ ザ ユニバーシティ オブ トロント
(74)【代理人】
【識別番号】100114775
【弁理士】
【氏名又は名称】高岡 亮一
(74)【代理人】
【識別番号】100121511
【弁理士】
【氏名又は名称】小田 直
(74)【代理人】
【識別番号】100202751
【弁理士】
【氏名又は名称】岩堀 明代
(74)【代理人】
【識別番号】100208580
【弁理士】
【氏名又は名称】三好 玲奈
(74)【代理人】
【識別番号】100191086
【弁理士】
【氏名又は名称】高橋 香元
(72)【発明者】
【氏名】エド ヴィヴァンコス,イサク
(72)【発明者】
【氏名】モショヴォス,アンドレアス
(72)【発明者】
【氏名】シャリフィーモガッダム,サイエ
(72)【発明者】
【氏名】デルマス ラスコーツ,アルベルト
(57)【要約】
深層学習ネットワークのためのメモリ圧縮のシステム及び方法。この方法は、最大の大きさを有する入力データストリームからの値を収容するのに必要なビット幅を識別することにより、入力データストリームを圧縮することと、入力データストリームの最下位ビットを第1のメモリストアに格納することであって、ビット数はビット幅に等しく、値が現在第1のメモリストアで未使用のままになっているビットよりも多くのビットを必要とする場合、残りのビットは第2のメモリストアに書き込まれる、格納することと、第1のメモリストアがいっぱいになると、第1のメモリストアの値を、圧縮されたデータストリームの連続部分として、第1のメモリストア内のデータの関連する幅とともに出力し、第2のメモリストアの値を第1のメモリストアにコピーすることと、圧縮されたデータストリームを解凍することと、を含む。
【選択図】図8C

【特許請求の範囲】
【請求項1】
深層学習ネットワークのためのメモリ圧縮の方法であって、
深層学習ネットワークの第1のメモリに対して、複数の行を定義することであって、前記複数の行はそれぞれ指定された数の列を有し、各列が列幅を有する、前記定義することと、
前記深層学習ネットワークの1つまたは複数の層によって処理される入力データストリームを受信することであって、前記入力データストリームは、固定ビット幅の複数の値を有する、前記受信することと、
前記入力データストリームをサブセットに分割することであって、各サブセットにおける値の数は前記列の数に等しい、前記分割することと、
各サブセットを順次圧縮することにより、前記データストリームを圧縮することであって、
前記サブセット内の値について、最大の大きさの前記値を収容するのに必要な圧縮されたビット幅を識別することと、
前記行に関連付けられたビット幅レジスタに前記ビット幅を格納することと、
最初の空きビットから始まる前記メモリの前記それぞれの列に、前記サブセット内の各値の最下位ビットを格納することであって、ビット数は前記ビット幅に等しく、前記ビット数を格納するために前記それぞれの行の前記それぞれの列に現在未使用のままのものよりも多くのビットが必要な場合、前記残りのビットは後続の行の前記それぞれの列に書き込まれる、前記格納することと、
を含む、前記圧縮することと、を含み、
前記圧縮されたデータストリームは、解凍されて、
前記圧縮されたデータストリームの各列の最初の未読ビットの位置を識別することと、
再現された入力データを、
前記各ビット幅レジスタから各サブセットの前記ビット幅を取得することと、
前記第1のメモリの各列から、前記列の前記最初の未読ビットから始めて、前記ビット幅に対応する前記ビット数を取り出し、前記取り出されたビットを出力の最下位ビットに出力することと、
前記取り出されたビットに続くビット位置に対応するように、各列の前記最初の未読ビットの前記位置を更新することと、
前記出力の残りの最上位ビットをゼロまたは符号拡張して、前記再現された入力データ値を取得することと、
によって順次出力することと、
によって、前記入力データストリームを再現することができる、
前記方法。
【請求項2】
圧縮された値のブロックの位置が、1つまたは複数のポインタによって特定できる、請求項1に記載の方法。
【請求項3】
前記ブロックが、フィルタマップデータブロックまたは入力もしくは出力アクティベーションデータブロックである、請求項2に記載の方法。
【請求項4】
前記位置が、前記ブロックの最初の圧縮された値のためのものである、請求項2に記載の方法。
【請求項5】
前記1つまたは複数のポインタが、入力または出力アクティベーションマップのデータへのポインタの第1のセットと、フィルタマップのデータへのポインタの第2のセットとを含む、請求項2に記載の方法。
【請求項6】
入力データストリームを受信することが、前記1つまたは複数のポインタの位置で始まる前記ブロックの部分を順次受信することと、前記ブロックの前記部分を圧縮することと、受信する次の部分を呼び出すためにオフセットポインタを更新することと、を含む、請求項2に記載の方法。
【請求項7】
入力データストリームを受信することが、前記ブロックの部分を順次受信することを含み、各部分の位置は前記ポインタの1つによって識別される、請求項2に記載の方法。
【請求項8】
前記圧縮されたデータ値の部分が、前のデータ値の空きの最上位ビットをパディングすることによって、列の最下位ビットから開始するように強制的に格納される、請求項2に記載の方法。
【請求項9】
いくつかの行の前記ビット幅レジスタが、前記ビット幅の長さのバイナリ表現を格納する、請求項1に記載の方法。
【請求項10】
他の行の前記ビット幅レジスタが、前記対応する行の前記ビット幅が前の行と同じか異なるかを指定する単一のビットを格納する、請求項9に記載の方法。
【請求項11】
前記方法が浮動小数点値を格納するために使用され、前記浮動小数点値は、符号部分と、指数部分及び仮数部分とを含み、前記入力データストリームは、前記浮動小数点値の前記指数部分からなり、
圧縮することは、浮動小数点値ごとに、前記圧縮された指数部分に隣接する前記符号部分及び仮数部分を格納することをさらに含む、請求項1に記載の方法。
【請求項12】
解凍中に、将来必要になることが知られている前記ブロックのうちの特定の1つの位置に対してポインタが確立される、請求項1に記載の方法。
【請求項13】
前記値を圧縮して格納しながら、前記第1のメモリの各列内の次の空きの位置を追跡することをさらに含む、請求項1に記載の方法。
【請求項14】
前記データストリームを圧縮する前に、前記第1のメモリの第1の記憶位置を空きとして初期化することをさらに含む、請求項1に記載の方法。
【請求項15】
前記複数の値が、前記列幅以下の固定ビット幅のものである、請求項1に記載の方法。
【請求項16】
前記再現されたデータストリームが算術/論理ユニットに直接出力される、請求項1に記載の方法。
【請求項17】
前記再現されたデータストリームが、前記第1のメモリに対応する複数の列をそれぞれ有する複数の行を有する第2のメモリに出力される、請求項1に記載の方法。
【請求項18】
圧縮することが、前記圧縮されたビット幅を識別する前に、前記入力データストリームの前記値に関する関数を評価して、前記圧縮されたビット幅を縮小し、解凍のために前記関数を逆にすることをさらに含む、請求項1に記載の方法。
【請求項19】
深層学習ネットワークのためのメモリ解凍の方法であって、
入力データストリームを表す圧縮されたデータストリームを取得することであって、前記圧縮されたデータストリームは、
深層学習ネットワークの第1のメモリに対して、複数の行を定義することであって、前記複数の行はそれぞれ指定された数の列を有し、各列が列幅を有する、前記定義することと、
前記深層学習ネットワークの1つまたは複数の層によって処理される前記入力データストリームを受信することであって、前記入力データストリームは、固定ビット幅の複数の値を有する、前記受信することと、
前記入力データストリームをサブセットに分割することであって、各サブセットにおける値の数は前記列の数に等しい、前記分割することと、
各サブセットを順次圧縮することにより、前記データストリームを圧縮することであって、
前記サブセット内の値について、最大の大きさの前記値を収容するのに必要な圧縮されたビット幅を識別することと、
前記行に関連付けられたビット幅レジスタに前記ビット幅を格納することと、
最初の空きビットから始まる前記メモリの前記それぞれの列に、前記サブセット内の各値の最下位ビットを格納することであって、ビット数は前記ビット幅に等しく、前記ビット数を格納するために前記それぞれの行の前記それぞれの列に現在未使用のままのものよりも多くのビットが必要な場合、前記残りのビットは後続の行の前記それぞれの列に書き込まれる、前記格納することと、
を含む、前記圧縮することと、
によって準備される、前記取得することと、
前記圧縮されたデータストリームを解凍して、前記入力データストリームを、
前記圧縮されたデータストリームの各列の最初の未読ビットを識別することと、
前記再現された入力データを、
前記各ビット幅レジスタから各サブセットの前記ビット幅を取得することと、
前記第1のメモリの各列から、前記列の前記最初の未読ビットから始めて、前記ビット幅に対応する前記ビット数を取り出し、前記取り出されたビットを出力の最下位ビットに出力することと、
前記取り出されたビットに続くビット位置に対応するように、各列の前記最初の未読ビットの前記位置を更新することと、
前記出力の残りの最上位ビットをゼロまたは符号拡張して、前記再現された入力データ値を取得することと、
によって順次出力することと、
によって、再現することと、
を含む、前記方法。
【請求項20】
深層学習ネットワークのメモリ圧縮のためのシステムであって、
複数の行を有する第1のメモリであって、前記複数の行の各行が指定された数の列を有し、各列が列幅を有する、前記第1のメモリと、
入力モジュールであって、
前記深層学習ネットワークの1つまたは複数の層によって処理される入力データストリームを受信することであって、前記入力データストリームは、固定ビット幅の複数の値を有する、前記受信することと、
前記入力データストリームをサブセットに分割することであって、各サブセットにおける値の数は前記列の数に等しい、前記分割することと、
のための、前記入力モジュールと、
複数のビット幅レジスタを有する幅検出器モジュールであって、前記複数のビット幅レジスタのそれぞれは行に関連付けられ、前記サブセット内の値について、最大の大きさの前記値を収容するのに必要な圧縮されたビット幅を識別し、前記ビット幅を前記行に関連付けられた前記ビット幅レジスタに格納する、前記幅検出器モジュールと、
最初の空きビットから始まる前記メモリの前記それぞれの列に、前記サブセット内の各値の最下位ビットを格納することであって、ビット数は前記ビット幅に等しく、前記ビット数を格納するために前記それぞれの行の前記それぞれの列に現在未使用のままのものよりも多くのビットが必要な場合、前記残りのビットは後続の行の前記それぞれの列に書き込まれる、前記格納すること、のための圧縮モジュールと、
解凍モジュールであって、前記圧縮されたデータストリームを解凍して、前記入力データストリームを、
前記圧縮されたデータストリームの各列の最初の未読ビットを識別することと、
再現された入力データを、
前記各ビット幅レジスタから各サブセットの前記ビット幅を取得することと、
前記第1のメモリの各列から、前記列の前記最初の未読ビットから始めて、前記ビット幅に対応する前記ビット数を取り出し、前記取り出されたビットを出力の最下位ビットに出力することと、
前記取り出されたビットに続くビット位置に対応するように、各列の前記最初の未読ビットを更新することと、
前記出力の残りの最上位ビットをゼロまたは符号拡張して、前記再現された入力データ値を取得することと、
によって順次出力することと、
によって再現する、前記解凍モジュールと、
を含む、前記システム。
【請求項21】
圧縮された値のブロックの位置を追跡するための1つまたは複数のポインタを有するポインタモジュールをさらに含む、請求項20に記載のシステム。
【請求項22】
前記ブロックが、フィルタマップデータブロックまたは入力もしくは出力アクティベーションデータブロックである、請求項21に記載のシステム。
【請求項23】
前記位置が、前記ブロックの最初の圧縮された値のためのものである、請求項21に記載のシステム。
【請求項24】
前記1つまたは複数のポインタが、入力または出力アクティベーションマップのデータへのポインタの第1のセットと、フィルタマップのデータへのポインタの第2のセットとを含む、請求項21に記載のシステム。
【請求項25】
オフセットポインタをさらに含み、
入力データストリームを受信することが、前記1つまたは複数のポインタの位置で始まる前記ブロックの部分を順次受信することと、前記ブロックの前記部分を圧縮することと、受信する次の部分を呼び出すために前記オフセットポインタを更新することと、を含む、請求項21に記載のシステム。
【請求項26】
入力データストリームを受信することが、前記ブロックの部分を順次受信することを含み、各部分の位置は前記ポインタの1つによって識別される、請求項21に記載のシステム。
【請求項27】
前記圧縮されたデータ値の部分が、前のデータ値の空きの最上位ビットをパディングすることによって、列の最下位ビットから開始するように強制的に格納される、請求項20に記載のシステム。
【請求項28】
いくつかの行の前記ビット幅レジスタが、前記ビット幅の長さのバイナリ表現を格納する、請求項20に記載のシステム。
【請求項29】
他の行の前記ビット幅レジスタが、前記対応する行の前記ビット幅が前の行と同じか異なるかを指定する単一のビットを格納する、請求項20に記載のシステム。
【請求項30】
前記システムが浮動小数点値を格納するためのものであり、前記浮動小数点値は、符号部分と、指数部分及び仮数部分とを含み、前記入力データストリームは、前記浮動小数点値の前記指数部分からなり、
圧縮することは、浮動小数点値ごとに、前記圧縮された指数部分に隣接する前記符号部分及び仮数部分を格納することをさらに含む、請求項20に記載のシステム。
【請求項31】
解凍中に、将来必要になることが知られている前記ブロックのうちの特定の1つの位置に対してポインタが確立される、請求項20に記載のシステム。
【請求項32】
前記圧縮モジュールが、前記値を圧縮して格納しながら、前記第1のメモリの各列内の次の空きの位置を追跡するように構成されている、請求項20に記載のシステム。
【請求項33】
前記圧縮モジュールが、前記データストリームを圧縮する前に、前記第1のメモリの第1の記憶位置を空きとして初期化するように構成されている、請求項20に記載のシステム。
【請求項34】
前記複数の値が、前記列幅以下の固定ビット幅のものである、請求項20に記載のシステム。
【請求項35】
前記再現されたデータストリームが算術/論理ユニットに直接出力される、請求項20に記載のシステム。
【請求項36】
前記再現されたデータストリームが、前記第1のメモリに対応する複数の列をそれぞれ有する複数の行を有する第2のメモリに出力される、請求項20に記載のシステム。
【請求項37】
圧縮することが、前記圧縮されたビット幅を識別する前に、前記入力データストリームの前記値に関する関数を評価して、前記圧縮されたビット幅を縮小し、解凍のために前記関数を逆にすることをさらに含む、請求項20に記載のシステム。

【発明の詳細な説明】
【技術分野】
【0001】
以下は、概して深層学習ネットワークに関し、より具体的には、深層学習ネットワークのメモリ圧縮のためのシステム及び方法に関する。
【背景技術】
【0002】
メモリ階層の圧縮は、特に汎用システムのコンテキストでかなりの注目を集めている。しかしながら、深層学習ワークロードの圧縮アプローチには、様々な技術的課題が存在する。例えば、汎用の圧縮アプローチでは、通常、ランダムで細粒度のアクセスをサポートする必要がある。さらに、汎用システムのプログラムは、通常、ニューラルネットワークには存在しない値のパターンと様々なデータ型を示す傾向がある。
【発明の概要】
【0003】
一態様では、深層学習ネットワークのメモリ圧縮の方法が提供され、この方法は、深層学習ネットワークの第1のメモリに対して、複数の行を定義することであって、複数の行はそれぞれ指定された数の列を有し、各列が列幅を有する、定義することと、深層学習ネットワークの1つまたは複数の層によって処理される入力データストリームを受信することであって、入力データストリームは、固定ビット幅の複数の値を有する、受信することと、入力データストリームをサブセットに分割することであって、各サブセットにおける値の数は列の数に等しい、分割することと、各サブセットを順次圧縮することにより、データストリームを圧縮することであって、サブセット内の値について、最大の大きさの値を収容するのに必要な圧縮されたビット幅を識別することと、行に関連付けられたビット幅レジスタにビット幅を格納することと、最初の空きビットから始まるメモリのそれぞれの列に、サブセット内の各値の最下位ビットを格納することであって、ビット数はビット幅に等しく、ビット数を格納するためにそれぞれの行のそれぞれの列に現在未使用のままのものよりも多くのビットが必要な場合、残りのビットは後続の行のそれぞれの列に書き込まれる、格納することと、を含む、圧縮することと、を含み、圧縮されたデータストリームは、解凍されて、圧縮されたデータストリームの各列の最初の未読ビットの位置を識別することと、再現された入力データを、各ビット幅レジスタから各サブセットのビット幅を取得することと、第1のメモリの各列から、列の最初の未読ビットから始めて、ビット幅に対応するビット数を取り出し、取り出されたビットを出力の最下位ビットに出力することと、取り出されたビットに続くビット位置に対応するように、各列の最初の未読ビットの位置を更新することと、出力の残りの最上位ビットをゼロまたは符号拡張して、再現された入力データ値を取得することと、によって順次出力することと、によって、入力データストリームを再現することができる。
【0004】
この方法の特定の場合では、圧縮された値のブロックの位置は、1つまたは複数のポインタによって特定できる。
【0005】
この方法の特定の場合では、ブロックはフィルタマップデータブロックまたは入力または出力アクティベーションデータブロックである。
【0006】
この方法の特定の場合では、位置は、ブロックの最初の圧縮された値のためのものである。
【0007】
この方法の特定の場合では、1つまたは複数のポインタは、入力または出力アクティベーションマップのデータへのポインタの第1のセットと、フィルタマップのデータへのポインタの第2のセットとを含む。
【0008】
この方法の特定の場合では、入力データストリームを受信することは、1つまたは複数のポインタの位置で始まるブロックの部分を順次受信することと、ブロックの部分を圧縮することと、受信する次の部分を呼び出すためにオフセットポインタを更新することと、を含む。
【0009】
この方法の特定の場合では、入力データストリームを受信することは、ブロックの部分を順次受信することを含み、各部分の位置はポインタの1つによって識別される。
【0010】
この方法の特定の場合では、圧縮されたデータ値の部分は、前のデータ値の空きの最上位ビットをパディングすることによって、列の最下位ビットから開始するように強制的に格納される。
【0011】
この方法の特定の場合では、いくつかの行のビット幅レジスタは、ビット幅の長さのバイナリ表現を格納する。
【0012】
この方法の特定の場合では、他の行のビット幅レジスタは、対応する行のビット幅が前の行と同じか異なるかを指定する単一のビットを格納する。
【0013】
この方法の特定の場合では、この方法は浮動小数点値を格納するために使用され、浮動小数点値は、符号部分と、指数部分及び仮数部分とを含み、入力データストリームは浮動小数点値の指数部分からなり、圧縮することは、浮動小数点値ごとに、圧縮された指数部分に隣接する符号部分及び仮数部分を格納することをさらに含む。
【0014】
この方法の特定の場合では、解凍中に、将来必要になることが知られているブロックのうちの特定の1つの位置に対してポインタが確立される。
【0015】
この方法の特定の場合では、この方法は、値を圧縮して格納しながら、第1のメモリの各列内の次の空きの位置を追跡することをさらに含む。
【0016】
この方法の特定の場合では、この方法は、データストリームを圧縮する前に、第1のメモリの第1の記憶位置を空きとして初期化することをさらに含む。
【0017】
この方法の特定の場合では、複数の値は、列幅以下の固定ビット幅のものである。
【0018】
この方法の特定の場合では、再現されたデータストリームは算術/論理ユニットに直接出力される。
【0019】
この方法の特定の場合では、再現されたデータストリームは、第1のメモリに対応する複数の列をそれぞれ有する複数の行を有する第2のメモリに出力される。
【0020】
この方法の特定の場合では、圧縮することは、圧縮されたビット幅を識別する前に、入力データストリームの値に関する関数を評価して、圧縮されたビット幅を削減し、解凍のために関数を逆にすることをさらに含む。
【0021】
別の態様では、深層学習ネットワークのためのメモリ解凍の方法が提供され、この方法は、入力データストリームを表す圧縮されたデータストリームを取得することであって、圧縮されたデータストリームは、深層学習ネットワークの第1のメモリに対して、複数の行を定義することであって、複数の行はそれぞれ指定された数の列を有し、各列が列幅を有する、定義することと、深層学習ネットワークの1つまたは複数の層によって処理される入力データストリームを受信することであって、入力データストリームは、固定ビット幅の複数の値を有する、受信することと、入力データストリームをサブセットに分割することであって、各サブセットにおける値の数は列の数に等しい、分割することと、各サブセットを順次圧縮することにより、データストリームを圧縮することであって、サブセット内の値について、最大の大きさの値を収容するのに必要な圧縮されたビット幅を識別することと、行に関連付けられたビット幅レジスタにビット幅を格納することと、最初の空きビットから始まるメモリのそれぞれの列に、サブセット内の各値の最下位ビットを格納することであって、ビット数はビット幅に等しく、ビット数を格納するためにそれぞれの行のそれぞれの列に現在未使用のままのものよりも多くのビットが必要な場合、残りのビットは後続の行のそれぞれの列に書き込まれる、格納することと、を含む、圧縮することと、によって準備される、取得することと、圧縮されたデータストリームを解凍して、入力データストリームを、圧縮されたデータストリームの各列の最初の未読ビットを識別することと、再現された入力データを、各ビット幅レジスタから各サブセットのビット幅を取得することと、第1のメモリの各列から、列の最初の未読ビットから始めて、ビット幅に対応するビット数を取り出し、取り出されたビットを出力の最下位ビットに出力することと、取り出されたビットに続くビット位置に対応するように、各列の最初の未読ビットを更新することと、出力の残りの最上位ビットをゼロまたは符号拡張して、再現された入力データ値を取得することと、によって順次出力することと、によって、再現することと、を含む。
【0022】
さらに別の態様では、深層学習ネットワークのメモリ圧縮のためのシステムが提供され、このシステムは、複数の行を有する第1のメモリであって、複数の行の各行が指定された数の列を有し、各列が列幅を有する、第1のメモリと、入力モジュールであって、深層学習ネットワークの1つまたは複数の層によって処理される入力データストリームを受信することであって、入力データストリームは、固定ビット幅の複数の値を有する、受信することと、入力データストリームをサブセットに分割することであって、各サブセットにおける値の数は列の数に等しい、分割することと、のための、入力モジュールと、複数のビット幅レジスタを有する幅検出器モジュールであって、複数のビット幅レジスタのそれぞれは行に関連付けられ、サブセット内の値について、最大の大きさの値を収容するのに必要な圧縮されたビット幅を識別し、ビット幅を行に関連付けられたビット幅レジスタに格納する、幅検出器モジュールと、最初の空きビットから始まるメモリのそれぞれの列に、サブセット内の各値の最下位ビットを格納することであって、ビット数はビット幅に等しく、ビット数を格納するためにそれぞれの行のそれぞれの列に現在未使用のままのものよりも多くのビットが必要な場合、残りのビットは後続の行のそれぞれの列に書き込まれる、格納すること、のための圧縮モジュールと、解凍モジュールであって、圧縮されたデータストリームを解凍して、入力データストリームを、圧縮されたデータストリームの各列の最初の未読ビットを識別することと、再現された入力データを、各ビット幅レジスタから各サブセットのビット幅を取得することと、第1のメモリの各列から、列の最初の未読ビットから始めて、ビット幅に対応するビット数を取り出し、取り出されたビットを出力の最下位ビットに出力することと、取り出されたビットに続くビット位置に対応するように、各列の最初の未読ビットを更新することと、出力の残りの最上位ビットをゼロまたは符号拡張して、再現された入力データ値を取得することと、によって順次出力することと、によって再現する、解凍モジュールと、を含む。
【0023】
このシステムの特定の場合では、システムは、圧縮された値のブロックの位置を追跡するための1つまたは複数のポインタを有するポインタモジュールをさらに含む。
【0024】
このシステムの特定の場合では、ブロックはフィルタマップデータブロックまたは入力もしくは出力アクティベーションデータブロックである。
【0025】
このシステムの特定の場合では、位置は、ブロックの最初の圧縮された値のためのものである。
【0026】
このシステムの特定の場合では、1つまたは複数のポインタは、入力または出力アクティベーションマップのデータへのポインタの第1のセットと、フィルタマップのデータへのポインタの第2のセットとを含む。
【0027】
このシステムの特定の場合では、システムはオフセットポインタをさらに含み、入力データストリームを受信することは、1つまたは複数のポインタの位置で始まるブロックの部分を順次受信することと、ブロックの部分を圧縮することと、受信する次の部分を呼び出すためにオフセットポインタを更新することと、を含む。
【0028】
このシステムの特定の場合では、入力データストリームを受信することは、ブロックの部分を順次受信することを含み、各部分の位置はポインタの1つによって識別される。
【0029】
このシステムの特定の場合では、圧縮されたデータ値の部分は、前のデータ値の空きの最上位ビットをパディングすることによって、列の最下位ビットから開始するように強制的に格納される。
【0030】
このシステムの特定の場合では、いくつかの行のビット幅レジスタは、ビット幅の長さのバイナリ表現を格納する。
【0031】
このシステムの特定の場合では、他の行のビット幅レジスタは、対応する行のビット幅が前の行と同じか異なるかを指定する単一のビットを格納する。
【0032】
このシステムの特定の場合では、このシステムは浮動小数点値を格納するためのものであり、浮動小数点値は符号部分、指数部分及び仮数部分を含み、入力データストリームは浮動小数点値の指数部分からなり、圧縮することは、浮動小数点値ごとに、圧縮された指数部分に隣接する符号部分及び仮数部分を格納することをさらに含む。
【0033】
このシステムの特定の場合では、解凍中に、将来必要になることが知られているブロックのうちの特定の1つの位置に対してポインタが確立される。
【0034】
このシステムの特定の場合では、圧縮モジュールは、値を圧縮して格納しながら、第1のメモリの各列内の次の空きの位置を追跡するように構成されている。
【0035】
このシステムの特定の場合では、圧縮モジュールは、データストリームを圧縮する前に、第1のメモリの第1の記憶位置を空きとして初期化するように構成されている。
【0036】
このシステムの特定の場合では、複数の値は、列幅以下の固定ビット幅のものである。
【0037】
このシステムの特定の場合では、再現されたデータストリームは算術/論理ユニットに直接出力される。
【0038】
このシステムの特定の場合では、再現されたデータストリームは、第1のメモリに対応する複数の列をそれぞれ有する複数の行を有する第2のメモリに出力される。
【0039】
このシステムの特定の場合では、圧縮することは、圧縮されたビット幅を識別する前に、入力データストリームの値に関する関数を評価して、圧縮されたビット幅を削減し、解凍のために関数を逆にすることをさらに含む。
【0040】
これら及び他の態様が企図され、本明細書に記載される。前述の概要は、当業者が以下の詳細な説明を理解するのを助けるために、実施形態の代表的な態様を提示していることが理解されるであろう。
【0041】
実施形態のより深い理解が、図面を参照して得られるであろう。
【図面の簡単な説明】
【0042】
図1】一実施形態による、深層学習ネットワークのためのメモリ圧縮のためのシステムの概略図である。
図2図1のシステム及び例示的な動作環境を示す概略図である。
図3】一実施形態による、深層学習ネットワークのためのメモリ圧縮の方法のフローチャートである。
図4A】64個のランダムに選択された入力のバッチに対するimap値分布の例を示す。
図4B】入力に依存しないfmap値分布の例を示す。
図5A】64個のランダムに選択された入力のバッチに対するimap累積分布を示す。
図5B】入力に依存しないfmap累積分布の例を示す。
図6】説明のための畳み込み層の例の図を示す。
図7】スパース畳み込みニューラルネットワーク(SCNN)タイルの編成の例の図を示す。
図8A】固定データ幅バッファの一例を示す。
図8B】可変データ幅をサポートする単純なアプローチの例を示す。
図8C】、図1のシステムによる、可変データ幅をサポートする例を示す。
図9A図1のシステムによる、解凍モジュールの例の図を示す。
図9B図9Aの解凍モジュールの第2のサイクル(反復)の一例である。
図9C図9Aの解凍モジュールの第3のサイクル(反復)の一例である。
図10A図1のシステムによる、圧縮モジュールの例の図を示す。
図10B図10Aの圧縮モジュールの圧縮ブロックの例示的な構造を示す。
図11A】高密度モデルを対象とするデータ並列アクセラレータで使用される図1のシステムの例を示す。
図11B図1のシステムによる、処理要素のグリッドの例を示す。
図12A】実験例のニューラルネットワーク全体のメモリフットプリントを報告するチャートを示す。
図12B】実験例についてのトラフィックのこの減少を示すチャートを示す。
図13A】実験例の各サイジングポリシーの下で必要とされるオンチップメモリ容量を示すチャートである。
図13B】実験例のモデルごとのオフチップトラフィックを示すチャートを示す。
図14A】実験例のベースラインに対して正規化されたスピードアップを示すチャートを示す。
図14B】実験例のモデルフットプリント全体の減少を示すチャートを示す。
図15A】実験例のスピードアップを示すチャートを示す。
図15B】実験例のフットプリント減少を示すチャートである。
図16A】実験例のメモリエネルギー内訳を示すグラフである。
図16B】実験例を考慮した理想的な圧縮率を示すチャートである。
図17】最適化されたビット幅サイズのオーバーヘッドに対するメモリフットプリントの減少を示す様々な比較を示すチャートである。
【発明を実施するための形態】
【0043】
ここで、図面を参照して実施形態を説明する。説明を簡単かつ明瞭にするために、適切と考えられる場合、図面間で参照番号を繰り返し使用して、対応する要素または類似の要素を示すことがある。以下の説明では、説明する多様な実施形態の十分な理解を与えるために多数の具体的な詳細を説明する。しかしながら、本明細書において説明されている実施形態がこれらの具体的な詳細なしで実践することができることは、当業者によってよく理解されよう。他の例では、周知の方法、手順、及び構成要素は、本明細書に記載の実施形態を不明確にしないように、詳細説明されていない。また、この説明は、本明細書に記載された実施形態の範囲を限定するものと見なされるべきではない。
【0044】
命令を実行する本明細書に例示された任意のモジュール、ユニット、構成要素、サーバ、コンピュータ、端末、またはデバイスは、ストレージ媒体、コンピュータストレージ媒体、またはデータストレージデバイス(取り外し可能及び/または取り外し不可能)、例えば、磁気ディスク、光ディスク、またはテープなどのコンピュータ可読媒体を含むかまたはそれにアクセスすることができる。コンピュータストレージ媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実装される、揮発性及び不揮発性の、取り外し可能及び取り外し不可能な媒体が含まれ得る。コンピュータストレージ媒体の例は、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD‐ROM、デジタル多用途ディスク(DVD)もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または、所望の情報を記憶するために使用することができ、アプリケーション、モジュール、もしくはその両方によってアクセスできる、任意の他の媒体を含む。そのようなコンピュータストレージ媒体はいずれも、デバイスの一部であってもよいし、デバイスにアクセス可能または接続可能であってもよい。本明細書で説明する任意のアプリケーションまたはモジュールは、そのようなコンピュータ可読媒体によって格納または保持できるコンピュータ可読/実行可能命令を使用して実装することができる。
【0045】
メモリ階層における圧縮は、メモリアクセスが全体のエネルギー消費の大部分を占める深層学習ワークロードとアクセラレータにとって特に魅力的である。圧縮は、コンピュータの動作、特に本発明の場合は深層学習ネットワークの動作に技術的な利点をもたらすことができる。まず、例えば、圧縮によって、階層の有効容量と帯域幅が増加し、エネルギー効率が向上し、全体的なアクセスレイテンシが短縮され得る。具体的には、階層の任意のレベルでデータを圧縮すると、エンコード時に各値に必要な物理ビットが少なくなるため、有効容量を増やすことができる。第2に、アクセスごとにより多くのエネルギーと時間を必要とする、より高いレベルの階層へのアクセスが減少するため、実効待ち時間とエネルギー効率が改善する。第3に、圧縮によって値ごとに読み書きされるビット数が減少し、有効な帯域幅とエネルギー効率が向上する。さらに、メモリ階層のエネルギー効率を高める最前線の手法であるデータフローと再利用のためのブロックを補完する。これらの利点は、ニューラルネットワークのオフチップメモリ圧縮に関する研究の動機となっている。本開示の実施形態は、有利には、オンチップメモリ階層における圧縮を提供する。
【0046】
メモリ階層における圧縮は、汎用コンピューティングシステムのコンテキストでかなりの注目を集めている。汎用コンピューティングシステムの圧縮では、任意のアクセスパターンをサポートする必要があり、一般に、コンピュータプログラムで一般的な値のパターン(例えば、ポインタまたは反復値)に依存する。しかしながら、本発明者らは、深層学習ワークロードが、追加の機会及び技術的課題を提示する特定の挙動を示すと判断した。例えば、深層学習ワークロードのアクセスパターンは通常、規則的であり、長いシーケンシャルアクセスで構成されている。これにより、ランダムアクセスパターンをサポートするメリットが軽減される。加えて、ニューラルネットワークの値は一般に、一般的なプログラム変数のプロパティを示さない特徴マップとフィルタマップからなる。さらに、ニューラルネットワークハードウェアはデータ並列になる傾向があり、幅広いアクセスが必要になる。
【0047】
ランダムで細粒度のアクセスをサポートするには、メモリ内の圧縮された値を迅速かつ細粒度で見つける能力が必要である。これにより、汎用の圧縮方法では小さなブロックを使用する必要があり、このことで一般に有効容量が大幅に抑制される。その結果、多くの圧縮アプローチは転送されるデータの量を削減するが、ストレージで使用するコンテナのサイズは削減しない。例えば、キャッシュライン内のデータをエンコードするので、読み取りまたは書き込みのビット数を減らす必要がある。しかしながら、キャッシュライン全体はまだ確保されたままである。代替的に、方法は、あるレベルの間接化を使用して、データがメモリ内の現在どこにあるかを識別するため、柔軟な配置とメタデータのオーバーヘッドとの間で慎重にバランスを取る必要がある。
【0048】
典型的なプログラムは、完全または部分的な値の冗長性を示す傾向がある。例えば、メモリポインタを使用するため、いくつかの値はプレフィックスを共有する傾向がある(例えば、スタックまたはヒープに割り当てられた構造体へのポインタ)。プログラムは、部分的に繰り返される値のパターン(フラグフィールドなど)を示す傾向がある集計データ構造をよく使用する。通常、圧縮のアプローチでは、整数及び浮動小数点数、または様々な文字セット(例えば、UTF-16)の文字など、様々なデータ型を処理する必要がある。さらに、プログラムは、8ビット、16ビット、32ビット、またはそれ以上など、様々な2のべき乗データ幅のデータ型を管理する。最後に、プログラマはしばしば「デフォルト」の整数または浮動小数点データ型(32ビットまたは64ビットなど)を使用する。圧縮技術は、これらの特性を利用してデータのフットプリントを削減できる。
【0049】
対照的に、本発明者らは、再利用のためのブロッキングが使用されている場合でも、深層学習ワークロードは長い順次アクセスを示す傾向があると判断した。これにより、細粒度ブロックへのランダムアクセスをサポートする必要性が軽減される。さらに、深層学習ワークロードの値は、通常、一般的なコンピュータプログラムの繰り返しパターンを示さない。メモリフットプリントの大部分は、8ビットや16ビットなどの短いデータ型の大きな配列を格納するためのものである。一般に、大量のデータと計算が与えられると、深層学習モデルはデータ型を慎重に選択してできるだけ小さくする。4ビットなどのさらに小さなデータ型への量子化技術も使用できる。いくつかの場合では、それでも16ビットが必要なモデルもあり、例えば、特定のセグメンテーションモデルの場合、精度がわずかに低下しただけでも非常に目立つアーティファクトに変換される。さらに、プログラムは狭いメモリ要求を実行する傾向があるが、ニューラルネットワークは一般にデータの並列性を示し、広い参照を好む。
【0050】
本開示の実施形態は、データが可能な限り符号化されたままであるオンチップ圧縮方式を有利に提供する。場合によっては、深層学習アプローチの要素を処理する前にデータを解凍することができ、これは、特にデコードのために、実装が簡単なスキームを支持する。汎用システムの圧縮技術の多くは、一般に、最終レベルのキャッシュとオンチップ階層の他のキャッシュの間で動作し、この場合レイテンシはそれほど重要ではなく、追加の複雑さを許容できる。有利には、本開示の実施形態は、例えば、(1)ニューラルネットワークによって一般に必要とされる比較的長いシーケンシャルアクセスをサポートすることができ、(2)処理ユニットの高い使用率を維持するために複数のワイドアクセスをサポートすることができ、(3)処理ユニットの直前でデコードを実行できるため、データを可能な限り長く圧縮したままにできる、そして、(4)ニューラルネットワークに典型的な値の動作を利用する、ロスレスオンチップ圧縮方式を提供する。
【0051】
本開示の実施形態(略式に「Boveda」と呼ばれる場合もある)は、固定小数点値で動作するニューラルネットワークにおける値の典型的な分布を有利に利用するオンチップメモリ階層圧縮スキームを提供する。特に、各層では、大部分の値が0に近づく傾向があるため、大きさの高い値はほとんどない。したがって、本開示の実施形態は、同じ数のビットを使用してすべての値を格納するのではなく、値の内容に合わせてデータ幅を調整し、必要な数のビットのみを使用するようにする。各値がそのデータ幅を個別に選択できるようにすると、許容できないメタデータオーバーヘッド(値ごとの幅フィールド)が発生する。代わりに、本開示の実施形態は、値をグループ化し、グループ内で最大の大きさの値を収容するのに十分広い共通のデータ幅を選択する。例えば、最大の大きさの値が0x12である8つの8ビット(8-ビット)値のグループでは、8×5ビットのコンテナを使用できるが、最大の大きさの値が0x0aである別のグループでは、8×4ビットを使用できる。いずれの場合も、3ビットのメタデータフィールドは、値ごとに使用されるビット数(それぞれ5と4)を指定する。可変データ幅のコンテナを使用できるため、値をデコードして適切に整列させて処理ユニットにフィードするには、通常、幅の広いクロスバーが必要になる。例えば、それぞれ8ビットの8つの値で動作する処理エレメントには、64ビットから64ビットへのクロスバーだけでなく、2つのメモリ行に拡がる値を処理する追加のロジックが必要である。本開示の実施形態は、ニューラルネットワークの規則的なアクセスパターンを利用して、メモリ内の圧縮されたデータを整理し、その代わりに、複数のさらにはるかに小さい「クロスバー」を必要とするようにする。
【0052】
有利なことに、本開示の実施形態は、ニューラルネットワークモデルへの変更を必要とせずに有効なオンチップ容量を高めることができる。これにより、モデルがオフチップであるか計算バウンドであるかに応じて、エネルギー及び/またはパフォーマンスの利点が得られる。アーキテクトは、設計時に本実施形態を展開して、オンチップメモリの量を削減し、したがって、所望のパフォーマンス目標を満たすために必要なコストを削減することができる。ニューラルネットワークの開発者に対して、本実施形態は、オフチップにする必要が少なく、すべてのモデルに対して量子化を必要とせずに量子化に報いるアプローチを提供する。本開示では、本アプローチが特定のアクセラレータアーキテクチャに固有のものではないことを実証するために、高密度モデル用のアクセラレータ、及びスパース畳み込みニューラルネットワーク(SCNN)用のアクセラレータ、プルーニングされたモデルをターゲットとするアクセラレータに実験例が適用される。SCNNについて、実験例は、本実施形態がSCNNのゼロ圧縮の上で動作できることを示している。説明の目的で、実験例では、コンピュータビジョンタスク、特に画像分類を使用して、本実施形態の有効性を示す。これは、深層学習を適用できる膨大な数のドメインの一部にすぎないが、画像処理システムが使用されるアプリケーションの多様性とボリュームのために、重要性と価値が非常に高くなる。実験例は、本実施形態が以下のようであることを測定した。
・モデル全体のフットプリントを49%に削減した。特殊化した方法を使用して量子化されたモデルの場合、ほぼ理想的な圧縮率が達成された。1つの方法の場合、値のコンテンツを利用することで、特殊化したハードウェアが提供するものと比較して、圧縮率がほぼ2倍になった。
・オンチップでアクセスされるビットの量を50%に削減した。
・96KBのグローバルバッファを備えた高密度アクセラレータでは、パフォーマンスが1.4倍改善し、エネルギーが28%改善した。
・SCNNのゼロ圧縮に対する全体的なモデルのフットプリントを66%に削減した。
・調査した構成の平均20%と比較して、SCNNと結合した場合のエネルギーが26%削減された。
【0053】
ここで図1及び図2を参照すると、一実施形態による、深層学習ネットワークのためのメモリ圧縮のためのシステム100が示されている。この実施形態では、システム100はコンピューティングデバイス26上で実行され、インターネットなどのネットワーク24を介してサーバ32上にあるコンテンツにアクセスする。さらなる実施形態では、システム100は、デバイス26上でのみ、またはサーバ32上でのみ実行することができ、または、他のコンピューティングデバイス上、例えば、デスクトップコンピュータ、ラップトップコンピュータ、スマートフォン、タブレットコンピュータ、サーバ、スマートウォッチ、分散またはクラウドコンピューティングデバイス(複数可)などで実行及び/または分散することができる。いくつかの実施形態では、システム100の構成要素は、単一のコンピュータシステムによって格納され、単一のコンピュータシステム上で実行される。他の実施形態では、システム100の構成要素は、ローカルまたはリモートに分散され得る2つ以上のコンピュータシステム間に分散される。
【0054】
図1は、システム100の実施形態の様々な物理的及び論理的構成要素を示す。図示のように、システム100は、中央処理装置(「CPU」)102(1つまたは複数のプロセッサを含む)、ランダムアクセスメモリ(「RAM」)104、入力インタフェース106、出力インタフェース108、ネットワークインタフェース110、不揮発性ストレージ112、及びCPU102が他の構成要素と通信できるようにするローカルバス114を含む、複数の物理的または論理的構成要素を有する。CPU102は、以下でより詳細に説明するように、オペレーティングシステム及び様々なモジュールを実行する。RAM104は、比較的応答性の高い揮発性ストレージをCPU102に提供する。入力インタフェース106により、管理者またはユーザは、キーボード及びマウスなどの入力デバイスを介して入力を提供することができる。出力インタフェース108は、情報を出力デバイス、例えば、ディスプレイ及び/またはスピーカに出力する。ネットワークインタフェース110は、典型的なクラウドベースのアクセスモデルの場合など、システム100から離れて配置された他のコンピューティングデバイス及びサーバなどの他のシステムとの通信を可能にする。不揮発性ストレージ112は、オペレーティングシステム及びモジュールを実装するためのコンピュータ実行可能命令を含むオペレーティングシステム及びプログラム、ならびにこれらのサービスによって使用される任意のデータを格納する。以下に説明するように、追加の保存データをデータベース116に保存することができる。システム100の動作中、実行を容易にするために、オペレーティングシステム、モジュール、及び関連データを不揮発性ストレージ112から取り出してRAM104に配置することができる。
【0055】
一実施形態では、システム100は、入力モジュール120、解凍モジュール122、幅検出器モジュール126、圧縮モジュール124、深層学習(DL)モジュール128、及びポインタモジュール130などのいくつかの機能モジュールを含む。さらなる実施形態では、モジュールの機能を組み合わせたり、他のモジュール上で実行したりすることができる。場合によっては、モジュールの機能を少なくとも部分的に専用ハードウェアで実行することができ、他の場合では、モジュールの機能の少なくとも一部をCPU102上で実行することができる。
【0056】
入力特徴マップ(imap)とフィルタマップ(fmap)の値の分布は、一般に、小さい方に大きく偏っている。システム100が低コストでエネルギー効率の良い圧縮技術を構築するために利用できるのは、この挙動である。これらの分布を利用するために、システム100は、要素ごとに使用されるビット数(データ幅)を、その現在の値に適合するのにちょうど十分な長さに適応させることができる。fmapは通常静的であるため、使用されるデータ幅はfmap要素によって異なるが、入力に依存しない。一方、imap値は入力依存であるため、システム100によって使用されるデータ幅は、各要素が取る値に適応することができる。対照的に、他のメモリ階層は、データ幅を使用してすべてのimapまたはfmap要素を格納し、これは、可能な値を収容するのに十分な長さである。しかしながら、本発明者らが経験的に決定したように、これはほとんどの要素にとって過剰であることが証明されている。説明の目的で、ResNet18(画像分類)とSSD MobileNet(オブジェクト検出)の2つのモデルが強調表示されており、どちらも8ビットに量子化されている。図4A、4B、5A、及び5Bは、いくつかの代表的な畳み込み層及び全結合層のimap値及びfmap値の規則的及び累積的分布を示す。図4A及び5Aは、64個のランダムに選択された入力のバッチに対するimap値分布及び累積分布をそれぞれ示し、図4Bと5Bは、入力に依存しないfmap値の分布と累積分布を示している。
【0057】
図4Aと5Aは、ResNet18のres2a _branch1で、ほとんどのimap値を5ビットで表すことができることを示しており、これは、理想的な条件の下では使用される8ビットに対するフットプリントの37.5%の減少に換算される。全結合層fcの実質的にすべてのimap値には、8ビットに対する50%減少された4ビットだけで十分である。SSD Mobilenetも同様の挙動を示す。深さ方向12のその2D畳み込み層では、値の90%が必要とするのは6ビット以下であり、これは、ポイント別13_2_2のそのオブジェクト検出SSDモジュール層において事実上すべてのimap値を表すのにも十分である。図4B及び5Bは、fmapについて同様の傾向を示している。ResNet18のres2 branch1は、ほとんどのfmap値に対して5ビットのみで十分であるが、fc層の事実上すべての値に対して6ビットで十分である。しかしながら、fcでは、fmap値の95%で最大5ビットが必要である。SSD-MobileNetのfmapも同様である。実質的にすべての値が6ビットに適合し、90%が5ビットに適合し、80%以上が4ビットに適合する。
【0058】
いくつかの場合では、システム100は、プルーニングされたCNNモデルの畳み込み層のためのアクセラレータであるSCNNアクセラレータに適用することができる。説明の目的で、システム100は、SCNNの畳み込み層に適用されるものとして説明される。しかしながら、他のデータ並列深層学習アクセラレータや、全結合層などの他のタイプの層に適用できることを理解されたい。
【0059】
図6は、説明の目的で畳み込み層の一例を示す図である。入力は次元S×R×C(高さ、幅、チャネル)のK個のfmap、H×W×Cのimapであり、通常H≫S及びW≫R、ストライドsである。fmapは静的に既知の値(重み)であるが、imapは実行時に計算された値(アクティベーション)である。出力は
【数1】
omap(アクティベーション)である。この例では、s=1を想定している。各omap値は、imapの同じサイズのウィンドウを使用したfmapの3次元(3D)畳み込みとして決定される。各fmapは、H及びW次元に沿ってストライドsを使用してimap上でウィンドウをスライドさせることにより、1つのチャネルのomap値を生成する。3D畳み込みには、fmap要素とそれに対応するimap要素の対での乗算が含まれ、その後、これらすべての積がomap値に累積される。各3D畳み込みは、各入力チャンネルのC個の2次元(2D)畳み込みの合計と等価である。
【0060】
SCNNは値を、N個のサンプル-チャネル-高さ-重み(NCHW)の順序で格納し、omapは空間入力静的畳み込みによって決定される。これにより、SCNNは一度に1つのチャネルでimapとfmapを処理できるようになり、これによりスパース性を利用できるようになる。図7は、SCNNタイルの編成の一例を示す図である。SCNNは、このようなタイルのグリッドを使用してパフォーマンスをスケールアップする。説明と理解を容易にする目的で、タイルは1つだけであると仮定できる。しかし、システム100の本実施形態は複数のタイルに使用できることが理解される。
【0061】
タイルには、imap(及びomap)、fmap、及びアキュムレータをそれぞれ保持する3つのバッファがある。アキュムレータは、omap値を累積する。SCNNは、一度にimapの単一チャネルのすべてのウィンドウに対してすべての2D畳み込みを実行する空間データフローを使用する。SCNNは、畳み込み層では、任意のfmap値と同じチャネルからの任意のimap値の積が何らかのomap値に寄与するという観測に基づいている。したがって、最大スループットでは、タイルはすべて同じチャネルからの4つのimap値と4つのfmap値を処理し、16の可能な(imap、fmap)ペアすべての積を計算する。次に、クロスバーを介して、これらすべての積を対応するアキュムレータに送る。アキュムレータバッファは、複数の積が同じバンク内のアキュムレータにマップされるときに発生する競合を減らすために、32のバンクに編成されている。スパース性を利用するために、imapとfmapはゼロ以外の値を((値),(スキップ))ペアとして格納するゼロ値を省略する。ここで、(スキップ)はそれぞれの後に省略されるゼロ値の数である。これらの(スキップ)フィールドを使用することにより、SCNNは各値の元の位置を推論し、積をそれぞれのアキュムレータにマップする。説明と理解を容易にする目的で、スキップフィールドは省略され、8ビットの値が想定される。本明細書で説明するように、16ビット(オリジナル)及び8ビットSCNN構成が考慮される。
【0062】
通常、SCNNは次のように2つの連続するブロックを処理する。BBlock0及びBBlock1と呼ばれるそれぞれ4つのimap値(I,...,I)と(I,...,I)を考慮する。各ブロック内の値は概念的に順序付けられていることに注意されたい。IはBBlock0内の最初の値であり、IはBBlock1内の最初の値である。最初は、これらは符号なしの数値であると想定できる。図8Aは、固定データ幅バッファの一例を示す。この例では、SCNNのimapバッファは値ごとに8ビットのコンテナを使用し、4つの値幅の読み取り(32ビット)をサポートしている。この構成では、imapバッファから読み取られた値は乗算器の入力と直接整列する。しかしながら、BBlock0のすべての値には少なくとも2つのゼロビットのプレフィックスがあり、BBlock1の値には3ビットがある。対照的に、システム100の目標の1つは、これらのプレフィックスビットを格納することを回避することである。
【0063】
図8Bは、可変データ幅をサポートする単純なアプローチの例を示す。このアプローチは、圧縮された値を格納するための簡単な方法であるが、一般的には望ましくない。4つの値のBBlockごとに、幅フィールドは値ごとのビット数を指定する。この例では、BBlock0の場合は5、BBlock1の場合は6である(4(100)及び5(101)としてエンコードされる)。BBlockごとに1つの幅フィールドは、複数の値に対するそのオーバーヘッドを償却する。この例では、値はBBlock0に順次格納され、BBlock0が完全に占有されると、値はBBlock1に順次格納される。
【0064】
残念ながら、値が乗算器の入力と整列しなくなり、2つの行にまたがる可能性さえあるため、解凍には多額の費用がかかる。乗算器の列ごとに、幅のビット(BBlockごとに異なる)を抽出し、8ビットに拡張した後に乗算器の入力にルーティングする必要がある。このルーティングには、32ビット対8ビットへのクロスバーのような相互接続が必要である。乗算器列が4つあるため、そのようなクロスバーが4つ必要になり、面積とエネルギーのコストが大幅に増加する。乗算器グリッドに8×8乗算器がある場合、64ビット対8ビットクロスバーが必要になる。
【0065】
システム100は、有利なことに、複雑性及びコストがはるかに少ないアプローチを実行することができる。一実施形態では、値は、乗算器に対応するhileraと呼ばれる4つのグループのうちの1つに属するものとして扱うことができ、各BBlockの最初の値はhilera0に属し、2番目の値はhilera1に属し、以下同様である。図8Bのアプローチはこのマッピングを破り、圧縮された値がhilera間を自由に流れることを可能にする。
【0066】
代わりに、システム100は、図8Cの図に例示されているように、値をそれらの元のhilera内にとどまるように制限する。この例では、IとIがバッファの最初の8ビットにマップされたhileraにまとめてパックされているのに対し、IとIは、最後の8ビットにマッピングされたhileraにパックされていることを示す。類似性を示すために、値は、そのhileraを埋めるためのbovedilla(レンガ)として使用される。この例で必要な「クロスバー」は8ビット対8ビットになり、そのサイズは最大データ幅のみに依存し、サイクルごとに読み取られる値の数には依存しない。8×8乗算器グリッドには、8つの64ビット対8ビットクロスバーの代わりに8つの8ビット対8ビットクロスバーが必要である。
【0067】
図9Aは、解凍モジュール122の一例の図を示す。解凍モジュール122は、サイクルごとに単一の値を解凍し、2つの行にまたがるそれらの値を適切に処理する。図示の解凍モジュール122は1つの解凍ブロックを示しているが、図8Cの例で続けると、解凍モジュール122の4つの解凍ブロックが並行して動作し、サイクルごとに4つのimap値を解凍する。imapバッファからの読み取りは、32ビット幅のままである。各読み取りから、各ブロックはそのhileraに対応する8ビットを受け取る。各ブロック内で、2つの8ビットレジスタLとレジスタRが圧縮されたデータを保持する。8ビットの新しいセットが読み込まれるたびに、それがレジスタLに書き込まれると同時に、レジスタLの現在の内容がレジスタRに「コピー」される。場合によっては、レジスタLをレジスタRに物理的にコピーするのではなく、ビットポインタ2つを「交換」するために使用できる。定常状態では、レジスタLとレジスタRには、imapバッファの1つのhileraからの2つの連続する行が含まれるため、幅に関係なく8ビット値を解凍するために必要なすべてのビットが含まれる。16ビット対8ビットのシフタは、レジスタLとレジスタRの出力を連結することによって形成された値から現在の値を抽出する。この16ビットの例では、シフタは、最大7桁左への、3ビットの「オフセット」レジスタ(「OFS」)で指定されるシフトをサポートする必要しかない。3ビットのレジスタ(「W」)は、現在のBBlockのデータ幅を保持する。OFSとW、及び関連する制御ロジックは、4つの解凍ブロックすべてで共有できる。最初、この例ではOFS=0とW=7であり、両方とも最大データ幅に対応する。「Bit-Extend」ブロックは、シフタの出力からW個の最下位ビットを渡し、それらを8ビットに符号拡張する。圧縮ブロックは2段階のパイプラインとして動作することができ、第1の段階でレジスタLとレジスタRに値をロードし、第2の段階でレジスタLとレジスタRの内容から次の解凍された8ビット値を抽出する。この例では、解凍ブロックは、最初の乗算器劣がI及びIを解凍するために、合計で3サイクルを必要とする(開始間隔には追加のサイクルが必要である)。定常状態では、解凍ブロックはサイクルごとに値を出力できる。
【0068】
図9B及び9Cは、解凍モジュール122の上記の例についてのサイクル2及び3の例を示す。サイクル1で、imapバッファは入力データストリーム0110 1100の8ビットの最初のセットを提供し、それがレジスタLに書き込まれる。同時に、Wは幅メモリからBBlock0のデータ幅101でロードされる。OFSはOFS=(OFS+W+1)mod8=0に更新される。OFS+W+1が8を超えたので(加算器からの桁上がり)、レジスタRには有用なビットが含まれていないため、レジスタLと、レジスタRの位置がサイクル1の終わりにスワップされ、次のサイクルでimapバッファからの読み取りがトリガーされる。サイクル2では、図9Bに示されているように、解凍ブロックは次の8ビットを読み込み、サイクルの終わりにそれらをレジスタLにコピーする。ここで、レジスタLとレジスタRには、同じhileraからの圧縮された値の2つの連続する行が含まれ、したがって、現在は定常状態にある。サイクル2中に、OFSが0であるため、(レジスタL、レジスタR)の16ビット出力が0だけシフトされ、したがって、圧縮されたIの最下位ビットを出力の最下位ビットに整列する。ビット拡張ブロックは、Wのガイダンスに従って、下位6ビットを渡し、それに応じて上位2ビットを埋める。この例では、このimapは正の値しか持たないことがわかっているため、値を8ビットにゼロ拡張する。層が符号付きimap値を有していた場合、エクステンダブロックは代わりに符号拡張する。その結果、値0010 1100、元のIが乗算器に送信される。OFSは以前のように更新される:OFS=(0+5+1)mod8=6。これは8を超えないため、システムは次のサイクルでimapバッファから値を読み取らない。サイクルの終わりまでに、新しい幅フィールドがWに読み込まれる。これは、BBlock1の幅である。サイクル3において、図9Cが示すように、OFSは、シフタに(レジスタL、レジスタR)を6桁だけスライドさせるように命令するために使用される。Wは100で8ビットにゼロ拡張されるため、エクステンダブロックは5つの最下位ビットを渡す。次に、OFSを(6+4+1)mod8に更新できる。これは8を超えるため、レジスタLとレジスタRがスワップされ、次のサイクルで次のimap行がLにロードされる。
【0069】
層のすべてのチャネルのimap値とfmap値が処理されると、アキュムレータに出力マップが含まれる。ほとんどの場合、SCNNはこれらの値を読み取り、アクティベーション関数に渡し、ゼロの値を削除し、残りをomapバッファにコピーする(場合によっては、omapバッファが次の層用のimapバッファになるようにポインタを交換する)。システム100は、ゼロ圧縮の出力を使用する。BBlockごとの値の数は、ユーザ及び/または設計者が選択できる。図10Bは、本実施形態による、サイクルごとに4つの入力値を処理し、Bブロックサイズが4である圧縮モジュール124の圧縮ブロックの例を示す。
【0070】
図10Aは、圧縮モジュール124の一例が、(1)幅検出器、(2)4つのコンパクタユニット(CU)、及び(3)32ビット出力レジスタの3つの主要構成要素を含むことができることを示す。圧縮モジュールは、サイクルごとに4つの8ビット値を読み取り、それらをBBlockにエンコードして出力レジスタに格納する。レジスタの32ビットがすべて埋められると、それをomapバッファに送信する。サイクルごとに完全な行を生成できる。場合によっては、バッファ行をより遅いペースで出力することができ、これは、圧縮によって行ごとにより多くの値をパックできるためである。このため、imapバッファにコピーする必要があるビット数が少なくなり、エネルギーを節約できる。
【0071】
幅検出器モジュール126は、最大の大きさの値を収容するのに必要なビット幅を識別する。例えば、値が正であると想定される場合(ReLUを使用する場合)、幅検出器モジュール126は最初に8つの信号を生成し、ビットプレーンごとに1つが、4つの値にまたがるすべての対応するビットのORである。次に、8つの信号は、すべての値の中で1である最上位ビットを識別するリーディング1検出器モジュールを通過する。これは、BBlockが必要とする幅である。層に符号付きの値があり得る場合、それらはリーディング1検出器の前で反転できる(負の数の場合、検出器は最上位ビットがゼロかどうかを判断する)。この場合の幅には、符号用にもう1ビット必要である。マップが負の数であり得るかどうかは静的にわかる。検出された幅は、幅バッファに書き込むことができる。したがって、負の値を含む可能性のあるデータ値については、値は、この符号ビットの値に基づいて、アンパック後に値を符号拡張することができる。正の値は最上位位置にゼロビットを追加して全幅に拡張できるが、1の符号ビットによって決定される負の値は、値1のビットを使用して拡張できる。
【0072】
図10Bは、解凍モジュール122をほぼ反映する圧縮モジュール124の圧縮ブロックの構造を示す。場合によっては、hileraごとに1つの圧縮ブロックが存在し得る。レジスタLとレジスタRは、hileraの現在の行と次の行を保持する。圧縮ブロックはサイクルごとに値を処理する。その幅(検出器)の最下位ビットを抽出し、「シフト及びマスク」ブロックを介して、それらを適切な位置でレジスタRに格納する。値がレジスタRで現在未使用のままになっているビットよりも多くのビットを必要とする場合、残りのビットはレジスタLに書き込まれる。レジスタRがいっぱいになると、それが出力行レジスタ(構成要素(3))にコピーされ、2つのレジスタは単一ビットポインタ(図示せず)を使用してスワップされる。3ビット継続レジスタは、どのビット位置でレジスタRを満たすのを継続するかを指定する。シフト及びマスクブロックには、8ビット対16ビットのシフタが含まれており、右に最大7桁のシフトをサポートする必要がある。ほとんどの場合、システムが7ビットを超えてシフトする必要はない。これは、レジスタRに空きビットが残っておらず、書き出されてしまうことを意味するためである。
【0073】
場合によっては、SCNNは値をN.SamplesChannel-Height-Width(NCHW)の順序で格納できる。このように、SCNNはオンチップバッファのサイズを調整して、層ごとのimapとomapがオンチップバッファに収まるようにし、オフチップからチャネル順にfmapを読み取る。複数のタイルがある場合、各imapチャネルは同じサイズの部分でタイルにマップされ、fmapがブロードキャストされる。各タイルに割り当てられるimapの部分は、層の次元のみに依存する。しかしながら、SCNNはゼロ圧縮を使用するため、各部分に含まれるimap値の数は異なる。システム100は、データをさらに圧縮するために使用できる圧縮のためにこれらの特性を使用することができる。処理はそれでもimapバッファの先頭から開始できる。層の出力に値が書き込まれると、値はローカルomapバッファの最初の位置から配置される(各層のSCNNはimapをomapと交換し、前の層のomapが次の層のimapになるようにする)。
【0074】
SCNNと共に動作するDLモジュール128は、最初にfmapチャネルを格納し、すべてのfmapの値を一緒にパックし、最初にfmap0、チャネル0の値、次にfmap1、チャネル0の値、というように続く。処理中、タイルはチャネル0のすべてのfmap値を循環し、次にチャネル1のすべてを循環する、などである。DLモジュール128は、fmapの次元とカウントが静的に知られているので、各チャネルの終わりにいつ到達するかを決定でき、処理した値の数とスキップしたゼロの数を数えることができる。
【0075】
SCNNは、値ごとのスキップフィールドを使用してゼロを削除する。スキップフィールドはタイルの制御ロジックでのみ使用されるため(例えば、値の元の位置を決定するため)、それらをデータパスの近くではなく、制御ロジックの隣の別の構造に格納する方がよい場合がある。DLモジュール128は、このバッファを拡張して、BBlockごとの幅フィールドも格納する。一例では、3ビット及び8ビットの値のスキップフィールドが想定される場合、幅フィールドにはBBlockごとに3ビットのオーバーヘッド、または4つの値のBBlockが使用される場合は7%未満のビット単位のオーバーヘッドが必要である。8つの値のBBlockのオーバーヘッドは半分になる。
【0076】
図11Aは、高密度モデルを対象とするデータ並列アクセラレータで使用されるシステム100の例を示す(すなわち、パフォーマンスを改善するためにスパース性を利用しない)。アクセラレータには、オフチップアクセスを回避するためのグローバルバッファと、処理要素(PE)のグリッドがある。図11Bの例に示されるPEはサイクルごとに16個の(imap、fmap)値ペアを処理することができ、すべて同じomapに累積される。各PEには、独自のローカルimap、fmap、及びomapバッファがある。必要に応じて、変換ブロックは、最初にオフチップから読み取った値を使用可能な形式に変換してから、それらをグローバルオンチップバッファに書き込む(逆も同様)。PEのローカルバッファは、グローバルバッファから値を読み取り、その時点で解凍される。Omap値は、グローバルバッファに書き込む前に圧縮される。幅フィールドは、グローバルバッファの別のバンク及びアドレス空間に格納される。
【0077】
単なるSCNN実装と比較すると、有利な違いがある。これは、例えば、一部は様々なデータフローのセットをサポートする必要性と、一部は主に高密度のモデルをサポートする必要性に起因する。モデルでは、(a)オンチップ実装はゼロ圧縮を実装せず、(b)データフローの多様なセットをサポートするには、様々なレベルでimap及びfmapへのアクセスをブロックするためのサポートが必要であり、したがって、データフローの必要に応じて、各再利用ブロックの開始点を見つけることができる。
【0078】
ゼロ圧縮以外の他のデータフローをサポートするには、システム100がメモリへの値のマッピングを変更するため、追加のサポートが必要である。すべての値が同じ長さである場合、システム100は、imap、fmap、及びomap内の任意の値に直接インデックスを付けることができる。システム100はこれらの値を圧縮するので、メモリ内のそれらの位置は内容に依存するようになる。ポインタモジュール130は、ポインタを使用して、選択されたデータフローのブロッキング方式をサポートすることができる。一般に、必要なポインタはわずかであり、データがオンチップまたはオフチップで圧縮されるときに、明示的に格納する必要があるポインタはごくわずかである。ほとんどのポインタは、処理中にタイムリーに生成でき、一度使用すると破棄できる。これが可能となる理由は、(a)データフローは再利用を最大化するためにブロッキングを使用し、(b)データフローに従って処理が進むにつれて、システム100は、次に処理される再利用ブロックの開始位置に自然に遭遇するからである。このアプローチについては、最初に全結合層のコンテキストで説明し、次に畳み込み層について説明する。任意の適切な層タイプに適用できることが理解される。
【0079】
ほとんどの場合、全結合層は1つのimapとK個のfmapを入力として受け取り、fmapと同じ数の要素を持つomapを生成する。imapとfmapはすべて同じ数の要素Cを有している。K個のomap要素のそれぞれは、imapとfmapの1つとの内積である。システムは、オンチップからのimap再利用アクセスを利用できる。説明の目的で、PEが1つだけのアクセラレータを考えてみる。imapがオンチップに収まる場合、オフチップから一度imapを読み取ってから、fmapを循環させることができる。この場合、imapと各fmapへのアクセスはシーケンシャルになる。imapが大きすぎてオンチップに収まらない場合、システム100はブロッキングを使用でき、このブロックでは、システムがfmapの対応する部分を循環している間、いつでもimapの一部(再利用ブロック)のみがオンチップにロードされる。結果として得られるオンチップのアクセスパターンは、再利用ブロックごとに連続したままになる。システム100が現在のimap再利用ブロックの処理を完了すると、次のimap再利用ブロックに移ることができる。したがって、全結合層の場合、システム100は、一般に、imapまたはfmapの比較的長いブロックへの順次アクセスをサポートするだけでよい。値が圧縮されていない場合、各再利用ブロックの開始位置は、ブロックのサイズとその相対位置の線形関数になる。ほとんどの場合、これらの位置は値の内容に依存する。アクセスパターンはシーケンシャルであるため、DLモジュール128は、データフローによって要求されるように、順番に各再使用ブロックの開始に到達する。したがって、ほとんどの場合、ポインタモジュール130は、fmapごとに、かつimapに対して単一のアクセスポインタを維持するだけでよい。複数のPEがある場合、マップは、DLモジュール128が同時に処理できるより小さい再使用ブロックに分割することができる。次に、システム100は、同時に処理する必要がある再使用ブロックの数と同数のポインタを必要とし、これは層の追加のメタデータとして格納することができる。
【0080】
N.Samples-Height-Width-Channel(NHWC)メモリマッピングを使用して、畳み込み層のデータの局所性を高めることができる。全結合層と比較して、畳み込み層の追加の課題は、複数の、しばしば重複するウィンドウへのアクセスを開始できる必要があることである。一般性を失うことなく、各ウィンドウがチャネル、幅、高さの順序で処理される、チャネル優先の出力定常データフローを考えてみる。列という用語は、同じ(幅、高さ)座標を持つすべてのimap値を参照するために使用できる。単一のomapを決定するために、データフローは列内の値に順次アクセスしてから、幅と高さの順に他の列にアクセスできる。Bovedaは、NHWCマッピングに従って、各列に沿って値をBBlockに順次グループ化できる。
【0081】
システム100の技術的課題は、各列の開始位置が一般にもはやその(幅、高さ)座標の線形関数ではなくなることである。単純な解決策は、各列(第1のチャネルの2D座標)へのポインタを保持することである。これは過剰であり、なぜなら、(a)いくつかのウィンドウの処理中に各列が必要であり(例えば、3×3のfmapの場合、各列は9回アクセスされる)、(b)ウィンドウは通常オーバーラップするため、各列の開始位置が前のウィンドウの処理中に検出されるからである。したがって、ポインタモジュール130は、処理中に残りを「復元」して必要な期間だけ保持しながら、メタデータとして明示的に格納されるポインタの数を減らす。imapに沿って格納する必要があるポインタの数は、imapとfmapの次元、及びウィンドウの数に依存する。一例では、
【数2】
を使用できる。ここで、H、S、及びウィンドウはそれぞれ、imap行、fmap行、及び同時に処理するウィンドウの最大数である。オンチップ処理では、ほとんどの場合、2セットのレジスタが必要である。1つは現在のポイントのセットを保持するためのもので、もう1つは次のセットを「復元」するためのものである。例えば、230×230のimapと3×3のfmapを持つ層の場合、約700個のポインタを格納するだけで、200個を超えるウィンドウを並行して処理できる。各fmapはウィンドウごとに1回読み取られるので、ポインタモジュール130も、fmapごとにポインタを保持することができる。オーバーヘッドは小さく、深さ方向に分離可能な畳み込みを除いて、最小のフィルタでさえ幅と高さが3×3で、数十チャネルの深さである。場合によっては、絶対ポインタを格納するのではなく、ポインタモジュール130は、ベースアドレス及び他のすべてのポインタをオフセットとして格納することができる。
【0082】
高いPE使用率に必要なだけ広い範囲で読み取りを実行する機能を維持するために、一部のBBlockの開始位置を制限して、オンチップメモリ内の行に整列するようにできる。場合によっては、すべてのfmap及びimapのすべてのS列(Sはストライド)の最初の値を、メモリ行の先頭に整列されるように制限できる。したがって、パディングが必要になる場合がある。しかしながら、このパディングは、有効な圧縮率を最小限に抑えるため、値を圧縮しない場合と比較してフットプリントを増加させない。
【0083】
システム100は、深さ方向の個別の畳み込みやプーリングなど、他の層に適用できる。各BBlockは並列にデコードできるので、システム100は、並列処理を並列に開始するために、並列処理×ブロックサイズのポインタを格納する必要がある場合がある。
【0084】
ポインタのオーバーヘッドの削減に加えて、システム100はグループのオーバーヘッドも削減することができる。元の設計では、値のlog2(ビット幅)ビットを使用してBBlockサイズを格納するが、BBlockサイズの値が繰り返される傾向があるという観察結果から、これをさらに減らすことができる。システム100は、BBlockごとに余分なビットを使用して、BBlockのサイズが前のものと同じかどうかを検出できる。その場合、メモリから新しいサイズを読み取る必要はない。したがって、新しいBBlockサイズには1ビット+log2(ビット幅)ビットのオーバーヘッドがあり、繰り返されるサイズは1ビットのオーバーヘッドになる。
【0085】
有利には、様々な実施形態において、システム100は推論を対象とすることができ、無損失かつ透過性である。すべての値の予想される分布に依存することができ、スパース性の恩恵を受けるが、それを必要としない。
【0086】
一部のニューラルネットワークは、値の空間相関を示し、これにより、同様の大きさを有する同じBBlock内の値になる。このような場合、格納する必要があるデータの量を減らすために、この値に対して関数を実行すると有利である。例えば、最初にすべての値を共通のバイアス値との差として表すことが有利な場合がある。バイアスに対する適切な選択は、例えば、BBlock内の最大値または定数である。差が元の値よりもはるかに小さい場合、このアプローチにより、パックされた値ごとに使用されるビット数が少なくなる。バイアスは、追加のオプションフィールドに保存できる。差分以外の関数を使用する場合がある。
【0087】
一部のニューラルネットワークでは、数値の浮動小数点表現が使用される。この表現はトリプレット(符号、指数、仮数)を使用する。例えば、一般的な表現では、符号が1ビット、指数が8ビット、仮数が23ビットの32ビットを使用する。この方法を使用して、バイアスを除去した後、指数の長さを動的に調整できる。例えば、指数がそれぞれEa、Eb、Ec、及びEdである4つの浮動小数点値(a、b、c、d)のブロックの場合、エンコードされたブロックは代わりに(Ea-バイアス、Eb-Ea、Ec-Ea、Ec-Ed)を格納できる。この場合の幅フィールドは、エンコードされたブロック内の値の最大値を表すために必要なビット数をエンコードする。バイアスは、浮動小数点標準によって定義された定数である。復号後の加算器のセットは、復号された(Ea-バイアス、Eb-Ea、Ec-Ea、Ec-Ed)の後に元のブロック(Ea、Eb、Ec、Ed)を復元できる。圧縮中、圧縮ユニットの前の減算器は、元の(Ea、Eb、Ec、Ed)とバイアスを与えられて(Ea-バイアス、Eb-Ea、Ec-Ea、Ec-Ed)を計算できる。オプションで、追加の幅フィールドを必要とせずに、グローバル共通幅を使用して仮数を格納できる。
【0088】
Efficient Inference Engine(EIE)などの他のアプローチでは、深層圧縮を使用して、全結合層のfmapサイズを大幅に削減する。深層圧縮は、fmapを変更して限られた値のセット(例えば、16)を使用し、ハフマン符号化とルックアップテーブルを使用して実行時に値をデコードするため、非常に特殊化されている。対照的に、このシステムは「すぐに使える」ニューラルネットワークで動作できる。
【0089】
DMAの圧縮などの他のアプローチでは、ブロックごとのビットベクトル使用を用いて、オフチップのゼロ値を削除できる。対照的に、様々な実施形態では、システムは、オンチップ圧縮及びすべての値を対象とすることができる。Extended BitPlane Compression(EBPC)などの他のアプローチでは、特にプルーニングされたモデルの場合、ゼロ長エンコーディングとビットプレーン圧縮を組み合わせたオフチップ圧縮を使用できる。EBPCの解凍モジュールは、8つの8ビット値のブロックごとに8サイクルを必要とする。対照的に、様々な実施形態では、システムは高密度ネットワークとスパースネットワークの両方から利益を得ることができ、サイクルごとにブロックを解凍する。ShapeShifterなどの他のアプローチでは、データコンテナを値のコンテンツに適合させ、ゼロビットベクトルを使用するオフチップ圧縮を使用できる。ShapeShifterのコンテナは、整列に関係なく、メモリ空間に順次格納される。ブロックごとの解凍は、ブロックごとに一度に値に対して順次実行される。したがって、ShapeShifterはオンチップ圧縮には適していない。Diffyなどの他のアプローチは、値をデルタとして格納することでShapeShifterを拡張する。Diffyは、imap値が高い空間相関を示す計算イメージングニューラルネットワークを対象としている。Diffyは、符号化と復号にデルタの計算が必要なため、このシステムの実施形態よりも計算コストが大幅に高くなる。Proteusなどの他のアプローチでは、プロファイルから導出された層ごとのデータ幅を使用して、オンチップ及びオフチップに値を格納できる。したがって、層内の値の偏った分布を利用することはできず、層ごとの最大の大きさがすべての値の幅を決定する。本システムの実施形態は、実質的により細かい粒度でデータ幅を適合させるために使用することができる。
【0090】
図3は、一実施形態による、深層学習ネットワークのためのメモリ圧縮のための方法300のフローチャートを示す。
【0091】
ブロック302で、入力モジュール120は、深層学習モデルの1つまたは複数の層によって処理される入力データストリームを受信する。
【0092】
ブロック304で、幅検出器モジュール126は、最大の大きさを有する入力データストリームからの値を収容するのに必要なビット幅を決定する。
【0093】
ブロック306で、圧縮モジュール124は、入力データストリームの最下位ビットを第1のメモリストア(レジスタ「R」など)に格納する。ビット数はビット幅に等しい。値が、現在第1のメモリストアで未使用のままになっているビットよりも多くのビットを必要とする場合、残りのビットは第2のメモリストア(例えば、レジスタ「L」)に書き込まれる。
【0094】
ブロック308で、圧縮モジュール124は、第1のメモリストアがいっぱいになると、第1のメモリストアの値を、圧縮されたデータストリームの連続部分として、第1のメモリストア内のデータの関連する幅とともに出力する。圧縮モジュール124は、第2のメモリストアの値を第1のメモリストアにコピーする。
【0095】
ブロック310で、解凍モジュール122は、それぞれの幅を有する圧縮されたデータストリームからデータを受信し、データを第1のメモリストアから第2のメモリストアに移動し、第1のメモリストアは、圧縮されたデータストリームから以前に格納されたデータを含む。
【0096】
ブロック312で、解凍モジュール122は、圧縮されたデータストリームのそれぞれのビットを、第1のメモリストアの幅に等しい長さを有する第1のメモリストアに格納する。
【0097】
ブロック314で、解凍モジュール122は、第1のメモリストア及び第2のメモリストア内のデータを連結する。
【0098】
ブロック316で、解凍モジュール122は連結されたデータを出力し、連結されたデータは、圧縮されたデータストリームから受け取った連結された値の関連する幅に等しい幅を有する。
【0099】
本発明者らは、本実施形態の技術的利点を評価するために実験例を行った。実験例では、実行時間とエネルギーをモデル化するためにカスタムのサイクル精度シミュレータが使用された。シミュレータは、DRAMSim2を使用してオフチップメモリアクセスをモデル化した。すべてのアクセラレータとハードウェアモジュールはVerilogで実装され、Synopsys Design Compilerで合成され、ライセンシーの制約によりTSMCの65nmセルライブラリ用にCadence Innovusで配置された。電力は、Mentor Graphics ModelSimによって報告された回路アクティビティを使用して、Innovusを介して推定された。CACTIを使用して、オンチップメモリの面積と消費電力をモデル化した。すべてのアクセラレータは、オンチップメモリのCACTI速度推定に一致する1GHzで動作した。表1に、調査したネットワークモデルと、fmap及びimapのフットプリントを示す。ほとんどのモデルは8ビットに量子化された。いくつかのモデルは、より積極的な量子化を使用している。元々、これらのモデルは特殊化されたアーキテクチャと組み合わせて開発された。
【表1】
【0100】
実験例は、本実施形態が方法固有のハードウェアを必要とせずに可能な限り最高のメモリ利益をもたらすことを実証した。これらのモデルには以下が含まれる:
・ IntelのINQ。そのfmap値は、符号付きの2の16乗またはゼロに制限されている。重みを大きさとして表すには16ビットが必要であるが、特殊化されたハードウェアでは5ビットで十分であった。
・ PACT。構成可能な飽和閾値を備えた変更されたReLUが必要であり、8ビットを使用した最初と最後の層を除くすべてに4ビットのimapとfmapを使用した。外れ値認識量子化は、個別に処理されたいくつかの大きな値(8ビットの外れ値)を除いて、ほとんどの値(例えば、4ビット)のビット数を積極的に削減した。
・ IntelのSkim CaffeリポジトリとMITのEyerissグループ(SCNNは一般にプルーニングされたモデルに優れているため)。
【0101】
実験例には、16×16行に編成された256個の処理エンジンを備えた高密度モデルアクセラレータに関してシステムを検証することが含まれていた。各処理エンジンは、8つのMACSを並行して実行し、単一の値を生成した。各PEには、64エントリのimap、fmap、及びomapバッファがあった。システムは8つのBBlockサイズを使用した。32バンクのグローバルバッファが処理エンジンを供給した。
【0102】
図12Aは、ニューラルネットワーク全体のメモリフットプリントを報告するチャートを示す。フットプリントはビット単位で測定され、図はベースラインに対するシステムのフットプリントを報告している。Bovedaはメモリを使用して、a)エンコードされた値、b)BBlock幅ごとのメタデータ、c)メモリ整列によるパディング、d)ポインタを格納する。平均して、システムはフットプリントを49%に削減する。SSD-MobileNetとMobileNetのメリットは16%と最も少ないが、オフチップアクセスが桁違いに高価であることを考えると、それでもかなりの量である。特殊化された量子化を伴うモデルは、図12Aで強調されて理想的なメモリフットプリントを実証しており、ここで、メモリ階層はそれらのために特別に設計された。このシステムは、フットプリントを理想的に可能なものの4%以内に削減する。ResNet18-PACTの場合、システムは4ビットハードウェアで可能だったよりもはるかにフットプリントを削減する。これは、システムが実際の値のコンテンツを利用するためである。
【0103】
システムは、オンチップストレージのビットあたりの情報コンテンツを増やす。したがって、処理エンジンがオンチップ階層からフェッチする必要があるデータは少なくなる。図12Bは、トラフィックのこの減少を示すチャートを示す。このシステムがない場合、アクセスはデータを読み取るだけであるが、このシステムがある場合、アクセスはメタデータも読み取ることができる。したがって、a)アクセス、及びb)転送されたビット、の2つの測定値が示されている。どちらもベースラインに正規化されている。システムは平均で62%少ない転送を実行し、合計で50%少ないビットを転送した。予想どおり、アクセスの大部分はfmapとimapに対するものであった。ビットトラフィックの減少は、メタデータによるアクセスの減少よりも小さかった。観測された傾向は、全体的なフットプリントの傾向と同様である。この減少は、エネルギーの節約に直接換算できる。
【0104】
アクセラレータを設計する際の主な設計上の選択肢は、使用するオンチップストレージの量である。オンチップメモリを大きくすると、オフチップからのデータフェッチの頻度が減少する。例えば、SCNNのオンチップバッファは、特徴マップをオフチップに流出させる必要がほとんどないようにサイズ設定されている。実験例では、オンチップ容量のサイジングに関する4つのポリシーを調査した。a)最大層のimap、omap及びfmap、b)imapからのfmap及びウィンドウの完全な行、及びc)imapからのウィンドウの完全な行及び処理エンジンごとのfmapに適合できることである。ポリシー(a)では、入力と最終出力のみがオフチップになった。ポリシー(b)では、層ごとに各値がオフチップから1回アクセスされることが保証されていた。ポリシー(c)では、imapとomapに対してのみ層ごとに1つのアクセスが保証されていた。また、(d)中間のi/omap値のためにオフチップにならずに複数の層のサブセットを処理する層の融合も考慮された。
【0105】
図13Aは、上記の各サイジングポリシーの下で必要とされるオンチップメモリ容量を示すチャートである。容量は、同じポリシーの下でベースラインに正規化された(ポリシーごとに異なる)。全体として、必要なストレージの減少は、圧縮率に密接に連動していた。1つの場合では、第1のポリシー(層全部がオンチップ)を使用したSSD-MobileNetでは減少が不可能であった。システムが全体的なオンチップデータボリュームを削減しなかった単一の層があった。システムによって全体的なモデルトラフィックとフットプリントが削減されたため、それでもエネルギーとパフォーマンスのメリットがあった。使用されたアクセスポリシーに関係なく、システムはアクセラレータがオフチップにならなければならない頻度を減らした。図13Bは、システムあり(実線)及びなし(点線)のモデルごとのオフチップトラフィックを示すチャートを示す。わかりやすくするために、ネットワークのサブセットのみが示されている。可能な場合、すべての値が層ごとに1回アクセスされるように、トラフィックが正規化された。オンチップメモリサイズが増加するにつれて、トラフィックはこの最小値に近づいた。このシステムでは、より小さなオンチップメモリを使用できる。さらに、所与のメモリ容量に対して、システムはオフチップトラフィックを削減する。例えば、SegNetの場合、512KBのオンチップストレージでも、本システムを使用せずに最小限のトラフィックを達成するには不十分であった。32KBのオンチップストレージを使用すると、システムはオフチップトラフィックをResNet18で3.8倍(値を1回読み取る場合に対して、システムありのトラフィックでは1.48倍、システム無しでは5.66倍)、ResNet50S OAで2.6倍削減する。
【0106】
実験例では、96KB、192KB、及び256KBのオンチップグローバルバッファを使用した3つの構成のパフォーマンスを測定した。すべて、DDR4-3200デュアルチャネルオフチップメモリを使用した。図14Aは、96KBのグローバルバッファでベースラインに対して正規化されたスピードアップを示すチャートを示している。このシステムは、パフォーマンスを平均でそれぞれ1.4倍、1.2倍、1.1倍改善させる。改善は、畳み込み層がかなり大きく、システムがデータをかなり圧縮するSegNetで最高である。このシステムの利点は、MobileNetV2-OA、MobileNet、及びResNet18-INQについても顕著であり、システムはいくつかの層でチップからの流出を回避することができる。システムのオンチップ階層は、ベースラインのピーク実行帯域幅を維持できるため、システムのパフォーマンス上の利点は、オフチップトラフィックの削減から得られる。図14Aはまた、同じメモリ構成の相対エネルギーを示している。システムは、96KB、192KB、及び256KB構成で、それぞれ平均28%、16%、及び10%のエネルギーを節約する。これらの利点は、オフチップ及びオンチップのトラフィックが少ないためである。オンチップ容量が増加すると、オフチップアクセスが減少し、それらの全体的なエネルギーコストも減少する。
【0107】
表2は、圧縮と解凍の面積と電力を示している。幅検出器モジュール126は、BBlockごとに共有される。96KB、192KB、及び256KBのオンチップ構成の合計面積オーバーヘッドは、6.7%、3.8%、及び3.2%である。しかしながら、この面積がベースライン用の追加メモリに費やされた場合でも、システムは平均で1.29倍、1.15倍、及び1.1倍高速であり、ベースライン用のオンチップアクセスの費用はわずかなので、エネルギー効率がわずかに高くなる。
【表2】
【0108】
SCNNは、オンチップ及びオフチップでゼロ圧縮を使用した。16ビットネットワークの場合、SCNNは4ビットゼロスキップインデックスを使用した。実験例では、システムは8ビットネットワークの代わりに3ビットインデックスを使用して、メタデータのオーバーヘッドを削減した。そうしても、除去されるゼロの数には影響しないことがわかった。この場合、システムはゼロスキップインデックスを圧縮しない。図14Bは、SCNNのゼロ圧縮を超えるシステムを使用したモデル全体のフットプリントの削減を示すチャートを示す。このシステムは、ゼロ圧縮に比べてメモリフットプリントを平均34%削減する。SCNNは通常、AlexNet及びGoogLeNetのすべてのimapオンチップに適合するようにオンチップメモリのサイズを設定する。この構成により、ResNet50などのより大規模なネットワークがオフチップにデータを流出させる。さらに、アキュムレータのサイズによって、結果としてomap値の数と同時実行フィルタの数が制限される。オンチップのストレージ容量を増幅することにより、システムは流出を減らす。これらの影響は、PE imap/アキュムレータごとに3つの異なる構成、SCNNのような10KB/6KB、4KB/4KB、及び2KB/2KBで調査された。オフチップメモリは、DDR4-3200の2つのチャネルを使用した。これらの構成の面積オーバーヘッドは、SCNN16ビットでそれぞれ3.1%、2.3%、1.8%であった。SCNN8ビットではオーバーヘッドはより小さくなる。
【0109】
図15Aは、本システムの実施形態を使用する場合と使用しない場合の2KB/2KB構成に対するスピードアップを示すチャートを示す。2KB/2KB構成では、システムのパフォーマンスが29%改善した。最近のResNet50モデルでは、そのimapが大きいため、システムによる改善がより顕著であった。10KB/6KBでは、システムのパフォーマンスが15%改善した。図15Aは、エネルギーが、3つの構成についてそれぞれ平均で26%、24%、及び20%減少することを示している。実験例は、システムが常にエネルギーを削減したことを示している。GoogLeNetやResNet50などの計算バウンドモデルでは、オンチップトラフィックが全体のエネルギーのより高い割合を占めるため、より多くの利点が見られた。
【0110】
実験例では、システムが第1世代のテンソル処理ユニット(TPU)にもメリットをもたらし得ることが実証された。TPUには28MBのオンチップimapメモリが組み込まれ、重み固定データフローを使用してオフチップDRAMからfmapをストリーミングした。256×256×8ビットシストリックアレイがomapを計算した。FmapはDRAMで圧縮されたままにされ、オンチップバッファはシストリックアレイの直前でそれらを解凍した。同様に、imapはオンチップDRAMで圧縮されたままになり、シストリックデータセットアップユニットによって解凍される。図16Aは、16のBBlockについてシステムを有する場合と有しない場合のTPUのメモリエネルギー内訳を示すチャートである。TPU上のシステムは0.1%未満の無視できる面積オーバーヘッドであった。
【0111】
最初にモデルは16ビットの固定小数点を使用したが、現在では多くのモデルで8ビットが標準になっている。より広範なモデルセット全体で狭いデータ型に対するシステムの潜在的な有効性をさらに調査するために、実験例では、既存の8ビット層をより少ないビット数にスケーリングすることで合成6ビット、4ビット、及び3ビットネットワークを生成するとともに、値の元の相対分布(線形量子化)を維持した。図16Bは、8のBBlockで圧縮されたこれらの層の代表的なサブセットに対する理想的な圧縮率を示すチャートである。結果は、システムが4ビット層に対して依然として有効であることを示している。3ビット層の場合、時には、システムがフットプリントを縮小できないか、拡げてしまう場合があるが、一般的にはそれでも計算上の利点がある。
【0112】
一般に、システムの圧縮率は値の分布に依存し、次の式で与えられる。
【数3】
ここで、Bmaxは最大ビット長、P(X)は値の分布によって特定のビット長になる確率、Bminは、符号付きの値の場合は2、それ以外の場合は1である。符号付きの値の場合、最大圧縮率はP(X=2)=1のときに達成される。3ビットでグループサイズが8の場合、最大圧縮率は25%に制限され、4ビットでは43.75%に制限される。上記の式は、データフロー、アクセラレータ、層の次元に依存するパディングとポインタのオーバーヘッドを考慮していない。
【0113】
図17は、最適化されたBBlockサイズのオーバーヘッドに対するフットプリント減少を示すチャートである。平均して、グループの最適化を繰り返すと、BBlockサイズのオーバーヘッドが平均で28%削減される。ResNet18-PACTは、4ビット値のBBlockサイズが繰り返される可能性が高いため、58%で最適な減少となる。
【0114】
図15Bは、汎用システムのためのキャッシュ圧縮スキームである頻出パターン圧縮(FPC)及びBase-Delta-Immediate(BΔI)のフットプリント減少を示すチャートである。両方とも、他のプロパティに加えて、値の幅をターゲットにしている。FPCは、プログラマが必要な実際の値の範囲に関係なく32ビット変数を使用する傾向があるという観察によって動機付けられた。FPCは、2のべき乗のサイズのコンテナ(4ビットが最小)で値を格納できるかどうかを検出する。それは平均して、フットプリントを18%削減する。これはほとんどゼロの削除によるものである。B△Iは、プログラム内の値の低ダイナミックレンジを利用する(隣接する値は値が近い傾向がある)。それは64バイトのチャンクで動作し、バイト粒度で幅を縮小する。これは、ゼロまたは8、4、または2バイトの最初の値からの、4、2、または1バイトの差分として値を表す。すべてのゼロチャンクは、1バイトとメタデータとして表される。このバイト粒度は、ニューラルネットワークには大きすぎる。最善でも、ゼロ値を利用するResNet50S-OAのフットプリントを7%削減するものである。
【0115】
実験例では、B△Iの要素を組み込んだシステムの変形であるシステムB△Iを評価した。これは、B△Iの値ごとの圧縮方法を適用したが、より小さい粒度においてである。圧縮オプションは、すべてのビットがゼロで、デルタサイズが8ビット、4ビット、及び2ビットであった。これにより、解凍を、並行して、出力に大きなクロスバーを必要とせずに処理できるように、値をhileraにパックした。ベースは常に1バイトであるように設定され、ワーキングセットの値は8のBBlockに削減された。システムは、B△Iを使用して、幅とポインタのメタデータのオーバーヘッドを無視すれば平均で44%の圧縮を達成した。これは、B△Iを使用しないでシステムが達成するものに近いものである。しかし、B△Iを使用したシステムでの値の解凍は、かなり複雑で、より多くのエネルギーが必要であった。例えば、ブロックを解凍するには、8つの加算を並行して行う必要があり、さらにそれらすべてにベースをブロードキャストする必要がある。圧縮もより関与しており、最適なものを選択する前に、すべての圧縮の可能性を並行して実行する。B△Iを使用しないシステムは、圧縮率が高く、実装が簡単でもある。
【0116】
さらに、実験例は、値のコンテンツを利用するランレングス符号化及び辞書ベースの圧縮と比較された。ランレングス符号化は8つの値に制限され、辞書テーブルは8エントリに制限され、8ビット値のオーバーヘッドを妨げることを回避した。これらのアプローチは両方とも、本システムと比較すると、達成した圧縮率はより低いが、解凍には高価なクロスバーが必要であった。
【0117】
実験例は、本実施形態が実装が容易であり、ニューラルネットワークのための効果的なオンチップ圧縮技術を提供することを示している。これは有効なオンチップ容量を増やしながら、オンチップトラフィックを削減する。その結果、過剰なオフチップアクセスを回避するために必要なオンチップストレージの量が削減される。さらに、所与のオンチップストレージ構成では、オフチップアクセスが必要になる頻度を減らす。
【0118】
本発明は、特定の実施形態を参照して説明されたが、本明細書に添付の請求項に記載された本発明の趣旨及び範囲から逸脱することなく、それらの様々な変更及び修正が当業者には明白となるであろう。

図1
図2
図3
図4A
図4B
図5A
図5B
図6
図7
図8A
図8B
図8C
図9A
図9B
図9C
図10A
図10B
図11A
図11B
図12A
図12B
図13A
図13B
図14A
図14B
図15A
図15B
図16A
図16B
図17
【国際調査報告】