¡Sintonice YOLO Vision 2025!
25 de septiembre de 2025
10:00 — 18:00 BST
Evento híbrido
Yolo Vision 2024

Implementa Ultralytics YOLOv5 con DeepSparse de Neural Magic para obtener un rendimiento de clase GPU en CPUs

Equipo de Ultralytics

5 minutos de lectura

5 de enero de 2023

Potencia el entrenamiento y la implementación del modelo YOLOv5 de Ultralytics con DeepSparse de Neural Magic para obtener un rendimiento de clase GPU en las CPU. Logra implementaciones de YOLOv5 más rápidas y escalables.

¿Desea acelerar el entrenamiento y la implementación de sus modelos YOLOv5? ¡Lo tenemos cubierto! Presentamos a nuestro socio más reciente, Neural Magic. Como Neural Magic proporciona herramientas de software que enfatizan el máximo rendimiento del modelo y la simplicidad del flujo de trabajo, es natural que nos hayamos unido para ofrecer una solución que mejore aún más el proceso de implementación de YOLOv5.

DeepSparse es el tiempo de ejecución de inferencia de la CPU de Neural Magic, que aprovecha la dispersión y la aritmética de baja precisión dentro de las redes neuronales para ofrecer un rendimiento excepcional en hardware estándar. Por ejemplo, en comparación con la línea de base de ONNX Runtime, DeepSparse ofrece una aceleración de 5,8x para YOLOv5s que se ejecuta en la misma máquina.

Comparación del rendimiento de YOLOv5 con DeepSparse

Por primera vez, sus cargas de trabajo de deep learning pueden satisfacer las demandas de rendimiento de la producción sin la complejidad y los costes de los aceleradores de hardware. En pocas palabras, DeepSparse le ofrece el rendimiento de las GPU y la simplicidad del software:

  1. Implementaciones flexibles: Se ejecuta de manera consistente en la nube, el centro de datos y el borde con cualquier proveedor de hardware
  2. Escalabilidad infinita: Escale horizontalmente con Kubernetes estándar, verticalmente a cientos de núcleos o totalmente abstraído con serverless.
  3. Fácil integración: Utilice API limpias para integrar su modelo en una aplicación y supervisarlo en producción

Logre un rendimiento de clase GPU en CPU estándar

DeepSparse aprovecha la dispersión del modelo para obtener su aceleración de rendimiento.

La dispersión a través de la poda y la cuantificación 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 dispersión, omitiendo las multiplicaciones-adiciones por cero y reduciendo la cantidad de cálculo en un pase hacia adelante. Dado que el cálculo disperso está limitado por la memoria, DeepSparse ejecuta la red en profundidad, dividiendo el problema en Columnas de Tensores, que son franjas verticales de cálculo que caben en la caché.

Red DeepSparse y Ultralytics YOLOv5

Las redes dispersas con computación comprimida, ejecutadas en profundidad en la caché, permiten que DeepSparse ofrezca un rendimiento de clase GPU en las CPU.

Crear una versión sparse de YOLOv5 entrenada en datos personalizados

El repositorio de modelos de código abierto de Neural Magic, SparseZoo, contiene puntos de control pre-esparcidos de cada modelo YOLOv5. Usando SparseML, que está integrado con Ultralytics, puedes ajustar un punto de control disperso en tus datos con un solo comando CLI.

Implementar YOLOv5 con DeepSparse

Instalar DeepSparse

Ejecute lo siguiente para instalar DeepSparse. Le recomendamos que utilice un entorno virtual con Python.

pip install deepsparse[server,yolo,onnxruntime]

Recopilar un archivo ONNX

DeepSparse acepta un modelo en formato ONNX, pasado ya sea como:

  • Una ruta local a un modelo ONNX
  • Un stub de SparseZoo que identifica un modelo en SparseZoo

Compararemos el YOLOv5s denso estándar con el YOLOv5s podado y cuantificado, identificados por los siguientes stubs de SparseZoo:

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

Implementar un modelo

DeepSparse ofrece APIs convenientes para integrar su modelo en una aplicación.

Para probar los ejemplos de implementación a continuación, descargue una imagen de muestra para el ejemplo y guárdela como basilica.jpg con el siguiente comando:

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

API de Python

Los pipelines envuelven el preprocesamiento y el postprocesamiento de la salida alrededor del runtime, proporcionando una interfaz limpia para agregar DeepSparse a una aplicación. La integración DeepSparse-Ultralytics incluye un Pipeline listo para usar que acepta imágenes sin procesar y genera los bounding boxes.

Crear un Pipeline y ejecutar la inferencia:

from deepsparse import Pipeline

# lista de imágenes en el sistema de archivos local
images = ["basilica.jpg"]

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

# ejecutar la inferencia en las imágenes, recibir bounding boxes + clases
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)

Si se está ejecutando en la nube, puede recibir un error que indica que open-cv no puede encontrar libGL.so.1. Ejecutar lo siguiente en Ubuntu lo instala:

