JP2021174558A - Int9量子化のためのシステム及び方法 - Google Patents
Int9量子化のためのシステム及び方法 Download PDFInfo
- Publication number
- JP2021174558A JP2021174558A JP2021076849A JP2021076849A JP2021174558A JP 2021174558 A JP2021174558 A JP 2021174558A JP 2021076849 A JP2021076849 A JP 2021076849A JP 2021076849 A JP2021076849 A JP 2021076849A JP 2021174558 A JP2021174558 A JP 2021174558A
- Authority
- JP
- Japan
- Prior art keywords
- data
- format
- value
- integer
- result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000011002 quantification Methods 0.000 title 1
- 238000010801 machine learning Methods 0.000 claims abstract description 48
- 238000012545 processing Methods 0.000 claims abstract description 35
- 238000004364 calculation method Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 4
- 239000011159 matrix material Substances 0.000 description 72
- 238000013139 quantization Methods 0.000 description 22
- 230000001788 irregular Effects 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 238000013507 mapping Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013506 data mapping Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computational Linguistics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
- Image Processing (AREA)
- Memory System (AREA)
Abstract
【課題】メモリに格納されるデータを第1のフォーマットから第2のフォーマットに変換する方法を提供する。【解決手段】方法は、ダブルデータレート(DDR)メモリに格納されるデータのビットの数を1ビット分拡張して、拡張されたデータを形成する段階と、DDRに格納されるデータが符号付きであるか、符号なしデータであるかを判定する段階と、データが符号付きであると判定したことに応じて、拡張されたデータの最上位ビットに符号値が追加され、データは、拡張されたデータの下位ビットにコピーする段階と、を含む。データが符号なしであると判定したことに応じて、データは、拡張されたデータの下位ビットにコピーされ、最上位ビットは、符号なしの値、例えば、ゼロに設定される。拡張されたデータは、機械学習コンピュータアレイの処理タイルのオンチップメモリ(OCM)に格納される。【選択図】図3A
Description
ハードウェアベースの機械学習(ML)システムは、典型的には、マルチコア/サブシステム(ブロック及びタイル)を含み、それぞれ独自の処理ユニット及びオンチップメモリ(OCM)を有する。MLシステムは、様々な計算のために量子化された数値を処理し得る。例えば、データが様々なML演算のために処理ユニットにより処理されることができるように、メモリユニット、例えば、ダブルデータレート(DDR)メモリに格納されている量子化データが処理タイルに伝送され得る。
一般に、浮動小数点数(データ)は、例えば、DDR内のストレージ、及び、例えば、MLシステムによる後続の処理のために量子化データフォーマットに変換される。量子化フォーマットは、限定されるものではないが、算術論理演算ユニット(ALU)計算において用いられる符号付き整数、符号なし整数などを含み得る。様々な計算のために、量子化フォーマットタイプの混合が、例えば、MLシステムにより用いられることが多い。
残念なことに、現在のところ、オフセットを導入することなく量子化フォーマットタイプの混合に対してALU計算を実行するためのメカニズムは存在していない。したがって、各オペランドのフォーマットタイプは、量子化フォーマットタイプの混合がALU計算において用いられる場合に追跡され、ALU計算に関する複雑さ及びレイテンシを増加させる。さらに、MLシステムにおいて、整数値は、処理ユニットに入力される前に再スケーリングされる必要があり得る。しかしながら、プロセッサにおける数学的除算は、時間が掛かり、時間効率が悪いことが多い。
関連技術前述の例及びそれに関連する限定事項は、例示を目的としたものであり、排他的なものではない。関連技術の他の限定事項は、明細書から得られる解釈及び図面から得られる知識により明らかとなるだろう。
添付の図と共に読まれるときに、本開示の態様が以下の詳細な説明から最も理解される。産業における慣例に従って、様々な特徴は一定の縮尺で描かれていないことに留意する。実際には、様々な特徴の寸法は、説明を明確にするために、任意に大きくなったり、小さくなったりし得る。
以下の説明では、本主題の異なる特徴を実装するように、多くの異なる実施形態又は例を提供する。コンポーネント及び配置の特定の例が、本開示を簡略化するように以下に説明される。これらは、もちろん、例に過ぎず、限定することを目的とするものではない。さらに、本開示は、様々な例において、参照符号及び/又は文字を繰り返すことがある。この繰り返しは、簡略かつ明確にすることを目的とするものであり、それ自体において、説明される様々な実施形態及び/又は構成の間の関係を定めるものではない。
様々な実施形態がより詳細に説明される前に、そのような実施形態における要素が異なり得るので、実施形態が限定的なものではないことが理解されたい。本明細書で説明及び/又は図示される特定の実施形態が、特定の実施形態から容易に分離され得る、及び、任意には、いくつかの他の実施形態のいずれかと組み合わせられ得る、又は、本明細書において説明されるいくつかの他の実施形態のいずれかにおける要素に置き換えられ得る要素を有することが、同様に理解されたい。本明細書で用いられる用語は、一定の概念を説明する目的であり、用語は限定することを目的としたものではないことが、また理解されたい。そうではないと規定されない限り、本明細書において用いられるすべての技術及び科学的用語は、実施形態が属する技術分野において一般的に理解されるものと同じ意味を有する。
機械学習(ML)のための新たなプログラマブルハードウェアアーキテクチャが提案され、少なくともホスト、メモリ、コア、データストリーミングエンジン、命令ストリーミングエンジン及びインタフェースエンジンを含む。メモリは、限定されるものではないが、int8、uint8などを含む量子化フォーマットで浮動小数点数を格納するように構成されている。いくつかの実施形態によれば、メモリに格納される量子化データは、int9フォーマットに変換されることにより、異なる量子化データフォーマットタイプ、例えば、一様にint8、uint8などを表し、同様に、オフセット計算を実行する必要性を排除しつつ、データの対称量子化(すなわち、量子化はゼロを基準にして対称である)を提供する。データをint9フォーマットタイプに変換することは、推論エンジンが、量子化オペランドに対するフォーマットタイプの追跡を維持することを必要とせずに、ホモジニアスint9フォーマットタイプのオペランドに対してALU計算を実行することを可能にすることにより、複雑さを簡略化し、同様に、結果として、より速い処理時間をもたらすことが理解される。
いくつかの実施形態において、メモリユニット、例えば、DDRからデータが読み出される場合、8ビット数値は、非限定的な例として、メモリユニットに格納される数値がint8であるか、uint8であるかに基づいて、int9フォーマットタイプに変換される。いくつかの実施形態において、9ビットが用いられ、int8フォーマットタイプは、int9フォーマットタイプへの符号拡張版であり、uint8フォーマットタイプは、9ビットのデータの最下位ビットにコピーされ、その最上位ビット(すなわち、ビットオーダ9)は、符号なしである、例えば、ゼロに設定される。8個のビットは、フルint9レンジを格納するのに十分ではないので、ソフトウェアコンポーネントは、メモリユニット、例えば、8ビットDDRに書き込まれるint9の値が、int8、uint8などの適正レンジ内にあることを確実し得ることが理解される。
いくつかの実施形態において、ソフトウェアコンポーネントは、int9数値のレンジをint8、uint8などのレンジ内となるように制限する演算を実行する、又は、代替的に、int9数値に対する演算を実行して、それを、1つはint8レンジ内にあり、もう1つはuint8レンジ内にある2つのint9数値として表すように構成される。1つはint8レンジ内にあり、もう1つはuint8レンジ内にある2つのint9数値として、int9数値を表すことは、情報を保存しつつ、int9数値の最下位ビットが8ビットDDRにコピーされることを可能にする。
いくつかの実施形態において、プログラマブルハードウェアアーキテクチャのコアは、ホストから受信したML演算及び/又はデータに対する複数のMLコマンド/命令を解釈し、受信したMLコマンドにおけるデータに基づいて、ストリーミング及び推論エンジンのアクティビティを調整するように構成される。推論エンジンは、密演算エンジン及び不規則演算エンジンを含んでよい。密演算エンジンは、通常の演算、例えば、行列演算、例えば、乗算、行列操作、tanh、シグモイドなどで、密なデータを効率的に処理するために最適化されるエンジンである。一方、不規則演算エンジンは、不規則演算、例えば、メモリトランスポーズ(memory transpose)、不規則なデータ構造(例えば、ツリー、グラフ及び優先キュー)に対する演算で、散発的データを効率的に処理するために最適化されるエンジンである。いくつかの実施形態によれば、コアは、処理されるホストから受信される命令のいくつかを調整してよい。いくつかの実施形態において、コアは、汎用プロセッサ、例えば、CPUであってよい。
いくつかの実施形態において、コアは、具体的には、コアと推論エンジンとの間で、効率的な実行のために複数のMLコマンドを分割するように構成される。推論エンジンにより実行されるMLコマンド及び関連データは、推論エンジンへの効率的なストリーミングのために、コア及びメモリから命令ストリーミングエンジン及びデータストリーミングエンジンに伝送される。上述したように、メモリユニットから読み出されるデータは、int9フォーマットに変換される。データ及び命令ストリーミングエンジンは、コアから受信したプログラミング命令に応じて、1つ又は複数のデータストリーム及びMLコマンドを推論エンジンに送信するように構成される。推論エンジンは、命令/データストリーミングエンジンから受信したプログラミング命令に従って、ML演算のためにデータ/命令ストリームエンジンから受信した命令/データストリームを処理するように構成される。
推論エンジンの密演算エンジンのデータ入力は、一定の演算、例えば、tanh、シグモイドなどの前に再スケーリングされる必要があり得ることが理解される。効率的な方式で再スケーリングするために、int32フォーマットに入力されるデータは、整数スケール値で乗算され、後でシフトされる。計算の可能な限り最も高い精度及び最も低いエラーを実現するために、整数スケール値とシフト値との間の関係は、整数データ、例えば、int32を格納するレジスタのサイズに基づいて取得される。
ここで、図1を参照すると、機械学習をサポートするように構成されるハードウェアベースのプログラマブルシステム/アーキテクチャ101の図の例が示されている。図は、コンポーネントを機能的に分離したものとして示しているが、そのような表現は、例示の目的に過ぎない。この図に描かれているコンポーネントは、恣意的に組み合わされ、別個のソフトウェア、ファームウェア及び/又はハードウェアコンポーネントに分割され得ることが明らかである。さらに、そのようなコンポーネントは、それらがどのように組み合わされ、又は、分割されるかに関わらず、同じホスト又は複数のホスト上で実行でき、複数のホストが1つ又は複数のネットワークにより接続され得ることも明らかである。アーキテクチャ101内のエンジンのそれぞれは、1つ又は複数のマイクロプロセッサ、及び、様々な機械学習演算のためにユーザによりプログラミングされたデータ及びソフトウェア命令を格納するオンチップメモリユニットを含む専用のハードウェアブロック/コンポーネントである。以下で詳細に説明されるように、ソフトウェア命令がマイクロプロセッサにより実行される場合、ハードウェアコンポーネントのそれぞれは、一定の機械学習機能を訓練するための専用ハードウェアコンポーネントになる。いくつかの実施形態において、アーキテクチャ101は、単一のチップ、例えば、システムオンチップ(SOC)である。
図1の例において、アーキテクチャ101は、メモリ(例えば、DDR)120及びコアエンジン130に連結されるホスト110を含んでよい。メモリ120は、外部データを受信するために、ダイレクトメモリアクセス(DMA)エンジン(示されていない)及びネットワークインターフェースコントローラ(NIC)(示されていない)に連結されてよい。メモリ120は、データストリーミングエンジン140に内部で接続されてよい。コア130は、データストリーミングエンジン140に連結される命令ストリーミングエンジン150に連結される。コア130はまた、汎用プロセッサ165に連結される。いくつかの実施形態において、汎用プロセッサ165は、コア130の一部であり得る。命令ストリーミングエンジン150及びデータストリーミングエンジン140は、密演算エンジン161及び不規則演算エンジン163を含む推論エンジン160に連結される。推論エンジン160は、様々な計算を実行するためのアレイを含んでよいことが理解される。推論エンジン160において様々な計算を実行するためのアレイの任意の説明は、例示の目的としており、実施形態の範囲を限定するものとして解釈されるべきではないことが理解される。例えば、いくつかの実施形態において、様々な計算を実行するためのアレイは、推論エンジン160以外に存在してよい。
外部データは、浮動小数点フォーマット、例えば、32ビット浮動小数点であってよいことが理解される。したがって、データがメモリ120、例えば、8ビットDDRに格納されている場合、当該データは、整数フォーマットタイプ、例えば、int8、uint8などに変換されてよい。uint8は、0から255のレンジにあり、一方、int8は、−128から127のレンジにあることが理解される。一方、int9は−256から255のレンジにあり、したがって、任意のオフセット計算なしにint8及びuint8の両方を表すことができる。uint8レンジ及びint8レンジとして、int9を用いることは、データが標準的な8ビットDDRにコピーされることを可能にする。32ビット浮動小数点及び8ビットDDRの使用に関する説明は、例示の目的であり、実施形態の範囲を限定するものとして解釈されるべきではないことが理解される。浮動小数点データは、最終的に、int8又はuint8の代わりに、int9に量子化される。さらに、int9レンジは、正の値及び負の値の両方をカバーしているので、結果的に、ゼロオフセットとなり、MLシステムにおけるint9数値の再スケーリングをさらに簡略化する。したがって、メモリ120、例えば、8ビットDDRからデータが読み出されている場合、データは、int9フォーマットに変換される。データがint9フォーマットに変換されると、異なるフォーマットタイプの混合が計算において用いられる場合、オペランドのタイプを追跡する必要がないことが理解される。例えば、int9を用いることは、実行される計算におけるオペランドがint8であるか、uint8であるかなどを追跡する必要性を排除する。
いくつかの実施形態において、メモリ120、例えば、DDRは、浮動小数点数、例えば、32ビット浮動小数点を4つの8ビット値として格納してよいことがさらに理解される。したがって、メモリ120、例えば、8ビットDDRからオンチップメモリにデータが読み込まれる場合、汎用プロセッサ165又は不規則演算エンジン163のいずれかにおいて、32ビット浮動小数点からint9へと量子化が実行される。いくつかの実施形態において、汎用プロセッサ165及び/又は不規則演算エンジン163内のレジスタは、32ビット浮動小数点値を保持する32ビット幅を格納する。したがって、MLシステムにおける使用のために、浮動小数点数はint9数値に変換されてよい。しかしながら、32ビット浮動小数点数は、まず、int9フォーマットに変換するためにスケーリングされる。例えば、適切なスケールは以下のとおりであってよい。スケール=(浮動小数点の上限レンジ−浮動小数点の下限レンジ)/(int9の上限レンジ−int9の下限レンジ)=(エンド−(−エンド))/(255−(−255))=2エンド/(2(255))=エンド/255。
同じスケールがint9の下限レンジの−256を含むように拡張される場合に用いられ得ることが理解される。図2Aは、32ビット浮動小数点のint9のフルレンジへの対称量子化及びマッピングを示し、一方、図2Bは、int9の−256を含むように図2Aのマッピングを示すことが理解される。図示されるように、図2A及び図2Bの両方に対して同じスケールが用いられてよい。図2Cは、32ビット浮動小数点をint9及びint9レンジ内のint8の表現にマッピングすることを示す。int9レンジ内のint8の表現に対するスケールは、上記で判定されたスケールとは異なることが理解される。いくつかの実施形態において、9ビットを用いてint8を表現するためのスケールは、以下のとおりであってよい。スケール=(浮動小数点の上限レンジ−浮動小数点の下限レンジ)/(int8の上限レンジ−int8の下限レンジ)=(エンド−(−エンド))/(127−(−127))=エンド/127。
図2Dは、32ビット浮動小数点をint9及びint9レンジ内のuint8の表現にマッピングすることを示す。int9レンジ内のuint8の表現は、図2A及び図2Bのものと同じスケールを有することが理解される。
いくつかの実施形態において、メモリ120から、アレイ、例えば、推論エンジン160などにデータを転送する場合、転送されるデータは、転送されるデータがint8であるか、uint8であるかに応じて拡張された符号又は拡張されたゼロである。すなわち、データは、あるフォーマットタイプ、例えば、int8、uint8などから、別のフォーマットタイプ、例えば、int9に変換される。非限定的な例として、データをint8又はuint8からint9フォーマットに変換する場合、8ビットのデータは、1ビット分、ビットの数を拡張することにより、9ビットのデータに変換される。変換されるデータが符号付き、例えば、int8であるか、又は、符号なし、例えば、uint8であるかが判定される。変換されるデータが符号付きである場合、int9に対する9ビットのデータの最上位ビットは拡張された符号であり、変換されるデータが符号なしである場合、int9に対する9ビットのデータの最上位ビットはゼロに設定される。int8又はuint8が、int9データの下位ビット(すなわち、下位8ビットオーダ)に直接コピーされることが理解される。int9データは、int8又はuint8フォーマットタイプと比較して、拡張されたデータと称されてよいことが理解される。この例においてint9フォーマットタイプである拡張されたデータは、演算対象の推論エンジン160に格納される。いくつかの実施形態において、拡張されたデータは、MLコンピュータアレイの処理タイルにより処理されるべく、推論エンジン160のオンチップメモリ(OCM)に格納されてよい。いくつかの実施形態において、浮動小数点数、例えば、32ビット浮動小数点は、整数表現、例えば、int9に変換されてよいことが理解される。1つの例示的な実施形態において、浮動小数点数は、int9フォーマットタイプに変換されるべく、図2A〜図2Dに図示されるように、適切に量子化及びスケーリングされる。図示されるように、あるスケーリング値は、int9フォーマットタイプのint8に対する浮動小数点数を表すために用いられてよく、一方、異なるスケーリング値は、int9フォーマットタイプのuint8に対する浮動数を表すために用いられてよい。メモリユニット120、例えば、DDRに格納される16ビット浮動小数点数は、メモリユニット120から推論エンジン160のOCMに格納される場合と同じままであることが理解される。非限定的な例として、16ビット浮動小数点の下位7ビットは、その仮数の下位7ビットと同じであり、8番目のビットは、拡張されるが、演算において用いられることはなく、残りの仮数ビットは、9番目及び10番目のビットの後に指数が続き、及び、符号付きビットの後に、任意の演算において用いられない追加の拡張ビットが続く。
推論エンジン160は、複数の行及び列、例えば、8行×8列の2次元アレイで配置される複数の処理タイルを含んでよいことが理解される。各処理タイルは、少なくとも1つのOCM、1つのPODユニット及び1つの処理エンジン/エレメント(PE)を含んでよい。ここで、処理タイル内のOCMは、ストリーミング方法でデータストリーミングエンジン140からデータを受信するように構成される。上記で説明したように、受信されたデータは、int9フォーマットであってよいことが理解される。OCMは、処理タイルごとのデータに対する効率的なローカルアクセスを可能にする。処理ユニット、例えば、POD及びPEは、高度に専門化されたタスク、例えば、OCMにおいて受信されたデータに対して、ML演算の密又は疎計算をそれぞれ実行するように構成される。
それぞれの処理タイルのOCMは、ML演算と関連付けられた様々なALU演算に対するint9フォーマットタイプのデータを受信してよいことが理解される。いくつかの実施形態において、メモリ120に格納されるデータのフォーマットタイプ、例えば、符号付きであるか符号なしであるかどうかは、適切な処理ユニット、例えば、処理タイルのそれぞれのPOD/PEによる実行のためにストリーミングされるように、適切な命令がスケジューリングされ得るように追跡されることが理解される。すなわち、処理タイルにより、int9フォーマットで受信されるデータに対して、様々なALU演算が実行される。int9フォーマットで受信されるデータは、様々なALU演算のオペランドであってよい。int9フォーマットタイプでの様々なALU演算の結果は、そのそれぞれのOCMに格納されてよい。
いくつかの実施形態において、推論エンジン160は、通常の演算、例えば、行列演算、例えば、乗算、行列操作、tanh、シグモイドなどで、密なデータ、例えば、int9フォーマットのメモリ120から受信したデータを効率的に処理するために最適化される密演算エンジン161を含む。一方、推論エンジン160はまた、不規則演算、例えば、メモリトランスポーズ(memory transpose)、追加の演算、不規則なデータ構造(例えば、ツリー、グラフ及び優先キュー)に対する演算で、例えば、int9フォーマットタイプの散発的データを効率的に処理するために最適化される不規則演算エンジン163を含んでよい。いくつかの実施形態によれば、コア130は、汎用プロセッサ165、例えば、CPUなどにより処理されるホスト110から受信される命令のいくつかを調整してよい。
いくつかの実施形態において、コア130は、一般的な高水準言語を通じて書き込まれる任意のソフトウェアコードを実行するように構成される。コア130は、複数のパフォーマンス非クリティカル演算、例えば、データ/命令予備作業、データ収集、データマッピングなどを処理するように構成される。いくつかの実施形態において、パフォーマンス非クリティカル演算は、コア130により処理されることができ、パフォーマンスクリティカル演算(例えば、行列乗算)は、推論エンジン160により処理されることができるように、コア130は、受信したMLコマンドをパフォーマンスクリティカル及び非クリティカル演算/タスクに分類するように構成されてもよい。すなわち、コア130は、コア130と推論エンジン160との間で、それらの効率的な実行のために複数のMLコマンドを分割するように構成される。いくつかの実施形態において、コア130は、処理のために、複数のMLコマンド(タスク又はサブタスクとも称される)を様々なコンポーネント、例えば、推論エンジン160に割り当てる/分割するように構成されてもよい。いくつかの実施形態において、コア130又はアーキテクチャ101における他のコンポーネント、例えば、推論エンジン160によりアクセスされ、用いられるように、コア130は、タスク/コマンド、データ、データが処理された後の結果などを格納するために、メモリ120に1つ又は複数の場所を割り当てるように構成される。したがって、コア130及び推論エンジン160は、一定のMLコマンド又は演算を実行するためにホスト110に依存又は要求する代わりに、MLアルゴリズム全体、及び、それらによる演算を実行するように構成される。プログラマブルハードウェアアーキテクチャ101でのML演算全体をサポート及び実行することにより、コア130は、データをホスト110に転送して、任意のサポートされていないML演算を実行するために戻すパフォーマンスオーバヘッドを排除し、ホスト110に対する負担を軽減して、より高いパフォーマンスを実現する。
いくつかの実施形態において、推論エンジン160により実行される、例えば、それらのint8フォーマットのMLコマンド及び関連データは、推論エンジン160に対する効率的なストリーミングのために、コア130及びメモリ120から、命令ストリーミングエンジン150及びデータストリーミングエンジン140に伝送される。いくつかの実施形態において、データ/命令ストリーミングエンジン140−150は、コア130から受信したMLコマンドに応じて、1つ又は複数のデータストリーム及びプログラミング命令を推論エンジン160に送信するように構成される。いくつかの実施形態において、メモリ120に格納されるデータのフォーマットタイプ、例えば、符号付きであるか符号なしであるかどうかは、推論エンジン160の密演算エンジン161及び/又は不規則演算エンジン163にストリーミングされるように、適切な命令がスケジューリングされ得るように追跡されることが理解される。すなわち、推論エンジン160内のエンジンにより、int9フォーマットで受信されるデータに対して、様々なALU演算が実行される。int9フォーマットで受信されるデータは、様々なALU演算のオペランドであってよい。int9フォーマットタイプでの様々なALU演算の結果は、推論エンジン160の密演算エンジン161及び/又は不規則演算エンジン163内に格納されてよい。いくつかの実施形態において、結果は、MLコンピュータアレイの処理タイルの適切なOCMに格納されてよい。
いくつかの実施形態において、推論エンジン160内のALU演算の結果は、推論エンジン160内のそれぞれの処理タイルのメモリコンポーネント、例えば、OCM内に格納されることが理解される。推論エンジン160に格納される結果は、メモリユニット120、例えば、DDRへの格納のために伝送されてよい。しかしながら、結果を格納する前に、結果の値がメモリユニット120内のデータのフォーマットタイプの上限、例えば、最大値を超える場合には、当該値がデータに対する上限レンジに調整されてよく、結果の値がメモリユニット120の下限レンジより小さい場合、当該値がデータに対する下限レンジ、例えば、最小に調整されてよい。それぞれの処理タイルのOCMからメモリユニット120に結果を格納する場合、int9結果の最上位ビットがドロップされることが理解される。
いくつかの実施形態において、それぞれのOCMに格納される処理の結果は、格納のために伝送されて、メモリユニット120、例えば、DDRに戻されてよいことが理解される。しかしながら、結果を格納する前に、結果の値がメモリユニット120内のデータのフォーマットタイプの上限、例えば、最大値を超える場合、当該値がデータに対する上限レンジに調整されてよく、結果の値がメモリユニット120の下限レンジより小さい場合、当該値がデータに対する下限レンジ、例えば、最小に調整されてよい。すなわち、データは、適正レンジ、例えば、int8レンジ、uint8レンジ内などにするためにクランプされてよい。それぞれの処理タイルのOCMからメモリユニット120に結果を格納する場合、int9結果の最上位ビットがドロップされることが理解される。さらに、推論エンジン、例えば、推論エンジン160のそれぞれのOCMからメモリユニット120、例えば、DDRにデータを転送する場合に、int9データフォーマットタイプが、適切なフォーマットタイプ、例えば、メモリユニット120内のint8フォーマットであったデータに関してはint8、メモリユニット120内のuint8フォーマットであったデータに関してはuint8などと、正確に解釈されることができるように、ソフトウェアモジュールは、メモリユニット120に格納されるデータが、符号付きであったか、符号なしであったかを追跡してよいことが理解される。
ここで、図3A及び図3Bを参照すると、図1〜図2Dにおいて説明したように、メモリ、例えば、DDRに格納されるデータを、第1のフォーマット、例えば、int8、uint8、浮動小数点などから第2のフォーマットタイプ、例えば、int9に変換することをサポートする処理の例が示されている。図は、図示の目的のために、特定の順序で機能的な段階を示しているが、当該処理は、段階の任意の特定の順序又は配置に限定されることはない。当業者であれば、この図に描かれている様々な段階が、様々な方法で、省略され、再配置され、組み合わせられ、及び、適合され得ることを理解する。
図3A及び図3Bに示されるように、段階310において、メモリユニット120、例えば、DDRに格納されるビットの数は、拡張されたデータ、例えば、int9を形成するために、1ビット分拡張される。したがって、8ビットを含むint8又はuint8は、9ビットに拡張される。いくつかの実施形態において、メモリユニット120に格納されるデータは浮動小数点数であることが理解される。段階320において、メモリ120に格納されるデータが、符号付き、例えば、int8であるか、又は、符号なし、例えば、uint8であるかが判定される。段階330において、データが符号付きであると判定したことに応じて、拡張されたデータは、符号拡張される。一方、段階340において、データが符号なしであると判定したことに応じて、拡張されたデータの最上位ビットは、ゼロに設定される。段階350において、データは、下位ビットに、したがって、最上位ビットを除くすべての順位のビットにコピーされる。段階360において、拡張されたデータは、推論エンジン160、例えば、推論エンジン160のOCMにコピーされる。段階370において、メモリユニット120、例えば、DDRに格納されるデータが符号付きであるか、符号なしであるかが追跡され、したがって、段階380において、拡張されたデータに対する適切な命令がスケジューリングされることが理解される。段階382において、拡張されたデータに対して、様々なALU演算が実行されてよい。段階384において、ALU演算の結果がOCMに格納される。段階386において、OCMに格納されたALU演算の結果はまた、メモリユニット120、例えば、DDRに格納/コピーされる。段階388において、結果をOCMからDDRに格納する前に、結果の最上位ビットがドロップされる。任意には、段階390において、メモリユニット120に格納される数字フォーマットタイプのレンジに基づいて、OCMからメモリユニット120、例えば、DDRに格納する前に、ALUの結果の値が調整されてよいことが理解される。例えば、OCMに格納される結果の値が、メモリユニット120に格納される数値タイプ、例えば、int8又はuint8などの上限レンジを超える場合、数値、したがって、int8、uint8などの最大又は上限レンジに対して、結果が調整及び変更される。
図4は、PODのアーキテクチャの例の図を示す。図4に示されるコンポーネントの数、コンポーネントのサイズ及びビットの数、行列サイズなどは、例示の目的であり、実施形態の範囲を限定することを目的としたものではないことが理解される。以下の説明では、非限定的な例として行列乗算が用いられるが、PODはまた、ML演算の他のタイプの密計算タスクを実行するように構成されることが理解される。図4の例では、PODは、様々なコンポーネント、例えば、レジスタ、tanh/シグモイドユニット614などへのデータ/命令のロードを制御するように構成される計算POD命令制御699を含む。PODは、X個の行及びY個の列を有する2次元アレイである行列乗算ブロック602を含み、アレイ内の各エレメント/セルは、一定の数のレジスタ(例えば、インターロックされたパイプラインステージを用いないMIPS又はマイクロプロセッサ)を有することが理解される。行列乗算ブロック602は、2つの行列、X個の行及びZ個の列で構成される行列Aと、Z個の行及びY個の列で構成される行列Bとを乗算して、X個の行及びY個の列で構成される行列Cを生成するように構成される。たとえ、メモリユニット120に格納されるデータが異なるタイプのフォーマット、例えば、int8、uint8、浮動小数点などであったとしても、乗算されるデータは、それぞれのOCMに格納されるint9フォーマットタイプであってよいことが理解される。
図4の例において、PODは、行列乗算のために行列乗算ブロック602に行列データを供給する3つのタイプのレジスタ、すなわち、Aレジスタ604、Bレジスタ606及びCレジスタ608をさらに含む。Aレジスタ604は、レジスタのバンク、例えば、m個のレジスタを含み、それぞれ、行列乗算ブロック602のアレイの列に供給されるA行列のある行/列を維持するように構成される。各Aレジスタは、複数のエントリ、例えば、k個の要素を有してよく、それぞれは、一定の数のビット幅を有し、サイクルごとのある読み出し又は書き込み演算をサポートする。たとえ、メモリユニット120に格納されるデータが異なるフォーマットタイプ、例えば、int8、uint8、浮動タイプなどであったとしても、データは、int9フォーマットタイプで各レジスタにあってよいことが理解される。すなわち、データは、PE及び/又はPOD演算のALU計算において用いられる処理タイルのそれぞれのOCMに格納されるように、メモリユニット120のあるフォーマットから異なるフォーマットタイプ、例えば、int9に変換される。エントリは、各Aレジスタが、それらが行列乗算ブロック602による計算のために必要となる前にA行列の次の部分に前もってフェッチすることを可能にする。Bレジスタ606は、レジスタのバンク、例えば、n個のレジスタを含み、それぞれは、乗算ブロック602のアレイの行に供給されるB行列のある行/列を維持するように構成される。Aレジスタ604と同様に、各Bレジスタは、複数のエントリ、例えば、k個の要素を有してよく、それぞれは、一定の数のビット幅を有し、サイクルごとのある読み出し又は書き込み演算をサポートする。エントリは、各Bレジスタが、それらが行列乗算ブロック602による計算のために必要となる前にB行列の次の部分に前もってフェッチすることを可能にする。Cレジスタ608は、乗算ブロック602により生成される行列−乗算の結果−C行列−を保持するように構成される。Cレジスタ608は、複数のバンクを含み、それぞれは、C行列のある行/列を維持するように構成される。C行列は、m×n成分を有するように構成される。
行列乗算処理中に、行列乗算ブロック602は、(行列の各行又は列を読み出す代わりに)OCMから行列A及びBの成分を一回だけA及びBレジスタにそれぞれ読み込むように構成され、したがって、OCMへのメモリアクセス時間を節約する。具体的には、各行列の乗算演算は固有の構造を有し、第1の行列の行が第2の行列におけるすべての列と乗算され、第2の行列における列が第1の行列におけるすべての行と乗算される。行列乗算ブロック602が行列乗算演算を実行するので、Aレジスタ604の各行は同じままであり、一方、Bレジスタ606の列は、Aレジスタ604内の行で乗算されるように、一度に一つずつ行列乗算ブロック602に供給される。同時に、Bレジスタ606の各列は同じままであり、一方、Aレジスタ604の行は、Bレジスタ606の列で乗算されるように、一度に一つずつ行列乗算ブロック602に供給される。したがって、行列乗算ブロック602は、同時に、第1の行列の各行を第2の行列のすべての列と乗算し、第2の行列の各列を第1の行列のすべての行と乗算するように構成される。これらの乗算からのこれらの出力は、行列乗算処理が完了するまで、Cレジスタに蓄積及び格納される。
図4の例に示されるように、Aレジスタ604、Bレジスタ606及びCレジスタ608は、それぞれ、対応するOCMストリーマ603、605又は607とそれぞれ関連付けられており、OCMストリーマのそれぞれは、プログラミングされており、行列乗算演算が、簡素化された方法で行列乗算ブロック602により実行され得ることを確実にするために、データをOCMから対応するレジスタにストリーミングするように構成される。各OCMストリーマは、読み込み対象のOCMのアドレスレンジと、次の読み出しのために追跡されるストライドとを有する。A又はBタイプのレジスタは、バンクごとの次のライン準備完了信号をその対応するストリーマに送信するように構成され、信号のビットパターンは、どのバンクがデータの次のラインを要求するかを示している。A又はBレジスタの対応するストリーマは、データの対応するラインをOCMからレジスタに送信することにより、読み出された信号に応答する。ストリーマは、伝送されるデータの最後のラインを送信した場合に、その対応するレジスタに完了信号を送信する。レジスタのバンクのすべてがデータのラインを有する場合、A又はBレジスタは、A又はBレジスタの次のセットが行列乗算のために行列乗算ブロック602に読み込まれる準備ができているという準備信号を行列乗算ブロック602に送信する。いくつかの実施形態において、各レジスタバンクは、どの値が有効であり、演算されるべきかを行列乗算ブロック602に通知する有効ビットを有する。
行列乗算が完了した場合、例えば、A行列の行の終わり及びB行列の列の終わりに達した場合、行列乗算ブロック602は、Cレジスタ608のエントリ内のすべての蓄積が完了し、エントリがその対応するストリーマ607を介してOCMにライトバックされる準備ができていることをCレジスタ608に通知する。Cレジスタ608の各バンクは、次に、データをOCMに送信する。OCMがCレジスタ608のバンクからのデータを受け入れる準備ができていない場合、PEがバンクからのデータを受け入れる準備ができるまで、送信が引き延ばされ、次のサイクルで再試行される。いくつかの実施形態において、Cレジスタ608は、データと共に予めロードされる、又は、次の行列乗算演算中の次のセットの蓄積の前に、ゼロにリセットされる。そのような予めロードすることは、次の行列乗算の一部としてバイアスを加えることを可能にする。いくつかの実施形態において、各PEは、PODの行列乗算ブロック602から出力C行列を受け入れ、処理し、OCMに書き込むように構成される。
一例によれば、それぞれのOCMに格納される処理の結果は、格納のために伝送されて、メモリユニット120、例えば、DDRに戻されてよい。しかしながら、結果を格納する前に、結果の値がメモリユニット120内のデータのフォーマットタイプの上限、例えば、最大値を超える場合、当該値がデータに対する上限レンジに調整されてよく、結果の値がメモリユニット120の下限レンジより小さい場合、当該値がデータに対する下限レンジ、例えば、最小に調整されてよい。すなわち、データは、適正レンジ、例えば、int8レンジ、uint8レンジ内などにするためにクランプされてよい。それぞれの処理タイルのOCMからメモリユニット120に結果を格納する場合、int9結果の最上位ビットがドロップされてよいことが理解される。さらに、推論エンジン、例えば、推論エンジン160のそれぞれのOCMからメモリユニット120、例えば、DDRにデータを転送する場合、int9データフォーマットタイプが、適切なフォーマットタイプ、例えば、メモリユニット120内のint8フォーマットであったデータに関してはint8、メモリユニット120内のuint8フォーマットであったデータに関してはuint8などと、正確に解釈されることができるように、ソフトウェアモジュールは、メモリユニット120に格納されるデータが、符号付きであったか、符号なしであったかを追跡してよいことが理解される。
いくつかの実施形態において、推論エンジン160は、各PEによるこれら後の行列乗算演算を対応するPODによる行列乗算演算と融合/統合するように構成されることで、まずOCMに出力を伝送及び保存して、これら後の行列乗算演算に対して再びOCMからC行列を読み出すことなく、行列乗算ブロック602からの出力に対して即座にこれら後の行列乗算演算が実行される。OCMへのラウンドトリップをバイパスすることにより、後の行列乗算演算と行列乗算演算との融合は、時間を節約し、推論エンジン160の効率を向上させる。例えば、いくつかの実施形態において、追加の通常の演算、例えば、正規化線形ユニット(ReLU)、量子化などは、出力C行列に対して必要とされ得ることが理解される。したがって、スイッチングメカニズムは、追加の通常の演算が必要となるか否かを判定するために、PODアーキテクチャ内に統合されてよく、もし必要な場合、出力C行列を別のメモリ位置に書き込む代わりに、当該出力が操作され得る。例えば、正規化線形演算が必要とされる場合、出力C行列は、C行列に対してReLU演算を実行するように構成されるReLUユニット601にストリーミングされる。同様に、量子化が必要とされる場合、出力C行列又はReLUユニット601の出力は、C行列又はReLU演算からの結果を量子化するように構成される量子化ユニット612にストリーミングされる。
いくつかの実施形態において、量子化/再量子化演算に必要とされるスケール値、シフト値及び/又はオフセット値は、コア130により静的に設定されてよく、異なるML演算とは異なっていてよい。いくつかの実施形態において、これらの値は、コアにダウンロードされるMLモデルの一部であってよく、ML演算に対応する値は、量子化演算が開始する前に、モデルから読み出され、適切なレジスタに書き込まれてよい。量子化612及び/又はtanh/シグモイドユニット614への入力ために、及び、後に、そのそれぞれのOCMブロックへのダイレクトストレージのために、再量子化は、Cレジスタ608に格納された出力値の再スケーリングを実行することが理解される。出力データ、例えば、この例ではCレジスタ608に対して、再量子化が実行されてよいが、他の例では、他のレジスタからの他の出力に対して再量子化を実行できることが理解される。したがって、Cレジスタ608に格納されたデータに対して再量子化を実行することは、例示の目的であり、実施形態の範囲を限定するものと解釈されるべきではない。いくつかの実施形態において、出力のすべてのエレメントに対して、単一のスケーリング値が適用される。除算演算であるスケーリング演算は、整数乗算及びシフト演算と置き換えられてよいことが理解される。整数乗算の値(整数スケール値とも称される)と、シフト値との間の関係がシステム内の精度及びエラーを決定することがさらに理解される。いくつかの実施形態において、整数スケール値とシフト値との間の関係が取得され、整数スケール値及びその対応するスケール値に対して可能な限り最も大きい値が、乗算(Cレジスタ608からの出力と整数スケール値との乗算)の結果を格納するレジスタのサイズに基づいて選択される。いくつかの実施形態において、Cレジスタ608からの出力は、Vとして示されてよく、量子化乗数は、xとして示されてよく、xは1より大きい又は小さいとすることができる。整数スケール値とシフト値との間の関係が量子化乗数を決定することが理解される。整数スケール値とシフト値との間の関係は、以下の数式(1)により近似的に与えられる。
x〜整数スケール値/(2シフト値) (1)である。したがって、
整数スケール値=int(x*2シフト値) (2)である。最も大きい整数スケール値が、整数乗算の結果を保持するレジスタのサイズにより制限され、したがって、整数スケール値により、Cレジスタ608の出力、例えば、V値が制限されることが理解される。例えば、Vが32ビットであり、レジスタサイズが64ビットである場合、整数スケール値は、最も大きい32ビット整数より小さくなければならず、そうでなければ、オーバフローしてしまう。すなわち、最も大きい可能な値は、2147483647である。他のサイズに対して最も大きい可能な値は異なっていてよく、上記で提供された例は、例示の目的としたものに過ぎず、実施形態の範囲を限定することを目的としたものではないことが理解される。したがって、以下の数式(3)に示される条件が合致することになる。整数スケール値/最も大きい可能な値<1 (3)
x〜整数スケール値/(2シフト値) (1)である。したがって、
整数スケール値=int(x*2シフト値) (2)である。最も大きい整数スケール値が、整数乗算の結果を保持するレジスタのサイズにより制限され、したがって、整数スケール値により、Cレジスタ608の出力、例えば、V値が制限されることが理解される。例えば、Vが32ビットであり、レジスタサイズが64ビットである場合、整数スケール値は、最も大きい32ビット整数より小さくなければならず、そうでなければ、オーバフローしてしまう。すなわち、最も大きい可能な値は、2147483647である。他のサイズに対して最も大きい可能な値は異なっていてよく、上記で提供された例は、例示の目的としたものに過ぎず、実施形態の範囲を限定することを目的としたものではないことが理解される。したがって、以下の数式(3)に示される条件が合致することになる。整数スケール値/最も大きい可能な値<1 (3)
いくつかの実施形態において、可能な限り最大の整数スケール値を取得するために、数式(2)及び(3)が全体的に繰り返される。最初に、シフト値は0であり、各反復に伴って、シフト値は、値、例えば、1、2、5、6、7、11など分インクリメントされる。シフト値は、可能な整数スケール値を決定し、数式(3)により特定される条件が当てはまる限り、反復がもう一回実行される。数式(3)がもはや真ではなくなるまで、処理が繰り返され、その時点で、以前のシフト値及びその対応する整数スケール値が選択される。たとえ、最も大きい以前の整数スケール値及びその対応するスケール値がレジスタのサイズを与えられた最も高い精度を提供するとしても、以前のシフト値及びその対応する整数スケール値のいずれかが選択され得ることが理解される。可能な限り最大の整数スケール値及びその対応するスケール値を選択する上記の処理は、パイソンで示される。
整数スケール値及びその対応するスケール値が選択されると、量子化/再量子化演算が実行されてよいことが理解される。Cレジスタ608の出力は、整数スケール値で乗算される。乗算の結果は、スケーリングされた整数データを形成するために上記で選択されたように、シフト値によりシフトされる。データがスケーリングされると、追加の演算、例えば、tahn演算、シグモイド演算、丸め演算、クリッピング/クランピング演算などが実行されてよい。いくつかの実施形態において、シフト演算に起因して脱落する最上位ビットを考慮することにより、丸め演算が実行され、脱落した最上位ビットに基づいて残りの結果を丸める。スケーリングされた整数データは、整数データに対するレンジに基づいて、さらに調整されてよいことが理解される。例えば、メモリユニット120に格納される整数データがint8である場合、及び、スケーリングされた整数データがint8の上限を超える場合、スケーリングされた整数データは、int8の最大又は上限に変更及び調整される。同様に、メモリユニット120に格納される整数データがuint8である場合、及び、スケーリングされた整数データがuint8の上限を超える場合、スケーリングされた整数データは、uint8の最大又は上限に変更及び調整される。一方、スケーリングされた整数データが、メモリユニット120、例えば、int8又はuint8に格納されるデータの最小又は下限レンジより低い値を有する場合、スケーリングされた整数データは、メモリユニット120内の整数データの最小又は下限レンジに調整及び変更される。
ここで、図5を参照すると、機械学習演算における整数データを再スケーリングするための方法が示される。図5に図示される方法は、図4において説明されたような演算に関する方法のフローであることが理解される。段階510において、数式(1)において説明したように、整数スケール値とシフト値との間の関係が決定される。段階520において、数式(3)に示される条件がもはや真ではなく、したがって、値が1より大きい又はそれに等しくなるまで、シフト値を反復的に増加させ、その対応する整数スケール値が数式(2)に関して取得される。段階530において、数式(3)がもはや真ではなくなる前に、シフト値及びその対応する整数スケール値が選択される。いくつかの非制限的な例において、コンパイル段階中及び推論エンジン160による任意の推論の前に、段階510〜段階530が実行されることが理解される。段階540において、整数値、例えば、int32フォーマットは、例えば、Cレジスタ608から受信される。段階550において、受信した整数値は、選択された整数スケール値で乗算される。段階560において、乗算の結果は、選択した整数スケール値に対応するシフト値分シフトされる。段階570において、さらなる演算、例えば、tanh、シグモイド、丸め、クリッピング、クランピングなどが実行されてよい。段階580において、スケーリングされた整数データの値は、メモリユニット120に格納される整数データのレンジに基づいて調整されてよい。例えば、int8タイプデータがメモリユニット120、例えば、DDRに格納される場合、次に、スケーリングされた整数データがint8データタイプの上限を超える場合、スケーリングされた整数データは、int8タイプデータの最大又は上限値に変更される。同様に、uint8タイプデータがメモリユニット120、例えば、DDRに格納される場合、次に、スケーリングされた整数データがuint8データタイプの上限を超える場合、スケーリングされた整数データは、uint8タイプデータの最大又は上限値に変更される。一方、スケーリングされた整数データが、int8データタイプの下限より小さい場合、スケーリングされた整数データは、メモリユニット120、例えば、DDRに格納されるint8データタイプの最小又は下限に変更される。同様に、スケーリングされた整数データが、uint8データタイプの下限より小さい場合、スケーリングされた整数データは、メモリユニット120、例えば、DDRに格納されるuint8データタイプの最小又は下限に変更される。したがって、レジスタのサイズのサイズに基づいて、より高い精密性及び精度が実現される。
請求項に係る主題の様々な実施形態についての前述の説明は、図示及び説明の目的で提供されている。請求項に係る主題を、開示された正確な形に徹底すること、又は限定することを目的とするものではない。多くの修正及びバリエーションが当業者に対して明らかである。実施形態は、発明の原則及びその実際の用途を最適に説明すべく選ばれ、説明されたが、それにより、関連技術の他の当業者が、請求項に係る主題、様々な実施形態、及び、検討される特定の用途に適する様々な修正を理解することを可能にする。
Claims (25)
- 機械学習(ML)演算のために、メモリに格納されるデータを第1のフォーマットから第2のフォーマットに変換する方法であって、
ダブルデータレート(DDR)メモリに格納される前記データのビットの数を1ビット分拡張して、拡張されたデータを形成する段階と、
前記DDRメモリに格納される前記データが符号付きであるか、符号なしデータであるかを判定する段階と、
前記データが符号付きであると判定したことに応じて、符号値を前記拡張されたデータの最上位ビットに追加し、前記データを前記拡張されたデータの下位ビットにコピーする段階と、
前記データが符号なしであると判定したことに応じて、前記データを前記拡張されたデータの下位ビットにコピーし、前記最上位ビットを符号なしの値に設定する段階と、
機械学習コンピュータアレイの処理タイルのオンチップメモリ(OCM)に、前記拡張されたデータを格納する段階と
を備える方法。 - 前記データは符号なし整数である、請求項1に記載の方法。
- 前記データは符号付き整数である、請求項1に記載の方法。
- 前記データは8ビットであり、前記拡張されたデータは9ビットである、請求項1から3のいずれか一項に記載の方法。
- 前記拡張されたデータはint9データである、請求項1から4のいずれか一項に記載の方法。
- 前記DDRメモリに格納される前記データが符号付きであるか、符号なしであるかを追跡する段階と、
前記データが符号付きであるか、符号なしであるかに基づいて、前記拡張されたデータに対する適切な命令をスケジューリングする段階と
をさらに備える、請求項1から5のいずれか一項に記載の方法。 - オペランドとして、前記拡張されたデータに対して算術論理演算ユニット(ALU)演算を実行する段階をさらに備える、請求項6に記載の方法。
- 前記機械学習コンピュータアレイの前記処理タイルの前記OCMに前記演算の結果を格納する段階をさらに備える、請求項7に記載の方法。
- 前記OCMに格納された前記結果を前記DDRメモリに格納する段階をさらに備える、請求項8に記載の方法。
- 前記DDRメモリに前記結果を格納する段階の前に、前記結果の前記値が前記データに対するレンジの最大値を超える場合、前記結果の値を前記最大値に調整し、前記結果の前記値が前記データに対する前記レンジの最小値より低い場合、前記結果の前記値を前記データに対する前記レンジの最小値に調整する段階をさらに備える、請求項9に記載の方法。
- 前記OCMから前記DDRメモリに前記結果を格納する段階の前に、前記結果の前記最上位ビットをドロップする段階をさらに備える、請求項9又は10に記載の方法。
- 前記DDRメモリに格納される前記データは、浮動小数点データに関する前記データの整数表現である、請求項1から11のいずれか一項に記載の方法。
- 前記浮動小数点データは、前記第1のフォーマットで前記データを形成するために、スケーリング及び量子化される、請求項12に記載の方法。
- 前記浮動小数点データをint8フォーマットに変換するために、第1のスケーリング値が用いられ、前記浮動小数点データをuint8フォーマットに変換するために、第2のスケーリング値が用いられる、請求項12又は13に記載の方法。
- 第1のフォーマットで整数データを格納するように構成されるダブルデータレート(DDR)メモリと、
複数の処理タイルを有する機械学習処理ユニットと
を備え、各処理タイルは、
様々なML演算のために、前記DDRメモリからの前記第1のフォーマットの前記整数データから変換される拡張されたデータを受け入れて維持するように構成されるオンチップメモリ(OCM)を有し、前記拡張されたデータは、前記第1のフォーマットの前記整数データと比較して、1つの追加のビットを含み、前記第1のフォーマットの前記整数データが符号付きである場合、前記拡張されたデータの最上位ビットは符号付きであり、前記第1のフォーマットの前記整数データが符号なしである場合、前記拡張されたデータの前記最上位ビットは、符号なしの値に設定され、前記拡張されたデータの最下位ビットは、前記第1のフォーマットの前記整数データと同じである、システム。 - 前記第1のフォーマットの前記整数データは、int8かuint8のいずれかである、請求項15に記載のシステム。
- 前記拡張されたデータはint9である、請求項15又は16に記載のシステム。
- 前記DDRメモリに格納される前記第1のフォーマットの前記整数データが符号付きであるか、符号なしであるかが追跡され、前記第1のフォーマットの前記整数データが符号付きであるか、符号なしであるかに応じて、適切な命令がスケジューリングされる、請求項15から17のいずれか一項に記載のシステム。
- 前記拡張されたデータは、演算のためのオペランドである、請求項15から18のいずれか一項に記載のシステム。
- 前記演算の結果は、前記OCMに格納される、請求項19に記載のシステム。
- 前記OCMに格納される前記演算の前記結果は、さらに、前記DDRメモリに格納される、請求項20に記載のシステム。
- 前記結果の値は、前記結果の前記値が最大値を超える場合、前記第1のフォーマットの前記整数データに対するレンジの前記最大値に調整され、前記結果の前記値が前記データに対する前記レンジの最小値より低い場合、前記DDRメモリに前記結果を格納する前に、前記結果の前記値を前記第1のフォーマットの前記整数データに対する前記レンジの最小値に調整する、請求項21に記載のシステム。
- 前記DDRメモリに前記結果を格納する前に、前記結果の前記最上位ビットがドロップされる、請求項21又は22に記載のシステム。
- 前記第1のフォーマットの前記整数データは、浮動小数点データの整数表現であり、前記浮動小数点データは、前記第1のフォーマットの前記整数データを形成するために、スケーリング及び量子化される、請求項15から23のいずれか一項に記載のシステム。
- 前記浮動小数点データをint8フォーマットに変換するために、第1のスケーリング値が用いられ、前記浮動小数点データをuint8フォーマットに変換するために、第2のスケーリング値が用いられる、請求項24に記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/862,549 | 2020-04-29 | ||
US16/862,549 US11551148B2 (en) | 2020-04-29 | 2020-04-29 | System and method for INT9 quantization |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021174558A true JP2021174558A (ja) | 2021-11-01 |
Family
ID=78161463
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021076849A Pending JP2021174558A (ja) | 2020-04-29 | 2021-04-28 | Int9量子化のためのシステム及び方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11551148B2 (ja) |
JP (1) | JP2021174558A (ja) |
CN (1) | CN113568664A (ja) |
DE (1) | DE102021111028A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102689249B1 (ko) * | 2023-08-07 | 2024-07-30 | 한국과학기술원 | 확산 모델의 경량화를 위한 양자화 기법과 보정 기법을 구현하기 위한 장치의 동작 방법 및 장치 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5838984A (en) * | 1996-08-19 | 1998-11-17 | Samsung Electronics Co., Ltd. | Single-instruction-multiple-data processing using multiple banks of vector registers |
US7725522B2 (en) * | 2005-04-14 | 2010-05-25 | Texas Instruments Incorporated | High-speed integer multiplier unit handling signed and unsigned operands and occupying a small area |
US10970080B2 (en) * | 2018-02-08 | 2021-04-06 | Marvell Asia Pte, Ltd. | Systems and methods for programmable hardware architecture for machine learning |
US10678508B2 (en) * | 2018-03-23 | 2020-06-09 | Amazon Technologies, Inc. | Accelerated quantized multiply-and-add operations |
EP3776238A1 (en) * | 2018-03-31 | 2021-02-17 | Micron Technology, Inc. | Execution control of a multi-threaded, self-scheduling reconfigurable computing fabric |
US10656913B2 (en) * | 2018-06-05 | 2020-05-19 | International Business Machines Corporation | Enhanced low precision binary floating-point formatting |
US10853067B2 (en) * | 2018-09-27 | 2020-12-01 | Intel Corporation | Computer processor for higher precision computations using a mixed-precision decomposition of operations |
US10942889B2 (en) * | 2019-06-04 | 2021-03-09 | Micron Technology, Inc. | Bit string accumulation in memory array periphery |
US10977002B2 (en) * | 2019-07-15 | 2021-04-13 | Facebook Technologies, Llc | System and method for supporting alternate number format for efficient multiplication |
CN111240746B (zh) * | 2020-01-12 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种浮点数据反量化及量化的方法和设备 |
US11449758B2 (en) * | 2020-03-11 | 2022-09-20 | Qualcomm Incorproated | Quantization and inferencing for low-bitwidth neural networks |
US20210326111A1 (en) * | 2021-06-25 | 2021-10-21 | Intel Corporation | FPGA Processing Block for Machine Learning or Digital Signal Processing Operations |
-
2020
- 2020-04-29 US US16/862,549 patent/US11551148B2/en active Active
-
2021
- 2021-04-28 JP JP2021076849A patent/JP2021174558A/ja active Pending
- 2021-04-29 DE DE102021111028.9A patent/DE102021111028A1/de active Pending
- 2021-04-29 CN CN202110474965.4A patent/CN113568664A/zh active Pending
-
2022
- 2022-12-06 US US18/075,678 patent/US11977963B2/en active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102689249B1 (ko) * | 2023-08-07 | 2024-07-30 | 한국과학기술원 | 확산 모델의 경량화를 위한 양자화 기법과 보정 기법을 구현하기 위한 장치의 동작 방법 및 장치 |
Also Published As
Publication number | Publication date |
---|---|
US20230096994A1 (en) | 2023-03-30 |
US11977963B2 (en) | 2024-05-07 |
US20210342734A1 (en) | 2021-11-04 |
DE102021111028A1 (de) | 2021-11-04 |
US11551148B2 (en) | 2023-01-10 |
CN113568664A (zh) | 2021-10-29 |
DE102021111028A9 (de) | 2022-01-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102549680B1 (ko) | 벡터 계산 유닛 | |
EP4002105B1 (en) | Systems and methods for performing 16-bit floating-point matrix dot product instructions | |
CN107844322B (zh) | 用于执行人工神经网络正向运算的装置和方法 | |
JP5647859B2 (ja) | 乗累算演算を実行するための装置および方法 | |
JP2024038122A (ja) | 行列演算アクセラレータの命令のための装置、方法、およびシステム | |
CN111656367A (zh) | 神经网络加速器的系统和体系结构 | |
KR20210062739A (ko) | 하드웨어에서 매트릭스 곱셈을 수행 | |
WO2019005088A1 (en) | HETEROGENEOUS MULTIPLIER | |
CN110073329A (zh) | 访存设备、计算设备和应用于卷积神经网络运算的设备 | |
JP2019197531A (ja) | 連鎖タイル演算を実施するためのシステムおよび方法 | |
KR20190029515A (ko) | 비트폭이 다른 연산 데이터를 지원하는 연산 유닛, 연산 방법 및 연산 장치 | |
EP3716054A2 (en) | Interleaved pipeline of floating-point adders | |
EP3623940A2 (en) | Systems and methods for performing horizontal tile operations | |
EP4276608A2 (en) | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions | |
EP3974966A1 (en) | Large scale matrix restructuring and matrix-scalar operations | |
US20210389948A1 (en) | Mixed-element-size instruction | |
US11977963B2 (en) | System and method for INT9 quantization | |
EP3499362B1 (en) | Vector add-with-carry instruction | |
CN116382622A (zh) | 基于张量计算核心的张量数据处理方法及张量计算核心 | |
CN116382782A (zh) | 向量运算方法、向量运算器、电子设备和存储介质 | |
CN112149050A (zh) | 用于增强的矩阵乘法器架构的装置、方法和系统 | |
WO2020059156A1 (en) | Data processing system, method, and program | |
US20220382514A1 (en) | Control logic for configurable and scalable multi-precision operation | |
US20240220779A1 (en) | Sequence of operations in an simd vliw processor for machine-learning computations | |
WO2022220835A1 (en) | Shared register for vector register file and scalar register file |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240209 |