+ preprocessors cacher
Created by: IIaKyJIuH
Added preprocessors cacher class:
- Created base cacher class for pipelines and preprocessors items.
- Refactored
DataPreprocessor
class and added its items cacher using sqlite3 database. - Moved main API caching options to the composer's
- Moved
pipelines_caching.py
example to the separate repository - Minor: rid of deprecated
.warn
logger messages; fixed singleton log initialization by wrapping some of the class fields into the property decorator; semantized docstrings; fixed caching via multiprocessing indata_objective_builder.py
; code style/type fixes
Created by: pep8speaks
Hello @IIaKyJIuH! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:
There are currently no PEP 8 issues detected in this Pull Request. Cheers!
Comment last updated at 2022-07-08 07:40:18 UTC
Created by: IIaKyJIuH
В текущей реализации кеша препроцессоров почему-то не появляется преимущества (а есть даже ухудшение) от его использования при оценке среднего количества оценённых пайплайнов в обучении (для тестирования, сколько их будет, есть файл
pipelines_caching.py
, используйте функциюuse_cache_check
с разным количествомn_jobs
для проверки)Кроме того, если не отключить в
preprocessing_builder.py
строки с обязательным добавлением опциональных предобработчиков, то это влияет в худшую сторону в том числе и на общее время, которое будет тратиться на методыfit/predict
в пайплайнах.Хотелось бы услышать предложения, в чём проблема и как это можно исправить.
Created by: codecov[bot]
Codecov Report
Merging #707 (8e0fa0bb) into master (e08d2e47) will increase coverage by
0.60%
. The diff coverage is91.77%
.@@ Coverage Diff @@ ## master #707 +/- ## ========================================== + Coverage 87.71% 88.32% +0.60% ========================================== Files 172 176 +4 Lines 12098 12291 +193 ========================================== + Hits 10612 10856 +244 + Misses 1486 1435 -51
Impacted Files Coverage Δ fedot/core/optimisers/gp_comp/evaluation.py 98.34% <ø> (+0.82%)
fedot/core/pipelines/tuning/hyperparams.py 91.83% <0.00%> (+0.34%)
...aluation/operation_implementations/models/keras.py 84.31% <33.33%> (+0.15%)
fedot/core/optimisers/adapters.py 88.77% <33.33%> (ø)
...e/optimisers/gp_comp/initial_population_builder.py 93.18% <50.00%> (ø)
fedot/api/api_utils/params.py 91.66% <66.66%> (ø)
fedot/api/main.py 79.21% <66.66%> (ø)
fedot/core/caching/base_cache.py 66.66% <66.66%> (ø)
fedot/preprocessing/data_types.py 94.17% <66.66%> (-0.02%)
fedot/core/caching/pipelines_cache.py 86.84% <83.33%> (ø)
... and 71 more
Continue to review full report at Codecov.
Legend - Click here to learn more
Δ = absolute <relative> (impact)
,ø = not affected
,? = missing data
Powered by Codecov. Last update e08d2e4...8e0fa0b. Read the comment docs.113 114 # Initialize ApiComposer's parameters via ApiParams 114 115 self.api_composer.init_cache(**{k: input_params[k] for k in signature(self.api_composer.init_cache).parameters}) 115 116 117 # Initializes preprocessing singleton cache 118 preprocessing_cache = PreprocessingCache(self.params.log) 119 preprocessing_cache.reset() 120 121 - Last updated by Elizaveta Lutsenko
- Last updated by Elizaveta Lutsenko
113 114 # Initialize ApiComposer's parameters via ApiParams 114 115 self.api_composer.init_cache(**{k: input_params[k] for k in signature(self.api_composer.init_cache).parameters}) 115 116 117 # Initializes preprocessing singleton cache 118 preprocessing_cache = PreprocessingCache(self.params.log) 119 preprocessing_cache.reset() 120 121 Created by: IIaKyJIuH
Точно, убрал
Created by: IIaKyJIuH
В текущей реализации кеша препроцессоров почему-то не появляется преимущества (а есть даже ухудшение) от его использования
По поводу этого - а оценивал, сколько времени в среднем занимает сохранение/загрузка препроцессора в кэш? И как это соотносится с его обучением с нуля.
Я использовал отдельную ветку, созданную @Dreamlone, для проверки, сколько времени теперь в среднем занимает fit/predict в пайплайнах, и вот там прирост ощущался, причём на разных датасетах с разными проблемами.
Так что да, получается, это я измерял
Created by: Dreamlone
Кроме того, если не отключить в
preprocessing_builder.py
строки с обязательным добавлением опциональных предобработчиков, то это влияет в худшую сторону в том числе и на общее время, которое будет тратиться на методыfit/predict
в пайплайнах.А вот тут поподробнее: то есть я правильно понимаю, что если не отключать
PreprocessingBuilder
, то будет хуже, чем если отключать? Если это так, то вполне закономерно: есть данные с категориями (PreprocessingBuilder включен), - собирается начальное приближение с узлами для энкодинга, - тогда StructureExplorer посмотрит на граф и сделает вывод, что операции предобработки в его структуре уже есть, и, следовательно, опциональную предобработку включать не требуется. То есть операции предобработки будут кэшироваться как обычные узлы, а если твоя реализация кэширования опционального препроцессинга эффективнее таковой as is, то будет наблюдаться прирост в производительности относительно включенного PreprocessingBuilder.Другая идея: если твой вывод относится к тому моменту, когда опциональный препроцессинг не кэшировался, то этом может значить, что, возможно, накладные расходы на обращение к БД и вытягиванию закэшированных узлов для энкодинга просто перевешивают простой подход "обучить энкодер в опциональной предобработке заново"
Created by: IIaKyJIuH
Так, на текущий момент получается примерно такая картина по кешированию энкодера и импьютера (раньше кешировался весь
DataPreprocessor
):Усреднял по 3-м запускам.
Прирост небольшой, но хоть хуже не стало. Теперь поиграюсь чуток с
id
, который является ключом в БД, и посмотрю, как это повлияет на результаты.- Last updated by Elizaveta Lutsenko
- Last updated by Elizaveta Lutsenko
- Last updated by Elizaveta Lutsenko