Implementa o YOLOv5 da Ultralytics com o DeepSparse da Neural Magic para Desempenho de Nível de GPU em CPUs
Potencia o treino e a implementação do modelo YOLOv5 da Ultralytics com o DeepSparse da Neural Magic para desempenho de nível de GPU em CPUs. Alcança implementações de YOLOv5 mais rápidas e escaláveis.

Queres acelerar o treino e a implementação dos teus modelos YOLOv5? Nós tratamos disso! Apresentamos o nosso mais recente parceiro, Neural Magic. Como a Neural Magic fornece ferramentas de software que enfatizam o desempenho máximo dos modelos e a simplicidade dos fluxos de trabalho, é perfeitamente natural que nos tenhamos unido para oferecer uma solução que torna o processo de implementação do YOLOv5 ainda melhor.
DeepSparse é o runtime de inferência de CPU da Neural Magic, que tira partido da dispersão (sparsity) e da aritmética de baixa precisão nas redes neurais para oferecer um desempenho excecional em hardware convencional. 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 a executar na mesma máquina!

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 de aceleradores de hardware. Simplificando, o DeepSparse te dá o desempenho de GPUs e a simplicidade de software:
- Implementações flexíveis: Execute de forma consistente em nuvem, data center e edge com qualquer provedor de hardware
- Escalabilidade infinita: Escale horizontalmente com Kubernetes padrão, verticalmente para centenas de núcleos ou de forma totalmente abstraída com serverless
- Integração fácil: Use APIs limpas para integrar seu modelo a uma aplicação e monitorá-lo em produção
Alcance desempenho de classe GPU em CPUs comuns#
O DeepSparse aproveita a esparsidade do modelo para ganhar velocidade no 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 a alta precisão. O DeepSparse é consciente da esparsidade, pulando as multiplicações-somas por zero e diminuindo a quantidade de computação em um passo forward. Como a computação esparsa é limitada pela memória, o DeepSparse executa a rede em profundidade, dividindo o problema em colunas de tensores (Tensor Columns), que são faixas verticais de computação que cabem no cache.

Redes esparsas com computação compactada, executadas em profundidade no cache, permitem que o DeepSparse entregue desempenho de classe GPU em CPUs!
Cria uma Versão Esparsa do Ultralytics YOLOv5 Treinada com 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 (fine-tune) um checkpoint esparso nos seus dados com um único comando CLI.
Faz o Deploy do Ultralytics YOLOv5 Com o DeepSparse#
Instale o DeepSparse#
Execute o seguinte para instalar o DeepSparse. Recomendamos que você use um ambiente virtual com Python.
pip install deepsparse[server,yolo,onnxruntime]Obtenha um arquivo ONNX#
O DeepSparse aceita um modelo no formato ONNX, passado como:
- Um caminho local para um modelo ONNX
- Um stub do SparseZoo que identifica um modelo no SparseZoo
Compararemos o YOLOv5s denso padrão ao YOLOv5s podado e 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-noneImplemente um modelo#
O DeepSparse oferece APIs convenientes para integrar seu modelo a uma aplicação.
Para testar os exemplos de implementação abaixo, baixe uma imagem de amostra para o exemplo e salve como basilica.jpg com o seguinte comando:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpgAPI Python#
Pipelines envolvem o pré-processamento e o pós-processamento de saída ao redor do runtime, fornecendo uma interface limpa para adicionar o DeepSparse a uma aplicação. A integração DeepSparse-Ultralytics inclui um Pipeline pronto para uso que aceita imagens brutas e gera as caixas delimitadoras (bounding boxes).
Crie um Pipeline e execute a inferência:
from deepsparse import Pipeline
# list of images in local filesystem
images = ["basilica.jpg"]
# create Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo_pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# run inference on images, receive bounding boxes + classes
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)Se você estiver rodando na nuvem, pode receber um erro de que o open-cv não consegue encontrar a libGL.so.1. Executar o comando abaixo no Ubuntu a instala:
apt-get install libgl1-mesa-glxServidor HTTP#
O DeepSparse Server roda sobre o popular framework web FastAPI e o servidor web Uvicorn. Com apenas um único comando de CLI, podes configurar facilmente um endpoint de serviço de modelo com o DeepSparse. O Server suporta qualquer Pipeline do DeepSparse, incluindo deteção de objetos com o Ultralytics YOLOv5, permitindo-te enviar imagens brutas 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-noneUm exemplo de requisição, usando o pacote requests do Python:
import requests, json
# list of images for inference (local files on client side)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# send request over HTTP to /predict/from_files endpoint
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)
# response is returned in JSON
annotations = json.loads(resp.text) # dictionary of annotation results
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]CLI de anotação#
Você também pode usar o comando annotate para fazer com que o motor salve uma foto anotada no disco. Tente --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.jpgAo executar o comando acima, será criada uma pasta annotation-results e a imagem anotada será salva nela.

