Verificação verde
Link copiado para a área de transferência

Deploy Ultralytics YOLOv5 With Neural Magic’s DeepSparse for GPU-Class Performance on CPUs

Empower Ultralytics YOLOv5 model training & deployment with Neural Magic's DeepSparse for GPU-class performance on CPUs. Achieve faster, scalable YOLOv5 deployments.

Queres acelerar a formação e a implementação dos teus YOLOv5 modelos? Nós ajudamos-te! Apresentamos-te o nosso mais recente parceiro, Neural Magic. Como Neural Magic fornece ferramentas de software que enfatizam o desempenho máximo do modelo e a simplicidade do fluxo de trabalho, é natural que nos tenhamos juntado para oferecer uma solução para tornar o processo de implementação deYOLOv5 ainda melhor.

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

YOLOv5 Comparação da taxa de transferência com o DeepSparse

Pela primeira vez, as tuas cargas de trabalho de aprendizagem profunda podem satisfazer as exigências 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: Executa de forma consistente na nuvem, no centro de dados e na borda com qualquer fornecedor de hardware
  2. Escalabilidade infinita: Escala com Kubernetes padrão, verticalmente para 100s de núcleos, ou totalmente abstraído com serverless
  3. Integração fácil: Utiliza APIs simples para integrar o teu modelo numa aplicação e monitorizá-lo na produção

Alcança o desempenho de classe GPU em CPUs comuns

O DeepSparse aproveita a esparsidade do modelo para ganhar 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, pulando as adições de multiplicação 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 Tensor Columns, que são faixas verticais de computação que cabem no cache.

DeepSparse e Ultralytics YOLOv5  Network

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

Cria uma versão esparsa de YOLOv5 treinada em dados personalizados

Neural MagicO repositório de modelos de código aberto da SparseZoo contém pontos de controlo pré-esparsos de cada modelo YOLOv5 . Utilizando o SparseML, que está integrado em Ultralytics, pode ajustar um ponto de verificação esparso aos seus dados com um único comando CLI .

Consulta a documentação Neural Magic's YOLOv5 para obteres mais detalhes.

Implanta YOLOv5 com DeepSparse

Instala o DeepSparse

Executa o seguinte para instalar o DeepSparse. Recomendamos que utilizes um ambiente virtual com Python.

pip install deepsparse[server,yolo,onnxruntime]

Recolhe um ficheiro ONNX

DeepSparse aceita um modelo no formato ONNX , passado como:

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

Iremos comparar os YOLOv5s densos padrão com os YOLOv5s com quantis podados, identificados pelos seguintes stubs SparseZoo:

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

Implementa um modelo

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

Para experimentar os exemplos de implantação abaixo, puxa uma imagem de amostra para o exemplo e salva 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

Python API

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 produz as caixas delimitadoras.

Cria um Pipeline e executa a inferência:

from deepsparse import Pipeline

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

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

# executa a inferência em imagens, recebe caixas delimitadoras + classes
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

Se estiveres a correr na nuvem, podes receber um erro em que o open-cv não consegue encontrar o libGL.so.1. Executando o seguinte no Ubuntu, instala-o:

apt-get install libgl1-mesa-glx

Servidor HTTP

O DeepSparse Server é executado sobre o popular framework web FastAPI e o servidor web Uvicorn. Com apenas um único comando CLI , podes facilmente configurar um endpoint de serviço de modelo com o DeepSparse. O Servidor suporta qualquer Pipeline do DeepSparse, incluindo a deteção de objectos com YOLOv5, permitindo-te enviar imagens em bruto para o endpoint e receber as caixas delimitadoras.

Liga o servidor com o YOLOv5s podado e quantificado:

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

Um exemplo de pedido, utilizando o pacote de pedidos do Python:

importa pedidos, json

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

# envia o pedido por HTTP para o ponto final /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

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

Anotar CLI

Também podes utilizar o comando annotate para que o motor guarde uma fotografia anotada no disco. Experimenta --source 0 para anotar a tua webcam ao vivo!

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

Ao executar o comando acima, cria uma pasta de resultados da anotação e guarda a imagem anotada no seu interior.

Anotado Basilica com YOLOv5

Desempenho de referência

Usando o script de benchmarking do DeepSparse, vamos comparar a taxa de transferência do DeepSparse com a taxa de transferência do ONNX Runtime no YOLOv5s.

Os testes de referência foram executados numa instância AWS c6i.8xlarge (16 núcleos).

Comparação de desempenho do lote 32

ONNX Linha de base do tempo de execução

No lote 32, o ONNX Runtime alcança 42 imagens/seg. com os YOLOv5s densos 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: sincroniza
> Taxa de transferência (itens/seg): 41.9025

DeepSparse Dense Desempenho

Embora o DeepSparse ofereça o seu melhor desempenho com modelos esparsos optimizados, também tem um bom desempenho com os YOLOv5s densos padrão.

No lote 32, o DeepSparse atinge 70 imagens/seg. com o YOLOv5s denso padrão - umamelhoria de desempenho de 1,7 vezes 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: sincroniza
> Taxa de transferência (itens/seg): 69.5546

DeepSparse Desempenho esparso

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

No lote 32, o DeepSparse alcança 241 imagens/seg. com o YOLOv5s com quantização podada - umamelhoria 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: sincroniza
> Taxa de transferência (itens/seg): 241.2452

Comparação do desempenho do lote 1

O DeepSparse também é capaz de ganhar velocidade em relação ao ONNX Runtime para o cenário de lote 1 sensível à latência.

ONNX Linha de base do tempo de execução

No lote 1, o ONNX Runtime alcança 48 imagens/seg. com os YOLOv5s padrão e densos.

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: sincroniza
> Taxa de transferência (itens/seg): 48.0921

DeepSparse Desempenho esparso

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

No lote 1, o DeepSparse alcança 135 imagens/seg. com o YOLOv5s com quantização reduzida - umamelhoria 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: sincroniza
> Taxa de transferência (itens/seg.): 134.9468

Como as instâncias c6i.8xlarge têm instruções VNNI, a taxa de transferência do DeepSparse pode ser aumentada ainda mais se os pesos forem podados em blocos de 4.

No lote 1, o DeepSparse alcança 180 itens/seg. com um YOLOv5s de 4 blocos com quantização podada - umganho de desempenho de 3,7 vezes 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: sincroniza
> Taxa de transferência (itens/seg.): 179.7375

E pronto! Estás pronto para otimizar a tua implementação de YOLOv5 com DeepSparse.

Começa a usar YOLOv5 e DeepSparse

Para entrar em contacto connosco, junta-te à nossa comunidade e deixa-nos as tuas perguntas e comentários. Consulta o repositórioUltralytics YOLOv5 e a documentação completa Neural Magic para implementar YOLOv5.

Em Ultralytics, estabelecemos parcerias comerciais com outras startups para nos ajudar a financiar a investigação e o desenvolvimento das nossas fantásticas ferramentas de código aberto, como YOLOv5, para as mantermos gratuitas para todos. Este artigo pode conter links de afiliados para esses parceiros.

Logótipo do FacebookLogótipo do TwitterLogótipo do LinkedInSímbolo de ligação de cópia

Ler mais nesta categoria

Vamos construir juntos o futuro
da IA!

Começa a tua viagem com o futuro da aprendizagem automática