YOLOv5GPU GPUトレーニング
このガイドでは、YOLOv5 🚀でデータセットを学習するために、単一または複数のマシンで複数のGPUを適切に使用する方法を説明します。
始める前に
レポをクローンし、requirements.txtをPython>=3.8.0環境にインストールする。 PyTorch>=1.8.モデルとデータセットは、最新のYOLOv5 リリースから自動的にダウンロードされます。
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
プロからのアドバイス
ドッカーイメージ は、すべてのマルチGPU トレーニングで推奨されています。参照 Dockerクイックスタートガイド
プロからのアドバイス
torch.distributed.run
代替 torch.distributed.launch
で PyTorch>=1.9.参照 PyTorch 分散ドキュメント 詳細はこちら。
トレーニング
学習を開始する事前学習済みモデルを選択します。ここでは、最小かつ最速のモデルであるYOLOv5sを選択します。すべてのモデルの完全な比較はREADMEの表を参照してください。このモデルをCOCOデータセットでMulti-GPU を使って訓練します。
シングルGPU
マルチGPU データパラレルモード(⚠️ 非推奨)
を増やすことができます。 device
複数のGPUをDataParallelモードで使用する。
この方法は時間がかかり、GPU 。
マルチGPU DistributedDataParallelモード(✅推奨)
合格しなければならない python -m torch.distributed.run --nproc_per_node
その後に通常の議論が続く。
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1
--nproc_per_node
は使用したい GPU の数を指定します。上の例では2です。--batch
は総バッチサイズである。これは各GPU に均等に分割される。上の例では、GPU あたり 64/2=32 となる。
上のコードはGPUを使用する 0... (N-1)
.
特定のGPUを使用する(クリックで拡大)
そのためには、`--device` の後に特定の GPU を渡します。例えば、以下のコードでは `2,3` の GPU を使用します。SyncBatchNormを使用する(クリックで展開)
[SyncBatchNorm](https://pytorch.org/docs/master/generated/torch.nn.SyncBatchNorm.html) could increase [accuracy](https://www.ultralytics.com/glossary/accuracy) for multiple GPU training, however, it will slow down training by a significant factor. It is **only** available for Multiple GPU DistributedDataParallel training. It is best used when the batch-size on **each** GPU is small (<= 8). To use SyncBatchNorm, simply pass `--sync-bn` to the command like below:複数のマシンを使用する(クリックで拡大)
これは、MultipleGPU DistributedDataParallelトレーニングでのみ利用可能です。 続行する前に、すべてのマシンのファイル、データセット、コードベースなどが同じであることを確認してください。その後、マシンが互いに通信できることを確認します。 マスターマシン(他のマシンが会話するマシン)を選ばなければならない。そのアドレス(`master_addr`)とポート(`master_port`)をメモしておく。以下の例では、`master_addr = 192.168.1.1`、`master_port = 1234`とする。 使い方は以下の通り: ここで、`G`はマシンあたりのGPU 数、`N`はマシンの数、`R`は`0...(N-1)`からのマシン番号である。例えば、GPUを2つずつ搭載したマシンが2台あるとすると、上記の場合、`G = 2`、`N = 2`、`R = 1`となる。 N台のマシンが接続されるまでトレーニングは開始されません。出力はマスターマシンのみに表示されます!備考
- Windowsのサポートは未検証で、Linuxを推奨する。
--batch
はGPU数の倍数でなければならない。- GPU 0はEMAを維持し、チェックポイントなどを担当するため、他のGPUよりも若干多くのメモリを消費します。
- もし
RuntimeError: Address already in use
一度に複数のトレーニングを実行していることが原因かもしれません。これを解決するには、別のポート番号を使用します。--master_port
以下のように:
結果
AWS EC2 P4dインスタンス、8x A100 SXM4-40GB、YOLOv5l、1COCOエポックでのDDPプロファイリング結果。
プロファイリング・コード
# prepare
t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all -v "$(pwd)"/coco:/usr/src/coco $t
pip3 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
cd .. && rm -rf app && git clone https://github.com/ultralytics/yolov5 -b master app && cd app
cp data/coco.yaml data/coco_profile.yaml
# profile
python train.py --batch-size 16 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0
python -m torch.distributed.run --nproc_per_node 2 train.py --batch-size 32 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1
python -m torch.distributed.run --nproc_per_node 4 train.py --batch-size 64 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1,2,3
python -m torch.distributed.run --nproc_per_node 8 train.py --batch-size 128 --data coco_profile.yaml --weights yolov5l.pt --epochs 1 --device 0,1,2,3,4,5,6,7
GPU A100 |
バッチサイズ | CUDA_mem device0 (G) |
COCO 列車 |
COCO val |
---|---|---|---|---|
1x | 16 | 26GB | 20:39 | 0:55 |
2x | 32 | 26GB | 11:43 | 0:57 |
4x | 64 | 26GB | 5:57 | 0:55 |
8x | 128 | 26GB | 3:09 | 0:57 |
結果に示されているように、複数のGPUでDistributedDataParallelを使用すると、トレーニング速度がほぼ線形にスケーリングされます。8個のGPUを使用した場合、デバイスあたりのメモリ使用量を同じに保ちながら、1個のGPU使用した場合よりも約6.5倍速くトレーニングが完了します。
よくあるご質問
エラーが発生した場合は、まず以下のチェックリストをお読みください!(時間を節約できます)
チェックリスト(クリックで拡大)
- この投稿をきちんと読みましたか? - コードベースをクローンし直してみましたか?コードは**毎日**変わっています。 - あなたのエラーを検索してみましたか?誰かがこのレポや他のレポですでに遭遇していて、解決策を持っているかもしれません。 - 一番上にリストされているすべての要件(正しいPython とPyTorch バージョンを含む)をインストールしましたか? - 下の "Environments" セクションにある他の環境で試しましたか? - coco128 や coco2017 のような別のデータセットで試しましたか?根本的な原因を見つけやすくなります。 上記をすべてお試しになった場合は、テンプレートに従ってできるだけ詳しく説明し、お気軽にIssueを提起してください。対応環境
Ultralytics をはじめとする必要不可欠な依存関係がプリインストールされた、さまざまなすぐに使える環境を提供する。 CUDAやCUDNN、 Pythonそして PyTorchなどがプリインストールされています。
- 無料GPU ノート:
- Google クラウド GCPクイックスタートガイド
- アマゾン AWSクイックスタートガイド
- Azure:AzureML クイックスタートガイド
- ドッカー: Dockerクイックスタートガイド
プロジェクト状況
このバッジは、YOLOv5 GitHub ActionsContinuous Integration (CI) テストがすべて正常にパスしていることを示します。これらのCIテストは、トレーニング、検証、推論、エクスポート、ベンチマークといったさまざまな重要な側面にわたって、YOLOv5 の機能とパフォーマンスを厳密にチェックします。これらのテストは、macOS、Windows、Ubuntu上で、24時間ごとおよび新しいコミットごとに実施され、一貫した信頼性の高い動作を保証します。
クレジット
力仕事をしてくれた@MagicFrogSJTUと、道案内をしてくれた@glenn-jocherに感謝したい。
こちらも参照
- Train Mode-Ultralytics使ったYOLO モデルのトレーニングについて学ぶ
- ハイパーパラメーターのチューニング- モデルの性能を最適化する
- Dockerクイックスタートガイド- トレーニング用にDocker環境をセットアップする