マルチ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.参照 諸注意 詳細はこちら。
トレーニング
学習を開始する事前学習済みモデルを選択します。ここでは、最小かつ最速のモデルである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, simple 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 |
よくあるご質問
エラーが発生した場合は、まず以下のチェックリストをお読みください!(時間を節約できます)
チェックリスト(クリックで拡大)
- この記事をちゃんと読んだ?
- コードベースをクローンし直してみましたか?コードは日々変化しています。
- あなたのエラーを検索してみましたか?このレポや他のレポで誰かがすでに遭遇していて、解決策を持っているかもしれません。
- 上部に記載されているすべての要件(正しいPython とPytorch のバージョンを含む)をインストールしましたか?
- 以下の「環境」セクションに記載されている他の環境で試しましたか?
- coco128やcoco2017のような別のデータセットで試しましたか?根本的な原因を見つけやすくなります。
対応環境
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に感謝したい。