示例#1
0
    def ValidateAlgorithmSettings(self, request, context):
        self.logger.info("Validate Algorithm Settings start")
        graph_config = request.experiment_spec.nas_config.graph_config

        # Validate GraphConfig
        # Check InputSize
        if not graph_config.input_sizes:
            return self.SetValidateContextError(context, "Missing InputSizes in GraphConfig:\n{}".format(graph_config))

        # Check OutputSize
        if not graph_config.output_sizes:
            return self.SetValidateContextError(context, "Missing OutputSizes in GraphConfig:\n{}".format(graph_config))

        # Check NumLayers
        if not graph_config.num_layers:
            return self.SetValidateContextError(context, "Missing NumLayers in GraphConfig:\n{}".format(graph_config))

        # Validate each operation
        operations_list = list(request.experiment_spec.nas_config.operations.operation)
        for operation in operations_list:

            # Check OperationType
            if not operation.operation_type:
                return self.SetValidateContextError(context, "Missing operationType in Operation:\n{}".format(operation))

            # Check ParameterConfigs
            if not operation.parameter_specs.parameters:
                return self.SetValidateContextError(context, "Missing ParameterConfigs in Operation:\n{}".format(operation))
            
            # Validate each ParameterConfig in Operation
            parameters_list = list(operation.parameter_specs.parameters)
            for parameter in parameters_list:

                # Check Name
                if not parameter.name:
                    return self.SetValidateContextError(context, "Missing Name in ParameterConfig:\n{}".format(parameter))

                # Check ParameterType
                if not parameter.parameter_type:
                    return self.SetValidateContextError(context, "Missing ParameterType in ParameterConfig:\n{}".format(parameter))

                # Check List in Categorical or Discrete Type
                if parameter.parameter_type == api_pb2.CATEGORICAL or parameter.parameter_type == api_pb2.DISCRETE:
                    if not parameter.feasible_space.list:
                        return self.SetValidateContextError(context, "Missing List in ParameterConfig.feasibleSpace:\n{}".format(parameter) )

                # Check Max, Min, Step in Int or Double Type
                elif parameter.parameter_type == api_pb2.INT or parameter.parameter_type == api_pb2.DOUBLE:
                    if not parameter.feasible_space.min and not parameter.feasible_space.max:
                        return self.SetValidateContextError(context, "Missing Max and Min in ParameterConfig.feasibleSpace:\n{}".format(parameter))

                    if parameter.parameter_type == api_pb2.DOUBLE and (not parameter.feasible_space.step or float(parameter.feasible_space.step) <= 0):
                        return self.SetValidateContextError(context, "Step parameter should be > 0 in ParameterConfig.feasibleSpace:\n{}".format(parameter))

        self.logger.info("All Experiment Settings are Valid")
        return api_pb2.ValidateAlgorithmSettingsReply()
示例#2
0
    def ValidateAlgorithmSettings(self, request, context):
        params = request.experiment_spec.parameter_specs.parameters
        settings = request.experiment_spec.algorithm.algorithm_setting
        setting_dict = {}
        for setting in settings:
            setting_dict[setting.name] = setting.value
        if "r_l" not in setting_dict or "resourceName" not in setting_dict:
            return self._set_validate_context_error(
                context, "r_l and resourceName must be set.")
        try:
            rl = float(setting_dict["r_l"])
        except:
            return self._set_validate_context_error(
                context, "r_l must be a positive float number.")
        else:
            if rl < 0:
                return self._set_validate_context_error(
                    context, "r_l must be a positive float number.")

        if "eta" in setting_dict:
            eta = int(float(setting_dict["eta"]))
            if eta <= 0:
                eta = 3
        else:
            eta = 3

        smax = int(math.log(rl) / math.log(eta))
        max_parallel = int(math.ceil(eta**smax))
        if request.experiment_spec.parallel_trial_count < max_parallel:
            return self._set_validate_context_error(
                context,
                "parallelTrialCount must be not less than %d." % max_parallel)

        valid_resourceName = False
        for param in params:
            if param.name == setting_dict["resourceName"]:
                valid_resourceName = True
                break
        if not valid_resourceName:
            return self._set_validate_context_error(
                context,
                "value of resourceName setting must be in parameters.")

        return api_pb2.ValidateAlgorithmSettingsReply()
示例#3
0
 def ValidateAlgorithmSettings(self, request, context):
     # TODO
     return api_pb2.ValidateAlgorithmSettingsReply()
示例#4
0
 def SetValidateContextError(self, context, error_message):
     context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
     context.set_details(error_message)
     self.logger.info(error_message)
     return api_pb2.ValidateAlgorithmSettingsReply()