Al hacer clic en “Aceptar todas las cookies”, aceptas el almacenamiento de cookies en tu dispositivo para mejorar la navegación del sitio, analizar el uso del sitio y ayudar en nuestros esfuerzos de marketing. Más información
Configuración de cookies
Al hacer clic en “Aceptar todas las cookies”, aceptas el almacenamiento de cookies en tu dispositivo para mejorar la navegación del sitio, analizar el uso del sitio y ayudar en nuestros esfuerzos de marketing. Más información
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.
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:
Implementaciones flexibles: Se ejecuta de manera consistente en la nube, el centro de datos y el borde con cualquier proveedor de hardware
Escalabilidad infinita: Escale horizontalmente con Kubernetes estándar, verticalmente a cientos de núcleos o totalmente abstraído con serverless.
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é.
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:
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:
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"]
# 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:
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!
> 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!
> 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!
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.