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

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

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

特表2025-504420機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法
<>
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図1
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図2
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図3
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図4
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図5
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図6
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図7
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図8
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図9
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図10
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図11
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図12
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図13
  • 特表-機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2025-02-12
(54)【発明の名称】機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法
(51)【国際特許分類】
   H03M 7/40 20060101AFI20250204BHJP
   G06N 20/00 20190101ALI20250204BHJP
   G06F 12/04 20060101ALI20250204BHJP
【FI】
H03M7/40
G06N20/00
G06F12/04 530
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024541923
(86)(22)【出願日】2023-01-11
(85)【翻訳文提出日】2024-07-11
(86)【国際出願番号】 CA2023050025
(87)【国際公開番号】W WO2023137540
(87)【国際公開日】2023-07-27
(31)【優先権主張番号】63/300,720
(32)【優先日】2022-01-19
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.VERILOG
(71)【出願人】
【識別番号】522443372
【氏名又は名称】ザ ガバニング カウンシル オブ ザ ユニバーシティ オブ トロント
(74)【代理人】
【識別番号】100114775
【弁理士】
【氏名又は名称】高岡 亮一
(74)【代理人】
【識別番号】100121511
【弁理士】
【氏名又は名称】小田 直
(74)【代理人】
【識別番号】100202751
【弁理士】
【氏名又は名称】岩堀 明代
(74)【代理人】
【識別番号】100208580
【弁理士】
【氏名又は名称】三好 玲奈
(74)【代理人】
【識別番号】100227329
【弁理士】
【氏名又は名称】延原 愛
(72)【発明者】
【氏名】デルマス ラスコルス,アルベルト
(72)【発明者】
【氏名】モショヴォス,アンドレアス
【テーマコード(参考)】
5B160
5J064
【Fターム(参考)】
5B160DA08
5J064BA10
5J064BC02
5J064BC14
5J064BD01
(57)【要約】
機械学習ネットワークによって使用されるデータストリームを圧縮及び解凍するシステム及び方法を提供する。データストリームの各値をエンコードすることであって、複数の非重複範囲のうちの1つへのマッピングを決定することであって、各値は範囲及び対応するオフセットを表すシンボルとしてエンコードされる、決定することと、確率カウントを使用してシンボルを算術的に符号化することとを含む、エンコードすることと、算術符号化シンボル及び対応するオフセットを含む圧縮データストリームを格納することと、確率カウントを使用して算術復号で圧縮データストリームをデコードすることであって、算術復号化シンボルがオフセットビットを使用して、復号化データストリームに到達する、デコードすることと、機械学習ネットワークで使用するために復号化データストリームを通信することとを含む方法。
【選択図】図2

【特許請求の範囲】
【請求項1】
機械学習ネットワークによって使用されるデータストリームを圧縮及び解凍するための方法であって、前記データストリームは前記機械学習ネットワークによって使用される重みデータまたはアクティベーションデータを含み、
エンコードされる前記データストリームを受信することと、
前記データストリームの各値をエンコードすることであって、
複数の非重複範囲のうちの1つへのマッピングを決定することであって、各値は前記範囲及び対応するオフセットを表すシンボルとしてエンコードされる、前記決定することと、
確率カウントを使用して前記シンボルを算術的に符号化することとを含む、前記エンコードすることと、
前記算術符号化シンボル及び前記対応するオフセットを含む圧縮データストリームを格納することと、
前記確率カウントを使用して算術復号で前記圧縮データストリームをデコードすることであって、前記算術復号化シンボルが前記オフセットビットとともに使用されることで、復号化データストリームに到達する、前記デコードすることと、
前記機械学習ネットワークで使用するために前記復号化データストリームを通信することとを含む、前記方法。
【請求項2】
前記確率カウントは、入力サンプルの前記シンボルのおおよその発生頻度を表す値の範囲によって表される、請求項1に記載の方法。
【請求項3】
前記確率カウントは、均一の値分布で初期化される、請求項2に記載の方法。
【請求項4】
前記入力サンプルの前記確率カウントを使用して、前記非重複範囲を決定する、請求項2に記載の方法。
【請求項5】
前記データストリーム内の各値をエンコードすることは、パイプライン化を使用して複数の値を同時にエンコードすることを含み、前記圧縮データストリームをデコードすることは、パイプライン化を使用して複数の値を同時にデコードすることを含む、請求項1に記載の方法。
【請求項6】
前記データストリームはテンソルを含み、前記方法は、前記テンソルをいくつかのサブテンソルに分割することをさらに含み、各サブテンソルは、それぞれのパイプラインでエンコード及びデコードされる、請求項5に記載の方法。
【請求項7】
2つのレベルのエンコードを使用して、前記対応するオフセットをエンコードすることをさらに含む、請求項1に記載の方法。
【請求項8】
前記非重複範囲のそれぞれは、それぞれの最小値、最大値、及びオフセット長によって定義される、請求項1に記載の方法。
【請求項9】
前記非重複範囲は順序付けられ、各範囲の前記最大値は、前記順番に前記最小値から次の範囲の1つを引いた値である、請求項8に記載の方法。
【請求項10】
前記シンボルは、前記マッピングされた範囲の最小値を含み、前記対応するオフセットは、前記データストリームからの前記値から減算された前記マッピングされた範囲の前記最小値を含む、請求項1に記載の方法。
【請求項11】
前記データストリームの各値をエンコードすることは、プロファイリングを使用してアクティベーションデータの前記確率カウントを決定することを含む、請求項1に記載の方法。
【請求項12】
機械学習ネットワークによって使用されるデータストリームを圧縮及び解凍するシステムであって、前記データストリームは前記機械学習ネットワークによって使用される重みデータまたはアクティベーションデータを含み、
エンコードされる前記データストリームを受信し、前記データストリームの各値をエンコードする1つまたは複数のエンコーダであって、前記エンコードすることは、
複数の非重複範囲のうちの1つへのマッピングを決定することであって、各値は前記範囲及び対応するオフセットを表すシンボルとしてエンコードされる、前記決定することと、
確率カウントを使用して前記シンボルを算術的に符号化することとを含む、前記1つまたは複数のエンコーダと、
前記算術符号化シンボル及び前記対応するオフセットを含む圧縮データストリームを格納するメモリストレージと、
前記確率カウントを使用して算術復号で前記圧縮データストリームをデコードし、前記機械学習ネットワークで使用するために前記復号化データストリームを通信する1つまたは複数のデコーダとを含み、前記デコーダは前記算術復号化シンボル及び前記オフセットビットを使用することで、復号化データストリームに到達する、前記システム。
【請求項13】
前記確率カウントは、入力サンプルの前記シンボルのおおよその発生頻度を表す値の範囲によって表される、請求項12に記載のシステム。
【請求項14】
前記確率カウントは、均一の値分布で初期化される、請求項13に記載のシステム。
【請求項15】
前記入力サンプルの確率カウントを使用して、前記非重複範囲を決定する、請求項13に記載のシステム。
【請求項16】
前記データストリーム内の複数の値が、複数の前記エンコーダのそれぞれによって同時にエンコードされ、前記圧縮データストリーム内の複数の値が、複数の前記デコーダのそれぞれによって同時にデコードされる、請求項12に記載のシステム。
【請求項17】
前記データストリームはテンソルを含み、前記方法は、前記テンソルをいくつかのサブテンソルに分割することをさらに含み、各サブテンソルは別個のエンコーダによってエンコードされ、別個のデコーダによってデコードされる、請求項16に記載のシステム。
【請求項18】
前記エンコーダは、2つのレベルのエンコードを使用して、前記対応するオフセットをさらにエンコードする、請求項12に記載のシステム。
【請求項19】
前記非重複範囲のそれぞれは、それぞれの最小値、最大値、及びオフセット長によって定義される、請求項12に記載のシステム。
【請求項20】
前記非重複範囲は順序付けられ、各範囲の前記最大値は、前記順番に前記最小値から次の範囲の1つを引いた値である、請求項19に記載のシステム。
【請求項21】
前記シンボルは、前記マッピングされた範囲の最小値を含み、前記対応するオフセットは、前記データストリームからの前記値から減算された前記マッピングされた範囲の前記最小値を含む、請求項12に記載のシステム。
【請求項22】
前記エンコーダは、プロファイリングを使用してアクティベーションデータの前記確率カウントを決定する、請求項12に記載のシステム。

