Sintonize na YOLO Vision 2025!
25 de setembro de 2025
10:00 — 18:00 BST
Evento híbrido
Yolo Vision 2024

Implemente o Ultralytics YOLOv5 com DeepSparse da Neural Magic para desempenho de classe GPU em CPUs

Equipe Ultralytics

Leitura de 5 minutos

5 de janeiro de 2023

Capacite o treinamento e a implantação do modelo Ultralytics YOLOv5 com DeepSparse da Neural Magic para desempenho de classe GPU em CPUs. Obtenha implantações YOLOv5 mais rápidas e escaláveis.

Quer acelerar o treinamento e a implantação de seus modelos YOLOv5? Nós temos a solução! Apresentamos nosso mais novo parceiro, Neural Magic. Como a Neural Magic fornece ferramentas de software que enfatizam o desempenho máximo do modelo e a simplicidade do fluxo de trabalho, é natural que nos unamos para oferecer uma solução para tornar o processo de implantação do YOLOv5 ainda melhor.

DeepSparse é o tempo de execução de inferência de CPU da Neural Magic, que aproveita a esparsidade e a aritmética de baixa precisão dentro das redes neurais para oferecer um desempenho excepcional em hardware comum. Por exemplo, em comparação com a linha de base do ONNX Runtime, o DeepSparse oferece uma aceleração de 5,8x para o YOLOv5s em execução na mesma máquina!

Comparação de Throughput do YOLOv5 com DeepSparse

Pela primeira vez, suas cargas de trabalho de deep learning podem atender às demandas de desempenho da produção sem a complexidade e os custos dos aceleradores de hardware. Simplificando, o DeepSparse oferece o desempenho das GPUs e a simplicidade do software:

  1. Implantações Flexíveis: Execute de forma consistente na nuvem, data center e borda com qualquer provedor de hardware
  2. Escalabilidade Infinita: Escale horizontalmente com Kubernetes padrão, verticalmente para centenas de núcleos ou totalmente abstraído com serverless
  3. Fácil Integração: Use APIs limpas para integrar seu modelo em um aplicativo e monitorá-lo em produção

Alcance o Desempenho de Classe GPU em CPUs Comuns

O DeepSparse tira partido da esparsidade do modelo para obter o seu aumento de velocidade de desempenho.

A esparsificação por meio de poda e quantização permite reduções de ordem de magnitude no tamanho e na computação necessários para executar uma rede, mantendo alta precisão. O DeepSparse é sensível à esparsidade, ignorando as multiplicações-somas por zero e diminuindo a quantidade de computação em uma passagem direta. Como a computação esparsa é limitada pela memória, o DeepSparse executa a rede em profundidade, dividindo o problema em Colunas de Tensores, que são faixas verticais de computação que cabem no cache.

Rede DeepSparse e Ultralytics YOLOv5

Redes esparsas com computação comprimida, executadas em profundidade no cache, permitem que o DeepSparse ofereça desempenho de classe GPU em CPUs!

Criar uma versão esparsa do YOLOv5 treinado em dados personalizados

O repositório de modelos de código aberto da Neural Magic, SparseZoo, contém checkpoints pré-esparsificados de cada modelo YOLOv5. Usando o SparseML, que é integrado ao Ultralytics, você pode ajustar um checkpoint esparso em seus dados com um único comando CLI.

Implementar YOLOv5 com DeepSparse

Instalar DeepSparse

Execute o seguinte para instalar o DeepSparse. Recomendamos que você use um ambiente virtual com Python.

pip install deepsparse[server,yolo,onnxruntime]

Coletar um Arquivo ONNX

O DeepSparse aceita um modelo no formato ONNX, transmitido como:

  • Um caminho local para um modelo ONNX
  • Um stub do SparseZoo que identifica um modelo no SparseZoo

Vamos comparar o YOLOv5s denso padrão com o YOLOv5s podado-quantizado, identificado pelos seguintes stubs do SparseZoo:

zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Implementar um Modelo

O DeepSparse oferece APIs convenientes para integrar o seu modelo numa aplicação.

Para experimentar os exemplos de implementação abaixo, obtenha uma imagem de amostra para o exemplo e salve-a como basilica.jpg com o seguinte comando:

wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg

API Python

Os pipelines envolvem o pré-processamento e o pós-processamento de saída em torno do tempo de execução, fornecendo uma interface limpa para adicionar o DeepSparse a um aplicativo. A integração DeepSparse-Ultralytics inclui um Pipeline pronto para uso que aceita imagens brutas e gera as caixas delimitadoras.

Criar um Pipeline e executar a inferência:

from deepsparse import Pipeline

# lista de imagens no sistema de arquivos local
images = ["basilica.jpg"]

# criar Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
    task="yolo",
    model_path=model_stub,
)

# executar a inferência nas imagens, receber bounding boxes + classes
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

Se você estiver executando na nuvem, poderá receber um erro de que o open-cv não consegue encontrar o libGL.so.1. Executar o seguinte no Ubuntu o instala:

apt-get install libgl1-mesa-glx

Servidor HTTP