apt-get install libgl1-mesa-glx

Servidor HTTP

DeepSparse Server se ejecuta sobre el popular framework web FastAPI y el servidor web Uvicorn. Con un solo comando CLI, puede configurar fácilmente un punto final de servicio de modelos con DeepSparse. El servidor admite cualquier Pipeline de DeepSparse, incluida la detección de objetos con YOLOv5, lo que le permite enviar imágenes sin procesar al punto final y recibir los cuadros delimitadores.

Poner en marcha el servidor con el YOLOv5s podado y cuantificado:

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

Una solicitud de ejemplo, utilizando el paquete requests de Python:

import requests, json

# lista de imágenes para la inferencia (archivos locales en el lado del cliente)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]

# enviar la solicitud a través de HTTP al endpoint /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)

# la respuesta se devuelve en JSON
annotations = json.loads(resp.text) # diccionario de resultados de anotación
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]

CLI de anotación

También puede utilizar el comando annotate para que el motor guarde una foto anotada en el disco. ¡Pruebe --source 0 para anotar la transmisión en vivo de su cámara web!

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á una carpeta de annotation-results y se guardará la imagen anotada dentro.

Basílica anotada con YOLOv5

Rendimiento de la evaluación comparativa

Usando el script de evaluación comparativa de DeepSparse, compararemos el rendimiento de DeepSparse con el de ONNX Runtime en YOLOv5s.

Los benchmarks se ejecutaron en una instancia c6i.8xlarge de AWS (16 núcleos).

Comparación del rendimiento del lote 32

Línea Base de ONNX Runtime

En el lote 32, ONNX Runtime alcanza 42 imágenes/seg con el YOLOv5s denso estándar:

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

> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamaño del lote: 32
> Escenario: sync
> Rendimiento (elementos/seg): 41.9025

Rendimiento denso de DeepSparse

Si bien DeepSparse ofrece su mejor rendimiento con modelos dispersos optimizados, también funciona bien con el YOLOv5s denso estándar.

En el lote 32, DeepSparse alcanza 70 imágenes/seg con el YOLOv5s denso estándar: ¡una mejora del rendimiento de 1.7x con respecto a ORT!

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

> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamaño del lote: 32
> Escenario: sync
> Rendimiento (elementos/seg): 69.5546

Rendimiento disperso de DeepSparse

Cuando se aplica la dispersión al modelo, las ganancias de rendimiento de DeepSparse sobre ONNX Runtime son aún mayores.

En el lote 32, DeepSparse alcanza 241 imágenes/seg con el YOLOv5s podado y cuantificado: ¡una mejora del rendimiento de 5.8x con respecto a ORT!

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

> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Tamaño del lote: 32
> Escenario: sync
> Rendimiento (elementos/seg): 241.2452

Comparación del rendimiento del lote 1

DeepSparse también puede obtener una aceleración sobre ONNX Runtime para el escenario de latencia sensible, lote 1.

Línea Base de ONNX Runtime

En el lote 1, ONNX Runtime alcanza 48 imágenes/seg con el YOLOv5s estándar y denso.

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

> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamaño del lote: 1
> Escenario: sync
> Rendimiento (elementos/seg): 48.0921

Rendimiento disperso de DeepSparse

Cuando se aplica la dispersión al modelo, las ganancias de rendimiento de DeepSparse sobre ONNX Runtime son aún mayores.

En el lote 1, DeepSparse alcanza 135 imágenes/seg con el YOLOv5s podado y cuantificado: ¡una mejora del rendimiento de 2.8x con respecto a ONNX Runtime!

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

> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Tamaño del lote: 1
> Escenario: sync
> Rendimiento (elementos/seg): 134.9468

Dado que las instancias c6i.8xlarge 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 elementos/seg con un YOLOv5s podado y cuantificado de 4 bloques: ¡una ganancia de rendimiento de 3.7x con respecto a ONNX Runtime!

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

> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Tamaño del lote: 1
> Escenario: sync
> Rendimiento (elementos/seg): 179.7375

¡Y listo! Ya está preparado para optimizar su implementación de YOLOv5 con DeepSparse.

Comience con YOLOv5 y DeepSparse

Para ponerse en contacto con nosotros, únase a nuestra comunidad y déjenos sus preguntas y comentarios. Consulte el repositorio Ultralytics YOLOv5 y la documentación completa de Neural Magic para implementar YOLOv5.

En Ultralytics, nos asociamos comercialmente con otras startups para ayudarnos a financiar la investigación y el desarrollo de nuestras increíbles herramientas de código abierto, como YOLOv5, para mantenerlas gratuitas para todos. Este artículo puede contener enlaces de afiliados a esos socios.

¡Construyamos juntos el futuro
de la IA!

Comience su viaje con el futuro del aprendizaje automático

Comienza gratis
Enlace copiado al portapapeles