【発明の詳細な説明】
【技術分野】
【0001】
以下は、概して、データ圧縮技法に関し、より具体的には、機械学習ネットワークのためのオフチップデータを圧縮及び解凍するためのシステム及び方法に関する。
【背景技術】
【0002】
メモリ階層におけるデータ圧縮は、メモリアクセスが全体のエネルギー消費の大部分を占める深層学習(DL)ワークロードとアクセラレータにとって魅力的である。第1に、階層の任意のレベルでのデータ圧縮は、より少ないビットを使用して各値をエンコードすることにより、その有効容量を潜在的に増加させることができる。第2に、オフチップメモリへのアクセスを含む、より低速でエネルギー消費量の多い、上位階層へのアクセスを減らすことにより、効果的なレイテンシ及びエネルギー効率を改善することができる。第3に、圧縮によって値ごとに読み書きされるビット数が減少し、有効な帯域幅とエネルギー効率が向上できる。最後に、圧縮は、深層学習のメモリ階層のエネルギー効率を高める最前線の手法であるデータフローとデータ再利用のためのブロックを必然的に補完する。
【発明の概要】
【0003】
一態様では、機械学習ネットワークによって使用されるデータストリームを圧縮及び解凍するための方法が提供され、データストリームは、機械学習ネットワークによって使用される重みデータまたはアクティベーションデータを含み、この方法は、エンコードされるデータストリームを受信することと、データストリームの各値をエンコードすることであって、複数の非重複範囲のうちの1つへのマッピングを決定することであって、各値は範囲及び対応するオフセットを表すシンボルとしてエンコードされる、決定することと、確率カウントを使用してシンボルを算術的に符号化することとを含む、エンコードすることと、算術符号化シンボル及び対応するオフセットを含む圧縮データストリームを格納することと、確率カウントを使用して算術復号で圧縮データストリームをデコードすることであって、算術復号化シンボルがオフセットビットとともに使用されることで、復号化データストリームに到達する、デコードすることと、機械学習ネットワークで使用するために復号化データストリームを通信することとを含む。
【0004】
この方法の特定の場合では、確率カウントは、入力サンプルのシンボルのおおよその発生頻度を表す値の範囲によって表される。
【0005】
この方法の別の場合では、確率カウントは、均一の値分布で初期化される。
【0006】
この方法のさらに別の場合では、入力サンプルの確率カウントを使用して、非重複範囲を決定する。
【0007】
この方法のさらに別の場合では、データストリーム内の各値をエンコードすることは、パイプライン化を使用して複数の値を同時にエンコードすることを含み、圧縮データストリームをデコードすることは、パイプライン化を使用して複数の値を同時にデコードすることを含む。
【0008】
この方法のさらに別の場合では、データストリームはテンソルを含み、この方法は、テンソルをいくつかのサブテンソルに分割することをさらに含み、各サブテンソルは、それぞれのパイプラインでエンコード及びデコードされる。
【0009】
この方法のさらに別の場合では、この方法は、2つのレベルのエンコードを使用して、対応するオフセットをエンコードすることをさらに含む。
【0010】
この方法のさらに別の場合では、非重複範囲のそれぞれは、それぞれの最小値、最大値、及びオフセット長によって定義される。
【0011】
この方法のさらに別の場合では、非重複範囲は順序付けられ、各範囲の最大値は、順番に最小値から次の範囲の1つを引いた値である。
【0012】
この方法のさらに別の場合では、シンボルは、マッピングされた範囲の最小値を含み、対応するオフセットは、データストリームからの値から減算されたマッピングされた範囲の最小値を含む。
【0013】
この方法のさらに別の場合では、データストリームの各値をエンコードすることは、プロファイリングを使用してアクティベーションデータの確率カウントを決定することを含む。
【0014】
別の態様では、機械学習ネットワークによって使用されるデータストリームを圧縮及び解凍するためのシステムが提供され、データストリームは、機械学習ネットワークによって使用される重みデータまたはアクティベーションデータを含み、このシステムは、エンコードされるデータストリームを受信し、データストリームの各値をエンコードする1つまたは複数のエンコーダであって、エンコードすることは、複数の非重複範囲のうちの1つへのマッピングを決定することであって、各値は範囲及び対応するオフセットを表すシンボルとしてエンコードされる、決定することと、確率カウントを使用してシンボルを算術的に符号化することとを含む、1つまたは複数のエンコーダと、算術符号化シンボル及び対応するオフセットを含む圧縮データストリームを格納するメモリストレージと、確率カウントを使用して算術復号で圧縮データストリームをデコードし、機械学習ネットワークで使用するために復号化データストリームを通信する1つまたは複数のデコーダとを含み、デコーダは算術復号化シンボル及びオフセットビットを使用することで、復号化データストリームに到達する。
【0015】
このシステムの特定の場合では、確率カウントは、入力サンプルのシンボルのおおよその発生頻度を表す値の範囲によって表される。
【0016】
このシステムの別の場合では、確率カウントは、均一の値分布で初期化される。
【0017】
このシステムのさらに別の場合では、入力サンプルの確率カウントを使用して、非重複範囲を決定する。
【0018】
このシステムのさらに別の場合では、データストリーム内の複数の値が、複数のエンコーダのそれぞれによって同時にエンコードされ、圧縮データストリーム内の複数の値が、複数のデコーダのそれぞれによって同時にデコードされる。
【0019】
このシステムのさらに別の場合では、データストリームはテンソルを含み、この方法は、テンソルをいくつかのサブテンソルに分割することをさらに含み、各サブテンソルは別個のエンコーダによってエンコードされ、別個のデコーダによってデコードされる。
【0020】
このシステムのさらに別の場合では、エンコーダは、2つのレベルのエンコードを使用して、対応するオフセットをさらにエンコードする。
【0021】
このシステムのさらに別の場合では、非重複範囲のそれぞれは、それぞれの最小値、最大値、及びオフセット長によって定義される。
【0022】
このシステムのさらに別の場合では、シンボルは、マッピングされた範囲の最小値を含み、対応するオフセットは、データストリームからの値から減算されたマッピングされた範囲の最小値を含む。
【0023】
このシステムのさらに別の場合では、非重複範囲は順序付けられ、各範囲の最大値は、順番に最小値から次の範囲の1つを引いた値である。
【0024】
このシステムのさらに別の場合では、エンコーダは、プロファイリングを使用してデータストリーム内の各値をエンコードし、アクティベーションデータの確率カウントを決定する。
【0025】
これらの態様及び他の態様が企図され、本明細書に記載される。上記の発明の概要では、当業者が以下の詳細な説明を理解するのを支援するシステム及び方法の代表的な態様を示していることが理解されよう。
【0026】
実施形態のより深い理解が、図面を参照して得られるであろう。
【図面の簡単な説明】
【0027】
図1】実施形態による、機械学習ネットワークによって使用されるデータストリームを圧縮及び解凍するためのシステムのブロック図を示す。
図2】実施形態による、機械学習ネットワークによって使用されるデータストリームを圧縮及び解凍するための方法のフローチャート図表を示す。
図3】例示的なシストリックアレイアクセラレータのブロック図を示す。
図4図1のシステムを使用した別の例示的なシストリックアレイアクセラレータのブロック図を示す。
図5】機械学習ネットワークの2つの層の値に関する発生頻度の例示的な累積分布を示すグラフである。
図6図1のシステムによるエンコーダの例示的な実施態様へのインタフェースのブロック図を示す。
図7図1のシステムによるエンコーダの内部機構の例示的な実施態様のブロック図を示す。
図8図1のシステムによるSYMBOLルックアップブロックの例示的な構造のブロック図を示す。
図9図1のシステムによるPCNTテーブルブロックの例示的な構造のブロック図を示す。
図10図1のシステムによるHi/Lo/コード生成ブロックの例示的な構造のブロック図を示す。
図11図1のシステムによるデコーダの例示的な実施態様へのインタフェースのブロック図を示す。
図12図1のシステムによるデコーダの内部機構の例示的な実施態様のブロック図を示す。
図13】DNNモデルの重みについて、圧縮技術を実装しないベースラインに対して正規化されたオフチップメモリ転送によって消費されるエネルギーの例を示すグラフである。
図14】DNNモデル実行時アクティベーションについて、圧縮技術を実装しないベースラインに対して正規化されたオフチップメモリ転送によって消費されるエネルギーの例を示すグラフである。
【発明を実施するための形態】
【0028】
説明を簡単かつ明確にするために、適切であると考えられる場合、対応する要素または類似する要素を示すために、複数の図面間で参照番号を繰り返すことがある。さらに、本明細書に記載された実施形態の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、本明細書に記載された実施形態が、これらの具体的な詳細なしに実施され得ることは、当業者に理解されるであろう。他の例では、周知の方法、手順、及び構成要素は、本明細書に記載された実施形態を曖昧にしないように、詳細には説明されていない。また、説明は、本明細書に記載の実施形態の範囲を限定するものとはみなされない。
【0029】
本明細書全体で使用される様々な用語は、文脈が別段の指示を示さない限り、以下のように解釈し、理解することができる:全体を通して使用される「または」は包括的で、「及び/または」と記載されているとみなされる。全体を通して使用される単数形の冠詞及び代名詞はそれらの複数形も含み、逆もまた同様である。同様に、性別代名詞は、それと対になる代名詞を含むため、代名詞は、本明細書に記載されているものを単一の性別による使用、実装、実行などに限定するものとして理解されるべきではない。用語のさらなる定義が、本明細書に記載されることがあり、これらは、本明細書を読むことで理解されるように、これらの用語の前及び後の事例にも適用され得る。
【0030】
本明細書に例示される、命令を実行するモジュール、ユニット、コンポーネント、サーバ、コンピュータ、端末、またはデバイスはいずれも、記憶媒体、コンピュータ記憶媒体、またはデータ記憶デバイス(リムーバブル及び/または非リムーバブル)、例えば磁気ディスク、光ディスク、またはテープなどのコンピュータ可読媒体を含み得る、あるいはコンピュータ可読媒体にアクセスし得る。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ等の情報を格納するための任意の方法または技術で実装される揮発性および不揮発性の、取り外し可能および取り外し不可能な媒体が含まれ得る。コンピュータ記憶媒体の例としては、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD‐ROM、デジタル多用途ディスク(DVD)または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、またはアプリケーション、モジュール、もしくはその両方によってアクセスされ得る所望の情報を記憶するために使用され得る、任意の他の媒体が挙げられる。このような任意のコンピュータ記憶媒体は、デバイスの一部であってもよく、またはデバイスにアクセス可能もしくは接続可能であってもよい。さらに、文脈が別段に明示しない限り、本明細書に記載の任意のプロセッサまたはコントローラは、単一のプロセッサまたは複数のプロセッサとして実装され得る。複数のプロセッサは配列されても分散されてもよく、本明細書で言及される任意の処理機能は、単一のプロセッサが例示されていても、単一または複数のプロセッサによって実行され得る。本明細書で説明される方法、アプリケーション、またはモジュールはいずれも、このようなコンピュータ可読媒体により格納あるいは保持され、単一または複数のプロセッサによって実行され得るコンピュータ可読/実行可能命令を使用して、実装され得る。
【0031】
オフチップアクセスは一般にオンチップアクセスよりも桁違いにコストがかかるので(例えば、DRAMから32bにアクセスする古いテクノロジーノードは640pj要するのに対し、8KBのSRAMからは5pj要する)、ニューラルネットワークの圧縮方法は一般にオフチップアクセスを主な対象としている。これらの圧縮の成功により、オンチップアクセスの相対的なエネルギーコストが増加した。例えば、いくつかのアプローチでは、パラメータ(重み)を16ビット値の16エントリの辞書に量子化し、次に、これをハフマン符号を使用してエンコードする。これらのアプローチでは、追加のトレーニングステップが必要であり、モードの重みのみを対象とする。他のアプローチはゼロを対象とする一方で、その他のものもまた0または1のプレフィックスを対象とする。これらのアプローチは、アクティベーションを圧縮せずに、重みの値に追加の制約を課すか、または特定の期待値パターンを対象とするかのいずれかである。有利には、本開示の実施形態は、重み及び値の値分布における任意の不均一な挙動を利用する。算術符号(AC)は、場合によっては、最適に近い符号化効率を達成することができるロスレスデータ符号化/復号化アプローチで構築される。機械学習ワークロードにACを使用するには、大きな課題を克服する必要がある。なぜなら:(1)ACの実装は、除算などの高負荷な演算を必要とするため、コストがかかる傾向があり、(2)ACは本質的に逐次的であり、広範で高帯域幅である対象ワークロードのニーズと相反するからである。
【0032】
本開示の実施形態は、任意のアクセラレータと直接互換性があり得るロスレスオフチップメモリ圧縮アプローチを提供する。例えば、これには、Tensorコアを含むグラフィックプロセッサで使用されるものなどのSIMDユニット、TPUファミリーのものなどのシストリックアレイ、SCNNなどのスパース性のサポートの有無にかかわらない格子状の処理ユニットが含まれる。
【0033】
図1を参照すると、実施形態による、機械学習ネットワークのオフチップデータを圧縮及び解凍するためのシステム100の図が示されている。システム100は、複数のエンコーダ102とデコーダ104の専用ハードウェア回路から構成され、各ハードウェア回路は、一時的または非一時的コンピュータ可読媒体を備える1つまたは複数のメモリユニット106(レジスタなど)と通信する。さらなる場合には、システム100は、プロセッサ、マイクロプロセッサ、マイクロコントローラ、他の集積回路などで実装することができる。システム100は、エンコーダ102とデコーダ104の専用ハードウェア回路が(共有メモリ140などから)入力を受け取り、メモリユニット106と通信し、エンコード/デコードを(バッファ及び/または処理ユニット150などへ)出力することを可能にするローカルバスなど、適用可能または適切な他のコンポーネントを含み得る。場合によっては、システム100は、エンコーダ102及びデコーダ104、ならびに入力と通信する前処理モジュール108を含むことができる。
【0034】
システム100は、固定小数点量子化モデルのためのチップメモリ圧縮方法を実行する。方法は、深層学習アプリケーションで不均一な値分布を利用することにより、データ幅を減少させる。このようにして、方法を使用して、有効メモリ容量を増加させ、オフチップトラフィックを低減し、及び/またはより小さなオフチップメモリを使用しながら、所望のパフォーマンス/エネルギーの目標を達成することができる。図2を参照すると、機械学習ネットワークのオフチップデータを圧縮及び解凍するための方法200のフローチャートがそこに示されている。
【0035】
ブロック202では、データストリームは、処理ユニット150のバッファまたは処理ユニット自体から受信される。処理ユニットは、機械学習ネットワークの実行を起こす。データストリームの値は、例えば、テンソル形式で、機械学習ネットワークの重み及び/またはアクティベーション関連データを含むことができる。
【0036】
図3は、シストリックアレイアクセラレータの例を示し、図4は、オンチップ及びオフチップメモリ階層と処理ユニットとの間に配置されたシステム100を有するシストリックアレイアクセラレータの例を示す。そこで、オフチップから読み出される、または書き込まれる値をデコード及びエンコードする。システム100は、比較的少ないコストで対応するユニットにデータを入力できるように、メモリ内にデータを透過的にパッキングする任意の所望のデータフローを用いて機能することができる。システム100は、いくつかのエンコーダ及びデコーダユニットを使用して、高い同時実行性及び広いデータ幅のアクセスを維持できる可能性がある。オフチップメモリ階層には、一般に、アクセスはより少ないものではあるが、広範なアクセスの規則的な流れが依然として見られる。オフチップアクセスは、一般に、システム100が導入されていない場合と同じ幅のままである。オンチップメモリ階層及び処理ユニットは、通常、元の値に向けられているため、オフチップメモリシステムにアクセスするときのタイミングの違いを除いて、システム100はプラグインの互換性があり、実質的に透過的であることができる。
【0037】
高い圧縮率を達成するために、エンコーダ102は、機械学習ワークロードの自然に発生するデータ値分布を利用する。ゼロ、または0もしくは1のプレフィックスなどの特定の場合を対象とするのではなく、他のアプローチによって対象とされるように、エンコーダ102は、代わりに、分布が均一からかけ離れているという事実を使用する。例えば、本明細書に記載されるように、バイナリ形式で見られる値は、多くの場合、すべて0の値またはすべて1の値など、上位値及び下位値の2つの極値の近くに大量にクラスター化される傾向がある。これは、値が必ずしもすべて0またはすべて1であることを意味するものではなく、単に、値がこれら2つのパターンに近い傾向がある(番号順に並べられた場合)ということを意味する。このアプローチは、値分布における任意の不均一性をシームレスに利用することができる算術符号と類似点をいくつか共有する場合があるが、算術符号の実装は、一般に高コストであり、典型的には低帯域幅である。算術符号は一般に、除算などの高コストの演算を使用し、この実装は、エンコード中に1つの入力値を処理し、解凍中に一度に数ビットを生成することが多い。しかし、このような制限は、システム100の使用状況には適していない。一方で、システム100は、データを圧縮することによるエネルギー効率の利点が、圧縮/解凍を行うコストよりもはるかに上回る軽量アプローチを展開する。さらに、算術符号化とは対照的に、システム100は、一般的に高度にデータ並列化された機械学習ワークロードを扱うことができる。したがって、高帯域幅のメモリシステムのニーズに変換する複数の広範なデータアクセスが好まれる。このようにして、システム100は、低コストで、高度に同時実行であり、高帯域幅の実装を可能にする一方で、算術符号化によって可能な利点を達成することができる。
【0038】
図4の例に示されるように、場合によっては、システム100は、データがオフチップに移行するときに、及びオフチップによってもたらされるときにデータを変換する複数のデコーダ及びエンコーダユニットを導入することができる。図4の例では、メモリ階層を含むアクセラレータの残りの部分は、入ってくるデータの同じシーケンスを依然として観察することができ、それ以外の場合は同様にデータを依然として書き込むことができる。この場合、システム100は、データコンテンツがオフチップから/オフチップへ転送されるときにデータコンテンツだけを変更するため、ロスレスアプローチである。
【0039】
ブロック206では、各エンコーダ102は、データストリームから、受信した着信値vを(symbol、offset)の対としてエンコードする(ここでは、v=symbol+offset)。symbolは、元の値vのビットプレフィックスである。例えば、8ビットデータと仮定すると、それはb...bs0...0という形式である。エンコーダ102は、テンソルを含む入力データストリームを2つのストリームにエンコードし、一方はシンボルシーケンスを含み、他方は対応するオフセットを含む。算術符号をシンボルストリームで使用することができる。算術符号は、静的に得られた確率カウント及びシンボル割り当てテーブル(確率カウントテーブルと呼ばれる)を使用することができる。ブロック208では、エンコーダは、確率カウントテーブルをメモリ106に格納することができる。各確率カウントは、個々の値の代わりに値の範囲を表す。これは、圧縮効率をほとんど失わない低コストの実装を達成するのに寄与する。ヒューリスティック探索アルゴリズムを使用して、確率カウントテーブルを構築することができる。ニューラルネットワークの場合、ヒューリスティック探索アルゴリズムは層のレベルで動作することができるが、他のグループ化も可能である。ヒューリスティック探索アルゴリズムは、サンプル入力を受け取り、値の分布を使用して、入力値範囲を、各々がsymbolプレフィックスに加えてオフセットにも対応する開始値によって特徴付けられるいくつかの部分範囲に分割する。各部分範囲について、エンコーダ102は、部分範囲内の値が入力サンプルに現れるおおよその頻度を表す確率カウントを割り当てる。
【0040】
場合によっては、アクティベーションなどの実行時に生成される値について、エンコーダ103は、プロファイリングを使用して確率カウントテーブルを構築することができる。場合によっては、システム100は、アクティベーションに対する確率カウントを、実行時に計算されるため、認識していない。表作成アルゴリズムの実行はひどくコストがかかる可能性があり、ネットワークを実行する前に修正する必要がある。プロファイリングのために、ニューラルネットワークは特定の入力(例えば、サンプル画像)で実行でき、この入力に対してすべてアクティベーションが記録される。確率カウントテーブルがこの入力に対して決定され、その後の実行に使用される。このプロファイリングは、サンプル画像について決定された確率カウントが他の入力画像について発生するものの代表的な近似値であると仮定する。これは、個々の値が異なる入力画像によって大幅に変化する一方で、グループとして表示すると、分布は類似のままであるためである。
【0041】
システム100は、効率的であり、一般に低コストのハードウェアエンコーダ102及びデコーダ104を使用して、入力値がオフチップメモリから読み出されるときに入力値をシームレスにデコードし、出力値がオフチップメモリに書き込まれるときに出力値をエンコードすることができる。異なるグループ化が可能であるが、説明を明瞭にするために、本開示では、処理は層ごとに進行すると仮定する。
【0042】
ブロック210では、エンコーダ102は、符号化シンボル及びオフセットを共有メモリ140などのメモリストレージに出力する。ブロック212では、デコーダは、デコードして重み及び/またはアクティベーション関連データに戻す、例えば、テンソル形式に戻すデータストリームとして、共有メモリから符号化シンボル及びオフセットを受信する。
【0043】
ブロック214では、確率カウントテーブルのコンテンツが、メモリ106からデコーダ104にロードされる。ブロック216では、デコーダ104は、確率カウントテーブルを使用して、入力データをデコードする。入力データは、2つのストリームにエンコードされ、1つはsymbol用であり、もう1つは対応するoffset用である。ほとんどの場合、両方のストリームが順次読み出され、各デコーダ104は、ステップごとに1つの値を生成する。特定の場合では、機械学習ワークロードに通常必要とされる帯域幅を維持するために、複数のデコーダ104は並列に動作することができる。この目的のために、入力データストリームを別々のサブストリームに分割することができ、それぞれが独立してエンコード及びデコードされる。各デコーダ104は、複数のストリームにわたって時間多重することができる。さらに、いくつかのそのようなデコーダ104は並列に動作することができる。各層の出力時に、1つまたは複数のエンコーダ102は、それぞれ、いくつかのサブストリームにわたって時間多重化される可能性があり、出力の前に(メモリに書き込む前などに)、symbolストリーム及びoffsetストリームに値をエンコードする。
【0044】
ブロック218では、デコーダ104は、機械学習ネットワークの実行で使用するために、復号化データストリームを、処理ユニット150のバッファまたは処理ユニット自体に出力する。
【0045】
エンコーダ102及びデコーダ104は、場合によっては、例えば、10ビット値及び11ビット値の16行をそれぞれ含む、固定小数点ロジック及びそれぞれのテーブルを使用することができる。これらのテーブルは、複数のストリーム間で共有することができる。この例では、各ストリームをエンコードするには、状態を維持するために3つの16ビットレジスタと2つの8ビットレジスタのメモリユニット106が必要である。各ストリームをデコードするには、3つの16ビットレジスタと1つの8ビットレジスタのメモリユニット106が必要である。エンコーダ及びデコーダをパイプライン化することができるため、システム100はエンコーダ及びデコーダを時間多重化することができるが、ストリームごとにこれらの状態レジスタのみを複製する必要がある。これにより、システム100は、より少ないエンコーダ及びデコーダを使用して、通常のワークロードのニーズを満たすことができる。さらに、パイプライン化は、ステージあたりの作業量、したがってサイクルあたりの作業量を削減し、ロジックに対するレイテンシの制約を減らすことができ、それによってさらに高いエネルギー効率を可能にすることができる。
【0046】
有利には、システム100は、ニューラルネットワークモデルへの変更を必要とせずに有効なオフチップ容量と帯域幅を上げることができる。このようにして、ニューラルネットワークアーキテクトは、設計時に本実施形態を展開して、オフチップメモリの量を削減し、したがって、所望のパフォーマンス目標を満たすために必要なコストを削減することができる。有利には、コンピューティングシステム全体としてオフチップ化の頻度を減らす必要があり、すべてのモデルに対して必要とせずに、量子化及びプルーニングなどの確立されたモデルの最適化に報いるものである。システム100は、ビット幅を減少させる量子化アプローチから利点を得てもよく、一般に、さらに短いビット幅へのさらなる発展に報いるものである。特に、システム100は、より偏った値分布をもたらす任意のニューラルネットワークアプローチに対して実質的な利点を提供する。
【0047】
本明細書に記載のように、本発明者らは、Verilogでコンプレッサ及びデコンプレッサを実装し、65nmテクノロジーノードでそのパフォーマンスとエネルギー効率を示す、実施形態の実験例を行った。明らかなように、システム100はデータフットプリント(重み及びアクティベーション)を45%、30%、69%に減少させることができた。より積極的な量子化方法を使用してモデルを適応させて圧縮すると、83%、及びBiLSTM、プルーニングされたGoogleNet、MobileNet、NCF、及びQ8BERTの場合、47%である。例えば、ResNet18の量子化バージョンについて、IntelのINQ及びIBMのPACTの場合、データフットプリントをそれぞれ54%と36%に減少させる。明確にするために、本開示は、入力された値が8ビットの整数であると仮定する。ただし、より長いまたはより短い、任意の適切な長さの値を使用することができる。
【0048】
図5は、2つの層の値に関する発生頻度の例示的な累積分布を示す。最初に示した分布は、Q8BERTからの層10であり、2番目に示した分布は、BILSTMからの層1である。アクティベーション及び重みの分布を別々に示す。分布は均一には程遠く、値の約半分はゼロに近い傾向があり、残り半分ほどは255に近い傾向がある。従来のメモリ階層は、可能な値を収容するのに十分な長さであるデータ幅を使用して、通常すべてのimapまたはfmap要素を格納するために、この特性を十分に利用していない。いくつかの圧縮アプローチは、そのような分布を利用する。例えば、0(ゼロに近いグループ)と1(255に近いグループ)のプレフィックスを格納することによる。ただし、値の長さが明示的にエンコードされる場合、値はまずグループ化され、グループ内のすべての値に共通の長さが用いられる。これにより、3つの理由で符号化効率が低下する。すなわち、(1)ビット長フィールドは、1~8のいずれかの長さを指定する必要があるため、固定オーバーヘッドである。(2)グループごとに使用されるビット長は、大きさが最も高い値によって指示される。(3)値ごとに1ビットを有するグループごとのビットベクトルは、ゼロであるものを識別する。理想的には、システム100は、できるだけ少ないビット数で値をエンコードしたい。算術符号化は、有利には、元のストリーム内のそれぞれの値の頻度によって、符号化表現の使用尺度の長さを有する。したがって、それは、各入力値にわずかなビット数でも割り当てることができるため、周波数に依存する他の符号化アプローチを上回ることができる。これは、ビット文字列を使用して各値を表し、各文字列の長さを値の頻度によってスケーリングする、他の周波数に基づいたアプローチでは不可能である。
【0049】
深層学習ワークロードのオフチップ圧縮には、様々な課題と機会が存在する。汎用システムの圧縮方法は、通常、ランダムで細粒度のアクセスをサポートする必要があるため、インデックス付けはこの課題の1つである。これには、メモリ内の圧縮された値を迅速かつ細粒度で見つける能力が必要である。これにより、通常、汎用圧縮アプローチは小さなコンテナを使用することが強いられる。ランダムアクセスをサポートするため、圧縮アプローチは転送されるデータの量を削減するものもあるが、ストレージで使用するコンテナのサイズは削減しない。例えば、キャッシュライン内のデータをエンコードするので、読み取りまたは書き込みのビット数を減らす必要がある。しかしながら、キャッシュライン全体はまだ確保されたままである。したがって、これらは、帯域幅だけを改善し、有効容量を改善していない。他のアプローチとしては、あるレベルの間接化を使用して、データがメモリ内の現在どこにあるかを識別し、さらに容量を増加させる。ただし、これらは、柔軟な配置とメタデータのオーバーヘッドとの間で慎重にバランスを取る必要がある。いくつかのアプローチでは、オフチップにアクセスするときに粗粒度コンテナを使用する。ただし、システムがコンテナ全体にアクセスしないときは、常に大きな代償を払うことになる。
【0050】
同時実行とペイロードは別の課題である。汎用システムのメモリ階層は、数少ない処理コアをサポートする必要があるが、深層学習は、通常、大規模データの並列実行に適している。パフォーマンスを維持するため、これには、高度に同時実行であり広範なペイロードメモリ階層を必要とする。データが圧縮されていない場合、これは、いくつかの広範なオンチップメモリバンクを使用することで容易に達成される。個々のデータ値は、対応する機能ユニットの入力と直接アライメントされ、横方向のデータ移動を回避するように、それらのメモリ内に並べることができる。ただし、データが圧縮されると、このアラインメントは通常壊れる。配線遅延とエネルギーは様々なテクノロイジーノードで主要な考慮事項であるため、可能であれば、長距離でのデータ移動を回避するように注意しなければならない。高圧縮の利点を得るために、広いデータペイロードの横方向の移動をサポートする高価なオンチップクロスバーを回避する一方で、システム100は、オフチップアクセスの高いコストを考慮すれば圧縮/解凍のコストを容易に正当化できるオフチップメモリ圧縮を対象とすることができる。有利には、これにより、システム100はいくつかの限られたデコンプレッサ/コンプレッサを使用することが可能になる。これが可能となる理由は、(1)機械学習ワークロードは大規模なデータ並列を行うため、通常はレイテンシ耐性を有し、(2)規則的で、ほとんどが事前に既知であるアクセスパターンを通常は示すからである。したがって、入力と出力を複数の連続したサブストリームに分割することが可能であり、その複数は、次に、ワークロードによってオフチップメモリシステムに課せられた帯域幅要件を満たすのと並行して、デコード及びエンコードすることができる。
【0051】
別の課題は、コンテンツに関するものである。一般に、汎用システムのための圧縮アプローチは、完全または部分的な値の冗長性など、「典型的な」プログラムに見られる値の挙動を利用する。例えば、メモリポインタは、プレフィックスを共有する傾向がある(例えば、スタックまたはヒープに割り当てられた構造体へのポインタ)。プログラムは、部分的に繰り返される値のパターン(フラグフィールドなど)を示す傾向がある集計データ構造をよく使用する。圧縮アプローチでは、整数及び浮動小数点数、または様々な文字セット(例えば、UTF-16)の文字など、様々なデータ型を処理する必要がある。さらに、プログラムは、通常、8ビット、16ビット、32ビット、またはそれ以上など、様々な2のべき乗データ幅のデータ型を管理する。最後に、プログラマはしばしば「デフォルト」の整数または浮動小数点データ型(現在では32ビットまたは64ビット)を使用する。圧縮アプローチは、これらの特性を処理し、利用する必要がある。深層学習のワークロードの値の大部分は、短い固定小数点の値の大きな配列であるfmapとimapのためのものである。例えば8ビット、場合によっては4ビットも可能である(例えば、特定のセグメンテーションモデルの場合、精度がわずかに低下しただけでも非常に目立つアーティファクトに変換されるなど、16ビットが依然として必要なモデルもある)。
【0052】
システム100の実施形態は、算術符号を利用する。算術的符号化は、シンボル(または値)の入力シーケンスを0から1の間の値に変換する。この値は、入力値のこの特定のシーケンスを一意的に識別するため、それらを再現するためにデコードすることができる。符号化された値のビット長は、値のシーケンスだけでなく、その頻度にも依存する。
【0053】
以下に提供されるアルゴリズム1に示すように、算術符号化は、シンボル{vs,...,}∈VのボキャブラリーVから入力シンボルS=s...si...0のシーケンスS及びVのシンボルごとに1つの範囲[phigh,plow)の表に応じる。それは、入力シーケンスSを一意的に表す[0,1)の小数であるコード値を出力する。内部では、コーディングは2つの状態変数、highとlowを使用する。エンコーディングは、現在の範囲境界を行1で[0.0,1.0)に設定することから開始する。各シンボルsは行3で読み取られ、それは行4の範囲の表のインデックス付けに使用される。行5は現在の範囲の長さrangeを計算する。新たな境界は、rangeシンボル境界でスケーリングされた境界を追加することにより、現在の下位境界からオフセットされる。
【表1】
【0054】
説明のために、4つの値A~Dがエンコードされ、発生確率がそれぞれ0.4、0.1、0.3、0.2である例を考える。算術符号化は、Aに対して範囲[0,0.4)を、Bに対して範囲[0.4,0.5)を、及びCとDに対してそれぞれ[0.5,0.8)と[0.8,1.0)を、割り当てることを含み得る。このように、単一の値Aは、[0,0.4)の範囲の任意の数で表すことができ、、Bは範囲[0.4,0.5)の任意の値で表すことができる。これは非効率的であるように見えるが、これが、単一の値を含むからに他ならない。代わりに、以下のシーケンス:ABAを検討する。算術符号化は、初めのうちは[0.0,1.0)である範囲[low,high)を維持することによって進行する。まず、Aをエンコードする。これにより、範囲を[0.0,0.4)に制限する。Bをエンコードするために、Bが発生したことを示す範囲をさらに制限する。これは、現在の範囲の[0.0,0.4)の部分範囲[0.4,0.5)を表すように、上位マークと下位マークを調整することによって実行される。新しい範囲は[0.16,0.20)となる。この範囲内の任意の値を使用して、文字列ABを表すことができる。次のAをエンコードするためには、コーダはここで、現在の範囲をさらに制限し、その部分範囲がAの[0.0,0.4)に対応する。従って、範囲は[0.16,0.176)となる。Aの前は、範囲の幅が0.04=0.20-0.16であり、Aの上位マークは0であるため、新しい上位マーク0.20+0.04×0.4が新たなlowから作られることに留意されたい(Aには0から始まる範囲が割り当てられるため、0.16のままである)。最後のBをエンコードするには、既存の範囲をその[0.8,1.0)の部分範囲、または[0.2002,0.2025)にさらに制限する必要がある。この範囲内の任意の値を使用して、ABACの符号化シーケンスを表すことができる。このアプローチは、効果的であるが、ハードウェア実装にとって望ましくない特徴を有する。すなわち、(1)無限精度の演算を必要とし、(2)それは、潜在的な入力値ごとに1つのエントリを持つ範囲テーブルを使用する。したがって、それは一般に、本目的にとって許容できないほど高価である。
【0055】
無限精度計算の近似が可能であってよい。ただし、これらは高価であり、現在の精度に比例し得る実行時間が必要になる。数千の要素のエンコード/デコードから予想されるように、実装コストが桁違いではないとしても、実行時間及びエネルギーがこのアプローチを実用的ではなくしている。システム100は、有利には、有限精度を使用する算術符号の実装を利用する。一実施形態では、システム100は、状態(上位、下位、及びコード)への全ての更新が単一のステップで実行され、確率カウントを使用して、どのプレフィックスをエンコードするかを決定することによって、算術符号化が入力ストリームの変数部分にのみ用いられる、単一ステップのエンコード/デコードを実装する。このプレフィックスのビット長は、一般に、値の予想される出現頻度に応じて異なる。例えば、16ビット幅の上位レジスタ、下位レジスタ、及びコードレジスタ、ならびに10ビットの範囲境界テーブル値を使用する。
【0056】
潜在的な入力値ごとに1つのエントリを有するテーブルを使用すると、エネルギー的にも面積的にも桁違いに高価である。ほとんどの場合、エンコーダ102及びデコーダ104は、ステップごとに1つのシンボル(値)を処理するため、ユニットを複製して高帯域幅のデータ供給を達成できるように、面積及びエネルギーのコストを最小限に抑えることが望ましい。8ビットモデルの場合、境界テーブルだけで256×10b×25Kbのストレージの少なくとも1つのテーブルが必要になる。面積が問題とならないとしても、そのようなテーブルにアクセスするために必要なエネルギーは、データストリームをオフチップにすることから得られるいずれの利点をも低減させ、削除する可能性がある。シンボルごとにテーブルエントリを割り当てる代わりに、システム100の実施形態では、代わりに限られた数のエントリを用いることができる。
【0057】
エンコーダ102は、入力値空間をいくつかの非重複範囲に、例えば、16の範囲に分割する。各範囲は、その最小値vmin、その最大値vmax、及びオフセット長OLによってビット単位で定義される。範囲内の全ての値vは、(symbol,offset)としてエンコードされる。ここでは、symbol=vmin及びoffset=v-symbolであり、OLビットの符号なし整数である。さらに、vminは常にx...x0...0の形式であり、つまり、範囲を持つすべての値のビットプレフィックスである。8ビット以下の値を対象とする例示的な実施態様では、システム100は、8ビットのvmin及びvmax、ならびに3ビットのOLを用いて、16の範囲を使用する。16ビットの値を使用する実施態様では、16の範囲を使用することができ、Rmin及びOLをそれぞれ16ビット及び4ビットに拡張する。
【0058】
エンコーダ102は、値の入力シーケンスに応じて、それを2つのシーケンスに圧縮する。エンコーダ102は、各値を1つずつ処理する。マッピングされる範囲に応じて、値を(symbol、offset)の対に分ける。次いで、エンコーダ102は、ほとんどの場合、必要なビット数だけを使用して、逐語的なoffsetをそのまま格納しながら、symbol(vmin)だけを算術的にエンコードする。符号化シンボルは、第1の出力ストリームを含み、対応するオフセットは、第2の出力ストリームを含む。最後のシンボルがエンコードされたときに、エンコードは完了する。2つの符号化ストリームとともに、エンコーダ102は、例えば、(1)エンコードされたシンボルの数(これは、デコードを終了するために使用することができる)、(2)算術符号化で使用される範囲テーブルと確率テーブルとを含む、メタデータもまた格納することができる。
【0059】
算術符号化を行うために、各値の範囲には、確率カウント範囲(low、high)も割り当てられる。例示的な実施態様では、10ビットの確率カウントが使用され、(0×0、0×3ff)の全範囲がシンボル全体に割り当てられる。本明細書に記載のように、ヒューリスティックアルゴリズムを使用して、符号化シンボル及びオフセットストリームを含む、全体的なフットプリントを削減する値の範囲を決定することができる。
【0060】
表1は、BILSTMの層の重みに使用される確率カウントテーブルの例を示す。フィールド「IDX」及び「p」は、それぞれ、行インデックス及びシンボル確率を説明し、明確にするために示されている。それらを格納する必要はない。行0は、範囲[0×00、0×03]内の4つの値をキャプチャし、全てを確率カウント範囲[0×000、0×1EB)に関連付ける。最大確率カウントが210-1=0×3FFである場合、これは、確率「p」の0.4795に対応する。この範囲内の任意の値がシンボル0にマッピングされ、シンボル0は、デコード中にvmin=0×00にマッピングし直される。元の数を取り戻すために、OL=2bがv=vmin+offsetのように記録される。行3~12は全て、ゼロ長の確率カウントの範囲([0×23A,0×23A](ここでは、low=high)に割り当てられる。これらは、入力重みテンソルにはまったく表示されない値である。重みは静的には既知であるため、これは許容される。行13は、シンボル13にマッピングされる[0xD0,0xF3]の範囲内の全ての値をキャプチャする。0xF0-0xD0=0x23であるため、オフセットには6ビットが必要であることに留意されたい。0×23<26-1であるため、これは、全てのオフセット値がこの範囲に使用されるわけではないことを意味する。これが確実にそうであることを確保するために特別な処理は必要とされない。図示する全てのフィールドを用いてテーブルが実装される場合、確率が0のエントリは省略することができ、行の順序は自由に変更できる。例えば、テーブル全体の検索が行レベルでパイプライン化されている場合、行は、それぞれの確率(「p」列)に従って順序付けられ得る。これにより、システム100は、一致するものに続く任意の段/行にパワーゲーティングすることができる。場合によっては、シンボルがVmin[i]=Vmax[i-1]+1fori>0のように順序付けられていると仮定することができる。したがって、行ごとに2つのうちの1つのみを格納する必要がある。同様に、行ごとのhighカウントのみを格納する必要がある。
【表2】
【0061】
上記のアプローチでは、入力される値を、明示的な下位範囲及び上位範囲の値を有するハードウェアテーブル内のエントリ/行と比較して、範囲(下位及び上位によって定義される)がその値を含むテーブルエントリ/行を見つけることができる。この配置では、通常、各行が一意的であり、他の行と重複しない限り、行を順序付ける方法に制約はない。このように、行の範囲を任意の順序でテーブルに格納することができる。他の場合では、エントリが昇順で格納され、行の下位マークが直前の行の上位マーク+1である場合、システムは通常、下位値も上位値も暗示されているため格納する必要はない。しかし、そのような場合、通常は、範囲内にギャップがない場合がある。
【0062】
デコーダ104は、2つのシーケンスを入力として受け入れ、一方は圧縮されたシンボルを含み、他方は対応するオフセットを含む。デコーダ104は、出力時に、対応する元の値を生成する。そうするために、シンボルシーケンスに算術復号を使用して、次のシンボルに対応するプレフィックス値を取得する。次に、デコーダ104は、シンボルテーブルを使用して、適切な数のオフセットビットを抽出し、これをプレフィックス値に追加する。全てのシンボルがデコードされるまで、プロセスは継続される。デコーダ104は、ステップごとに単一の値を生成する。パイプライン化及び複製を使用して、システム100は、所望の帯域幅目標を達成することができる。特定の場合には、シンボルストリームから受信した上位値及び下位値とビット集合とを使用して、確率カウントテーブルの下位フィールドと上位フィールドとを使用して、どのシンボルがシンボルストリームからの各ビットセットによって表されるかを決定する。シンボルは、Vmin及びOL(オフセットビットの数)を提供するテーブルへのインデックスを表す。その後、オフセットビットをVminに加算する(またはORをとる)ことにより、元の値を取り戻すことができる。
【0063】
図6は、エンコーダ102の例示的な実施態様へのインタフェースを示す。以下のポートは、初期化に使用できる。
・HIin及びLOinは、それぞれ16ビットの2つの内部レジスタに格納されるデコーダ範囲を初期化するために使用される。イネーブル信号は、対応するレジスタに値がロードされるべきであることを示す。図6は、これらのポートが16ビットのデータ値と1ビットのイネーブル信号とを含むことを意味する、16+1を有するポートを示す。あるいは、レジスタに、それぞれ0xFFFF及び0x0000に強いる初期化信号が与えることができる。
・SYMTは、シンボルテーブルの値の範囲及びオフセットフィールドを初期化するために使用される。実施態様では、全範囲がマッピングされること、行が値の順序で順序付けられること、及び各範囲が前の範囲が終了した直後に始まることを仮定する。したがって、この書き込みポートは、Rmaxに対して8b+3b=11b、1つの行に対してOL、ターゲット行への4ビットインデックス、及び1ビットイネーブルを含む。
・PCTNは、確率カウントエントリを初期化するために使用される。シンボルテーブルに一致するように順序付けられる。ポートは、確率カウント(行ごとに1つ)に10ビット、4ビット行インデックス、及び1ビットイネーブルを使用する。
・8ビットINポートは、その1ビットイネーブルと合わせて、このステップでデコードする必要がある入力値を送信するために使用される(存在する場合、イネーブル)。
・1ビットdone信号は、これ以上エンコードすべき値がないことを示す。
いくつかの場合では、SYMin及びPCNTinは、イネーブル部分及びインデックス部分を共有する単一のポートに結合することができる。
【0064】
上記の例示的な実施態様では、全てのステップにおいて、エンコーダ102は、INポートを介してエンコードする値を受信する。ポートは、8ビット値と1ビットイネーブルを搬送する。これは、現在エンコードする値がない場合をサポートするために使用することができる。例えば、値は、それをまだ生成していない処理要素からのものであってもよい。上記の例示的な実施態様では、エンコーダ102は、シンボルを内部で処理し、以下の出力を生成する。
・OFSoutと、対応するオフセットを含む8ビット値とを含む。オフセットは最下位ビットに表示される。オフセット長は、3ビットOFSrによって付与される。OFSrの追加の1ビット信号は、このステップでオフセットが生成されるかどうかを示す。
・16ビットCODEoutは、符号化シンボルストリームに書き込まれるビット数を含む。ビットは、この出力の最上位ビットから取得される。取得されるビット数は、4ビットCODEcによって付与され、これはまた、全てのビットがあるかどうかを示す追加の1ビットイネーブル信号を含む。5ビットOUTuは、その1ビットイネーブルと合わせて、出力に追加ビットを含める(有効にする)べきかどうか、及びそれらの数(カウントは5ビット部分)を示す。これらのビットはCODEoutの最上位ビットの間に挿入され、そのビットの反転値を取得する。例えば、CODEOUTが0xF0000であり、4ビットを使用し、CODEuの有効性がゼロである場合、0xFを符号化ストリームに書き込む必要がある。ただし、CODEuenableが1であり、CODEu5ビットが2ビットを使用する必要があることを示している場合、符号化ストリームは0x27で書き込まれる必要がある(CODEoutの最上位ビット1の後に0を2つ挿入し、合計6ビットを出力する)。
【0065】
図7は、エンコーダ102の内部機構の例示的な実装態様を示す。この例では、「SYMBOLルックアップ」、「PCNTテーブル」、及び「上位/下位/コード生成」という3つのブロックがある。2つの16ビットレジスタHI及びLOは、現在の範囲を維持する。これらは、それぞれ0xFFFF及び0x0000に初期化される。入力値INをエンコードすることは、「SYMBOLルックアップ」ブロックで開始し、この値がマッピングされるシンボルを識別する。このブロックは2つの出力を生成する。1つは、前述のポートOUT_out及びOFS_rを含むオフセットストリームへの出力である。2つ目の出力はSYMiであり、これはテーブル行(シンボルインデックス)を示す1-HOT符号化16ビットベクトルであり、SYMiにマッピングされた値が「PCNTテーブル」ブロックに入力される。これは、このシンボルがどの確率カウントの範囲にマッピングされるかを識別する。次に、「PCNTテーブル」ブロックからの出力は、「上位/下位/コード生成」ブロックによって使用され、現在のコード範囲を更新し、任意のエンコードストリーム出力ビットを生成する。5ビットUBCレジスタは、アンダーフロービット数をカウントする。その値はブロックに入力され、UBCn信号を使用してユニットによって更新される。
【0066】
図8は、「SYMBOLルックアップ」ブロックの構造を示す。8ビットIN値は、行ごとに1つのコンパレータを使用して、全ての範囲の最大値(base[i]=Rmax-1)と比較される。行は、より小さい基底値が最初に現れるように順序付けられるので、一致する行は、基底が入力値よりも大きい順番で最後の行である。これを使用してSYMiベクトルを生成する。次いで、SYMiベクトルは、対応する基底及びオフセット長フィールド(図のob)を、出力オフセットを生成するコンポーネントにルーティングするために使用される。オフセットは、8ビットIN値と一致する基底値との差として計算され、「マスク」ブロックを介してobビットにトリミングされる。
【0067】
図9は、PCNTテーブルブロックの例を示す。SYMi信号は、現在のシンボルに対応する範囲の境界カウントcHI及びcLOを選択するために使用される。シンボルインデックスごとに、ユニットは、範囲(両端を含む)の最大値を表す10ビット確率カウントを保持する。cHIはこのレジスタの値であり、cLOは前の行、またはこれが行0であれば0のレジスタの値である。cHIとcLOの値は、現在の範囲に従ってスケーリングする必要がある。現在の範囲はrange=(HI-LO+1)で付与され、HI及びLOは16ビットレジスタであり、現在の範囲を保持する。スケーリングは、範囲をcHI及びcLOで乗算することによって実行される。範囲は16ビットの数であり、cHI及びcLOは10ビットの数であるので、乗算では26ビットの数が導出される。最大確率カウントは210-1であるため、10個の最下位ビットは、これが最大確率カウントで除算することになり、破棄することができる(一般に、カウントを確率に変換するので、算術符号化において必要なステップ)。したがって、乗数は、それらの10個の最下位ビットのうちのいずれかのみを生成するのに役立つ任意の部分を省略することができる。次に、得られるスケーリング済みの16ビット範囲境界sHI及びsLOは、「上位/下位/コード生成」ブロックに入力される。
【0068】
上位/下位/コード生成ブロックは、その例が図10に示されており、新しい値が与えられると、新しいスケーリング済みの範囲tHI及びtLOを計算することから始まる。sHI及びsLO信号を使用して、現在のLOのそれぞれに加えることにより、tHI及びtLOの値を計算する。ただし、sHI及びsLOの値は、適切にスケーリングされた範囲に対応するが、0から開始されるオフセットである。このオフセットをLOに調整することで、これまでに見られたすべてのシンボルを考慮して、この範囲を適切な位置に配置する。2つの16ビット加算器が必要な加算を実行する。上位境界については、この点で包含的であるため、1が追加される。ユニットの残りの部分は、2つの機能を順番に実行する。すなわち、(1)tHI及びtLOに出力可能な共通のプレフィックスがあるかどうかの判定と、(2)tHI及びtLOがアンダーフローの危険性があるかどうかの検出である。共通のプレフィックス検出のために、XORブロックは、tHIとtLOとの間で異なる任意のビット位置を識別するビットベクトルを生成することができる。次に、LD1ブロックが、差があるかどうかをリーディング位置で検出するため、共通のプレフィックスのいずれかがあれば、その長さを識別する。それらのビットは、符号化シンボルストリームに書き込むことができ、それらはもはや変化することができないので、シフトアウトすることができる。これにより、tHI’及びtLO’が更新される。
【0069】
アンダーフローの検出及び処理のために、エンコーダ102は、任意の精度演算によって、有限精度演算を使用する。これは、任意のビット長の境界内に16ビットのウィンドウを効果的に維持することによって可能である。HI及びLOレジスタは、これらの16ビットウィンドウを含む。実際には、境界は、HIの値に「無限」数の1のサフィックスを加えたもの、及びLOの値に無限数の0のサフィックスを加えたものであり得る。16ビットウィンドウは、もはや変化しないことが確実であるプレフィックスビットをシフトアウトすることにより、重要性の低いビットにスライドすることが可能である。これが機能する理由を理解するために、算術符号化が次から次へとシンボルをエンコードするにつれて、HIとLOの境界が縮小するのを観察する。HIは常に小さくなるが、LOは常に大きくなる。ただし、符号化される各シンボルにはゼロでない確率が割り当てられているため、常にHI>LOとなるはずである。HI及びLOは、ますます長い共通プレフィックス(もはや変化しない最上位ビット)を増大する。これらは、エンコーダが符号化ストリームに書き込む間、HI及びLOレジスタからそれらをシフトさせることによって安全に「破棄」できるビットである。
【0070】
しかし、新しいシンボルの確率範囲及び現在の範囲によっては、HIがLOよりも大きいままであるように、範囲を適切にスケーリングするには16ビットのウィンドウを有するだけでは十分ではない場合がある。この場合は、HIが形式100の値を含み、lowが形式011の値を含む。これは、HI及びLOが約0.5に近づきつつ、最終的に0.5を上回るかまたはそれを下回るかの両方になり得る場合に対応するため、16ビットを超える演算を実行できる必要があり得る。これは、現在のウィンドウの16ビットのいずれにも影響しない(さらに下位ビットに影響を与える必要がある)ような、入力シンボルによって行われる範囲調整がはるかに小さいときに発生し、アンダーフロービットと称することができる。エンコーダ102は、ウィンドウのスライドを可能にするために必要なアンダーフロービットの数を記録する状態に入ることによって、これらのビットを処理する。最終的に、別のプレフィックスが見つかると、エンコーダ102は、範囲が0.5を上回るかまたは下回るかを判定し、それらを出力ストリームに挿入することができる。
【0071】
したがって、エンコーダ102は、tHI’及びtLO’の任意のプレフィックスを識別し、2番目の最上位ビットから開始することによって、アンダーフロービットを処理する。ここでは、tLOはすべて0であり、tHIはすべて1である。このサブプレフィックスは、tHI’及びtLO’から離れてシフトされる。結果は、tHI”及びtLO”を更新したものである。このサブプレフィックス長を検出するために、エンコーダ102は、tHI’(最上位ビットを無視する)にはリーディング1検出器を使用し、tLO’(再び、最上位ビットを無視する)にはリーディング0検出器を使用する。サブプレフィックスは、2つのうち最も重要な位置である。これは01PREFIXブロックに実装される。内部では、このブロックはビット位置ごとに2入力ANDゲートを使用し、一方の入力はtLO’に直接接続され、他方は反転(NOT)後、tHI’に接続される。それらの15個のAND出力は、リーディング0検出器を駆動する。リーディング0の位置は、サブプレフィックスがあれば、それが終了する位置である。このサブプレフィックスはtLO’及びtHI’から取り除かれて、tLO”及びtHI”が生成される。このサブプレフィックス長は、これまでに検出されたアンダーフロービット数をカウントするUBCレジスタに追加される。
【0072】
最終的なHI及びLOの生成では、共通プレフィックス及びアンダーフローサブプレフィックスが破棄された後、エンコーダ102は、最終的なHI及びLOの値を調整する。エンコーダ102は、HIにサフィックスの1を挿入して、いくつかの最上位ビットをシフトアウトした事実を補う。HIは、無限1のサフィックスとして数の上をスライドすることを意味していることに注意されたい。さらに、エンコーダ102は、アンダーフロービットモードに入った場合、HIの最上位ビットを1に設定する。最終出力は、nHI及びnLOの値であり、これらは、それぞれHI及びLOレジスタにロードされる。
【0073】
HI及びLOレジスタでのアンダーフローを回避する他の方法が可能である。例えば、範囲は、それが最大範囲の半分を下回るときはいつでも拡大されてよい。
【0074】
図11は、デコーダ104の例示的な実施態様へのインタフェースを示す。この例では、デコーダ104は、エンコーダ102と同じ初期化ポートを有する(「SYMBOLルックアップ」ユニットの代わりに、デコーダは「SYMBOL生成」ユニットを有するが、内部的にこれら2つのユニットは同じシンボルテーブルを有する)。デコード中に、それは、それぞれ符号化シンボル及びオフセットストリームからビットを読み出すために、CODEIN及びOFSinの2つの入力ストリームを受け入れる。ポートは、以下のとおり動作する。
・CODEINは、デコーダが符号化シンボルストリームを受信することを要求する16ビット入力である。各ステップ/サイクルにおいて、デコーダはビット数を読み取り、5ビットCODEr出力信号を介して、どちらのユニットがそれらの数を提供するかを通知する。これは、4ビットカウントに加えて1ビットイネーブル信号を特定し、いずれかのビットが要求されたか否かを示す。エンコーダ102は、CODEinの最上位ビットからビットが読み出されることを求める。
・OFSinは、デコーダ104がオフセットビットを読み出すために使用する8ビット入力に類似している。使用されるビット数は、3ビットに1ビットイネーブルを加えた出力OFSrに依存する。オフセットビットは、OFSinの最上位ビット位置から読み出される。
【0075】
図12は、デコーダ104の例示的な内部機構を示す。この例では、「SYMBOL生成」、「PCNTテーブル」、「上位/下位/コード調整」、及び「OFS調整」という4つのブロックがある。2つの16ビットレジスタHI及びLOは、現在の範囲を維持する。これらは、それぞれ0xFFFF及び0x0000に初期化される。16ビットCODEレジスタは符号化シンボルストリームで読み出し、8ビットOFSレジスタはオフセットストリームで読み出すために使用される。この例では、シンボルのデコードは、「PCNTテーブル」の現在の範囲境界値HI及びLOを処理することによって発生する。結果として、SYMiのシンボル行インデックスと、2つの調整された範囲境界値adjHI及びadjLOとを識別する。SYMiは、「SYMBOL生成」ブロックによって使用され、オフセットストリームから対応するオフセットを消費する処理で元の値を生成する。デコードされた値は、OUTポートに表示される。「上位/下位/コード」ブロックは、新しい範囲境界値nHI及びnLOを生成し、CODE値を調整し、符号化シンボルストリームからビットを潜在的に消費する。
【0076】
PCNTテーブルユニットについて、現在のCODE値がどのシンボル範囲内にあるかを決定することが目的である。ユニットは、まずCODE値が0から開始するオフセットになるように調整する。これは、CODEadj=(CODE-LO+1)を計算する減算器を介して実行できるため、現在の下位境界をCODEから削除する。ユニットは、この値がどの範囲に収まるかを決定することができる前に、現在の範囲幅に従って確率をスケーリングする必要がある。したがって、減算器は、現在の範囲の長さをrange=(HI-LO+1)として計算することをタスクとする。各行の上位境界を定義する確率カウントは、範囲内で乗算される。これは10ビット×16ビットの乗算であり、値が210-1の総確率カウントに対して正規化されるため、ここから上位16ビットのみが必要とされる。CODEadjが調整されたカウント以下でない最初の行のインデックスは、デコードする必要があるシンボルに対応する。PCNTテーブルユニットは、2つの出力セットを生成する。すなわち、(1)1つ目は、調整された範囲境界adjHI及びadjLOを含み、(2)2つ目は、行インデックスを識別する1-HOT符号化ベクトルSYMiである。adjHI及びadjLOは、「HI/LO/CODE調整」ブロックに入力され、SYMi出力は、「SYMBOL生成」ブロックに入力される。
【0077】
SYMBOL生成ブロックは、デコードされた値を生成する。SYMiを使用して、シンボルテーブルにアクセスし、vminに加えて、オフセットがビット数であることを識別するobフィールドを取得する。obフィールドを使用して、OFSレジスタからそれらのビットを抽出する。これらのビットはシフトアウトされ、追加のビットは読み出しポートでOFSを使用して外部オフセットストリームからシフトインされる。最終的な値は、vminに8ビットに拡張されたオフセットゼロを加えた合計として決定される。
【0078】
上位/下位/コード調整ブロックは、範囲境界レジスタHI及びLOを調整することと、符号化シンボルストリームからビットを消費することをタスクとする。処理は、最初に、現在のLO境界に基づいて、adjHI及びadjLOの範囲境界をオフセットするように調整することから開始する。2つの16ビット加算器がこの調整を行い、tHI=(adjHI+LO+1)及びtLO=(adjLO+LO)を生成する。XOR及びLD1ブロックは、tHIとtLOとの間の任意の共通プレフィックスビットを識別し、それらは破棄され(シフトアウトされ)、tHI’及びtLO’が生成される。このプレフィックス長は、cpl信号によって付与される。01PREFIXブロックは、tHI’及びtLO’にそれぞれ0ビット及び1ビットだけを含む最長プレフィックス(最上位ビットを無視する)を探す。そのようなプレフィックスが存在する場合、範囲が小さすぎる危険性があり、調整する必要がある。このサブプレフィックス長は、p01lで与えられる。LD1とLD0のブロックは、ビット位置ごとにANDゲート(反転/NOTの後、一方の入力はtLOに接続され、他方の入力はtHIに接続される)に続いてリーディング0検出器を介して組み合わせて実装することができる。これらのビットは破棄され、tHI”及びtLO”が生成される。マスクブロックは、LSbから開始するl1l+p01lビットをtHI”に挿入する(HIは、「無限」数1の十分な数を有する値であると想定されることに注意されたい)。cpl+p01lビットはHI及びLOからシフトアウトされたので、この多くをCODEからシフトアウトする必要があり、この多くのビットを外部の符号化シンボルストリームからCODEにシフトインする必要がある。これは、CODErとCODEinのポートを介して外部ソースと通信するシフトブロックを使用して実行される。hMSbブロックは、調整範囲が小さすぎる場合、最終的なnHIの最上位ビットを設定する。この場合、最終的なCODEであるCODEnを反転させる必要があり、これはcMSbブロックによって実行される。
【0079】
いくつかの場合では、ニューラルネットワークプレイスを処理することは、メモリにかなりの帯域幅要求を提供することがある。本明細書に記載されるいくつかの実施形態を使用して、サイクルごとに単一の値を処理することができるが、重いワークロードの帯域幅需要を満たすために、単位時間ごとに複数の値を処理することが必要な場合もある。以下では、複数の値を処理するために使用できる2つの例示的なアプローチ、すなわち、パイプライン化と複製を提供する。
【0080】
いくつかの場合では、エンコード及びデコードをパイプライン化して、動作周波数を増加させ、所望のスループットを達成するために必要なユニットの数を減少させることができる。したがって、面積コストとエネルギー効率を改善する。ブロック204では、前処理モジュール108は、入力テンソルをいくつかのサブテンソルに分割することができ、それぞれは、独立したストリームとしてエンコード及びデコードすることができる。エンコーダ及びデコーダユニットの一部の状態要素は、複数のそのようなストリームのパイプライン処理をサポートするために複製することができる。場合によっては、すべてのストリームが同じ確率カウントテーブルを使用することができるが、一般に、PCNT(HiCnt[i])とシンボル生成とルックアップテーブル(base[i]及びob[i]フィールド)を複製する必要はない。ただし、OFSレジスタ、コードレジスタ、上位レジスタ、及び下位レジスタの別個のセットは、ストリームごとに使用することができる。エンコーダ102及びデコーダ104をパイプラインステージに分割することは、複数の方法で達成することができる。まず、PCNTルックアップは、いくつかのステージに分割することができ、各ステージでは、テーブルエントリの範囲のみが考慮される。例えば、テーブルルックアップは2つのステージに分割することができ、第1のステージはエントリの前半を考慮し、第2のステージはエントリの後半を考慮する。第1のステージで一致が得られる場合、第2のステージは、任意選択的にパワーゲーティングされてエネルギーを低減することができる。場合によっては、パーティション化では、各ステージで生成された結果を保持するために一時レジスタが必要になることがある。上位/下位/コードを調整することは、デコーダの別のステージであることができ、上位/下位/コードを生成することは、エンコーダの別のステージであることができる。同様に、オフセット生成及びオフセット抽出は、他のステージであることができる。
【0081】
パイプライン化は、サイクルごとに発生する処理量を減少させるため、スループットを増加させる。したがって、より高い動作周波数を可能にする。エンコーダ102及びデコーダ104を複製すると、スループットがさらに向上できる。この複製は、入力テンソルを、ストリームが独立してエンコード及びデコードされるいくつかのサブテンソルに分割することを含むことができる。このような分割は、いくつかの理由で望ましい場合があり、例えば、オンチップメモリ階層での局所性を利用するために使用されることが多い。必要なユニットの数は、ターゲットアプリケーションと処理コアの数によって異なる。
【0082】
場合によっては、オフセットストリームは歪む可能性があり、より短いオフセットがより一般的である。そのような場合、オフセットは不均一に分布することがあり、さまざまなビットパターンが異なる確率で表示される。したがって、第2レベルのエンコーダは、これらの目的のために使用することができる。場合によっては、第1レベルのエンコーダは、十分な数の確率カウントテーブルエントリを使用して不均一性の一部をキャプチャできるが、効率が低下する場合がある。
【0083】
場合によっては、オフセットストリームはまた、エンコーダ102によってエンコードすることができる。特定の場合には、オフセットストリームを用いて得られたエンコーディングは、3つのストリームを備えることができる。すなわち、(a)値に対して生成されたシンボルストリーム、(b)オフセットに対して生成されたシンボルストリーム、及び(c)元のオフセットを取り戻すため、(b)によって生成された各シンボルに追加するオフセットストリームである。この場合、第1レベルのオフセットジェネレータの出力が第2レベルのエンコーダへの入力になる2レベルのエンコーダを使用することができる。このようにして、第1レベルのエンコーダはコードストリームのみを書き込む。第2レベルのエンコーダは、第1レベルのエンコーダによって生成されたオフセットストリームを観測する。すべてのオフセットは、可能な最大ビット長までゼロ拡張され、その後、値と同じアプローチを使用してエンコードすることができる。第2レベルのエンコーダからの出力は、2つのストリームであることができる。すなわち、1つは元のオフセットに対応するシンボルを含み、もう1つは新しいオフセットを含む。
【0084】
場合によっては、エンコーダ102は、他のエンコードアプローチを使用して、有効性をさらに高めることができる。例えば、GOBOなどの辞書ベースの方法は、代表的な値の辞書へのインデックスとして値の大部分をエンコードする。かかるインデックスは通常、3ビット~5ビットの整数である。これらのインデックスの分布は歪んでいて、インデックスをそのまま格納するのではなく、上記のアプローチを使用してインデックスアレイのフットプリントを削減することができる。本発明者らがGOBOの修正バージョンで行った実験例では、インデックスフットプリントが元のサイズの79%に減少する結果となった。
【0085】
表1に示されているものなど、確率カウントテーブルのコンテンツを生成するために、機械学習モデルの層ごとに1つの確率テーブルセット、つまり入力テンソルごとに1つを生成することができる。ここで、テンソルは値の配列である。機械学習モデルの層ごとに、2つの別個のテーブルが生成することができる。すなわち、1つはアクティベーション用であり、もう1つは重み用である。場合によっては、プロファイリングは、テーブルを生成するために1つまたは少数の入力サンプルに対して実行されるように、重み及びアクティベーションの両方に対して使用することができる。重みのように静的に既知であるため入力に依存しないテンソルの場合、生成されるテーブルは、実行時に呼び出された場合に生成されたであろうテーブルと同一である。入力に依存するテンソルの場合、生成されるテーブルは、実行時に呼び出された場合に生成されたであろうテーブルと同一ではなかったため、異なる入力を与える。個々のアクティベーション値は入力とともに変化し得るが、アクティベーションテンソルの全体的な分布は一般に、大幅には変化しない。したがって、プロファイリングアプローチを使用する場合、潜在的な入力の小さいサブセット、例えば、実験例では10を超える入力などに対して適用するだけで十分である。
【0086】
場合によっては、テーブル生成は、均一な値分布に対応する値でテーブルを初期化し、次に、得られたフットプリントを推定することができる。これは、入力テンソルを格納するために必要とされるビット数である。次に、テーブルエントリは、より良い割り当てを見つけるために反復的に調整することができる。この調整では、探索アルゴリズムによって認められた全ての可能な構成を考慮することができるが、これが既定の閾値を上回るフットプリントの削減をもたらす場合に限る。一例では、規定の閾値は、1%に設定することができる。このテーブル生成アプローチの例は、リスト1に提供されている。一般性を失うことなく、この例は、入力が8ビット値であることを仮定しているが、任意のビット長の入力を使用することができる。この例では、入力テンソルが検査され、28個のバケットでヒストグラムが作成される。ここで、各バケットh(i)は、対応する値iがテンソルに現れる回数を表す。ヒストグラムを入力として受けとるfindPT()routineが呼び出される。確率カウントテーブルPTはデフォルト設定で初期化され、可能な値の範囲(例えば、[0,28-1])はテーブルエントリ間で均等に分割される(リスト1の行38)。PTのエントリ数は、設計パラメータとして選択できる。一般に、エントリの数が多いほど、入力データ分布をより正確に表すことができ、入力分布に応じて、予想される圧縮率が高いほどよい。極端な場合、8ビット入力値の場合、各値の頻度を表すために28個のエントリのテーブルが必要になる。8ビット値に対して28個のエントリを有するテーブルを保つことは、場合によっては、ハードウェアのコスト及びアクセスレイテンシの観点から、ひどく高い場合がある。したがって、実用的な実施態様では、16個のエントリテーブルを使用することができる。このようなテーブルでは、各エントリiは、可能な値[vminvmax]の連続した部分範囲にマッピングされる。16個のエントリを有するPTのデフォルト設定の例を表2に示す。
【表3】
【表4】
【0087】
一般に、上記の初期構成は、DNNモデルでは一般的ではない可能性がある、均一な分布値に適している。圧縮の機会は、DNNでは、値の確率分布が通常、非常に歪んでおり、値のほとんどが小さく、可能な値の範囲にある1点の周りに密集しているということに起因している。両極端の周りに点在しているのはほんのわずかである。テーブル生成は、有利には、入力値分布を最もよく表す16個の部分範囲の適切なセットを決定する。したがって、テーブル生成は、初期のデフォルト設定から開始して代替構成を試行するように進む反復的アプローチである。各代替構成は、部分範囲を拡張または収縮させることによって生成される。フットプリントを最小にすることを目的とする。この目的のために、現在のテーブル構成を考慮して、入力を表すために必要なビット数が推定される。
【0088】
確率カウントテーブルの他の構成を試みる前に、現在の確率カウントテーブルPTを考慮して、リスト1の行41に示されるように、findPT()を使用してフットプリントを推定する。次に、Search()が呼び出され、候補となる構成全体を検索し、見つけられた最良のPTとそれに対応するフットプリントとを返す。リスト1の行43は、以前の最良のフットプリント(サイズ)に対する新たに発見された最良のフットプリント(新しいサイズ)の比率をテストすることによって、さらにより良い構成が検索されるかどうかを決定する。この比率が閾値(0.99が使用された)よりも小さい限り、別の反復が実行され、追加のPT構成が検討される。
【0089】
候補PT構成を生成及び検討するために使用されるプロセスは、リスト1のsearch()によって実施される。入力は、ヒストグラムの値、現在最良のPT及びそのフットプリント(最小サイズ)に加えて、2つの追加パラメータ「depth」及び「around」である。出力は、見つけられた最良のPT及びそれに対応するフットプリントである。search()が、より良いPTを見つけられない場合、search()は、PT及びそれと呼び出されたフットプリントを返す。探索の実施態様は、深さが「depth」パラメータによって制御される再帰を使用する。findPT()がsearch()を呼び出すとき、深さを1に設定できる。search()が、それ自体を呼び出すとき、深さを増加させる。深さが最大許容値DEPTHMAX未満である限り、search()は、それ自体を呼び出すことができる。この例のモデルでは、最大深度は2で十分であった。パラメータ「around」は、どのPTエントリのインデックスを検索して調整を試みるかを識別する。aroundがネガティブの場合、すべてのエントリを調整するように探索することができる。これが発生する唯一のケースは、findPT()がsearch()を呼び出すときである。それ以外の場合、aroundはインデックス自体であり、search()は、aroundからの距離が最大でも閾値を下回るまたは閾値を上回るいずれかの範囲内でエントリのみを調整しようとする。この例では、閾値は1に設定されている。
【0090】
search()プロセスは、まず入力PTのコピーを作成して、それをtryPTに格納する(リスト1の行11)。次に、search()プロセスは、テーブルインデックス1~N(リスト1のライン12)に対して繰り返される。エントリiがaroundパラメータ(リスト1の行13)の値を考慮して、検討することができる場合、対応するtryPTエントリが調整される。候補tryPTエントリのvminは、可能であればデクリメントされる。これは、エントリiによってカバーされる範囲を効果的に増大させる。デクリメントが可能かどうかをチェックするために、search()プロセスでは、最初に、直前のtryPTエントリのvmin値をチェックする(リスト1の16~17行)。候補vminが前のエントリのvminよりも大きい場合にのみ、デクリメントが可能である(リスト1の行18)。候補vminがデクリメントされる(リスト1の行19)。探索が最大深度に達していない場合、探索は、iに設定されたaroundを使ってsearch()を再帰的に呼び出す(リスト1の20~21行)。それ以外の場合、search()は、tryPTのフットプリントを推定し、それが現在最良なものよりも小さいことが判明した場合、最良のPT及びフットプリントを更新する(リスト1の行22~24)。その後、エントリiはその元の値に復元される(リスト1の行25)。次に、プロセスは、同様の方法で、代わりにエントリiのvminがインクリメントされるテーブル構成を検討する(リスト1の行26~35)。これは、エントリiによってカバーされる範囲を効果的に収縮させる。最後に、search()は、見つけた最良のPTとフットプリントを返す。
【0091】
その反復探索の各ステップにおいて、テーブル生成は、現在検討されている部分範囲の集合(符号化size()への呼び出し)を考慮して、入力を表すために必要とされるビット数を推定することを含むことができる。これは、以下のとおり実行することができる。
各値を、それぞれ確率P(x)、...、P(x)で発生する可能な値x、...、xを有する離散ランダム変数Xとして考慮すると、Xのエントロピーは以下のとおりである。
【化1】
式中、
【化2】
シャノンのエントロピー理論によれば、確率P(x)で発生する値xを表すシンボルに必要な最小ビット数は、以下のとおり定義される。
【化3】
プロファイルを使用して、プロファイルされたデータのビット単位での集合的フットプリントを最小化するマッピングを見つけることができる。8ビット値及び16個のエントリテーブルの具体例では、デフォルトの初期マッピングは、長さ28/16=16の等しいサイズの部分範囲を使用することができる。したがって、表2に示されるように、初期マッピング内の全てのエントリについてオフセット長OLは4ビットである。エントリiについて、Count列は範囲[vmin及びvmax]内に収まる値のカウントの合計である。すなわち、
【化4】
エントリiの範囲内にある値xは、(symbol、offset)としてエンコードされ、offsetは長さOLビットであり、シンボルSのビット長は、シャノンのエントロピー理論に従ってその確率に比例する。
【化5】
したがって、特定のDNN層について、特定のテーブル構成を考慮して、プロファイルされるデータのフットプリント全体は、以下のとおり定義できる。
【化6】
【0092】
min値が決定された後、それらは確率カウントをマッピングするために使用することができる。確率カウント[0...2m]の範囲は、対応する範囲内の値の頻度に比例して分割される。ここでmは設計パラメータであることができる(一例では、m=10)。
【0093】
説明したように、プロファイリングは、アクティベーションに使用される確率カウントテーブルを生成するために使用することができる。プロファイリングを使用するときに、一部の値が表示されない可能性がある。ただし、限られた入力セットを処理するときに特定の値が表示されなかったということだけで、他の入力を処理するときにこれらの値が表示されないということは保証されない。確率カウントテーブルは、これらの値がテーブルの範囲のいずれによってもカバーされない場合、調整することができる。これが発生するとき、ゼロ範囲(vmin=vmax)を有するテーブルエントリが生成され得る。したがって、静的ではないテンソルのための事後処理ステップとして、そのようなエントリのvmaxを増加させて(またはvminを減少させて)、確率カウントが2よりも多い他のエントリのいずれかから、1つの確率カウントを「盗む」ことによって、テーブルを調整することができる。
【0094】
本発明者らによって行われた実験例では、システム100の有効性は、画像分類、オブジェクト検出、セグメント化、及び自然言語処理などの、広範囲の用途に及ぶDNNモデルセットに対して判定された。評価したモデルを表3に示す。全てのモデルを8ビットに量子化した。唯一の例外はResNet18-PACTであり、8ビットの精度を必要とする第1の層を除いて、値は4ビットに量子化された。
【表5】
【0095】
表4は、本実施形態を使用したいくつかのモデルのフットプリント全体の減少を示す。量子化アプローチに従って、圧縮比は、わずか0.83から0.30まで大幅に異なる。使用される量子化アプローチにかかわらず、システム100は、専用に構築する必要なく利点をもたらすことができる。


【表6】
【0096】
表5は、機械学習モデル(BILSTM)のうちの1つについてシステム100で可能な圧縮の詳細な図を提供する。圧縮比は層によって大幅に異なり、一般にアクティベーションの方が高い傾向にある。システム100は、ゼロに向かって偏る傾向があるアクティベーションテンソルの大いに歪んだ分布を利用する。
【表7】
【0097】
実験例では、システム100が、(1)モデル重み及び実行時アクティベーションの両方に対する圧縮比と、(2)DRAMへの/DRAMからの圧縮されたオフチップトラフィックによるエネルギーの節約において、実質的な改善が達成できることを検証した。実験例のエネルギー結果は、総容量が16ギガバイトのデュアルチャネルDDR4-3200オフチップメモリを仮定している。実験例では、32個の圧縮エンジンと32個の解凍エンジンをモデル化した。
【0098】
実験例の結果は、システム100が1.14mm2の総面積を必要とし、179.2mWの総平均電力を消費することを示した。この消費電力は、ピーク帯域幅の90%で飽和したデュアルチャネルDDR4-3200メモリシステムによって消費される電力の4.7%のオーバーヘッドを構成する。
【0099】
DNNモデルの重みと実行時アクティベーションについて、図13及び図14は、それぞれ、圧縮技術を実装しないベースラインに対して正規化されたオフチップメモリ転送によって消費されるエネルギーを示す。図示の推定値は、各層の重み及び入力アクティベーションがオフチップから1回だけ読み取られることを仮定している。図13及び図14に示すように、エネルギー節約量は、達成可能な圧縮比に従ってモデル間で異なる。例えば、AlexNet-Eyeriss及びGoogLeNet-Eyerissなどのプルーニングされたモデルでは、モデルの重みのほとんどがゼロである場合、システム100は、非常に歪んだ値の分布を利用して、それぞれ、オフチップアクセスエネルギーの91%及び72%を節約する。NCF APackなどの歪みが少ない値分布、すなわち、ほぼ均一な分布を有するモデルの場合、システム100は、より低い圧縮比(1.2×)を達成し、したがって、オフチップエネルギー消費の13%を節約する。ただし、同じモデルは、その実行時アクティベーションに対して、より歪んだ分布を有し得る。例えば、NCFアクティベーションの圧縮比は22×であり、53%のエネルギー節約につながる。全モデルの平均で、システム100は、モデルの重み及び実行時アクティベーションのエネルギー消費を、それぞれ61%と57%減少させる。
【0100】
実験例で証明されるように、システム100は、多くのアクセラレータとプラグインの互換性があり、機械学習モデルのための実装が簡単で効果的なオフチップ圧縮アプローチを提供する。実験例では、それがオフチップトラフィックを減少させ、高価なオフチップメモリ転送によって消費されるエネルギーを大幅に削減することを示している。さらに、システム100は、オフチップデータアクセスに関連するストールを減少させることによって、メモリ結合モデルを促進することができる。
【0101】
有利には、本実施形態は、ヒューリスティックスを使用して、値空間をプレフィックスグループに分割して、圧縮率を最大化することができる。このようにして、本実施形態は、機械学習ワークロードのメモリアクセスの並列性を利用して、いくつかのエンコーダ/デコーダユニットを複製して、並列に動作させることができる。これらのユニットをいくつかのデータストリームにわたって時間多重化できるように、これらをパイプライン化する能力と組み合わせると、本実施形態は、ターゲットワークロードのデータ帯域幅需要に対応することができる。場合によっては、システム100は、オフチップメモリコントローラの直前に配置することができ、システム100は残りのオンチップシステムに対して透過的に機能することができる。したがって、残りのオンチップメモリ及び計算ユニットは、元のデータストリームを見ることができる。結果として、本実施形態は、ベクトル状またはテンソルコアユニット、シストリックアレイ、及びスパーステンソルを処理するユニットなど、多くの機械学習アクセラレータで使用することができる。さらなる場合では、エンコード及びデコードは、中央処理装置または他のプロセッサ上で実行されるなど、コンピューティングシステムの他の態様によって実行することができる。
【0102】
上述のことは、特定の具体的な実施形態を参照して説明されたが、これらの様々な変更は、添付の特許請求の範囲に概説される本発明の趣旨及び範囲から逸脱することなく、当業者には明白であろう。

図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
【国際調査報告】