ShaderNN 2.0: un motor de inferencia móvil eficiente y liviano basado en la pila de gráficos completos de GPU

fondo: 

5d31ab84c8687beb49879c5a75b608f3.png

En los últimos años, la investigación y la industrialización del aprendizaje profundo se han desarrollado rápidamente. Con la mejora de la potencia informática del terminal móvil, los requisitos en tiempo real y las consideraciones de privacidad de los datos del usuario, cada vez más tareas de razonamiento se transfieren de la nube al terminal móvil. El razonamiento de aprendizaje profundo en plataformas móviles necesita resolver problemas como plataformas de hardware, controladores, optimización de compilación, compresión de modelos, optimización de algoritmos de operadores e implementación. Muchas empresas están desarrollando marcos de aprendizaje profundo de código abierto orientados a dispositivos móviles, como Xiaomi MACE, Tencent Youtu NCNN/TNN, Ali MNN y Google TensorFlow Lite. Las plataformas de inferencia existentes suelen tener problemas relacionados con bibliotecas de terceros y controladores de plataformas de hardware, como la adaptación, la verificación de modelos y la interacción de datos, lo que genera una optimización, implementación, mantenimiento y actualizaciones engorrosas.

Para las aplicaciones de IA de gráficos e imágenes en terminales móviles, debido a las limitaciones en la potencia informática, el bajo consumo de energía, el ancho de banda de E/S, la arquitectura de la memoria y los métodos de acceso, es difícil que los marcos de razonamiento existentes cumplan con los estrictos requisitos del rendimiento en tiempo real. , rendimiento y consumo de energía. Con el fin de satisfacer las necesidades de un razonamiento eficiente de IA para gráficos móviles y posprocesamiento de imágenes, mejorar el rendimiento y reducir costos, presentamos el razonamiento eficiente de GPU Shader basado en el backend OpenGL en el artículo " ShaderNN, un motor ligero de inferencia de aprendizaje profundo para AI Graphics " [1] La primera fase del proyecto del motor ShaderNN, en este artículo, presentaremos las nuevas características proporcionadas por ShaderNN 2.0, las principales características técnicas (alto rendimiento, ligero, universal y fácil de expandir), rendimiento y ventajas de consumo de energía y algunas aplicaciones típicas Escenas.

En la actualidad, la mejora del rendimiento de los procesadores móviles convencionales no solo se beneficia del aumento de la frecuencia de la CPU y los núcleos múltiples, sino también a través de la configuración de hardware de GPU de múltiples núcleos como aceleradores de procesamiento de imágenes y procesamiento de gráficos, como ARM Mali GPU, GPU Qualcomm Adreno y Apple A15. Los principales marcos de trabajo de inferencia móvil básicamente brindan aceleración de inferencia basada en GPU, y las interfaces de programación de GPU ampliamente utilizadas incluyen OpenGL, Vulkan y OpenCL. Las principales aplicaciones de procesamiento de imágenes y gráficos en el terminal móvil se desarrollan principalmente sobre la base de la pila de gráficos OpenGL o Vulkan. Si el marco de razonamiento adopta otras soluciones de aceleración, como NPU/DSP, OpenCL, al integrarse con las aplicaciones mencionadas anteriormente, el principal problema que enfrenta es la sobrecarga de la interacción de datos. El marco de razonamiento de la fase I de ShaderNN se basa en OpenGL, que puede procesar directamente la textura OpenGL y generar textura OpenGL. Como una nueva generación de pila de gráficos, Vulkan es una API informática y de gráficos de bajo nivel multiplataforma, mientras que OpenGL es un conjunto de API de gráficos más avanzadas. Aquí hay algunas ventajas de Vulkan sobre OpenGL:

  • Menor sobrecarga: el objetivo del diseño de Vulkan es proporcionar una menor sobrecarga de CPU y un mayor rendimiento de subprocesos múltiples. Permite a los desarrolladores controlar mejor los recursos de hardware, como la memoria de video y los subprocesos, lo que reduce la sobrecarga del controlador y mejora el rendimiento de la aplicación.

  • Control explícito: Vulkan requiere que los desarrolladores administren la canalización de representación de gráficos y los recursos de manera más explícita. Este control explícito permite a los desarrolladores optimizar y administrar mejor los recursos para diferentes plataformas de hardware.

  • Compatibilidad con subprocesos múltiples: Vulkan admite la representación de subprocesos múltiples, lo que permite a los desarrolladores utilizar mejor los procesadores de varios núcleos. Esto mejora el rendimiento de los gráficos y las tareas informáticas y permite un mejor procesamiento en paralelo.

  • Mejor gestión de la memoria: Vulkan proporciona un mecanismo de gestión de la memoria más flexible, lo que brinda a los desarrolladores un mayor control sobre la asignación y el uso de la memoria. Esto permite a los desarrolladores administrar la memoria de video de manera más eficiente, reducir la fragmentación de la memoria y optimizar el rendimiento de la aplicación.

  • Mejor soporte asíncrono: Vulkan permite a los desarrolladores tener un mejor procesamiento asíncrono entre diferentes tareas. Esto permite a los desarrolladores utilizar mejor la potencia informática de la GPU para realizar múltiples tareas simultáneamente, mejorando el rendimiento y la eficiencia de las aplicaciones.

