Обучение с подкреплением помогает LLM превосходить традиционные компиляторы в оптимизации ассемблерного кода
Исследователи разработали метод обучения с подкреплением, который позволяет LLM превосходить традиционные компиляторы в оптимизации ассемблерного кода, достигая ускорения 1,47× и 96% успешного прохождения тестов на тысячах реальных программ.
Расширение возможностей LLM в оптимизации кода
Большие языковые модели (LLM) продемонстрировали впечатляющие способности в программировании, однако их применение для оптимизации кода, особенно на уровне ассемблера, остаётся ограниченным. Ранее исследования улучшали производительность на языках высокого уровня, таких как C++ и Python, но оптимизация низкоуровневого кода остаётся сложной задачей. Стандартные бенчмарки для LLM в основном направлены на генерацию кода или исправление ошибок, а модели вроде Codex и AlphaCode сосредоточены на качестве кода, а не на повышении производительности.
Новые методы оптимизации с обучением
Современные подходы применяют обучение с подкреплением и графовые нейронные сети для улучшения процессов оптимизации компиляторов. Методы, такие как AutoPhase и Coreset, показывают хорошие результаты в последовательном применении оптимизаций и повышении эффективности. Супероптимизация пытается находить максимально эффективные версии программ, но ограничена малыми размерами кода. Фреймворки AutoTVM и Ansor оптимизируют GPU-код с помощью статистических моделей.
Обучение с подкреплением для оптимизации ассемблера
Исследование учёных из Стэнфорда, UIUC, CMU и Visa Research посвящено использованию LLM совместно с обучением с подкреплением для оптимизации ассемблерного кода, традиционно обрабатываемого компиляторами, такими как GCC. Они разработали фреймворк Proximal Policy Optimization (PPO), который учитывает баланс между корректностью кода и скоростью выполнения, используя набор из 8072 реальных программ на C, скомпилированных в ассемблер.
Модель Qwen2.5-Coder-7B-PPO достигает 96,0% успешных тестов и в среднем ускоряет выполнение на 1,47× по сравнению с gcc -O3, превосходя 20 других моделей, включая Claude-3.7-sonnet. Методика заключается в генерации функционально эквивалентной, но более быстрой версии ассемблерной программы, проверяемой тестами и замерами времени. Для обучения используются две функции вознаграждения: Correctness-Guided Speedup и Speedup-Only.
Оценка и ключевые выводы
Большинство LLM испытывают трудности с оптимизацией ассемблера, демонстрируя низкие показатели успешности и минимальный прирост скорости. Тем не менее, Qwen2.5-Coder-7B-PPO значительно выделяется. Исследования показывают важность использования gcc -O3 как референса для производительности. Некоторые модели, например Claude-3.7-sonnet, могут превзойти компиляторы, применяя аппаратно-зависимые оптимизации, такие как замена циклов на одну инструкцию popcnt, демонстрируя семантические преобразования кода, недоступные традиционным компиляторам.
Проблемы и перспективы
Несмотря на успехи, метод ограничен отсутствием формальных гарантий корректности и зависимостью производительности от аппаратной платформы. Тем не менее, исследование открывает новые возможности применения ИИ для оптимизации низкоуровневого кода и может изменить подходы к проектированию компиляторов и настройке производительности.
Подробнее в оригинальной статье. Следите за проектом в Twitter, присоединяйтесь к ML SubReddit и подписывайтесь на новостную рассылку для обновлений.
Switch Language
Read this article in English