Esempio n. 1
0
    def output_hps(self, id=None, hps=None):
        """Save model desc and performance.

        :param id: model desc id, usually worker id.
        :type id: int or str.
        :param hps: hyper parameters.
        :type hps: json.

        """
        if id is None:
            id = self.worker_id
        if hps is None:
            if not hasattr(self, "hps"):
                logger.error(
                    "Failed to save hyperparameters, param 'hps' is not assigned."
                )
                return
            hps = self.hps
        _file = FileOps.join_path(self.local_output_path, self.step_name,
                                  "hyperparameters.json")
        FileOps.make_base_dir(_file)
        try:
            with open(_file, "w") as f:
                json.dump({str(id): hps}, f)
        except Exception as ex:
            logger.error(
                "Failed to save hyperparameters, file={}, hps={}, msg={}".
                format(_file, hps, str(ex)))
            return
Esempio n. 2
0
    def output_evaluate_result(self,
                               id=None,
                               performance=None,
                               evaluate_type="gpu"):
        """Save model performance.

        :param id: model desc id, usally worker id instead.
        :type id: int or str.
        :param performance: performance value, eg. {"accuracy": 98.23}.
        :type performance: json.
        :param evaluate_type: evaluate type, eg. "gpu", "davinci", "arm".
        :type evaluate_type: str.
        """
        if performance is None:
            return
        if id is None:
            id = self.worker_id
        _file = FileOps.join_path(
            self.local_output_path, self.step_name,
            "performance_{}_{}.txt".format(evaluate_type, str(id)))
        FileOps.make_base_dir(_file)
        try:
            performance = str(performance)
            with open(_file, "w") as f:
                f.write(performance)
        except Exception as ex:
            logger.error(
                "Failed to save performance, file={}, pfm={}, msg={}".format(
                    _file, performance, str(ex)))
            return
Esempio n. 3
0
    def output_model_desc(self, id=None, model_desc=None, performance=None):
        """Save model desc and performance.

        :param id: model desc id, usally worker id instead.
        :type id: int or str.
        :param model_desc: model description.
        :type model_desc: json.
        :param performance: performance value, eg. {"accuracy": 98.23}.
        :type performance: json.

        """
        if id is None:
            id = self.worker_id
        if model_desc is None:
            if not hasattr(self, "model_desc"):
                logger.error(
                    "Failed to save model desc, param 'model_desc' is not assigned."
                )
                return
            model_desc = self.model_desc
        _file = FileOps.join_path(self.local_output_path, self.step_name,
                                  "model_desc_{}.json".format(str(id)))
        FileOps.make_base_dir(_file)
        try:
            with open(_file, "w") as f:
                json.dump(model_desc, f)
        except Exception as ex:
            logger.error(
                "Failed to save model desc, file={}, desc={}, msg={}".format(
                    _file, model_desc, str(ex)))
            return
        if performance is not None:
            self.output_evaluate_result(id, performance)
Esempio n. 4
0
 def _append_record_to_csv(self,
                           record_name=None,
                           step_name=None,
                           record=None,
                           mode='a'):
     """Transfer record to csv file."""
     local_output_path = os.path.join(TaskOps().local_output_path,
                                      step_name)
     logging.debug(
         "recode to csv, local_output_path={}".format(local_output_path))
     if not record_name and os.path.exists(local_output_path):
         return
     file_path = os.path.join(local_output_path,
                              "{}.csv".format(record_name))
     FileOps.make_base_dir(file_path)
     try:
         for key in record:
             if isinstance(record[key], dict) or isinstance(
                     record[key], list):
                 record[key] = str(record[key])
         data = pd.DataFrame([record])
         if not os.path.exists(file_path):
             data.to_csv(file_path, index=False)
         elif os.path.exists(file_path) and os.path.getsize(
                 file_path) and mode == 'a':
             data.to_csv(file_path, index=False, mode=mode, header=0)
         else:
             data.to_csv(file_path, index=False, mode=mode)
     except Exception as ex:
         logging.info(
             'Can not transfer record to csv file Error: {}'.format(ex))
Esempio n. 5
0
 def _save_model_desc_file(self, id, desc):
     output_path = TaskOps(UserConfig().data.general).local_output_path
     desc_file = os.path.join(output_path, "nas",
                              "model_desc_{}.json".format(id))
     FileOps.make_base_dir(desc_file)
     output = {}
     for key in desc:
         if key in ["type", "modules", "custom"]:
             output[key] = desc[key]
     with open(desc_file, "w") as f:
         json.dump(output, f)
Esempio n. 6
0
    def output_model(self,
                     id=None,
                     model=None,
                     model_desc=None,
                     performance=None):
        """Save model, model description, performance.

        :param id: model desc id, usually worker id.
        :type id: int or str.
        :param model: hyper parameters.
        :type hps: json.

        """
        if id is None:
            id = self.worker_id
        if model is None:
            if not hasattr(self, "model"):
                logger.error(
                    "Failed to save model, param 'model' is not assigned.")
                return
            model = self.model
        if model_desc is None:
            if not hasattr(self, "model_desc"):
                logger.error(
                    "Failed to save model, param 'model_desc' is not assigned."
                )
                return
            model_desc = self.model_desc
        _pth_file = FileOps.join_path(self.local_output_path, self.step_name,
                                      "model_{}.pth".format(id))
        FileOps.make_base_dir(_pth_file)
        try:
            torch.save(model.state_dict(), _pth_file)
        except Exception as ex:
            logger.error("Failed to save model pth, file={}, msg={}".format(
                _pth_file, str(ex)))
        self.output_model_desc(id, model_desc, performance)