1 puntos por GN⁺ 2024-12-25 | Aún no hay comentarios. | Compartir por WhatsApp
  • 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
  • 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_1 con mlc_chat.ChatModule y mide el rendimiento con benchmark_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.

Aún no hay comentarios.