Ultralytics YOLO27: Inscreve-te na lista de espera.
Get Started
Ultralytics YOLO em produção·Escolha um runtime·Aula 1/9
Aulaintermediário

Escolha um destino de implantação

Defina o dispositivo, o orçamento de latência e a frota para escolher um runtime e um formato de exportação; em seguida, confirme a escolha no dispositivo.

Câmera de trânsito sobre uma rodovia urbana ao pôr do sol, com Ultralytics YOLO rastreando carros, uma van e caminhões, cada um identificado com uma classe e um ID

O mesmo YOLO26n leva 38.9 ms por imagem em uma CPU com ONNX Runtime e 1.7 ms em uma GPU T4 com TensorRT nos benchmarks do YOLO26. Escolher o runtime errado faz você pagar por muito mais hardware do que precisa ou implantar câmeras que não conseguem acompanhar o ritmo. Esta lição transforma a escolha em uma decisão de dez minutos, que você pode justificar com números medidos no próprio dispositivo.

Resultado

Escolha o runtime e o valor format= para um dispositivo, converta uma meta de FPS em um orçamento em milissegundos e confirme a escolha com benchmarks repetidos.

Via rápida
Se já sabes orientar-te, aqui está a versão resumida.
  1. GPU NVIDIA ou Jetson → TensorRT (engine), compilado no dispositivo de destino. CPU, iGPU ou NPU Intel → OpenVINO (openvino).

  2. Apple → CoreML (coreml). Android → LiteRT (litert). NPU Snapdragon → QNN (qnn). Raspberry Pi → NCNN (ncnn).

  3. Qualquer outra opção → ONNX Runtime (onnx). Não quer gerenciar servidores? Use um endpoint gerenciado da Ultralytics Platform.

  4. Orçamento = 1000 ÷ FPS, menos o tempo de decodificação e pós-processamento. Cronometre as opções no dispositivo e avalie o p95, não a média.

Prático

Comece pelo dispositivo#

O runtime depende de onde a inferência é executada, não do hábito. Percorra a árvore desde o início e pare na primeira opção correspondente:

Cada runtime corresponde a um valor format= em Modo de exportação:

MetaRuntimeformat=Atenção a
GPU NVIDIA, JetsonTensorRTengineUm engine só funciona na família de GPUs e na versão do TensorRT usadas para compilá-lo
CPU, iGPU, NPU IntelOpenVINOopenvinoOtimizado para Intel; faça medições antes de usá-lo em outros dispositivos
Qualquer CPU ou GPUONNX RuntimeonnxEscolha explicitamente o provedor de execução
iPhone, iPad, MacCoreMLcoremlA exportação é executada no macOS ou Linux, não no Windows
Android, dispositivos embarcadosLiteRTlitertINT8 requer dados de calibração data
NPU SnapdragonQualcomm QNNqnnApenas exportação quantizada; passe o destino Hexagon como name
Raspberry Pi, CPU ARMNCNNncnnO formato mais rápido no guia do Raspberry Pi
NavegadorONNX Runtime WebonnxLimite-se aos modelos n ou s

Nas plataformas Apple recentes, também podes exportar para o novo formato Core AI da Apple (format=coreai, exportado no macOS 26+ em Apple silicon ou Linux x86-64). É a primeira vez que exportas? A lição Exportar para implantação aborda os conceitos básicos.

Se preferires não executar servidores de inferência, a Ultralytics Platform implanta um modelo como endpoint dedicado numa das 42 regiões, e o separador Deployments do teu perfil mostra onde cada um é executado:

Separador Deployments do perfil da Ultralytics Platform com um mapa-múndi das regiões de implantação e cartões de resumo para implantações ativas, pedidos HTTP, taxa de erros e latência P95

Esse caminho é abordado em Implantar e chamar um endpoint. O restante deste curso é para quando executas o modelo por conta própria.

Transforma a meta de FPS num orçamento em milissegundos#

«Tempo real» não é um requisito; um número é. Calcula-o antes de fazer qualquer benchmark:

PassagemExemplo: 20 FPS por câmara
Orçamento por frame = 1000 ÷ FPS50 ms
Menos a descodificação (RTSP, 1080p)cerca de 10 ms
Menos rastreamento, contagem e destinoscerca de 5 ms
Menos 20% de margem para picos10 ms
Restante para o modelocerca de 25–30 ms

Em seguida, aplica estas regras de decisão:

  • Se o YOLO26n precisar de mais tempo do que o orçamento do teu modelo na CPU do dispositivo, muda para um acelerador (GPU, iGPU, NPU) ou reduz imgsz antes de qualquer outra coisa; os benchmarks do YOLO26 indicam 38.9 ms para o YOLO26n com ONNX na CPU e 1.7 ms numa T4 com TensorRT.
  • Se um dispositivo tiver de atender várias câmaras, divide o orçamento do modelo pelo número de câmaras.
  • Se a frota tiver mais do que alguns tipos de dispositivo, prefere runtimes que não exijam compilações específicas para cada dispositivo ou planeia uma compilação por classe de dispositivo.
  • Se o código que faz as chamadas estiver em Swift, Kotlin ou C++, verifica o SDK do runtime para essa linguagem antes de te comprometeres.

Faz o benchmark dos candidatos no dispositivo#

As fichas técnicas e os benchmarks de outras pessoas são um ponto de partida. A decisão é tomada no hardware em que vais implantar e com base nos frames lentos, não na média: um runtime rápido na mediana, mas que bloqueia num em cada vinte frames, continuará a perder frames. Este script exporta cada candidato, mede o tempo de 100 inferências num frame real e avalia cada um pelo percentil 95 (p95):

from ultralytics import YOLO
from ultralytics.utils.downloads import safe_download

BUDGET_MS = 30  # the model's share of a 20 FPS frame budget
CANDIDATES = ("onnx", "openvino")  # runtimes the decision tree allows on this machine

if __name__ == "__main__":  # exports and inference can start worker processes on macOS and Windows
    frame = str(safe_download("https://ultralytics.com/images/bus.jpg"))  # use a real frame from your camera
    for fmt in CANDIDATES:
        model = YOLO(YOLO("yolo26n.pt").export(format=fmt))
        for _ in range(5):  # warm up: the first calls include one-time setup
            model(frame, verbose=False)
        runs = sorted(model(frame, verbose=False)[0].speed["inference"] for _ in range(100))
        p50, p95 = runs[49], runs[94]
        verdict = "meets" if p95 <= BUDGET_MS else "misses"
        print(f"{fmt:9s} p50 {p50:5.1f} ms  p95 {p95:5.1f} ms  {verdict} the {BUDGET_MS} ms budget")

No portátil com Apple silicon usado para testar este curso, enquanto outros trabalhos partilhavam a CPU:

onnx      p50  30.0 ms  p95  46.4 ms  misses the 30 ms budget
openvino  p50  22.8 ms  p95 113.5 ms  misses the 30 ms budget

Lê linha a linha:

  • speed["inference"] é o tempo gasto pelo próprio modelo nesse frame, sem descodificação nem desenho, permitindo comparar os runtimes de forma justa.
  • O OpenVINO vence na mediana e perde no p95 por um fator superior a dois. Se avaliares pelas médias, vais disponibilizar o runtime que bloqueia nos momentos de maior atividade; se avaliares pelo p95, o ONNX Runtime é a opção mais estável nesta máquina.
  • Ambos excedem o orçamento, por isso, neste caso, o próximo passo é usar um imgsz menor, um acelerador ou menos câmaras por dispositivo, não outro runtime de CPU.

Para comparar rapidamente a precisão e a velocidade entre formatos, o modo Benchmark exporta, valida e mede o tempo de cada um:

yolo benchmark model=yolo26n.pt data=coco8.yaml imgsz=640 format=onnx

Remove format= para testar todos os formatos suportados pela máquina. O COCO8 tem apenas quatro imagens de validação; considera a coluna mAP como um teste básico e usa o YAML do teu próprio conjunto de dados para decidir sobre a precisão.

Armadilhas#

Fazer benchmark na máquina errada

