Saltar al contenido

Neural MagicDeepSparse

Bienvenido a la IA por software.

Esta gu铆a explica c贸mo desplegar YOLOv5 con DeepSparse de Neural Magic.

DeepSparse es un tiempo de ejecuci贸n de inferencia con un rendimiento excepcional en CPU. Por ejemplo, en comparaci贸n con la l铆nea de base de ONNX Runtime, DeepSparse ofrece una velocidad 5,8 veces superior para YOLOv5s, 隆ejecut谩ndose en la misma m谩quina!

YOLOv5 mejora de la velocidad

Por primera vez, tus cargas de trabajo de aprendizaje profundo pueden satisfacer las exigencias de rendimiento de la producci贸n sin la complejidad y los costes de los aceleradores de hardware. En pocas palabras, DeepSparse te ofrece el rendimiento de las GPU y la sencillez del software:

  • Despliegues flexibles: Funciona de forma coherente en la nube, el centro de datos y el per铆metro con cualquier proveedor de hardware, desde Intel a AMD o ARM.
  • Escalabilidad infinita: Escala verticalmente a cientos de n煤cleos, hacia fuera con Kubernetes est谩ndar, o de forma totalmente abstracta con Serverless
  • F谩cil integraci贸n: API limpias para integrar tu modelo en una aplicaci贸n y supervisarlo en producci贸n

驴C贸mo consigue DeepSparse un rendimiento de clase GPU?

DeepSparse aprovecha la dispersi贸n del modelo para acelerar su rendimiento.

La sparsificaci贸n mediante la poda y la cuantizaci贸n es una t茅cnica ampliamente estudiada, que permite reducciones de orden de magnitud en el tama帽o y el c谩lculo necesarios para ejecutar una red, manteniendo una alta precisi贸n. DeepSparse es consciente de la escasez, lo que significa que omite los par谩metros reducidos a cero, reduciendo la cantidad de c谩lculo en una pasada hacia delante. Como el c谩lculo disperso est谩 ahora limitado por la memoria, DeepSparse ejecuta la red en profundidad, dividiendo el problema en Tensor Columnas, franjas verticales de c谩lculo que caben en la cach茅.

YOLO poda de modelos

Las redes dispersas con c谩lculo comprimido, ejecutadas en profundidad en la cach茅, permiten a DeepSparse ofrecer un rendimiento de clase GPU en CPUs.

驴C贸mo puedo crear una versi贸n dispersa de YOLOv5 entrenada con mis datos?

Neural MagicSparseZoo, el repositorio de modelos de c贸digo abierto, contiene puntos de control preespaciados de cada modelo YOLOv5 . Con SparseML, que est谩 integrado en Ultralytics, puedes ajustar un punto de control disperso a tus datos con un solo comando CLI .

Consulta la documentaci贸n de Neural Magic's YOLOv5 para m谩s detalles.

Uso de DeepSparse

Recorreremos un ejemplo de evaluaci贸n comparativa y despliegue de una versi贸n dispersa de YOLOv5s con DeepSparse.

Instalar DeepSparse

Ejecuta lo siguiente para instalar DeepSparse. Te recomendamos que utilices un entorno virtual con Python.

pip install "deepsparse[server,yolo,onnxruntime]"

Recopila un archivo ONNX

DeepSparse acepta un modelo en el formato ONNX , pasado como:

  • Un stub de SparseZoo que identifica un archivo ONNX en el SparseZoo
  • Una ruta local a un modelo ONNX en un sistema de archivos

Los ejemplos que siguen utilizan los puntos de control YOLOv5s est谩ndar densos y podados-cuantizados, identificados por los siguientes stubs SparseZoo:

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

Despliega un modelo

DeepSparse ofrece c贸modas API para integrar tu modelo en una aplicaci贸n.

Para probar los ejemplos de despliegue que aparecen a continuaci贸n, despliega una imagen de muestra y gu谩rdala como basilica.jpg con lo siguiente:

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

Python API

Pipelines envuelven el preprocesamiento y el postprocesamiento de salida en torno al tiempo de ejecuci贸n, proporcionando una interfaz limpia para a帽adir DeepSparse a una aplicaci贸n. La integraci贸n DeepSparse-Ultralytics incluye una interfaz Pipeline que acepta im谩genes sin procesar y genera los cuadros delimitadores.