En general, Vulkan proporciona una sobrecarga más baja, mejor compatibilidad con subprocesos múltiples, administración de memoria más flexible y mejores capacidades de procesamiento asincrónico en comparación con OpenGL. Estas características hacen de Vulkan una mejor opción para aplicaciones gráficas que requieren un mayor rendimiento y un control de bajo nivel. Vulkan también presenta soporte nativo para algunas funciones de alto rendimiento, como las extensiones de trazado de rayos. Cada vez más fabricantes de software y hardware lo aceptan y lo admiten, y se aplica a los últimos juegos, gráficos e imágenes. Para satisfacer las necesidades de cada vez más posprocesamiento de IA basado en aplicaciones Vulkan en terminales móviles, también se necesita un motor de inferencia ligero y personalizable que pueda conectarse sin problemas con la canalización de renderizado de la aplicación Vulkan. Para satisfacer esta demanda, agregamos soporte para el backend Vulkan sobre la base de la primera fase de ShaderNN 1.0, lanzamos el primer motor de inferencia móvil Shader 2.0 que admite la pila de gráficos completos OpenGL y Vulkan, y recientemente lanzamos una versión de vista previa de código abierto.

1. Diagrama de flujo de ShaderNN 2.0

473ecb7793f495bc87c624c5326c0651.png

Figura 1: Diagrama de flujo de trabajo de ShaderNN

Como se muestra en la Figura 1, todo el flujo de trabajo de ShaderNN se puede dividir en conversión de modelos y optimización de fusión de capas, modelo de red y análisis de carga de peso, generación de gráficos de cálculo, ejecución de operadores de gráficos de cálculo y predicción de inferencia para obtener resultados relevantes. La optimización se realiza en la etapa de compilación y en la etapa de tiempo de ejecución, y el motor de inferencia se optimiza por separado. La optimización de la compilación incluye la compilación Shader y la optimización de caché, el reemplazo y la fusión de operadores equivalentes, etc. En la fase de ejecución, ShaderNN mejora el rendimiento a través de la optimización de la convolución, la reutilización de texturas, la reutilización de la memoria de la CPU y la GPU, la optimización del diseño de la estructura de datos, el almacenamiento en caché y la optimización de la vectorización.

El modelo de formato ONNX exportado después del entrenamiento de TensorFlow o PyTorch se convierte al formato de modelo JSON compatible con ShaderNN a través de la herramienta de conversión de ShaderNN. Durante el proceso de conversión, el convertidor de modelos desacopla la estructura y los pesos del modelo, analiza los operadores y realiza la optimización de la fusión entre capas. Después de cargar la estructura modular y los pesos, el motor de inferencia genera un gráfico computacional a través de la clasificación topológica. A excepción de algunos operadores implementados por la CPU, la mayoría de los operadores son ejecutados por GPU Shader. En 1.0, lo implementamos a través de Compute Shader o Fragment Shader en el backend de OpenGL. En 2.0, agregamos la implementación de Compute Shader en Vulkan. back-end

a12d6416ae3e164a183b9250d32ed3b0.png

Figura 2: Diagrama de tiempo del algoritmo ShaderNN

El núcleo del motor es MixedInferenceCore, que admite backends OpenGL y Vulkan y es responsable de la implementación específica de los operadores de inferencia. La entrada del gráfico de cálculo proviene directamente de la textura de gráficos de la aplicación (textura), y su salida también es una textura, que la aplicación puede representar directamente. Cada nodo en el gráfico de cálculo corresponde a una Capa del modelo de red, y cada Capa se calcula a través de una etapa de renderizado. Las canalizaciones para el sombreador de cómputo y el sombreador de fragmentos son diferentes. Para el sombreador de fragmentos de OpenGL, cada etapa de procesamiento contiene uno o más pases de procesamiento. Para el sombreador de cómputo de OpenGL y Vulkan, una etapa de procesamiento contiene uno o más pases de procesamiento. El resultado final del pase Render se envía directamente a la textura.

