GPU 用に YOLOv8 を構成する: オブジェクト検出を高速化する
導入
2023 年に Ultralytics によって開発された YOLOv8 は、YOLO シリーズのユニークなオブジェクト検出アルゴリズムの 1 つとして登場し、YOLOv5 などの前任者に比べてアーキテクチャとパフォーマンスが大幅に強化されています。これらの改善には、特徴抽出を改善するための CSPNet バックボーン、マルチスケール オブジェクト検出を改善するための FPN+PAN ネック、およびアンカーフリー アプローチへの移行が含まれます。これらの変更により、モデルの精度、効率、およびリアルタイムの物体検出の使いやすさが大幅に向上しました。
YOLOv8 で GPU を使用すると、オブジェクト検出タスクのパフォーマンスが大幅に向上し、トレーニングと推論が高速化されます。このガイドでは、構成、トラブルシューティング、最適化のヒントを含め、GPU を使用するための YOLOv8 のセットアップについて説明します。
YOLOv8
YOLOv8 は、オブジェクト検出のパフォーマンスを向上させるために、高度なニューラル ネットワーク設計とトレーニング技術を備えた以前のバージョンに基づいて構築されています。オブジェクトの位置特定と分類を単一の効率的なフレームワークに統合し、速度と精度のバランスをとります。アーキテクチャは 3 つの主要なコンポーネントで構成されます。
- バックボーン: 高度に最適化された CNN バックボーンは、CSPDarknet に基づいている可能性があり、深さ方向に分離可能な畳み込みなどの効率的なレイヤーを使用してマルチスケールの特徴を抽出し、最小限の計算オーバーヘッドで高いパフォーマンスを保証します。
- ネック: 強化されたパス集約ネットワーク (PANet) は、マルチスケール機能を改良および統合して、さまざまなサイズのオブジェクトをより適切に検出します。効率とメモリ使用量が最適化されています。
- ヘッド: アンカーフリーのヘッドは、境界ボックス、信頼スコア、クラス ラベルを予測し、予測を簡素化し、さまざまなオブジェクトの形状やスケールへの適応性を向上させます。
これらの革新により、YOLOv8 は最新の物体検出タスクに対してより高速、より正確、そして多用途に対応できるようになりました。さらに、YOLOv8 では、以前のバージョンのアンカーベースの方法から離れ、バウンディングボックス予測にアンカーフリーのアプローチを導入しています。
YOLOv8 で GPU を使用する理由
YOLOv8 (You Only Look Once、バージョン 8) は、強力なオブジェクト検出フレームワークです。 CPU 上で実行されますが、GPU を利用すると、次のようないくつかの重要な利点が得られます。
- 速度: GPU は並列計算をより効率的に処理し、トレーニングと推論の時間を短縮します。
- スケーラビリティ: GPU を使用すると、大規模なデータセットとモデルを管理できます。
- パフォーマンスの強化: リアルタイムの物体検出が可能になり、自動運転車、監視、ライブ ビデオ処理などのアプリケーションが可能になります。
YOLOv8 でより高速な結果を達成し、より複雑なタスクを処理するには、GPU が明確な選択肢です。
CPU と GPU
YOLOv8 または任意のオブジェクト検出モデルを使用する場合、CPU と GPU の選択は、トレーニングと推論の両方でモデルのパフォーマンスに大きな影響を与える可能性があります。ご存知のとおり、CPU は汎用目的に最適であり、小規模なタスクを効率的に処理できます。ただし、タスクの計算コストが高くなると、CPU が故障します。物体検出などのタスクには速度と並列コンピューティングが必要であり、GPU は高性能の並列処理タスクを処理できるように設計されています。したがって、YOLO のような深層学習モデルを実行するのに最適です。たとえば、ハードウェアとモデルのサイズに応じて、GPU でのトレーニングと推論は CPU での場合より 10 ~ 50 倍高速になる可能性があります。
Aspect | CPU | GPU |
---|---|---|
Inference Time (per image) | ~500 ms | ~15 ms |
Training Speed (epochs/hr) | ~2 epochs/hour | ~30 epochs/hour |
Batch Size Capability | Small (2-4 images) | Large (16-32 images) |
Real-Time Performance | No | Yes |
Parallel Processing | Limited | Excellent (thousands of cores) |
Energy Efficiency | Lower for large tasks | Higher for parallel workloads |
Cost Efficiency | Suitable for small tasks | Ideal for any deep learning tasks |
この違いはトレーニング中にさらに顕著になり、GPU は CPU に比べてエポックを劇的に短縮します。この速度向上により、GPU はより大きなデータセットを処理し、リアルタイムの物体検出をより効率的に実行できるようになります。
GPU で YOLOv8 を使用するための前提条件
GPU 用に YOLOv8 を構成する前に、次の要件を満たしていることを確認してください。
1. ハードウェア要件
- NVIDIA GPU: YOLOv8 は GPU アクセラレーションに CUDA に依存しているため、CUDA コンピューティング機能 6.0 以上の NVIDIA GPU が必要です。
- メモリ: 中程度のデータセットには、少なくとも 8GB の GPU メモリが推奨されます。より大きなデータセットの場合は、16 GB 以上が推奨されます。
2. ソフトウェア要件
- Python: バージョン 3.8 以降。
- PyTorch: GPU サポート付きでインストールされます (CUDA 経由)。できればNVIDIA GPU。
- CUDA ツールキットと cuDNN: これらが PyTorch バージョンと互換性があることを確認してください。
- YOLOv8: Ultralytics リポジトリからインストール可能。
3. ドライバーの要件
- 最新の NVIDIA ドライバーを NVIDIA Web サイトからダウンロードしてインストールします。
- ドライバーのインストール後に、
nvidia-smi
を使用して GPU の可用性を確認します。
GPU 用に YOLOv8 を構成するためのステップバイステップ ガイド
1.NVIDIAドライバーをインストールする
NVIDIA ドライバーをインストールするには:
- 以下のコードを使用して GPU を識別します。
nvidia-smi
- NVIDIA ドライバーのダウンロード ページにアクセスし、適切なドライバーをダウンロードします。
- オペレーティング システムのインストール手順に従ってください。
- 変更を適用するにはコンピュータを再起動します。
- 以下を実行してインストールを確認します。
nvidia-smi
- このコマンドは、GPU 情報を表示し、ドライバーの機能を確認します。
2. CUDA ツールキットと cuDNN をインストールする
YOLOv8 を使用するには、適切な PyTorch バージョンを選択する必要があり、それには CUDA バージョンが必要です。
CUDA ツールキットをインストールする手順
- NVIDIA 開発者サイトから CUDA ツールキットの適切なバージョンをダウンロードします。
- CUDA Toolkit をインストールし、環境変数 (
PATH
、LD_LIBRARY_PATH
など) を設定します。 - 以下を実行してインストールを確認します。
nvcc --version
最新バージョンの CUDA を使用していることを確認すると、PyTorch が GPU を効果的に利用できるようになります。
cuDNN をインストールする手順
- NVIDIA 開発者サイトから cuDNN をダウンロードします。
- 内容を抽出し、対応する CUDA ディレクトリ (
bin
、include
、lib
など) にコピーします。 - cuDNN のバージョンが CUDA インストールと一致していることを確認してください。
3. GPU サポートを備えた PyTorch をインストールする
GPU サポートを備えた PyTorch をインストールするには、PyTorch の開始ページにアクセスし、適切なインストール コマンドを選択します。例えば:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
4. YOLOv8 をインストールして実行する
次の手順に従って YOLOv8 をインストールします。
- Ultralytics をインストールして yolov8 と連携し、必要なライブラリをインポートします。
pip install ultralytics
- Python スクリプトの例:
from Ultralytics import YOLOLoad a COCO-pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
Display model information (optional)
model.info()
Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device = ‘cuda’)
Run inference with the YOLOv8n model on the 'bus.jpg' image
results = model("path/to/image.jpg")
- コマンドラインの例:
# use the CLI commands to directly run the model:
from Ultralytics import YOLO
Load a COCO-pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
Display model information (optional)
model.info()
Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
Run inference with the YOLOv8n model on the 'bus.jpg' image
results = model("path/to/image.jpg")
5. YOLOv8 での GPU 構成の確認
次の Python コマンドを使用して、GPU が検出され、CUDA が有効になっているかどうかを確認します。
import torchCheck if GPU is available
print("CUDA Available:", torch.cuda.is_available())
Get GPU details
if torch.cuda.is_available():
print("GPU Name:", torch.cuda.get_device_name(0))
6. GPU を使用したトレーニングまたは推論
トレーニングまたは推論コマンドでデバイスを cuda
として指定します。
コマンドラインの例
yolo task=detect mode=train data=coco.yaml model=yolov8n.pt device=0 epochs = 128 plots = True
カスタムモデルを検証する
yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml
Python スクリプトの例
from ultralytics import YOLO
Load the YOLOv8 model
model = YOLO('yolov8n.pt')
Train the model on GPU
model.train(data='coco.yaml', epochs=50, device='cuda')
Perform inference on GPU
results = model.predict(source='input.jpg', device='cuda')
DigitalOcean GPU ドロップレットを使用する理由
DigitalOcean GPU ドロップレットは、高性能 AI および機械学習タスクを処理できるように設計されています。 H100 はこれらの GPU ドロップレットを強化して、並外れた速度と並列処理機能を提供し、YOLOv8 モデルを効率的にトレーニングおよび実行するのに最適です。さらに、これらのドロップレットには最新バージョンの CUDA がプリインストールされているため、手動構成に時間を費やすことなく GPU アクセラレーションの活用を開始できます。この合理化された環境により、YOLOv8 モデルの最適化とプロジェクトのスケーリングに完全に集中できます。
一般的な問題のトラブルシューティング
1. YOLOv8 は GPU を使用しない
- 次を使用して GPU の可用性を確認します
torch.cuda.is_available()
- CUDA と PyTorch の互換性を確認します。
- コマンドまたはスクリプトでは必ず
device=0
またはdevice='cuda'
を指定してください。 - NVIDIA ドライバーを更新し、必要に応じて CUDA Toolkit を再インストールします。
2. CUDA エラー
- CUDA Toolkit のバージョンが PyTorch の要件と一致していることを確認してください。
- 診断スクリプトを実行して、cuDNN のインストールを確認します。
- CUDA の環境変数 (
PATH
およびLD_LIBRARY_PATH
) を確認します。
3. パフォーマンスが遅い
- 混合精度トレーニングを有効にして、メモリの使用量と速度を最適化します。
model.train(data='coco.yaml', epochs=50, device='cuda', amp=True)
- メモリ使用量が多すぎる場合は、バッチ サイズを減らしてください。
- 並列処理を実行するために最適化されたシステムがあることを確認し、パフォーマンスを向上させるために検出スクリプトでバッチ処理を使用することを検討してください。
from Ultralytics import YOLO
Load the models
vehicle_model = YOLO('yolov8l.pt')
license_model = YOLO('Registration.pt')
Process each stream, example for one stream
results = vehicle_model(source='stream1.mp4', batch=4) # Modify as needed for parallel processing
よくある質問
YOLOv8 の GPU を有効にするにはどうすればよいですか?
モデルをロードするときに、コマンドまたはスクリプトで device='cuda'
または device=0
(最初の GPU を使用する場合) を指定します。これにより、YOLOv8 は GPU を利用して、推論とトレーニング中の計算を高速化できるようになります。 GPU が適切に設定され、検出されていることを確認してください。
model = YOLO("yolov8n.pt")
model.to('cuda')
YOLOv8 が GPU を使用しないのはなぜですか?
ハードウェア、ドライバー、またはセットアップに問題がある場合、YOLOv8 は GPU を使用していない可能性があります。 まず、CUDA のインストールと PyTorch との互換性を確認します。必要に応じてドライバーを更新します。 CUDA および CuDNN が PyTorch インストールと互換性があることを確認してください。 torchvision をインストールし、インストールおよび使用されている構成を確認します。
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118`
import torch print(torch.cuda.get_device_name())
さらに、PyTorch が GPU サポート付きでインストールされていない場合 (CPU のみのバージョンなど)、または YOLOv8 コマンドの device
パラメーターが明示的に cuda
に設定されていない可能性があります。 CUDA 互換の GPU がないシステムや VRAM が不十分なシステムで YOLOv8 を実行すると、デフォルトで CPU が使用される可能性があります。
これを解決するには、GPU が CUDA 互換であることを確認し、必要な依存関係がすべてインストールされていることを確認し、torch.cuda.is_available()
が True
を返すことを確認して、明示的に指定します。 YOLOv8 スクリプトまたはコマンドの device='cuda'
パラメータ。
GPU 上の YOLOv8 のハードウェア要件は何ですか?
YOLOVv8 を GPU に効果的にインストールして実行するには、Python 3.7 以降が推奨され、GPU アクセラレーションを使用するには CUDA 互換の GPU が必要です。
少なくとも 8GB のメモリを搭載した最新の NVIDIA GPU を推奨します。大規模なデータセットの場合、メモリが多いほど有益です。最適なパフォーマンスを得るには、Python 3.8 以降、PyTorch 1.10 以降、および CUDA 11.2 以降と互換性のある NVIDIA GPU を使用することをお勧めします。中程度のデータセットを効率的に処理するには、GPU には少なくとも 8GB の VRAM が必要ですが、大規模なデータセットや複雑なモデルには VRAM が多いほど有益です。さらに、データセットを保存し、モデルのトレーニングを容易にするために、システムには少なくとも 8 GB の RAM と 50 GB の空きディスク容量が必要です。これらのハードウェアとソフトウェアの構成を確保すると、特に計算量の多いタスクの場合、YOLOv8 を使用したトレーニングと推論の高速化に役立ちます。
注意: AMD GPU は CUDA をサポートしていない場合があるため、YOLOv8 との互換性を確保するには NVIDIA GPU を選択することが重要です。
YOLOv8 は複数の GPU で実行できますか?
複数の GPU を使用して YOLOv8 をトレーニングするには、PyTorch の DataParallel を使用するか、複数のデバイスを直接指定します (例: cuda:0,1
)。分散トレーニングの場合、YOLOv8 はデフォルトで PyTorch の Multi-GPU DistributedDataParallel (DDP) を採用します。システムに複数の GPU が利用可能であることを確認し、トレーニング スクリプトまたはコマンド ラインで使用する GPU を指定します。たとえば、GPU 0 を利用するには、CLI で --device 0,1,2,3
または Python で device=[0,1,2,3]
を設定します。 1、2、および 3。YOLOv8 は、明示的な data_Parallel
引数を必要とせずに、指定された GPU にわたる並列トレーニングを自動的に処理します。トレーニング中にすべての GPU が利用されますが、検証フェーズはトレーニングよりもリソースの消費が少ないため、通常、デフォルトで単一の GPU で実行されます。
GPU での推論のために YOLOv8 を最適化するにはどうすればよいですか?
混合精度を有効にし、バッチ サイズを調整してメモリと速度のバランスをとります。データセットによっては、YOLOv8 のトレーニングを効率的に実行するには、かなりの計算能力が必要です。メモリ使用量と推論時間を削減するには、より小さいモデル バリアントまたは量子化されたモデル バリアント (YOLOv8n または INT8 量子化バージョンなど) を使用します。推論スクリプトで、GPU 実行のために device
パラメーターを cuda
に明示的に設定します。バッチ推論などの手法を使用して複数の画像を同時に処理し、GPU 使用率を最大化します。該当する場合は、TensorRT を利用してモデルをさらに最適化し、GPU 推論を高速化します。 GPU メモリとパフォーマンスを定期的に監視して、リソースの効率的な使用を確保します。
以下のコード スニペットを使用すると、定義されたバッチ サイズ内で画像を並列処理できます。
from Ultralytics import YOLO
model = YOLO('yolov8n.pt', device='cpu', batch=4) # specify the batch size as needed
pass the argument ‘images’, which is the list of preprocessed images
results = model.predict(images) # 'images' should have the shape (N, 3, H, W)
CLI を使用する場合は、-b または --batch-size でバッチ サイズを指定します。 Python では、モデルを初期化するとき、または予測メソッドを呼び出すときに、バッチ引数が正しく設定されていることを確認してください。
CUDA のメモリ不足の問題を解決するにはどうすればよいですか?
CUDA のメモリ不足エラーを解決するには、バッチが小さいほど必要な GPU メモリが少なくなるため、YOLOv8 構成ファイル内の検証バッチ サイズを減らします。さらに、複数の GPU にアクセスできる場合は、PyTorch の DistributedDataParallel
または同様の機能を使用して検証ワークロードを分散することを検討してください。ただし、これには PyTorch の高度な知識が必要です。スクリプト内で torch.cuda.empty_cache()
を使用してキャッシュされたメモリをクリアして、GPU 上で不要なプロセスが実行されていないことを確認することもできます。より多くの VRAM を備えた GPU にアップグレードするか、メモリ効率を高めるためにモデルとデータセットを最適化することは、このような問題を軽減するためのさらなるステップです。
結論
GPU を利用するように YOLOv8 を構成するのは簡単なプロセスであり、パフォーマンスを大幅に向上させることができます。この詳細なガイドに従うことで、物体検出タスクのトレーニングと推論を加速できます。セットアップを最適化し、一般的な問題のトラブルシューティングを行い、GPU アクセラレーションで YOLOv8 の可能性を最大限に引き出します。
参考文献
- マルチGPUでyolov8をトレーニングするにはどうすればよいですか? · 問題 #3308
- YOLOV8 とは: 次世代物体検出器の内部機能の詳細な調査