From 6cee6f25659537833bc65e7111b9c87e9c56d57d Mon Sep 17 00:00:00 2001 From: Craven1701 Date: Tue, 29 Apr 2025 11:44:39 +0000 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E9=80=80=20'Pull=20Request=20!1172=20?= =?UTF-8?q?:=20=E3=80=90OmniAdvisor=202.0=E3=80=91=20=E5=88=9D=E6=AD=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=81=94=E5=90=88=E8=B0=83=E4=BC=98'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- omniadvisor/src/common/constant.py | 4 -- .../omniadvisor/interface/config_tuning.py | 53 ++++--------------- .../service/tuning_result/tuning_result.py | 32 +++++------ .../tuning_result/tuning_result_history.py | 9 +--- 4 files changed, 23 insertions(+), 75 deletions(-) diff --git a/omniadvisor/src/common/constant.py b/omniadvisor/src/common/constant.py index 70d3bbda8..450f60e24 100644 --- a/omniadvisor/src/common/constant.py +++ b/omniadvisor/src/common/constant.py @@ -62,10 +62,6 @@ class OmniAdvisorConf: backend = 'backend' all = [hijacking, backend] - # 规定每种调优方式的轮次 - # TODO 瞎拍的 - tuning_strategies = [(TuningMethod.expert, 5), (TuningMethod.iterative, 10)] - # 评估配置失效的阈值,当配置执行失败次数大于等于此值,则配置失效 config_fail_threshold = 1 diff --git a/omniadvisor/src/omniadvisor/interface/config_tuning.py b/omniadvisor/src/omniadvisor/interface/config_tuning.py index 38df8b36c..d5f5408ae 100644 --- a/omniadvisor/src/omniadvisor/interface/config_tuning.py +++ b/omniadvisor/src/omniadvisor/interface/config_tuning.py @@ -1,15 +1,12 @@ import argparse -from itertools import chain -from algo.expert.tuning import ExpertTuning -from algo.iterative.tuning import SmacAppendTuning +from common.constant import OA_CONF +from omniadvisor.utils.logger import global_logger from omniadvisor.repository.load_repository import LoadRepository -from omniadvisor.repository.tuning_record_repository import TuningRecordRepository -from omniadvisor.service.retest_service import retest from omniadvisor.service.tuning_result.tuning_result_history import get_tuning_result_history -from omniadvisor.utils.logger import global_logger - -from common.constant import OA_CONF +from omniadvisor.service.retest_service import retest +from algo.iterative.tuning import SmacAppendTuning +from algo.expert.tuning import ExpertTuning def _parse_tuning_args(): @@ -25,10 +22,9 @@ def _parse_tuning_args(): required=True, help='If choose hijacking, a test will execute immediately') - # TODO 待删除 - # parser.add_argument("-t", "--tuning-method", type=str, required=True, - # choices=OA_CONF.TuningMethod.all, - # help='Support three tune method, for iterative, use BO; for expert ...') + parser.add_argument("-t", "--tuning-method", type=str, required=True, + choices=OA_CONF.TuningMethod.all, + help='Support three tune method, for iterative, use BO; for expert ...') args = parser.parse_args() return args @@ -72,40 +68,9 @@ def unified_tuning(load_id: str, retest_way: str, tuning_method: str): LoadRepository.update_test_config(load, next_config) -def get_current_tuning_method(load): - """ - 根据 load,获取调优历史记录,并根据OA_CONF中的tuning_strategies决定本轮的调优方法 - :param load - :return: 当前的调优方法 - """ - tuning_records = TuningRecordRepository.query_by_load(load) - tuning_strategy_list = list(chain(*[[strategy[0]] * strategy[1] for strategy in OA_CONF.tuning_strategies])) - tuning_times = len(tuning_records) - tuning_method = tuning_strategy_list[tuning_times] - return tuning_method - - def main(): """ 配置调优主函数 """ args = _parse_tuning_args() - # 查询负载: - loads = LoadRepository.query_by_id(args.load_id) - if not loads: - # 若查询结果为空,直接返回即可 - global_logger.info('Cannot find load id: %s in database, the tuning process exits.', args.load_id) - return - load = loads[0] - if not load.tuning_needed: - global_logger.info('The load dont need to tune, the tuning process exits.') - return - # 查询上一次调优的结果是否测试完毕: - tuning_result_history = get_tuning_result_history(load) - if (tuning_result_history.latest_tuning_record and tuning_result_history.latest_tuning_record.status == - OA_CONF.ExecStatus.running): - # 有上一次调优,且调优的结果仍在复测中,提示无法调优并退出 - global_logger.info('The retest status of latest tuning result is still running, please wait.') - return - tuning_method = get_current_tuning_method(args.load_id) - unified_tuning(args.load_id, args.retest_way, tuning_method) + unified_tuning(args.load_id, args.retest_way, args.tuning_method) diff --git a/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result.py b/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result.py index 279175d6b..f9f2e154f 100644 --- a/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result.py +++ b/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result.py @@ -40,11 +40,10 @@ class TuningResult: """ 调优结果,汇总相同负载和配置下的调优记录和测试记录 """ - def __init__( - self, - tuning_record: TuningRecord, - exam_records: List[ExamRecord] + self, + tuning_record: TuningRecord, + exam_records: List[ExamRecord] ): """ 初始化,负载对应下的所有性能历史数据 @@ -53,7 +52,7 @@ class TuningResult: :param exam_records: 测试记录 """ self._tuning_record = tuning_record - self._exam_records = exam_records if exam_records is not None else [] + self._exam_records = exam_records @property def config(self): @@ -77,21 +76,16 @@ class TuningResult: @property def status(self): - """ - 对于tuning result 定义三种状态 - 成功:达到指定复测次数,并且失败次数没有超过阈值,这种情况下,对这个配置的复测流程已结束 - 失败:失败的次数超过阈值,就失败了,对这个配置的复测流程已结束 - 复测中:复测次数小于指定复测次数,且失败次数没有超过阈值,复测流程尚在进行中 - :return: - """ - failed_times = sum([exam_record.status == OA_CONF.ExecStatus.fail for exam_record in self._exam_records]) + # 若配置未复测过,则默认该配置暂时为失败 + if not self._exam_records: + return OA_CONF.ExecStatus.fail + + failed_times = sum([exam_record.status==OA_CONF.ExecStatus.fail for exam_record in self._exam_records]) + # 如果该配置执行失败过,则认为配置不可行 if failed_times >= OA_CONF.config_fail_threshold: - overall_status = OA_CONF.ExecStatus.fail - elif len(self._exam_records) == OA_CONF.tuning_retest_times: - overall_status = OA_CONF.ExecStatus.success + return OA_CONF.ExecStatus.fail else: - overall_status = OA_CONF.ExecStatus.running - return overall_status + return OA_CONF.ExecStatus.success @property def runtime(self): @@ -128,4 +122,4 @@ class TuningResult: status=self.status, runtime=self.runtime, trace=self.trace - ) + ) \ No newline at end of file diff --git a/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result_history.py b/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result_history.py index c0e1e326a..23ca7c940 100644 --- a/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result_history.py +++ b/omniadvisor/src/omniadvisor/service/tuning_result/tuning_result_history.py @@ -52,11 +52,4 @@ class TuningResultHistory: if self.tuning_history: return min(self.tuning_history, key=lambda x: x.runtime).config else: - return {} - - @property - def latest_tuning_record(self): - if self._tuning_results: - return max(self._tuning_results, key=lambda tuning_result: tuning_result.rounds) - else: - return None + return {} \ No newline at end of file -- Gitee