2. Innovación de ShaderNN

  1. Proporciona una integración eficiente y sin copias con canalizaciones de gráficos en tiempo real o aplicaciones de procesamiento de imágenes que utilizan entrada/salida basada en texturas, lo que ahorra costosas transferencias de datos y conversiones de formato entre la CPU y la GPU, lo que es especialmente útil para aplicaciones en tiempo real en plataformas móviles. importante.

f5986a4e37601dae0aa8807cc492c6e8.png

Figura 3: Comparación de ShaderNN y otros motores de inferencia integrados con canalizaciones de gráficos e imágenes

La figura 3 compara la diferencia entre ShaderNN y otros motores de inferencia integrados con canalizaciones existentes. Otros motores de inferencia generalmente proporcionan una estructura de datos común llamada Tensor o Mat como formato de entrada y salida, y no pueden usar las aplicaciones de gráficos e imágenes ampliamente utilizadas. La textura es se utiliza como entrada y salida, lo que requiere conversión de formato o conversión de GPU a CPU de ida y vuelta.Para aplicaciones en tiempo real con una entrada grande, como imágenes, la sobrecarga de esta parte es bastante grande. Sin embargo, ShaderNN usa texturas nativas como entrada y salida sin esta parte de la sobrecarga, lo que mejora en gran medida el rendimiento general.

2. Es el primero en admitir la implementación de inferencia Fragment Shader basada en el backend OpenGL. Tiene ventajas significativas sobre otros motores de inferencia para redes con gran tamaño de entrada y capas de red simples, como redes de superresolución y reducción de ruido.

3. Basado en OpenGL ES nativo y Vulkan, se puede integrar fácilmente con la canalización de representación de gráficos para maximizar el uso de los recursos informáticos, y es adecuado para aplicaciones de inteligencia artificial de juegos, imagen/video y representación en tiempo real.

4. Admite la implementación híbrida de Compute Shader y Fragment Shader, y puede seleccionar diferentes Shaders para diferentes capas de modelos para optimizar el rendimiento. Es conveniente que los usuarios personalicen nuevos operadores.

5. Implementación pura del sombreador de GPU, sin necesidad de depender de bibliotecas de terceros, se puede usar en diferentes plataformas de hardware de GPU, se puede personalizar y es conveniente para la optimización, integración, implementación y actualización.

3. Rendimiento y consumo de energía

En el artículo "ShaderNN, un motor ligero de inferencia de aprendizaje profundo para gráficos de IA" [1], comparamos el tiempo de inferencia única y el consumo de energía de 4 redes CNN comunes en 4 teléfonos móviles con backend TensorFlow Lite OpenGL. En términos de tiempo de razonamiento, Spatial Denoise y ESPCN son entre un 75 % y un 90 % mejores que TensorFlow Lite; los modelos Resnet18 y YOLO V3 Tiny son un 50 % mejores que TensorFlow Lite en algunos chips de procesador. En términos de consumo de energía, Spatial Denoise, ESPCN, Resnet18 y YOLO V3 Tiny pueden ahorrar hasta un 80 %, 70 %, 55 % y 51 % en comparación.

Para el backend de Vulkan agregado en ShaderNN 2.0, seleccionamos Resnet18, Spatial Denoise, Style Transfer, ESPCN 4 en dos plataformas MediaTek y dos de Qualcomm (consulte la Figura 4) y el motor de inferencia MNN que también es compatible con el backend de Vulkan. se compara en términos de tiempo de inferencia individual y consumo de energía.

391ab6fe98e7ac0973d3666e40528a88.png

Figura 4: Plataforma móvil para pruebas

1. Comparación de rendimiento entre el backend ShaderNN Vulkan y el backend MNN Vulkan

92cd62af3ebf7e934dbd1e36da6ab9d8.png

Figura 5: Comparación de rendimiento

A partir de la comparación de rendimiento en la Figura 5, funciona bien en conjuntos de chips específicos de Qualcomm y MTK, y su rendimiento en tareas como Spatial Denoise y ESPCN es entre un 50 % y un 80 % superior al de MNN, y su rendimiento en tareas como Resnet18 y se ha mejorado la transferencia de estilo 6%-60%.