Sintoma: o modelo atingiu 60 FPS na sua estação de trabalho, mas perde quadros no dispositivo. Solução: faça o benchmark no hardware de implantação, ou na máquina mais próxima que conseguir, e execute-o sob a carga que terá em produção (outros processos, outras câmeras).

Os motores TensorRT são específicos do dispositivo

Sintoma: um .engine compilado em uma GPU de data center não carrega em um Jetson Orin. Solução: compile no dispositivo de destino durante a instalação (uma compilação YOLO26n FP16 leva cerca de 5 minutos em um Jetson Orin, segundo a documentação de exportação da Platform) ou mantenha uma compilação por classe de dispositivo e versão do TensorRT, e envie o .pt ou .onnx para que qualquer dispositivo possa recompilar.

Faça o benchmark no tamanho em que fará a inferência

yolo benchmark mede no imgsz que você informar. Se a produção for executada em imgsz=1280, faça o benchmark em 1280: o custo computacional cresce com o número de pixels, então os números para 640 subestimam em cerca de 4× uma implantação em 1280.

Os dispositivos de edge acrescentam quatro questões#

Os guias de Raspberry Pi, NVIDIA Jetson e DeepStream no Jetson abordam em detalhe os alvos mais comuns. Antes de te decidires por um dispositivo de edge, responde:

  • Arranque a frio: onde é criado o mecanismo TensorRT e quem fica à espera?
  • Energia e calor: a caixa consegue manter o modelo na velocidade máxima de FPS durante todo o dia?
  • Memória: há espaço para os buffers de frames e o estado do rastreador junto ao modelo? O INT8 reduz para metade a parcela do modelo.
  • Atualizações: como é que um novo best.pt chega a 1.000 dispositivos? Uma imagem Docker mantém-nos consistentes.
Experimente

Escreve um resumo de implantação de cinco linhas para um projeto real ou planeado: dispositivo-alvo, FPS por câmara, câmaras por dispositivo, linguagem de chamada e tamanho da frota. Converte-o num orçamento do modelo em milissegundos, escolhe candidatos com base na árvore de decisão e executa pick_runtime.py (com o teu modelo e os candidatos) no dispositivo-alvo ou na máquina mais semelhante que tiveres.

Concluído quando
Você concluiu a aula quando todos estes critérios forem atendidos.
  • O teu resumo especifica o dispositivo, o runtime e o valor exato de format=.

  • Calculaste o orçamento do modelo em milissegundos a partir da meta de FPS e mostraste o que subtraíste.

  • Tens os tempos de inferência p50 e p95 de cada candidato, medidos no dispositivo, e uma avaliação em relação ao orçamento.

Mostrar solução

Um exemplo de resumo para uma implantação de análise de retalho:

PerguntaResposta
Dispositivo40 mini PCs de loja com CPUs Intel Core Ultra, sem GPU dedicada
FPS e câmaras10 FPS por câmara, 2 câmaras por caixa
ClienteServiço Python no Linux
Frota40 caixas, atualizadas a partir de uma imagem Docker

Orçamento: 1000 ÷ 10 = 100 ms por frame; menos cerca de 15 ms para descodificação e rastreamento e 20% de margem, sobram cerca de 65 ms, partilhados por duas câmaras, ou seja, cerca de 30 ms por inferência. A árvore de decisão indica OpenVINO (CPU Intel), com ONNX Runtime como alternativa, portanto, numa caixa de uma loja:

python pick_runtime.py  # CANDIDATES = ("onnx", "openvino"), BUDGET_MS = 30

O benchmark da CPU Core Ultra 7 155H na documentação do OpenVINO indica 13.4 ms para o YOLO26n com OpenVINO FP32, por isso yolo26n deverá caber com margem; se o p95 na caixa real, com os dois pipelines de câmara em execução, ficar abaixo de 30 ms, disponibiliza o OpenVINO. Se exceder esse limite, experimenta a GPU integrada da caixa com device="intel:gpu" antes de comprar hardware.

Próximos passos

Depois de escolheres um alvo, a próxima lição exporta para ONNX e confirma que a exportação produz as mesmas respostas que o PyTorch.

Entre para salvar seu progresso