int8、FLOPS、FLOP、TOPS、およびその他の特定の意味

1. 定義

計算能力の測定単位は FLOPS (浮動小数点演算/秒) で、FLOPS は 1 秒あたりの浮動小数点演算の数を表します。特定の使用法では、FLOPS の前に TFLOPS、PFLOPS などの文字定数が付きます。T と P の文字は回数を表し、T は 1 秒あたり 1 兆回、P は 1 秒あたり 1 兆回を表します。

計算能力のレベルを測定する際には、計算回数に加えて、計算能力の精度も考慮されます。たとえば、1000FLOPS AI コンピューティング センターが提供する計算能力は、1000FLOPS のスーパーコンピューターが提供する計算能力と同じですが、精度の違いにより、実際の計算能力レベルも大きく異なります。

演算に含まれるデータの精度の違いに応じて、計算能力は次のように分けられます。

  1. 倍精度浮動小数点(64 ビット、FP64)
  2. 単精度浮動小数点数(32 ビット、FP32) 4 バイトを占有する、合計 32 ビット (うち 1 ビットは符号ビット、8 ビットは指数ビット、23 ビットは小数点)
  3. 半精度浮動小数点数(16 ビット、FP16) は 2 バイト、合計 16 ビットを占め、そのうち 1 ビットは符号ビット、5 ビットは指数ビット、10 ビットは有効数字 (10 進数) です。 FP16はFP32に比べてアクセスメモリ消費量が1/2しかないため、モバイル端末側でのAI計算により適したデータ形式です。
  4. 指数を表すには 5 ビットを使用し、小数を表すには 10 ビットを使用し、2 バイトを占有します。
  5. 1 バイトを占める8 ビットの整数(INT8、INT4)。INT8 は整数演算を表す固定小数点計算方式であり、通常は浮動小数点演算によって量子化されます。2 進数では、「0」または「1」がビットであり、INT8 は数値を表すために 8 ビットが使用されることを意味します。したがって、INT8 は FP16 よりも精度が低くなりますが、データ量が少なく、エネルギー消費が少なく、計算速度が比較的速いため、エンドサイド コンピューティングの特性により適しています。
  6. 混合精度:簡単に言えば、累算エラーを避けるために、乗算と格納には fp16 を使用し、加算には fp32 のみを使用します。

データ表現の範囲は、FP32とFP16で表現される整数の範囲は同じですが、小数部の表現が異なり、四捨五入誤差があります。FP32とFP16で表現されるデータの範囲は異なり、FP16はビッグデータ計算におけるオーバーフローのリスク。

 

 int8 の範囲が -128 ~ 127 である理由は次のとおりです

int8 は 1 バイトを占め、1 バイト (byte) は 8 ビット (bit) を占め、最上位ビットは符号ビットを表します 1 - 負の符号; 0 - 正の符号 したがって、最大値の 2 進値は次のようになります: 0 1 1 1 1 1
1
1 10
進数への変換は下位から上位へ計算されます
0 1 1 1 1 1 1 1
0*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1 *2^2 + 1*2^1 + 1*2^0
0 + 64 + 32 + 16 + 8 + 4 + 2 + 1
= 127

最小値と最大値の 2 進値は逆でなければなりません
10000000 を 10 進数に変換すると、下位から上位の桁へ計算されます
1 0 0 0 0 0 0 0
1*2^7 + 0*2^6 + 0* 2^5 + 0 *2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 0*2^0 128 + 0 + 0 + 0 + 0 + 0 + 0 + 0
=
128
 
実は、もう一つ非常にわかりやすい説明があります
。 1. int8 は 1 バイト (byte)、つまり 8 つのバイナリ ビット (bit) を占有します。
2. 各バイナリ ビットには 0 と 1 の 2 つの数値を格納でき、8 つのバイナリ ビットには 2 つの数値が格納されます。 ^8 = 256 組み合わせ (256 個の数値を格納可能)
3.int8 は符号付きなので、正と負の数値は 256 個の数値を等分します。256 / 2 = 128
4. 負の数は 128 個の数値で、最小値は -128 です。
5. 正の数は 128 個の数値で、0 が 1 つの数値を占め、最大値は +127 です。
 
uint8 の場合 (8 ビット符号なし - いいえ)負の数) 2^8 = 256
0 は数値を占めるため、最大値は 255 です

2. 比較する

低精度テクノロジー (高速では精度が低下します)。トレーニング段階では、勾配の更新は非常に小さいことが多く、比較的高い精度が必要であり、通常は FP32 以上が使用されます。推論では、精度の要件はそれほど高くなく、一般に F16 (半精度) で十分です。INT8 (8 ビット整数) も使用でき、精度に大きな影響はありません。同時に、低精度モデルは占有スペースが少なくなるため、組み込みモデルへの展開が容易になります。

fp32 の代わりに fp16 を使用する
利点
: 1) TensorRT の FP16 は、GPU が FP16 (最新の 2070、2080、2080ti など) をサポートしている場合、FP32 と比較して速度をほぼ 2 倍にすることができます。 2) ビデオ メモリを削減します

短所:
1) オーバーフローが発生します。

3. テスト

参考記事:TensorRT モデルの変換とデプロイメント、FP32/FP16/INT8 精度の区別_BourneA のブログ - CSDN blog_tensorrt 半精度

おすすめ

転載: blog.csdn.net/ytusdc/article/details/128515293