Benchmark de desempenho#
Usando o script de benchmarking do DeepSparse, compararemos o rendimento do DeepSparse ao rendimento do ONNX Runtime no YOLOv5s.
Os benchmarks foram executados em uma instância AWS c6i.8xlarge (16 núcleos).
Comparação de desempenho com Batch 32#
Linha de base do ONNX Runtime#
No 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 onnxruntimeOriginal Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Scenario: sync Throughput (items/sec): 41.9025
Desempenho do DeepSparse denso#
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.
No batch 32, o DeepSparse atinge 70 imagens/seg com o YOLOv5s denso padrão — uma melhoria de 1,7x no desempenho em relação ao ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 32 Scenario: sync Throughput (items/sec): 69.5546
Desempenho do DeepSparse esparso#
Quando a esparsidade é aplicada ao modelo, os ganhos de desempenho do DeepSparse sobre o ONNX Runtime são ainda mais fortes.
No batch 32, o DeepSparse atinge 241 imagens/seg com o YOLOv5s podado e quantizado — uma melhoria de 5,8x no desempenho em relação ao ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Batch Size: 32 Scenario: sync Throughput (items/sec): 241.2452
Comparação de desempenho com Batch 1#
O DeepSparse também consegue obter uma aceleração em relação ao ONNX Runtime para o cenário de batch 1, sensível à latência.
Linha de base do ONNX Runtime#
No 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 onnxruntimeOriginal Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none Batch Size: 1 Scenario: sync Throughput (items/sec): 48.0921
Desempenho do DeepSparse esparso#
Quando a esparsidade é aplicada ao modelo, os ganhos de desempenho do DeepSparse sobre o ONNX Runtime são ainda mais fortes.
No batch 1, o DeepSparse atinge 135 imagens/seg com o YOLOv5s podado e quantizado — uma melhoria de 2,8x no desempenho em relação ao ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 1 -nstreams 1Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none Batch Size: 1 Scenario: sync Throughput (items/sec): 134.9468
Como as instâncias c6i.8xlarge possuem instruções VNNI, o rendimento do DeepSparse pode ser aumentado ainda mais se os pesos forem podados em blocos de 4.
No batch 1, o DeepSparse atinge 180 itens/seg com o YOLOv5s podado e quantizado em blocos de 4 — um ganho de 3,7x no desempenho 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 1Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni Batch Size: 1 Scenario: sync Throughput (items/sec): 179.7375
E voilà! Estás pronto para otimizar a tua implementação do YOLOv5 com o DeepSparse.
Começa com o Ultralytics YOLOv5 e o DeepSparse#
Para entrar em contacto connosco, junta-te à nossa comunidade e deixa-nos as tuas dúvidas e comentários. Consulta o repositório do Ultralytics YOLOv5 e a documentação completa da Neural Magic para implementar o YOLOv5.
Na Ultralytics, somos parceiros comerciais de outras startups para nos ajudar a financiar a pesquisa e o desenvolvimento de nossas ferramentas de código aberto, como o YOLOv5, para mantê-las gratuitas para todos. Este artigo pode conter links de afiliados para esses parceiros.






