[Машинное обучение] Генетическое программирование для тестирования компилятора: опыт аспиранта ML-лаборатории ИТМО
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Виктор Петухов, студент второго курса аспирантуры Университета ИТМО и техлид в одной из команд проекта Kotlin в JetBrains (занимается компилятором Kotlin), решил совместить работу с детальным изучением профессиональной проблематики в научном формате и присоединился к лаборатории машинного обучения ИТМО. Рассказываем, что из этого получилось.
Фотография Marc Reichelt / Unsplash.comИстория вопросаЯзыки программирования — фундамент огромного спектра продуктов, сервисов и критически значимой инфраструктуры. В своей научной статье по этой теме Виктор подчеркивает, что ошибки в коде компиляторов действительно могут привести к существенным последствиям. Однако количество всевозможных тестовых сценариев для них обычно крайне велико, поэтому составлять их приходится с привлечением интеллекта — человеческого или «искусственного», чтобы должным образом исследовать наиболее подверженные ошибкам части компилятора.Но автоматическое составление таких тестов обладает ограничениями. Как правило, мы тяготеем к генерированию семантически корректных фрагментов кода, минуя парсер (самую простую часть компилятора) и пробираясь к самым сложными частям: подсистеме вывода типов, механизму разрешения вызовов и прочим. Если использовать для этого формальную модель, такую как грамматику, доля получаемых семантически корректных фрагментов кода будет слишком мала.С помощью методов машинного обучения можно улучшить ситуацию — добиться большого количества генерируемых семантически корректных примеров, а также попытаться решить интересные второстепенные задачи. Такие как направленную генерацию кода — например, на оптимизацию величины времени работы компилятора или потребляемой им памяти при компиляции. Так можно протестировать производительность компилятора.
Задача попутной оптимизации характеристики производительности при генерации кода является не простым дополнением к произвольной генерации. На данный момент над этой проблемой работает не так много специалистов, поэтому Виктор увидел здесь возможность для развития профессиональных и научных компетенций — решил предложить такой способ генерации исходного кода на Kotlin, чтобы «либо время компиляции, либо потребляемая память были максимальными».
Как это работаетИспользование генетического программирования для тестирования производительности компилятора подразумевает, что с каждой новой генерацией кода осуществляется оптимизация некоторого целевого параметра — например, использованной памяти.Генератор кода, в свою очередь, также должен обеспечивать как можно большую долю семантически корректных фрагментов. Для этого Виктор — вместе с коллегами — разработал генератор с оператором скрещивания, который учитывает типы доступных переменных.
Пример скрещивания фрагментов исходного кода с учетом типов
На скриншоте продемонстрирована возможная подстановка одного фрагмента кода вместо другого (скрещивание двух файлов с исходных кодом). Здесь видно, что такая подстановка будет совместима по типам, в соответствии с реализованным оператором скрещивания. В месте, куда подставляется фрагмент кода, присутствуют все требуемые типы или их подтипы, присутствующие внутри подставляемого фрагмента.
В ходе эксперимента были обнаружены некоторые проблемы в производительности компилятора Kotlin — например, экспоненциальный рост времени анализа лямбд в правой части оператора «+=» по мере увеличения глубины вложенности этих лямбд. Команда компилятора уже занимается этой проблемой. На скриншоте далее — показываем, как изменяется время компиляции приведенного фрагмента кода, если добавлять вложенные лямбды.
Пример точечной проблемы, которую удалось обнаружитьЧто дальшеСейчас проектом занимаются пять человек. Это — коллективный труд исследователей Университета ИТМО и представителей JetBrains. Коллеги убеждены в целесообразности продолжения исследования и совершенствования предложенного Виктором подхода.
«Мы хотели бы реализовать и оператор мутации, чтобы избавиться от предвзятости относительно начального набора данных и генерировать принципиально новые конструкции языка. Помимо генетического программирования мы планируем применить здесь и генеративные модели, а затем провести сравнение результатов и подумать о разработке методологии тестирования производительности компиляторов»— Виктор Петухов, аспирант второго года обучения, программист — на факультете ИТ и программирования, программист в JetBrains и в команде компилятора Kotlin.
Дополнительное чтение в нашем блоге на Хабре:
- Какие проекты готовит лаборатория молодежной робототехники
- «Мы делаем то, что до нас мало кто делал»: говорим об инфохимии
- Как выглядит междисциплинарный подход в области робототехники
===========
Источник:
habr.com
===========
Похожие новости:
- [Python, Алгоритмы, Машинное обучение, Data Engineering] Расширение возможностей алгоритмов Машинного Обучения с помощью библиотеки daal4py
- [Поисковые технологии, Алгоритмы, Машинное обучение] Как построить полнотекстовый поиск с помощью нейронных сетей
- [Машинное обучение] ALBERT — облегченный BERT для самообучения языковым представлениям (перевод)
- [Искусственный интеллект, Машинное обучение, Управление персоналом] Логика у HR проста — обучать ИИ на «прижившихся»
- [Искусственный интеллект, Машинное обучение] DeepMind открыла код FermiNet, нейросети, которая симулирует поведение электронов
- [Высокая производительность, Python, Программирование, Машинное обучение] Deep Learning Inference Benchmark — измеряем скорость работы моделей глубокого обучения
- [Open source, Обработка изображений, Машинное обучение, Софт, Социальные сети и сообщества] В Telegram обнаружили сеть платных ботов DeepNude
- [Алгоритмы, Машинное обучение, Изучение языков] В МТИ нейросеть научилась расшифровывать забытые языки
- [Машинное обучение, Искусственный интеллект, Изучение языков] В Facebook AI продемонстрировали прямой машинный перевод с одного языка на другой
- [Python, Машинное обучение, Искусственный интеллект] Головоломка для ИИ
Теги для поиска: #_mashinnoe_obuchenie (Машинное обучение), #_universitet_itmo (университет итмо), #_kotlin, #_kompiljator (компилятор), #_testirovanie_kompiljatora (тестирование компилятора), #_viktor_petuhov (Виктор Петухов), #_laboratorija_mashinnogo_obuchenija (лаборатория машинного обучения), #_mashinnoe_obuchenie (машинное обучение), #_generatsija_koda (генерация кода), #_blog_kompanii_universitet_itmo (
Блог компании Университет ИТМО
), #_mashinnoe_obuchenie (
Машинное обучение
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:39
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Виктор Петухов, студент второго курса аспирантуры Университета ИТМО и техлид в одной из команд проекта Kotlin в JetBrains (занимается компилятором Kotlin), решил совместить работу с детальным изучением профессиональной проблематики в научном формате и присоединился к лаборатории машинного обучения ИТМО. Рассказываем, что из этого получилось. Фотография Marc Reichelt / Unsplash.comИстория вопросаЯзыки программирования — фундамент огромного спектра продуктов, сервисов и критически значимой инфраструктуры. В своей научной статье по этой теме Виктор подчеркивает, что ошибки в коде компиляторов действительно могут привести к существенным последствиям. Однако количество всевозможных тестовых сценариев для них обычно крайне велико, поэтому составлять их приходится с привлечением интеллекта — человеческого или «искусственного», чтобы должным образом исследовать наиболее подверженные ошибкам части компилятора.Но автоматическое составление таких тестов обладает ограничениями. Как правило, мы тяготеем к генерированию семантически корректных фрагментов кода, минуя парсер (самую простую часть компилятора) и пробираясь к самым сложными частям: подсистеме вывода типов, механизму разрешения вызовов и прочим. Если использовать для этого формальную модель, такую как грамматику, доля получаемых семантически корректных фрагментов кода будет слишком мала.С помощью методов машинного обучения можно улучшить ситуацию — добиться большого количества генерируемых семантически корректных примеров, а также попытаться решить интересные второстепенные задачи. Такие как направленную генерацию кода — например, на оптимизацию величины времени работы компилятора или потребляемой им памяти при компиляции. Так можно протестировать производительность компилятора. Задача попутной оптимизации характеристики производительности при генерации кода является не простым дополнением к произвольной генерации. На данный момент над этой проблемой работает не так много специалистов, поэтому Виктор увидел здесь возможность для развития профессиональных и научных компетенций — решил предложить такой способ генерации исходного кода на Kotlin, чтобы «либо время компиляции, либо потребляемая память были максимальными».
Пример скрещивания фрагментов исходного кода с учетом типов На скриншоте продемонстрирована возможная подстановка одного фрагмента кода вместо другого (скрещивание двух файлов с исходных кодом). Здесь видно, что такая подстановка будет совместима по типам, в соответствии с реализованным оператором скрещивания. В месте, куда подставляется фрагмент кода, присутствуют все требуемые типы или их подтипы, присутствующие внутри подставляемого фрагмента.
Пример точечной проблемы, которую удалось обнаружитьЧто дальшеСейчас проектом занимаются пять человек. Это — коллективный труд исследователей Университета ИТМО и представителей JetBrains. Коллеги убеждены в целесообразности продолжения исследования и совершенствования предложенного Виктором подхода. «Мы хотели бы реализовать и оператор мутации, чтобы избавиться от предвзятости относительно начального набора данных и генерировать принципиально новые конструкции языка. Помимо генетического программирования мы планируем применить здесь и генеративные модели, а затем провести сравнение результатов и подумать о разработке методологии тестирования производительности компиляторов»— Виктор Петухов, аспирант второго года обучения, программист — на факультете ИТ и программирования, программист в JetBrains и в команде компилятора Kotlin.
=========== Источник: habr.com =========== Похожие новости:
Блог компании Университет ИТМО ), #_mashinnoe_obuchenie ( Машинное обучение ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:39
Часовой пояс: UTC + 5