(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022094926
(43)【公開日】2022-06-27
(54)【発明の名称】ディープ・ラーニングの数値データとスパース行列の圧縮
(51)【国際特許分類】
G06N 20/00 20190101AFI20220620BHJP
【FI】
G06N20/00
【審査請求】未請求
【請求項の数】25
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2021183848
(22)【出願日】2021-11-11
(31)【優先権主張番号】17/122,384
(32)【優先日】2020-12-15
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.FIREWIRE
2.JAVA
3.JAVASCRIPT
4.SWIFT
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(74)【代理人】
【識別番号】100112759
【弁理士】
【氏名又は名称】藤村 直樹
(72)【発明者】
【氏名】インギュ ミァオ
(72)【発明者】
【氏名】ニン シュエ
(57)【要約】 (修正有)
【課題】ディープ・ラーニング・アプリケーションのパフォーマンスを向上させる装置及び方法を提供する。
【解決手段】方法は、複数のサイクルのデータ・サンプルを含むデータ・パケットを受信することと、データ・サンプルの各サイクルについて、サイクルのデータ・サンプルを圧縮辞書に渡すことと、データ・サンプルの各々に対するタグを圧縮辞書から識別することと、タグを圧縮されたデータとして保存することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することと、を含む。第1タグ又は第2タグで識別されるデータ・サンプルの値は、圧縮されたサイクル・データから除外されるのと同時に、第1タグで識別されるデータ・サンプルが第1タグを使用して圧縮され、且つ、第2タグで識別されるデータ・サンプルは、第2タグを使用して圧縮される。
【選択図】
図6A
【特許請求の範囲】
【請求項1】
複数のサイクルのデータ・サンプルを含むデータ・パケットを受信すること;及び
前記データ・サンプルの各サイクルについて:
前記サイクルの前記データ・サンプルを圧縮辞書に渡すこと;
前記データ・サンプルの各々に対するタグを、前記圧縮辞書から識別することであって、前記圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及び
前記タグを圧縮されたデータとして保存することによって、前記データ・サンプルを圧縮されたサイクル・データに圧縮することであって、前記第1タグ又は前記第2タグで識別される前記データ・サンプルの値が前記圧縮されたサイクル・データから除外されるのと同時に、前記第1タグで識別される前記データ・サンプルは前記第1タグを使用して圧縮され、且つ前記第2タグで識別される前記データ・サンプルは前記第2タグを使用して圧縮される、圧縮すること;
を行う圧縮回路を含むプロセッサを含む装置。
【請求項2】
前記圧縮辞書はルック・アップ・テーブル又はハッシュ・テーブルを含む、請求項1に記載の装置。
【請求項3】
前記タグは、少なくとも、前記圧縮辞書において一致が無いことを示す第3タグと、前記圧縮辞書において少なくとも1つの値に対する前記データ・サンプルの部分的な一致を示す複数の追加タグとを更に含む、請求項1-2のうちの何れか1項に記載の装置。
【請求項4】
前記データ・サンプルを圧縮する前記圧縮回路は、更に:
前記圧縮されたサイクル・データの前記タグに続いて、前記複数の追加タグのうちの何れかで識別される前記データ・サンプルの部分的な値を保存することであって、前記部分的な値は、前記複数の追加タグのうちの何れかを有する前記データ・サンプルの符号と指数の値を含む、保存すること;及び
前記部分的な値を保存することに続いて、前記第3タグで識別される前記データ・サンプルの全ての部分を保存すること;
を行う、請求項1-3のうちの何れか1項に記載の装置。
【請求項5】
前記データ・パケットの各サイクルの前記圧縮されたサイクル・データは、圧縮されたデータ・パケットにおいて連結されており、最後の圧縮されたサイクル・データに続く前記圧縮されたデータ・パケットの残りは、ゼロ・パディングされる、請求項1-4のうちの何れか1項に記載の装置。
【請求項6】
前記データ・サンプルを圧縮することは、サイズ・バイトを前記圧縮されたサイクル・データに追加することを更に含み、前記サイズ・バイトは前記圧縮されたサイクル・データのサイズを示す、請求項1-5のうちの何れか1項に記載の装置。
【請求項7】
前記サイズ・バイトは、前記圧縮されたサイクル・データにおいて、前記タグの後であって前記部分的な値の前に保存されている、請求項1-6のうちの何れか1項に記載の装置。
【請求項8】
前記複数の追加タグは、前記データ・パケットの先行する圧縮されたサイクルからの前記データ・サンプルのデータ値を使用して、前記データ・パケットの各サイクルを圧縮した後に更新される、請求項1-7のうちの何れか1項に記載の装置。
【請求項9】
データ・サンプルの各サイクルについて:
前記データ・サンプルを上半データ・サンプルと下半データ・サンプルに分割すること;
前記上半データ・サンプルを前記圧縮辞書の第1サブ辞書に渡し、前記下半データ・サンプルを前記圧縮辞書の第2サブ辞書に渡すことであって、前記第1サブ辞書と前記第2サブ辞書は同じエントリを含む、渡すこと;
前記第1サブ辞書を使用して、前記上半データ・サンプルの各々に対するタグを識別すること;
前記第2サブ辞書を使用して、前記下半データ・サンプルの各々に対するタグを識別すること;
を行い、前記上半データ・サンプルの各々と前記下半データ・サンプルの各々に対するタグを識別することは並列的に実行される、請求項1-8のうちの何れか1項に記載の装置。
【請求項10】
前記タグは3ビット値を含み、前記圧縮辞書は16個のエントリを保存し、前記第1サブ辞書は前記圧縮辞書の8個のエントリを含み、前記第2サブ辞書は前記圧縮辞書の別の8個のエントリを含む、請求項1-9のうちの何れか1項に記載の装置。
【請求項11】
前記圧縮回路は、機械学習ワークロード又は深層学習ワークロードのウェイト値又は活性化関数の少なくとも1つの出力に適用される、請求項1-10のうちの何れか1項に記載の装置。
【請求項12】
複数のサイクルのデータ・サンプルを含むデータ・パケットを、少なくとも1つのプロセッサにより受信すること;及び
前記データ・サンプルの各サイクルについて:
前記サイクルの前記データ・サンプルを圧縮辞書に渡すこと;
前記データ・サンプルの各々に対するタグを、前記圧縮辞書から識別することであって、前記圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及び
前記タグを圧縮されたデータとして保存することによって、前記データ・サンプルを圧縮されたサイクル・データに圧縮することであって、前記第1タグ又は前記第2タグで識別される前記データ・サンプルの値が前記圧縮されたサイクル・データから除外されるのと同時に、前記第1タグで識別される前記データ・サンプルは前記第1タグを使用して圧縮され、且つ前記第2タグで識別される前記データ・サンプルは前記第2タグを使用して圧縮される、圧縮すること;
を含む方法。
【請求項13】
前記タグは、少なくとも、前記圧縮辞書において一致が無いことを示す第3タグと、前記圧縮辞書において値に対する前記データ・サンプルの部分的な一致を示す複数の追加タグとを更に含む、請求項12に記載の方法。
【請求項14】
前記データ・サンプルを圧縮することは、更に:
前記圧縮されたサイクル・データの前記タグに続いて、前記複数の追加タグのうちの何れかで識別される前記データ・サンプルの部分的な値を保存することであって、前記部分的な値は、前記複数の追加タグのうちの何れかを有する前記データ・サンプルの符号と指数の値を含む、保存すること;
前記部分的な値を保存することに続いて、前記第3タグで識別される前記データ・サンプルの全ての部分を保存すること;及び
サイズ・バイトを前記圧縮されたサイクル・データに追加することであって、前記サイズ・バイトは前記圧縮されたサイクル・データのサイズを示す、追加すること;
を含む、請求項12-13のうちの何れか1項に記載の方法。
【請求項15】
前記データ・パケットの各サイクルの前記圧縮されたサイクル・データは、圧縮されたデータ・パケットにおいて連結されており、最後の圧縮されたサイクル・データに続く前記圧縮されたデータ・パケットの残りは、ゼロ・パディングされる、請求項12-14のうちの何れか1項に記載の方法。
【請求項16】
ディープ・ラーニングの数値データとスパース行列の圧縮を促すシステムであって、
メモリ;及び
前記メモリに通信可能に結合されたプロセッサ;
を含み、前記プロセッサに備わる圧縮回路は:
複数のサイクルのデータ・サンプルを含むデータ・パケットを受信すること;及び
前記データ・サンプルの各サイクルについて:
前記サイクルの前記データ・サンプルを圧縮辞書に渡すこと;
前記データ・サンプルの各々に対するタグを、前記圧縮辞書から識別することであって、前記圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及び
前記タグを圧縮されたデータとして保存することによって、前記データ・サンプルを圧縮されたサイクル・データに圧縮することであって、前記第1タグ又は前記第2タグで識別される前記データ・サンプルの値が前記圧縮されたサイクル・データから除外されるのと同時に、前記第1タグで識別される前記データ・サンプルは前記第1タグを使用して圧縮され、且つ前記第2タグで識別される前記データ・サンプルは前記第2タグを使用して圧縮される、圧縮すること;
を行う、システム。
【請求項17】
前記圧縮辞書はルック・アップ・テーブル又はハッシュ・テーブルを含む、請求項16に記載のシステム。
【請求項18】
前記タグは、少なくとも、前記圧縮辞書において一致が無いことを示す第3タグと、前記圧縮辞書において少なくとも1つの値に対する前記データ・サンプルの部分的な一致を示す複数の追加タグとを更に含む、請求項16-17のうちの何れか1項に記載のシステム。
【請求項19】
前記データ・サンプルを圧縮する前記圧縮回路は、更に:
前記圧縮されたサイクル・データの前記タグに続いて、前記複数の追加タグのうちの何れかで識別される前記データ・サンプルの部分的な値を保存することであって、前記部分的な値は、前記複数の追加タグのうちの何れかを有する前記データ・サンプルの符号と指数の値を含む、保存すること;及び
前記部分的な値を保存することに続いて、前記第3タグで識別される前記データ・サンプルの全ての部分を保存すること;
を行う、請求項16-18のうちの何れか1項に記載のシステム。
【請求項20】
前記データ・サンプルを圧縮することは、サイズ・バイトを前記圧縮されたサイクル・データに追加することを更に含み、前記サイズ・バイトは前記圧縮されたサイクル・データのサイズを示す、請求項16-19のうちの何れか1項に記載のシステム。
【請求項21】
前記複数の追加タグは、前記データ・パケットの先行する圧縮されたサイクルからの前記データ・サンプルのデータ値を使用して、前記データ・パケットの各サイクルを圧縮した後に更新される、請求項16-20のうちの何れか1項に記載のシステム。
【請求項22】
データ・サンプルの各サイクルについて:
前記データ・サンプルを上半データ・サンプルと下半データ・サンプルに分割すること;
前記上半データ・サンプルを前記圧縮辞書の第1サブ辞書に渡し、前記下半データ・サンプルを前記圧縮辞書の第2サブ辞書に渡すことであって、前記第1サブ辞書と前記第2サブ辞書は同じエントリを含む、渡すこと;
前記第1サブ辞書を使用して、前記上半データ・サンプルの各々に対するタグを識別すること;
前記第2サブ辞書を使用して、前記下半データ・サンプルの各々に対するタグを識別すること;
を行い、前記上半データ・サンプルの各々と前記下半データ・サンプルの各々に対するタグを識別することは並列的に実行される、請求項16-21のうちの何れか1項に記載のシステム。
【請求項23】
ディープ・ラーニングの数値データとスパース行列の圧縮を促す装置であって、
複数のサイクルのデータ・サンプルを含むデータ・パケットを受信する手段;及び
前記データ・サンプルの各サイクルについて、
前記サイクルの前記データ・サンプルを圧縮辞書に渡すこと;
前記データ・サンプルの各々に対するタグを、前記圧縮辞書から識別することであって、前記圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及び
前記タグを圧縮されたデータとして保存することによって、前記データ・サンプルを圧縮されたサイクル・データに圧縮することであって、前記第1タグ又は前記第2タグで識別される前記データ・サンプルの値が前記圧縮されたサイクル・データから除外されるのと同時に、前記第1タグで識別される前記データ・サンプルは前記第1タグを使用して圧縮され、且つ前記第2タグで識別される前記データ・サンプルは前記第2タグを使用して圧縮される、圧縮することを行う手段;
を含む装置。
【請求項24】
請求項13-15のうちの何れか1項に記載の方法を実行するように更に構成されている請求項23に記載の装置。
【請求項25】
請求項12-15のうちの何れか1項に記載の方法をコンピューティング・デバイスに実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は一般に機械学習に関連し、より詳細にはディープ・ラーニングの数値データとスパース行列の圧縮に関連する
【背景技術】
【0002】
人間や動物によって示される自然知能とは異なり、人工知能(AI)は機械によって示される知能である。機械がますます有能になっているので、機械学習が可能になる。機械学習とは、権限を与えられた機械が周囲の状況を認識し、自身の動作を人間の介在なしに変えることを学習する方法である。そのゴールは、提供されたデータを使用して機械が自ら学習し、正確な予測を可能にすることである。
【0003】
ディープ・ラーニングは機械学習の一部分である。それは機械学習の次なる進化である。ディープ・ラーニング・アルゴリズムは、人間の脳によって情報がどのように処理されるのか、ということに触発されている。機械学習と比較して、ディープ・ラーニングは大規模なデータ・セットを取り扱い、より正確であり、より多くの計算を利用し、より良い予測を行う。
【0004】
ディープ・ラーニング・アプリケーションは、大量の数値データを処理して送信/受信することを必要とする。ルーティングする帯域幅とストレージ容量を節約するために、データは圧縮される。
【0005】
圧縮/圧縮解除の効率的な実装は、ディープ・ラーニング・アプリケーションのパフォーマンスを向上させることができる。
【図面の簡単な説明】
【0006】
本実施形態の上記の特徴を詳細に理解することができるように、上記で簡単に要約される実施形態のより詳細な説明は、その幾つかが添付図面に示されている実施形態を参照することによって行うことができる。しかしながら、添付図面は典型的な実施形態を示しており、従ってその範囲の限定として考えられるべきではないことに留意されたい。図面は縮尺どおりではない。一般に、同一又は類似の部分を参照するために、同一の参照番号が、図面及び付随して説明される記載を通じて使用される。
【0007】
【
図1】例示のコンピューティング・システムのブロック図であり、本システムは本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を実施するために使用することができる。
【0008】
【
図2】本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を実施する例示的な圧縮エンジンを示す。
【0009】
【
図3A】本開示の実装による例示的なデータ・サンプル・フォーマットを示す。
【0010】
【
図3B】本開示の実装による圧縮されるべき例示的なデータ・パケットを示す。
【0011】
【
図4】本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮のための例示的な圧縮辞書を示す。
【0012】
【
図5A】本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を使用して圧縮されたデータ・パケットの例示的なデータ・サンプルを示す。
【0013】
【
図5B】本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を使用する例示的な圧縮されたデータ・パケットを示す。
【0014】
【
図6A】ディープ・ラーニングの数値データとスパース行列の圧縮のための方法の実施形態を示すフロー・チャートである。
【0015】
【
図6B】ディープ・ラーニングの数値データとスパース行列の圧縮のための方法の別の実施形態を示すフロー・チャートである。
【0016】
【
図7】幾つかの実施形態によるディープ・ラーニングの数値データとスパース行列の圧縮を可能にするための例示的な電子コンピューティング・デバイスの概略図である。
【発明を実施するための形態】
【0017】
本開示の実装は、ディープ・ラーニングの数値データとスパース行列の圧縮を説明している。コンピュータ・エンジニアリングにおいて、コンピューティング・アーキテクチャは、コンピュータ・システムの機能、組織、及び実装を説明する一組のルール及び方法である。今日のコンピューティング・システムは、実行のために大きなワークロードを請け負う一方で、ほぼゼロ待機の応答性と優れたパフォーマンスをもたらすように期待されている。従って、コンピューティング・アーキテクチャは、要求の厳しいワークロードと増大するパフォーマンス期待に対処するために、絶えず変化している(例えば、改善されている)。
【0018】
大きなワークロードの例は、ニューラル・ネットワーク、人工知能(AI)、機械学習などを含む。このようなワークロードは、それらがパーソナル・コンピューティング・デバイス、ビジネス関連コンピューティング・デバイス等のような多くのコンピューティング・デバイスに実装されるにつれて、より広く普及しつつある。更に、大規模な機械学習及びニューラル・ネットワークのワークロードの使用の増加に伴い、大きなワークロードを実行することをターゲットとした新しいシリコンが製造されている。このような新しいシリコンは、データ並列化又はモデル並列化を利用して大きなニューラル・ネットワークを実行することにカスタマイズされた専用のハードウェア・アクセラレータ(例えば、グラフィックス処理ユニット(GPU)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、視覚処理ユニット(VPU)等)を含む。
【0019】
機械学習(ML)、ディープ・ラーニング(DL)、及び/又は他の人工的な機械駆動ロジックを含む人工知能(AI)は、訓練プロセスを利用してモデルによって以前に学習したパターン及び/又は関連性に基づいて、入力データを処理して出力を生成するように、機械(例えば、コンピュータ、論理回路など)がモデルを使用できるようにする。例えば、モデルは、パターン及び/又は関連性を認識し、入力データを処理する場合にはそのようなパターン及び/又は関連性に従うようにデータを用いて訓練されることが可能であり、その結果、他の入力は、認識されたパターン及び/又は関連性に一致する出力をもたらすようになる。
【0020】
機械学習モデル及び/又は機械学習アーキテクチャの多くの異なるタイプが存在する。本願で開示される幾つかの例では、畳み込みニューラル・ネットワークが使用される。畳み込みニューラル・ネットワークを用いることにより、画像、自然言語処理などにおけるオブジェクトの分類が可能になる。一般に、本願で開示される例示的なアプローチで使用するのに適した機械学習モデル/アーキテクチャは、畳み込みニューラル・ネットワークを含むことが可能である。しかしながら、リカレント・ニューラル・ネットワーク、フィードフォワード・ニューラル・ネットワーク等のような他のタイプの機械学習モデルを、追加的又は代替的に使用することができる。
【0021】
一般に、ML/AIシステムの実装は、学習/訓練フェーズと推論フェーズの2つのフェーズを含む。学習/訓練フェーズでは、訓練アルゴリズムは、例えば訓練データに基づくパターン及び/又は関連性に従って動作するように、モデルを訓練するために使用される。一般に、モデルは、どのようにして入力データが出力データに変換されるかを案内する内部パラメータを含み、例えばモデル内の一連のノード及び接続を通じて、入力データを出力データに変換する。更に、(例えば、学習率、機械学習モデルで使用される層の数などのような)ハイパーパラメータは、学習がどのように実行されるかを制御するために、訓練プロセスの一部として使用される。ハイパーパラメータは、訓練プロセスを開始する前に決定される訓練パラメータとして定義される。
【0022】
ML/AIモデルのタイプ及び/又は期待される出力に基づいて、異なるタイプの訓練が実行されてもよい。例えば、教師ありトレーニングは、入力及び対応する期待される(例えば、ラベルが付された)出力を使用して、(例えば、選択パラメータの組み合わせにわたって反復することによって)モデル誤差を低減するML/AIモデルのパラメータを選択する。本願で使用されるように、ラベル付けは、機械学習モデルの期待される出力(例えば、分類、期待される出力値など)を指す。代替的に、教師なしトレーニング(例えば、ディープ・ラーニング、機械学習のサブセットなどで使用される)は、入力からパターンを推測して、(例えば、期待される(例えば、ラベルが付された)出力の恩恵を伴うことなく)ML/AIモデルのためのパラメータを選択することを含む。
【0023】
前述したように、ML/AIは、権限を付与されたマシンが周囲を知覚し、人間の影響なしに自身の行動を変えることを学習する方法である。ML/AIは、提供されたデータを用いて機械が自ら学習し、正確に予測できるようになることを目的としている。DLアルゴリズムは、情報が人間の脳によってどのように処理されるか、ということに焦点を当てている。MLと比較して、DLは大きなデータ・セットを取り扱い、より正確であり、より多くの計算を利用し、より良い予測を行う。
【0024】
DLアプリケーションは、大量の数値データを処理及び送信/受信する。ルーティングの帯域幅とストレージ容量を節約するために、データは圧縮される。DLアプリケーションのパフォーマンスを改善するために、圧縮/圧縮解除の効率的な実装が使用される。ML及びDLワークロードで使用されるハードウェア圧縮/圧縮解除技術は、このような技術の効率的なハードウェア実装を達成することを目指している。ML/DLアプリケーションにおいて改善されたパフォーマンスを達成することに対する懸念は、メモリ帯域幅消費の分野にある。圧縮はこの懸念に対処し、急速に成長するニューラル・ネットワーク用のシリコン・ソリューションを可能にする。
【0025】
圧縮は、負担の重いデータ検索と演算を含む可能性がある。従って、圧縮技術の実装は、ディープ・サブミクロン・シリコンにおいて、データ・ルーティング待ち時間とタイミング問題の両方をしばしば導入してしまう。ディープ・サブミクロン・シリコンは、集積回路(IC)設計におけるトランジスタの高密度集積化を指す可能性がある。幾つかの実装では、ディープ・サブミクロン技術は、例えば0.18 um,0.13 um,又は7nmプロセス技術を使用して製造されるICを指す可能性がある。
【0026】
圧縮技術を使用して導入されるデータ・ルーティング遅延は、システム・パフォーマンスを劣化させる可能性がある。ワイド・データ(例えば、512ビット)の圧縮は、ディープ・サブミクロン・シリコンにおいてタイミング・クロージャ(timing closure)によって制限される。従来の圧縮アプローチは、単一クロック・サイクル内でデータを圧縮しない。その代わり、従来のアプローチでは、データの各サイクルは、圧縮のために2サイクルかかる。その結果、データ・スループットを維持するために、従来のアプローチでは2つの圧縮エンジンが使用される。各々の圧縮エンジンは、1パケットおきに処理する。次いで、両方の圧縮エンジンからの圧縮データは、1つのデータ・ストリームにマージして戻される。データ・パケット・サイズは
変化し、固定データ・サイズを圧縮する継続時間はデータに依存するので、2つの圧縮エンジンの間の1パケットおきの分配は、圧縮帯域幅を均等には分配しない。時間の経過と共に、より遅い圧縮エンジンは、他方の圧縮エンジンをアイドルのままにする可能性がある。従って、2つの圧縮エンジンを使用する従来の圧縮技術は、データ・スループット要求を満たさない。更に、パケット分配を管理し、圧縮結果をマージすることは、データ待ち時間を導入するだけでなく、FIFOや大量のロジックのような追加回路を導入する結果となる。面積及び電力コストに加えて、データの分割及びマージする機能は、従来の圧縮技術において、データ待ち時間及び電力消費コストを追加することにもなる。
【0027】
ML/DL学習アプリケーションでは、活性化関数の出力は一般的にはスパースであり(例えば、大部分の0値を含む)、圧縮に適しているが、他のデータはランダムに近い可能性がある。このように、全体的な圧縮ゲインは、スパースなデータがどれだけうまく圧縮されるかに依存する。従来の圧縮技術は、数百ビットを利用しており、従って最適とは言えない。
【0028】
例えば、7nmプロセス技術における従来の圧縮技術のタイミング・クロージャは、別の課題であり、スピード・ターゲットの約50%を満足していることが示されている。この劣化により、平均的に、演算素子は入力データの到着を待つか、又は生成されたデータの取得を待つか、何れかに半分の時間を費やすので、ルーティングはシステム・パフォーマンスのボトルネックとなる。
【0029】
更に、従来の圧縮技術は、典型的なDLアプリケーションで最適化されていない圧縮比を利用している。DLアプリケーションでは、活性化関数はフィーチャー・マップ・データにおいて多くの0と1を生成する。更に、量子化も、ウェイト値において、より多くの0と1を導入する。これらは、サイズが劇的に圧縮される可能性があるので、最良のケースである。従来の圧縮技術では、0の値は特別に取り扱われるが、1の値は何らかの特別な処置を受けない。この場合において、1のような値が特別な圧縮処置を受けない場合、圧縮されるサイズ縮小は、元のデータ・サイズの半分に制限される。圧縮データ・サイズは、元のデータ・サイズの少なくとも半分である。入力データ0が特別に処理されたとしても、圧縮比の最小サイズは81%である(即ち、元のデータ・サイズの19%であり、最適ではない)。
【0030】
更に、従来の圧縮技術はパケット・ベースである。例えば、各データ・パケットの最初の512ビットは、アプリケーション毎にカスタマイズできないハッシュ値のシリコン・ハードコーディングされたセットで符号化される。実際のアプリケーションでは、シリコンのハードコーディングされたハッシュ値のこのセットにヒットする機会は最小限である。従って、従来の圧縮技術を利用する場合に、各パケットの最初の512ビット・データは、まれにしか圧縮されない。
【0031】
本開示の実装は、完全なデータ・スループットにマッチした単一の圧縮エンジンに、最適な圧縮ゲインをタイミング要請中に提供することによって、上記の欠点に対処する。ある実装では、圧縮エンジンは、複数のサイクルのデータ・サンプルを含むデータ・パケットを受信することによって、ディープ・ラーニングの数値データとスパース行列の圧縮を実施することができる。データ・サンプルの各サイクルについて、圧縮エンジンは、サイクルのデータ・サンプルを、圧縮辞書に渡すことができる。圧縮エンジンは、圧縮辞書を利用して、サイクル内のデータ・サンプルの各々に対するタグを識別する。ある実装では、圧縮辞書は、少なくとも、0の値を有するデータに対する第1タグと、1の値を有するデータに対する第2タグとを含む。次いで、圧縮エンジンは、タグを圧縮されたデータとして保存することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することができる。
【0032】
ある実装では、第1タグ又は第2タグで識別されるデータ・サンプルの値を、圧縮されたサイクル・データから除外しながら、第1タグ又は第2タグで識別されるデータ・サンプルは、第1タグ又は第2タグを使用して圧縮される。圧縮辞書は、更に、圧縮辞書中の値と部分的な一致を示すタグと、不一致を示すタグとを含む。タグ値は、圧縮されたデータ・サイクルにおいて保存され、その後に、部分的な一致を有するデータ・サンプルの部分(例えば、符号及び指数の値)が続き、そしてその後に、一致を有していないデータ・サンプルの部分全体が続く。次いで、データ・パケットの圧縮されたデータ・サイクルは、データ・パケット内で一緒に連結され、圧縮されたデータ・サイクルの終わりでデータ・パケットはゼロ・パディングされる。
【0033】
本開示の実装は、正規化線形ユニット(Rectified Linear Unit,ReLU)、シグモイド、及びTanhのようなML及びDL活性化関数に関する圧縮技術を提供する。本開示の実装は、データ管理をシンプルにし、より低い待ち時間を提供し、より高い圧縮ゲインを提供する。更に、実装は、より少ないゲートとより低い電力で実施することができる。DL又はAIに関して実装される従来の圧縮方式は、ウェイト又は活性化の圧縮の何れかに焦点を当てている。本開示の実装は、ウェイト及び活性化を含む、ML又はDLワークロードの全てデータに適用されるソリューションを提供する。本開示の実装は、ウェイト及び活性化データの両方を圧縮することができるので、より良好な全体的な圧縮率を提供する。
【0034】
更に、従来の圧縮技術は、非0値のラン・レングス符号化を利用しており、非0値とそれらの位置が符号化される。これに対して、本開示の実装は、0の大きなチャンクに焦点を当ており、パケット・ヘッダ・フィールドの予備ビットを活用し、その結果、より小さな圧縮されたパケット・サイズをもたらす。更に、0の大きなチャンクの解凍は、ラン・レングスを復号化するよりも少ない時間しか費やさない。その結果、本開示の実装は、実装におけるシリコン・タイミングに恩恵をもたらす。
【0035】
結論として、本開示の実装は、スパースな又はスパースでないデータ・パケットに対する改善された圧縮ゲインとともに革新的な圧縮アルゴリズムを、ML及びDLアプリケーションに最適化された実現可能な実装とともに提供する。実装は、より少ないゲート・カウント数とより低い電力利用をもたらす。また、実装は、より少ない待ち時間で検証され、様々なタイミング要求(例えば、7nmプロセス・ノードで2.05 Ghzを超える動作)を充足する。
【0036】
図1は、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を実施するために使用することが可能な例示的なコンピューティング・システムのブロック図である。例示的なコンピューティング・システム100は、例えば、モバイル・デバイス、ウェアラブル・デバイス、ラップトップ・コンピュータ、タブレット、デスクトップ・コンピュータ、サーバー等のような、別のシステムの構成要素として実装されてもよい。一実施形態では、コンピューティング・システム100は、サーバー・ベースのゲーム・プラットフォーム;ゲーム及びメディア・コンソールを含むゲーム・コンソール;モバイル・ゲーミング・コンソール、ハンドヘルド・ゲーム・コンソール、又はオンライン・ゲーム・コンソールを含むか、又はこれらの中に統合することができる(但し、限定ではない)。幾つかの実施形態では、コンピューティング・システム100は、モバイル電話、スマートフォン、タブレット・コンピューティング・デバイス、又は、小さな内部ストレージ容量を有するラップトップのようなモバイル・インターネット接続デバイスの一部分である。
【0037】
幾つかの実施形態では、コンピューティング・システム100は、典型的には、リソースが制約されたデバイスであるモノのインターネット(Internet-of-Things,IoT)デバイスの一部である。IoTデバイスは、埋め込みシステム、無線センサ・ネットワーク、制御システム、オートメーション(家庭及びビルディング・オートメーションを含む)、及びその他のデバイス及び機器(照明器具、サーモスタット、家庭用セキュリティ・システム、カメラ及びその他の家電製品など)であって、1つ以上の共通のエコシステムをサポートし、スマートフォン及びスマート・スピーカのような、そのエコシステムに関連するデバイスを使用して制御することができるものを含む可能性がある。
【0038】
コンピューティング・システム100はまた:スマート・ウォッチ・ウェアラブル・デバイスのようなウェアラブル・デバイス;現実世界の視覚、聴覚、又は触覚の体験を補助するための視覚、聴覚、又は触覚の出力を提供するか、又は別の方法でテキスト、オーディオ、グラフィックス、ビデオ、ホログラフィック画像又はビデオ、或いは触覚フィードバックを提供する、拡張現実(AR)又は仮想現実(VR)機能で改良されたスマート・アイウェア又は衣類;その他の拡張現実(AR)デバイス;又はその他の仮想現実(VR)デバイスを含むこと、それらと結合すること、又はそれらの内部に統合されることも可能である。幾つかの実施形態では、コンピューティング・システム100は、テレビ又はセット・トップ・ボックス・デバイスを含むか、又はその一部である。一実施形態では、コンピューティング・システム100は、バス、トラクター・トレーラー、自動車、バイク又は電力自転車、飛行機又はグライダー(又はそれらの任意の組み合わせ)のような自律走行車両を含むこと、それらと結合すること、又はそれらの内部に統合されることが可能である。自律走行車両は、コンピューティング・システム100を使用して、車両の周囲で感知される環境を処理することができる。
【0039】
例示されているように、一実施形態では、コンピューティング・システム100は、任意の数及び種類のハードウェア及び/又はソフトウェア構成要素、例えば(限定ではないが)グラフィックス処理ユニット(「GPU」、汎用GPU(GPGPU)、又は単に「グラフィックス・プロセッサ」)112、ハードウェア・アクセラレータ114、中央処理ユニット(「CPU」又は単に「アプリケーション・プロセッサ」)115、メモリ130、ネットワーク・デバイス、ドライバ等だけでなく、タッチスクリーン、タッチ・パネル、タッチ・パッド、仮想又は通常のキーボード、仮想又は通常のマウス、ポート、コネクタ等のような入力/出力(I/O)ソース160をも含む可能性がある。コンピューティング・システム100は、コンピューティング・システム100のハードウェア及び/又は物理リソースとユーザーとの間のインターフェースとして機能するオペレーティング・システム110を含んでもよい。幾つかの実装では、コンピューティング・システム100は、単一のシステム・オン・チップ上でCPU115、GPU112、及び/又はハードウェア・アクセラレータ114のうちの1つ以上の組み合わせを含んでもよいし、或いは場合によっては、GPU112又は視覚出力(例えば、ハードウェア・アクセラレータ114)を含まなくてもよい。
【0040】
ここで使用されるように、ハードウェア・アクセラレータ114のような「ハードウェア・アクセラレータ」は、効率的な処理を提供するように構成されたハードウェア・デバイスを指す。特に、ハードウェア・アクセラレータは、中央処理ユニット(CPU)又はその他の汎用プロセッサからの、何らかの処理タスクのオフローディングを提供するために使用されることが可能であり、ハードウェア・アクセラレータは、CPU又はその他のプロセッサ上で実行されるソフトウェアよりも良い処理タスク処理効率を提供するように意図されている可能性がある。ハードウェア・アクセラレータは、グラフィックス処理ユニット(GPU)、視覚処理ユニット(VPU)、ニューラル処理ユニット、人工知能(AI)プロセッサ、フィールド・プログラマブル・ゲート・アレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含む可能性があるが、これらに限定されない。
【0041】
例示的なコンピューティング・システム100のGPU 112(又はグラフィックス・プロセッサ112)、ハードウェア・アクセラレータ114、及び/又はCPU115(又はアプリケーション・プロセッサ115)は、モデル・トレーナ125及びモデル・エグゼキュータ105を含むことが可能である。モデル・トレーナ125及びモデル・エグゼキュータ105は、CPU115の一部分として描かれているが、一部の実装では、GPU112及び/又はハードウェア・アクセラレータ114が、モデル・トレーナ125及びモデル・エグゼキュータ105を含んでもよい。
【0042】
例示のモデル・エグゼキュータ105は、(例えば、入力インターフェース(図示せず)を介して)入力値にアクセスし、メモリ130のモデル・パラメータ・メモリ135に記憶された機械学習モデルに基づいて、これらの入力値を処理して、(例えば、出力インターフェース(図示せず)を介して)出力値を生成する。入力データは、(例えば、1つ以上のセンサを介して、ネットワーク・インターフェース等を介して)1つ以上のデータ・ソースから受信されてもよい。しかしながら、例えば入力データは(例えば、有線及び/又は無線通信チャネルを介して)外部デバイスから任意の方式で受信されてもよい。幾つかの例では、複数の異なるタイプの入力が受信されてもよい。幾つかの例では、入力データ及び/又は出力データは、コンピューティング・システム100の構成要素であるシステムの入力及び/又は出力を介して受信される。
【0043】
図1に示される例では、モデル・パラメータ・メモリ135に記憶された例示のニューラル・ネットワーク・パラメータは、モデル・トレーナ125によって訓練され、その結果、入力されたトレーニング・データ(例えば、トレーニング値インターフェース(図示せず)を介して受信されたもの)は、トレーニング・データに基づいて出力値をもたらす。
【0044】
図1に示される例では、モデル・トレーナ125及び/又はモデル・エグゼキュータ105は、訓練中及び/又は推論中にモデルを処理する際に圧縮エンジン150を使用する。例示的なモデル・エグゼキュータ105、例示的なモデル・トレーナ125、及び例示的な圧縮エンジン150は、例えばハードウェア・プロセッサのような1つ以上の論理回路によって実装される。幾つかの例では、例示的なモデル・エグゼキュータ105、例示的なモデル・トレーナ125、及び例示的な圧縮エンジン150のうちの1つ以上は、同じハードウェア構成要素(例えば、同じ論理回路)によって、又は異なるハードウェア構成要素(例えば、異なる論理回路、異なるコンピューティング・システムなど)によって実装されてもよい。しかしながら、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラマブル・プロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールド・プログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)などのような、任意の他のタイプの回路が追加的又は代替的に使用されてもよい。
【0045】
本件で開示される例では、モデル・エグゼキュータ105は機械学習モデルを実行する。例示的な機械学習モデルは、ニューラル・ネットワーク(例えば、フィードフォワード・ニューラル・ネットワーク)を使用して実装されてもよい。しかしながら、例えばCNNのような他の任意の過去、現在及び/又は将来の機械学習トポロジ及び/又はアーキテクチャが追加的又は代替的に使用されてもよい。
【0046】
モデルを実行するために、例示的なモデル・エグゼキュータ105は入力データにアクセスする。例示的なモデル・エグゼキュータ105は、モデル(モデル・パラメータ・メモリ135に記憶されたモデル・パラメータ(例えば、ウェイト及び/又はアクティベーションを含むニューラル・ネットワーク・パラメータ)によって定義されるもの)を、入力データに適用する。
【0047】
図1に示される例における例示のモデル・パラメータ・メモリ13は、例えばフラッシュ・メモリ、磁気媒体、光媒体のようなデータを記憶するための任意のメモリ、ストレージ・デバイス、及び/又はストレージ・ディスクによって実現される。更に、例示的なモデル・パラメータ・メモリ135に記憶されるデータは、例えば、バイナリ・データ、カンマ区切りデータ、タブ区切りデータ、構造化クエリ言語(SQL)構造などのような任意のデータ・フォーマットにおけるものである可能性がある。図示された例では、モデル・パラメータ・メモリ135は単一の要素として示されているが、本件で説明されるモデル・パラメータ・メモリ135及び/又は任意の他のデータ・ストレージ素子は、任意の数及び/又はタイプのメモリによって実装される可能性がある。
図1に示される例では、例示的なモデル・パラメータ・メモリ135は、1つ以上の出力を出力データとして生成するように入力を処理するためにモデル・エグゼキュータ105によって使用されるモデル重み付けパラメータを記憶している。
【0048】
本件で開示される例では、出力データは、受け取った入力データを(例えば、モデル・エグゼキュータ105によって決定されるように)分類する情報であってもよい。しかしながら、任意の他の目的に使用されることが可能な任意の他の種類の出力が、追加的又は代替的に使用されてもよい。本件で開示される例では、出力データは、出力値を表示する入力/出力(I/O)ソース160によって出力されてもよい。しかしながら、幾つかの例では、出力データは、別のシステム(例えば、別の回路、外部システム、コンピューティング・システム100によって実行されるプログラムなど)への出力値として提供されてもよい。幾つかの例では、出力データはメモリに記憶されてもよい。
【0049】
図1に示す例示的なモデル・トレーナ125は、予想される出力(例えば、コンピューティング・システム100においてトレーニング値として受け取ったもの)を、例示的なモデル・エグゼキュータ105によって生成された出力と比較して、トレーニング誤差の量を決定し、誤差の量に基づいてモデル・パラメータ(例えば、モデル・パラメータ・メモリ135)を更新する。トレーニング反復の後、誤差の量は、モデル・トレーナ125によって評価され、トレーニングを継続すべきかどうかを決定する。本件で開示される例では、入力データが、期待される出力をもたらさない場合、誤差が同定される。即ち、誤差は、期待される出力を伴う入力の条件の下で、不正確な出力の数として表現される。しかしながら、誤差を表現するための任意の他のアプローチ、例えば誤差を生じさせた入力データ点のパーセンテージが、追加的又は代替的に使用されてもよい。
【0050】
モデル・トレーナ125は、トレーニング誤差がトレーニング誤差閾値より小さいかかどうかを判定する。トレーニング誤差がトレーニング誤差閾値より小さい場合、モデルは十分に少ない量の誤差しかもたらさないようにトレーニングされており、更なるトレーニングは行われない。本件で開示される例では、トレーニング誤差閾値は10個のエラーである。しかしながら、任意の他の閾値が追加的又は代替的に使用されてもよい。更に、モデル・トレーニングが完了しているかどうかを判断する際には、他のタイプの要因が考慮されてもよい。例えば、実行されたトレーニング反復の回数及び/又はトレーニング・プロセス中に経過した時間の長さが考慮されてもよい。
【0051】
モデル・トレーナ125によって使用されるトレーニング・データは、入力例(受信されるように期待される入力データに対応するもの)と期待される出力データとを含む。本件で開示される例において、例示的なトレーニング・データは、モデル・トレーナ125がトレーニング誤差の量を決定することを可能にするために、モデル・トレーナ125に提供される。
【0052】
本件で開示される例では、例示的なモデル・トレーナ125及び例示的なモデル・エグゼキュータ105は、ディープ・ラーニングの数値データとスパース行列の圧縮を実施するために圧縮エンジン150を使用する。ある実装では、圧縮エンジン150は、複数のサイクルのデータ・サンプルを含むデータ・パケットを受信することによって、モデル・エグゼキュータ105及び/又はモデル・トレーナ125のためのディープ・ラーニングの数値データとスパース行列の圧縮を実施する。データ・サンプルの各サイクルについて、圧縮エンジン150は、サイクルのデータ・サンプルを圧縮辞書に渡すことができる。圧縮エンジン150は、圧縮辞書を利用して、サイクル内のデータ・サンプルの各々に対するタグを識別する。ある実装では、圧縮辞書は、少なくとも、0の値を有するデータのための第1タグと、1の値を有するデータのための第2タグとを含む。次いで、圧縮エンジン150は、タグを圧縮されたデータとして記憶することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することができる。ある実装では、第1タグ又は第2タグで識別されるデータ・サンプルは、圧縮されたサイクル・データからの第1タグ又は第2タグで識別されるデータ・サンプルの値を除外する際に、第1タグ又は第2タグを使用して圧縮される。
【0053】
モデル・トレーナ125及び/又はモデル・エグゼキュータ105による例示的な圧縮エンジン150の実装についての更なる議論及び詳細な説明は、
図2-6に関連して以下に提供される。
【0054】
図1に例示される例示的なI/Oソース160は、モデル・パラメータ・メモリ135に記憶されたモデルの、他のコンピューティング・システムとの通信を可能にする。幾つかの実装では、I/Oソース160は、ネットワーク・デバイス、マイクロプロセッサ、カメラ、ロボット眼、スピーカ、センサ、ディスプレイ・スクリーン、メディア・プレーヤ、マウス、タッチ・センシティブ・デバイス等を含む可能性があるが、これらに限定されない。このようにして、中央コンピューティング・システム(例えば、サーバー・コンピュータ・システム)は、モデルの訓練を実行し、利用のために(例えば、モデルを使用して推論演算を実行するために)モデルをエッジ・デバイスへ分配することができる。本件で開示される例では、I/Oソース160は、イーサーネット・ネットワーク通信器を使用して実装される。しかしながら、他の任意の過去、現在、及び/又は将来のタイプの通信技術が、追加的に又は代替的に、モデルを個々のコンピューティング・システムと通信させるために使用されてもよい。
【0055】
コンピューティング・システム100を実装する例示的な方法が
図1に示されているが、
図1に示される要素、プロセス及び/又はデバイスのうちの1つ以上は、他の任意の方法で組み合わされ、分割され、再配置され、省略され、除去され、及び/又は実装されてもよい。更に、例示的なモデル・エグゼキュータ105、例示的なモデル・トレーナ125、例示的な圧縮エンジン150、I/Oソース160、及び/又はより一般的には
図1の例示的なコンピューティング・システム100は、ハードウェア、ソフトウェア、ファームウェア、及び/又は、ハードウェア、ソフトウェア、及び/又はファームウェアの任意の組み合わせによって実装されてもよい。従って、例えば、例示的なモデル・エグゼキュータ105、例示的なモデル・トレーナ125、例示的な圧縮エンジン150、例示的なI/Oソース160、及び/又はより一般的には
図1の例示的なコンピューティング・システム100は、1つ以上のアナログ又はデジタル回路、論理回路、プログラマブル・プロセッサ、プログラマブル・コントローラ、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)及び/又はフィールド・プログラマブル論理デバイス(FPLD)によって実装することが可能である。
【0056】
本開示の幾つかの実装では、例示的なモデル・エグゼキュータ105、例示的なモデル・トレーナ125、例示的な圧縮エンジン150、例示的なI/Oソース160、及び/又はより一般的には
図1の例示的なコンピューティング・システム100のうちの少なくとも1つのソフトウェア及び/又はファームウェアの実装が提供される。そのような実装は、メモリ、デジタル多用途ディスク(DVD)、コンパクト・ディスク(CD)、ブルー・レイ・ディスク等(ソフトウェア及び/又はファームウェアを含むもの)のような、非一時的なコンピュータ読み取り可能なストレージ・デバイス又はストレージ・ディスクを含むことができる。更に、
図1の例示的なコンピューティング・システム100は、
図1に示されたものに加えて、又はその代わりに、1つ以上の要素、プロセス、及び/又はデバイスを含んでもよく、及び/又は図示された要素、プロセス、及びデバイスのうちの任意の1つ以上又は全てを含んでもよい。本件で使用されように「通信において」という語句(その変形を含む)は、直接的な通信及び/又は1つ以上の中間的な構成要素を介する間接的な通信を包含し、また、直接的な物理的な(例えば、有線の)通信及び/又は定常的な通信を利用せず、むしろ周期的なインターバル、スケジューリングされたインターバル、非周期的なインターバル、及び/又は1回限りのイベントでの選択的な通信を更に包含する。
【0057】
図2は、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を実施するための例示的な圧縮エンジン200を示す。ある実装では、圧縮エンジン200は、
図1に関して説明した圧縮エンジン150と同じである。圧縮エンジン200は、タグ・エンコーダ210、圧縮辞書220、パケット生成器230、及び/又はパディング構成要素240を含むように更に示されている。
図2の例示的な圧縮エンジン200は、
図2に示されたものに加えて、又はその代わりに、1つ以上の要素、プロセス及び/又はデバイスを含んでもよく、及び/又は図示された要素、プロセス及びデバイスのうちの任意の1つ以上又は全てを含んでもよい。幾つかの例では、例示的なタグ・エンコーダ210、例示的な圧縮辞書220、例示的なパケット生成器230、及び/又は例示的なパディング構成要素240のうちの1つ以上は、同一のハードウェア構成要素(例えば、同一の論理回路)によって、又は異なるハードウェア構成要素(例えば、異なる論理回路、異なるコンピューティング・システムなど)によって実装されてもよい。しかしながら、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラマブル・プロセッサ、特定用途向け集積回路(ASIC)、プログラマブル・ロジック・デバイス(PLD)、フィールド・プログラマブル・ロジック・デバイス(FPLD)、デジタル信号プロセッサ(DSP)などのような、任意の他のタイプの回路が追加的又は代替的に使用されてもよい。
【0058】
ある実装では、圧縮エンジン200は入力データを受け取ることができる。一例において、入力値は、MLモデルの入力ウェイト値202及び/又は入力アクティベーション値204であってもよい。圧縮エンジン200は、入力ウェイト202及び/又は入力アクティベーション204を、MLモデルに関連する訓練プロセス及び/又は推論プロセスの一部として、圧縮することができる。幾つかの実装では、圧縮エンジン200は、本件で説明される圧縮プロセスとは逆のプロセスで、入力ウェイト202及び/又は入力アクティベーション204の圧縮解除(又は解凍)を実行することができる。議論を容易にするために、以下の説明は圧縮プロセスを議論している。しかしながら、本開示の実装は、同様に、本件で説明される圧縮プロセスに類似している解凍プロセスを包含する。
【0059】
ある実装では、入力ウェイト202及び/又は入力アクティベーション204は、複数のデータ・サンプルを有する非圧縮データ・パケットの形態で到着する可能性がある。これらのデータ・サンプルは、例えば、入力ウェイト又は入力アクティベーションを含む可能性がある。ある実装では、データ・パケットは、複数のサイクルのデータ・サンプル(例えば、512ビット・データ・パケットにおける32個のデータ・サンプルの32サイクル)を含んでもよい。
【0060】
図3Aは、本開示の実装による圧縮エンジンによって処理されることが可能な例示的なデータ・サンプル・フォーマット310、320、330を示す。ある実装では、例示的なデータ・サンプル・フォーマット310、320、330は、
図2に関して説明した圧縮エンジン200によって処理されることが可能なデータ・サンプルを表す可能性がある。圧縮エンジン200のような圧縮エンジンは種々の任意のデータ・タイプを処理することが可能であり、データ・タイプは浮動小数点16、浮動小数点32、単精度8、単精度16、単精度32などを含むがこれらに限定されない。本件で列挙されているもの以外の他のデータ・タイプが本開示の実装によって処理されてもよい。
【0061】
データ・サンプル310は、例示的な半精度・浮動小数点16(fp16)のデータ・タイプを示す。図示されるように、半精度fp16データ・サンプル310は、1ビットの符号312と、幅5ビットの指数314と、精度11ビットの仮数416(10個が明示的に記憶される)とを含む。指数は、本件ではリテラル(literal)と言及される場合がある。仮数(significand)は本件では仮数(mantissa)と言及される場合もある。半精度fp16データ・タイプに関し、指数は15というバイアスを有し、整数は
(-1)sign bit×2exponent-15×1.significantbits2して定義することが可能である。
【0062】
データ・サンプル320は、例示的なbfloat16(bf16)データ・タイプを示す。図示されるように、bf16データ・サンプル320は、2つの16ビット部分を含むように示される。bf16データ・サンプル320の各16ビット部分は、1ビットの符号321、325と、幅8ビットの指数322、326と、精度7ビットの仮数323、328とを含む。データ・サンプル310、320によって示されるように、bf16データ・サンプル320は、fp16データ・サンプル310より多い指数ビットと、より少ない仮数ビットとを有する。
【0063】
データ・サンプル330は、例示的な浮動小数点32(fp32)のデータ・タイプを示す。図示されるように、fp32データ・サンプル330は、1ビット符号332と、幅8ビットの指数334と、精度23ビットの仮数336とを含む。
【0064】
図3Bは、本開示の実装により圧縮される例示的なデータ・パケット350を示す。ある実装では、例示的なデータ・パケット350は、
図2に関して説明される圧縮エンジン200によって処理することが可能なデータ・パケットを表す可能性がある。例示的なデータ・パケット350は、非圧縮形式で示されている。図示されるように、一例では、データ・パケット350は、1サイクル360のヘッダ370と、32サイクル360のデータ・サンプル365とを含む。他のフォーマットのデータ・パケット350が、本開示の実施において圧縮エンジンによって利用され且つ処理されてもよく、本件で説明する
図3Bの例示に限定されない。
【0065】
図3Bの例示的なデータ・パケット350において、データ・パケット350の各サイクル360は、「データ0」ないし「データ1023」として示される32個のBF16データ・サンプルを有する。各BF16データ・サンプルは16ビットを有する。一例では、各データ・サンプル365は、
図3Aに関して説明されるデータ・サンプル320と同一であってもよい。従って、データ・パケット350におけるデータのサイクル360は、合計32×16=512ビットを有する。
【0066】
図2を再び参照すると、ある実装では、タグ・エンコーダ210は、
図3Bのデータ・パケット350のようなデータ・パケットを解析して、個々のデータ・サンプルを取得することができる。データ・パケット内のデータ・サンプルは、サイクル毎に圧縮される。タグ・エンコーダ210は、1サイクルのデータ・サンプルを圧縮辞書220に渡すことができる。データ・パケットの各データ・サンプルは、圧縮辞書220を使用して圧縮される。ある実装では、圧縮辞書220はルック・アップ・テーブル又はハッシュ・テーブルであってもよい。ある実装では、圧縮辞書220は16個のエントリを有する。しかしながら、他のサイズの圧縮辞書220を実装することが可能であり、本開示は16エントリ圧縮辞書220に限定されない。ある実装では、圧縮辞書220は、複数の圧縮サブ辞書(multiple compressor sub-dictionaries)に細分される。例えば、圧縮辞書220は、それぞれ8エントリの2つの圧縮辞書(例えば、2つのハッシュ・テーブル)に分割されてもよい。
【0067】
図4は、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮のための例示的な圧縮辞書400を示す。ある実装では、圧縮辞書400は
図2に関して説明した圧縮辞書220と同じである。圧縮辞書400は、上述の圧縮サブ辞書のうちの1つを示すことが可能である。従って、ある実装では、圧縮辞書400の2つのコピー(或いは、幾つかの実施形態では、2つより多いコピー)が、
図2に関して説明した圧縮辞書220を構成してもよい。
【0068】
本開示の実装において、各サイクルのデータの下位半分のデータ・サンプル(例えば、
図3Bの下位半分のデータ・サンプル380)は、一方の圧縮サブ辞書400によって処理されるが、各サイクルのデータの上位半分のデータ・サンプル(例えば、
図3Bの上位半分のデータ・サンプル390)は、他方の圧縮サブ辞書400によって処理される。下位半分のデータ・サンプル380と上位半分のデータ・サンプル390は、圧縮エンジン200によって独立して並列に圧縮される。圧縮辞書400は、タグ・エンコーダ210によって使用されて、データの256ビット・チャンク各々(例えば、下位半分のデータ・サンプル380又は上位半分のデータ・サンプル390)を検査して、以下のケース:(1)値0又は1;(2)データ・サンプルの部分的な一致:辞書内で一致した仮数値、その残りの符号ビット及びリテラル値は異なる;又は(3)一致しない、をチェックする。
図4に示すように、圧縮辞書400は、上記の各ケースの説明420に対応するタグ値410を含む。
【0069】
例えば、1に等しいワード値を有するデータ・サンプルは0x5のタグ値410を受け取り、0に等しいワード値を有するデータ・サンプルは0x6のタグ値410を受け取り、圧縮辞書400における何れの記述420とも一致しないデータ・サンプルは0x7のタグ値410を受け取る。圧縮辞書400の説明セット420のうちの何れかと部分的に一致するデータ・サンプルは、部分的な一致に応じて、0x0ないし0x4の間で対応するタグ値410を受け取る。ある実装では、部分的な一致は、データ・サンプルの仮数(significand(mantissa))値が、圧縮辞書400における説明420のうちの1つに一致していることを指す。
【0070】
タグ・エンコーダ210は、圧縮辞書220を利用して、サイクル内の各データ・サンプルに対応するタグ値410を決定し、決定されたタグ値410をパケット生成器230に提供する。パケット生成器230は、パケットのヘッダにおいて特殊タグ値410を値0s又は1sを有する全てのデータ・サンプルに与え、これらのデータ・サンプルについてそれ以上の情報を記憶しないことによって、サイクルのデータ・サンプルを圧縮する(例えば、データ・サンプルの実際の値は、圧縮されたサイクル・データから除外される)。non-0又はnon-1データ値を有するが、その仮数値は一致する(即ち、部分一致)データ・サンプルについては、圧縮辞書400に記憶された対応するタグ値410が与えられ、これらのデータ・サンプルの符号及び指数(リテラル)値が記憶される。一致した値を有しないデータ・サンプルには、一致しないことを示すタグ値410が与えられ、これらのデータ・サンプルの部分全体が記憶される。データ・サンプルの部分全体は、一致しないデータ・サンプルに対する仮数(significant(mantissa))と指数(リテラル)の値の両方の記憶を参照する。
【0071】
本開示の実装において、パケット生成器230は、各サイクルのデータ・パケットのうちのデータ・サンプルを、圧縮されたサイクル・データに圧縮する。パケット生成器230は、サイクルの上位及び下位半分のデータ・サンプルに対する識別されたタグ値410の情報(例えば、圧縮辞書220の各サブ辞書からのもの)を、各サイクルのデータ・パケットに対する単一の圧縮されたサイクル・データに結合することができる。
【0072】
図5Aは、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮に基づくデータ・パケットのための例示的な圧縮されたサイクル・データ500を示す。ある実装では、圧縮されたサイクル・データは、
図3Bに関して説明したデータ・パケット350のデータ・サンプル365のうちの1サイクル360の圧縮されたバージョンであってもよい。ある実装では、
図2に関して説明した圧縮エンジン200のパケット生成器230は、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を使用して、圧縮されたサイクル・データ500を生成することができる。
【0073】
本開示の実装では、バイト・アラインメントを維持するために、パケット生成器230は、先ず、あるサイクルのデータ・サンプルに対して識別されたタグの全てを、圧縮されたサイクル・データのタグ部分510にグループ化する。タグ部分510の後に、圧縮されたサイクル・データ560-585のサイズを示すサイズ・バイト520が続いてもよい。ある実装では、サイズ・バイト520は、圧縮されたデータ・パケット550の中で、現在の圧縮されたサイクル・データの終端を指し示すように追加される。ある実装では、サイズ・バイト520は、次の圧縮されたサイクル・データを即座に割り当てるために、圧縮解除器によって使用されてもよい。
【0074】
サイズ・バイト520の後に、リテラル・データ530が続いてもよい。リテラル・データ530は、サイクルのうち部分一致のデータ・サンプルの記憶された情報を含むことが可能である。部分一致のデータ・サンプルの記憶された情報は、部分一致のデータ・サンプルの指数値を含むことが可能である。この場合において、これらのデータ・サンプルの仮数は、それらの関連するタグ値によって示されるように圧縮辞書220に一致しており、従って、圧縮の節約をもたらすために、圧縮されたサイクル・データ500において記憶されない。
【0075】
最終的に、リテラル・データ530の後に、不一致データ540が続いてもよい。不一致データは、サイクルの不一致データ・サンプルの記憶された情報を含むことが可能である。不一致データ・サンプルの記憶された情報は、不一致データ・サンプルの指数と仮数を含むことが可能である。
【0076】
パケット生成器230は、データ・パケットの各サイクルに対して生成された圧縮されたサイクル・データ500を、圧縮されたデータ・パケットに連結することができる。ある実装では、圧縮されたデータ・パケットは、出力ウェイト252又は出力アクティベーション254として圧縮エンジンによって出力される。
【0077】
図5Bは、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮に基づく例示的な圧縮されたデータ・パケット550を示す。ある実装では、圧縮されたデータ・パケット550は、
図3Bに関して説明したデータ・パケット350の圧縮されたバージョンであってもよい。ある実装では、
図2に関して説明した圧縮エンジン200のパケット生成器230は、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を利用して、圧縮されたデータ・パケット550を生成することができる。
【0078】
圧縮されたデータ・パケット550は、圧縮されたデータ・パケット・ヘッダ555と、圧縮されたサイクル・データ560-585のサイクル552とを含むことが可能である。ある実装では、各々の圧縮されたサイクル・データ560-585は、
図3Bに関して説明したデータ・パケット350のような、非圧縮データ・パケットの非圧縮データ・サンプルのサイクルに対応する。一例では、圧縮されたデータ0 560は、データ・パケット350のサイクル0 360についての圧縮されたデータ・サンプルに対応してもよい。更に、圧縮されたデータ560-585の各々は、
図5Aに関して説明した圧縮されたサイクル・データ500と同じフォーマットであってもよい。上述したように、各々の圧縮されたサイクル・データ560-585は、圧縮されたデータ・パケット550に連結される。サイクル552の割り当てられたビットを越えて延びる何らかの圧縮されたデータは、圧縮されたデータ・パケット550の次のサイクル552において継続される。例えば、圧縮されたデータ1 565a,565bは、サイクル0 552(即ち、565a)とサイクル1 552(即ち、565b)に部分的に記憶されるように示されている。同様に、圧縮されたデータ3 575a,575bは、サイクル1 552(即ち、575a)とサイクル2 552(即ち、575b)に部分的に記憶されるように示されている。
【0079】
最後の圧縮されたデータ(例えば、圧縮されたデータ31 585)の後で、圧縮されたデータ・パケットの残りの部分は、圧縮されたデータ・パケット550の次の512ビット・データ境界までゼロ・パディングされる590。ゼロ・パディングは、データ・パケットのうちの決定された部分を0値で埋めることを示す。ある実装では、
図2に関して説明した圧縮エンジン200のパディング構成要素240が、ゼロ・パディングを実行することができる。
【0080】
本開示の実装では、圧縮辞書220は「ランニング辞書(running dictionary)」として実装されてもよい。圧縮辞書220のランニング辞書バージョンは、データ・パケットの先行するサイクルからの一致した結果を、圧縮辞書220における部分一致の値に対して使用する。例えば、5つの可能な部分一致オプションを提供する圧縮辞書において、現在の256ビットで発見された最初の5つの値が記憶され、それらが、データ・サンプルの次のサイクルにおいて、同じ半分の次の256ビット・データ(例えば、下位半分又は上位半分のデータ・サンプル)と照合するために使用されることを、パケットの最後のデータに到達するまで行う。圧縮辞書220は、例えば、データ値の既知の範囲又は特定のワークロードに頻繁な値を含むデータ・プロファイリングに基づいて、部分一致の値に対するデフォルト値で初期化されてもよい。圧縮辞書220を初期化するために使用されるこれらのデフォルト部分一致の値は、プロセッサ、ハードウェア・アクセラレータ、及び/又は、圧縮エンジン200を提供するその他のハードウェアのレジスタに記憶されてもよい。
【0081】
本開示の実装は、ソフトウェアが、圧縮辞書のデフォルト・セットを、部分一致の値「オン・ザ・フライ(on the fly)」にプログラムすることを許容する。例えば、ユーザーが次のデータ・サンプルの範囲を知っている場合、その範囲内のデフォルト値を、リアル・タイムで圧縮辞書に(例えば、ML/AI/DLワークロードの実行中に)ロードして、データ・サンプルのサイクルでヒットする可能性を増やすことが可能である。
【0082】
代替的に、圧縮辞書は、以前のパケットにおける最終サイクルのデータから最も繁に使用される値を維持し、それを次のパケットの最初のデータに適用し続けることが可能である。即ち、本開示の実装は、圧縮辞書がデータ・パケット内のデータ・サンプルのサイクルの間に利用されるのと同じ方式で、現在のデータ・パケット内のデータ・サンプルの最終サイクルから、次のパケット・データ内のデータ・サンプルの最初のサイクルまで、圧縮辞書を利用することができる。パケット境界を跨ぐほとんどのデータは1つのデータ・ストリームに属するので、それらは同様な大きさの範囲内にあり、一致の確率は、パケット内のデータのサイクルの中で一致するデータの確率と同様である。この技術は、次のデータ・パケットの最初のデータ・サンプルが一致するか又は部分的に一致する可能性を増加させることができる。
【0083】
本開示の実装において、入力データ・サンプルが、例えばReLU、シグモイド、及びtanh関数のような活性化関数からの出力である場合、ほとんどのデータ・サンプル値は、0又は1値である可能性が高い。一例では、パケット・ヘッダ・ビットは、16×32サンプルの中で全部0及び全部1を表すために使用することができる。パケット内のデータ部分全体を除去することにより、(2KB+1ヘッダからヘッダへの)100%の圧縮ゲインを達成することができる。これは、全てのデータ・サンプル値が全て0である場合、従来のアプローチの384ビット圧縮データ(例えば、81%の圧縮利得)を越える改善である。
【0084】
本開示の実装では、入力データが、スパース・データ行列の形態にあり、ほとんどのデータ・サンプル値が0又は1である場合、最小量の非0又は非1データ・サンプルが存在する可能性がある。これは、全部0及び1の半分又は4分の1のサイズを表すものへ、ヘッダ・ビットを拡張することで取り扱うことができる。シングル・ビット・ヘッダ・ビットは、全部0及び全部1のデータ・パケット全体を表す。ヘッダで2ビットを使用すると、ハーフ・サイズのパケットで全部0及び1を各ビットで指定することができる。3ビットを使用すると、4分の1サイズのパケットで全部0及び1を各ビットで指定することができる。全てのデータ・サンプル値が全部0又は1である場合、そのサイズは、情報をデータに格納することなく、ヘッダ・ビットとともに圧縮される。そうでない場合、部分的に一致しているものとして圧縮される。4分の1のサイズのパケットが全部0又は1である場合、データを格納せずに圧縮される。これは全てのスパース行列をカバーすることができる。
【0085】
図6Aは、ディープ・ラーニングの数値データとスパース行列の圧縮のための方法600の実施形態を示すフロー・チャートである。方法600は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行されることが可能である。より詳細には、方法600は、例えばRAM、ROM、PROM、ファームウェア、フラッシュ・メモリ等のような機械又はコンピュータ読み取り可能な記憶媒体に記憶された一組の論理命令として1つ以上のモジュールにおいて、例えばプログラマブル論理アレイ(PLA)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、コンプレックス・プログラマブル論理デバイス(CPLD)のような設定可能なロジックにおいて、例えば特定用途向け集積回路(ASIC)、相補型金属酸化物半導体(CMOS)又はトランジスタ-トランジスタ・ロジック(TTL)技術、又はそれらの任意の組み合わせのような回路技術を用いる固定機能論理ハードウェアにおいて、実装されてもよい。
【0086】
方法600のプロセスは、提示における簡潔性及び明瞭性のために、直線的なシーケンスで示されている;しかしながら、それらのうちの任意数が並行して、非同期に、又は異なる順序で実行できることが想定されている。更に、簡潔さ、明瞭さ、理解しやすさのために、
図1-5に関して説明される構成要素及びプロセスの多くは、以下において反復も説明もされない可能性がある。ある実装では、
図1の圧縮エンジン150又は
図2の圧縮エンジン200のような圧縮エンジンが方法600を実行してもよい。
【0087】
方法600は処理ブロック610で始まり、データ・パケットが受信される。ある実装では、データ・パケットは複数のサイクルのデータ・サンプルを含む。ブロック620において、ブロック630、640、及び650が、データ・サンプルの各サイクルについて実行される。ブロックにおいて、サイクルのデータ・サンプルが圧縮辞書に渡される。
【0088】
次いで、ブロック640において、圧縮辞書を利用して、データ・サンプルの各々について、タグが識別される。ある実装では、圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む。最終的に、ブロック650において、サイクルのデータ・サンプルは、圧縮されたサイクル・データに圧縮される。ある実装では、タグを圧縮されたデータとして保存することによって、データ・サンプルは圧縮され、第1タグ又は第2タグで識別されるデータ・サンプルの値を除外しながら、第1タグ又は第2タグで識別されるデータ・サンプルは第1タグ又は第2タグを使用して圧縮される。
【0089】
図6Bは、ディープ・ラーニングの数値データとスパース行列の圧縮のための方法660の別の実施形態を示すフロー・チャートである。方法660は、ハードウェア(例えば、回路、専用ロジック、プログラマブル・ロジックなど)、ソフトウェア(例えば、処理デバイス上で実行される命令)、又はそれらの組み合わせを含む可能性がある処理ロジックによって実行されることが可能である。より詳細には、方法660は、例えばRAM、ROM、PROM、ファームウェア、フラッシュ・メモリ等のような機械又はコンピュータ読み取り可能な記憶媒体に記憶された一組の論理命令として1つ以上のモジュールにおいて、例えばPLA、FPGA、CPLDのような設定可能なロジックにおいて、例えばASIC、CMOS又はTTL技術、又はそれらの任意の組み合わせのような回路技術を用いる固定機能論理ハードウェアにおいて、実装されてもよい。
【0090】
方法660のプロセスは、提示における簡潔性及び明瞭性のために、直線的なシーケンスで示されている;しかしながら、それらのうちの任意数が並行して、非同期に、又は異なる順序で実行できることが想定されている。更に、簡潔さ、明瞭さ、理解しやすさのために、
図1-5に関して説明される構成要素及びプロセスの多くは、以下において反復も説明もされない可能性がある。ある実装では、
図1の圧縮エンジン150又は
図2の圧縮エンジン200のような圧縮エンジンが方法660を実行してもよい。
【0091】
方法660は処理ブロック665において始まり、プロセッサが、データ・パケットのサイクルの各データ・サンプルに対して識別したタグをグループとして、圧縮されたサイクル・データに保存する。ある実装では、タグは、データ・サンプルが0の値を有することを示す第1タグ、又はデータ・サンプルが1の値を有することを示す第2タグを少なくとも含む。ブロック670において、プロセッサは、圧縮されたサイクル・データにおいて、タグのグループに続いて、圧縮されたサイクル・データのサイズを示すサイズ・バイトを保存することができる。
【0092】
ブロック675において、プロセッサは、圧縮されたサイクル・データにおいて、サイズ・バイトに続いて、タグのグループ内で部分一致タグを有するデータ・サンプルの部分的な値を保存することができる。ある実装では、部分的な値は、部分一致タグで識別されたデータ・サンプルの符号と指数の値を含む。続いて、ブロック680において、プロセッサは、圧縮されたデータ・サンプルにおいて、部分的な値に続いて、タグのグループ内で不一致タグで識別されるデータ・サンプルの完全な部分を保存することができる。ある実装では、完全な部分は、不一致タグで識別されるデータ・サンプルの指数と仮数の値を含む。
【0093】
ブロック685において、プロセッサは、圧縮されたデータ・パケットにおいて、圧縮されたサイクル・データを、データ・パケットの他の圧縮されたサイクル・データと連結することができる。最終的に、ブロック690において、プロセッサは、圧縮されたデータ・サンプルに続いて、圧縮されたデータ・パケットの終端までゼロ・パディングを追加してもよい。
【0094】
図7は、幾つかの実施形態によるディープ・ラーニングの数値データとスパース行列の圧縮を可能にするための例示的な電子コンピューティング・デバイスの概略図である。幾つかの実施形態では、コンピューティング・デバイス700は、1つ以上のプロセッサ・コア718とニューラル・ネットワーク・アクセラレータ764を含む1つ以上のプロセッサ710を含み、ニューラル・ネットワーク・アクセラレータ764は、
図1-6に示されるようにディープ・ラーニングの数値データとスパース行列の圧縮を実現する。幾つかの実施形態では、コンピューティング・デバイス700はハードウェア・アクセラレータ768を含み、ハードウェア・アクセラレータは機械学習モデル784を含む。幾つかの実施形態では、コンピューティング・デバイスは、
図1-6で提供されるようなディープ・ラーニングの数値データとスパース行列の圧縮を用いて、機械学習モデル784を実装するニューラル・ネットワークを加速する。
【0095】
コンピューティング・デバイス700は、キャッシュ762、グラフィカル処理ユニット(GPU)712(一部の実装ではハードウェア・アクセラレータであってもよい)、無線入力/出力(I/O)インターフェース720、有線I/Oインターフェース730、システム・メモリ740(例えば、メモリ回路)、電力管理回路750、非一時的なストレージ・デバイス760、及びネットワーク772へ接続するためのネットワーク・インターフェース770のうちの1つ以上を更に含むことができる。以下の説明は、例示的なコンピューティング・デバイス700を形成する構成要素の簡単な一般的な説明を提供する。例示的な非限定的なコンピューティング・デバイス700は、デスクトップ・コンピューティング・デバイス、ブレード・サーバー・デバイス、ワークステーション、又は類似のデバイスやシステムを含んでもよい。
【0096】
実施形態では、プロセッサ・コア718は、機械読み取り可能な命令セット714を実行すること、データ及び/又は命令セット714を1つ以上のストレージ・デバイス760から読み込むこと、及びデータを1つ以上のストレージ・デバイス760に書き込むことができる。当業者は、図示された実施形態及び他の実施形態は、例えばスマートフォン、ポータブルコンピュータ、ウェアラブル・コンピュータ、家電製品、パーソナル・コンピュータ(PC)、ネットワークPC、ミニコンピュータ、サーバー・ブレード、メインフレーム・コンピュータなどのような携帯電子デバイス又はハンドヘルド電子デバイスを含む他のプロセッサ・ベースのデバイス構成で実施されてもよいことを理解するであろう。例えば、機械読み取り可能な命令セット714は、
図1-6で提供されるようなディープ・ラーニングの数値データとスパース行列の圧縮を実装するための命令を含むことができる。
【0097】
プロセッサ・コア718は、任意の数のハードワイヤードの又は設定可能な回路を含む可能性があり、そのうちの一部又は全部は、プロセッサ読み取り可能な命令を実行することが可能なPC、サーバー、又はその他のコンピューティング・システム内に部分的又は全体的に配置された電子部品、半導体デバイス、及び/又は論理素子のプログラム可能な又は設定可能な組み合わせを含む可能性がある。
【0098】
コンピューティング・デバイス700は、プロセッサ・コア718、キャッシュ762、グラフィックス・プロセッサ回路712、1つ以上の無線I/Oインターフェース720、1つ以上の有線I/Oインターフェース730、1つ以上のストレージ・デバイス760、及び/又は1つ以上のネットワーク・インターフェース770を含む様々なシステム構成要素の間で、情報及び/又はデータのやり取りを通信可能に結び付けて促進するバス又は同様な通信リンク716を含む。コンピューティング・デバイス700は、本件では単数で言及される場合があるが、それは実施形態を単一のコンピューティング・デバイス700に限定するようには意図されておらず、なぜなら幾つかの実施形態では、任意の数の通信可能に結合された、配置された、又は遠隔ネットワーク化された回路又はデバイスを組み込む、含む、又は包含する1つより多いコンピューティング・デバイス700が存在してもよいからである。
【0099】
プロセッサ・コア718は、機械読み取り可能な命令セットを実行することが可能な現在利用可能な又は将来開発される任意の数又はタイプのデバイス、又はそれらの組み合わせを含んでもよい。
【0100】
プロセッサ・コア718は、1つ以上のシステム・オン・チップ(SOC);中央処理ユニット(CPU);デジタル信号プロセッサ(DSP);グラフィックス処理ユニット(GPU);特定用途向け集積回路(ASIC)、プログラマブル論理ユニット、フィールド・プログラマブル・ゲート・アレイ(FPGA)などのような、任意の現在又は将来開発されるシングル又はマルチ・コア・プロセッサ又はマイクロプロセッサを含む(又はそれらに結合される)可能性があるが、これらに限定されない。別意に説明されない限り、
図7に示す種々のブロックの構成及び動作は、従来の設計によるものである。従って、このようなブロックは本件で更に詳細には説明されないが、当業者には理解されるであろう。コンピューティング・デバイス700の少なくとも一部の構成要素を相互接続するバス716は、現在利用可能な又は将来開発される任意のシリアル又はパラレル・バス構造又はアーキテクチャを使用することができる。
【0101】
システム・メモリ740は、リード・オンリ・メモリ(ROM)742及びランダム・アクセス・メモリ(RAM)746を含んでもよい。ROM742の一部は、基本入力/出力システム(BIOS)744を格納するか又は別の方法で保持するために使用されてもよい。BIOS744は、例えば、1つ以上の機械読み取り可能な命令セット714をロード及び/又は実行することをプロセッサ・コア718に行わせることによって、基本的な機能をコンピューティング・デバイス700に提供する。実施形態において、1つ以上の機械読み取り可能な命令セット714のうちの少なくとも一部は、専用の、特定の、及び特定のマシン、例えば、ワード・プロセッシング・マシン、デジタル画像取得マシン、メディア再生マシン、ゲーミング・システム、通信デバイス、スマートフォン、又は類似のものとして、提供、作成、生成、遷移、及び/又は機能することを、プロセッサ・コア718の少なくとも一部に行わせる。
【0102】
コンピューティング・デバイス700は、少なくとも1つの無線入力/出力(I/O)インターフェース720を含んでもよい。少なくとも1つの無線I/Oインターフェース720は、1つ以上の物理出力デバイス722(触覚デバイス、ビデオ・ディスプレイ、オーディオ出力デバイス、ハードコピー出力デバイスなど)に通信可能に接続されてもよい。少なくとも1つの無線I/Oインターフェース720は、1つ以上の物理入力デバイス724(ポインティング・デバイス、タッチスクリーン、キーボード、触覚デバイスなど)に通信可能に結合することができる。少なくとも1つの無線I/Oインターフェース720は、現在利用可能な又は将来開発される任意の無線I/Oインターフェースを含む可能性がある。例示的な無線I/Oインターフェースは、BLUETOOTH(登録商標)、近距離無線通信(NFC)、及び類似のものを含むが、これらに限定されない。
【0103】
コンピューティング・デバイス700は、1つ以上の有線入力/出力(I/O)インターフェース730を含んでもよい。少なくとも1つの有線I/Oインターフェース730は、1つ以上の物理出力デバイス722(触覚装置、ビデオ・ディスプレイ、オーディオ出力デバイス、ハードコピー出力デバイスなど)に通信可能に結合されてもよい。少なくとも1つの有線I/Oインターフェース730は、1つ以上の物理入力デバイス724(ポインティング・デバイス、タッチスクリーン、キーボード、触覚デバイスなど)に通信可能に結合されてもよい。有線I/Oインターフェース730は、現在利用可能な又は将来開発される任意のI/Oインターフェースを含んでもよい。例示的なワイヤードI/Oインターフェースは、ユニバーサル・シリアル・バス(USB)、IEEE1394(「FireWire」)などを含むが、これらに限定されない。
【0104】
コンピューティング・デバイス700は、1つ以上の通信可能に結合された非一時的なデータ・ストレージ・デバイス760を含んでもよい。データ・ストレージ・デバイス760は、1つ以上のハード・ディスク・ドライブ(HDD)及び/又は1つ以上のソリッド・ステート・ストレージ・デバイス(SSD)を含んでもよい。1つ以上のデータ・ストレージ・デバイス760は、現在又は将来開発される任意のストレージ装置、ネットワーク・ストレージ・デバイス、及び/又はシステムを含んでもよい。このようなデータ・ストレージ・デバイス760の非限定的な例は、1つ以上の磁気ストレージ・デバイス、1つ以上の光ストレージ・デバイス、1つ以上の電気抵抗ストレージ・デバイス、1つ以上の分子ストレージ・デバイス、1つ以上の量子ストレージ・デバイス、又はそれらの様々な組み合わせのような、現在又は将来開発される任意の非一時的なストレージ装置又はデバイスを含む可能性があるが、これらに限定されない。幾つかの実装では、1つ以上のデータ・ストレージ・デバイス760は、1つ以上のフラッシュ・ドライブ、フラッシュ・メモリ、フラッシュ・ストレージ・ユニット、又は同様な装置やデバイスであってコンピューティング・デバイス700と通信可能な結合を行い且つコンピューティング・デバイス700から切り離すことが可能なもののような、1つ以上のリムーバブル・ストレージ・デバイスを含んでもよい。
【0105】
1つ以上のデータ・ストレージ・デバイス760は、それぞれのストレージ・デバイス又はシステムをバス716に通信可能に接続するインターフェース又はコントローラ(図示せず)を含んでもよい。1つ以上のデータ・ストレージ・デバイス760は、機械読み取り可能な命令セット、データ構造、プログラム・モジュール、データ記憶装置、データベース、論理構造、及び/又は他のデータであって、プロセッサ・コア718及び/又はグラフィックス・プロセッサ回路712、及び/又はプロセッサ・コア718及び/又はグラフィックス・プロセッサ回路712上で又はそれによって実行される1つ以上のアプリケーションに有用な他のデータを、記憶するか、保持するか、又は他の方法で包含することができる。幾つかの例では、1つ以上のデータ・ストレージ・デバイス760は、例えばバス716を介して、又は1つ以上の有線通信インターフェース730(例えば、ユニバーサル・シリアル・バス、即ちUSB);1つ以上の無線通信インターフェース720(例えば、Bluetooth(登録商標)、近距離無線通信、即ちNFC);及び/又は1つ又は複数のネットワーク・インターフェース770(IEEE802.3又はイーサーネット、IEEE 802.11、又はWi-Fi(登録商標)など)を介して、プロセッサ・コア718に通信可能に結合されてもよい。
【0106】
プロセッサ読み取り可能な命令セット714及び他のプログラム、アプリケーション、論理セット、及び/又はモジュールは、全体的又は部分的にシステム・メモリ740に記憶されてもよい。このような命令セット714は、全体的又は部分的に、1つ以上のデータ・ストレージ・デバイス760から転送されてもよい。命令セット714は、プロセッサ・コア718及び/又はグラフィックス・プロセッサ回路712による実行中に、全体的又は部分的に、システム・メモリ740にロードされ、記憶され、又はその他の方法で保持されてもよい。
【0107】
コンピューティング・デバイス700は、エネルギー・ストレージ・デバイス752の1つ以上の動作態様を制御する電力管理回路750を含んでもよい。実施形態において、エネルギー・ストレージ・デバイス752は、1つ以上の一次(即ち、再充電不能な)又は二次(即ち、再充電可能な)バッテリ、又は同様なエネルギー・ストレージ・デバイスを含んでもよい。実施形態において、エネルギー・ストレージ・デバイス752は、1つ以上のスーパーキャパシタ又はウルトラキャパシタを含むことができる。実施形態において、電力管理回路750は、外部電源754からエネルギー・ストレージ・デバイス752へ及び/又はコンピューティング・デバイス700へのエネルギーの流れを、変更、調整、又は制御することができる。電源754は、太陽光発電システム、商用電力網、携帯型発電機、外部エネルギー・ストレージ・デバイス、又はそれらの任意の組み合わせを含んでもよいが、これらに限定されない。
【0108】
プロセッサ・コア718、グラフィックス・プロセッサ回路712、無線I/Oインターフェース720、有線I/Oインターフェース730、ストレージ・デバイス760、及びネットワーク・インターフェース770は、バス716を介して互いに通信可能に結合され、それによって、上述の構成要素間の接続を提供するように便宜上示されている。代替的な実施形態では、上述の構成要素は、
図7に示すものとは異なる方法で通信可能に結合されてもよい。例えば、上述の構成要素のうちの1つ以上は、他の構成要素に直接的に結合されてもよいし、或いは1つ以上の中間構成要素(図示せず)を介して互いに結合されてもよい。別の例では、上述の構成要素のうちの1つ以上がプロセッサ・コア718及び/又はグラフィックス・プロセッサ回路712に一体化されてもよい。幾つかの実施形態では、バス716のうちの全部又は一部を省略することが可能であり、構成要素は、適切な有線又は無線の接続を使用して互いに直接的に結合される。
【0109】
コンピューティング・システム100(
図1)、圧縮エンジン200(
図2)、方法600(
図6A)、及び方法660(
図6B)を実装するための、例示的なハードウェア・ロジック、機械読み取り可能な命令、ハードウェア実装状態マシン、及び/又はそれらの任意の組み合わせを表すフロー・チャートが既に説明されている。機械読み取り可能な命令は、
図7に関連して上述した例示的なコンピューティング・デバイス700に示されるプロセッサ710のようなコンピュータ・プロセッサによる実行のための1つ以上の実行可能プログラム又は実行可能プログラムのうちの一部分であってもよい。プログラムは、CD-ROM、フロッピー・ディスク、ハード・ドライブ、DVD、ブルー・レイ・ディスク、又はプロセッサ710に関連するメモリのような非一時的なコンピュータ読み取り可能な記憶媒体に記憶されたソフトウェアで実現することが可能であるが、代替的にプログラム全体又はその一部は、プロセッサ710以外のデバイスによって実行されることが可能であり、及び/又はファームウェア又は専用ハードウェアで実現することも可能である。更に、
図6A及び/又は
図6Bに示されるフロー・チャートを参照して例示的なプログラムが説明されるが、例示的なコンピューティング・システム100を実装する多くの他の方法が代替的に使用されてもよい。例えば、ブロックの実行順序は変更されてもよく、及び/又は説明されるブロックの幾つかは変更され、削除され、又は組み合わせることが可能である。追加的又は代替的に、ブロックのうちの全部又は何れかは、ソフトウェア又はファームウェアを実行することなく、対応する動作を実行するように構成された1つ以上のハードウェア回路(例えば、ディスクリート及び/又は集積アナログ及び/又はデジタル回路、FPGA、ASIC、比較器、演算増幅器(op-amp)、論理回路など)によって実装されてもよい。
【0110】
本件で説明する機械読み取り可能な命令は、圧縮されたフォーマット、暗号化されたフォーマット、フラグメント化されたフォーマット、コンパイルされたフォーマット、実行可能フォーマット、パッケージ化されたフォーマットなどのうちの1つ以上で記憶することが可能である。本件で説明される機械読み取り可能な命令は、機械実行可能な命令を作成、製造、及び/又は生成するために利用することが可能なデータ(例えば、命令の部分、コード、コードの表現など)として記憶されてもよい。例えば、機械読み取り可能な命令は、1つ以上のストレージ・デバイス及び/又はコンピューティング・デバイス(例えば、サーバー)においてフラグメント化されて記憶されてもよい。機械読み取り可能な命令は、コンピューティング・デバイス及び/又は他の機械によって直接的に読み取り可能に、解釈可能に、及び/又は実行可能にするために、インストール、修正、適応、更新、組み合わせ、補足、設定、復号化、パッケージング解除、配布、再割り当て、コンパイルなどのうちの1つ以上を利用することができる。例えば、機械読み取り可能な命令は、個別に圧縮され、暗号化され、個々のコンピューティング・デバイスに記憶される複数のパーツで記憶されてもよく、これらのパーツは、復号化され、解凍され、組み合わせられると、本件で説明されるようなプログラムを実現する実行可能命令のセットを形成する。
【0111】
他の例において、機械読み取り可能な命令を或る状態で記憶することが可能であり、その状態では、コンピュータにより読み込まれることが可能であるが、特定のコンピューティング・デバイス又は他のデバイス上で命令を実行するために、ライブラリ(例えば、ダイナミック・リンク・ライブラリ(DLL))、ソフトウェア開発キット(SDK)、アプリケーション・プログラミング・インターフェース(API)などの増築を利用することができる。別の例では、機械読み取り可能な命令は、機械読み取り可能な命令及び/又は対応するプログラムが全体的又は部分的に実行される前に設定されることが可能である(例えば、記憶された設定、データ入力、記録されたネットワーク・アドレスなど)。従って、開示された機械読み取り可能な命令及び/又は対応するプログラムは、記憶される場合又は別の方法で休止又は輸送中に、機械読み取り可能な命令及び/又はプログラムの特定のフォーマット又は状態にかかわらず、そのような機械読み取り可能な命令及び/又はプログラムを包含するように意図されている。
【0112】
本件で説明される機械読み取り可能な命令は、任意の過去、現在、又は将来の命令言語、スクリプト言語、プログラミング言語などによって表現することが可能である。例えば、機械読み取り可能な命令は、以下の言語:C、C++、Java、C#、Perl、Python、JavaScript、HTML(HyperText Markup Language)、SQL(Structured Query Language)、Swiftなどのうちの何れを利用して表現されてもよい。
【0113】
上述したように、
図5及び/又は
図6の例示的なプロセスは、非一時的コンピュータ及び/又は機械読み取り可能な媒体、例えば、ハード・ディスク・ドライブ、フラッシュ・メモリ、リード・オンリ・メモリ、コンパクト・ディスク、デジタル多用途ディスク、キャッシュ、ランダム・アクセス・メモリ、及び/又は、情報が任意の期間にわたって(例えば、長期間、永久的に、短時間、一時的なバッファリングにより、及び/又は情報のキャッシュにより)記憶される他の任意のストレージ・デバイス又はストレージ・ディスクに記憶される実行可能な命令(例えば、コンピュータ及び/又は機械読み取り可能な命令)を使用して実装されてもよい。本件で使用されるように、用語「非一時的なコンピュータ読み取り可能な媒体」は、任意のタイプのコンピュータ読み取り可能なストレージ・デバイス及び/又はストレージ・ディスクを含むが、伝播する信号を排除し且つ伝送媒体を排除するように明示的に定義される。
【0114】
「含む」及び「有する」(及びそれらのすべての形式及び時制)は、本件では、オープン・エンドの用語として使用される。従って、クレームが「含む」又は「有する」(例えば、含む、有する、含んでいる、有している等)の任意の形式を、プリアンブルとして又は何らかの種類のクレーム記載の中で使用している場合は常に、追加の要素、用語などは、対応するクレーム又は記載の範囲外に落ちてしまうこと無く存在し得ることが理解されるべきである。本件で使用されるように、「少なくとも」という語句が、例えばクレームのプリアンブルで移行語として使用される場合、そは「含む」及び「有する」という用語がオープン・エンドであるのと同様にオープン・エンドである。
【0115】
用語「及び/又は」は、例えばA、B、及び/又はCのような形態で使用される場合に、A、B、Cの任意の組み合わせ又はサブセットを指し、例えば、(1)A単独、(2)B単独、(3)C単独、(4)A及びB、(5)A及びC、(6)B及びC、並びに(7)A及びB且つCを指す。構造、構成要素、アイテム、オブジェクト及び/又は事物の文脈で本件で使用される場合、「A及びBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA且つ少なくとも1つのB、の何れかを含む実装を指すように意図されている。同様に、構造、構成要素、アイテム、オブジェクト、及び/又は事物を説明する文脈において本件で使用される場合に、「A又はBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA且つ少なくとも1つのBの何れかを含む実装を指すように意図されている。プロセス、命令、アクション、アクティビティ、及び/又はステップの実行又はパフォーマンスを説明する文脈で本件で使用される場合、「A及びBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA且つ少なくとも1つのB、の何れかを含む実装を指すように意図されている。プロセス、命令、アクション、アクティビティ、及び/又はステップの実行又はパフォーマンスを説明する文脈で本件で使用される場合、「A又はBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA且つ少なくとも1つのB、の何れかを含む実装を指すように意図されている。
【0116】
本件で使用される場合に、単独の参照(例えば、「ある(“a”, “an”)」、「第1」、「第2」など)は複数を除外していない。本件使用される場合に「ある」又は「或る」エンティティという用語は、1つ以上のそのエンティティを指す。「ある(又は或る)」、「1つ以上」及び「少なくとも1つ」という用語は、本件では可換に使用することができる。更に、個々に列挙されていたとしても、複数の手段、要素、又は方法動作は、例えば単一のユニット又はプロセッサによって実装されてもよい。更に、個々の特徴は、異なる例又はクレームに含まれる可能性があるが、これらは場合によっては組み合わされる可能性があり、異なる例又はクレームに含まれることは、特徴の組み合わせが実行不可能である及び/又は有利であることを意味していない。
【0117】
記述子「第1」、「第2」、「第3」等は、個別的に言及される可能性がある複数の要素又は構成要素を識別する場合に本件で使用される。これらの記述子は、その使用状況に基づいて別意に特定又は理解されない限り、リスト内の優先順位、物理的な順序又は配置の何らかの意味を帰属させるものではなく、その時間的な順序は、開示された例を理解しやすくするために複数の要素又は構成要素を別々に参照するためのラベルとして使用されているに過ぎない。幾つかの例において、記述子「第1」は、詳細な説明中の要素を参照するために使用されることが可能であり、同一の要素が、「第2」又は「第3」のような異なる記述子とともにクレーム中で言及される可能性がある。このような場合、そのような記述子は複数の要素又は構成要素を参照することを容易にするために単に使用されていることが理解されるべきである。
【0118】
以下の実施例は更なる実施形態に関連する。実施例1は、ディープ・ラーニングの数値データとスパース行列の圧縮を促す装置である。実施例1の装置は:複数のサイクルのデータ・サンプルを含むデータ・パケットを受信すること;及びデータ・サンプルの各サイクルについて:そのサイクルのデータ・サンプルを圧縮辞書に渡すこと;データ・サンプルの各々に対するタグを、圧縮辞書から識別することであって、圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及びタグを圧縮されたデータとして保存することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することであって、第1タグ又は第2タグで識別されるデータ・サンプルの値が圧縮されたサイクル・データから除外されるのと同時に、第1タグで識別されるデータ・サンプルは第1タグを使用して圧縮され、且つ第2タグで識別されるデータ・サンプルは第2タグを使用して圧縮される、圧縮すること;
を行う圧縮エンジンを含むプロセッサを含む。
【0119】
実施例2では、実施例1の対象事項はオプションとして以下の事項を含むことが可能である:圧縮辞書はルック・アップ・テーブル又はハッシュ・テーブルを含む。
実施例3では、実施例1-2のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:タグは、少なくとも、圧縮辞書中に一致が無いことを示す第3タグと、圧縮辞書中の少なくとも1つの値に対するデータ・サンプルの部分的な一致を示す複数の追加タグとを更に含む。
【0120】
実施例4では、実施例1-3のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・サンプルを圧縮する圧縮エンジンは、更に:圧縮されたサイクル・データのタグに続いて、複数の追加タグのうちの何れかで識別されるデータ・サンプルの部分的な値を保存することであって、部分的な値は、複数の追加タグのうちの何れかを有するデータ・サンプルの符号と指数の値を含む、保存すること;及び部分的な値に続いて、第3タグで識別されるデータ・サンプルの全ての部分を保存することを行う。
【0121】
実施例5では、実施例1-4のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・パケットの各サイクルの圧縮されたサイクル・データは、圧縮されたデータ・パケットにおいて連結されており、最後の圧縮されたサイクル・データに続く圧縮されたデータ・パケットの残りは、ゼロ・パディングされる。
実施例6では、実施例1-5のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・サンプルを圧縮することは、サイズ・バイトを圧縮されたサイクル・データに追加することを更に含み、サイズ・バイトは圧縮されたサイクル・データのサイズを示す。
実施例7では、実施例1-6のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:サイズ・バイトは、圧縮されたサイクル・データにおいて、タグの後であって部分的な値の前に保存されている。
【0122】
実施例8では、実施例1-7のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:複数の追加タグは、データ・パケットの先行する圧縮されたサイクルからのデータ・サンプルのデータ値を使用して、データ・パケットの各サイクルを圧縮した後に更新される。
実施例9では、実施例1-8のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・サンプルの各サイクルについて:データ・サンプルを上半データ・サンプルと下半データ・サンプルに分割すること;上半データ・サンプルを圧縮辞書の第1サブ辞書に渡し、下半データ・サンプルを圧縮辞書の第2サブ辞書に渡すことであって、第1サブ辞書と第2サブ辞書は同じエントリを含む、渡すこと;第1サブ辞書を使用して、上半データ・サンプルの各々に対するタグを識別すること;第2サブ辞書を使用して、下半データ・サンプルの各々に対するタグを識別すること;を行い、上半データ・サンプルの各々と下半データ・サンプルの各々に対するタグを識別することは並列的に実行される。
【0123】
実施例10では、実施例1-9のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:タグは3ビット値を含み、圧縮辞書は16個のエントリを保存し、第1サブ辞書は圧縮辞書の8個のエントリを含み、第2サブ辞書は圧縮辞書の別の8個のエントリを含む。
実施例11では、実施例1-10のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:圧縮エンジンは、機械学習ワークロード又は深層学習ワークロードのウェイト値又は活性化関数の少なくとも1つの出力に適用される。
【0124】
実施例12は、ディープ・ラーニングの数値データとスパース行列の圧縮を促すための少なくとも1つの非一時的なマシン読み取り可能な記憶媒体である。実施例12の非一時的なコンピュータ読み取り可能な記憶媒体は実行可能なコンピュータ・プログラム命令を記憶しており、命令は1つ以上のプロセッサにより実行されると、1つ以上のプロセッサに動作を実行させ、その動作は:複数のサイクルのデータ・サンプルを含むデータ・パケットを、少なくとも1つのプロセッサにより受信すること;及びデータ・サンプルの各サイクルについて:サイクルのデータ・サンプルを圧縮辞書に渡すこと;データ・サンプルの各々に対するタグを、圧縮辞書から識別することであって、圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及びタグを圧縮されたデータとして保存することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することであって、第1タグ又は第2タグで識別されるデータ・サンプルの値が圧縮されたサイクル・データから除外されるのと同時に、第1タグで識別されるデータ・サンプルは第1タグを使用して圧縮され、且つ第2タグで識別されるデータ・サンプルは第2タグを使用して圧縮される、圧縮することを含む。
【0125】
実施例13では、実施例12の対象事項はオプションとして以下の事項を含むことが可能である:タグは、少なくとも、圧縮辞書中に一致が無いことを示す第3タグと、圧縮辞書中の値に対するデータ・サンプルの部分的な一致を示す複数の追加タグとを更に含む。
実施例14では、実施例12-13のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:少なくとも1つのプロセッサがデータ・サンプルを圧縮することは、更に、少なくとも1つのプロセッサが:圧縮されたサイクル・データのタグに続いて、複数の追加タグのうちの何れかで識別されるデータ・サンプルの部分的な値を保存することであって、部分的な値は、複数の追加タグのうちの何れかを有するデータ・サンプルの符号と指数の値を含む、保存すること;及び部分的な値を保存することに続いて、第3タグで識別されるデータ・サンプルの全ての部分を保存することを含む。
【0126】
実施例15では、実施例12-14のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・パケットの各サイクルの圧縮されたサイクル・データは、圧縮されたデータ・パケットにおいて連結されており、最後の圧縮されたサイクル・データに続く圧縮されたデータ・パケットの残りは、ゼロ・パディングされる。
実施例16では、実施例12-15のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:少なくとも1つのプロセッサがデータ・サンプルを圧縮することは、更に、少なくとも1つのプロセッサが、サイズ・バイトを圧縮されたサイクル・データに追加することであって、サイズ・バイトは圧縮されたサイクル・データのサイズを示す。
【0127】
実施例17は、ディープ・ラーニングの数値データとスパース行列の圧縮のための方法である。実施例17の方法は、複数のサイクルのデータ・サンプルを含むデータ・パケットを、少なくとも1つのプロセッサにより受信すること;及びデータ・サンプルの各サイクルについて:サイクルのデータ・サンプルを圧縮辞書に渡すこと;データ・サンプルの各々に対するタグを、圧縮辞書から識別することであって、圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及びタグを圧縮されたデータとして保存することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することであって、第1タグ又は第2タグで識別されるデータ・サンプルの値が圧縮されたサイクル・データから除外されるのと同時に、第1タグで識別されるデータ・サンプルは第1タグを使用して圧縮され、且つ第2タグで識別されるデータ・サンプルは第2タグを使用して圧縮される、圧縮することを更に含む。
【0128】
実施例18では、実施例17のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:タグは、少なくとも、圧縮辞書中に一致が無いことを示す第3タグと、圧縮辞書中の値に対するデータ・サンプルの部分的な一致を示す複数の追加タグとを更に含む。
実施例19では、実施例17-18のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・サンプルを圧縮することは、更に、圧縮されたサイクル・データのタグに続いて、複数の追加タグのうちの何れかで識別されるデータ・サンプルの部分的な値を保存することであって、部分的な値は、複数の追加タグのうちの何れかを有するデータ・サンプルの符号と指数の値を含む、保存すること;部分的な値を保存することに続いて、第3タグで識別されるデータ・サンプルの全ての部分を保存すること;及びサイズ・バイトを圧縮されたサイクル・データに追加することであって、サイズ・バイトは圧縮されたサイクル・データのサイズを示す、追加することを含む。
【0129】
実施例20では、実施例17-19のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・パケットの各サイクルの圧縮されたサイクル・データは、圧縮されたデータ・パケットにおいて連結されており、最後の圧縮されたサイクル・データに続く圧縮されたデータ・パケットの残りは、ゼロ・パディングされる。
【0130】
実施例21は、ディープ・ラーニングの数値データとスパース行列の圧縮を促すシステムである。実施例21のシステムは、オプションとして、メモリとメモリに通信可能に結合されるプロセッサとを含むことが可能である。実施例21のシステムのプロセッサは:複数のサイクルのデータ・サンプルを含むデータ・パケットを受信すること;及びデータ・サンプルの各サイクルについて:サイクルのデータ・サンプルを圧縮辞書に渡すこと;データ・サンプルの各々に対するタグを、圧縮辞書から識別することであって、圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及びタグを圧縮されたデータとして保存することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することであって、第1タグ又は第2タグで識別されるデータ・サンプルの値が圧縮されたサイクル・データから除外されるのと同時に、第1タグで識別されるデータ・サンプルは第1タグを使用して圧縮され、且つ第2タグで識別されるデータ・サンプルは第2タグを使用して圧縮される、圧縮することを行う圧縮エンジンを含むことが可能である。
【0131】
実施例22では、実施例12のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:圧縮辞書はルック・アップ・テーブル又はハッシュ・テーブルを含む。
実施例23では、実施例21-22のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:タグは、少なくとも、圧縮辞書中に一致が無いことを示す第3タグと、圧縮辞書中の少なくとも1つの値に対するデータ・サンプルの部分的な一致を示す複数の追加タグとを更に含む。
【0132】
実施例24では、実施例21-23のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:圧縮エンジンがデータ・サンプルを圧縮することは、更に:圧縮されたサイクル・データのタグに続いて、複数の追加タグのうちの何れかで識別されるデータ・サンプルの部分的な値を保存することであって、部分的な値は、複数の追加タグのうちの何れかを有するデータ・サンプルの符号と指数の値を含む、保存すること;及び部分的な値を保存することに続いて、第3タグで識別されるデータ・サンプルの全ての部分を保存することを含む。
【0133】
実施例25では、実施例21-24のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・パケットの各サイクルの圧縮されたサイクル・データは、圧縮されたデータ・パケットにおいて連結されており、最後の圧縮されたサイクル・データに続く圧縮されたデータ・パケットの残りは、ゼロ・パディングされる。
実施例26では、実施例21-25のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・サンプルを圧縮することは、サイズ・バイトを圧縮されたサイクル・データに追加することを更に含み、サイズ・バイトは圧縮されたサイクル・データのサイズを示す。
実施例27では、実施例21-26のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:サイズ・バイトは、圧縮されたサイクル・データにおいて、タグの後であって部分的な値の前に保存されている。
【0134】
実施例28では、実施例21-27のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:複数の追加タグは、データ・パケットの先行する圧縮されたサイクルからのデータ・サンプルのデータ値を使用して、データ・パケットの各サイクルを圧縮した後に更新される。
実施例29では、実施例21-28のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:データ・サンプルの各サイクルについて:データ・サンプルを上半データ・サンプルと下半データ・サンプルに分割すること;上半データ・サンプルを圧縮辞書の第1サブ辞書に渡し、下半データ・サンプルを圧縮辞書の第2サブ辞書に渡すことであって、第1サブ辞書と第2サブ辞書は同じエントリを含む、渡すこと;第1サブ辞書を使用して、上半データ・サンプルの各々に対するタグを識別すること;第2サブ辞書を使用して、下半データ・サンプルの各々に対するタグを識別すること;を行い、上半データ・サンプルの各々と下半データ・サンプルの各々に対するタグを識別することは並列的に実行される。
【0135】
実施例30では、実施例21-29のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:タグが3ビット値を含み、圧縮辞書が16個のエントリを記憶し、第1サブ辞書が圧縮辞書の8個のエントリを含み、第2サブ辞書が圧縮辞書の8個のエントリを含む。
実施例31では、実施例21-30のうちの任意の1つの対象事項はオプションとして以下の事項を含むことが可能である:圧縮エンジンは、機械学習ワークロード又は深層学習ワークロードのウェイト値又は活性化関数の少なくとも1つの出力に適用される。
【0136】
実施例32は、本開示の実装によるディープ・ラーニングの数値データとスパース行列の圧縮を促す装置である。実施例32の装置は、複数のサイクルのデータ・サンプルを含むデータ・パケットを受信する手段;及びデータ・サンプルの各サイクルについて:サイクルのデータ・サンプルを圧縮辞書に渡すこと;データ・サンプルの各々に対するタグを、圧縮辞書から識別することであって、圧縮辞書は0の値を有するデータに対する第1タグと1の値を有するデータに対する第2タグとを少なくとも含む、識別すること;及びタグを圧縮されたデータとして保存することによって、データ・サンプルを圧縮されたサイクル・データに圧縮することであって、第1タグ又は第2タグで識別されるデータ・サンプルの値が圧縮されたサイクル・データから除外されるのと同時に、第1タグで識別されるデータ・サンプルは第1タグを使用して圧縮され、且つ第2タグで識別されるデータ・サンプルは第2タグを使用して圧縮される、圧縮することを行う手段を含む。
【0137】
実施例33では、実施例32の対象事項はオプションとして以下の事項を含むことが可能である:装置は実施例18-20のうちの何れか1項に記載の方法を実行するように更に構成される。
【0138】
実施例34は、複数の命令を含む少なくとも1つのマシン読み取り可能な媒体であり、命令は、コンピューティング・デバイスで実行されることに応答して、コンピューティング・デバイスに、実施例17-20のうちの何れか1つによる方法を実行させる。
実施例35は、ディープ・ラーニングの数値データとスパース行列の圧縮を促す装置であって、実施例17~20のうちの何れか1つによる方法を実行するように構成されている。
実施例36は、ディープ・ラーニングの数値データとスパース行列の圧縮を促す装置であって、実施例17~20のうちの何れか1つによる方法を実行する手段を含む。
実施例における特定事項は1つ以上の実施形態の何れにおいて使用されてもよい。
【0139】
前述の説明及び図面は、限定的な意味ではなく例示的に解釈されるべきである。当業者は、添付のクレームに記載された特徴の広範な精神及び範囲から逸脱することなく、本件で説明される実施形態に対して種々の修正及び変更を行ってもよいことを理解するであろう。
【外国語明細書】