Link to this sectionTreinamento multi-GPU com YOLOv5#
Este guia explica como treinar o YOLOv5 com múltiplas GPUs em uma única máquina ou em várias máquinas.
Link to this sectionAntes de começar#
Clone o repositório e instale o requirements.txt em um ambiente Python>=3.8.0, incluindo PyTorch>=1.8. Modelos e datasets são baixados automaticamente do release mais recente do YOLOv5.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # installA imagem Docker da Ultralytics é recomendada para todas as execuções de treinamento multi-GPU. Veja o Guia de Início Rápido do Docker.
torch.distributed.run substitui torch.distributed.launch no PyTorch >= 1.9. Veja a documentação distribuída do PyTorch para detalhes.
Link to this sectionTreinamento#
Selecione um modelo pré-treinado para começar o treinamento. Aqui selecionamos o YOLOv5s, um modelo pequeno e rápido. Veja a tabela no nosso README para uma comparação completa de todos os modelos. Treinaremos este modelo com Multi-GPU no dataset COCO.

Link to this sectionGPU única#
python train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0Link to this sectionModo Multi-GPU DataParallel (⚠️ não recomendado)#
Passe múltiplos IDs de GPU para --device para ativar o modo DataParallel:
python train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1DataParallel é lento e quase não acelera o treinamento em comparação ao uso de uma única GPU.
Link to this sectionModo Multi-GPU DistributedDataParallel (✅ recomendado)#
Prefixe o comando de treinamento com python -m torch.distributed.run --nproc_per_node, então passe os argumentos usuais:
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é o número de GPUs a serem usadas. No exemplo acima, é2.--batché o tamanho total do lote (batch size), dividido uniformemente entre cada GPU. No exemplo acima, isso é64 / 2 = 32por GPU.
O comando acima usa GPUs 0...(N-1). Para controlar a visibilidade do dispositivo por meio de variáveis de ambiente, defina CUDA_VISIBLE_DEVICES=2,3 (ou qualquer outra lista) antes de iniciar.
Use specific GPUs (click to expand)
Passe --device seguido pelos IDs específicos da GPU. O exemplo abaixo usa GPUs 2,3.
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --device 2,3Use SyncBatchNorm (click to expand)
SyncBatchNorm pode aumentar a precisão para treinamento multi-GPU, mas reduz a velocidade do treinamento significativamente. Ele está apenas disponível para treinamento multi-GPU DistributedDataParallel.
Melhor usado quando o tamanho do lote em cada GPU é pequeno (<= 8).
Para ativar o SyncBatchNorm, passe --sync-bn:
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights '' --sync-bnUse Multiple machines (click to expand)
Isso está apenas disponível para treinamento multi-GPU DistributedDataParallel.
Antes de continuar, certifique-se de que o dataset, a base de código e quaisquer outras dependências correspondam em todas as máquinas, então verifique se as máquinas conseguem se conectar na rede.
Escolha uma máquina mestre (aquela à qual as outras se conectarão), anote seu endereço (master_addr) e escolha uma porta (master_port). O exemplo abaixo usa master_addr = 192.168.1.1 e master_port = 1234.
Então execute:
# On master machine 0
python -m torch.distributed.run --nproc_per_node G --nnodes N --node_rank 0 --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''# On machine R
python -m torch.distributed.run --nproc_per_node G --nnodes N --node_rank R --master_addr "192.168.1.1" --master_port 1234 train.py --batch 64 --data coco.yaml --cfg yolov5s.yaml --weights ''onde G é o número de GPUs por máquina, N é o número de máquinas, e R é o ranking da máquina em 0...(N-1). Por exemplo, com duas máquinas e duas GPUs cada, defina G = 2, N = 2, e R = 1 na segunda máquina.
O treinamento não começa até que todas as N máquinas estejam conectadas. A saída é exibida apenas na máquina mestre.
Link to this sectionNotas#
-
O suporte para Windows não foi testado; o Linux é recomendado.
-
--batchdeve ser um múltiplo do número de GPUs. -
A GPU 0 usa um pouco mais de memória do que as outras porque mantém o EMA e gerencia os check-points.
-
Se você receber
RuntimeError: Address already in use, geralmente significa que várias execuções de treinamento estão usando a mesma porta. Especifique uma porta diferente com--master_port:python -m torch.distributed.run --master_port 1234 --nproc_per_node 2 ...
Link to this sectionResultados#
Resultados de perfilamento DDP em uma instância AWS EC2 P4d com 8x A100 SXM4-40GB para YOLOv5l por 1 epoch no COCO.
Profiling code
# prepare
t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --runtime=nvidia --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| GPUs A100 | tamanho do lote | Memória CUDA dispositivo0 (G) | COCO treino | 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 |
Como mostrado nos resultados, usar DistributedDataParallel com múltiplas GPUs fornece um escalonamento quase linear na velocidade de treinamento. Com 8 GPUs, o treinamento é concluído aproximadamente 6,5 vezes mais rápido do que com uma única GPU, mantendo o mesmo uso de memória por dispositivo.
Link to this sectionFAQ#
Leia o checklist abaixo antes de abrir uma Issue — isso geralmente economiza tempo.
Checklist (click to expand)
- Você leu este guia do início ao fim?
- Você clonou novamente a base de código? O código muda diariamente.
- Você pesquisou a mensagem de erro? Alguém pode já ter encontrado o mesmo problema e compartilhado uma correção.
- Você instalou todos os requisitos (incluindo as versões corretas de Python e PyTorch)?
- Você tentou um dos ambientes suportados listados abaixo?
- Você tentou um dataset menor, como
coco128oucoco2017, para isolar a causa raiz?
Se tudo acima estiver correto, abra uma Issue com o máximo de detalhes possível, seguindo o modelo.
Link to this sectionAmbientes suportados#
A Ultralytics fornece uma gama de ambientes prontos para uso, cada um pré-instalado com dependências essenciais como CUDA, CUDNN, Python e PyTorch, para dar início aos seus projetos.
- Notebooks de GPU Gratuitos:
- Google Cloud: Guia de Início Rápido do GCP
- Amazon: Guia de Início Rápido da AWS
- Azure: Guia de Início Rápido do AzureML
- Docker: Guia de Início Rápido do Docker
Link to this sectionStatus do projeto#
Este selo indica que todos os testes de Integração Contínua (CI) das GitHub Actions do YOLOv5 estão passando com sucesso. Esses testes de CI verificam rigorosamente a funcionalidade e o desempenho do YOLOv5 em vários aspectos fundamentais: treinamento, validação, inferência, exportação e benchmarks. Eles garantem uma operação consistente e confiável no macOS, Windows e Ubuntu, com testes conduzidos a cada 24 horas e a cada novo commit.
Link to this sectionCréditos#
Gostaríamos de agradecer a @MagicFrogSJTU, que fez todo o trabalho pesado, e a @glenn-jocher por nos guiar ao longo do caminho.
Link to this sectionVeja também#
- Modo de Treinamento - Aprenda sobre o treinamento de modelos YOLO com Ultralytics
- Ajuste de Hiperparâmetros - Otimize o desempenho do seu modelo
- Guia de Início Rápido do Docker - Configure seu ambiente Docker para treinamento