Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Analyze the pipeline-building capabilities of FEDOT #922

Closed
nicl-nno opened this issue Oct 6, 2022 · 9 comments
Closed

Analyze the pipeline-building capabilities of FEDOT #922

nicl-nno opened this issue Oct 6, 2022 · 9 comments
Assignees
Labels

Comments

@nicl-nno
Copy link
Collaborator

nicl-nno commented Oct 6, 2022

Comparison with sklearn-pipelines

  1. Memory consumption
  2. Fit/inference time
  3. Ability to build complex pipelines
@gkirgizov
Copy link
Collaborator

@IIaKyJIuH может, прикрепить сюда результаты ресерча, чтобы под рукой были?

@IIaKyJIuH
Copy link
Collaborator

IIaKyJIuH commented Nov 10, 2022

В экспериментах по второму пункту получил по результатам прикреплённого питоновского файла, что FEDOT'овский медленнее значительно (см. прикреплённую картинку).
image

Использовалась только задача классификации.
Пробовал пайплайны разной сложности.

Файлы с результатами и исходник, лежат в приложенном архиве. Вот ссылка на датасеты, их нужно положить в папку data в проекте для адекватной работы.

  • В 'bench_times.json' лежат получившиеся результаты по времени в зависимости от датасета и сложности пайплайнов
  • В 'datasets_target_names.json' словарь: датасет -> название целевой колонки
  • В файле с исходником можно изменять mean_range параметр для функции run_bench(...), она вызывается в самом низу

sklearn_bench.zip

Судя по json с результатами, разница по времени есть на порядок даже в маленьких датасетах. Кажется, что зависимость от объёма датасета никакая

@IIaKyJIuH
Copy link
Collaborator

Прикрепляю здесь архив с файлом pstats - результаты профилирования по среднему (размер, виды признаков и тд) датасету на простом пайплайне из лог. регрессии.

То есть, препроцессинг и в некоторых местах глубокое копирование тратят много времени.

output.zip

@IIaKyJIuH
Copy link
Collaborator

IIaKyJIuH commented Nov 16, 2022

Для сравнения, вот относительные показатели отношения fedot/sklearn времени выполнения с выключенным препроцессингом:
Mean fit time: 1.0237760102564102, mean inf time: 0.9280879076923078
А вот с включенным:
Mean fit time: 30.451563958974365, mean inf time: 56.24433703846152

@nicl-nno
Copy link
Collaborator Author

Т.е. можно сказать, что без препроцессинга всё ок?

А кэширование препроцессора как-то позитивно влияет на это соотношение?

@IIaKyJIuH
Copy link
Collaborator

IIaKyJIuH commented Nov 17, 2022

Да, без препроцессинга всё ок, он действительно забирал на себя всё основное время. Как ускорить его ещё не придумал.
Вот типичный пример pstats по датасету (здесь приложен по APSFailure для простейшего пайплайна) без препроцессинга - output.zip

Кеширование тут даже не участвует, потому что используется сравнение готовых пайплайнов бок о бок.
Если делать последовательные сравнения пайплайнов с сохранением препроцессоров на данных, то в этом будет профит. Выглядит нечестно, но можно проверить)
В текущей реализации кешера препроцессоров это даже не получится, потому что ключом для препроцессора является descriptive_id от самого root_node. То есть, при разных (структурно) пайплайнах не получится им воспользоваться.

@IIaKyJIuH
Copy link
Collaborator

Ситуация странная получается, вот вроде бы на этом датасете ситуация явно в пользу ускоренной версии:
results_adult_medium.zip

Однако, на некоторых получилось даже хуже:
results_APSFailure_medium.zip

APSFailure намекает, что проблема в preprocessing.py::_clean_extra_spaces, однако, на тестах в колабе это не являлось узким местом...

и вообще сейчас почему-то в среднем по отношению времени выполнения fedot/sklearn получается просто нереально большой регресс)
image

@nicl-nno
Copy link
Collaborator Author

nicl-nno commented Dec 6, 2022

В среднем - это по всем датасетам?

А на каком датасете тогда хуже всего?

@IIaKyJIuH
Copy link
Collaborator

В среднем - это по всем датасетам?

А на каком датасете тогда хуже всего?

Да, в среднем по всем датасетам почему-то получается так.

Собрал максимальные показатели всё того же отношения:
{'Fitting_time': ['higgs', 1663.365], 'Inference_time': ['robert', 4252.168]}

Получается, на далеко не самом большом датасете 'higgs' самый большой отрыв по фиттингу.
И на 3-ем по объёму датасете - 'robert', самое большое отношение по инференсу.

Примечательно, что у 'robert' одни только числовые типы данных, поэтому странно, что он вообще нуждается в препроцессингах для object'ов. 'higgs' тоже состоит из чисел, но у него хотя бы треть колонок с типом object.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants