Meet YOLO26: next-gen vision AI.

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 # install
Use Docker

A imagem Docker da Ultralytics é recomendada para todas as execuções de treinamento multi-GPU. Veja o Guia de Início Rápido do Docker. Docker Pulls

PyTorch >= 1.9

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.

YOLOv5 Models

Link to this sectionGPU única#

python train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0

Link 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,1

DataParallel é 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 = 32 por 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,3
Use 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-bn
Use 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.

  • --batch deve 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 loteMemória CUDA
dispositivo0 (G)
COCO
treino
COCO
val
1x1626GB20:390:55
2x3226GB11:430:57
4x6426GB5:570:55
8x12826GB3:090: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 coco128 ou coco2017, 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.

Link to this sectionStatus do projeto#

CI do YOLOv5

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#

Comentários