PythonのFP16、FP32のすべては何ですか?私の潜在的なビジネスパートナーと私は、時系列で作業するためのディープラーニングセットアップを構築しています。彼はGPUを見つけながら「FP16とFP32」を思いついた。彼は16ビットと32ビットの浮動小数点値について話しているようです(データポイントは「5989.12345」のように見えるので、16ビットでは十分ではないと確信しています)。

FP16です。 GPUがパフォーマンスを向上させるために使用する特別な手法ですか、それとも32個の標準浮動小数点数の代わりに16ビット浮動小数点値を使用するための単なる空想用語ですか?

コメント

  • はい、FP16はGPUのコンテキストで16ビットを意味します。

回答

FP32とFP16は32を意味しますビット浮動小数点と16ビット浮動小数点。これらは3Dゲームに必要な計算であるため、GPUは元々FP32に焦点を当てていました。現在、多くのGPUは、ニューラルネットワークの計算を高速化するためにFP16をネイティブでサポートしています。いくつかのベンチマークを見ると( https://blog.slavv.com/titan-rtx-quality-time-with-the-top-turing-gpu-fe110232a28e )FP16をサポートするGPUは、FP32よりもFP16の計算がほぼ2倍高速であることがわかります。 FP16をサポートする新しいカード(NVidia 2080シリーズなど)も廃止されていることを説明します以前のカード(1080)と比較してFP32の方が20%速く、以前のカードのFP32と比較してFP16ニューラルネットワークのトレーニングが140%増加します。

ただし、注意点があります。ニューラルネットワークはFP16を使用して作成する必要があり、同じ精度である必要があります。 FP16は、同じ数値を表すビットがはるかに少ないため、設計上精度が低くなります。高速で正確にするために、混合精度モデルを使用することを選択する人もいます( https://hackernoon.com/rtx-2080ti-vs-gtx-1080ti-fastai-mixed-precision-training-comparisons-on-cifar-100-761d8f615d7f )。ただし、最後のリンクで、混合精度の場合は速度が速くなりますが、純粋なFP16を使用する場合の2倍の速度ではないことがわかります。理論的にはFP32の重みを使用し、それらの一部をFP16の重みに変換することもできますが、精度が低下する可能性があります。

したがって、最終的には、ニューラルネットワークを書き換えてFP16を完全にまたは部分的に使用できるかどうかを理解する必要があります。 。それができない場合は、FP16互換カードから追加のメリットを得ることができません。

FP16の最大値は65504で、最小値は5.96×10-8です。 5989.12345の最高の精度は、おそらく5988.0です( https://www.h-schmidt.net/FloatConverter/IEEE754.html のビットで再生)この精度と大きさが十分ではない場合は、FP16に合うようにトレーニングする前にデータをスケーリングしてから、2倍の速度でトレーニングすることができます。または、入力としてFP32を使用し、後のレイヤーで精度を下げる混合精度モデルを使用します。

コメント

  • 情報量の多いブログコンテンツ、そのためのthx 🙂
  • FP16にあなたの番号の可能性のある表現も含めました。回答に満足している場合は、承認された回答として回答を確認し、必要に応じて賛成することができればよいでしょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です