Crea una Pipeline y ejecuta la inferencia:

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)

Si est谩s ejecutando en la nube, puedes obtener un error que indique que open-cv no puede encontrar libGL.so.1. Ejecutando lo siguiente en Ubuntu se instala:

apt-get install libgl1

Servidor HTTP

DeepSparse Server se ejecuta sobre el popular marco web FastAPI y el servidor web Uvicorn. Con un solo comando CLI , puedes configurar f谩cilmente un punto final de servicio modelo con DeepSparse. El Servidor admite cualquier canalizaci贸n de DeepSparse, incluida la detecci贸n de objetos con YOLOv5, lo que te permite enviar im谩genes sin procesar al punto final y recibir los cuadros delimitadores.

Haz girar el Servidor con los YOLOv5 podados-cuantizados:

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

Una solicitud de ejemplo, utilizando Python's requests paquete:

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

Anota CLI

Tambi茅n puedes utilizar el comando anotar para que el motor guarde en disco una foto anotada. Prueba --fuente 0 para anotar la imagen de tu webcam en directo.

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

Al ejecutar el comando anterior se crear谩 un annotation-results y guarda dentro la imagen anotada.

anotado

Evaluaci贸n comparativa de resultados

Compararemos el rendimiento de DeepSparse con el de ONNX Runtime en YOLOv5s, utilizando el script de evaluaci贸n comparativa de DeepSparse.

Las pruebas se ejecutaron en una plataforma AWS c6i.8xlarge (16 n煤cleos).

Comparaci贸n del rendimiento del Lote 32

ONNX L铆nea de base en tiempo de ejecuci贸n

En el lote 32, ONNX Runtime alcanza 42 im谩genes/seg con los YOLOv5 est谩ndar densos:

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

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 41.9025

Rendimiento DeepSparse Dense

Aunque DeepSparse ofrece su mejor rendimiento con modelos dispersos optimizados, tambi茅n funciona bien con los YOLOv5 densos est谩ndar.

En el lote 32, DeepSparse consigue 70 im谩genes/seg con los YOLOv5 densos est谩ndar, 隆una mejora de rendimiento de 1,7 veces respecto a ORT!

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

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 69.5546

Rendimiento de DeepSparse Sparse

Cuando se aplica la sparsity al modelo, el aumento de rendimiento de DeepSparse respecto a ONNX Runtime es a煤n mayor.

En el lote 32, DeepSparse consigue 241 im谩genes/seg. con los YOLOv5 podados-cuantizados, 隆una mejora de rendimiento de 5,8 veces respecto a ORT!

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

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batch Size: 32
> Scenario: sync
> Throughput (items/sec): 241.2452

Comparaci贸n del rendimiento del Lote 1

DeepSparse tambi茅n es capaz de aumentar la velocidad respecto a ONNX Runtime en el escenario del lote 1, sensible a la latencia.

ONNX L铆nea de base en tiempo de ejecuci贸n

En el lote 1, ONNX Tiempo de ejecuci贸n alcanza 48 im谩genes/seg con los YOLOv5 est谩ndar y densos.

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

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 48.0921

Rendimiento de DeepSparse Sparse

En el lote 1, DeepSparse alcanza 135 铆tems/seg con un YOLOv5s podado-cuantizado, 隆una ganancia de rendimiento de 2,8 veces respecto a ONNX Runtime!

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

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 134.9468

Desde c6i.8xlarge instancias tienen instrucciones VNNI, el rendimiento de DeepSparse puede aumentar a煤n m谩s si los pesos se podan en bloques de 4.

En el lote 1, DeepSparse alcanza 180 铆tems/seg con un YOLOv5s de 4 bloques podado-cuantizado, 隆una ganancia de rendimiento de 3,7 veces respecto a ONNX Runtime!

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

> Original Model Path: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Batch Size: 1
> Scenario: sync
> Throughput (items/sec): 179.7375

Empieza con DeepSparse

驴Investigaci贸n o pruebas? La Comunidad DeepSparse es gratuita para investigaci贸n y pruebas. Empieza con nuestra Documentaci贸n.



Creado 2023-11-12, Actualizado 2024-03-19
Autores: glenn-jocher (4)

Comentarios