Example #1
0
 def sample(self):
     """Sample a work id and model from search algorithm."""
     res = self.search_alg.search()
     if not res:
         return None
     if not isinstance(res, list):
         res = [res]
     if len(res) == 0:
         return None
     out = []
     for sample in res:
         desc = sample.get("desc") if isinstance(sample, dict) else sample[1]
         desc = self._decode_hps(desc)
         model_desc = deepcopy(desc)
         if "modules" in desc:
             PipeStepConfig.model.model_desc = deepcopy(desc)
         elif "network" in desc:
             origin_desc = PipeStepConfig.model.model_desc
             desc = update_dict(desc["network"], origin_desc)
             PipeStepConfig.model.model_desc = deepcopy(desc)
         if self.quota.is_filtered(desc):
             continue
         record = self.record.from_sample(sample, desc)
         Report().broadcast(record)
         out.append((record.worker_id, model_desc))
     return out
Example #2
0
def _set_startup(args):
    if args.startup in ['benchmark', 'b']:
        cfg = Config(args.config_file)
        config = deepcopy(cfg)
        if 'benchmark' in cfg.keys():
            benchmark_config = cfg.pop('benchmark')
            config = update_dict(benchmark_config, cfg)
    else:
        config = Config(args.config_file)
    return config
Example #3
0
File: mfkd.py Project: ylfzr/vega
 def _desc_from_choices(self, choices):
     """Create description object from choices."""
     desc = {}
     pos = 0
     for key in self.search_space.modules:
         config_space = copy.deepcopy(self.search_space[key])
         module_cfg, pos = self._sub_config_choice(config_space, choices,
                                                   pos)
         desc[key] = module_cfg
     desc = update_dict(desc, copy.deepcopy(self.search_space))
     return desc
Example #4
0
    def decode(self, code):
        """Decode the code to Network Desc.

        :param code: input code
        :type code: list of int
        :return: network desc
        :rtype: NetworkDesc
        """
        chn_info = self._code_to_chninfo(code)
        desc = {
            'backbone': chn_info,
        }
        desc = update_dict(desc, copy.deepcopy(self.search_space))
        return desc
Example #5
0
    def decode(self, code):
        """Decode the code.

        :param code: code of network
        :type code: list
        :return: network desc
        :rtype: NetworkDesc
        """
        length = len(code)
        desc = {
            "nbit_w_list": code[: length // 2],
            "nbit_a_list": code[length // 2:]
        }
        desc = update_dict(desc, copy.deepcopy(self.search_space))
        return desc
Example #6
0
    def sample(self):
        """Sample a work id and model from search algorithm."""
        res = self.search_alg.search()
        if not res:
            return None
        if not isinstance(res, list):
            res = [res]
        if len(res) == 0:
            return None
        out = []
        for sample in res:

            if isinstance(sample, dict):
                id = sample["worker_id"]
                desc = self._decode_hps(sample["encoded_desc"])
                sample.pop("worker_id")
                sample.pop("encoded_desc")
                kwargs = sample
                sample = _split_sample((id, desc))
            else:
                kwargs = {}
                sample = _split_sample(sample)
            (id, desc, hps) = sample

            if "modules" in desc:
                PipeStepConfig.model.model_desc = deepcopy(desc)
            elif "network" in desc:
                origin_desc = PipeStepConfig.model.model_desc
                model_desc = update_dict(desc["network"], origin_desc)
                PipeStepConfig.model.model_desc = model_desc
                desc.pop('network')
                desc.update(model_desc)

            if self.quota.is_filtered(desc):
                continue
            if self.affinity and not self.affinity.is_affinity(desc):
                continue

            record = self.record.init(step_name=General.step_name,
                                      worker_id=id,
                                      desc=desc,
                                      hps=hps,
                                      **kwargs)
            ReportClient.broadcast(record)
            out.append((id, desc, hps))
        return out
Example #7
0
    def decode(self, code):
        """Decode the code to Network Desc.

        :param code: input code
        :type code: list of int
        :return: network desc
        :rtype: NetworkDesc
        """
        chn_info = self._code_to_chninfo(code)
        desc = {
            "backbone": chn_info,
            "head": {
                "base_channel": chn_info['chn_node'][-1]
            }
        }
        desc = update_dict(desc, copy.deepcopy(self.search_space))
        return desc
    def decode(self, desc):
        """Decode hps: `trainer.optim.lr : 0.1` to dict format.

        And convert to `zeus.common.config import Config` object
        This Config will be override in Trainer or Datasets class
        The override priority is: input hps > user configuration >  default configuration
        :param hps: hyper params
        :return: dict
        """
        hps_dict = {}
        if desc is None:
            return None
        if isinstance(desc, tuple):
            return desc
        for hp_name, value in desc.items():
            hp_dict = {}
            for key in list(reversed(hp_name.split('.'))):
                if hp_dict:
                    hp_dict = {key: hp_dict}
                else:
                    hp_dict = {key: value}
            # update cfg with hps
            hps_dict = update_dict(hps_dict, hp_dict, [])
        return Config(hps_dict)
Example #9
0
 def _init_hps(self, hps):
     """Convert trainer values in hps to cfg."""
     if hps is not None:
         self.args = Config(update_dict(hps, self.args))