From d0f8ff2b6d4fc6037f290187b2c9fcf8e91a630d Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 24 Feb 2025 12:48:48 +0100 Subject: [PATCH] fix(qav3): ensure optuna settings can't hog CPU ressources MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- ReforceXY/user_data/config-template.json | 4 ++-- .../freqaimodels/LightGBMRegressorQuickAdapterV35.py | 12 ++++++++++-- .../freqaimodels/XGBoostRegressorQuickAdapterV35.py | 12 ++++++++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/ReforceXY/user_data/config-template.json b/ReforceXY/user_data/config-template.json index 38438cc..1de66d2 100644 --- a/ReforceXY/user_data/config-template.json +++ b/ReforceXY/user_data/config-template.json @@ -168,8 +168,8 @@ "max_training_drawdown_pct": 0.02, "max_trade_duration_candles": 96, // Timeout exit value used with force_actions "force_actions": false, // Utilize minimal_roi, stoploss, and max_trade_duration_candles as TP/SL/Timeout in the environment - "n_envs": 1, // Number of DummyVecEnv environments - "frame_staking": 0, // Number of VecFrameStack stacks (set > 1 to use) + "n_envs": 32, // Number of DummyVecEnv environments + "frame_staking": 4, // Number of VecFrameStack stacks (set > 1 to use) "lr_schedule": false, // Enable learning rate linear schedule "cr_schedule": false, // Enable clip range linear schedule "max_no_improvement_evals": 0, // Maximum consecutive evaluations without a new best model diff --git a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py index 3fd4269..ae470ce 100644 --- a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py @@ -325,6 +325,7 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): storage=storage, ) self.optuna_hp_enqueue_previous_best_trial(pair, study) + logger.info(f"Optuna {study_namespace} hyperopt started") start = time.time() try: study.optimize( @@ -339,7 +340,10 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): self.model_training_parameters, ), n_trials=self.__optuna_config.get("n_trials", N_TRIALS), - n_jobs=self.__optuna_config.get("n_jobs", 1), + n_jobs=min( + self.__optuna_config.get("n_jobs", 1), + max(int(self.max_system_threads / 4), 1), + ), timeout=self.__optuna_config.get("timeout", 3600), gc_after_trial=True, ) @@ -397,6 +401,7 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): storage=storage, ) self.optuna_period_enqueue_previous_best_trial(pair, study) + logger.info(f"Optuna {study_namespace} hyperopt started") start = time.time() try: study.optimize( @@ -414,7 +419,10 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): model_training_parameters, ), n_trials=self.__optuna_config.get("n_trials", N_TRIALS), - n_jobs=self.__optuna_config.get("n_jobs", 1), + n_jobs=min( + self.__optuna_config.get("n_jobs", 1), + max(int(self.max_system_threads / 4), 1), + ), timeout=self.__optuna_config.get("timeout", 3600), gc_after_trial=True, ) diff --git a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py index bbc2b28..d0fd9c4 100644 --- a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py @@ -326,6 +326,7 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): storage=storage, ) self.optuna_hp_enqueue_previous_best_trial(pair, study) + logger.info(f"Optuna {study_namespace} hyperopt started") start = time.time() try: study.optimize( @@ -340,7 +341,10 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): self.model_training_parameters, ), n_trials=self.__optuna_config.get("n_trials", N_TRIALS), - n_jobs=self.__optuna_config.get("n_jobs", 1), + n_jobs=min( + self.__optuna_config.get("n_jobs", 1), + max(int(self.max_system_threads / 4), 1), + ), timeout=self.__optuna_config.get("timeout", 3600), gc_after_trial=True, ) @@ -398,6 +402,7 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): storage=storage, ) self.optuna_period_enqueue_previous_best_trial(pair, study) + logger.info(f"Optuna {study_namespace} hyperopt started") start = time.time() try: study.optimize( @@ -415,7 +420,10 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): model_training_parameters, ), n_trials=self.__optuna_config.get("n_trials", N_TRIALS), - n_jobs=self.__optuna_config.get("n_jobs", 1), + n_jobs=min( + self.__optuna_config.get("n_jobs", 1), + max(int(self.max_system_threads / 4), 1), + ), timeout=self.__optuna_config.get("timeout", 3600), gc_after_trial=True, ) -- 2.43.0