半精度
半精度(FP16)が、より高速な計算、メモリ使用量の削減、効率的なモデル展開によってAIをどのように加速するかをご覧ください。
半精度(FP16とも呼ばれる)は、数値を表現するために16ビットのメモリを使用する浮動小数点数形式です。これは、より一般的な32ビット単精度(FP32)または64ビット倍精度(FP64)形式とは対照的です。深層学習のコンテキストでは、半精度を使用すると、モデルのメモリフットプリントと計算要件が大幅に削減されます。このトレードオフは、数値範囲と精度が低下するという犠牲を伴います。ただし、最新の技術、特に混合精度トレーニングにより、FP16は、モデルの精度への影響を最小限に抑えながら、より高速なトレーニングと推論を可能にすることで、効率的な機械学習(ML)の要となっています。
Half-Precisionはどのように機能しますか?
FP32からFP16に切り替えることで、モデルの重みとアクティベーションの保存に必要なメモリを半分に削減できます。これにより、より大きなモデル、より大きなバッチサイズ、またはより少ないメモリのGPUでのトレーニングが可能になります。さらに、NVIDIA Tensor Coreを搭載したGPUなどの最新のGPUは、32ビット演算よりもはるかに高速に16ビット行列演算を実行するように特別に設計されています。
FP16の主な課題は、数値範囲が限られていることであり、トレーニング中に勾配消失などの問題が発生する可能性があります。これに対抗するために、半精度はほとんどの場合、混合精度アプローチを使用して実装されます。この戦略では、速度のためにほとんどの計算をFP16で実行しますが、数値安定性を維持するために、重みの更新や特定の損失関数の計算など、重要な操作にはFP32を戦略的に使用します。PyTorchやTensorFlowのような深層学習フレームワークは、自動混合精度トレーニングのための組み込みサポートを提供しています。
アプリケーションと例
半精度は、主に混合精度技術を通じて、広く使用されています。
- モデルトレーニングの高速化: 画像分類や自然言語処理(NLP)などの大規模な深層学習モデルのトレーニングは、混合精度を使用することで大幅に高速化でき、トレーニング時間とコストを削減できます。Ultralytics HUBのようなプラットフォームは、クラウドトレーニングセッション中にこれらの最適化を利用することがよくあります。
- 物体検出推論の最適化: Ultralytics YOLO11のようなモデルは、より高速なリアルタイム推論のために、FP16精度でONNXやTensorRTのような形式にエクスポートできます。これは、複数のビデオフィードを分析するセキュリティシステムや、高速生産ラインでの品質管理など、高いスループットを必要とするアプリケーションにとって重要です。
- リソース制約のあるデバイスへのデプロイ: FP16モデルのメモリフットプリントと計算コストが削減されることで、NVIDIA JetsonなどのエッジAIプラットフォームや、TensorFlow LiteやAppleのCore MLなどのフレームワークを使用したモバイルデバイスへのデプロイに適しています。
- 大規模言語モデル(LLM)のトレーニング: GPT-3やその他の基盤モデルのような巨大なモデルでは、モデルをメモリに収め、妥当な時間内にトレーニングを完了するために、16ビット形式を使用する必要があります。
半精度 vs. その他のフォーマット
- Bfloat16(BF16): Googleが開発した代替の16ビット形式であるBfloat16は、FP16と比較して、指数部により多くのビットを、仮数部により少ないビットを割り当てます。これにより、FP32と同じダイナミックレンジが得られ、アンダーフローとオーバーフローに対する耐性が向上しますが、精度は低下します。GoogleのTPUで多用されています。詳細については、Google Cloud AI Blogをご覧ください。
- モデル量子化: どちらもモデル最適化の手法ですが、モデル量子化は通常、浮動小数点重み(FP32またはFP16)を、より低いビットの整数形式、最も一般的には8ビット整数(INT8)に変換します。これにより、特にCPUや特定のアクセラレータで、さらに高速化できますが、モデル性能の大幅な低下を避けるためには、Quantization-Aware Training (QAT)のような、より慎重なキャリブレーションプロセスが必要になることがよくあります。
- 単精度(FP32): これは、ほとんどの深層学習フレームワークにおけるデフォルトの形式です。高精度と広いダイナミックレンジを提供し、トレーニングに適しています。ただし、半精度よりも低速でメモリ消費量が多いため、大規模モデルのデプロイや、最大の速度を必要とするアプリケーションにはあまり適していません。これらの形式間のトレードオフは、さまざまなモデル比較で示されているように、重要な考慮事項です。