NVIDIA Run:ai Model Streamer reduce la latencia de inicio en LLM
NVIDIA ha lanzado el Run:ai Model Streamer, un SDK que reduce significativamente la latencia de inicio en el despliegue de modelos de lenguaje de gran tamaño (LLMs) al permitir la carga concurrente de pesos desde diversas fuentes de almacenamiento, superando a otros cargadores como el de Hugging Face y el Tensorizer de CoreWeave en eficiencia.

El despliegue de modelos de lenguaje de gran tamaño (LLMs) presenta un desafío significativo en la optimización de la eficiencia de inferencia. En particular, los retrasos por "cold start"—donde los modelos requieren un tiempo considerable para cargarse en la memoria GPU—pueden afectar tanto la experiencia del usuario como la escalabilidad. En entornos productivos cada vez más complejos, se hace evidente la necesidad de un cargador eficiente de modelos que soporte estos requerimientos. Estos modelos suelen demandar decenas a cientos de gigabytes de memoria, lo que provoca retos en términos de latencia y recursos, especialmente al intentar escalar para satisfacer una demanda impredecible.
Para abordar estos problemas, NVIDIA ha presentado el Run:ai Model Streamer, un SDK de Python de código abierto diseñado para mitigar la latencia de inicio de los modelos mediante la lectura concurrente de los pesos del modelo desde el almacenamiento y su transmisión directa a la memoria de la GPU. Las pruebas realizadas compararon este nuevo streamer con el cargador predeterminado de Hugging Face (HF) para Safetensors y el Tensorizer de CoreWeave, utilizando SSDs locales y Amazon S3.
Eficiencia en la Carga de Modelos
Los experimentos mostraron que el NVIDIA Run:ai Model Streamer disminuye significativamente los tiempos de carga de modelos, reduciendo la latencia de inicio incluso en entornos de nube. Además, este streamer es compatible con el formato Safetensor, evitando la necesidad de convertir pesos, y destaca la importancia de la elección de almacenamiento y la transmisión concurrente para un despliegue eficiente de LLM. Para potenciar el rendimiento de inferencia, se recomienda utilizar el NVIDIA Run:ai Model Streamer, saturar el ancho de banda de almacenamiento y acelerar el tiempo hasta la inferencia.
Lee también
Proceso de Carga de Modelos en GPU
Para optimizar la latencia de inferencia, es crucial entender cómo se cargan los modelos de machine learning en la memoria de la GPU. Este proceso consta de dos pasos principales:
Lectura de Pesos de Almacenamiento a Memoria de CPU: Los pesos del modelo son cargados desde el almacenamiento a la memoria de la CPU. Los formatos de los pesos pueden variar, incluyendo .pt, .h5 y .safetensors, o formatos personalizados; el almacenamiento puede ser local, a nivel de clúster o en la nube.
Transferencia a GPU: Los parámetros del modelo y los tensores relevantes son transferidos a la memoria de la GPU.
En el caso del almacenamiento en la nube, como Amazon S3, a menudo se requiere un paso adicional: primero, los pesos son descargados al disco local antes de moverse a la memoria de la CPU y luego a la de la GPU. Tradicionalmente, estos pasos se llevan a cabo de forma secuencial, lo que convierte el tiempo de carga del modelo en uno de los cuellos de botella más significativos al escalar inferencias.
Funcionamiento del NVIDIA Run:ai Model Streamer
El NVIDIA Run:ai Model Streamer es un SDK con un backend en C++ de alto rendimiento, diseñado para acelerar la carga de modelos en GPUs desde diversas fuentes de almacenamiento (sistemas de archivos en red, nubes, discos locales, etc.). Utiliza múltiples hilos para leer tensores de manera concurrente desde un archivo en almacenamiento de objetos o archivos hacia un búfer dedicado en la memoria de la CPU. Cada tensor tiene un identificador, lo que permite la lectura y transferencia simultánea: mientras algunos tensores son leídos desde el almacenamiento a la CPU, otros son movidos de CPU a GPU.
Este enfoque aprovecha plenamente el hecho de que la GPU y la CPU tienen subsistemas separados. Las GPUs acceden a la memoria de la CPU directamente a través de PCIe, sin intervención de la CPU, lo que permite una superposición en tiempo real de las lecturas de almacenamiento y transferencias de memoria. Las pruebas se realizaron en una instancia de AWS g5.12xlarge con GPUs NVIDIA A10G y CPUs AMD EPYC de segunda generación, que ofrecen una arquitectura equilibrada para el manejo paralelo de datos de alto rendimiento.
Características Clave del Model Streamer
Concurrencia: Múltiples hilos pueden leer archivos de pesos del modelo en paralelo, incluyendo soporte para dividir tensores grandes.
Carga Equilibrada: El trabajo se distribuye según el tamaño del tensor para saturar el ancho de banda del almacenamiento.
Compatibilidad con Diversos Tipos de Almacenamiento: Funciona con SSDs, almacenamiento remoto y nubes como S3.
Sin Conversión de Formato de Tensor: Soporta Safetensors de manera nativa, evitando la sobrecarga de conversión.
Fácil Integración: Ofrece una API en Python y un iterador similar a Safetensors, pero con lectura de fondo concurrente. Se integra fácilmente con motores de inferencia como vLLM y TGI.
Para más detalles sobre la configuración y uso del modelo, se puede consultar la documentación correspondiente.
Comparativa de Rendimiento de Cargadores de Modelos
Se realizaron comparaciones sobre el rendimiento de diferentes cargadores de modelos (NVIDIA Run:ai Model Streamer, CoreWeave Tensorizer y HF Safetensors Loader) utilizando tres tipos de almacenamiento:
Experimento #1: GP3 SSD: Se midieron los tiempos de carga de modelos con diferentes cargadores.
Experimento #2: IO2 SSD: Se evaluó el mismo rendimiento en IO2 SSD para valorar el impacto de los IOPS y el throughput más altos.
Experimento #3: Amazon S3: Se compararon los cargadores en almacenamiento en la nube; el HF Safetensors Loader fue excluido por no soportar S3.
Experimento #4: vLLM con diferentes cargadores: Se integró el Model Streamer en vLLM para medir los tiempos totales de carga y preparación en varios tipos de almacenamiento, comparándolo con el cargador predeterminado de HF Safetensors y el Tensorizer.
Todos los tests se realizaron bajo condiciones de "cold-start" para evitar efectos de caché.
Resultados Clave del Experimento #1: GP3 SSD
En este experimento inicial, se evaluó cómo la concurrencia afectaba los tiempos de carga. El Model Streamer mostró una notable reducción del tiempo de carga a medida que se incrementó la concurrencia. Con una concurrencia de 1, el Model Streamer cargó el modelo en 47.56 segundos, mientras que el HF Safetensors Loader lo hizo en 47.99 segundos. Al aumentar la concurrencia a 16, el tiempo de carga se redujo a 14.34 segundos, manteniendo un rendimiento de aproximadamente 1 GiB/s, alcanzando así el máximo para un GP3 SSD.
Resultados del Experimento #2: IO2 SSD
El Experimento #2, que utilizó IO2 SSD, mostró mejoras significativas en el rendimiento. A una concurrencia de 1, el Model Streamer y el HF Safetensors Loader mostraron tiempos de carga similares de 43.71 y 47 segundos, respectivamente. Sin embargo, al aumentar la concurrencia, el Model Streamer demostró una mejora mucho más pronunciada, cargando el modelo en solo 7.53 segundos con una concurrencia de 8, volviéndose aproximadamente 6 veces más rápido que el HF Safetensors Loader.
Resultados del Experimento #3: S3
En el Experimento #3, se observó que el Model Streamer superó al Tensorizer en todos los niveles de concurrencia probados. Con una concurrencia de 4, el Model Streamer cargó el modelo en 28.24 segundos, y alcanzó un tiempo de carga de 4.88 segundos al incrementar la concurrencia a 32, en comparación con los 37.36 segundos del mejor resultado obtenido por Tensorizer con 16 trabajadores. Estos resultados evidencian una eficiencia superior del Model Streamer en la carga desde almacenamiento en la nube.
Resultados del Experimento #4: vLLM con Todos los Cargadores
En este experimento, se integraron los diferentes cargadores en vLLM para medir el tiempo total desde que se carga el modelo hasta que está listo para la inferencia. Se utilizó el nivel de concurrencia más óptimo determinado en experimentos anteriores para cada cargador. El Model Streamer redujo el tiempo total de preparación a 35.08 segundos en GP3 SSD y a 28.28 segundos en IO2 SSD, en comparación con los 66.13 y 62.69 segundos necesarios para el HF Safetensors Loader, respectivamente. En S3, el Model Streamer logró un tiempo de total de 23.18 segundos, mientras que Tensorizer requirió 65.18 segundos.
Conclusión
La latencia de "cold start" sigue siendo un cuello de botella crítico en la entrega de inferencia LLM responsiva y escalable, especialmente en entornos dinámicos o basados en la nube. Los resultados de las pruebas demuestran que el NVIDIA Run:ai Model Streamer acelera significativamente los tiempos de carga de modelos en almacenamiento local y remoto, superando a otros cargadores comunes. Al permitir la carga concurrente de pesos y la transmisión a la memoria de GPU, ofrece una solución práctica y de alto impacto para cargas de trabajo de inferencia a gran escala.
Para quienes estén construyendo o escalando sistemas de inferencia, especialmente con grandes modelos o almacenamiento basado en la nube, los resultados presentan conclusiones inmediatas: utilizar el Model Streamer para reducir la latencia de inicio, saturar el ancho de banda de almacenamiento y acelerar el tiempo hasta la inferencia. Con una fácil integración en frameworks como vLLM y soporte para entornos de alta concurrencia y múltiples almacenamiento, es una optimización que puede generar ganancias notables.
No te pierdas más noticias y actualizaciones en Liven. ¡Sigue leyendo!
¿Te gustó esta noticia?
Mantente informado con las últimas noticias de Chile y el mundo.