Descubra cómo logramos una reducción de latencia de 1.4x en los aceleradores Qualcomm Cloud AI 100 Ultra mediante la aplicación de la innovadora técnica DeepCache a la generación de texto a imagen. Además, el rendimiento se puede triplicar combinando DeepCache con la novedosa técnica de Programación Multidispositivo. ¡Siga leyendo!
Stable Diffusion XL (SDXL) es una carga de trabajo de texto a imagen que toma indicaciones de texto positivas y negativas como entrada y genera una imagen de 1024×1024 correspondiente a las indicaciones como salida. Desde 2024, esta carga de trabajo se incluye en el benchmark de inferencia MLPerf, líder en la industria (a veces llamado «Las Olimpiadas del benchmarking de ML»).
El flujo de trabajo computacional general de SDXL consta de cuatro componentes: codificador de texto, codificador de texto 2, UNet y decodificador VAE. UNet es la parte con mayor consumo computacional (90-95 % del tiempo de ejecución), ya que requiere el procesamiento independiente de las indicaciones positivas y negativas, y realiza 20 iteraciones.
Programación multidispositivo
En nuestra implementación original, el SDK de Qualcomm Cloud AI 100 compila cada uno de los cuatro componentes en un binario independiente . Los binarios se cargan en un dispositivo antes de su ejecución. Mediante un mecanismo llamado conmutación de modelo , la implementación alterna entre los binarios de los componentes al procesar una sola muestra de entrada. Esta conmutación es relativamente rápida (solo 100-200 ms), pero añade sobrecarga al flujo de trabajo.
El impacto de esta sobrecarga de conmutación se hace especialmente evidente al comparar los escenarios SingleStream y Offline de la inferencia de MLPerf. En el escenario SingleStream, el sistema procesa una muestra a la vez, lo que requiere la conmutación de modelos entre los componentes de una sola solicitud y entre múltiples solicitudes. En el escenario Offline, el sistema procesa un gran lote de muestras (p. ej., 5000 solicitudes), lo que permite reducir la necesidad de cambiar de modelo con frecuencia y permite un procesamiento más eficiente.
Descubrimos además que la eficiencia computacional se puede mejorar compilando para usar 4 núcleos y ejecutando 4 activaciones paralelas (instancias), lo que da como resultado un aumento del 50 % en el rendimiento de UNet.
Para superar estos desafíos, hemos desarrollado una técnica avanzada de programación donde el cálculo se distribuye entre varios dispositivos aceleradores del sistema. Dedicamos un pequeño número de dispositivos «maestros» a la codificación de texto y la decodificación VAE, y un mayor número de dispositivos «trabajadores» a UNet. Este simple ajuste no afecta la salida, pero permite mejoras sustanciales en el rendimiento.
Analicemos esto con cifras. En una tarjeta Pro, el procesamiento de UNet tarda 20 veces más que la decodificación de VAE. Dada esta disparidad, observamos que en un sistema equipado con 8 tarjetas Pro (8 dispositivos), una proporción de 1:7 entre nodos maestros y nodos de trabajo ofrece resultados óptimos. Es decir, un nodo maestro gestiona la codificación de texto y la decodificación de VAE, mientras que siete nodos de trabajo se centran en la ejecución paralela de UNet. Esta configuración minimiza la sobrecarga de conmutación y maximiza la eficiencia computacional.
El mismo principio se aplica a los sistemas equipados con tarjetas Ultra, donde el procesamiento UNet tarda 26 veces más que la decodificación VAE. En sistemas con dos tarjetas Ultra (8 dispositivos), la misma proporción de 1:7 entre nodos maestros y trabajadores resulta más efectiva. En sistemas con cuatro o más tarjetas Ultra, una proporción de 1:13 resulta más efectiva.
Al adaptar la programación de nuestras tuberías a las características específicas de cada sistema, podemos extraer el máximo rendimiento en diferentes configuraciones de hardware.
Caché profundo
En un esfuerzo independiente para optimizar la latencia de SingleStream, exploramos DeepCache [1], una técnica reciente sin entrenamiento que acelera los modelos de difusión aprovechando la redundancia temporal en el proceso de denoising secuencial. DeepCache aprovecha el alto grado de similitud observado en las características de alto nivel entre pasos de denoising adyacentes. Al almacenar en caché estas características de lenta evolución y reutilizarlas en los pasos, DeepCache elimina los cálculos redundantes. Hemos descubierto que el uso de una iteración profunda seguida de dos iteraciones superficiales nos permite cumplir con las restricciones de precisión de la inferencia de MLPerf para la división cerrada.
Resultados
Para la evaluación, utilizamos servidores GIGABYTE R282-Z93 equipados con 2 tarjetas Ultra y 8 tarjetas Pro con SDK v1.18.2.0, los mismos servidores que se utilizaron para las presentaciones oficiales de MLPerf Inference v4.0 con SDK v1.12.2.0.
Desconectado
Tabla 1: SDXL sin conexión en 2 tarjetas Qualcomm Cloud AI 100 Ultra (8 dispositivos).
Base | 0.356 | 1.00 |
Multidispositivo | 0.533 | 1,50 |
Caché profundo | 0.830 | 2.33 |
Multidispositivo + DeepCache | 1.077 | 3.03 |
Tabla 2: SDXL sin conexión en 8 tarjetas Qualcomm Cloud AI 100 Pro (8 dispositivos).
Base | 0.608 | 1.00 |
Multidispositivo | 0.827 | 1.36 |
Caché profundo | 1.195 | 1.97 |
Multidispositivo + DeepCache | N / A | N / A |
Transmisión única
Tabla 3: SDXL SingleStream en 1 tarjeta Qualcomm Cloud AI 100 Ultra (2 dispositivos).
Base | 11.669 | 1.00 |
Caché profundo | 8.335 | 1.40 |
Tabla 4: SDXL SingleStream en 2 tarjetas Qualcomm Cloud AI 100 Pro (2 dispositivos).
Base | 7.429 | 1.00 |
Caché profundo | 4.633 | 1.60 |
Herramienta de visualización
Para comprender y optimizar plenamente nuestro sistema, desarrollamos una herramienta de visualización interactiva. Esta demo web proporciona información en tiempo real sobre la utilización de los nodos, la distribución de tareas y las métricas de rendimiento de todo el sistema equipado con aceleradores Qualcomm Cloud AI 100. Los usuarios pueden explorar la línea de tiempo de ejecución, observar la distribución de tareas entre los nodos y analizar en profundidad los gráficos de rendimiento de cada acelerador. Esta herramienta no solo muestra la eficiencia de nuestra arquitectura distribuida, sino que también constituye una herramienta invaluable para una mayor optimización y depuración.
Próximos pasos
Nuestro trabajo representa un paso adelante en el rendimiento y la eficiencia de la generación de texto a imagen en los aceleradores Qualcomm Cloud AI 100.
De cara al futuro, estamos explorando técnicas de optimización aún más avanzadas. Desarrollamos un sistema de programación automática basado en información compilada del tiempo de ejecución del modelo, que utiliza algoritmos voraces para asignar tareas dinámicamente y maximizar la eficiencia. Este enfoque promete ampliar aún más los límites del rendimiento de la inferencia SDXL en los aceleradores Qualcomm Cloud AI 100.
Pruebe Qualcomm AI Inference Suite , incluida nuestra inferencia de texto a imagen SDXL.
[1] Ma, Xinyin, Gongfan Fang y Xinchao Wang. «DeepCache: Acelerando modelos de difusión de forma gratuita». Actas de la Conferencia IEEE/CVF sobre Visión Artificial y Reconocimiento de Patrones. 2024.
Qualcomm Blog. N. V. Traducido al español