O DeepSparse Server é executado sobre a popular framework web FastAPI e o servidor web Uvicorn. Com apenas um único comando da CLI, pode configurar facilmente um endpoint de serviço de modelo com o DeepSparse. O Server suporta qualquer Pipeline do DeepSparse, incluindo a deteção de objetos com o YOLOv5, permitindo-lhe enviar imagens raw para o endpoint e receber as bounding boxes.

Inicie o servidor com o YOLOv5s podado e quantizado:

deepsparse.server \
    --task yolo \
    --model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none

Um exemplo de solicitação, usando o pacote requests do Python:

import requests, json

# lista de imagens para inferência (arquivos locais no lado do cliente)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]

# enviar solicitação via HTTP para o endpoint /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# a resposta é retornada em JSON
annotations = json.loads(resp.text) # dicionário de resultados de anotação
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

Annotate CLI

Você também pode usar o comando annotate para que o mecanismo salve uma foto anotada no disco. Experimente --source 0 para anotar o feed da sua webcam ao vivo!

deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg

Executar o comando acima criará uma pasta annotation-results e salvará a imagem anotada dentro.

Basílica Anotada com YOLOv5

Desempenho de Benchmark

Usando o script de benchmarking do DeepSparse, compararemos o throughput do DeepSparse com o throughput do ONNX Runtime no YOLOv5s.

Os benchmarks foram executados em uma instância AWS c6i.8xlarge (16 núcleos).

Comparação de Desempenho do Lote 32

Linha de Base do ONNX Runtime

Com batch 32, o ONNX Runtime atinge 42 imagens/seg com o YOLOv5s denso padrão:

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntime

> Caminho do Modelo Original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamanho do Lote: 32
> Cenário: sync
> Taxa de transferência (itens/seg): 41.9025

Desempenho Denso do DeepSparse

Embora o DeepSparse ofereça seu melhor desempenho com modelos esparsos otimizados, ele também tem um bom desempenho com o YOLOv5s denso padrão.

Com batch 32, o DeepSparse atinge 70 imagens/seg com o YOLOv5s denso padrão—uma melhoria de desempenho de 1,7x em relação ao ORT!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1

> Caminho do Modelo Original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamanho do Lote: 32
> Cenário: sync
> Taxa de transferência (itens/seg): 69.5546

Desempenho Esparso do DeepSparse

Quando a esparsidade é aplicada ao modelo, os ganhos de desempenho do DeepSparse sobre o ONNX Runtime são ainda maiores.

Com batch 32, o DeepSparse atinge 241 imagens/seg com o YOLOv5s podado e quantizado—uma melhoria de desempenho de 5,8x em relação ao ORT!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> Caminho do Modelo Original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Tamanho do Lote: 32
> Cenário: sync
> Taxa de transferência (itens/seg): 241.2452

Comparação de Desempenho do Lote 1

O DeepSparse também consegue obter um aumento de velocidade em relação ao ONNX Runtime para o cenário de latência sensível, batch 1.

Linha de Base do ONNX Runtime

Com batch 1, o ONNX Runtime atinge 48 imagens/seg com o YOLOv5s denso padrão.

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntime

> Caminho do Modelo Original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamanho do Lote: 1
> Cenário: sync
> Taxa de Transferência (itens/seg): 48.0921

Desempenho Esparso do DeepSparse

Quando a esparsidade é aplicada ao modelo, os ganhos de desempenho do DeepSparse sobre o ONNX Runtime são ainda maiores.

Com batch 1, o DeepSparse atinge 135 imagens/seg com o YOLOv5s podado e quantizado—uma melhoria de desempenho de 2,8x em relação ao ONNX Runtime!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1

> Caminho do Modelo Original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Tamanho do Lote: 1
> Cenário: sync
> Taxa de Transferência (itens/seg): 134.9468

Como as instâncias c6i.8xlarge possuem instruções VNNI, o throughput do DeepSparse pode ser ainda mais impulsionado se os pesos forem podados em blocos de 4.

Com batch 1, o DeepSparse atinge 180 itens/seg com um YOLOv5s podado e quantizado de 4 blocos—um ganho de desempenho de 3,7x em relação ao ONNX Runtime!

deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1

> Caminho do Modelo Original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Tamanho do Lote: 1
> Cenário: sync
> Taxa de Transferência (itens/seg): 179.7375

E voila! Você está pronto para otimizar sua implantação do YOLOv5 com DeepSparse.

Comece a usar o YOLOv5 e o DeepSparse

Para entrar em contato conosco, junte-se à nossa comunidade e deixe suas perguntas e comentários. Confira o repositório Ultralytics YOLOv5 e a documentação completa da Neural Magic para implementar o YOLOv5.

Na Ultralytics, fazemos parcerias comerciais com outras startups para nos ajudar a financiar a pesquisa e o desenvolvimento das nossas incríveis ferramentas de código aberto, como o YOLOv5, para mantê-las gratuitas para todos. Este artigo pode conter links de afiliados para esses parceiros.

Vamos construir o futuro
da IA juntos!

Comece sua jornada com o futuro do aprendizado de máquina

Comece gratuitamente
Link copiado para a área de transferência