Los LLM han mostrado capacidades impresionantes en varias tareas de programación, sin embargo, su potencial para la optimización del programa no se ha explorado completamente. Si bien algunos esfuerzos recientes han utilizado LLM para mejorar el rendimiento en lenguajes como C ++ y Python, la aplicación más amplia de LLM para optimizar el código, especialmente en contextos de programación de bajo nivel, sigue siendo limitada. Los puntos de referencia de LLM existentes se centran en gran medida en la generación de códigos a partir del lenguaje natural o en resolver problemas de GitHub, como se ve en Humaneval, MBPP, APPS, SWE-Bench y SWE-AGENT. Además, modelos como Codex, Alphacode y Code Llama apuntan principalmente a mejorar la calidad de la generación de código en lugar del rendimiento. Sin embargo, la investigación selecta ha comenzado a abordar la optimización, incluidas las mejoras de paralelización y eficiencia del código, aunque muchos de estos enfoques están limitados por la necesidad de verificación formal, limitando la escalabilidad.
En contraste, algunos métodos más nuevos adoptan la validación basada en las pruebas, lo que permite la optimización de programas más complejos con bucles. Estrategias basadas en el aprendizaje en la optimización del compilador, como la autofase, que utiliza el aprendizaje de refuerzo para la secuenciación de pase, y CoreSet, que aplica redes neuronales gráficas, se ha mostrado prometedor para mejorar el rendimiento. Las técnicas de superoptimización tienen como objetivo encontrar la versión más eficiente de un programa, pero generalmente están restringidas a problemas a pequeña escala. Además, marcos como AutoTVM y Ansor se han centrado en optimizar el código del núcleo de GPU a través del modelado y la búsqueda estadística. Recientemente, la optimización impulsada por LLM ha llamado la atención, con enfoques de aprendizaje de refuerzo que guían las LLM utilizando comentarios de los casos de prueba. Técnicas como Coderl y PPocoder aprovechan los métodos de optimización de políticas para ajustar los modelos para un mejor rendimiento, incluso en lenguajes de programación con recursos limitados como Verilog.
Los investigadores de investigación de Stanford, UIUC, CMU y VISA exploran el uso de LLM para optimizar el rendimiento del código de ensamblaje, un área tradicionalmente manejada por compiladores como GCC. Introducen un marco de aprendizaje de refuerzo utilizando la optimización de políticas proximales (PPO), guiada por una recompensa que equilibra la corrección y la aceleración sobre la línea de base GCC -O3. Utilizando un conjunto de datos de 8,072 programas del mundo real, su modelo, QWEN2.5-Coder-7B-PPO, logra una tasa de aprobación de prueba del 96.0% y una aceleración promedio de 1.47 ×, superando otros 20 modelos, incluido Claude-3.7-Sonnet. Sus resultados muestran que con RL Training, LLMS puede superar efectivamente las optimizaciones de compiladores convencionales.
La metodología implica optimizar los programas C compilados para el rendimiento utilizando un enfoque RL. Dado un programa C C, se compila en el ensamblaje P usando GCC -O3. El objetivo es generar un nuevo programa de ensamblaje P ‘que sea funcionalmente equivalente pero más rápido. La corrección se verifica utilizando un conjunto de pruebas, y la aceleración se mide mediante la mejora del tiempo de ejecución. Usando Codenet como conjunto de datos, los autores aplican PPO para capacitar un modelo de idioma que genera un código mejorado. Dos funciones de recompensa, aceleración guiada por corrección y solo aceleración, se usan para guiar la capacitación en función de la validez, la corrección y las ganancias de rendimiento del programa.
El estudio evalúa varios modelos de lenguaje para optimizar el código de ensamblaje, revelando que la mayoría de los modelos luchan con bajas tasas de aprobación de prueba y aceleraciones mínimas. Sin embargo, QWEN2.5-Coder-7B-PPO, entrenado con aprendizaje de refuerzo, supera significativamente a otros, logrando una precisión del 96% y una aceleración promedio de 1.47 ×. Los estudios de ablación muestran que el uso de GCC -O3 como un rendimiento de ayuda de referencia, mientras que eliminarlo conduce a una disminución aguda. En particular, modelos como Claude-3.7-Sonnet pueden superar a los compiladores identificando optimizaciones específicas de hardware, como reemplazar los bucles con una sola instrucción POPCNT, demostrando su capacidad para realizar transformaciones de código de nivel semántico más allá de las capacidades de compilador tradicional.
En conclusión, el estudio explora el uso de LLM para optimizar el código de ensamblaje, un dominio donde los compiladores tradicionales luchan debido a la complejidad del ajuste de rendimiento de bajo nivel. Los autores afinan QWEN2.5-Coder-7B usando PPO, recompensando tanto la corrección (a través de los casos de prueba) como acelerar sobre GCC -O3. Presentan un punto de referencia de 8.072 programas C del mundo real para evaluar el rendimiento. El modelo logra una tasa de aprobación de prueba del 96.0% y una aceleración promedio de 1.47 ×, superando a otros 20 modelos, incluido Claude-3.7-Sonnet. Si bien es efectivo, las limitaciones incluyen una falta de garantías formales de corrección y variabilidad en el rendimiento del hardware en todos los sistemas.
Mira el Papel. Todo el crédito por esta investigación va a los investigadores de este proyecto. Además, siéntete libre de seguirnos Gorjeo Y no olvides unirte a nuestro 95k+ ml de subreddit y suscribirse a Nuestro boletín.
Sana Hassan, una pasante de consultoría en MarktechPost y estudiante de doble grado en IIT Madras, le apasiona aplicar tecnología e IA para abordar los desafíos del mundo real. Con un gran interés en resolver problemas prácticos, aporta una nueva perspectiva a la intersección de la IA y las soluciones de la vida real.