2. Comparación del consumo de energía entre el backend ShaderNN Vulkan y el backend MNN Vulkan

0f363294fb40f56afad03ef475bfb4be.png

Figura 6: Comparación de consumo de energía

A partir de la comparación del consumo de energía en la Figura 6, al realizar tareas de razonamiento como Spatial Denoise, ESPCN, Resnet18 y Style Transfer, el backend ShaderNN Vulkan puede ahorrar hasta un 60 %, 70 %, 45 % y 70 % en el consumo de energía en comparación a MNN.

Cuarto, la típica escena de ShaderNN

De la comparación anterior de rendimiento y consumo de energía, se puede ver que ShaderNN es bueno en aplicaciones de gráficos e imágenes. ShaderNN 2.0 está adaptado y optimizado para escenarios de aplicaciones de gráficos, como la reducción de ruido de trazado de rayos, el súper muestreo de aprendizaje profundo de juegos MNSS. Al mismo tiempo, al agregar nuevos operadores, ShaderNN también puede admitir aplicaciones similares a AIGC, como Stable Diffusion.

Aplicación móvil de transferencia de estilo en tiempo real:

En el artículo "ShaderNN, un motor ligero de inferencia de aprendizaje profundo para gráficos de IA" [1], mostramos la aplicación de demostración de Android para la transferencia de estilos. Esta aplicación muestra cómo integrar el motor de inferencia ShaderNN en una aplicación de Android a través de una canalización en tiempo real. y ejecute el modelo de transferencia de estilo para procesar la transmisión de video en tiempo real obtenida de la cámara del teléfono móvil y generar la transmisión de video transferida con estilo. En esta aplicación, todos los datos se procesan en el lado de la GPU, sin transmisión de datos adicional ni consumo de procesamiento.

8d2fc491505d3642da3c02abdb97ec34.png

 

Figura 7: aplicación de transferencia de estilo ShaderNN

Aplicación de reducción de ruido de trazado de rayos móvil:

Ray Tracing (Path Tracing) es un algoritmo para renderizar imágenes de manera realista. Simula la trayectoria de la luz desde la cámara, a través de los objetos de la escena y, finalmente, hasta la fuente de luz. Se pueden generar imágenes realistas de alta calidad trazando la trayectoria de cada rayo y calculando la intersección del rayo con el objeto y la propagación de la luz. En comparación con el renderizado rasterizado tradicional, la cantidad de cálculo introducido por el trazado de rayos aumentará exponencialmente. El trazado de rayos utiliza un método de muestreo estocástico de Monte Carlo, por lo que la imagen resultante está sujeta al ruido de muestreo. El renderizado sin conexión utiliza principalmente muestreo múltiple para reducir el ruido. Sin embargo, en el renderizado móvil en tiempo real, el ruido causado por un muestreo bajo es particularmente obvio. Este problema solo puede mejorarse mediante el procesamiento posterior a la reducción de ruido.

