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()
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()
def ValidateAlgorithmSettings(self, request, context): # TODO return api_pb2.ValidateAlgorithmSettingsReply()
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()