用語集

半精度

半精度(FP16)がいかにAIを高速計算、メモリ使用量の削減、効率的なモデル展開で加速させるかをご覧ください。

Ultralytics HUB で
を使ってYOLO モデルをシンプルにトレーニングする。

さらに詳しく

技術的にはFP16(浮動小数点16ビット)として知られる半精度は、より一般的な32ビット単精度(FP32)または64ビット倍精度(FP64)フォーマットとは対照的に、16ビットで数値を表現する数値フォーマットです。人工知能(AI)、特に深層学習(DL)の分野では、半精度を活用することが、計算効率と数値精度のバランスを取りながら、モデルの学習と推論を最適化するための重要な手法となっている。これにより、モデルの実行速度とメモリ消費量が削減され、複雑なAIをより幅広いハードウェアで実現できるようになります。

半精度とは何か?

浮動小数点数は、コンピュータで実数を表現するために使用され、一定のビット数内で実数を近似する。IEEE 754規格は、FP16やFP32などの一般的なフォーマットを定義している。FP16は符号に1ビット、指数(範囲の決定)に5ビット、有効数字または仮数(精度の決定)に10ビットを使用します。これに対し、FP32は符号に1ビット、指数に8ビット、シグニフィカンドに23ビットを使用する。このビットの削減は、FP16がFP32よりも数値範囲が著しく小さく、精度が低いことを意味する。これらのフォーマットがどのように機能するかの基本的な概要については、浮動小数点演算の基礎を参照してください。

半精度の利点

FP16の使用は、深層学習ワークフローにおいていくつかの利点をもたらす:

  • メモリ使用量の削減:FP16で保存されたモデルの重み、アクティブ度、勾配は、FP32に比べて半分のメモリで済みます。これにより、より大きなモデル、より大きなバッチサイズ、または限られたメモリしかないデバイスへの展開が可能になります。
  • より高速な計算: Tensor コアを搭載したNVIDIA GPUや Google TPUのような特殊なプロセッサなどの最新のハードウェアは、FP32演算よりもはるかに高速にFP16演算を実行できる。
  • スループットの向上とレイテンシーの低減:必要なメモリ帯域幅の削減と計算の高速化の組み合わせにより、トレーニング時のスループットが向上し、推論レイテンシが短縮されるため、要求の厳しいアプリケーションでのリアルタイム推論が可能になります。

潜在的な欠点

有益ではあるが、FP16を独占的に使用することは時に問題を引き起こす可能性がある:

  • 数値範囲の縮小:指数範囲が小さいため、FP16の数値はオーバーフロー(大きくなりすぎる)やアンダーフロー(小さくなりすぎる、多くの場合ゼロ)の影響を受けやすくなる。
  • 精度の低下:シグニフィカンドのビット数が減るということは、精度が下がるということであり、注意深く管理しないと、繊細なモデルの最終的な精度に影響を与えることがある。
  • 勾配の問題:トレーニング中、FP16では小さな勾配値がゼロにアンダーフローする可能性があり、学習の妨げになる。これは勾配の消失などの問題を悪化させる可能性がある。

半精度 vs 関連概念

FP16を他の数値フォーマットやテクニックと区別することは重要だ:

  • 単精度(FP32):のような多くの機械学習(ML)フレームワークのデフォルトフォーマットです。 PyTorchTensorFlow.ほとんどのタスクで範囲と精度の良いバランスを提供するが、FP16よりもリソースを消費する。
  • 倍精度(FP64):非常に高い精度を提供するが、FP32の2倍のメモリと計算リソースが必要。主に科学計算で使用され、深層学習ではほとんど使用されない。
  • 混合精度ディープラーニングにおけるFP16の最も一般的な使用方法である。学習や推論の際にFP16とFP32の両方を戦略的に使用する。通常、畳み込みや行列の乗算のような計算量の多い演算は、高速化のためにFP16で実行され、重みの更新や特定の削減のような重要な演算は、数値的な安定性と精度を維持するためにFP32で実行される。ロス・スケーリングのような技術は、アンダーフローの問題を軽減するのに役立ちます。オリジナルの混合精度トレーニングの論文やPyTorch AMPと TensorFlow Mixed Precisionのガイドを参照してください。Ultralytics モデルはしばしば混合精度を活用します。モデルトレーニングのヒントを参照してください。
  • BFloat16(BF16): Google開発した16ビットフォーマット。指数ビットは8ビット(FP32と同じで広いレンジを提供)だが、シグニフィカンドビットは7ビット(FP16より精度が低い)。特に大規模言語モデル(LLM)の学習に有用。BFloat16の詳細はこちら。
  • モデルの量子化モデルの精度をさらに下げ、多くの場合8ビット整数(INT8)以下にする技術。これはエッジデバイスへの展開において最大限の効率をもたらしますが、通常は精度を維持するために慎重なキャリブレーションやQuantization-Aware Training (QAT)が必要になります。 PyTorch量子化入門を参照してください。

応用と実例

主に混合精度技術による半精度が広く使われている:

  1. モデルトレーニングの高速化: 画像分類や 自然言語処理(NLP)などの大規模な深層学習モデルのトレーニングは、混合精度を使用することで大幅に高速化し、トレーニング時間とコストを削減することができます。Ultralytics HUBのようなプラットフォームは、このような最適化をよく利用します。
  2. 物体検出推論の最適化:次のようなモデル Ultralytics YOLO11のようなモデルは、(エクスポートモードのドキュメントに記載されているツールを使って)次のような形式にエクスポートできます。 ONNXまたは TensorRTのような形式にエクスポートできます。これは、自律走行車やライブビデオ監視システムなど、リアルタイム性能を必要とするアプリケーションにとって極めて重要です。
  3. リソースに制約のあるデバイスへの展開:FP16モデルはメモリフットプリントと計算コストが小さいため、NVIDIA JetsonのようなエッジコンピューティングプラットフォームやTensorFlow Liteや Core MLなどのフレームワークを使用するモバイルデバイスへの展開に適しています。
  4. 大規模言語モデル(LLM)のトレーニング: GPT-3や新しいアーキテクチャのようなモデルはサイズが大きいため、16ビットフォーマット(FP16またはBF16)を使用してモデルをメモリに収め、妥当な時間内にトレーニングを完了する必要があります。

要約すると、半精度(FP16)はディープラーニングの最適化ツールキットにおいて重要なツールであり、より高速な計算とメモリ使用量の削減を可能にする。半精度には範囲と精度における制限があるが、多くの場合、混在精度のテクニックを使用して効果的に管理されるため、大規模モデルのトレーニングや効率的なAIアプリケーションの展開には不可欠である。

すべて読む