- MLC-LLM permite compilar y desplegar LLM en GPU AMD con ROCm, y la Radeon RX 7900 XTX alcanza el 80% de la velocidad de una RTX 4090 y el 94% de una RTX 3090 Ti en inferencia de Llama 2 7B/13B
- Las tres GPU comparadas tienen 24 GB de memoria y anchos de banda similares, por lo que en la inferencia de LLM sensible a la latencia el cuello de botella de memoria pesa más que el rendimiento de cómputo FP16
- La brecha de AMD se debía más a la falta de soporte y optimización de software que al hardware en sí, y la inversión en ROCm junto con la compilación de machine learning funcionan como ejes para reducir el costo de soportar múltiples backends
- ROCm se aplica a la Radeon 7900 XTX, y Vulkan al APU AMD de SteamDeck, mostrando que Llama-7B cuantizado a 4 bits también puede ejecutarse en dispositivos AMD de consumo
- Los resultados se basan en benchmarks de lote único; las optimizaciones de attention pueden cambiar las cifras tanto de AMD como de NVIDIA, por lo que deben interpretarse con un margen de error del 10%
Inferencia de LLM en GPU AMD basada en ROCm
- MLC-LLM permite compilar y desplegar LLM en GPU AMD usando ROCm
- El rendimiento de Llama 2 7B/13B en la Radeon RX 7900 XTX alcanza los siguientes niveles
- 80% de la velocidad de la NVIDIA GeForce RTX 4090
- 94% de la velocidad de la NVIDIA GeForce RTX 3090 Ti
- Además de ROCm, soporta Vulkan, ampliando el alcance del despliegue de LLM a dispositivos como SteamDeck con APU AMD
Comparación de hardware y cuello de botella real
- Por especificaciones, la AMD RX 7900 XTX se ubica en una posición comparable frente a la RTX 4090 y la RTX 3090 Ti
- Las tres GPU tienen 24 GB de memoria, por lo que pueden cargar modelos del mismo tamaño
- Sus anchos de banda de memoria también son similares
- La RTX 4090 tiene el doble de rendimiento FP16 que la RX 7900 XTX, y la RTX 3090 Ti 1.3 veces más
- La inferencia de LLM sensible a la latencia suele estar limitada por cuellos de botella de memoria, por lo que aquí la diferencia de rendimiento FP16 no es el cuello de botella principal
- La RX 7900 XTX es 40% más barata que la RTX 4090
- La RTX 3090 Ti es un producto de generación anterior, por lo que la comparación de precio es más difícil y se usa como punto de referencia
Causas de la brecha de AMD y enfoque de MLC
- La razón por la que AMD venía rezagada está más cerca de la falta de soporte y optimización de software para los modelos relacionados que del hardware
- Dos cambios actúan como factores para reducir la brecha
- AMD intenta ponerse al día invirtiendo en el stack ROCm
- La compilación de machine learning reduce el costo de soporte de software general para múltiples backends
- La compilación de machine learning compila las tareas de machine learning y automatiza la optimización, en lugar de escribir manualmente kernels separados para cada ROCm o CUDA
- MLC-LLM es una solución de despliegue de LLM basada en compilación de machine learning y construida sobre Apache TVM Unity
- Ofrece un flujo de desarrollo centrado en Python
- Incluye transformación de grafos de cómputo, optimización de layout y scheduling de kernels GPU, y APIs nativas de despliegue
- Soporta CUDA, Metal, ROCm, Vulkan y OpenCL
- Amplía el alcance desde GPU de nivel servidor hasta móviles como iPhone y Android
Formas de soporte para GPU y APU AMD
- Las rutas de soporte para GPU AMD incluyen ROCm, OpenCL, Vulkan y WebGPU
- ROCm es el stack que AMD viene impulsando recientemente y tiene componentes similares a CUDA
- Vulkan es un estándar gráfico moderno y cuenta con amplio soporte en dispositivos GPU
- WebGPU es un estándar web moderno que permite ejecutar cómputo en navegadores web
- Hay poco software de machine learning que construya soluciones fuera de CUDA, y el costo de ingeniería de replicar el stack para cada nuevo hardware o modelo de programación GPU es alto
- MLC soporta varias rutas mediante generación automática de código, sin reescribir kernels GPU para cada backend
- El rendimiento real depende de la calidad del runtime GPU de bajo nivel y de la disponibilidad en cada plataforma
Implementación de la optimización con ROCm
- Para la Radeon 7900 XTX se eligió ROCm, y para el APU de SteamDeck, Vulkan
- El stack ROCm funcionó de inmediato, y gracias al pipeline de desarrollo basado en Python de TVM Unity fue posible agregar una versión optimizada en cuestión de horas
- El soporte de ROCm reutiliza componentes existentes
- Todo el pipeline de MLC de targets existentes como CUDA y Metal
- Planificación de memoria
- Fusión de operadores
- El espacio de optimización de kernels GPU genéricos escrito en TVM TensorIR
- El flujo de generación de código ROCm de TVM, que genera kernels ROCm de bajo nivel mediante LLVM
- Todo el pipeline de MLC de targets existentes como CUDA y Metal
- El código generado se exporta como biblioteca compartida o biblioteca estática, y puede llamarse desde CLI, Python y REST API
Condiciones e interpretación del benchmark de Llama 2
- El benchmark mide Llama 2 7B y 13B con cuantización a 4 bits
- El rendimiento de decodificación se midió introduciendo un solo token de prompt y generando 512 tokens
- Todos los resultados corresponden a inferencia de lote único
- Con la versión ROCm 5.6, el rendimiento de inferencia de lote único alcanza el 80% de la velocidad de una NVIDIA 4090
- La línea base de CUDA se consideraba de primer nivel para esa tarea en ese momento
- Hay margen para mejoras, como una mejor optimización de attention; si esa optimización llega a MLC, las cifras de AMD y NVIDIA podrían mejorar
- Si la optimización se implementa solo del lado de NVIDIA, la brecha podría crecer de 20% a 30%, por lo que se recomienda interpretar las cifras con un margen de error del 10%
Condiciones para ejecutarlo directamente y ejemplo
- Se ofrecen wheels precompilados e instrucciones de ejecución para reproducir el benchmark
- La condición de ejecución es una GPU AMD con ROCm 5.6 o superior funcionando en Linux
- Para instalar el paquete MLC precompilado con ROCm habilitado, seguir la documentación para probar MLC-LLM
- El ejemplo en Python carga el modelo
Llama-2-7b-chat-hf-q4f16_1conmlc_chat.ChatModuley mide el rendimiento conbenchmark_generate("Hi", generate_length=512) - MLC-LLM también ofrece una CLI interactiva, pero en ROCm la CLI debe compilarse desde el código fuente siguiendo la documentación de compilación de la CLI
Uso de Vulkan y memoria unificada en SteamDeck
- SteamDeck se usa como ejemplo de una familia más amplia de dispositivos AMD con APU AMD
- La VRAM de GPU disponible en ROCm está limitada a 4 GB en el BIOS
- El driver Mesa Vulkan permite que los buffers usen hasta 16 GB mediante memoria unificada, superando este límite
- Esta capacidad de memoria es suficiente para ejecutar Llama-7B cuantizado a 4 bits
- Como resultado, se confirma la posibilidad de soportar LLM también en diversos dispositivos AMD de consumo
Trabajo futuro y enlaces del proyecto
- En la era de la IA generativa, la disponibilidad de hardware se vuelve un tema importante
- La compilación de machine learning puede aliviar este problema al habilitar despliegue general de alto rendimiento en múltiples backends de hardware
- La investigación actual se centra en GPU de consumo
- Según experiencias previas, las optimizaciones de MLC para GPU de consumo a veces se generalizan también a GPU en la nube, en un camino que va de RTX 4090 a A100 y A10g
- Las áreas de trabajo futuro son las siguientes
- Batching y soporte multi-GPU
- Integración con el ecosistema PyTorch
- Soporte para más métodos de cuantización y arquitecturas de modelos
- Expansión de la optimización automática a más backends de hardware
- NVIDIA sigue en posición de liderazgo gracias a la innovación continua, y el panorama puede cambiar con nuevo hardware como H100 y la evolución del software
- La guía de MLC-LLM está disponible en la página del proyecto, y el código fuente está en el repositorio de GitHub
Aún no hay comentarios.