(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-14
(54)【発明の名称】二重指数バウンディングボックス浮動小数点プロセッサ
(51)【国際特許分類】
G06F 17/16 20060101AFI20240806BHJP
G06N 3/063 20230101ALI20240806BHJP
【FI】
G06F17/16 F
G06N3/063
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023579686
(86)(22)【出願日】2022-06-02
(85)【翻訳文提出日】2023-12-26
(86)【国際出願番号】 US2022031863
(87)【国際公開番号】W WO2023003639
(87)【国際公開日】2023-01-26
(32)【優先日】2021-07-20
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ナラヤン,シャンカール エス.
(72)【発明者】
【氏名】グラディング,デレク イー.
(72)【発明者】
【氏名】カーン,ターシン
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA05
5B056CC01
(57)【要約】
ニューラルネットワークおよび他の機械学習アクセラレータおよびアプリケーションに適した演算を含む行列演算を、二重指数フォーマットを使用して実行するための装置および方法が開示される。開示された行列フォーマットは、単一指数バウンディングボックス浮動小数点(SE-BBFP)フォーマットおよび二重指数バウンディングボックス浮動小数点(DE-BBFP)フォーマットを含む。各要素についての共有される指数は、その要素が、たとえばドット積演算のために、行列タイルの行として使用されるか、行列ファイルの列として使用されるかに基づいて、各要素について決定される。そのようなニューラルネットワークを使用するのに適したコンピューティングシステムは、汎用プロセッサ、ニューラルネットワーク・アクセラレータを有するコンピュータを含み、またはフィールドプログラマブルゲートアレイ(FPGA)などの論理デバイスを再構成する。本明細書で開示されるある種の技法は、使用されるメモリおよびネットワーク帯域幅を低減しつつ、改善されたシステムパフォーマンスを提供することができる。
【特許請求の範囲】
【請求項1】
二重指数フォーマットで記憶されるべき入力行列の要素のバウンディングボックスについての共通の指数を選択する段階であって、前記共通の指数は、要素の前記バウンディングボックスの行または列のいずれかについての小さいほうの指数に基づいて選択される、段階と;
二重指数フォーマット行列の要素の前記バウンディングボックスについての仮数を決定する段階であって、決定された仮数のそれぞれは、それぞれの要素の指数を前記共通の指数と比較することによって選択される、段階と;
決定された仮数および前記共通の指数を二重指数フォーマット行列としてコンピュータ可読記憶媒体に記憶する段階とを
プロセッサを用いて実行することを含む、コンピュータ実装される方法。
【請求項2】
前記共通の指数を選択することは、要素の前記バウンディングボックスの行または列のいずれかについての小さいほうの指数から左シフト数を引いたものを計算して、要素の前記バウンディングボックスのそれぞれの行または列についての正規化された仮数を計算することを含む、請求項1に記載の方法。
【請求項3】
前記仮数を決定することは、前記入力行列内の仮数を、前記共通の指数と前記仮数の入力行列指数との間の差だけ左シフトすることを含む、請求項1または請求項2に記載の方法。
【請求項4】
最上位「1」のビットの最上位ビット位置からのシフト数を示す、仮数の左シフト値を決定する段階と;
前記左シフト値が前記共通の指数よりも大きいとき、前記左シフト値と前記共通の指数との間の差だけ前記仮数を右シフトすることによって、通常の仮数を決定する段階とをさらに含む、
請求項1または2に記載の方法。
【請求項5】
行列演算において、前記二重指数フォーマット行列が左側行列として使用されるか、または右側行列として使用されるかを決定する段階と;
前記決定に基づいて、前記二重指数フォーマット行列が左側行列として使用される場合には、要素の前記バウンディングボックスの行についての最大の指数に基づいて前記共通の指数を選択することによって、または前記二重指数フォーマット行列が右側行列として使用される場合には、要素の前記バウンディングボックスの列についての最大の指数に基づいて前記共通の指数を選択することによって、前記二重指数フォーマット行列を単一指数フォーマット行列に変換する段階とをさらに含む、
請求項1または2に記載の方法。
【請求項6】
前記共通の指数は、要素の前記バウンディングボックスの行についての最大の指数に基づいて選択された共通の行指数であり、当該方法は:
二重指数フォーマットで記憶されるべき入力行列の要素のバウンディングボックスについての共通の列指数を選択する段階であって、前記共通の指数は、要素の前記バウンディングボックスの列についての最大の指数に基づいて選択される、段階と;
前記共通の列指数を前記コンピュータ可読記憶媒体に記憶する段階とをさらに含み、
前記決定された仮数のそれぞれは、前記それぞれの要素の指数を前記共通の行指数または前記共通の列指数のうちの大きいほうと比較することによって選択される、段階とをさらに含む、
請求項1または2に記載の方法。
【請求項7】
前記二重指数フォーマット行列を用いて行列演算を実行して、二重指数フォーマットの結果行列を生成する段階と;
二重指数フォーマットの前記結果行列を通常の浮動小数点フォーマットの結果行列に変換して、通常の浮動小数点フォーマットの前記結果行列をコンピュータ可読記憶媒体に記憶する段階とをさらに含む、
請求項1ないし6のうちいずれか一項に記載の方法。
【請求項8】
要素の前記バウンディングボックスは、16×16要素バウンディングボックスであり、前記入力行列は、複数の16×16要素バウンディングボックスを含み、前記複数の16×16要素バウンディングボックスのそれぞれは、それぞれの共通の指数を含む、請求項1ないし7のうちいずれか一項に記載の方法。
【請求項9】
ニューラルネットワークをトレーニングする方法であって:
請求項1ないし8のうちいずれか一項に記載の方法によって生成された前記決定された仮数および前記共通の指数含む前記二重指数フォーマット行列を用いて、前記ニューラルネットワークの少なくとも1つの層のためのトレーニング動作を実行する段階と;
前記トレーニング動作を実行することによって生成されたノード重み、エッジ重み、バイアス値、または活性化関数のうちの少なくとも1つをコンピュータ可読記憶媒体に記憶する段階とを含む、
方法。
【請求項10】
メモリと、共通指数レジスタと、プロセッサとを有する装置であって、
前記プロセッサは:
前記メモリに記憶された入力行列の要素のバウンディングボックスのための共通の指数を選択する段階であって、前記共通の指数が、要素の前記バウンディングボックスの行または列のいずれかについての最大の指数に基づいて選択される、段階と;
二重指数フォーマット行列の要素の前記バウンディングボックスのための仮数を決定する段階であって、決定される仮数のそれぞれは、それぞれの要素の指数を前記共通の指数と比較することによって選択される、段階と;
前記共通の指数を前記共通指数レジスタに記憶する段階とを実行するものである、
装置。
【請求項11】
構成要素から形成されたニューラルネットワーク・アクセラレータをさらに有しており、前記構成要素は、前記メモリと、前記共通指数レジスタと、前記プロセッサとを含み、
当該装置が、前記二重指数フォーマット行列を使用して少なくとも1つのトレーニング、推論、または分類動作を実行することによってニューラルネットワーク・モデルを評価するように構成されている、
請求項10に記載の装置。
【請求項12】
前記ニューラルネットワーク・モデルのための通常の浮動小数点値を受領し、前記二重指数フォーマット行列を生成するための浮動小数点から二重指数バウンディングボックス・ベースの浮動小数点(DE-BBFP)への変換器と;
生成された二重指数フォーマット行列を用いて少なくとも1つの行列演算を実行することによって生成された結果二重指数フォーマット行列から通常の浮動小数点値を生成するためのDE-BBFPから浮動小数点への変換器とをさらに有する、
請求項10または11に記載の装置。
【請求項13】
二重指数フォーマット行列を用いて行列演算を実行することによって生成される結果行列を記憶しているコンピュータ可読記憶媒体であって、
前記結果行列は、前記結果行列における要素のバウンディングボックスの各行または列について共通の指数を含む二重指数フォーマット行列を含み、前記結果行列は、前記二重指数フォーマット行列および別の二重フォーマット行列を用いて前記行列演算を実行することによって生成される、
コンピュータ可読記憶媒体。
【請求項14】
前記結果行列は、前記行列演算の結果を二重指数フォーマット行列から変換することによって生成される通常の浮動小数点数の配列である、請求項13に記載のコンピュータ可読記憶媒体。
【請求項15】
前記二重指数フォーマット行列のバウンディングボックス内の各要素は、仮数、行共通指数、および列フォーマット指数を有し、前記行共通指数は、前記バウンディングボックスの行内の前記要素のそれぞれによって共有され、前記列共通指数は、前記バウンディングボックスの列内の前記要素のそれぞれによって共有され、
前記結果行列は:
前記二重指数フォーマット行列の前記バウンディングボックス内の各要素について:
前記要素のそれぞれの行共通指数および列共通指数の最小指数を選択し;
最上位ビットが1になるまで、前記要素の仮数をあるシフト数だけ左にシフトすることによって正規化された仮数を計算し;
前記最小指数から前記シフト数を減算することによって正規化された指数を計算し;
前記正規化された仮数および前記正規化された指数を前記コンピュータ可読記憶媒体における前記結果行列に格納することによって生成される、
請求項13または14に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
機械学習(ML)および人口知能(AI)技術は、画像および発話を認識すること、情報を分析および分類すること、およびさまざまな分類のタスクを実行することなどの、多数の複雑な計算上の問題を解決するために有用でありうる。機械学習は、統計的技法を使用して、コンピュータシステムに、トレーニング・データのセットからより高いレベルの特徴を抽出する能力を与えるコンピュータ・サイエンスの分野である。具体的には、特徴は、人工ニューラルネットワーク(NN)または深層ニューラルネットワーク(DNN)などのモデルをトレーニングすることによって抽出されうる。モデルがトレーニングされた後、新しいデータがモデルに適用されることができ、トレーニングされたモデルを使用して新しいデータが分類されうる(たとえば、より高レベルの特徴が抽出されうる)。機械学習モデルは、典型的には、汎用プロセッサ(中央処理装置(CPU)とも呼ばれる)上で実行される。しかしながら、モデルをトレーニングすること、および/またはモデルを使用することは、計算的に高価であることがあり、よって、汎用プロセッサを使用してリアルタイムで特徴抽出を実行することは可能でないことがある。
【発明の概要】
【発明が解決しようとする課題】
【0002】
よって、ニューラルネットワークを実現するためにコンピュータハードウェアおよびソフトウェアを改良する機会が十分にある。
【課題を解決するための手段】
【0003】
ニューラルネットワークおよび他の機械学習アクセラレータおよびアプリケーションに適した演算を含む行列演算を、二重指数フォーマットを使用して実行するための装置および方法が開示される。開示された行列フォーマットは、単一指数バウンディングボックス浮動小数点(single exponent bounding box floating-point、SE-BBFP)フォーマットおよび二重指数バウンディングボックス浮動小数点(dual exponent bounding box floating-point、DE-BBFP)フォーマットを含む。各要素についての共有される指数は、その要素が、たとえばドット積演算のために、行列タイルの行として使用されるか、行列ファイルの列として使用されるかに基づいて、各要素について決定される。そのようなニューラルネットワークを使用するのに適したコンピューティングシステムは、汎用プロセッサ、ニューラルネットワーク・アクセラレータを有するコンピュータを含むか、またはフィールドプログラマブルゲートアレイ(FPGA)などの両方の論理デバイスを再構成する。本明細書で開示されるある種の技法は、使用されるメモリおよびネットワーク帯域幅を低減しながら、改善されたシステムパフォーマンスを提供することができる。
【0004】
開示される技術のいくつかの例では、コンピュータシステムは、汎用および/または専用ニューラルネットワーク・プロセッサと、メモリとを含む。ニューラルネットワークのトレーニング中に順方向伝搬が発生すると、活性化値が第1の共有される指数フォーマット、SE-BBFPまたはDE-BBFPで生成される。圧縮された活性化値は、逆方向伝搬中に使用するためにバルク・メモリに記憶される。行列値がDE-BBFPフォーマットで記憶されるとき、行列は、仮数の単一のセットを使用する行列演算のための左オペランドまたは右オペランドとして使用されうる。
【0005】
開示される技術のいくつかの例では、コンピュータ実装される方法が、プロセッサを使用して、二重指数フォーマットで記憶される入力行列の要素のバウンディングボックスのための共通指数を選択する段階であって、共通指数は、要素のバウンディングボックスの行または列のいずれかについての、小さいほうの指数に基づいて選択される、段階と、二重指数フォーマット行列の要素のバウンディングボックスについて仮数を決定する段階であって、決定された仮数のそれぞれは、それぞれの要素の指数を前記共通指数と比較することによって選択される、段階と、決定された仮数および共通指数を二重指数フォーマット行列としてコンピュータ可読記憶媒体に記憶する段階とを含む。
【0006】
この概要は、以下の詳細な説明においてさらに説明される概念のセレクションを簡略化された形で紹介するために提供される。この概要は、特許請求される主題の重要な特徴または本質的な特徴を特定することを意図しておらず、特許請求される主題の範囲を限定するために使用されることも意図していない。
【0007】
本発明の前述のおよび他の目的、特徴、および利点は、添付の図面を参照して進められる以下の詳細な説明からより明らかになるであろう。
【図面の簡単な説明】
【0008】
【
図1】開示される技術のある種の例において実装されうるような、DE-BBFPフォーマット値を使用してトレーニングおよび推論を実行するための二重指数対応システムのバウンディングボックス図である。
【
図2】本明細書で開示されるある種の例示的な方法および装置を使用してモデル化されうるような、深層ニューラルネットワークの一例を示す図である。
【
図3】開示される技術のある種の例において実行されうるような、通常の浮動小数点フォーマットをDE-BBFPフォーマットに変換するときに行指数を決定することのある種の側面を示す図である。
【
図4】開示される技術のある種の例において実行されうるような、通常の浮動小数点フォーマットをDE-BBFPフォーマットに変換するときに列指数を決定することのある種の側面を示す図である。
【
図5】開示される技術のある種の例において使用されうるような、行列要素のバウンディングボックスのための二重指数および関連する仮数の例を示す。
【
図6】開示される技術のある種の例において使用されうるような、行列要素のバウンディングボックスのための二重指数および関連する仮数の例を示す。
【
図7】開示される技術のある種の例において実装されうるような、DE-BBFPフォーマットを使用して行列演算を実行することの図である。
【
図8】DE-BBFPフォーマットにされたデータを使用してテンソルおよび行列演算を実行するための高レベルのアーキテクチャーを概説する図である。
【
図9】開示される技術のある種の例において実装されうるような、DE-BBFP行列を使用してニューラルネットワーク・トレーニングを実行する例を概説するフローチャートである。
【
図10】開示される技術のある種の例において実装されうるような、行列演算を実行するためにDE-BBFPフォーマット行列を使用する例を例示するフローチャートである。
【
図11】開示される技術のある種の例において実装されうるような、通常の浮動小数点をDE-BBFP浮動小数点フォーマットに変換する例示的な方法を示すフローチャートである。
【
図12】開示される技術のある種の例において実装されうるような、DE-BBFP浮動小数点フォーマット行列を通常の浮動小数点行列に変換する例示的な方法を示すフローチャートである。
【
図13】開示された技術のいくつかの実施形態を実装するための適切なコンピューティング環境を示す図である。
【発明を実施するための形態】
【0009】
I. 一般的考察
本開示は、いかなる形でも限定することを意図しない代表的な実施形態の文脈で記載される。
本出願で使用されるところでは、単数形「a」、「an」、および「the」は、文脈が明らかにそうでないことを示すのでない限り、複数形を含む。さらに、「include」という用語は、「comprise」を意味する。さらに、「結合された」という用語は、機械的、電気的、磁気的、光学的、ならびに品目を互いに結合またはリンクする他の実際的な仕方を包含し、結合された品目間の中間要素の存在を排除しない。さらに、本明細書で使用されるところでは、用語「および/または」は、その句の中の任意の1つの項目または項目の組み合わせを意味する。
【0010】
本明細書に記載されるシステム、方法、および装置は、決して限定するものとして解釈されるべきではない。むしろ、本開示は、単独で、ならびに互いとのさまざまな組み合わせおよびサブコンビネーションにおいて、さまざまな開示された実施形態のすべての新規で非自明な特徴および側面に向けられる。開示されたシステム、方法、および装置は、いかなる特定の側面または特徴またはそれらの組み合わせにも限定されず、開示されたものおよび方法は、どの一つまたは複数の特定の利点が存在することも、または問題が解決されることも必要としない。さらに、開示された実施形態の任意の特徴または側面は、互いにさまざまな組み合わせおよびサブコンビネーションで使用されうる。
【0011】
開示された方法のうちいくつかの方法の動作は、提示の便宜上、特定の逐次順で説明されるが、この説明の様式は、以下に記載される特定の言辞によって特定の順序付けが要求されるのでない限り、再配列を包含することを理解されたい。たとえば、逐次的に説明された動作は、場合によっては、再配列されてもよく、または同時並行して実行されてもよい。さらに、簡単のために、添付の図面は、開示されたものおよび方法が他のものおよび方法とともに使用されうるさまざまな仕方を示さないことがある。さらに、説明は、開示される方法を説明するために、「生成する」、「生じる」、「表示する」、「受領する」、「検証する」、「実行する」、「行う」、「変換する」、および「開始する」などの用語を使用することがある。これらの用語は、実行される実際の動作の高レベルの記述である。これらの用語に対応する実際の動作は、特定の実装に依存して変化し、当業者によって容易に認識可能である。
【0012】
本開示の装置または方法に関して本明細書に提示される動作理論、科学的原理、または他の理論的説明は、よりよい理解の目的で提供されており、範囲を限定することを意図していない。添付の特許請求の範囲における装置および方法は、そのような動作理論によって説明されるように機能する装置および方法に限定されない。
【0013】
開示された方法のいずれも、一つまたは複数のコンピュータ可読媒体(たとえば、一つまたは複数の光媒体ディスク、揮発性メモリコンポーネント(DRAMまたはSRAMなど)、または不揮発性メモリコンポーネント(ハードドライブなど)などのコンピュータ可読媒体)に記憶され、コンピュータ(たとえば、コンピューティングハードウェアを含むスマートフォンまたは他のモバイルデバイスを含む、任意の市販のコンピュータ)上で実行されるコンピュータ実行可能命令として実装されうる。開示された技法を実装するためのコンピュータ実行可能命令のいずれか、ならびに開示された実施形態の実装中に作成および使用される任意のデータは、一つまたは複数のコンピュータ可読媒体(たとえば、コンピュータ可読記憶媒体)に記憶されうる。コンピュータ実行可能命令は、たとえば、専用ソフトウェアアプリケーション、またはウェブブラウザもしくは他のソフトウェアアプリケーション(リモートコンピューティングアプリケーションなど)を介してアクセスもしくはダウンロードされるソフトウェアアプリケーションの一部でありうる。そのようなソフトウェアは、たとえば、単一のローカルコンピュータ上で、または一つまたは複数のネットワークコンピュータを使用してネットワーク環境内で(たとえば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバーネットワーク(クラウドコンピューティングネットワーク等)、または他のそのようなネットワークを介して)実行されることができる。
【0014】
明確のため、ソフトウェア・ベースの実装のある種の選択された側面のみが説明される。当技術分野で周知の他の詳細は省略する。たとえば、開示された技術は、いかなる特定のコンピュータ言語またはプログラムにも限定されないことを理解されたい。たとえば、開示された技術は、C、C++、Java(登録商標)、または任意の他の適切なプログラミング言語で書かれたソフトウェアによって実装されうる。適切なコンピュータおよびハードウェアのある種の詳細は周知であり、本開示において詳細に記載される必要はない。
【0015】
さらに、ソフトウェア・ベースの実施形態(たとえば、開示される方法のいずれかをコンピュータに実行させるためのコンピュータ実行可能命令を含む)のいずれも、適切な通信手段を介してアップロード、ダウンロード、またはリモートアクセスされることができる。そのような適切な通信手段は、たとえば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル(光ファイバーケーブルを含む)、磁気通信、電磁通信(RF、マイクロ波、および赤外線通信を含む)、電子通信、または他のそのような通信手段を含む。
【0016】
II. 二重指数フォーマットを使用する人工ニューラルネットワークの概観
人工ニューラルネットワーク(ANN、または本明細書を通して使用されるように、「NN」)は、画像認識、発話認識、検索エンジン、および他の好適な用途を含む、人工知能および機械学習における多数の用途に適用される。これらの用途のための処理は、パーソナルコンピュータまたは携帯電話などの個々のデバイス上で行われてもよいが、大規模なデータセンターで実行されてもよい。同時に、NNとともに使用されうるハードウェア・アクセラレータは、ニューラルネットワーク処理を加速するようにプログラムされたテンソル処理ユニット(TPU)およびフィールドプログラマブルゲートアレイ(FPGA)などの特化したNN処理ユニットを含む。そのようなハードウェアデバイスは、それらの柔軟な性質および単位計算当たりの低電力消費のために、消費者デバイスならびにデータセンターに展開されている。
【0017】
従来、NNは、単精度浮動小数点(32ビット浮動小数点またはfloat32フォーマット)を使用してトレーニングされ、展開されてきた。しかしながら、16ビット浮動小数点(float16)または固定小数点フォーマットなどのより低い精度の浮動小数点フォーマットを使用して、正確さの損失を最小限に抑えて推論演算を実行できることが示されている。FPGAなどの特化したハードウェア上では、精度を下げたフォーマットは、DNN処理のレイテンシーおよびスループットを大幅に改善することができる。
【0018】
通常精度の浮動小数点フォーマットで表される数(たとえば、浮動小数点数は、16ビット浮動小数点フォーマット、32ビット浮動小数点フォーマット、64ビット浮動小数点フォーマット、または80ビット浮動小数点フォーマットで表される)は、DE-BBFPフォーマットの数に変換されることができ、演算を実行する際のパフォーマンス利益を許容しうる。特に、NN重みおよび活性化値は、受け入れ可能なレベルの誤差が導入された低精度のDE-BBFPフォーマットで表すことができる。
【0019】
FPGAデバイス上の計算の特徴の1つは、それが典型的にはハードウェア浮動小数点サポートを欠くことである。浮動小数点演算は、柔軟なロジックを使用して、ペナルティを課して実行されうるが、しばしば、浮動小数点をサポートするために必要とされるロジックの量は、FPGA実装において禁止的になる。浮動小数点計算をサポートするいくつかのより新しいFPGAが開発されているが、これらの上でさえ、同じデバイスが、整数モードで使用されるときの2倍の単位時間当たりの計算出力を生成することができる。典型的には、NNは浮動小数点計算を念頭に置いて作成されるが、NN処理のためにFPGAが対象とされるとき、ニューラルネットワークが整数演算を使用して表現できれば有益であろう。開示される技術の例は、NN、FPGA、および他のハードウェア環境におけるDE-BBFPの使用を含む、二重指数バウンディングボックス浮動小数点(DE-BBFP)のハードウェア実装を含む。本明細書で使用されるところでは、二重指数バウンディングボックス浮動小数点は、要素が行列演算において要素の行として使用されているか列として使用されているかに依存して、配列要素が2つの異なる指数を有することができる行列表現を指す。言い換えれば、各要素は、要素が行列演算の左側で使用されるときに行指数を使用し、要素が行列演算の右側で使用されるときに行指数とは異なりうる列指数を使用する。「バウンディングボックス」または「バウンディングボックス」浮動小数点は、行列内の要素のあるグループ(必ずしも全部ではない)が、共通の行または列指数を共有する場合を指す。たとえば、1024×1024要素の行列は、64×64のタイルから構成されることができ、各タイルは16×16の要素を有する。各タイルにおける行および列は、共通の指数を共有する。
【0020】
コンピュータシステムにおける典型的な浮動小数点表現は、符号(s)、指数(e)、およびシグニフィカンドまたは仮数(m)の3つの部分からなる。符号は、数が正であるか負であるかを示す。指数(exponent)および仮数(significand)は、科学的表記法と同様に使用される:
値=s×m×2e (式1)
【0021】
本明細書で使用されるところでは、「仮数」は、浮動小数点およびバウンディングボックス浮動ボックスフォーマットを含む科学的表記フォーマットで表されるような数の有効数字を指す。仮数は、しばしば、シグニフィカンドまたは係数と呼ばれることがある。仮数の精度限界内で、任意の数を表すことができる。指数は、科学的表記において指数が10の累乗によって行うのと全く同様に、2の累乗によって仮数をスケーリングするので、非常に大きな数の大きさを表すことができる。表現の精度は、仮数の精度によって決定される。典型的な浮動小数点表現は、幅が10(float16)、24(float32)、または53(float64)ビットの仮数を使用する。2
53より大きい大きさを有する整数は、float64浮動小数点フォーマットで近似されうるが、仮数に十分なビットがないため、正確には表されない。同様の効果は、任意の端数〔フラクション〕についても、端数が、2の負の累乗の値をとる仮数のビットによって表される場合に生じることがある。二進数システムでは無理数であるため正確に表すことができない多くの分数がある。両方の状況において、より正確な表現が可能であるが、それらは、仮数がより多くのビットを含むことを必要とすることがある。最終的には、いくつかの数を正確に表すためには、無限の数の仮数ビットが必要とされる。
【数1】
10ビット(半精度浮動小数点)、24ビット(単精度浮動小数点)、および53ビット(倍精度浮動小数点)の仮数制限は、汎用コンピュータにおける仮数記憶要件と表現精度の一般的な妥協点である。
【0022】
バウンディングボックス浮動小数点フォーマットでは、2つ以上の数のグループが、単一の共有された指数を使用し、各数は、依然として自分自身の符号および仮数を有する。いくつかの例では、共有される指数は、もとの浮動小数点値の最大指数であるように選択される。本開示の目的のためには、バウンディングボックス浮動小数点(DE-BBFP)という用語は、単一の指数が2つ以上の値にわたって共有され、該2つ以上の値のそれぞれが符号および仮数のペアによって表される(明示的な符号ビットがあっても、または仮数自体が符号付きであってもよい)数体系を意味する。いくつかの例では、行列もしくはベクトルの一つもしくは複数の行もしくは列のすべての値、または行列もしくはベクトルのすべての値は、共通の指数を共有することができる。他の例では、DE-BBFP表現は符号なしであってもよい。いくつかの例では、行列またはベクトルDE-BBFP表現における要素のすべてではないがいくつかは、整数、浮動小数点数、固定小数点数、シンボル、または符号、仮数、および指数で表される数と混合された他のデータ・フォーマットとして表される数を含みうる。いくつかの例では、行列またはベクトルDE-BBFP表現における要素の一部または全部は、2つ以上の部分を有する複合要素を含むことができる。たとえば、虚部をもつ複素数(a+bi、ただし、i=√(-1));分子および分母を含む分数、極座標(r,θ)内または他の多成分要素を含む。
【0023】
特定のDE-BBFPフォーマットのパラメータは、特定の実装のために、精度と記憶要件とをトレードオフよう選択されうる。たとえば、指数をすべての浮動小数点数とともに格納するのではなく、数のグループが同じ指数を共有することができる。高いレベルの正確さを維持しながら指数を共有するためには、絶対値の差が仮数で表されるので、それらの数はほぼ同じ絶対値をもつべきである。絶対値の差が大きすぎる場合、仮数は、大きい値についてオーバーフローするか、またはより小さい値についてゼロになってしまうことがある(「アンダーフロー」)。特定の用途に依存して、ある量のオーバーフローおよび/またはアンダーフローが受け入れ可能でありうる。
【0024】
仮数のサイズは、特定の用途に適合するように調整できる。これは、表現される数の精度に影響を及ぼす可能性があるが、縮小された表現サイズから潜在的な利得が実現される。たとえば、通常の単精度浮動小数点は、4バイトのサイズを有するが、開示される技術のある種の実装については、各値の符号および仮数を表すために2バイトのみが使用される。いくつかの実装では、各値の符号および仮数は、1バイト以下で表現できる。
【0025】
開示される技術のある種の例においては、上記で表された表現は、該表現からもとの数を導出するために使用されるが、数のグループについて単一の指数のみが記憶され、それぞれの数は、符号付き仮数によって表される。各符号付き仮数は、2バイト以下で表すことができ、よって、4バイト浮動小数点と比較して、メモリ記憶の節約は約2倍である。さらに、これらの値をロードし、記憶するメモリ帯域幅要件も、通常の浮動小数点の約半分である。
【0026】
ニューラルネットワーク演算は、多くの人工知能演算において使用される。しばしば、ニューラルネットワークを実装する際に実行される処理動作の大部分は、行列×行列または行列×ベクトルの乗算または畳み込み演算を実行する際のものである。そのような演算は、計算およびメモリ帯域幅集約的であり、行列のサイズは、たとえば、1000×1000の要素(たとえば、それぞれが符号、仮数、および指数を含む1000×1000個の数)またはそれ以上であることがあり、多くの行列が使用される。本明細書で説明されるように、DE-BBFP技法は、FPGA、CPU、または別のハードウェアプラットフォームのいずれであれ、所与のシステムにおける計算およびメモリ帯域幅の要求を低減するために、そのような動作に適用されることができる。本明細書で使用されるところでは、本明細書における用語「要素」の使用は、そのような行列またはベクトルのメンバーをいう。
【0027】
本明細書で使用されるところでは、「テンソル」という用語は、NNの特性を表すために使用されうる多次元配列を指し、1次元のベクトル、ならびに2次元、3次元、4次元、またはより大きい次元の行列を含む。本開示で使用されるところでは、テンソルは、特に記載されない限り、いかなる他の数学的特性も必要としない。
【0028】
本明細書で使用されるところでは、「通常精度の浮動小数点」または「通常の浮動小数点」という用語は、それぞれの数が仮数、指数、および任意的に符号を有し、ネイティブまたは仮想CPUによってネイティブにサポートされる浮動小数点数フォーマットを指す。通常精度の浮動小数点フォーマットの例は、Intel AVX、AVX2、IA32、x86_64などのプロセッサによってサポートされる16ビット、32ビット、64ビットなどのIEEE754標準フォーマット、または80ビットの浮動小数点フォーマットを含むが、これらに限定されない。
【0029】
所与の数は、異なる精度のフォーマットを使用して表すことができる。たとえば、ある数は、より高精度のフォーマット(たとえば、float32)およびより低精度のフォーマット(たとえば、float16)で表すことができる。数の精度を低下させることは、数の仮数または指数を表すために使用されるビットの数を低減することを含むことができる。さらに、数の精度を低下させることは、複数の数が共通の指数を共有するときなど、数の指数を表すために使用されうる値の範囲を低減することを含みうる。同様に、数の精度を高めることは、数の仮数または指数を表すために使用されるビットの数を増やすことを含むことができる。さらに、数の精度を高めることは、数が共通の指数を共有する数のグループから分離されるときなどに、数の指数を表すために使用されうる値の範囲を増すことを含みうる。
【0030】
「量子化された二重指数浮動小数点」または「量子化DE-BBFP」という用語は、二重指数浮動小数点数フォーマットであって、テンソルの2つ以上の値が、値が通常精度の浮動小数点で表されるときよりも低い精度を有するように修正されたものを指す。たとえば、行列値を二重指数フォーマットに変換した後、16ビットの仮数は、8、7、4、または3ビットを含む、より少ない任意の数のビットに量子化されて、記憶および処理ハードウェア要件をさらに低減することができる。二重指数8ビット仮数は、7、4、または3ビットを含む、より少ない任意の数のビットに変換されうる。量子化は、展開されたニューラルネットワークにおいて同様の結果をもたらすことができ、精度の損失が許容できる、トレーニングおよび他の動作中のある種のニューラルネットワーク処理アプリケーションにおいて特に有用である。
【0031】
開示される技術の一例では、ニューラルネットワーク・アクセラレータは、順方向伝搬および逆方向伝搬を含む、ニューラルネットワークの諸層のためのトレーニング動作を実行するように構成される。ニューラルネットワーク層のうちの一つまたは複数の層の値は、DE-BBFPまたは量子化DE-BBFP(QDE-BBFP)フォーマットで表されうる。たとえば、DE-BBFPフォーマットは、ニューラルネットワーク・アクセラレータを使用してトレーニングおよび推論動作において実行される計算を加速するために使用されうる。二重指数フォーマットの使用は、たとえば、より高速なハードウェア、メモリオーバーヘッドの低減、より単純なハードウェア設計、エネルギー使用の低減、集積回路面積の低減、コスト節約、および他の技術的改善を許容することによって、ニューラルネットワーク処理を改善することができる。行列が行列演算のための左オペランドとして使用されるか、右オペランドとして使用されるか、あるいは行列が左オペランドと右オペランドの両方として使用されるかがわからないとき、DE-BBFPフォーマットを使用することにより、行列値を、仮数の単一のセット、列指数のセット、および行指数のセットを使用して記憶することが可能になる。対照的に、行列が左オペランドとして使用されるか、右オペランドとして使用されるか、または左オペランドと右オペランドの両方として使用されるかが未知である場合のSE-BBFPフォーマット行列は、2つのセットの仮数であって、各セットがその指数に対してシフトされたものと、2つのセットの指数とが記憶されることを必要とする。よって、本明細書に記載されるような二重フォーマット行列の使用は、メモリ、計算、および相互接続資源の実質的な節約を提供する。
【0032】
より低精度のフォーマットを使用することによって導入されるノイズまたは他の不正確さを緩和するために動作が実行されることが望ましいことがよくある。さらに、活性化値の一時的な記憶などのニューラルネットワーク・トレーニングの諸部分は、これらの値の一部(たとえば、ニューラルネットワークの入力層、隠れ層、または出力層についてのもの)を、通常精度の浮動小数点またはDE-BBFPのいずれかから、より低い精度のDE-BBFPフォーマットに圧縮することによって改善できる。活性化値は、たとえばトレーニング・フェーズ中の逆伝搬中に使用するために、後で取り出すことができる。
【0033】
所与の層についての入力テンソルは、通常精度の浮動小数点フォーマットからDE-BBFP浮動小数点フォーマットに変換されうる。変換された入力テンソルを用いてテンソル演算を行うことができる。テンソル演算の結果は、DE-BBFPフォーマットから通常精度の浮動小数点フォーマットに変換されうる。テンソル演算は、ニューラルネットワークの順方向伝搬モードまたは逆方向伝搬モード中に実行されうる。たとえば、逆方向伝搬モードの間、入力テンソルは、所与の層に隣接する(たとえば、後続する)層からの出力誤差項、または所与の層の重みでありうる。別の例として、順方向伝搬モード中、入力テンソルは、所与の層に隣接する(たとえば、先行する)層からの出力項、または所与の層の重みでありうる。変換された結果は、ニューラルネットワークのその層の出力テンソルを生成するために使用されることができ、出力テンソルは、通常精度の浮動小数点フォーマットである。このようにして、ニューラルネットワーク・アクセラレータは、潜在的に、通常精度の浮動小数点フォーマットのみを使用する同等のアクセラレータよりも小さく、より効率的にされうる。より小さく、より効率的なアクセラレータは、計算性能を向上させ、および/またはエネルギー効率を向上させることができる。アクセラレータの正確さを増すことによって、トレーニングのための収束時間が短縮されることができ、ニューラルネットワークへの入力を分類するときにアクセラレータがより正確になりうる。モデルを使用することの計算の複雑さを低減することは、推論中に特徴を抽出するための時間を潜在的に低減し、トレーニング中の調整のための時間を低減し、ならびに/またはトレーニングおよび/または推論中のエネルギー消費を低減することができる。
【0034】
機械学習/深層学習(ML/DL)処理専用のある種のチップ上では、3つの高価なハードウェア構成要素は、算術処理ユニット、オンチップメモリ、および処理ユニット間で重みおよび活性化データを移動させるデータ・ファブリックである。計算の重要な部分は行列乗算である。行列乗算ユニットのハードウェアの複雑さを低減するために、DE-BBFP表現が使用されうる。典型的には、データは、何らかの浮動小数点/整数形式で格納され、次いで、計算ハードウェアを削減するために、計算時にDE-BBFPに変換される。
【0035】
データのDE-BBFP表現は、DE-BBFP算術を使用するアプリケーションにおいてデータを記憶するための効率的な仕方を提供する。DE-BBFPは、計算の前に、単一指数バウンディングボックス浮動小数点(SE-BBFP)フォーマットに(オンザフライで)変換されうる。DE-BBFPからSE-BBFPへの変換は容易であり、ほとんど損失がない。データは、浮動小数点または整数フォーマットからDE-BBFPフォーマットに変換され、直ちに格納されることができる。いくつかの例では、DE-BBFP表現は、16ビットまたは32ビットの通常の浮動小数点フォーマットでデータを記憶することと比較して、40~70%少ない記憶を必要とする。DE-BBFPフォーマットを使用するデータ記憶はまた、オンチップとオフチップの両方でデータを移動させるために必要とされるデータ・ファブリック帯域幅を同様の割合だけ低減しうる。
【0036】
実装のための例示的なアーキテクチャー
III. DE-BBFPフォーマットを用いた活性化圧縮
図1は、DE-BBFPを用いた活性化圧縮での使用を含む、開示される技術のある種の例において実装されうるような例示的な二重指数対応システム110を概説するバウンディングボックス図 100である。
図1に示されるように、二重指数対応システム110は、汎用プロセッサ120と、グラフィックス処理ユニット122およびニューラルネットワーク・アクセラレータ180などの専用プロセッサとを含む、いくつかのハードウェア資源を含むことができる。これらのプロセッサは、メモリ125およびストレージ129に結合され、これらは、揮発性または不揮発性メモリ・デバイスを含むことができる。プロセッサ120および122は、ニューラルネットワーク・モジュール130を提供するために、メモリまたはストレージに記憶された命令を実行する。ニューラルネットワーク・モジュール130は、システムがさまざまなタイプのニューラルネットワークを実装するようにプログラムされることを許容するソフトウェア・インターフェースを含む。たとえば、重み、バイアス、活性化関数、ノード値、およびニューラルネットワークの層間の相互接続を含むニューラルネットワークをアプリケーションが定義することを許容するソフトウェア機能が提供されうる。さらに、ソフトウェア機能を使用して、リカレントニューラルネットワークのための状態要素を定義することができる。ニューラルネットワーク・モジュール130は、該モジュールとともに実装されるニューラルネットワークのトレーニングおよび再トレーニングを許容するユーティリティをさらに提供することができる。ニューラルネットワーク・モジュールを表す値は、メモリまたはストレージに記憶され、プロセッサのうちの1つによって実行される命令によって操作される。メモリまたはストレージに記憶された値は、通常精度の浮動小数点、SE-BBFP、DE-BBFP、またはQDE-BBFPフォーマットの浮動小数点値を使用して表すことができる。
【0037】
いくつかの例では、独自のまたはオープンソースのライブラリまたはフレームワークが、ニューラルネットワーク作成、トレーニング、および評価を実装するためにプログラマーに提供される。そのようなライブラリの例は、TensorFlow、Microsoft Cognitive Toolkit(CNTK)、Caffe、Theano、およびKerasを含む。いくつかの例では、統合開発環境などのプログラミングツールは、プログラマーおよびユーザーがNNを定義し、コンパイルし、評価するためのサポートを提供する。
【0038】
ニューラルネットワーク・アクセラレータ180は、カスタムまたは特定用途向け集積回路(たとえば、システムオンチップ(SoC)集積回路を含む)として、フィールドプログラマブルゲートアレイ(FPGA)または他の再構成可能な論理として、あるいは物理的な汎用プロセッサによってホストされるソフトプロセッサ仮想マシンとして実装されうる。ニューラルネットワーク・アクセラレータ180は、テンソル処理ユニット182、再構成可能論理デバイス184、および/または一つもしくは複数のニューラル処理コア(DE-BBFPアクセラレータ186など)を含むことができる。DE-BBFPアクセラレータ186は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせで構成されうる。一例として、DE-BBFPアクセラレータ186は、テンソル処理ユニット182上で実行可能な命令を使用して構成および/または実行されうる。別の例として、DE-BBFPアクセラレータ186は、再構成可能な論理デバイス184をプログラミングすることによって構成されうる。別の例として、DE-BBFPアクセラレータ186は、ニューラルネットワーク・アクセラレータ180の固定配線された論理ゲートを使用して構成されうる。
【0039】
DE-BBFPアクセラレータ186は、ニューラルネットワークのサブグラフ、個々の層、または複数の層を実行するようにプログラムされうる。たとえば、DE-BBFPアクセラレータ186は、NNのある層の全部または一部について動作を実行するようにプログラムされうる。DE-BBFPアクセラレータ186は、重み、バイアス、入力値、出力値、忘却値、状態値などを記憶するために使用されるローカルメモリにアクセスすることができる。DE-BBFPアクセラレータ186は、多くの入力を有することができ、各入力は、異なる重み値によって重み付けされうる。たとえば、DE-BBFPアクセラレータ186は、入力テンソルと該DE-BBFPアクセラレータ186のためのプログラムされた入力重みとのドット積を生成することができる。いくつかの例では、ドット積は、活性化関数への入力として使用される前に、バイアス値によって調整されうる。DE-BBFPアクセラレータ186の出力は、ローカルメモリに記憶されることができ、ここで、出力値は、アクセスされ、たとえば、異なるNNプロセッサコアおよび/またはニューラルネットワーク・モジュール130もしくはメモリ125に送られうる。DE-BBFPにおける中間値は、しばしば、より小さいまたはよりローカルなメモリに記憶されうるが、一方、トレーニング・プロセスにおいて後まで必要とされないことがありうる値は、「バルク・メモリ」という、より大きい、よりローカルでないメモリ(またはSSD(ソリッドステートドライブ)もしくはハードドライブ上などの記憶デバイス)に記憶されうる。たとえば、トレーニング順方向伝搬中に、ひとたびNN中の次の層のためのアクティブ化値が計算されると、すべての層を通る伝搬が完了するまで、それらの値にアクセスすることができない。そのような活性化値は、そのようなバルク・メモリに記憶されうる。
【0040】
ニューラルネットワーク・アクセラレータ180は、相互接続(図示せず)を介して互いに接続された複数110のDE-BBFP 186を含むことができる。相互接続は、個々のDE-BBFPアクセラレータ186、メモリインターフェース(図示せず)、および入出力(I/O)インターフェース(図示せず)の間でデータおよび制御信号を搬送することができる。相互接続は、電気、光、磁気、または他の適切な通信技術を使用して信号を送信および受信することができ、具体的な所望される構成に依存して、いくつかの異なるトポロジーに従って配置された通信接続を提供することができる。たとえば、相互接続は、クロスバー、バス、ポイントツーポイントバス、または他の適切なトポロジーを有することができる。いくつかの例では、複数のDE-BBFPアクセラレータ186のうちの任意の1つは、他のコアのうちの任意のものに接続されうるが、他の例では、いくつかのコアは、他のコアのサブセットにのみ接続される。たとえば、各コアは、最も近い4、8、または10個の近傍コアにのみ接続されてもよい。相互接続は、DE-BBFPアクセラレータ186との間の入出力データの伝送およびDE-BBFPアクセラレータ186との間の制御信号および他の情報信号の伝送のために使用できる。たとえば、DE-BBFPアクセラレータ186のそれぞれは、それぞれのDE-BBFPアクセラレータ186のそれぞれによって現在実行されている動作の実行ステータスを示すセマフォを受信および送信することができる。さらに、行列およびベクトル値が、相互接続を介してDE-BBFPアクセラレータ186間で共有されうる。いくつかの例では、相互接続は、DE-BBFPアクセラレータ186とメモリシステムとを接続するワイヤとして実装され、他の例では、コア相互接続は、相互接続ワイヤ上にデータ信号を多重化するための回路、アクティブ信号ドライバおよびリピーターを含むスイッチおよび/またはルーティング・コンポーネント、あるいは他の好適な回路を含むことができる。開示される技術のいくつかの例では、ニューラルネットワーク・アクセラレータ180内で、およびニューラルネットワーク・アクセラレータ180へ/から伝送される信号は、フルスイング電気デジタル信号に限定されず、ニューラルネットワーク・アクセラレータ180は、差動信号、パルス信号、またはデータおよび制御信号を送信するための他の適切な信号を含むように構成されうる。
【0041】
いくつかの例では、DE-BBFP対応システム110は、ニューラルネットワーク・アクセラレータ180の機能をエミュレートする任意的なDEBBFPエミュレータを含むことができる。ニューラルネットワーク・アクセラレータ180は、ニューラルネットワーク・モジュール130内のフル精度の浮動小数点フォーマットで表されたデータをDE-BBFPフォーマット値に変換するために使用されうる機能を提供する。いくつかの例では、ニューラルネットワーク・アクセラレータ180は、量子化DE-BBFPフォーマット値を使用して動作を実行しうる。そのような機能は、以下でさらに詳細に説明される。
【0042】
ニューラルネットワーク・モジュール130は、ハードウェアに関知しないモデリング・フレームワーク131(ネイティブ・フレームワークまたは機械学習実行エンジンとも呼ばれる)、ニューラルネットワークコンパイラ132、およびニューラルネットワークランタイム環境133を含むツールフローを使用して、ニューラルネットワーク・モデルを指定し、トレーニングし、評価するために使用されうる。メモリは、モデリング・フレームワーク131、ニューラルネットワークコンパイラ132、およびニューラルネットワークランタイム環境133を含むツールフローのためのコンピュータ実行可能命令を含む。ツールフローは、
図2に関して以下で説明するニューラルネットワーク・モデルなどのニューラルネットワーク・モデルの全部または一部を表すニューラルネットワーク・データ200を生成するために使用されうる。ツールフローは、3つの別個のツール(131、132、および133)を有するものとして説明されているが、ツールフローは、さまざまな例において、より少ないまたはより多いツールを有することができることに留意されたい。たとえば、異なるツール(131、132、および133)の機能は、単一のモデリングおよび実行環境に組み合わせることができる。ニューラルネットワーク・アクセラレータが展開される他の例では、そのようなモデリング・フレームワークは含まれなくてもよい。
【0043】
ニューラルネットワーク・データ200は、メモリ125に記憶されることができ、該メモリは、典型的には、スタティックリードオンリメモリ(SRAM)、埋め込みダイナミックランダムアクセスメモリ(eDRAM)として、レジスタファイル内のラッチまたはフリップフロップ内に、バウンディングボックスRAM内に、または他の適切な構造として実装されるローカルメモリ126と、典型的には、ローカルメモリ126よりも大きいが、しばしばより遅いアクセスをサポートするメモリ構造内に実装されるバルク・メモリ127とを含みうる。たとえば、バルク・メモリは、オフチップDRAM、ネットワークアクセス可能RAM、SSDドライブ、ハードドライブ、またはネットワークアクセス可能ストレージであってもよい。利用可能な具体的なメモリ技術に依存して、ローカルメモリについて挙げられた前述の構造を含む他のメモリ構造が、バルク・メモリを実装するために使用されうる。ニューラルネットワーク・データ200は、一つまたは複数のフォーマットで表されうる。たとえば、所与のニューラルネットワーク・モデルに対応するニューラルネットワーク・データ200は、ツールフローの各それぞれのツールに関連付けられた異なるフォーマットを有することができる。一般に、ニューラルネットワーク・データ200は、ノード、エッジ、グルーピング、重み、バイアス、活性化関数、および/またはテンソル値の記述を含むことができる。個別的な例として、ニューラルネットワーク・データ200は、ニューラルネットワーク・モデルを表すためのソースコード、実行可能コード、メタデータ、構成データ、データ構造、および/またはファイルを含むことができる。
【0044】
モデリング・フレームワーク131は、ニューラルネットワーク・モデルを定義して使用するために使用されうる。一例として、モデリング・フレームワーク131は、ニューラルネットワーク・モデルの一つまたは複数の側面を指定するために使用されうる、あらかじめ定義されたAPIおよび/またはプログラミング・プリミティブを含みうる。あらかじめ定義されたAPIは、より低レベルのAPI(たとえば、活性化関数、コストまたはエラー関数、ノード、エッジ、およびテンソル)と、より高レベルのAPI(たとえば、層、畳み込みニューラルネットワーク、リカレントニューラルネットワーク、線形分類器など)の両方を含むことができる。「ソースコード」は、所与のニューラルネットワーク・モデルのグラフのトポロジーを定義するために、モデリング・フレームワーク131への入力として使用されうる。特に、モデリング・フレームワーク131のAPIは、複雑なニューラルネットワーク・モデルを指定するために、ソースコード内でインスタンス化され、相互接続されうる。データ科学者は、種々のAPI、種々の数のAPIを使用し、種々の仕方でそれらのAPIを相互接続することによって、種々のニューラルネットワーク・モデルを作成することができる。
【0045】
ソースコードに加えて、メモリ125は、トレーニング・データを記憶することもできる。トレーニング・データは、ニューラルネットワーク・モデル200に適用するための入力データのセットと、入力データの各それぞれのデータセットについてのニューラルネットワーク・モデルからの所望の出力とを含む。モデリング・フレームワーク131は、トレーニング・データを用いてニューラルネットワーク・モデルをトレーニングするために使用されうる。トレーニングの出力は、ニューラルネットワーク・モデルの各ノードに関連付けられた重みおよびバイアスである。ニューラルネットワーク・モデルがトレーニングされた後、モデリング・フレームワーク131を使用して、トレーニングされたニューラルネットワーク・モデルに適用される新しいデータを分類することができる。具体的には、トレーニングされたニューラルネットワーク・モデルは、トレーニングから得られた重みおよびバイアスを使用して、ニューラルネットワーク・モデルをトレーニングするために使用されていないデータに対して分類および認識タスクを実行する。モデリング・フレームワーク131は、CPU 120および専用プロセッサ(たとえば、GPU 122および/またはニューラルネットワーク・アクセラレータ180)を使用して、CPU 120のみを使用する場合と比較して向上したパフォーマンスでニューラルネットワーク・モデルを実行することができる。いくつかの例では、パフォーマンスは、いくつかの分類タスクについてのリアルタイムパフォーマンスを潜在的に達成することができる。
【0046】
コンパイラ132は、ニューラルネットワーク・モデルのために提供されるソースコードおよびデータ(たとえば、モデルをトレーニングするために使用される例)を分析し、モデルを、以下でさらに詳細に説明するニューラルネットワーク・アクセラレータ180上で加速されうるフォーマットに変換する。具体的には、コンパイラ132は、ニューラルネットワーク・モデルおよびメモリをニューラルネットワーク・データ200として表すために、ソースコードを実行可能コード、メタデータ、構成データ、および/またはデータ構造に変換する。いくつかの例では、コンパイラ132は、ニューラルネットワーク・モデルを、CPU 120および/またはGPU 122を使用する部分(たとえば、ニューラルネットワーク200)と、ニューラルネットワーク・アクセラレータ180上で実行されうる他の部分(たとえば、ニューラルネットワークのサブグラフ、個々の層、または複数の層)とに分割することができる。コンパイラ132は、CPU 120に割り当てられたNNを実行するための、およびアクセラレータ180に割り当てられたニューラルネットワークのサブグラフ、個々の層、または複数の層と通信するための実行可能コード(たとえば、ランタイム・モジュール)を生成することができる。コンパイラ132は、任意的なアクセラレータ180に割り当てられたサブグラフを評価するようアクセラレータ資源を構成するために使用される、アクセラレータ180のための構成データを生成することができる。コンパイラ132は、実行および/またはトレーニング中にニューラルネットワーク・モデルによって生成された値を記憶するための、ならびにCPU 120とアクセラレータ180との間の通信のためのデータ構造を作成することができる。コンパイラ132は、ランタイム中にニューラルネットワーク・モデルに関するサブグラフ、エッジグルーピング、トレーニング・データ、およびさまざまな他の情報を識別するために使用されうるメタデータを生成することができる。たとえば、メタデータは、ニューラルネットワーク・モデルの異なるサブグラフまたは他の部分の間をインターフェースするための情報を含むことができる。
【0047】
ランタイム環境133は、トレーニング・モード中にニューラルネットワーク・モデルをトレーニングするために使用されることができ、トレーニング、推論、または分類モードにおいてニューラルネットワーク・モデルを評価するために使用されることができる実行可能環境またはインタープリタを提供する。推論モード中、入力データをニューラルネットワーク・モデル入力に適用することができ、入力データをニューラルネットワーク・モデルのトレーニングに従って分類することができる。入力データは、アーカイブされたデータまたはリアルタイムデータでありうる。
【0048】
ランタイム環境133は、展開〔デプロイメント〕モード中に、ニューラルネットワーク・アクセラレータ180にニューラルネットワークの全部または一部を展開またはインストールするために使用されうる展開ツールを含みうる。ランタイム環境133は、異なるランタイム・モジュールの実行、およびランタイム・モジュールとニューラルネットワーク・アクセラレータ180との間の通信を管理するスケジューラをさらに含むことができる。よって、ランタイム環境133は、ニューラルネットワーク・モジュール130およびニューラルネットワーク・アクセラレータ180上でモデル化されたノード間のデータのフローを制御するために使用されうる。
【0049】
一例では、ニューラルネットワーク・アクセラレータ180は、ニューラルネットワーク・モジュール130から通常精度の値150を受け取り、返す。
図1に示されるように、DE-BBFPアクセラレータ186は、DE-BBFPフォーマット浮動小数点を使用してその演算の大部分を実行することができ、DE-BBFPアクセラレータ186とニューラルネットワーク・モジュール130との間のインターフェースは、モジュール間で情報を通信するためにフル精度の値を使用することができる。通常精度の値は、16ビット、32ビット、64ビット、または他の適切な浮動小数点フォーマットで表すことができる。たとえば、エッジ重み、活性化値、または二重指数フォーマットを使用して処理するための他の適切なパラメータを含む、ニューラルネットワークを表す値の一部が受領されうる。通常精度の値150は、通常精度の浮動小数点からDE-BBFP変換器152に供給され、該変換器152が通常精度の値を二重指数フォーマット値に変換する。次いで、変換された値に対して二重指数浮動小数点演算154を実行することができる。
DE-BBFP処理ユニット154を実装するための適切なハードウェアは、汎用プロセッサ、ニューラルネットワーク・アクセラレータを含み、またはフィールドプログラマブルゲートアレイ(FPGA)などの両方の論理デバイスを再構成する。加えて、アクセラレータ186によって生成されるSE-BBFPまたはDE-BBFP配列のために、中間値がメモリ(たとえば、メモリ135、ストレージ139、またはアクセラレータ186と通信するか、もしくはアクセラレータ210内にある他の揮発性もしくは不揮発性メモリ)に記憶されることができる。こうして、相続く行列演算が、二重指数フォーマットで実行されることができる。一つまたは複数の行列演算の後、次いで、二重指数フォーマット値は、通常精度の浮動小数点値を生成する、DE-BBFPから通常浮動小数点への変換器156を使用して、通常浮動小数点フォーマットに変換して戻されことができる。特定の例として、DE-BBFPアクセラレータ186は、ニューラルネットワークの所与の層を加速するために使用されることができ、ベクトル‐ベクトル、行列‐ベクトル、行列‐行列、および畳み込み演算は、SE-BBFPおよびDE-BBFPフォーマットの浮動小数点演算を使用して実行されることができ、(バイアス値を加算することまたは活性化関数を計算することなどの)より計算集約的でない演算が、通常の浮動小数点精度演算を使用して実行されうる。いくつかの例では、DE-BBFPフォーマットはさらに、(たとえば、値を打ち切るか丸めるかしてより少数のビットにすることによって、DE-BBFP要素の指数および/または仮数の精度を少ないビット数に低減することによって)量子化されることができる。
【0050】
変換器152および156によって実行される通常の浮動小数点とDE-BBFPとの間の変換は、典型的には、ベクトルまたは多次元行列として表される数のセットに対して実行される。いくつかの例では、特定のニューラルネットワーク実装において望ましい場合がある演算を含む追加の通常精度の演算158が、通常精度のフォーマットに基づいて実行されうる。これは、ニューラルネットワークの一つまたは複数のノードにバイアスを加えること、DE-BBFPフォーマットから変換し戻された通常精度の値に双曲線正接関数または他のそのようなシグモイド関数、または整流関数(たとえば、ReLU動演算)を適用することを含む。
【0051】
いくつかの例では、二重指数値は、ニューラルネットワーク・アクセラレータ180の論理ゲートおよび内部メモリにおいてのみ使用され、記憶され、メモリ125およびストレージ129は、通常の浮動小数点値のみを記憶する。たとえば、ニューラルネットワーク・アクセラレータ180は、ニューラルネットワーク・モデル130から受信されたニューラルネットワーク・モデルのための入力、重み、および活性化をDE-BBFPに変換することができ、ニューラルネットワーク・アクセラレータ180上で実行される演算の結果を通常の浮動小数点に変換し戻してから、値をニューラルネットワーク・モデル130に渡すことができる。値は、メモリ125、記憶装置129、または入出力インターフェース(図示せず)を使用して、ニューラルネットワーク・モデル130とニューラルネットワーク・アクセラレータ180との間で渡されうる。他の例では、エミュレータが、共有される指数の1つのコピーのみを記憶することと、縮小された仮数幅で動作することとを含む、DE-BBFPアクセラレータの完全なエミュレーションを提供する。いくつかの結果は、基礎となる演算が通常の浮動小数点で実行されるバージョンに関して異なりうる。たとえば、ある種の例は、限られた量子化されたビット幅(たとえば、3ビット幅、4ビット幅、または5ビット幅の仮数)についてアンダーフロー条件またはオーバーフロー条件について検査することができる。
【0052】
DNNの計算コストの大部分は、ベクトル‐ベクトル、行列‐ベクトル、および行列‐行列の乗算および/または畳み込みである。これらの演算は入力サイズについて二次であり、一方、バイアス加算および活性化関数などの演算は入力サイズについて線形である。よって、いくつかの例では、DE-BBFPフォーマットは、ニューラルネットワーク・アクセラレータ180上で実装される行列‐ベクトル乗算演算のためにのみ使用されるだけである。このような例では、他の全ての演算は、float16のような通常精度のフォーマットで行われる。よって、ユーザーまたはプログラマーの観点から、DE-BBFP対応システム110は、ニューラルネットワーク・モジュール130から/へ通常精度のfloat16値を受け入れ、出力し、float16フォーマット値を出力する。バウンディングボックス浮動小数点フォーマットへの、およびそこからのすべての変換は、プログラマーまたはユーザーから隠されることができる。いくつかの例では、プログラマーまたはユーザーは、DE-BBFP動作のためのある種のパラメータを指定しうる。他の例では、DE-BBFP演算は、
図3に関して以下で説明するように、計算複雑さを低減するためにバウンディングボックス浮動小数点フォーマットを利用することができる。
【0053】
ニューラルネットワーク・アクセラレータ180は、CPU 120および/またはGPU 122のみを使用してサブグラフを評価するときには実現されない、典型的には増加した速度および低減したレイテンシーで、ニューラルネットワーク・グラフまたはサブグラフの評価および/またはトレーニングを加速するために使用される。図示された例では、アクセラレータは、テンソル処理ユニット(TPU)182、再構成可能な論理デバイス184(たとえば、一つまたは複数のFPGAまたはプログラマブル回路ファブリックに含まれる)、および/またはDE-BBFPアクセラレータ186を含むが、ニューラルネットワークをモデル化する任意の適切なハードウェア・アクセラレータが使用されうる。アクセラレータ180は、ソフトCPUを提供する構成ロジックを含むことができる。ソフトCPUは、アクセラレータ180上の加速されたグラフまたはサブグラフの動作を監督し、ニューラルネットワーク・モジュール130との通信を管理することができる。ソフトCPUはまた、論理を構成し、アクセラレータ上のRAMからの、たとえば、FPGA内のバウンディングボックスRAM内のデータのロードおよび記憶を制御するために使用されることができる。
【0054】
いくつかの例では、ニューラルネットワーク・アクセラレータ180のパラメータは、プログラム可能でありうる。ニューラルネットワーク・アクセラレータ180は、ニューラルネットワーク・モデル200の全部または一部のトレーニング、推論、または分類をプロトタイプ化するために使用されうる。たとえば、DE-BBFPパラメータは、ニューラルネットワーク・アクセラレータ180内のネットワークをプロトタイプ化することによって得られる精度またはパフォーマンス結果に基づいて選択されうる。DE-BBFPパラメータの所望のセットが選択された後、さらなる動作を実行するために、モデルがアクセラレータ180中にプログラムされうる。
【0055】
コンパイラ132およびランタイム133は、ニューラルネットワーク・モジュール130とニューラルネットワーク・アクセラレータ180との間の高速インターフェースを提供する。事実上、ニューラルネットワーク・モデルのユーザーは、モデルの一部が提供されたアクセラレータ上で加速されていることに気付かない場合がある。たとえば、ノード値は、典型的には、識別子を含むデータ構造にテンソル値を書き込むことによってモデル内で伝播される。ランタイム133は、サブグラフ識別子をアクセラレータに関連付け、ランタイム133は、メッセージをアクセラレータに翻訳し、重み、バイアス、および/またはテンソルの値をニューラルネットワーク・アクセラレータ180にプログラム介入なしに透明に書き込むための論理を提供する。同様に、ニューラルネットワーク・アクセラレータ180によって出力される値は、サーバーにおける受信ノードの識別子と、全体的なニューラルネットワーク・モデルに送り返される重み、バイアス、および/またはテンソルなどの値を含むペイロードとを含むメッセージを用いて、ニューラルネットワーク・モジュール130に透明に送り返される。
【0056】
図2は、開示されるDE-BBFP実装を使用して、向上した画像処理を実行するために使用されうる深層ニューラルネットワーク(DNN)200の簡略化されたトポロジーを示す。一つまたは複数の処理層は、上述のDE-BBFP対応システム110における複数のニューラルネットワークDE-BBFP 186のうちの一つまたは複数の使用を含む、SE-BBFPおよびDE-BBFP行列/ベクトル演算のための開示される技法を使用して実装されることができる。本明細書に開示されるニューラルネットワーク実装の用途は、DNNに限定されず、他のタイプのニューラルネットワーク、たとえば長短期記憶(LSTM)もしくはゲート付きリカレントユニット(GRU)を有する実装を含む畳み込みニューラルネットワーク(CNN)、または本明細書に開示されるDE-BBFP方法および装置を使用するように適合されうる他の適切な人工ニューラルネットワークとともに使用されることもできることに留意されたい。
【0057】
DNN 200は、少なくとも2つの異なるモードで動作することができる。最初に、DNN 200は、トレーニング・モードでトレーニングされ、次いで、推論モードで分類器として使用されうる。トレーニング・モード中、トレーニング・データのセットがDNN 200の入力に適用されることができ、トレーニングの完了時にDNN 200が分類器として使用されうるように、DNN 200のさまざまなパラメータが調整されうる。トレーニングは、トレーニング入力データの順方向伝搬を実行すること、損失を計算すること(たとえば、DNNの出力とDNNの期待される出力との間の差を決定すること)、およびDNN 200のパラメータ(たとえば、重みおよびバイアス)を調整するためにDNNを通じて逆方向伝搬を実行することを含む。DNN 200のアーキテクチャーがトレーニング・データを分類するのに適切であるとき、DNN 200のパラメータは収束し、トレーニングは完了することができる。トレーニング後、DNN 200は推論モードで使用されうる。具体的には、トレーニング・データまたは非トレーニング・データがDNN 200の入力に適用され、DNN 200を通じて順方向に伝搬されることができ、それにより、入力データがDNN 200によって分類されることができる。
【0058】
図2に示されるように、ノードの第1のセット210(ノード215および216を含む)は、入力層を形成する。セット210の各ノードは、ノードの第2のセット220(ノード225および226を含む)から形成された第1の隠れ層内の各ノードに接続される。第2の隠れ層は、ノード235を含むノードの第3のセット230から形成される。出力層は、ノードの第4のセット240(ノード245を含む)から形成される。例200では、所与の層のノードは、その隣接層(単数または複数)のノードに完全に相互接続される。言い換えれば、層はノードを含むことができ、該ノードは、その層の他のノードと共通の入力を有する、および/またはその層の他のノードの共通の宛先に出力を提供する。他の例では、層はノードを含むことができ、該ノードは、その層の他のノードと共通の入力のサブセットを有するノードを含むことができ、および/またはその層の他のノードの共通の宛先のサブセットに出力を提供することができる。
【0059】
順方向伝搬中、ノードのそれぞれは、先行するノードから生成された各入力に重みを適用し、それらの重みを収集して出力値を生成することによって出力を生成する。いくつかの例では、個々のノードは、適用される活性化関数(σ)および/またはバイアス(b)を有することができる。一般に、適切にプログラムされたプロセッサまたはFPGAは、図示されたニューラルネットワーク200内のノードを実装するように構成されうる。いくつかの例示的なニューラルネットワークでは、隠れ組み合わせノードnの出力関数f(n)は、数学的に次のように表される出力を生成することができる。
【数2】
ここで、w
iは入力エッジx
iに適用(乗算)される重みであり、bはノードnについてのバイアス値であり、σはノードnの活性化関数であり、Eはノードnの入力エッジの数である。いくつかの例では、活性化関数は、0と1との間の(浮動小数点数として表される)連続値を生成する。いくつかの例では、活性化関数は、総和が閾値を上回るか下回るかに依存して、バイナリの1または0値を生成する。
【0060】
所与のニューラルネットワークは、数千の個々のノードを含むことができ、よって、通常精度の浮動小数点でノードのための計算のすべてを実行することは、計算的に高価でありうる。より計算コストの高い解決策のための実装は、より計算コストの低い解決策のための実装よりも大きく、より多くのエネルギーを消費するハードウェアを含むことができる。しかしながら、DE-BBFP浮動小数点を使用して演算を実行することは、ニューラルネットワークの計算複雑さを潜在的に低減することができる。いくつかの場合において、DE-BBFP浮動小数点のみを使用する単純な実装は、計算の複雑性を著しく低減しうるが、実装は、DE-BBFPによって導入される誤差のために、トレーニング中に収束すること、および/または入力データを正しく分類することが困難でありうる。しかしながら、本明細書に開示される二重指数浮動小数点実装は、二重指数浮動小数点フォーマットに関連する複雑さの低減という利益も提供しながら、いくつかの計算の精度を潜在的に高めることができる。
【0061】
DNN 200は、DE-BBFP浮動小数点で演算を実行するノードを含むことができる。特定の例として、隠れ組み合わせノードnの出力関数f(n)は、数学的に次のように表される出力を生成することができる。
【数3】
ここで、w
iは入力エッジx
iに適用される(乗算される)重みであり、DE(w
i)は重みのDE-BBFPフォーマット値であり、DE(x
i)は入力エッジx
iから供給される入力のDE-BBFPフォーマット値であり、bはノードnについてのバイアス値であり、σはノードnの活性化関数であり、Eはノードnの入力エッジの数である。浮動小数点値を使用してドット積を実行することによって、計算の複雑さを潜在的に低減することができ(通常精度の浮動小数点値のみを使用することと比較して)、通常精度の浮動小数点値を使用する出力関数の他の演算によって、出力関数の精度を潜在的に高めることができる。
【0062】
ニューラルネットワークは、出力関数f(n)の構成要素値を調整することによってトレーニングおよび再トレーニングされることができる。たとえば、ノードについての重みw
iまたはバイアス値bを調整することによって、ニューラルネットワークの挙動は、ネットワークの出力テンソル値における対応する変化によって調整される。たとえば、コスト関数C(w,b)は、ネットワークのための適切な重みおよびバイアスを見つけるために、逆伝搬の間に使用されることができ、ここで、コスト関数は、数学的に次のように記述されることができる。
【数4】
ここで、wおよびbは、すべての重みおよびバイアスを表し、nは、トレーニング入力の数であり、aは、トレーニング入力xの入力ベクトルについてのネットワークからの出力値のベクトルである。ネットワーク重みおよびバイアスを調整することによって、コスト関数Cは、さまざまな探索技法、たとえば、確率的勾配降下を使用して、目標値(たとえば、0)に駆動されうる。ニューラルネットワークは、コスト関数Cが目標値に駆動されるときに収束すると言われる。出力関数f(n)と同様に、コスト関数は、二重指数コンピュータ算術を使用して実装されうる。たとえば、ベクトル演算は、DE-BBFP値および演算を使用して実行されることができ、非ベクトル演算は、通常精度の浮動小数点値を使用して実行されうる。
【0063】
そのようなニューラルネットワークDE-BBFP実装のための好適な適用の例は、限定はしないが、画像認識を実行すること、発話認識を実行すること、画像を分類すること、発話をテキストおよび/または他の言語に翻訳すること、顔認識または他のバイオメトリック認識、自然言語処理、自動言語翻訳、検索エンジンにおけるクエリー処理、自動コンテンツ選択、電子メールおよび他の電子文書を分析すること、関係管理、生物医学的インフォマティクス、候補生体分子を識別すること、推薦を与えること、あるいは他の分類および人口知能タスクを含む。
【0064】
ネットワーク・アクセラレータ(
図1のネットワーク・アクセラレータ180など)を使用して、DNN 200の計算を加速することができる。一例として、DNN 200は、個別に加速されうる異なるサブグラフまたはネットワーク層に分割されうる。特定の例として、層210、220、230、および240のそれぞれは、同じアクセラレータまたは異なるアクセラレータを用いて加速されるサブグラフまたは層でありうる。層の計算上高価な計算は、DE-BBFPフォーマットを使用して実行でき、層のより安価な計算は、通常精度の浮動小数点を使用して実行できる。値は、通常精度の浮動小数点を使用して、1つの層から別の層に渡されうる。層内のすべてのノードについての計算のグループを加速することによって、計算の一部を再使用することができ、層によって実行される計算を、個々のノードを加速することと比較して低減することができる。
【0065】
いくつかの例では、各畳み込み層における並列の乗算累算(multiply-accumulate、MAC)ユニットのセットが、計算を高速化するために使用できる。また、並列の乗算器ユニットも、全結合された密行列の乗算段において使用できる。分類器の並列セットも使用できる。そのような並列化方法は、制御の複雑さが増すことを代償に、計算をさらに高速化する可能性を有する。
【0066】
本開示の恩恵を有する当業者には容易に理解されるように、ニューラルネットワーク実装の適用は、単独であるか、または互いとの組み合わせもしくはサブコンビネーションであるかにかかわらず、ニューラルネットワークを使用することの異なる側面のために使用されうる。たとえば、開示される実装は、ニューラルネットワークのための勾配降下および/または逆伝搬動作を介してニューラルネットワーク・トレーニングを実装するために使用されうる。さらに、開示される実装形態は、ニューラルネットワークの評価のためにも使用されうる。
【0067】
IV. SE-BBFPおよびDE-BBFPフォーマット行列の例示的な変換および使用
図3は、開示される技術のある種の例において実装できるような、通常の浮動小数点フォーマットをDE-BBFPフォーマットに変換するときに行指数を決定する例を示す図 300である。たとえば、通常の浮動小数点数(たとえば、32ビットまたは16ビットの浮動小数点フォーマット)として表されるニューラルネットワークのための入力テンソルは、図示されたバウンディングボックス浮動小数点フォーマットに変換されうる。
【0068】
図示されるように、通常の浮動小数点フォーマットの数310の行列は、たとえば数315または数316などのそれぞれの数が符号、指数、および仮数を含むように表される。たとえば、IEEE754半精度浮動小数点フォーマットの場合、符号は1ビットを使用して表され、指数は5ビットを使用して表され、仮数は10ビットを使用して表される。ニューラルネットワーク・モデル200内の浮動小数点フォーマットの数310がDE-BBFPフォーマットの数のセットに変換されるとき、図示された諸グループの特定の行内の数のすべてによって共有される1つの指数値が存在する。よって、図示されるように、SE-BBFP数320のセットは、各行について単一の指数値(330、331、334など)を共有し、一方、該セットのそれぞれの数は、符号および仮数を含む。しかしながら、図示された数のセットは、浮動小数点フォーマットにおいて異なる指数値を有するので、同じまたは近い数がSE-BBFPフォーマットで表されるように、各数のそれぞれの仮数がシフトされうる(たとえば、シフトされた仮数345および346)。図示された行列は、5行2列を有するが、典型的には、開示されるアプリケーションのために使用される行列は、同じ数の行および列(たとえば、8×8、16×16など)を有する。
【0069】
行列310の第1行についての共有される行指数330(HEXP1)は、第1行の指数値の最大値として計算される:HEXP1=MAX(EXP(0,0)…EXP(0,1)。行列310の第2行についての共有される行指数331(HEXP2)は、第2行の指数値の最大値として計算される:HEXP2=MAX(EXP(1,0)…EXP(1,1)。残りの3つの行指数も同様に計算される。
【0070】
いくつかの例では、共有される行指数330~334は、ニューラルネットワーク・モデル200内のもとの通常精度の数の中からの最大の指数であるように選択される。他の例では、共有される行指数は、異なる方法で選択されてもよく、たとえば、特定の行における通常の浮動小数点指数の平均または中央値である指数を選択することによって、または、数がSE-BBFP/DE-BBFP数フォーマットに変換されるときに仮数に格納される値のダイナミックレンジを最大化する指数を選択することによってであってもよい。共有される指数と値のもとの浮動小数点指数とが同じでない場合、シフトされた仮数のいくつかのビットが失われることがあることに留意されたい。これは、仮数が新しい共有される指数に対応するようにシフトされるために生じる。
【0071】
バウンディングボックス浮動小数点テンソル内のどの値がと指数を共有するかについて、いくつかの可能な選択肢がある。最も単純な選択は、行列または行列タイル(たとえば、16×16タイル)の行または列の中のすべての値が指数を共有することである。しかしながら、指数をより細かい粒度で共有することは、DE-BBFP数がもとの通常の浮動小数点フォーマットの指数により近い共有される指数を使用する可能性を高めるので、誤差を低減することができる。よって、(共有される指数に対応するように仮数をシフトするときに)仮数ビットをドロップすることによる精度の損失が低減されうる。
【0072】
いくつかの例では、行列‐ベクトル乗算の計算コストは、仮数部の幅を低減することによってさらに低減されうる。共有された共通の指数を有する値の大きな範囲は、少数のビットの仮数のみで表現されうる。たとえば、4ビットの仮数および5ビットの指数を有する表現では、値は、範囲[2-140.0012,2151.1112]、または約[2-17,216]において表現されうる。対照的に、4ビット固定小数点数は、範囲[00012、11112]、または約[20、24]内の値しか表すことができない。
【0073】
図4は、開示される技術のある種の例において実装されうるような、通常の浮動小数点フォーマットをDE-BBFPフォーマットに変換するときに列指数を決定する例を示す図 400である。たとえば、通常の浮動小数点数(たとえば、32ビットまたは16ビット浮動小数点フォーマット)として表されるニューラルネットワークのための入力テンソルは、図示されたバウンディングボックス浮動小数点フォーマットに変換されうる。
【0074】
図示されるように、
図3に関して上述された通常の浮動小数点フォーマットの数310は、それぞれの数、たとえば数315または数316が符号、指数、および仮数を含むように表される。ニューラルネットワーク・モデル200内の浮動小数点フォーマットの数310がDE-BBFPフォーマットの数のセットに変換されるとき、図示されたグループの特定の列内の数すべてによって共有される1つの指数値が存在する。よって、図示されるように、SE-BBFP数320のセットは、各列について単一の指数値(430および431)を共有し、一方、数のセットのそれぞれの数は、符号および仮数を含む。しかしながら、図示された数のセットは、浮動小数点フォーマットにおいて異なる指数値を有するので、同じまたは近い数がSE-BBFPフォーマットで表されるように、それぞれの数のそれぞれの仮数がシフトされうる(たとえば、シフトされた仮数445および446)。以下でさらに詳細に説明するように、DE-BBFPへの変換が完了すると、仮数のシフトは、各要素の行および列の指数の最大値によって決定される。
【0075】
行列310の第1の行についての共有される行指数430(VEXP1)は、第1の行における指数値の最大値として計算される:VEXP1=MAX(EXP(0,0)…EXP(4,0))。行列310の第2の行における共有される行指数331(VEXP2)は、第2の行における指数値の最大値として計算される:VEXP2=MAX(EXP(0,1)…EXP(4,1))。この例では、説明を簡単にするために2つの列しかないが、追加の列共有指数が同様に計算されるであろう。
【0076】
いくつかの例では、共有される列指数430および431は、ニューラルネットワーク・モデル200中のもとの通常精度の数の中からの最大の指数であるように選択される。他の例では、共有される行指数は、異なる仕方で選択されてもよく、たとえば、たとえば、特定の行における通常の浮動小数点指数の平均または中央値である指数を選択することによって、または、数がSE-BBFP/DE-BBFP数フォーマットに変換されるときに仮数に格納される値のダイナミックレンジを最大化する指数を選択することによってである。共有される指数と値のもとの浮動小数点指数とが同じでない場合、シフトされた仮数のいくつかのビットが失われることがあることに留意されたい。これは、仮数が新しい共有された指数に対応するようにシフトされるために生じる。
【0077】
バウンディングボックス浮動小数点テンソル内のどの値が指数を共有するかについてのいくつかの可能な選択肢がある。最も単純な選択は、行列または行列タイル(たとえば、16×16タイル)の行または列の中のすべての値が指数を共有することである。しかしながら、指数をより細かい粒度で共有することは、DE-BBFP数がもとの通常の浮動小数点フォーマットの指数により近い共有される指数を使用する可能性を高めるので、誤差を低減することができる。よって、(共有される指数に対応するように仮数をシフトするときに)仮数ビットをドロップすることによる精度の損失が低減されうる。
【0078】
行列が左オペランドまたは右オペランドのいずれかとして使用されうるブロック・ベースの浮動小数点行列乗算アプリケーションでは、DE-BBFP表現を使用することが、行列データをコンパクトな仕方で効率的に記憶することを許容する。そのような場合、この表現における各行列要素についての仮数は、以下のように計算される。
【0079】
次に示すような単純な2×2配列(10進値を用いて示している)を考える。説明を容易にするために、要素の符号は無視される。
【数5】
浮動小数点フォーマットでは、各要素についての指数は、次のようになる。
【数6】
よって、行列形式の仮数は、次のようになる。
【数7】
ここでの仮数は、含意される先導の「1」値(implied leading '1' value)のためにすべてゼロであることに留意されたい。
【0080】
諸行に沿って8ビットSE-BBFPフォーマットで行列を記憶するために、各行における最大指数が[135,133]であると決定される。(水平に沿った)行列の単一の指数表現は、[135,133]という共通の指数配列であり、よって、仮数行列は、
【数8】
である。これは、次の16進値として簡略化できる。
【数9】
【0081】
同様に、諸列に沿ってSE-BBFPを使用して行列を記憶するために、縦指数は[130,135]であり、(縦に沿った)行列の単一指数表現は
【数10】
である。これは、次の16進値として簡略化できる。
【数11】
【0082】
結果として得られる行列の精度は異なることに留意されたい。これは、ブロック浮動小数点の方向(行に沿っているか、または列に沿っているか)と、その方向における要素間の相関とに依存する。
【0083】
SE-BBFP表現をFP32に変換して戻すために、正規化された仮数が、各要素についてLS(左シフト数)を使って下記のように計算される。
【数12】
最上位の仮数ビットを除去し、シフトした後の仮数は、
【数13】
となる。
【0084】
【0085】
二重指数フォーマットDE-BBFPについて、Sr(i,j)は、行に沿った単一指数BBFPについての当該行列の(i,j)番目の要素についての仮数であるとする。これは、行列が行列乗算演算の左オペランドとして使用される場合に、行列が格納される仕方である。
Sc(i,j)は、列に沿った単一指数BBFPについての行列の(i,j)番目の要素についての仮数であるとする。これは、行列が行列乗算演算の右オペランドとして使用される場合に、行列が格納される仕方である。
【0086】
すると、DE-BBFP仮数Sde(i,j)は、次のように表すことができる。
【0087】
Sde(i,j)=max{Sr(i,j),Sc(i,j)}
DE_BBFPにおける各要素の符号は、SE_BBFP行列のいずれかの対応する要素の符号と同じである。なお、Sde(i,j)が2つの仮数のうちの大きいほうであることが、より正確な仮数の精度を保持する。
【0088】
概念的には、次のC言語データ構造を使用して、8ビット精度の仮数を有するDE-BBFPタイルを記憶することができる。
struct DE_BBFP_1_8_TILE
{
UINT8_hexp[16];
UINT8_vexp[16];
BOOL_sign[16][16];
UINT8_significand[16][16];
};
【0089】
16ビット浮動小数点フォーマットbfloat16で表現された要素を有する16×16タイルは、512バイトの記憶を必要とする。一例では、単一指数(SE-BBFP)タイルは、その共有される指数のために16バイト、仮数のために256バイト、符号のために32バイト(256ビット)を使用し、合計304バイトになる。一例では、二重指数(DE-BBFP)タイルは、共有される指数(ベクトルHEXPおよびVEXP)のために32バイト、仮数のために256バイト、符号値のために32バイト(256ビット)を使用する。このように、この例におけるDE-BBFPフォーマットのための総記憶要件は320バイトであり、これは、bfloat16フォーマットのタイルによって占有される記憶の約62.5%である。
【0090】
上記の例では、DE-BBFP仮数は、2つのSE-BBFP表現から以下のように取得される。
【数15】
【0091】
V. DE-BBFPタイル・ハードウェアの例
図5は、開示される技術のある種の例において実装されうるような、DE-BBFP行列を記憶し、使用するための高レベルのハードウェア・アーキテクチャーを示すブロック図 500である。たとえば、上述のDE-BBFP対応システム110は、機械学習アプリケーションのための行列演算を加速するために使用されうる。
【0092】
図示のように、メモリは、16×16要素配列、すなわちタイルを含む。この例では、いくつかの列、たとえば第1の列511および第2の列512がある。それぞれの列511、512における16個の要素についての指数の最大値が決定され、その最大指数が共通列指数レジスタ520に格納される。第1の共通指数521は、要素の列511に対応し、第2の共通指数522は、要素の第2の列に対応する。
【0093】
同じメモリが530で示されており、この場合、同じメモリ510について行によるグループ化を示している。図示されるように、16個の値の第1の行531が評価されて最大値が見出され、最大指数541が共通行指数レジスタ540に格納される。同様に、16個の値の第2の列532が評価されてその最大値が見出され、542において共通行指数レジスタ540に記憶される。
【0094】
DE-BBFP行列を使用して主要な演算を実行するとき、各要素についての最大または最小の共通指数CEXPは、比較器ノーマル(comparator normal)550を使用して見つけることができる。比較器550の出力は、メモリ510に記憶された要素のそれぞれについての仮数をシフトするために使用されうる。
【0095】
図6は、開示される技術のある種の例において実装されうるような、DE-BBFP行列を記憶し、使用するための高レベルのハードウェア・アーキテクチャーの代替例を示すブロック図 500である。たとえば、上述のDE-BBFP対応システム110は、機械学習アプリケーションのための行列演算を加速するために使用されうる。
【0096】
図6の例と同様に、ハードウェアは、16×16要素配列、またはタイルを記憶するメモリを含む。しかしながら、この例では、各バウンディングボックスは2つの列を含む。たとえば、最初の2つの列611は第1のバウンディングボックスであり、第2の対の列612は第2のバウンディングボックスとして割り当てられる。それぞれの列611、612の各対における32個の要素についての指数の最大値が決定され、その最大指数が指数レジスタ620に格納される。第1の共通指数621は、要素の最初の2つの列611に対応し、第2の共通指数622は、要素の第2の列612に対応する。
【0097】
同じメモリが630で示されており、この場合は、同じメモリ610について行によるグループ化を示している。図示されるように、32個の値の行631の第1の対が評価されて最大値が見出され、最大指数641が共通行指数レジスタ640に格納される。同様に、32個の値の行632の第2の対が評価されてその最大値が見出され、642において共通行指数レジスタ640に記憶される。
【0098】
DE-BBFP行列を使用して主要な演算を実行するとき、各要素についての最大または最小の共通指数CEXPは、比較器ノーマル650を使用して見つけることができる。比較器650の出力は、メモリ610に記憶された要素のそれぞれについての仮数をシフトするために使用されうる。
【0099】
VI. SE-BBFPおよびDE-BBFP行列を使用する行列演算の例示的な方法
図7は、開示される技術のある種の例において実装されうるような、SE-BBFP行列およびDE-BBFP行列を使用して行列演算を実行する例を概説するブロック図 700である。たとえば、上述のDE-BBFP対応システム110を使用して、記載される動作を実施することができる。
【0100】
図示されるように、710、720、および730においてメモリに記憶された16×16の通常の浮動小数点値の3つのタイルA、B、およびCがある。実行される第1の行列演算は、A×Bの行列乗算である。各浮動小数点行列は、DE-BBFPフォーマットに変換される。A行列は、DE-BBFPフォーマット行列740に変換され、メモリに記憶されるか、またはストリーミングされる;同様に、B行列は、DE-BBFPフォーマット行列750に変換される。
【0101】
一つまたは複数のテンソル演算が、BBFP処理ユニット760を使用して実行される。A行列は左オペランドであるので、図示されるように、メモリ740にSE-BBFPフォーマットで格納された共通行指数を有するように、DE-BBFPから変換される。B行列は右オペランドであり、よって、メモリ750にSE-BBFPフォーマットで記憶された共通列指数を有するように、DE-BBFPから変換される。2つの行列AおよびBは乗算され、その結果は通常の浮動小数点フォーマットでメモリ765に記憶される。メモリ765に記憶された浮動小数点行列は、次いで、記憶または後続のテンソル演算のためにDE-BBFPフォーマットに変換されうる。
【0102】
他の例では、A×B結果が別の行列乗算のための左オペランドになることが知られているので、結果は、共通の行指数を有するSE-BBFPフォーマットに変換される。結果の使用が知られていない場合、結果はDE-BBFPフォーマットに変換され、適切な行または列の指数が後刻使用できる。メモリ730内の入力C行列は、共通の列指数を有するDE-BBFPフォーマット780に変換される。一つまたは複数のテンソル演算が、BBFP処理ユニット760を使用して実行される。ここで、第2の行列乗算の結果(A×B)×Cは、通常の浮動小数点フォーマットとして使用され、メモリ795に格納される。いくつかの例では、C行列は行列乗算のための右オペランドであるので、C行列はDE-BBFPではなくSE-BBFPに直接変換される。いくつかの例では、タイルA、B、またはCのうちの一つまたは複数は、行列演算のために使用される前にSE-BBFPに直接変換されうる。いくつかの例では、BBFP処理ユニット790は、BBFP処理ユニット760と同じユニットであるが、他の例では、別個の処理ユニットが使用される。
【0103】
本開示の恩恵を有する当業者には、SE-BBFPおよびDE-BBFPフォーマットで記憶された行列を用いて追加の演算が実行でき、結果が後刻、通常の浮動小数点フォーマットに変換できることが容易に理解されよう。さらに、SE-BBFP行列の任意のものは、DE-BBFPフォーマット行列として記憶されることもできる。
【0104】
VII. 例示的な二重指数行列処理アーキテクチャー
図8は、開示された技術のある種の例において実現されうるような、二重指数行列処理アーキテクチャーを概説するブロック図である。たとえば、DE-BBFP対応システム110はDE-BBFP処理ユニット154を、
図8に示されるアーキテクチャーを使用して実装できる。DE-BBFP処理ユニット154を実装するための適切なハードウェアは、汎用プロセッサ、ニューラルネットワーク・アクセラレータを含み、またはフィールドプログラマブルゲートアレイ(FPGA)などの両方の論理デバイスを再構成する。いくつかの例では、DE-BBFP処理ユニット154は、開示されるDE-BBFP演算を実行するための、指数レジスタ、メモリ、シフタ、算術ユニット、論理ユニットなどを含む専用回路を含む。
【0105】
図8に示されるように、第1のメモリAMEM 810は、別のフォーマットから受領または変換された(たとえば、通常の浮動小数点から変換された)DE-BBFP行列のためのデータを記憶している。行列/テンソル演算のために使用される前に、変換器815が、DE-BBFPデータを、実行される演算と互換性のあるSE-BBFPフォーマットに変換する。AMEM行列が左行列オペランドとして使用される場合、行列は、共通の行指数を有するSE-BBFPに変換され;逆に、右行列オペランドとして使用される場合、行列は、共通の列指数を有するSE-BBFPに変換される。所与の行指数または列指数のほうが大きいかに依存して、仮数はシフトされるか、または維持される。たとえば、行指数が使用されており、行指数が列指数よりも大きいかまたは等しい場合、関連する仮数はシフトされない。一方、行指数が列指数よりも小さい場合、仮数はそれに応じてシフトされる。変換器815によって生成されたSE-BBFP行列は、一時メモリまたはバッファに記憶されてもよく、またはBBFP処理ユニット830を使用して実行されるテンソル演算において使用されるように直接ストリーミングされてもよい。
【0106】
第2のメモリBMEM 820は、AMEM行列810と同様の仕方でDE-BBFP行列についてのデータを記憶する。これらの値は、BMEM値が左オペランドとして使用されるか右オペランドとして使用されるかに依存して、変換器815と同様の仕方で、テンソル演算830のために消費される前にSE-BBFP値に変換される。
【0107】
BBFP処理ユニット830は、変換器815、825によって生成されたSE-BBFP行列を使用して、一つまたは複数の行列演算を実行する。任意の適切な行列演算が、(SE-BBFPに変換された)DE-BBFP行列を使用して実行されうる。たとえば、行列乗算、ならびに加算、減算、逆行列もしくは行列式の計算が実行できる。BBFP処理ユニット830を実装するための適切なハードウェアは、汎用プロセッサ、ニューラルネットワーク・アクセラレータを含み、またはフィールドプログラマブルゲートアレイ(FPGA)などの両方の論理デバイスを再構成する。いくつかの例では、DE-BBFP処理ユニット154は、開示されるDE-BBFP演算を実行するための、指数レジスタ、メモリ、シフタ、算術ユニット、論理ユニットなどを含む専用回路を含む。
【0108】
DE-BBFP演算の出力は、すべての出力要素がBBFP処理ユニットによって生成された新しい仮数および指数を有するので、通常の浮動小数点フォーマットになる。浮動小数点出力は、たとえば、
図10に関して上述したプロセス・ブロック1010、1020、および1030と同様の技法を使用して、DE-BBFPに変換できる。変換されたDE-BBFP結果(CMEM)は、メモリ850に記憶される。その後、CMEMは、SE-BBFPに変換し、テンソル演算のための左または右オペランドとして使用することによって、追加の行列演算のために使用されうる。
【0109】
ある時点で、結果データは、通常の浮動小数点領域で動作するように構成されたハードウェアとともに使用するために、通常の浮動小数点フォーマットに変換されうる。たとえば、浮動小数点出力は、通常の浮動小数点フォーマットでメモリ860に記憶されうる。いくつかの例では、出力は固定小数点または整数フォーマットに変換される。浮動小数点出力は、DE-BBFPからFPへの変換器865によって生成されうる。たとえば、
図12に関して以下に説明される演算が、通常の浮動小数点フォーマットへの変換を実行するために使用されうる。DE-BBFPからFPへの変換器865を実装するための適切なハードウェアは、汎用プロセッサ、ニューラルネットワーク・アクセラレータを含み、またはフィールドプログラマブルゲートアレイ(FPGA)などの両方の論理デバイスを再構成する。
【0110】
他の例では、通常の浮動小数点出力は、変換器865を用いて生成されるのではなく、BBFP処理ユニット830によって生成されたテンソル演算の出力を使用する。いくつかの例では、さらなる変換が行われる。たとえば、いくつかの場合において、テンソル演算出力は、8ビットの仮数部および5ビットの指数部を有し、所望の浮動小数点出力フォーマットで適切にフォーマットされるようにパディングまたはシフトされうる。たとえば、bfloat16は8ビット精度の仮数と指数を有し、一方、float32フォーマットは24ビット精度の仮数と8ビットの指数を有する。さらに、特殊なケース(たとえば、NaN、アンダーフロー/オーバーフロー、非正規〔サブノーマル〕、または他の特殊なケース)は、ターゲット浮動小数点出力フォーマットにおいて異なる表現を有しうる。
【0111】
VIII. ニューラルネットワーク・トレーニングの例示的な方法
図9は、開示される技術のある種の例において実装されうるような、DE-BBFPフォーマットを有するモデルを使用してニューラルネットワークをトレーニングする方法900を示す流れ図である。たとえば、ニューラルネットワークをトレーニングすることは、トレーニング・データのセットを通して逐次反復することを含むことができ、方法900は、トレーニング・データの所与の反復工程中にニューラルネットワークのパラメータを更新するために使用される。一例として、方法900は、
図1のDE-BBFP対応システム110などのDE-BBFP対応システムによって実行されうる。
【0112】
プロセス・ブロック910において、ニューラルネットワークの重みおよびバイアスなどのパラメータが初期化されうる。一例として、重みおよびバイアスは、ランダムな通常精度の浮動小数点値に初期化されうる。別の例として、重みおよびバイアスは、以前のトレーニングセットから計算された通常精度の浮動小数点値に初期化されうる。初期パラメータは、DE-BBFP対応システムのメモリまたは記憶装置に記憶することができる。一例では、パラメータはDE-BBFP値として記憶されることができ、これは、初期パラメータを記憶するために使用される記憶量を低減することができる。
【0113】
プロセス・ブロック920において、ニューラルネットワークの入力値は、ニューラルネットワークを通して順方向伝搬されうる。ニューラルネットワークの所与の層の入力値は、ニューラルネットワークの別の層の出力でありうる。値は、通常精度の浮動小数点を使用して、1つの層の出力から次の層の入力へと、層間で渡されうる。層iの出力関数は、数学的に次のように記述される項を含むことができる:
yi=f(DE(yi-1),DE(Wi)) (式5)
ここで、yi-1は層iへの入力を提供する層からの出力であり、Wiは層iについての重みテンソルであり、f()は層の順方向関数であり、DE()はDE-BBFPへの変換関数である。層の出力関数は、f()として表されるDE-BBFP演算によって生成される浮動小数点値でありうるか、または代替的に、出力関数は、(DE-BBFPへの変換前に)通常精度の浮動小数点を使用して、または(DE-BBFPへの変換後に)DE-BBFP浮動小数点を使用して実行される、活性化関数またはバイアスの追加などの追加的な項を含みうる。一般に、層の入力、出力、およびパラメータはテンソルである。典型的には、層の入力、出力、およびパラメータは、ベクトルまたは行列である。DE-BBFP変換関数は、通常精度の浮動小数点値をDE-BBFP値に変換する。特定のDE-BBFPフォーマットは、入力データのタイプおよび層iによって実行される演算のタイプを考慮するように選択されうる。たとえば、yiおよびWiが2次元行列であり、出力関数がyi-1とWiとの外積をとる項を含む場合、yi-1についての関数は、yi-1の行または行の一部を含むバウンディングボックスを使用することができ、Wiについての関数は、Wiの列または列の一部を含むバウンディングボックスを使用することができる。演算子の流れに従うように諸バウンディングボックスを選択する場合、計算はより効率的になりえ、よって、ハードウェア実装をより小さく、より高速に、よりエネルギー効率的にする。
【0114】
プロセス・ブロック930において、ニューラルネットワークの次の層にちょうど順方向伝搬されたばかりの層などのニューラルネットワークの一部分が圧縮され、メモリに記憶されうる。たとえば、上述のプロセス・ブロック920で述べたような順方向伝搬の一部として計算された活性化値が、圧縮され、メモリに記憶されうる。この圧縮は、数学的には、次のように表すことができる:
yci=C(yi) (式6)
ここで、yiは、プロセス・ブロック920において層についての順方向伝搬によって生成された値であり、C()は、任意的な追加の圧縮関数(これは複数の圧縮演算を含んでいてもよい)であり、yciは、メモリに記憶されるべき圧縮された値である。他の例では、圧縮動作は実行されず、よって、プロセス・ブロック930において説明される動作は実行されない。そのような場合、以下でプロセス・ブロック950に関して説明されるような圧縮解除動作は不要であり、実行されないことになる。
【0115】
いくつかの例では、追加の量子化関数が、DE-BBFP値を、DE-BBFP層において使用されるよりも小さい量子化されたフォーマットにさらに圧縮することができる。そのような場合、圧縮された活性化値は、順方向伝搬計算を実行するために使用される第1のDE-BBFPとは異なりうる第2のDE-BBFPフォーマットで表される(次のうちの少なくとも1つ:異なる仮数フォーマットを有するか、または異なる指数フォーマットを有する)。たとえば、9ビット・フォーマットで表現された活性化仮数値を使用して順方向伝搬が実行された場合、これらの値は、仮数を打ち切るか、または丸めることによって4ビット・フォーマットに変換されうる。別の例として、DE-BBFPフォーマットの共有される指数を含む活性化値指数は、7ビットフォーマットから5ビットフォーマットに変換されうる。値は、任意の適切な技法によって使用されるフォーマット間で変換されうる。たとえば、指数の打ち切りまたは丸めが、調整された指数を補償するために実行される任意の仮数シフトとともに、実行されうる。いくつかの例では、テーブル探索または他の技法を使用して、変換を実行することができる。
【0116】
いくつかの例では、メモリに記憶する前に、圧縮されたバウンディングボックス浮動小数点フォーマットに追加の圧縮を適用することができる。圧縮されたフォーマットで活性化値をさらに圧縮するための好適な技法の例は、エントロピー圧縮(たとえば、ハフマン符号化)、ゼロ圧縮、ランレングス圧縮、圧縮スパース行圧縮、または圧縮スパース列圧縮を含む。
【0117】
プロセス・ブロック940において、ニューラルネットワークの損失が計算されうる。たとえば、ニューラルネットワークの出力yが、ニューラルネットワークの期待される出力^y〔^付きのy〕と比較されうる。出力と期待される出力との間の差が、ニューラルネットワークのパラメータを更新するために使用されるコスト関数への入力でありうる。
【0118】
プロセス・ブロック950では、メモリに記憶された活性化値が、逆伝播のために、特に、特定の層についての逆伝播で使用される出力誤差項の計算のために圧縮解除される。この方法は、各層にわたって逐次反復し、各層についての活性化値を圧縮解除し、層についての逆伝搬を実行し、次いで、先行する層についての活性化値を圧縮解除することができる。この圧縮解除は、数学的には、次のように表すことができる:
yi=C-1(yci) (式7)
ここで、yciは、メモリから取り出された圧縮された値であり、C-1()は、任意的な圧縮関数C()の逆関数である任意的な圧縮解除関数(これは複数の圧縮演算を含むことができる)であり、yiは、プロセス・ブロック920において層についての順方向伝搬によって生成された値である。たとえば、プロセス・ブロック920および930に関して上述したようにすべての層およびニューラルネットワークについて順方向伝搬が完了し、プロセス・ブロック940において上述したように損失が計算された後、値は、典型的にはニューラルネットワークの出力層から開始して、ニューラルネットワークを通して逆方向伝搬される。さらに、メモリに記憶する前に、エントロピー圧縮、ゼロ圧縮、ランレングス符号化、圧縮スパース行圧縮、または圧縮スパース列圧縮などの追加の圧縮が適用された場合、これらの動作は、プロセス・ブロック960において層について逆方向伝搬を実行する前に逆転されうる。
【0119】
プロセス・ブロック960において、ニューラルネットワークの損失は、ニューラルネットワークを通して逆伝搬されうる。逆伝搬中に、出力誤差項∂yおよび重み誤差項∂Wを計算することができる。出力誤差項は、数学的には、次のように記述することができる:
∂yi-1=g(DE(∂yi),DE(Wi)) (式9)
ここで、∂yi-1は、層iの次の層からの出力誤差項であり、Wiは、層iについての重みテンソルであり、g()は、層の逆方向関数であり、DE()は、二重指数変換関数である。逆方向関数g()は、yi-1に関する勾配または該勾配関数の一部についてのf()の逆方向関数でありうる。
【0120】
重み誤差項∂Wは、数学的には、次のように記述することができる:
∂Wi=h(DE(yi),DE(∂yi)) (式9)
ここで、∂Wiは層iについての重み誤差項であり、∂yiは層iについての出力誤差項であり、yiは層iについての出力であり、h()は層の逆方向関数であり、DE()は二重指数フォーマット関数である。逆方向関数h()は、Wi-1に関する勾配または重み誤差の式9の一部についてのf()の逆方向関数でありうる。重み誤差項は、通常精度の浮動小数点を使用して実行される追加的な項を含むことができる。
【0121】
プロセス・ブロック970では、各層についてのパラメータを更新することができる。たとえば、各層についての重みは、トレーニングの逐次反復に基づいて新しい重みを計算することによって更新されうる。一例として、重み更新関数は、数学的に次のように記述することができる:
Wi=Wi+η×∂Wi (式10)
ここで、∂Wiは層iについての重み誤差項であり、ηはニューラルネットワークについての層iについての学習率であり、Wiは層iについての重みテンソルである。一例では、重み更新関数は、通常精度の浮動小数点を使用して実行されうる。
【0122】
IX. DE-BBFP行列演算の生成および使用の高レベルの説明
図10は、通常の浮動小数点行列をDE-BBFP行列に変換し、その行列を行列演算において使用する例示的な方法を概説するフローチャート1000である。
図1に関して上述したDE-BBFP対応システム110は、図示した方法を実行するために使用することができるシステムの一例である。たとえば、
図3に関して上述した数フォーマットの使用を含む、
図2および
図8で上述したニューラルネットワーク動作を使用して、図示した方法を実施することができる。本開示の恩恵を有する当業者には容易に理解されるように、DE-BBFPシステムおよび二重指数フォーマットの種々の変形が、例示された方法を実行するように適合されうる。
【0123】
プロセス・ブロック1010において、通常の浮動小数点フォーマット入力行列における各行および列についての最大の行指数(HEXP)および列指数(VEXP)が決定される。よって、仮数mi,j、指数ei,j、および符号ビットsi,jを有するN×M入力行列について、HEXPは長さNのベクトルであり、VEXPは長さMのベクトルである。
【0124】
プロセス・ブロック1020において、DE-BBFP行列要素について仮数が決定される。各要素について、それぞれの要素の行指数および列指数の最小値である共通の指数が選択される。通常の浮動小数点の仮数は、共通の指数と通常の浮動小数点の指数との間の差によってスケーリングされる。
【0125】
プロセス・ブロック1030において、プロセス・ブロック1010および1010において決定された共通の指数および仮数が、メモリまたはコンピュータ可読記憶媒体に記憶される。上述のように、DE-BBFPフォーマットは、通常精度の浮動小数点値に対して実質的なメモリ削減を提供することができる。いくつかの例では、DE-BBFP行列値は、指数および/または仮数を量子化すること、あるいは可逆圧縮技法によってさらに低減されうる。
【0126】
プロセス・ブロック1040では、DE-BBFP行列を使用して行列演算が実行される。DE-BBFP行列は、行列演算を実行する前にSE-BBFPに変換される。たとえば、DE-BBFPが左行列として使用される場合、行指数が使用される;逆に、DE-BBFPが演算において右行列として使用される場合、列指数が使用される。左行列として使用される場合、SE-BBFP指数は、ゼロと行指数から列指数を引いたものとのいずれかの最大値として計算される。右行列として使用される場合、SE-BBFP指数は、ゼロと、列指数から行指数を引いたものとのいずれかの最大値として計算される。SE-BBFP仮数は、行/列指数間の差だけ右にシフトされた二重指数仮数として計算される。DE-BBFPデータをSE-BBFPデータに変換すること、および演算を実行することに関するさらなる詳細は、
図8に関して上記で説明されている。
【0127】
任意の適切な行列演算が、(SE-BBFPに変換された)DE-BBFP行列を使用して実行されうる。たとえば、行列乗算、ならびに加算、減算、逆行列もしくは行列式の計算を実行することができる。通常の浮動小数点値に変換する前に、DE-BBFP/SE-BBFPフォーマットで格納された行列データを用いて、いくつかの演算を実行することができる。たとえば、機械学習/深層学習アプリケーションについては、値を通常の浮動小数点値に変換する前に、一連のトレーニングまたは推論アクションがDE-BBFP領域において実行されうる。
【0128】
プロセス・ブロック1050では、プロセス・ブロック1040で一つまたは複数の行列演算を実行したことからのDE-BBFP結果が、たとえばfloat32またはbfloat16フォーマットで、通常の浮動小数点値に変換される。他の例では、DE-BBFP演算を実行することによって生成された浮動小数点結果は、該浮動小数点フォーマットとして直接出力されうる。いくつかの例では、選択された特定の出力フォーマットに依存して、通常の浮動小数点値の追加の変換が実行される。
【0129】
X. 通常の浮動小数点の行列のDE-BBFPへの変換
図11は、通常の浮動小数点の行列をDE-BBFP行列に変換する例示的な方法を概説するフローチャート1100である。
図1に関して上述したDE-BBFP対応システム110は、図示した方法を実行するために使用することができるシステムの一例である。たとえば、
図3に関して上述した数フォーマットの使用を含む、
図2および
図9で上述したニューラルネットワーク動作を使用して、図示した方法を実施することができる。本開示の恩恵を有する当業者には容易に理解されるように、DE-BBFPシステムおよび二重指数フォーマットの種々の変形が、例示された方法を実行するように適合されうる。
【0130】
プロセス・ブロック1110において、通常の浮動小数点フォーマットの入力行列における各行および列についての最大の行指数(HEXP)および列指数(VEXP)が決定される。よって、仮数m
i,j、指数e
i,j、および符号ビットs
i,jを有するN×M入力行列について、HEXPは長さNのベクトルになり、VEXPは長さMのベクトルになる。これらのベクトルは、より正式には次のように表せる:
【数16】
【0131】
処理ブロック1120で、浮動小数点仮数の暗黙的な先導ビット(implicit leading bit)が復元され;先導ビットは明示的に表現される。浮動小数点仮数が通常の浮動小数点値である場合、1のビットが二重指数仮数の第1のビットになる。浮動小数点仮数が非正規化値(subnormal value)である場合、0(ゼロ)のビットが二重指数仮数の第1のビットになる。いくつかの例では、数の対応する指数がそのフォーマットで表現可能な最小値を有するとき、非正規化仮数が示される。いくつかの例では、この非正規化条件は、ある数についての指数ビットのすべてが0であるときに示されうる。
【0132】
仮数si,jおよびその指数ei,jの符号は、その対応する浮動小数点要素の符号と同じである。復元された先導ビットを有する仮数は、符号なしデータ型にキャストされる。
【0133】
プロセス・ブロック1130で、入力行列xi,jにおける各要素について、共通指数CEXP[i],[j]がMIN(HEXP[i],[j])として決定される。
【0134】
プロセス・ブロック1140、プロセス・ブロック1140において、DE-BBFPフォーマット行列についての仮数は、要素の共通指数CEXP[i],[j]とその通常の指数ei,jとの間の差をスケーリングすることによって決定される。
【0135】
プロセス・ブロック1150において、仮数は、DE-BBFP表現において所望される幅にキャストされる。いくつかの例では、仮数は切り上げられるかまたは切り下げられる。いくつかの例では、仮数は、中間ではゼロから遠いほうにする丸め(rounding halfway from zero)技法によって丸められる。いくつかの例では、仮数は打ち切りされる。
【0136】
通常の浮動小数点をDE-BBFPに変換するときに扱うことができるいくつかの特殊なケースがある。いくつかの例では、入力浮動小数点数がNaN(not a number[数ではない])であるとき、出力されるDE-BBFP数もNaNである。いくつかの例では、DE-BBFPでのNaNは、その共有された指数ビットのすべて1を用いて表されることができ、その場合、その数はNaNであるので、仮数ビットはドントケア(don't care[何でもよい])である。
【0137】
別の特殊なケースとして、入力浮動小数点数が無限大であるとき、DE-BBFPにおける出力値はNaNとして表され、その共有される指数ビットすべては1に設定され、仮数ビットはドントケアである。
【0138】
もう一つの特殊なケースとして、要素の行指数が255であり、その列指数が256であるとき、DE-BBFP要素はNaNとみなされる。
【0139】
非正規化値については、仮数の含意される先導ビットは、要素の共通指数がすべてゼロであるときに0であり、そうでない場合に1である。
【0140】
中間ではゼロから遠いほうにする丸め技法が適用されるとき、仮数がオーバーフローする可能性がある。そのような場合、要素指数は調整されず、むしろ、最大の可能な仮数が要素の値に設定される。これを理解するために、SE-BBFPの例について上述したのと同じ2×2行列を考える。
【数17】
指数は、
【数18】
である。すると、_Hexp=[135,133]、_vexp=[130,135]であり、仮数は次のように決定される。
【数19】
そして、結果として得られる行列は、
【数20】
である。
【0141】
XI. DE-BBFP行列の通常の浮動小数点フォーマットへの変換
図12は、DE-BBFP行列を通常の浮動小数点行列に変換する例示的な方法を概説するフローチャート1200である。
図1に関して上述したDE-BBFP対応システム110は、図示した方法を実行するために使用することができるシステムの一例である。たとえば、
図3に関して上述した数フォーマットの使用を含む、
図2および
図8で上述したニューラルネットワーク動作を使用して、図示した方法を実施することができる。本開示の恩恵を有する当業者には容易に理解されるように、DE-BBFPシステムおよび二重指数フォーマットの種々の変形が、例示された方法を実行するように適合されうる。説明を容易にするために、この例では、bfloat16浮動小数点数への変換について論じるが、任意の適切な通常の浮動小数点フォーマットが、例示された方法のターゲットでありうる。
【0142】
プロセス・ブロック1210では、各要素についての共通指数CEXPが、その要素の行指数HEXPおよび列指数VEXPのうちの最小値として選択される。その要素のHEXP指数とVEXP指数の両方が最大値である場合、CEXPはその値に設定される。たとえば、bflot16で使用される8ビット指数について、HEXPとVEXPの両方が255である場合、CEXPは255である。
【0143】
プロセス・ブロック1220では、正規化された仮数(normalized significand、NSIG)が、DE-BBFP仮数をその最上位ビットが1になるまで左にシフトすることによって決定される。使用される左シフトの数LSは、後続の演算のために保持される。
【0144】
処理ブロック1230では、その要素が非正規であるかどうかが判定される。値CEXP-LSがゼロより大きい場合、要素は通常の浮動小数点値であると判定され、方法はプロセス・ブロック1240に進む。値CEXP-LSがゼロ以上である場合、要素は非正規であり、方法はプロセス・ブロック1260に進む。
【0145】
プロセス・ブロック1240では、通常の浮動小数点仮数が決定される。通常の浮動小数点仮数は、その先導ビットが落とされ、次いで、その結果が1ビットだけ左にシフトされる。たとえば、DE-BBFP仮数をbfloat16に変換するために、正規化された仮数NSIGの最上位ビットがドロップされ、その結果が1ビットだけ左にシフトされる。bfloat16の仮数部は、(NSIG-0x80)<<1によって計算できる。通常の浮動小数点符号は、DE-BBFP要素符号と同じ値である。
【0146】
プロセス・ブロック1250では、CEXP-LSを計算することによって、通常の浮動小数点指数が決定される。
【0147】
プロセス・ブロック1230において要素が非正規であると判定された場合、方法はプロセス・ブロック1260に進む。この場合、浮動小数点仮数は、LS-CEXPによって、プロセス・ブロック1220において決定された正規化された仮数NSIGを右シフトすることによって決定される。たとえば、非正規bfloat16フォーマットの仮数は、NSIG>>(LS-CEXP)として計算できる。
【0148】
処理ブロック1270では、通常の浮動小数点指数がゼロに設定され、通常の浮動小数点要素が非正規であることを示す。
【0149】
DE-BBFPを通常の浮動小数点に変換するときに扱うことができるいくつかの特殊なケースがある。たとえば、CEXPが255である場合(bfloat16に変換するとき)、通常の要素はNaN(符号=0、指数=255、仮数=0x40)である。DE-BBFP仮数がゼロである場合、bfloat16出力はゼロである。
【0150】
例として、行指数HEXP=[135,133]、列指数VEXP=[130,135]、および
【数21】
の仮数を有するDE-BBFP行列に関する先の例を考える。正規化された仮数行列は、
【数22】
である。一方、LS行列(通常の浮動小数点仮数に変換するための左シフトの数を示す)は、
【数23】
となる。各要素についての通常の浮動小数点指数は、
【数24】
として計算される。一方、仮数は
【数25】
として計算される。
【0151】
XII. 例示的なコンピューティング環境
図13は、上述したような二重指数行列フォーマットを使用して機械学習および深層学習を実行することを含む、説明される実施形態、技法、および技術を実装することができる適切なコンピューティング環境1300の一般化された例を示す。
【0152】
コンピューティング環境1300は、本技術の使用または機能の範囲に関していかなる限定も示唆することを意図しておらず、本技術は、多様な汎用または専用コンピューティング環境において実装されうる。たとえば、開示された技術は、ハンドヘルドデバイス、マルチプロセッサシステム、プログラマブルコンシューマエレクトロニクス、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成で実装されてもよい。開示された技術は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境においても実施されうる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートの両方のメモリ記憶デバイスに位置していてもよい。
【0153】
図13を参照すると、コンピューティング環境1300は、少なくとも1つの処理ユニット1310およびメモリ1320を含む。
図13では、この最も基本的な構成1330は、破線内に含まれる。処理ユニット1310は、コンピュータ実行可能命令を実行し、実プロセッサまたは仮想プロセッサでありうる。マルチプロセッシングシステムでは、複数の処理ユニットがコンピュータ実行可能命令を実行して処理能力を高め、よって、複数のプロセッサが同時に実行されうる。メモリ1320は、揮発性メモリ(たとえば、レジスタ、キャッシュ、RAM)、不揮発性メモリ(たとえば、ROM、EEPROM、フラッシュメモリなど)、またはこれら2つの何らかの組み合わせでありうる。メモリ1320は、たとえば、本明細書に記載された技術を実施することができるソフトウェア1380、画像、およびビデオを記憶する。コンピューティング環境は、追加の特徴を有することができる。たとえば、コンピューティング環境1300は、ストレージ1340、一つまたは複数の入力デバイス1350、一つまたは複数の出力デバイス1360、および一つまたは複数の通信接続1370を含む。バス、コントローラ、またはネットワークなどの相互接続機構(図示せず)が、コンピューティング環境1300のコンポーネントを相互接続する。典型的には、オペレーティングシステムソフトウェア(図示せず)は、コンピューティング環境1300内で実行される他のソフトウェアのための動作環境を提供し、コンピューティング環境1300のコンポーネントの活動を調整する。
【0154】
ストレージ1340は、取り外し可能であっても取り外し不能であってもよく、磁気ディスク、磁気テープもしくはカセット、CD-ROM、CD-RW、DVD、または情報を格納するために使用されることができ、コンピューティング環境1300内でアクセスされることができる他の任意の媒体を含む。ストレージ1340は、本明細書に記載された技術を実装するために使用されうるソフトウェア1380のための命令、プラグインデータ、およびメッセージを記憶する。
【0155】
入力デバイス1350は、コンピューティング環境1300に入力を提供する、キーボード、キーパッド、マウス、タッチスクリーンディスプレイ、ペン、もしくはトラックボールなどのタッチ入力デバイス、音声入力デバイス、スキャンデバイス、または別のデバイスでありうる。オーディオについては、入力デバイス1350は、アナログまたはデジタル形式のオーディオ入力を受け入れるサウンドカードまたは同様の装置、あるいはコンピューティング環境1300にオーディオサンプルを提供するCD-ROMリーダーであってもよい。出力デバイス1360は、ディスプレイ、プリンター、スピーカー、CDライター、またはコンピューティング環境1300からの出力を提供する別のデバイスでありうる。
【0156】
通信接続1370は、通信媒体(たとえば、接続ネットワーク)を通じて別のコンピューティングエンティティへの通信を可能にする。通信媒体は、コンピュータ実行可能命令、圧縮されたグラフィックス情報、ビデオ、または他のデータなどの情報を変調されたデータ信号において搬送する。通信接続1370は、有線接続(たとえば、メガビットまたはギガビットイーサネット(登録商標)、インフィニバンド、電気または光ファイバー接続上のファイバーチャネル)に限定されず、無線技術(たとえば、ブルートゥースを介したRF接続、WiFi(IEEE802.11a/b/n)、WiMax、セルラー、衛星、レーザー、赤外線)、および開示されたエージェント、ブリッジ、およびエージェントデータコンシューマにネットワーク接続を提供するための他の適切な通信接続も含む。仮想ホスト環境では、通信接続は、仮想ホストによって提供される仮想化されたネットワーク接続でありうる。
【0157】
開示された方法のいくつかの実施形態は、コンピューティングクラウド1390において、開示された技術の全部または一部を実装するコンピュータ実行可能命令を使用して実行されうる。たとえば、開示された方法は、コンピューティング環境1330内に位置する処理ユニット1310上で実行されうるか、または開示された方法は、コンピューティングクラウド1390内に位置するサーバー上で実行されうる。
【0158】
コンピュータ可読媒体は、コンピューティング環境1300内でアクセスされることができる任意の利用可能な媒体である。限定ではなく例として、コンピューティング環境1300では、コンピュータ可読媒体は、メモリ1320および/またはストレージ1340を含む。容易に理解されるように、コンピュータ可読記憶媒体という用語は、メモリ1320およびストレージ1340などのデータ記憶のための媒体を含み、変調されたデータ信号などの伝送媒体を含まない。
【0159】
XIII. さらなる実施例
追加的な例が、以下の条項に開示されており、これらは、互いに組み合わせて、およびサブコンビネーションにおいて再配置されてもよい。
〔条項1〕
二重指数フォーマットで記憶されるべき入力行列の要素のバウンディングボックスについての共通の指数を選択する段階であって、前記共通の指数は、要素の前記バウンディングボックスの行または列のいずれかについての小さいほうの指数に基づいて選択される、段階と;二重指数フォーマット行列の要素の前記バウンディングボックスについての仮数を決定する段階であって、決定された仮数のそれぞれは、それぞれの要素の指数を前記共通の指数と比較することによって選択される、段階と;決定された仮数および前記共通の指数を二重指数フォーマット行列としてコンピュータ可読記憶媒体に記憶する段階とをプロセッサを用いて実行することを含む、コンピュータ実装される方法。
〔条項2〕
前記共通の指数を選択することは、要素の前記バウンディングボックスの行または列のいずれかについての小さいほうの指数から左シフト数を引いたものを計算して、要素の前記バウンディングボックスの前記それぞれの行または列についての正規化された仮数を計算することを含む、条項1に記載の方法。
〔条項3〕
前記仮数を決定することは、前記入力行列内の仮数を、前記共通の指数と前記仮数の入力行列指数との間の差だけ左シフトすることを含む、条項1または条項2に記載の方法。
〔条項4〕
前記入力行列における要素の前記バウンディングボックスは、通常の浮動小数点要素を含み、前記仮数を決定することは、通常の浮動小数点の仮数から暗黙的な先導ビットを復元し;前記選択された共通の指数と通常の浮動小数点の指数との間の前記差だけ前記通常の浮動小数点の仮数をスケーリングすることを含む、条項1ないし3のうちいずれか一項に記載の方法。
〔条項5〕
最上位「1」のビットの最上位ビット位置からのシフト数を示す、仮数の左シフト値を決定する段階と;前記左シフト値が前記共通の指数よりも大きいとき、前記左シフト値と前記共通の指数との間の差だけ前記仮数を右シフトすることによって、通常の仮数を決定する段階とをさらに含む、条項1ないし4のうちいずれか一項に記載の方法。
〔条項6〕
行列演算において、前記二重指数フォーマット行列が左側行列として使用されるか、または右側行列として使用されるかを決定する段階と;前記決定に基づいて、前記二重指数フォーマット行列が左側行列として使用される場合には、要素の前記バウンディングボックスの行についての最大の指数に基づいて前記共通の指数を選択することによって、または前記二重指数フォーマット行列が右側行列として使用される場合には、要素の前記バウンディングボックスの列についての最大の指数に基づいて前記共通の指数を選択することによって、前記二重指数フォーマット行列を単一指数フォーマット行列に変換する段階とをさらに含む、条項1ないし5のうちいずれか一項に記載の方法。
〔条項7〕
前記共通の指数は、要素の前記バウンディングボックスの行についての最大の指数に基づいて選択された共通の行指数であり、当該方法は:二重指数フォーマットで記憶されるべき入力行列の要素のバウンディングボックスについての共通の列指数を選択する段階であって、前記共通の指数は、要素の前記バウンディングボックスの列についての最大の指数に基づいて選択される、段階と;前記共通の列指数を前記コンピュータ可読記憶媒体に記憶する段階とをさらに含み、前記決定された仮数のそれぞれは、前記それぞれの要素の指数を前記共通の行指数または前記共通の列指数のうちの大きいほうと比較することによって選択される、条項1ないし6のうちいずれか一項に記載の方法。
〔条項8〕
前記二重指数フォーマット行列を用いて行列演算を実行して、二重指数フォーマットの結果行列を生成することをさらに含む、条項1ないし7のうちいずれか一項に記載の方法。
〔条項9〕
二重指数フォーマットの前記結果行列を通常の浮動小数点フォーマットの結果行列に変換する段階と;通常の浮動小数点フォーマットの前記結果行列をコンピュータ可読記憶媒体に記憶する段階とをさらに含む、条項8に記載の方法。
〔条項10〕
前記決定された仮数、前記共通の指数、または前記決定された仮数および前記共通の指数を量子化する段階をさらに含む、条項1ないし9のうちいずれか一項に記載の方法。
〔条項11〕
要素の前記バウンディングボックスは、16×16要素バウンディングボックスであり、前記入力行列は、複数の16×16要素バウンディングボックスを含み、前記複数の16×16要素バウンディングボックスのそれぞれは、それぞれの共通の指数を含む、条項1ないし10のうちいずれか一項に記載の方法。
〔条項12〕
ニューラルネットワークをトレーニングする方法であって:条項1の方法によって生成された前記決定された仮数および前記共通の指数含む前記二重指数フォーマット行列を用いて、前記ニューラルネットワークの少なくとも1つの層のためのトレーニング動作を実行する段階と;前記トレーニング動作を実行することによって生成されたノード重み、エッジ重み、バイアス値、または活性化関数のうちの少なくとも1つをコンピュータ可読記憶媒体に記憶する段階とを含む、方法。
〔条項13〕
コンピュータによって実行されると、該コンピュータに、条項1ないし12のうちいずれか一項に記載の方法を実行させるコンピュータ可読命令を記憶しているコンピュータ可読媒体。
〔条項14〕
メモリと、共通指数レジスタと、プロセッサとを有する装置であって、前記プロセッサは:前記メモリに記憶された入力行列の要素のバウンディングボックスのための共通の指数を選択する段階であって、前記共通の指数が、要素の前記バウンディングボックスの行または列のいずれかについての最大の指数に基づいて選択される、段階と;二重指数フォーマット行列の要素の前記バウンディングボックスのための仮数を決定する段階であって、決定される仮数のそれぞれは、それぞれの要素の指数を前記共通の指数と比較することによって選択される、段階と;前記共通の指数を前記共通指数レジスタに記憶する段階とを実行するものである、装置。
〔条項15〕
構成要素から形成されたニューラルネットワーク・アクセラレータをさらに有しており、前記構成要素は、前記メモリと、前記共通指数レジスタと、前記プロセッサとを含み、当該装置が、前記二重指数フォーマット行列を使用して少なくとも1つのトレーニング、推論、または分類動作を実行することによってニューラルネットワーク・モデルを評価するように構成されている、条項15に記載の装置。
〔条項16〕
前記ニューラルネットワーク・モデルのための通常の浮動小数点値を受領し、前記二重指数フォーマット行列を生成するための浮動小数点から二重指数バウンディングボックス・ベースの浮動小数点(DE-BBFP)への変換器と;生成された二重指数フォーマット行列を用いて少なくとも1つの行列演算を実行することによって生成された結果二重指数フォーマット行列から通常の浮動小数点値を生成するためのDE-BBFPから浮動小数点への変換器とをさらに有する、条項14または15に記載の装置。
〔条項17〕
条項1ないし12の方法のうちの少なくとも1つを実行するように構成されている、条項14ないし16のうちいずれか1項に記載の装置。
〔条項18〕
二重指数フォーマット行列を用いて行列演算を実行することによって生成される結果行列を記憶しているコンピュータ可読記憶媒体。
〔条項19〕
前記結果行列は、前記結果行列における要素のバウンディングボックスの各行または列について共通の指数を含む二重指数フォーマット行列であり、前記結果行列は、前記二重指数フォーマット行列および別の二重フォーマット行列を用いて前記行列演算を実行することによって生成される、条項18に記載のコンピュータ可読記憶媒体。
〔条項20〕
前記結果行列は、前記行列演算の結果を二重指数フォーマット行列から変換することによって生成される通常の浮動小数点数の配列である、条項18または19に記載のコンピュータ可読記憶媒体。
〔条項21〕
前記二重指数フォーマット行列のバウンディングボックス内の各要素は、仮数、行共通指数、および列フォーマット指数を有し、前記行共通指数は、前記バウンディングボックスの行内の前記要素のそれぞれによって共有され、前記列共通指数は、前記バウンディングボックスの列内の前記要素のそれぞれによって共有され、前記結果行列は:前記二重指数フォーマット行列の前記バウンディングボックス内の各要素について:前記要素のそれぞれの行共通指数および列共通指数の最小指数を選択し;最上位ビットが1になるまで、前記要素の仮数をあるシフト数だけ左にシフトすることによって正規化された仮数を計算し;前記最小指数から前記シフト数を減算することによって正規化された指数を計算し;前記正規化された仮数および前記正規化された指数を前記コンピュータ可読記憶媒体における前記結果行列に格納することによって生成される、条項18ないし20のうちいずれか一項に記載のコンピュータ可読記憶媒体。
〔条項22〕
前記正規化された仮数を計算することは、前記最上位ビットをドロップし、前記二重指数フォーマットの仮数におけるビット数と前記通常浮動小数点の仮数におけるビット数とに基づいて、前記仮数を左にシフトすることをさらに含む、条項21に記載のコンピュータ可読記憶媒体。
〔条項23〕
請求項1ないし12の方法のうち少なくとも1つに従って二重指数フォーマット行列を使用して行列演算を実行することによって生成された結果行列を記憶しているコンピュータ可読記憶媒体。
開示された主題の原理が適用されうる多くの可能な実施形態に鑑み、例示された実施形態は、好ましい例に過ぎず、特許請求の範囲をそれらの好ましい例に限定するものとして解釈されるべきではないことを認識されたい。むしろ、請求される主題の範囲は、以下の特許請求の範囲によって定義される。したがって、これらの請求項の範囲内に入るすべてを本発明として請求する。
【国際調査報告】