Mixed Precision
Mixed PrecisionがUltralytics YOLO26のようなモデルのトレーニングを高速化し、メモリ使用量を削減する方法を学びます。より高速なAIインサイトを実現するFP16とFP32の利点を解説します。
混合精度は、モデルの最適化に使用される重要な技術であり、メモリ消費量を削減しながらディープラーニングモデルのトレーニングを高速化します。通常は16ビットと32ビットの浮動小数点型など、異なる数値形式を戦略的に組み合わせることで、モデルの最終的な精度を損なうことなく、機械学習アルゴリズムによる計算を高速化できます。混合精度は現代のAI開発における標準的な手法となっており、特に大規模なデータセットでYOLO26アーキテクチャをトレーニングするような、リソースを大量に消費するタスクで活用されています。
混合精度の仕組み#
従来のディープラーニングワークフローでは、モデルは通常、単精度浮動小数点形式(FP32)を使用して計算を実行します。FP32の各数値には32ビットのメモリが必要です。精度は非常に高い一方で、この形式は計算コストとメモリ消費量が大きくなる可能性があります。
混合精度では、16ビットのみを使用する半精度(FP16)が導入されます。ただし、FP16のみを使用すると、ダイナミックレンジが狭いため数値が不安定になる可能性があります。これを解決するため、混合精度の手法では、安定性を確保するためにモデルの重みの「マスターコピー」をFP32で保持し、畳み込みや行列乗算など、負荷の大きい数学演算にはFP16を使用します。
このプロセスには、通常、次の3つの主要なステップが含まれます。
-
キャスト: NVIDIA Tensor Coresなどの対応ハードウェアでの実行を高速化するため、モデルの入力とアクティベーションをFP16に変換します。
-
ロススケーリング: 損失関数の値を増幅し、FP16で小さな勾配更新値がゼロになる「アンダーフロー」を防ぎます。
-
アキュムレーション: 算術演算をFP16で実行し、必要な情報を保持するために結果をFP32で蓄積してから、マスターの重みを更新します。
AIトレーニングにおけるメリット#
混合精度を導入すると、計算リソースを効率的に活用する開発者や研究者に、次のような大きなメリットがあります。
- トレーニング速度の向上: FP16での演算は必要なメモリ帯域幅が少なく、最新のGPUでより高速に処理されます。これにより、1つのエポックに必要な時間を大幅に短縮できます。
- メモリ使用量の削減: FP16のテンソルはFP32の半分のメモリしか使用しないため、開発者は実質的にバッチサイズを2倍にできます。バッチサイズを大きくすると、勾配推定がより安定し、収束も速くなることがよくあります。
- エネルギー効率: 計算負荷の削減によりエネルギー消費量が低下します。これは、大規模なクラウドトレーニング運用において重要です。
実世界での利用例#
混合精度は、複雑なモデルや大規模なデータセットを効率的に処理するため、さまざまな業界で利用されています。
自動運転#
自動運転車の開発では、エンジニアは数百万の高解像度ビデオフレームを使用して物体検出モデルをトレーニングする必要があります。混合精度を使用すると、YOLO26のような最先端モデルを効率的にトレーニングできます。メモリフットプリントが削減されるため、より高解像度の入力を処理でき、遠距離にある交通標識や歩行者などの小さな物体を検出するうえで重要です。
医用画像解析#
医用画像解析では、MRIやCTスキャンから得られる3Dボリュームデータを扱うことが多く、非常に多くのメモリを必要とします。このデータでセグメンテーションモデルをFP32の完全精度でトレーニングすると、「メモリ不足」(OOM)エラーが発生することがよくあります。混合精度により、研究者はこのような大規模なモデルをGPUメモリに収めることができ、医師による疾患の早期診断を支援するAIの開発が容易になります。
Ultralyticsで混合精度を実装する#
PyTorchなどの最新フレームワークは通常、自動混合精度(AMP)と呼ばれる機能を通じて、混合精度の複雑な処理を自動的に行います。ultralyticsパッケージは、最適なパフォーマンスを確保するため、トレーニング中にAMPをデフォルトで有効にします。
ここでは、混合精度がデフォルトで有効になっているUltralytics YOLO26でトレーニングを開始する方法を簡潔に示します(amp引数で制御できます)。
from ultralytics import YOLO
# Load the latest YOLO26 model
model = YOLO("yolo26n.pt")
# Train the model on the COCO8 dataset
# amp=True is the default setting for mixed precision training
results = model.train(data="coco8.yaml", epochs=5, imgsz=640, amp=True)混合精度と関連概念の比較#
混乱を避けるため、混合精度と用語集にある類似の用語を区別しておくと便利です。
- モデル量子化: 混合精度ではトレーニング中に低精度の浮動小数点数(FP16)を使用するのに対し、量子化では通常、トレーニング後のデプロイメントに向けて重みを整数(INT8など)に変換します。量子化は主にエッジデバイスでの推論レイテンシの削減に重点を置く一方、混合精度はトレーニング速度と安定性に重点を置きます。
- 半精度: これは、FP16データ形式そのものを指します。混合精度は、FP16とFP32の両方を組み合わせて使用する手法です。「混合」FP32マスターコピーを使用せずに純粋な半精度だけを使用すると、数値誤差によってモデルが収束しないことがよくあります。
結論#
混合精度は、ニューラルネットワークのトレーニング方法に革新をもたらし、現在利用されている大規模な基盤モデルやビジョンシステムを実現する重要な要素となっています。数学的な精度の必要性と、ハードウェアの速度およびメモリの制約とのバランスを取ることで、開発者はより迅速に反復し、より高性能なAIソリューションを構築できます。
データセットを管理し、最適化されたモデルをスムーズにトレーニングしたい場合は、Ultralytics Platformが、これらの最新の最適化技術を自動的に活用する包括的な環境を提供します。









