Al hacer clic en "Aceptar todas las cookies", usted acepta el almacenamiento de cookies en su dispositivo para mejorar la navegación por el sitio, analizar el uso del sitio y ayudar en nuestros esfuerzos de marketing. Más información en
Configuración de cookies
Al hacer clic en "Aceptar todas las cookies", usted acepta el almacenamiento de cookies en su dispositivo para mejorar la navegación por el sitio, analizar el uso del sitio y ayudar en nuestros esfuerzos de marketing. Más información en
Potencie la formación y el despliegue de modelos Ultralytics YOLOv5 con DeepSparse de Neural Magic para obtener un rendimiento de clase GPU en CPU. Consiga implantaciones de YOLOv5 más rápidas y escalables.
¿Quiere acelerar la formación y el despliegue de sus modelos YOLOv5? Estamos aquí para ayudarle. Presentamos a nuestro socio más reciente, Neural Magic. Como Neural Magic proporciona herramientas de software que hacen hincapié en el máximo rendimiento de los modelos 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 despliegue de YOLOv5.
DeepSparse es el tiempo de ejecución de inferencia para CPU de Neural Magic, que aprovecha la dispersión y la aritmética de baja precisión de las redes neuronales para ofrecer un rendimiento excepcional en hardware básico. Por ejemplo, en comparación con el tiempo de ejecución de ONNX, DeepSparse ofrece una velocidad 5,8 veces superior para YOLOv5 ejecutándose en la misma máquina.
Por primera vez, sus cargas de trabajo de aprendizaje profundo 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 sencillez del software:
Implementaciones flexibles: Ejecución coherente en la nube, el centro de datos y el perímetro con cualquier proveedor de hardware.
Escalabilidad infinita: Escale con Kubernetes estándar, verticalmente a 100s de núcleos, o totalmente abstraído con serverless.
Integración sencilla: Utilice API limpias para integrar su modelo en una aplicación y supervisarlo en producción.
Alcanza el rendimiento de una GPU en una CPU básica
DeepSparse aprovecha la dispersión del modelo para acelerar su rendimiento.
La sparsificación a través de la poda y la cuantización permite reducciones de orden de magnitud en el tamaño y el cálculo necesarios para ejecutar una red, manteniendo al mismo tiempo una alta precisión. DeepSparse tiene en cuenta la dispersión, omitiendo las multiplicaciones por cero y reduciendo la cantidad de cálculo en una pasada hacia delante. Dado que el cálculo disperso está limitado por la memoria, DeepSparse ejecuta el grafo en profundidad, dividiendo el problema en columnas tensoriales, que son franjas verticales de cálculo que caben en la caché.
Las redes dispersas con cálculo comprimido, ejecutadas en profundidad en la caché, permiten a DeepSparse ofrecer un rendimiento similar al de las GPU en las CPU.
Crear una versión dispersa de YOLOv5 entrenada con datos personalizados
El repositorio de modelos de código abierto de Neural Magic, SparseZoo, contiene puntos de control preespaciados de cada modelo YOLOv5. Mediante SparseML, que está integrado con Ultralytics, puede ajustar con precisión un punto de control disperso en sus datos con un solo comando CLI.
Despliegue de YOLOv5 con DeepSparse
Instalar DeepSparse
Ejecute lo siguiente para instalar DeepSparse. Le recomendamos que utilice un entorno virtual con Python.
pip install deepsparse[servidor,yolo,onnxruntime]
Recopilar un archivo ONNX
DeepSparse acepta un modelo en formato ONNX, pasado como:
Una ruta local a un modelo ONNX
Un stub SparseZoo que identifica un modelo en el SparseZoo
Compararemos los YOLOv5 densos estándar con los YOLOv5 podados-cuantizados, identificados por los siguientes stubs SparseZoo:
DeepSparse ofrece cómodas API para integrar su modelo en una aplicación.
Para probar los ejemplos de despliegue que se muestran a continuación, extraiga una imagen de muestra del ejemplo y guárdela como basilica.jpg con el siguiente comando:
Los pipelines envuelven el preprocesamiento y el postprocesamiento de salida alrededor del tiempo de ejecución, proporcionando una interfaz limpia para añadir 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 cuadros delimitadores.
Crear un Pipeline y ejecutar la inferencia:
from deepsparse import Pipeline
# lista de imágenes en el sistema de archivos local images = ["basilica.jpg"]
Si está ejecutando en la nube, puede obtener un error 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 modelo con DeepSparse. El servidor es compatible con cualquier tubería 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.
Haz girar el servidor con los YOLOv5 podados y cuantificados:
Una petición de ejemplo, utilizando el paquete requests de Python:
importar peticiones, json
# lista de imágenes para la inferencia (archivos locales en el lado del cliente) ruta = ['basilica.jpg'] archivos = [('request', open(img, 'rb')) for img in ruta]
# enviar solicitud por HTTP al punto final /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 anotaciones bounding_boxes = annotations["boxes"] labels = annotations["labels"]
Anotar CLI
También puedes utilizar el comando de anotación para que el motor guarde una foto anotada en el disco. Prueba --source 0 para anotar la imagen de tu webcam en directo.
> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none > Tamaño del lote: 32 > Escenario: sync > Rendimiento (ítems/seg): 69.5546
Rendimiento de DeepSparse Sparse
Cuando se aplica sparsity al modelo, el rendimiento de DeepSparse es aún mayor que el de ONNX Runtime.
En el lote 32, DeepSparse consigue 241 imágenes por segundo con el YOLOv5 cuantificado y podado, lo que supone unamejora de 5,8 veces el rendimiento de ORT.
> Ruta del modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none > Tamaño del lote: 1 > Escenario: sync > Rendimiento (ítems/seg): 48.0921
Rendimiento de DeepSparse Sparse
Cuando se aplica sparsity al modelo, el rendimiento de DeepSparse es aún mayor que el de ONNX Runtime.
En el lote 1, DeepSparse alcanza 135 imágenes/segundo con el YOLOv5 cuantificado y podado, lo que supone unamejora de 2,8 veces el rendimiento de 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 (ítems/seg): 134.9468
Dado que las instancias c6i.8xlarge tienen instrucciones VNNI, el rendimiento de DeepSparse puede aumentarse aún más si los pesos se podan en bloques de 4.
En el lote 1, DeepSparse alcanza 180 ítems/segundo con un YOLOv5 cuantificado y podado en 4 bloques, lo que suponeun aumento del rendimiento de 3,7 veces con respecto a ONNX Runtime.
En Ultralytics, nos asociamos comercialmente con otras startups para que nos ayuden a financiar la investigación y el desarrollo de nuestras increíbles herramientas de código abierto, como YOLOv5, para que sigan siendo gratuitas para todo el mundo. Este artículo puede contener enlaces de afiliación a dichos socios.