Intel lanzó el modelo de aprendizaje profundo Intel Open Image Denoise (OIDN) basado en la estructura del codificador automático (https://github.com/OpenImageDenoise/oidn). OIDN toma albedo, primeros rebotes normales y datos de ruido (imagen RGB ruidosa) como entrada, y realiza la reducción de ruido a través de un modelo de aprendizaje profundo, que ha logrado buenos resultados en el lado de la PC. ShaderNN 2.0 agrega compatibilidad con múltiples entradas y aplica este modelo a la canalización de procesamiento de gráficos móviles. La Figura 8 describe el flujo básico del modelo de reducción de ruido y la Figura 9 muestra los efectos de entrada y salida en tiempo real en el modelo de reducción de ruido.

c8afb4cea0bcf2dfc26ec7f0512788e9.png

Figura 8: Módulo de reducción de ruido de trazado de rayos

 

Figura 9: Efecto de reducción de ruido de trazado de rayos ShaderNN

Aplicación de súper muestreo de aprendizaje profundo para juegos móviles:

Deep Learning Super Sampling DLSS (Deep Learning Super Sampling) es una tecnología de reconstrucción de imágenes desarrollada por NVIDIA, que tiene como objetivo construir imágenes de alta resolución a través de resultados de representación de resolución más baja y modelos de aprendizaje profundo para mejorar la calidad y el rendimiento de la imagen. A través del proyecto de código abierto ShaderNN, cooperamos con la Universidad de Zhejiang para desarrollar e implementar un modelo de supermuestreo de aprendizaje profundo en tiempo real en el terminal móvil [3], y a través de la aceleración de inferencia de ShaderNN, es la primera vez que se realiza un supermuestreo en tiempo real de juegos en el terminal móvil. Los modelos DLSS convencionales actuales utilizan técnicas de submuestreo para obtener más detalles de píxeles, así como marcos históricos e información temporal corregida por vectores de movimiento, para reconstruir nuevas imágenes de alta resolución. La salida del razonamiento de la construcción del cuadro actual se retroalimentará al modelo de supermuestreo como entrada del modelo para la siguiente construcción del cuadro. Basado en ShaderNN, la inferencia del modelo DLSS móvil se ha optimizado para el terminal móvil, que no solo cumple con los requisitos en tiempo real, sino que también mejora la calidad de la imagen del juego, especialmente en las partes de borde y detalle. La Figura 10 describe el flujo básico del modelo DLSS móvil, y la salida real del modelo se puede ver en la Figura 11.

6b65f50fe9fe0e0ad09c2a8f774a918d.png

Figura 10: Módulo de supermuestreo de aprendizaje profundo móvil

e1941a57781b414fc52a98001e71a523.gif

Figura 11: ShaderNN ejecutando el efecto de súper muestreo de aprendizaje profundo de terminal móvil

Aplicación de difusión estable móvil:

El modelo de difusión estable de vanguardia en el campo de la generación de texto e imagen incluye tres partes: CLIP Text Encoder, UNet y VAE. Intentamos ejecutar el modelo de difusión estable en ShaderNN2.0 https://huggingface.co/lambdalabs/ difusores miniSD y desplegarlo en el terminal móvil. La Figura 12 muestra el efecto de carrera.

1dc4dfbb87e4a09067d1cc5205ed5358.png

Figura 12: ShaderNN AIGC aplica difusión estable

V. Planificación y perspectiva

Después de que se lanzó ShaderNN 1.0 basado en el backend OpenGL como un proyecto de código abierto, ShaderNN 2.0 agregó soporte basado en el backend Vulkan, admitiendo aplicaciones de IA con una pila de gráficos completa en el lado móvil y admitiendo las aplicaciones más recientes en el campo de gráficos y imágenes, como migración de estilo, Ray Tracing Denoising (reducción de ruido de trazado de rayos), súper muestreo de aprendizaje profundo para juegos, difusión estable, etc., mostrando las ventajas de ShaderNN en el acoplamiento profundo con aplicaciones de gráficos e imágenes.

En el siguiente paso, esperamos que a través de la comunidad de código abierto, podamos atraer a más desarrolladores para que participen, cubrir más escenarios y optimizar continuamente operadores y modelos para que se puedan implementar más aplicaciones en los productos, y estamos comprometidos a crear conjuntamente un motor de inferencia móvil distintivo basado en OpenGL, la pila de gráficos completos de Vulkan.

Dirección de código abierto de GitHub (licencia de código abierto de Apache 2.0)

https://github.com/inferenceengine/shadernn

referencias:

1. ShaderNN, un motor ligero de inferencia de aprendizaje profundo para gráficos de IA, https://zhuanlan.zhihu.com/p/579051507

2. Justin Johnson, Alexandre Alahi y Li Fei-Fei. 2016. Pérdidas perceptuales para transferencia de estilo en tiempo real y superresolución. En la conferencia europea sobre visión artificial. Springer, 694–711

3. Sipeng Yang, Yunlu Zhao, Yuzhe Luo, He Wang, Hongyu Sun, Chen Li, Binghuang Cai, Xiaogang Jin, "MNSS: Marco de supermuestreo neuronal para renderizado en tiempo real en dispositivos móviles", TRANSACCIONES IEEE SOBRE VISUALIZACIÓN Y GRÁFICOS DE COMPUTADORA, Información de citas: DOI 10.1109/TVCG.2023.3259141

Autores: Qiang Qiu, Hongyu Sun, Yuzhong Yan, Instituto de Investigación de Computación y Gráficos de OPPO

6d3c6369974b6bff277400442bfbae4d.gif

Mantenga presionado para seguir Kernel Craftsman WeChat

Tecnología Linux Kernel Black | Artículos técnicos | Tutoriales destacados

Supongo que te gusta

Origin blog.csdn.net/feelabclihu/article/details/131447709
Recomendado
Clasificación