RLens — оптимизация обучения с подкреплением 2

RLens — это фреймворк глубокого обучения с подкреплением для оптимизации системы. Это экспериментальный проект, и он сосредоточен на задаче распределения регистров в рамках LLVM. LLVM — это структура драйвера компилятора, предназначенная для преобразования промежуточного представления в целевой машинный код. Через запись функции мы можем собирать данные и тренироваться с компилятором.

почему обучение с подкреплением?

Обучение с подкреплением — это метод изучения стратегии посредством изучения пространства действия. При традиционном распределении регистров задача преобразуется в задачу, подобную раскраске, которая является np-полной и решается эвристическим методом. Однако эвристическая стратегия может хорошо работать на одной цели, но плохо на других. Благодаря обучению с подкреплением результат может зависеть или не зависеть от цели. Функциональность распределителя определяется собираемыми обучающими данными, что является более гибким. Поэтому стратегия распределения разрабатывается путем установки различных функций вознаграждения для конкретных целей, таких как максимальный параллелизм инструкций, минимальный цикл выполнения.

Пример запуска:

Чтобы обеспечить проход оптимизации, существует несколько шагов инструкции для выполнения распределения регистров:

  1. в подмодуле llvm перейдите в ветку rpc и соберите https://llvm.org/docs/GettingStarted.html
  2. llc -emit-llvm -S Целевой файл
  3. программа mv targetfile/
  4. изменить поле src rlcofnig на имя целевого файла
  5. python train_pg.py CartPole-v0 -n 50000 -b 5000 -e 1 -rtg -dna — exp_name test_compiler_softmax_falut_test_norandom python train_pg.py -h для получения дополнительной информации

В первой инструкции исходный код (например, c, c++) компилируется в файл промежуточного представления. Так как llc считывает входные данные как файл IR для оптимизации, важно подготовить эти вводные данные.

Затем измените файл конфигурации и запустите сценарий обучения, результаты которого записываются в файл журнала.

Поскольку интерфейс между llvm и rlens создан, я думаю, что фреймворк можно использовать для другого прохода оптимизации.