Yolo Vision Shenzhen
Shenzhen
Junte-se agora

Implante o Ultralytics YOLOv5 com o DeepSparse da Neural Magicpara obter desempenho GPU em CPUs

Equipa Ultralytics

Leitura de 5 minutos

5 de janeiro de 2023

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

Pretende acelerar a formação e a implementação do seu YOLOv5 modelos? Nós temos tudo o que precisa! Apresentamos o nosso mais novo 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 juntemos para oferecer uma solução para tornar o processo de implantaçãoYOLOv5 ainda melhor.

DeepSparse é o tempo de execução de inferência de CPU do Neural Magic, 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, comparado com a linha de base ONNX Runtime, o DeepSparse oferece um aumento de velocidade de 5,8x para YOLOv5s rodando na mesma máquina!

Comparação do rendimento YOLOv5 com o 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

Obtenha um desempenho 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, 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 Colunas Tensor , que são faixas verticais de computação que cabem no cache.

RedeYOLOv5 DeepSparse e Ultralytics

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

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

O repositório de modelos de código aberto da Neural Magic, SparseZoo, contém pontos de verificação pré-esparsificados de cada modelo YOLOv5 . Usando o SparseML, que é integrado ao Ultralytics, é possível ajustar um ponto de verificação esparso em seus dados com um único comando CLI .

Implantar YOLOv5 com DeepSparse

Instalar DeepSparse

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

pip install deepsparse[serveryolo,onnxruntime]

Recolher um ficheiro 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

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

zoo:ultralytics
zoo:ultralytics

Implementar um Modelo

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

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

wget -O basilicabasilicajpg

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 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 ficheiros local
images = [basilica.jpg"]

# criar Pipeline
model_stub = "zoo:ultralytics"
yolo_pipeline = Pipeline.create(
task=yolo",
model_path=model_stub,
)

# executar inferência em imagens, receber caixas delimitadoras + classes
pipeline_outputs = yolo(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 o popular framework web FastAPI e o servidor web Uvicorn. Com apenas um único comando CLI , é possível configurar facilmente um endpoint de serviço de modelo com o DeepSparse. O Servidor suporta qualquer Pipeline do DeepSparse, incluindo deteção de objetos com YOLOv5, permitindo enviar imagens brutas para o endpoint e receber as caixas delimitadoras.

Inicie o servidor com o YOLOv5s podado e quantizado:

deepsparse.server \
--task yolo \
--model_path zoo:ultralytics

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

import requests, 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]

# 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"]

Anotar 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:ultralytics--source basilica.jpg

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

Basilica anotada com YOLOv5

Desempenho de Benchmark

Usando o script de benchmarking do DeepSparse, compararemos a taxa de transferência do DeepSparse com a taxa de transferência 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 tempo de execução ONNX

No lote 32, ONNX tempo de execução ONNX atinge 42 imagens/seg. com os YOLOv5s densos padrão:

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1 -e onnxruntime

> Caminho do modelo original: zoo:ultralytics
> 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:ultralytics-s sync -b 32 -nstreams 1

> Caminho do modelo original: zoo:ultralytics
> 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 em relação ao 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:ultralytics-s sync -b 32 -nstreams 1

> Caminho do modelo original: zoo:ultralytics
> 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 é capaz de ganhar velocidade em relação ao ONNX Runtime para o cenário de lote 1 sensível à latência.

Linha de base do tempo de execução ONNX

No lote 1, ONNX tempo de execução ONNX atinge 48 imagens/seg. com os YOLOv5s padrão e densos.

deepsparse.benchmark zoo:ultralytics-s sync -b 1 -nstreams 1 -e onnxruntime

> Caminho do modelo original: zoo:ultralytics
> 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 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 podada - umamelhoria de desempenho de 2,8x em relação ao ONNX Runtime!

deepsparse.benchmark zoo:ultralytics-s sync -b 32 -nstreams 1

> Caminho do modelo original: zoo:ultralytics
> 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.

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:ultralytics-s sync -b 1 -nstreams 1

> Caminho do modelo original: zoo:ultralytics
> Tamanho do lote: 1
> Cenário: sync
> Taxa de transferência (itens/seg): 179.7375

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

Introdução ao YOLOv5 e ao DeepSparse

Para entrar em contacto connosco, junte-se à nossa comunidade e deixe-nos as suas perguntas e comentários. Confira o repositórioUltralytics YOLOv5 e a documentação completa Neural Magic para implantar YOLOv5.

Na 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 o YOLOv5, para as manter 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