ホームへ戻る

GitHub Repo

Ultralytics 8.4.162、画像バッチのプリフェッチを導入し、読み込みとCUDA推論を並行化

新版ではバックグラウンドスレッドで次の画像バッチを事前に読み込み、GPUがデータを待つ時間を短縮する。公開ベンチマークは特定のYOLO26n構成を対象としており、リリース概要とマージ履歴の間には適用範囲の記述に食い違いが残る。

Kayser · CC BY 4.0 · Image source
zh-Hant

Ultralyticsは9月24日に8.4.162をリリースした。CUDAによる画像推論で、現在のバッチを処理しながら次の画像バッチを事前に読み込めるようになり、対応パッケージもPyPIで公開されている。今回の変更はデータ供給の流れを改善するもので、大量の画像をオフラインで分析するチームに適している。[リリースノート](https://github.com/ultralytics/ultralytics/releases/tag/v8.4.162)、[PyPIパッケージ](https://pypi.org/project/ultralytics/8.4.162/)

従来は、イテレーターが次の画像バッチの読み込みとデコードを完了するまで、GPUは計算に必要なデータを受け取れなかった。新しい処理フローでは、単一のバックグラウンドワーカースレッドでプリフェッチを行い、読み込みを現在のバッチの処理と重ねる。mainブランチのコードでは、CUDAデバイスを使用し、入力ソースがLoadImagesAndVideosで、すべてのファイルが画像であり、バッチ数が1を超える場合に有効になる。動画や単一バッチではこの処理経路を使わない。処理の流れから判断すると、効果はファイル読み込み時間を計算でどれだけ隠蔽できるかに左右され、画像1枚に対するモデルのフォワード処理自体が高速化するとは直接推論できない。[コード](https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/engine/predictor.py)

開発者がPRで示したテストでは、YOLO26nと640ピクセルの入力を使用し、各構成で独立プロセスのペアを5組実行した。L4でbatch=1としてCOCO画像1,000枚を処理した場合、所要時間の中央値は23.012秒から19.521秒に短縮された。batch=16で5,000枚を処理した場合は、31.224秒から27.608秒に短縮された。計測にはモデルの作成、結果の収集、出力のハッシュ計算、CUDA同期が含まれるため、テスト工程全体の成績に当たる。これらの数値はマージ前の特定コミットで得られたもので、正式パッケージでの再測定が必要だ。[テスト条件](https://github.com/ultralytics/ultralytics/pull/26319)

適用範囲については、文書間に食い違いがある。リリース概要には依然としてPyTorchの検出タスクに限定すると書かれているが、PRの最終コミットでは他のタスクやバックエンドへの拡張が明記されており、現在のmainブランチにもこの2つの制限はない。エンジニアはインストール済みバージョンの条件判定を確認すべきであり、初期のベンチマーク結果を、影響を受けるすべての処理経路に外挿することはできない。[マージ履歴](https://github.com/ultralytics/ultralytics/pull/26319)

プリフェッチではデコード済みの画像を追加で保持するため、メインメモリ使用量のピークも評価に含める必要がある。大量の結果はstream=Trueで1件ずつ処理することもできるが、アプリケーション側で結果を蓄積していないかは確認が必要だ。[推論インターフェース](https://docs.ultralytics.com/reference/engine/predictor/)

パイプラインの設計から推測すると、画像がネットワークドライブ上にある場合、バックグラウンドでの読み込みも帯域幅やテールレイテンシーに制約される可能性がある。処理時間の大半が結果のファイル書き込みに費やされる場合も、効果は小さくなり得る。実際の受け入れ検証では、画像の順序、バッチサイズ、出力設定を固定し、全体の所要時間、結果の一致性、ストリームを途中で閉じた後のリソース解放を併せて確認するのが望ましい。比較時には、初回のモデル作成とその後の繰り返し実行も区別し、初期化による差をプリフェッチの効果に混在させないようにする必要がある。

出典

  1. Ultralytics v8.4.162 發布說明
  2. PR #26319:影像批次預取、測速與合併討論
  3. ultralytics 8.4.162 套件
  4. Ultralytics 主分支 predictor.py
  5. BasePredictor 官方介面文件