add early stoppping service (#41)

* add early stoppping service

Signed-off-by: YujiOshima <[email protected]>

* delete debug message

Signed-off-by: YujiOshima <[email protected]>

* add medianstopping to test script

Signed-off-by: YujiOshima <[email protected]>
This commit is contained in:
oshima
2018-04-12 23:21:58 -07:00
committed by k8s-ci-robot
parent c4f292890b
commit 8ac80eae2b
21 changed files with 937 additions and 338 deletions
+404 -220
View File
@@ -14,6 +14,7 @@ It has these top-level messages:
Metrics
EvaluationLog
SuggestionParameter
EarlyStoppingParameter
Tag
MountConf
Trial
@@ -29,8 +30,8 @@ It has these top-level messages:
SuggestTrialsReply
CompleteTrialRequest
CompleteTrialReply
ShouldTrialStopRequest
ShouldTrialStopReply
EarlyStoppingRequest
EarlyStoppingReply
GetObjectValueRequest
GetObjectValueReply
AddMeasurementToTrialsRequest
@@ -43,6 +44,10 @@ It has these top-level messages:
SetSuggestionParametersReply
StopSuggestionRequest
StopSuggestionReply
ShouldTrialStopRequest
ShouldTrialStopReply
SetEarlyStoppingParameterRequest
SetEarlyStoppingParameterReply
*/
package api
@@ -322,6 +327,30 @@ func (m *SuggestionParameter) GetValue() string {
return ""
}
type EarlyStoppingParameter struct {
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
}
func (m *EarlyStoppingParameter) Reset() { *m = EarlyStoppingParameter{} }
func (m *EarlyStoppingParameter) String() string { return proto.CompactTextString(m) }
func (*EarlyStoppingParameter) ProtoMessage() {}
func (*EarlyStoppingParameter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (m *EarlyStoppingParameter) GetName() string {
if m != nil {
return m.Name
}
return ""
}
func (m *EarlyStoppingParameter) GetValue() string {
if m != nil {
return m.Value
}
return ""
}
type Tag struct {
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
@@ -330,7 +359,7 @@ type Tag struct {
func (m *Tag) Reset() { *m = Tag{} }
func (m *Tag) String() string { return proto.CompactTextString(m) }
func (*Tag) ProtoMessage() {}
func (*Tag) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (*Tag) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (m *Tag) GetName() string {
if m != nil {
@@ -354,7 +383,7 @@ type MountConf struct {
func (m *MountConf) Reset() { *m = MountConf{} }
func (m *MountConf) String() string { return proto.CompactTextString(m) }
func (*MountConf) ProtoMessage() {}
func (*MountConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
func (*MountConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (m *MountConf) GetPvc() string {
if m != nil {
@@ -383,7 +412,7 @@ type Trial struct {
func (m *Trial) Reset() { *m = Trial{} }
func (m *Trial) String() string { return proto.CompactTextString(m) }
func (*Trial) ProtoMessage() {}
func (*Trial) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (*Trial) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *Trial) GetTrialId() string {
if m != nil {
@@ -435,31 +464,32 @@ func (m *Trial) GetTags() []*Tag {
}
type StudyConfig struct {
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
Owner string `protobuf:"bytes,2,opt,name=owner" json:"owner,omitempty"`
OptimizationType OptimizationType `protobuf:"varint,3,opt,name=optimization_type,json=optimizationType,enum=api.OptimizationType" json:"optimization_type,omitempty"`
OptimizationGoal float64 `protobuf:"fixed64,4,opt,name=optimization_goal,json=optimizationGoal" json:"optimization_goal,omitempty"`
ParameterConfigs *StudyConfig_ParameterConfigs `protobuf:"bytes,5,opt,name=parameter_configs,json=parameterConfigs" json:"parameter_configs,omitempty"`
AccessPermissions []string `protobuf:"bytes,6,rep,name=access_permissions,json=accessPermissions" json:"access_permissions,omitempty"`
SuggestAlgorithm string `protobuf:"bytes,7,opt,name=suggest_algorithm,json=suggestAlgorithm" json:"suggest_algorithm,omitempty"`
AutostopAlgorithm string `protobuf:"bytes,8,opt,name=autostop_algorithm,json=autostopAlgorithm" json:"autostop_algorithm,omitempty"`
StudyTaskName string `protobuf:"bytes,9,opt,name=study_task_name,json=studyTaskName" json:"study_task_name,omitempty"`
SuggestionParameters []*SuggestionParameter `protobuf:"bytes,10,rep,name=suggestion_parameters,json=suggestionParameters" json:"suggestion_parameters,omitempty"`
Tags []*Tag `protobuf:"bytes,11,rep,name=tags" json:"tags,omitempty"`
ObjectiveValueName string `protobuf:"bytes,12,opt,name=objective_value_name,json=objectiveValueName" json:"objective_value_name,omitempty"`
Metrics []string `protobuf:"bytes,13,rep,name=metrics" json:"metrics,omitempty"`
Image string `protobuf:"bytes,14,opt,name=image" json:"image,omitempty"`
Command []string `protobuf:"bytes,15,rep,name=command" json:"command,omitempty"`
Gpu int32 `protobuf:"varint,16,opt,name=gpu" json:"gpu,omitempty"`
Scheduler string `protobuf:"bytes,17,opt,name=scheduler" json:"scheduler,omitempty"`
Mount *MountConf `protobuf:"bytes,18,opt,name=mount" json:"mount,omitempty"`
PullSecret string `protobuf:"bytes,19,opt,name=pull_secret,json=pullSecret" json:"pull_secret,omitempty"`
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
Owner string `protobuf:"bytes,2,opt,name=owner" json:"owner,omitempty"`
OptimizationType OptimizationType `protobuf:"varint,3,opt,name=optimization_type,json=optimizationType,enum=api.OptimizationType" json:"optimization_type,omitempty"`
OptimizationGoal float64 `protobuf:"fixed64,4,opt,name=optimization_goal,json=optimizationGoal" json:"optimization_goal,omitempty"`
ParameterConfigs *StudyConfig_ParameterConfigs `protobuf:"bytes,5,opt,name=parameter_configs,json=parameterConfigs" json:"parameter_configs,omitempty"`
AccessPermissions []string `protobuf:"bytes,6,rep,name=access_permissions,json=accessPermissions" json:"access_permissions,omitempty"`
SuggestAlgorithm string `protobuf:"bytes,7,opt,name=suggest_algorithm,json=suggestAlgorithm" json:"suggest_algorithm,omitempty"`
EarlyStoppingAlgorithm string `protobuf:"bytes,8,opt,name=early_stopping_algorithm,json=earlyStoppingAlgorithm" json:"early_stopping_algorithm,omitempty"`
StudyTaskName string `protobuf:"bytes,9,opt,name=study_task_name,json=studyTaskName" json:"study_task_name,omitempty"`
SuggestionParameters []*SuggestionParameter `protobuf:"bytes,10,rep,name=suggestion_parameters,json=suggestionParameters" json:"suggestion_parameters,omitempty"`
EarlyStoppingParameters []*EarlyStoppingParameter `protobuf:"bytes,11,rep,name=early_stopping_parameters,json=earlyStoppingParameters" json:"early_stopping_parameters,omitempty"`
Tags []*Tag `protobuf:"bytes,12,rep,name=tags" json:"tags,omitempty"`
ObjectiveValueName string `protobuf:"bytes,13,opt,name=objective_value_name,json=objectiveValueName" json:"objective_value_name,omitempty"`
Metrics []string `protobuf:"bytes,14,rep,name=metrics" json:"metrics,omitempty"`
Image string `protobuf:"bytes,15,opt,name=image" json:"image,omitempty"`
Command []string `protobuf:"bytes,16,rep,name=command" json:"command,omitempty"`
Gpu int32 `protobuf:"varint,17,opt,name=gpu" json:"gpu,omitempty"`
Scheduler string `protobuf:"bytes,18,opt,name=scheduler" json:"scheduler,omitempty"`
Mount *MountConf `protobuf:"bytes,19,opt,name=mount" json:"mount,omitempty"`
PullSecret string `protobuf:"bytes,20,opt,name=pull_secret,json=pullSecret" json:"pull_secret,omitempty"`
}
func (m *StudyConfig) Reset() { *m = StudyConfig{} }
func (m *StudyConfig) String() string { return proto.CompactTextString(m) }
func (*StudyConfig) ProtoMessage() {}
func (*StudyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (*StudyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (m *StudyConfig) GetName() string {
if m != nil {
@@ -510,9 +540,9 @@ func (m *StudyConfig) GetSuggestAlgorithm() string {
return ""
}
func (m *StudyConfig) GetAutostopAlgorithm() string {
func (m *StudyConfig) GetEarlyStoppingAlgorithm() string {
if m != nil {
return m.AutostopAlgorithm
return m.EarlyStoppingAlgorithm
}
return ""
}
@@ -531,6 +561,13 @@ func (m *StudyConfig) GetSuggestionParameters() []*SuggestionParameter {
return nil
}
func (m *StudyConfig) GetEarlyStoppingParameters() []*EarlyStoppingParameter {
if m != nil {
return m.EarlyStoppingParameters
}
return nil
}
func (m *StudyConfig) GetTags() []*Tag {
if m != nil {
return m.Tags
@@ -598,10 +635,12 @@ type StudyConfig_ParameterConfigs struct {
Configs []*ParameterConfig `protobuf:"bytes,1,rep,name=configs" json:"configs,omitempty"`
}
func (m *StudyConfig_ParameterConfigs) Reset() { *m = StudyConfig_ParameterConfigs{} }
func (m *StudyConfig_ParameterConfigs) String() string { return proto.CompactTextString(m) }
func (*StudyConfig_ParameterConfigs) ProtoMessage() {}
func (*StudyConfig_ParameterConfigs) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} }
func (m *StudyConfig_ParameterConfigs) Reset() { *m = StudyConfig_ParameterConfigs{} }
func (m *StudyConfig_ParameterConfigs) String() string { return proto.CompactTextString(m) }
func (*StudyConfig_ParameterConfigs) ProtoMessage() {}
func (*StudyConfig_ParameterConfigs) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{10, 0}
}
func (m *StudyConfig_ParameterConfigs) GetConfigs() []*ParameterConfig {
if m != nil {
@@ -617,7 +656,7 @@ type CreateStudyRequest struct {
func (m *CreateStudyRequest) Reset() { *m = CreateStudyRequest{} }
func (m *CreateStudyRequest) String() string { return proto.CompactTextString(m) }
func (*CreateStudyRequest) ProtoMessage() {}
func (*CreateStudyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (*CreateStudyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (m *CreateStudyRequest) GetStudyConfig() *StudyConfig {
if m != nil {
@@ -633,7 +672,7 @@ type CreateStudyReply struct {
func (m *CreateStudyReply) Reset() { *m = CreateStudyReply{} }
func (m *CreateStudyReply) String() string { return proto.CompactTextString(m) }
func (*CreateStudyReply) ProtoMessage() {}
func (*CreateStudyReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (*CreateStudyReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (m *CreateStudyReply) GetStudyId() string {
if m != nil {
@@ -649,7 +688,7 @@ type StopStudyRequest struct {
func (m *StopStudyRequest) Reset() { *m = StopStudyRequest{} }
func (m *StopStudyRequest) String() string { return proto.CompactTextString(m) }
func (*StopStudyRequest) ProtoMessage() {}
func (*StopStudyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (*StopStudyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
func (m *StopStudyRequest) GetStudyId() string {
if m != nil {
@@ -664,7 +703,7 @@ type StopStudyReply struct {
func (m *StopStudyReply) Reset() { *m = StopStudyReply{} }
func (m *StopStudyReply) String() string { return proto.CompactTextString(m) }
func (*StopStudyReply) ProtoMessage() {}
func (*StopStudyReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
func (*StopStudyReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
type GetStudiesRequest struct {
}
@@ -672,7 +711,7 @@ type GetStudiesRequest struct {
func (m *GetStudiesRequest) Reset() { *m = GetStudiesRequest{} }
func (m *GetStudiesRequest) String() string { return proto.CompactTextString(m) }
func (*GetStudiesRequest) ProtoMessage() {}
func (*GetStudiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
func (*GetStudiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
type StudyInfo struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
@@ -685,7 +724,7 @@ type StudyInfo struct {
func (m *StudyInfo) Reset() { *m = StudyInfo{} }
func (m *StudyInfo) String() string { return proto.CompactTextString(m) }
func (*StudyInfo) ProtoMessage() {}
func (*StudyInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
func (*StudyInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (m *StudyInfo) GetStudyId() string {
if m != nil {
@@ -729,7 +768,7 @@ type GetStudiesReply struct {
func (m *GetStudiesReply) Reset() { *m = GetStudiesReply{} }
func (m *GetStudiesReply) String() string { return proto.CompactTextString(m) }
func (*GetStudiesReply) ProtoMessage() {}
func (*GetStudiesReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (*GetStudiesReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
func (m *GetStudiesReply) GetStudyInfos() []*StudyInfo {
if m != nil {
@@ -747,7 +786,7 @@ type SuggestTrialsRequest struct {
func (m *SuggestTrialsRequest) Reset() { *m = SuggestTrialsRequest{} }
func (m *SuggestTrialsRequest) String() string { return proto.CompactTextString(m) }
func (*SuggestTrialsRequest) ProtoMessage() {}
func (*SuggestTrialsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
func (*SuggestTrialsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (m *SuggestTrialsRequest) GetStudyId() string {
if m != nil {
@@ -778,7 +817,7 @@ type SuggestTrialsReply struct {
func (m *SuggestTrialsReply) Reset() { *m = SuggestTrialsReply{} }
func (m *SuggestTrialsReply) String() string { return proto.CompactTextString(m) }
func (*SuggestTrialsReply) ProtoMessage() {}
func (*SuggestTrialsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (*SuggestTrialsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
func (m *SuggestTrialsReply) GetTrials() []*Trial {
if m != nil {
@@ -795,18 +834,26 @@ func (m *SuggestTrialsReply) GetCompleted() bool {
}
type CompleteTrialRequest struct {
WorkerId string `protobuf:"bytes,1,opt,name=worker_id,json=workerId" json:"worker_id,omitempty"`
IsComplete bool `protobuf:"varint,2,opt,name=is_complete,json=isComplete" json:"is_complete,omitempty"`
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
TrialId string `protobuf:"bytes,2,opt,name=trial_id,json=trialId" json:"trial_id,omitempty"`
IsComplete bool `protobuf:"varint,3,opt,name=is_complete,json=isComplete" json:"is_complete,omitempty"`
}
func (m *CompleteTrialRequest) Reset() { *m = CompleteTrialRequest{} }
func (m *CompleteTrialRequest) String() string { return proto.CompactTextString(m) }
func (*CompleteTrialRequest) ProtoMessage() {}
func (*CompleteTrialRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
func (*CompleteTrialRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
func (m *CompleteTrialRequest) GetWorkerId() string {
func (m *CompleteTrialRequest) GetStudyId() string {
if m != nil {
return m.WorkerId
return m.StudyId
}
return ""
}
func (m *CompleteTrialRequest) GetTrialId() string {
if m != nil {
return m.TrialId
}
return ""
}
@@ -824,56 +871,48 @@ type CompleteTrialReply struct {
func (m *CompleteTrialReply) Reset() { *m = CompleteTrialReply{} }
func (m *CompleteTrialReply) String() string { return proto.CompactTextString(m) }
func (*CompleteTrialReply) ProtoMessage() {}
func (*CompleteTrialReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
func (*CompleteTrialReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
type ShouldTrialStopRequest struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
AutostopAlgorithm string `protobuf:"bytes,2,opt,name=autostop_algorithm,json=autostopAlgorithm" json:"autostop_algorithm,omitempty"`
type EarlyStoppingRequest struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
EarlyStoppingAlgorithm string `protobuf:"bytes,2,opt,name=early_stopping_algorithm,json=earlyStoppingAlgorithm" json:"early_stopping_algorithm,omitempty"`
}
func (m *ShouldTrialStopRequest) Reset() { *m = ShouldTrialStopRequest{} }
func (m *ShouldTrialStopRequest) String() string { return proto.CompactTextString(m) }
func (*ShouldTrialStopRequest) ProtoMessage() {}
func (*ShouldTrialStopRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
func (m *EarlyStoppingRequest) Reset() { *m = EarlyStoppingRequest{} }
func (m *EarlyStoppingRequest) String() string { return proto.CompactTextString(m) }
func (*EarlyStoppingRequest) ProtoMessage() {}
func (*EarlyStoppingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (m *ShouldTrialStopRequest) GetStudyId() string {
func (m *EarlyStoppingRequest) GetStudyId() string {
if m != nil {
return m.StudyId
}
return ""
}
func (m *ShouldTrialStopRequest) GetAutostopAlgorithm() string {
func (m *EarlyStoppingRequest) GetEarlyStoppingAlgorithm() string {
if m != nil {
return m.AutostopAlgorithm
return m.EarlyStoppingAlgorithm
}
return ""
}
type ShouldTrialStopReply struct {
Trials []*Trial `protobuf:"bytes,1,rep,name=trials" json:"trials,omitempty"`
WorkerIds []string `protobuf:"bytes,2,rep,name=worker_ids,json=workerIds" json:"worker_ids,omitempty"`
type EarlyStoppingReply struct {
Trials []*Trial `protobuf:"bytes,1,rep,name=trials" json:"trials,omitempty"`
}
func (m *ShouldTrialStopReply) Reset() { *m = ShouldTrialStopReply{} }
func (m *ShouldTrialStopReply) String() string { return proto.CompactTextString(m) }
func (*ShouldTrialStopReply) ProtoMessage() {}
func (*ShouldTrialStopReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (m *EarlyStoppingReply) Reset() { *m = EarlyStoppingReply{} }
func (m *EarlyStoppingReply) String() string { return proto.CompactTextString(m) }
func (*EarlyStoppingReply) ProtoMessage() {}
func (*EarlyStoppingReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
func (m *ShouldTrialStopReply) GetTrials() []*Trial {
func (m *EarlyStoppingReply) GetTrials() []*Trial {
if m != nil {
return m.Trials
}
return nil
}
func (m *ShouldTrialStopReply) GetWorkerIds() []string {
if m != nil {
return m.WorkerIds
}
return nil
}
type GetObjectValueRequest struct {
WorkerId string `protobuf:"bytes,1,opt,name=worker_id,json=workerId" json:"worker_id,omitempty"`
}
@@ -881,7 +920,7 @@ type GetObjectValueRequest struct {
func (m *GetObjectValueRequest) Reset() { *m = GetObjectValueRequest{} }
func (m *GetObjectValueRequest) String() string { return proto.CompactTextString(m) }
func (*GetObjectValueRequest) ProtoMessage() {}
func (*GetObjectValueRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
func (*GetObjectValueRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (m *GetObjectValueRequest) GetWorkerId() string {
if m != nil {
@@ -897,7 +936,7 @@ type GetObjectValueReply struct {
func (m *GetObjectValueReply) Reset() { *m = GetObjectValueReply{} }
func (m *GetObjectValueReply) String() string { return proto.CompactTextString(m) }
func (*GetObjectValueReply) ProtoMessage() {}
func (*GetObjectValueReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (*GetObjectValueReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (m *GetObjectValueReply) GetTrials() []*Trial {
if m != nil {
@@ -915,7 +954,7 @@ type AddMeasurementToTrialsRequest struct {
func (m *AddMeasurementToTrialsRequest) Reset() { *m = AddMeasurementToTrialsRequest{} }
func (m *AddMeasurementToTrialsRequest) String() string { return proto.CompactTextString(m) }
func (*AddMeasurementToTrialsRequest) ProtoMessage() {}
func (*AddMeasurementToTrialsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (*AddMeasurementToTrialsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (m *AddMeasurementToTrialsRequest) GetStudyId() string {
if m != nil {
@@ -937,7 +976,7 @@ type AddMeasurementToTrialsReply struct {
func (m *AddMeasurementToTrialsReply) Reset() { *m = AddMeasurementToTrialsReply{} }
func (m *AddMeasurementToTrialsReply) String() string { return proto.CompactTextString(m) }
func (*AddMeasurementToTrialsReply) ProtoMessage() {}
func (*AddMeasurementToTrialsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (*AddMeasurementToTrialsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
type InitializeSuggestServiceRequest struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
@@ -950,7 +989,7 @@ func (m *InitializeSuggestServiceRequest) Reset() { *m = InitializeSugge
func (m *InitializeSuggestServiceRequest) String() string { return proto.CompactTextString(m) }
func (*InitializeSuggestServiceRequest) ProtoMessage() {}
func (*InitializeSuggestServiceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{27}
return fileDescriptor0, []int{28}
}
func (m *InitializeSuggestServiceRequest) GetStudyId() string {
@@ -987,7 +1026,7 @@ type InitializeSuggestServiceReply struct {
func (m *InitializeSuggestServiceReply) Reset() { *m = InitializeSuggestServiceReply{} }
func (m *InitializeSuggestServiceReply) String() string { return proto.CompactTextString(m) }
func (*InitializeSuggestServiceReply) ProtoMessage() {}
func (*InitializeSuggestServiceReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (*InitializeSuggestServiceReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
type GenerateTrialsRequest struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
@@ -999,7 +1038,7 @@ type GenerateTrialsRequest struct {
func (m *GenerateTrialsRequest) Reset() { *m = GenerateTrialsRequest{} }
func (m *GenerateTrialsRequest) String() string { return proto.CompactTextString(m) }
func (*GenerateTrialsRequest) ProtoMessage() {}
func (*GenerateTrialsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
func (*GenerateTrialsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (m *GenerateTrialsRequest) GetStudyId() string {
if m != nil {
@@ -1037,7 +1076,7 @@ type GenerateTrialsReply struct {
func (m *GenerateTrialsReply) Reset() { *m = GenerateTrialsReply{} }
func (m *GenerateTrialsReply) String() string { return proto.CompactTextString(m) }
func (*GenerateTrialsReply) ProtoMessage() {}
func (*GenerateTrialsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (*GenerateTrialsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (m *GenerateTrialsReply) GetTrials() []*Trial {
if m != nil {
@@ -1062,7 +1101,7 @@ type SetSuggestionParametersRequest struct {
func (m *SetSuggestionParametersRequest) Reset() { *m = SetSuggestionParametersRequest{} }
func (m *SetSuggestionParametersRequest) String() string { return proto.CompactTextString(m) }
func (*SetSuggestionParametersRequest) ProtoMessage() {}
func (*SetSuggestionParametersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (*SetSuggestionParametersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
func (m *SetSuggestionParametersRequest) GetStudyId() string {
if m != nil {
@@ -1091,7 +1130,7 @@ type SetSuggestionParametersReply struct {
func (m *SetSuggestionParametersReply) Reset() { *m = SetSuggestionParametersReply{} }
func (m *SetSuggestionParametersReply) String() string { return proto.CompactTextString(m) }
func (*SetSuggestionParametersReply) ProtoMessage() {}
func (*SetSuggestionParametersReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
func (*SetSuggestionParametersReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
type StopSuggestionRequest struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
@@ -1100,7 +1139,7 @@ type StopSuggestionRequest struct {
func (m *StopSuggestionRequest) Reset() { *m = StopSuggestionRequest{} }
func (m *StopSuggestionRequest) String() string { return proto.CompactTextString(m) }
func (*StopSuggestionRequest) ProtoMessage() {}
func (*StopSuggestionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
func (*StopSuggestionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
func (m *StopSuggestionRequest) GetStudyId() string {
if m != nil {
@@ -1115,7 +1154,73 @@ type StopSuggestionReply struct {
func (m *StopSuggestionReply) Reset() { *m = StopSuggestionReply{} }
func (m *StopSuggestionReply) String() string { return proto.CompactTextString(m) }
func (*StopSuggestionReply) ProtoMessage() {}
func (*StopSuggestionReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
func (*StopSuggestionReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
type ShouldTrialStopRequest struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
}
func (m *ShouldTrialStopRequest) Reset() { *m = ShouldTrialStopRequest{} }
func (m *ShouldTrialStopRequest) String() string { return proto.CompactTextString(m) }
func (*ShouldTrialStopRequest) ProtoMessage() {}
func (*ShouldTrialStopRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
func (m *ShouldTrialStopRequest) GetStudyId() string {
if m != nil {
return m.StudyId
}
return ""
}
type ShouldTrialStopReply struct {
Trials []*Trial `protobuf:"bytes,1,rep,name=trials" json:"trials,omitempty"`
}
func (m *ShouldTrialStopReply) Reset() { *m = ShouldTrialStopReply{} }
func (m *ShouldTrialStopReply) String() string { return proto.CompactTextString(m) }
func (*ShouldTrialStopReply) ProtoMessage() {}
func (*ShouldTrialStopReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
func (m *ShouldTrialStopReply) GetTrials() []*Trial {
if m != nil {
return m.Trials
}
return nil
}
type SetEarlyStoppingParameterRequest struct {
StudyId string `protobuf:"bytes,1,opt,name=study_id,json=studyId" json:"study_id,omitempty"`
EarlyStoppingParameters []*EarlyStoppingParameter `protobuf:"bytes,2,rep,name=early_stopping_parameters,json=earlyStoppingParameters" json:"early_stopping_parameters,omitempty"`
}
func (m *SetEarlyStoppingParameterRequest) Reset() { *m = SetEarlyStoppingParameterRequest{} }
func (m *SetEarlyStoppingParameterRequest) String() string { return proto.CompactTextString(m) }
func (*SetEarlyStoppingParameterRequest) ProtoMessage() {}
func (*SetEarlyStoppingParameterRequest) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{38}
}
func (m *SetEarlyStoppingParameterRequest) GetStudyId() string {
if m != nil {
return m.StudyId
}
return ""
}
func (m *SetEarlyStoppingParameterRequest) GetEarlyStoppingParameters() []*EarlyStoppingParameter {
if m != nil {
return m.EarlyStoppingParameters
}
return nil
}
type SetEarlyStoppingParameterReply struct {
}
func (m *SetEarlyStoppingParameterReply) Reset() { *m = SetEarlyStoppingParameterReply{} }
func (m *SetEarlyStoppingParameterReply) String() string { return proto.CompactTextString(m) }
func (*SetEarlyStoppingParameterReply) ProtoMessage() {}
func (*SetEarlyStoppingParameterReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
func init() {
proto.RegisterType((*FeasibleSpace)(nil), "api.FeasibleSpace")
@@ -1124,6 +1229,7 @@ func init() {
proto.RegisterType((*Metrics)(nil), "api.Metrics")
proto.RegisterType((*EvaluationLog)(nil), "api.EvaluationLog")
proto.RegisterType((*SuggestionParameter)(nil), "api.SuggestionParameter")
proto.RegisterType((*EarlyStoppingParameter)(nil), "api.EarlyStoppingParameter")
proto.RegisterType((*Tag)(nil), "api.Tag")
proto.RegisterType((*MountConf)(nil), "api.MountConf")
proto.RegisterType((*Trial)(nil), "api.Trial")
@@ -1140,8 +1246,8 @@ func init() {
proto.RegisterType((*SuggestTrialsReply)(nil), "api.SuggestTrialsReply")
proto.RegisterType((*CompleteTrialRequest)(nil), "api.CompleteTrialRequest")
proto.RegisterType((*CompleteTrialReply)(nil), "api.CompleteTrialReply")
proto.RegisterType((*ShouldTrialStopRequest)(nil), "api.ShouldTrialStopRequest")
proto.RegisterType((*ShouldTrialStopReply)(nil), "api.ShouldTrialStopReply")
proto.RegisterType((*EarlyStoppingRequest)(nil), "api.EarlyStoppingRequest")
proto.RegisterType((*EarlyStoppingReply)(nil), "api.EarlyStoppingReply")
proto.RegisterType((*GetObjectValueRequest)(nil), "api.GetObjectValueRequest")
proto.RegisterType((*GetObjectValueReply)(nil), "api.GetObjectValueReply")
proto.RegisterType((*AddMeasurementToTrialsRequest)(nil), "api.AddMeasurementToTrialsRequest")
@@ -1154,6 +1260,10 @@ func init() {
proto.RegisterType((*SetSuggestionParametersReply)(nil), "api.SetSuggestionParametersReply")
proto.RegisterType((*StopSuggestionRequest)(nil), "api.StopSuggestionRequest")
proto.RegisterType((*StopSuggestionReply)(nil), "api.StopSuggestionReply")
proto.RegisterType((*ShouldTrialStopRequest)(nil), "api.ShouldTrialStopRequest")
proto.RegisterType((*ShouldTrialStopReply)(nil), "api.ShouldTrialStopReply")
proto.RegisterType((*SetEarlyStoppingParameterRequest)(nil), "api.SetEarlyStoppingParameterRequest")
proto.RegisterType((*SetEarlyStoppingParameterReply)(nil), "api.SetEarlyStoppingParameterReply")
proto.RegisterEnum("api.ParameterType", ParameterType_name, ParameterType_value)
proto.RegisterEnum("api.OptimizationType", OptimizationType_name, OptimizationType_value)
proto.RegisterEnum("api.TrialState", TrialState_name, TrialState_value)
@@ -1175,7 +1285,7 @@ type ManagerClient interface {
GetStudies(ctx context.Context, in *GetStudiesRequest, opts ...grpc.CallOption) (*GetStudiesReply, error)
SuggestTrials(ctx context.Context, in *SuggestTrialsRequest, opts ...grpc.CallOption) (*SuggestTrialsReply, error)
CompleteTrial(ctx context.Context, in *CompleteTrialRequest, opts ...grpc.CallOption) (*CompleteTrialReply, error)
ShouldTrialStop(ctx context.Context, in *ShouldTrialStopRequest, opts ...grpc.CallOption) (*ShouldTrialStopReply, error)
EarlyStopping(ctx context.Context, in *EarlyStoppingRequest, opts ...grpc.CallOption) (*EarlyStoppingReply, error)
GetObjectValue(ctx context.Context, in *GetObjectValueRequest, opts ...grpc.CallOption) (*GetObjectValueReply, error)
AddMeasurementToTrials(ctx context.Context, in *AddMeasurementToTrialsRequest, opts ...grpc.CallOption) (*AddMeasurementToTrialsReply, error)
InitializeSuggestService(ctx context.Context, in *InitializeSuggestServiceRequest, opts ...grpc.CallOption) (*InitializeSuggestServiceReply, error)
@@ -1234,9 +1344,9 @@ func (c *managerClient) CompleteTrial(ctx context.Context, in *CompleteTrialRequ
return out, nil
}
func (c *managerClient) ShouldTrialStop(ctx context.Context, in *ShouldTrialStopRequest, opts ...grpc.CallOption) (*ShouldTrialStopReply, error) {
out := new(ShouldTrialStopReply)
err := grpc.Invoke(ctx, "/api.Manager/ShouldTrialStop", in, out, c.cc, opts...)
func (c *managerClient) EarlyStopping(ctx context.Context, in *EarlyStoppingRequest, opts ...grpc.CallOption) (*EarlyStoppingReply, error) {
out := new(EarlyStoppingReply)
err := grpc.Invoke(ctx, "/api.Manager/EarlyStopping", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
@@ -1278,7 +1388,7 @@ type ManagerServer interface {
GetStudies(context.Context, *GetStudiesRequest) (*GetStudiesReply, error)
SuggestTrials(context.Context, *SuggestTrialsRequest) (*SuggestTrialsReply, error)
CompleteTrial(context.Context, *CompleteTrialRequest) (*CompleteTrialReply, error)
ShouldTrialStop(context.Context, *ShouldTrialStopRequest) (*ShouldTrialStopReply, error)
EarlyStopping(context.Context, *EarlyStoppingRequest) (*EarlyStoppingReply, error)
GetObjectValue(context.Context, *GetObjectValueRequest) (*GetObjectValueReply, error)
AddMeasurementToTrials(context.Context, *AddMeasurementToTrialsRequest) (*AddMeasurementToTrialsReply, error)
InitializeSuggestService(context.Context, *InitializeSuggestServiceRequest) (*InitializeSuggestServiceReply, error)
@@ -1378,20 +1488,20 @@ func _Manager_CompleteTrial_Handler(srv interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler)
}
func _Manager_ShouldTrialStop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ShouldTrialStopRequest)
func _Manager_EarlyStopping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(EarlyStoppingRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ManagerServer).ShouldTrialStop(ctx, in)
return srv.(ManagerServer).EarlyStopping(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.Manager/ShouldTrialStop",
FullMethod: "/api.Manager/EarlyStopping",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ManagerServer).ShouldTrialStop(ctx, req.(*ShouldTrialStopRequest))
return srv.(ManagerServer).EarlyStopping(ctx, req.(*EarlyStoppingRequest))
}
return interceptor(ctx, in, info, handler)
}
@@ -1475,8 +1585,8 @@ var _Manager_serviceDesc = grpc.ServiceDesc{
Handler: _Manager_CompleteTrial_Handler,
},
{
MethodName: "ShouldTrialStop",
Handler: _Manager_ShouldTrialStop_Handler,
MethodName: "EarlyStopping",
Handler: _Manager_EarlyStopping_Handler,
},
{
MethodName: "GetObjectValue",
@@ -1625,144 +1735,218 @@ var _Suggestion_serviceDesc = grpc.ServiceDesc{
Metadata: "api.proto",
}
// Client API for AutoStopping service
// Client API for EarlyStopping service
type AutoStoppingClient interface {
type EarlyStoppingClient interface {
ShouldTrialStop(ctx context.Context, in *ShouldTrialStopRequest, opts ...grpc.CallOption) (*ShouldTrialStopReply, error)
SetEarlyStoppingParameter(ctx context.Context, in *SetEarlyStoppingParameterRequest, opts ...grpc.CallOption) (*SetEarlyStoppingParameterReply, error)
}
type autoStoppingClient struct {
type earlyStoppingClient struct {
cc *grpc.ClientConn
}
func NewAutoStoppingClient(cc *grpc.ClientConn) AutoStoppingClient {
return &autoStoppingClient{cc}
func NewEarlyStoppingClient(cc *grpc.ClientConn) EarlyStoppingClient {
return &earlyStoppingClient{cc}
}
// Server API for AutoStopping service
type AutoStoppingServer interface {
func (c *earlyStoppingClient) ShouldTrialStop(ctx context.Context, in *ShouldTrialStopRequest, opts ...grpc.CallOption) (*ShouldTrialStopReply, error) {
out := new(ShouldTrialStopReply)
err := grpc.Invoke(ctx, "/api.EarlyStopping/ShouldTrialStop", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func RegisterAutoStoppingServer(s *grpc.Server, srv AutoStoppingServer) {
s.RegisterService(&_AutoStopping_serviceDesc, srv)
func (c *earlyStoppingClient) SetEarlyStoppingParameter(ctx context.Context, in *SetEarlyStoppingParameterRequest, opts ...grpc.CallOption) (*SetEarlyStoppingParameterReply, error) {
out := new(SetEarlyStoppingParameterReply)
err := grpc.Invoke(ctx, "/api.EarlyStopping/SetEarlyStoppingParameter", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
var _AutoStopping_serviceDesc = grpc.ServiceDesc{
ServiceName: "api.AutoStopping",
HandlerType: (*AutoStoppingServer)(nil),
Methods: []grpc.MethodDesc{},
Streams: []grpc.StreamDesc{},
Metadata: "api.proto",
// Server API for EarlyStopping service
type EarlyStoppingServer interface {
ShouldTrialStop(context.Context, *ShouldTrialStopRequest) (*ShouldTrialStopReply, error)
SetEarlyStoppingParameter(context.Context, *SetEarlyStoppingParameterRequest) (*SetEarlyStoppingParameterReply, error)
}
func RegisterEarlyStoppingServer(s *grpc.Server, srv EarlyStoppingServer) {
s.RegisterService(&_EarlyStopping_serviceDesc, srv)
}
func _EarlyStopping_ShouldTrialStop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ShouldTrialStopRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(EarlyStoppingServer).ShouldTrialStop(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.EarlyStopping/ShouldTrialStop",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(EarlyStoppingServer).ShouldTrialStop(ctx, req.(*ShouldTrialStopRequest))
}
return interceptor(ctx, in, info, handler)
}
func _EarlyStopping_SetEarlyStoppingParameter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SetEarlyStoppingParameterRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(EarlyStoppingServer).SetEarlyStoppingParameter(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.EarlyStopping/SetEarlyStoppingParameter",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(EarlyStoppingServer).SetEarlyStoppingParameter(ctx, req.(*SetEarlyStoppingParameterRequest))
}
return interceptor(ctx, in, info, handler)
}
var _EarlyStopping_serviceDesc = grpc.ServiceDesc{
ServiceName: "api.EarlyStopping",
HandlerType: (*EarlyStoppingServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "ShouldTrialStop",
Handler: _EarlyStopping_ShouldTrialStop_Handler,
},
{
MethodName: "SetEarlyStoppingParameter",
Handler: _EarlyStopping_SetEarlyStoppingParameter_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "api.proto",
}
func init() { proto.RegisterFile("api.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 1696 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdb, 0x72, 0xdb, 0xc6,
0x19, 0x36, 0x48, 0x51, 0x24, 0x7f, 0x8a, 0x24, 0xb8, 0xa2, 0x6c, 0x98, 0xb6, 0x63, 0x05, 0xcd,
0x24, 0x1a, 0x75, 0x22, 0x37, 0x74, 0x3b, 0x9d, 0x74, 0xa6, 0xd3, 0x91, 0x29, 0x46, 0xc5, 0x98,
0x07, 0x0d, 0x48, 0x27, 0x4d, 0x2f, 0xca, 0x59, 0x91, 0x2b, 0x0a, 0x35, 0x08, 0xa0, 0xd8, 0x85,
0x12, 0xe5, 0x11, 0x7a, 0xd5, 0x99, 0xbe, 0x40, 0x1f, 0xa0, 0xd7, 0x7d, 0x86, 0xde, 0xf5, 0x25,
0xfa, 0x1e, 0xed, 0xec, 0xe2, 0x0c, 0x82, 0x14, 0xdb, 0xf8, 0x6e, 0xf7, 0x3f, 0xe1, 0x3f, 0x7e,
0xff, 0x92, 0x50, 0xc5, 0x8e, 0x71, 0xe6, 0xb8, 0x36, 0xb3, 0x51, 0x11, 0x3b, 0x86, 0x7a, 0x09,
0xf5, 0xaf, 0x08, 0xa6, 0xc6, 0xb5, 0x49, 0x26, 0x0e, 0x9e, 0x13, 0x24, 0x43, 0x71, 0x85, 0xbf,
0x57, 0xa4, 0x63, 0xe9, 0xa4, 0xaa, 0xf3, 0xa3, 0xa0, 0x18, 0x96, 0x52, 0x08, 0x28, 0x86, 0x85,
0x10, 0xec, 0x99, 0x06, 0x65, 0x4a, 0xf1, 0xb8, 0x78, 0x52, 0xd5, 0xc5, 0x59, 0xfd, 0x8b, 0x04,
0xcd, 0x2b, 0xec, 0xe2, 0x15, 0x61, 0xc4, 0xed, 0xd9, 0xd6, 0x8d, 0xb1, 0xe4, 0x72, 0x16, 0x5e,
0x91, 0xc0, 0x98, 0x38, 0xa3, 0x2f, 0xa1, 0xe1, 0x84, 0x62, 0x33, 0x76, 0xef, 0x10, 0x61, 0xb8,
0xd1, 0x45, 0x67, 0xdc, 0xb3, 0xc8, 0xc2, 0xf4, 0xde, 0x21, 0x7a, 0xdd, 0x49, 0x5e, 0xd1, 0x19,
0x54, 0x6e, 0x02, 0x5f, 0x95, 0xe2, 0xb1, 0x74, 0x52, 0x0b, 0x94, 0x52, 0x01, 0xe8, 0x91, 0x8c,
0xea, 0x40, 0x35, 0xb2, 0xf7, 0xa1, 0x7d, 0x69, 0x43, 0xe9, 0x0e, 0x9b, 0x9e, 0xef, 0x48, 0x55,
0xf7, 0x2f, 0xea, 0x6b, 0x28, 0x0f, 0x09, 0x73, 0x8d, 0x39, 0xcd, 0xfd, 0x5e, 0xa4, 0x54, 0x48,
0x2a, 0xbd, 0x85, 0x7a, 0x9f, 0x9f, 0x30, 0x33, 0x6c, 0x6b, 0x60, 0x8b, 0xb4, 0x31, 0x23, 0x56,
0xe5, 0x67, 0xf4, 0x29, 0x94, 0x57, 0xbe, 0x65, 0xa5, 0x70, 0x5c, 0x3c, 0xa9, 0x75, 0x0f, 0x84,
0x8f, 0xc1, 0xd7, 0xf4, 0x90, 0xa9, 0xfe, 0x06, 0x0e, 0x27, 0xde, 0x72, 0x49, 0x28, 0x37, 0xb6,
0x3d, 0xfa, 0x7c, 0x6f, 0x5e, 0x41, 0x71, 0x8a, 0x97, 0xff, 0x83, 0xc2, 0x17, 0x50, 0x1d, 0xda,
0x9e, 0xc5, 0x78, 0xcd, 0x79, 0xaf, 0x38, 0x77, 0xf3, 0xb0, 0x7b, 0x9c, 0xbb, 0x39, 0x37, 0xe4,
0x60, 0x76, 0x1b, 0xe8, 0x88, 0xb3, 0xfa, 0xd7, 0x02, 0x94, 0xa6, 0xae, 0x81, 0x4d, 0xf4, 0x14,
0x2a, 0x8c, 0x1f, 0x66, 0xc6, 0x22, 0x50, 0x2a, 0x8b, 0xbb, 0xb6, 0xe0, 0x2c, 0xca, 0xbc, 0xc5,
0x3d, 0x67, 0xf9, 0xca, 0x65, 0x71, 0xd7, 0x16, 0xe8, 0x35, 0xc4, 0xd5, 0x98, 0x51, 0xe2, 0x37,
0x62, 0xad, 0xdb, 0x48, 0x97, 0x4d, 0x3f, 0x88, 0x84, 0x26, 0x84, 0xa1, 0xcf, 0x60, 0x9f, 0x32,
0xcc, 0x3c, 0xaa, 0xec, 0x89, 0x22, 0x37, 0x85, 0xb4, 0x70, 0x63, 0xc2, 0x30, 0x23, 0x7a, 0xc0,
0x46, 0xaf, 0xa0, 0x4a, 0xee, 0xb0, 0x39, 0x33, 0xed, 0x25, 0x55, 0x4a, 0xc2, 0xb2, 0xdf, 0x10,
0xa9, 0x2a, 0xe9, 0x15, 0x2e, 0x34, 0xb0, 0x97, 0x14, 0x7d, 0x06, 0x4d, 0xfb, 0xfa, 0x8f, 0x64,
0xce, 0x8c, 0x3b, 0x32, 0xf3, 0x33, 0xb4, 0x2f, 0x1c, 0x6e, 0x44, 0xe4, 0xaf, 0x39, 0x15, 0x3d,
0x87, 0x3d, 0x86, 0x97, 0x54, 0x29, 0x0b, 0xa3, 0x15, 0xdf, 0x01, 0xbc, 0xd4, 0x05, 0x55, 0xfd,
0xd7, 0x3e, 0xd4, 0x26, 0x3c, 0xc2, 0x2d, 0xd3, 0xd3, 0x86, 0x92, 0xfd, 0x9d, 0x45, 0xdc, 0xb0,
0x04, 0xe2, 0x82, 0xde, 0x40, 0xcb, 0x76, 0x98, 0xb1, 0x32, 0x7e, 0x10, 0xde, 0xf9, 0xad, 0x5c,
0x14, 0x51, 0x1e, 0x89, 0x8f, 0x8c, 0x13, 0x5c, 0xd1, 0xcd, 0xb2, 0x9d, 0xa1, 0xa0, 0x9f, 0x66,
0x6c, 0x2c, 0x6d, 0x6c, 0x8a, 0x4c, 0x49, 0x69, 0xe1, 0x4b, 0x1b, 0x9b, 0x68, 0x04, 0xad, 0xb8,
0x00, 0x73, 0xe1, 0x2e, 0x4f, 0x15, 0x1f, 0xc9, 0x8f, 0xc5, 0x07, 0x13, 0x71, 0x9c, 0x65, 0x50,
0x81, 0xea, 0xb2, 0x93, 0xa1, 0xa0, 0xcf, 0x01, 0xe1, 0xf9, 0x9c, 0x50, 0x3a, 0x73, 0x88, 0xbb,
0x32, 0x28, 0x35, 0x6c, 0x8b, 0x2a, 0xfb, 0x02, 0x5e, 0x5a, 0x3e, 0xe7, 0x2a, 0x66, 0x70, 0x5f,
0xa9, 0xdf, 0xe4, 0x33, 0x6c, 0x2e, 0x6d, 0xd7, 0x60, 0xb7, 0x2b, 0xa5, 0x2c, 0x32, 0x22, 0x07,
0x8c, 0xf3, 0x90, 0x2e, 0x6c, 0x7b, 0xcc, 0xa6, 0xcc, 0x76, 0x12, 0xd2, 0x15, 0x21, 0xdd, 0x0a,
0x39, 0xb1, 0xf8, 0xa7, 0xd0, 0xf4, 0xdb, 0x8e, 0x61, 0xfa, 0x7e, 0x26, 0x0a, 0x50, 0x15, 0xb2,
0x75, 0x41, 0x9e, 0x62, 0xfa, 0x7e, 0xc4, 0x2b, 0x31, 0x84, 0x23, 0x1a, 0x0d, 0xda, 0x2c, 0x8a,
0x88, 0x2a, 0x20, 0x8a, 0xab, 0xf8, 0x69, 0x58, 0x1f, 0x45, 0xbd, 0x4d, 0xd7, 0x89, 0x34, 0x6a,
0x8d, 0x5a, 0x5e, 0x6b, 0xa0, 0x9f, 0x41, 0x3b, 0xd3, 0x61, 0xbe, 0x67, 0x07, 0xc2, 0x33, 0x94,
0x6e, 0x33, 0xe1, 0x9e, 0x12, 0xe3, 0x45, 0x5d, 0xa4, 0x31, 0xbc, 0xf2, 0x16, 0x32, 0x56, 0x78,
0x49, 0x94, 0x86, 0xdf, 0x42, 0xe2, 0xc2, 0xe5, 0xe7, 0xf6, 0x6a, 0x85, 0xad, 0x85, 0xd2, 0xf4,
0xe5, 0x83, 0x2b, 0x1f, 0xe9, 0xa5, 0xe3, 0x29, 0xf2, 0xb1, 0x74, 0x52, 0xd2, 0xf9, 0x11, 0x3d,
0x87, 0x2a, 0x9d, 0xdf, 0x92, 0x85, 0x67, 0x12, 0x57, 0x69, 0x09, 0x2b, 0x31, 0x01, 0x7d, 0x02,
0xa5, 0x15, 0xc7, 0x03, 0x05, 0x89, 0x7e, 0xf0, 0x87, 0x32, 0x42, 0x08, 0xdd, 0x67, 0xa2, 0x97,
0x50, 0x73, 0x3c, 0xd3, 0x9c, 0x51, 0x32, 0x77, 0x09, 0x53, 0x0e, 0x85, 0x15, 0xe0, 0xa4, 0x89,
0xa0, 0x74, 0xde, 0x80, 0x9c, 0x6d, 0x1c, 0x74, 0xc6, 0x9d, 0xf4, 0x9b, 0x4d, 0x12, 0x79, 0x6a,
0xa7, 0x27, 0xde, 0x97, 0xd3, 0x43, 0x21, 0x55, 0x03, 0xd4, 0x73, 0x09, 0x66, 0x44, 0xb4, 0xa3,
0x4e, 0xfe, 0xe4, 0x11, 0xca, 0xd0, 0x6b, 0x38, 0xf0, 0x2b, 0xec, 0x8b, 0x89, 0xf9, 0xaa, 0x75,
0xe5, 0x6c, 0xdf, 0xea, 0x35, 0x1a, 0x5f, 0xd4, 0xcf, 0x41, 0x4e, 0x99, 0x72, 0xcc, 0xfb, 0x14,
0x42, 0x49, 0x29, 0x84, 0xe2, 0xe2, 0x13, 0x66, 0x3b, 0xa9, 0xef, 0x6e, 0x11, 0x97, 0xa1, 0x91,
0x10, 0x77, 0xcc, 0x7b, 0xf5, 0x10, 0x5a, 0x97, 0x84, 0x71, 0x82, 0x41, 0x68, 0x60, 0x41, 0xfd,
0xbb, 0x04, 0x55, 0x21, 0xa3, 0x59, 0x37, 0xf6, 0x16, 0x7b, 0x11, 0x74, 0x14, 0xf2, 0xa0, 0xa3,
0x98, 0x84, 0x8e, 0x53, 0x68, 0xb9, 0x9e, 0x65, 0x19, 0xd6, 0x72, 0xe6, 0x03, 0xb1, 0xe5, 0xad,
0xc4, 0xd8, 0x97, 0xf4, 0x66, 0xc0, 0x10, 0x10, 0x39, 0xf2, 0x56, 0xe8, 0x0c, 0x0e, 0xe7, 0xf6,
0xca, 0x31, 0x09, 0x23, 0x8b, 0x84, 0x74, 0x49, 0x48, 0xb7, 0x22, 0x56, 0x28, 0xaf, 0xbe, 0x81,
0x66, 0x32, 0x06, 0x9e, 0xb2, 0x57, 0x50, 0x0b, 0x7c, 0xb6, 0x6e, 0xec, 0xb0, 0x8a, 0x8d, 0x38,
0xf5, 0x3c, 0x30, 0x1d, 0x68, 0x78, 0xa4, 0xea, 0x9f, 0x25, 0x68, 0x07, 0x53, 0x24, 0xec, 0xd2,
0x87, 0xb3, 0x99, 0x0f, 0x0f, 0x85, 0x0d, 0xf0, 0x70, 0x1a, 0xf7, 0x54, 0x71, 0x43, 0x23, 0x44,
0xfd, 0xf4, 0x35, 0xa0, 0x8c, 0x2f, 0x3c, 0x26, 0x15, 0xf6, 0x45, 0x32, 0xc2, 0x70, 0x20, 0x5e,
0x2c, 0x7a, 0xc0, 0xe1, 0x23, 0x13, 0xe5, 0x47, 0xb8, 0x52, 0xd1, 0x63, 0x82, 0x3a, 0x85, 0x76,
0x2f, 0xb8, 0xf8, 0x6a, 0x41, 0x8c, 0xcf, 0xa0, 0xfa, 0x9d, 0xed, 0xbe, 0x27, 0x6e, 0x1c, 0x64,
0xc5, 0x27, 0x68, 0x0b, 0x3e, 0x41, 0x06, 0x9d, 0x85, 0x46, 0x02, 0xa3, 0x60, 0xd0, 0xd0, 0x92,
0xda, 0x06, 0x94, 0xb1, 0xca, 0x1b, 0xeb, 0x1a, 0x1e, 0x4f, 0x6e, 0x6d, 0xcf, 0x5c, 0x04, 0x9b,
0xcf, 0x76, 0x76, 0xc8, 0x68, 0x3e, 0x86, 0x16, 0x36, 0x60, 0xa8, 0xfa, 0x2d, 0xb4, 0xd7, 0xbe,
0xb1, 0x6b, 0xa6, 0x5e, 0x00, 0x44, 0x31, 0xfb, 0x6f, 0x9d, 0xaa, 0x5e, 0x0d, 0x83, 0xa6, 0xea,
0xcf, 0xe1, 0xe8, 0x92, 0xb0, 0xb1, 0x00, 0x3c, 0x81, 0x76, 0xbb, 0xe4, 0x4a, 0xfd, 0x12, 0x0e,
0xb3, 0x5a, 0x3b, 0xfa, 0xa3, 0x4e, 0xe1, 0xc5, 0xf9, 0x62, 0x31, 0x24, 0x98, 0x7a, 0x2e, 0x59,
0x11, 0x8b, 0x4d, 0xed, 0x9d, 0x1b, 0x51, 0x49, 0x3e, 0xda, 0xa4, 0x04, 0x08, 0xab, 0x2f, 0xe0,
0xd9, 0x26, 0xab, 0xbc, 0x48, 0xff, 0x96, 0xe0, 0xa5, 0x66, 0x19, 0xcc, 0xc0, 0xa6, 0xf1, 0x03,
0x09, 0x7a, 0x6e, 0x42, 0xdc, 0x3b, 0x63, 0x4e, 0x3e, 0xf4, 0x00, 0x6c, 0x5c, 0x64, 0xc5, 0xff,
0x6b, 0x91, 0x25, 0xe6, 0x69, 0xef, 0xa1, 0x79, 0x7a, 0x09, 0x2f, 0x36, 0x47, 0xc9, 0xf3, 0xf0,
0x4f, 0x89, 0x97, 0xdb, 0x22, 0x2e, 0x0e, 0x7a, 0x78, 0x97, 0xac, 0x27, 0x3c, 0x28, 0x3c, 0xe0,
0x01, 0xfa, 0x05, 0xc8, 0x19, 0x48, 0x0b, 0xe3, 0x4e, 0xf6, 0x42, 0x33, 0x8d, 0x6d, 0x14, 0x7d,
0x01, 0x8d, 0x14, 0x6a, 0xf2, 0x58, 0xb3, 0x4a, 0xf5, 0x24, 0x7c, 0x52, 0xf5, 0x1b, 0xde, 0x82,
0xe9, 0x48, 0x3e, 0x0c, 0x78, 0xfc, 0x43, 0x82, 0x8f, 0x26, 0x84, 0xe5, 0x54, 0x68, 0x97, 0x64,
0x6d, 0xac, 0x7e, 0xe1, 0xc7, 0x56, 0xff, 0x41, 0x34, 0xfd, 0x08, 0x9e, 0x6f, 0xf4, 0x9b, 0x17,
0xbf, 0x0b, 0x47, 0x62, 0x29, 0x46, 0x02, 0x3b, 0x2c, 0xd2, 0x23, 0x38, 0xcc, 0xea, 0x38, 0xe6,
0xfd, 0xe9, 0x3b, 0xa8, 0xa7, 0x7e, 0xcd, 0x21, 0x19, 0x0e, 0xde, 0x8d, 0xde, 0x8e, 0xc6, 0xdf,
0x8c, 0x66, 0xd3, 0x6f, 0xaf, 0xfa, 0xf2, 0x23, 0x04, 0xb0, 0x7f, 0x31, 0x7e, 0xf7, 0x66, 0xd0,
0x97, 0x25, 0x54, 0x86, 0xa2, 0x36, 0x9a, 0xca, 0x05, 0x74, 0x00, 0x95, 0x0b, 0x6d, 0xd2, 0xd3,
0xfb, 0xd3, 0xbe, 0x5c, 0x44, 0x4d, 0xa8, 0xf5, 0xce, 0xa7, 0xfd, 0xcb, 0xb1, 0xae, 0xf5, 0xce,
0x07, 0xf2, 0xde, 0xe9, 0x6f, 0x41, 0xce, 0xbe, 0xac, 0x91, 0x02, 0xed, 0xd0, 0xf2, 0xf8, 0x6a,
0xaa, 0x0d, 0xb5, 0xdf, 0x9f, 0x4f, 0xb5, 0xf1, 0x48, 0x7e, 0xc4, 0x8d, 0x0d, 0xb5, 0x11, 0xa7,
0xf0, 0x6f, 0xf0, 0xdb, 0xf9, 0xef, 0xfc, 0x5b, 0xe1, 0x74, 0x00, 0x10, 0xff, 0x12, 0x41, 0x35,
0x28, 0x5f, 0xf5, 0x47, 0x17, 0xda, 0xe8, 0x52, 0x7e, 0xc4, 0x2f, 0xfa, 0xbb, 0xd1, 0x88, 0x5f,
0x24, 0x54, 0x87, 0x6a, 0x6f, 0x3c, 0xbc, 0x1a, 0xf4, 0xa7, 0xfd, 0x0b, 0xb9, 0xc0, 0x9d, 0x7e,
0xab, 0x0d, 0x06, 0xfd, 0x0b, 0xb9, 0x88, 0xaa, 0x50, 0xea, 0xeb, 0xfa, 0x58, 0x97, 0xbf, 0xef,
0xfe, 0xad, 0x04, 0xe5, 0x21, 0xb6, 0xf0, 0x92, 0xb8, 0xe8, 0xd7, 0x50, 0x4b, 0x3c, 0x5c, 0xd0,
0x13, 0x51, 0x8f, 0xf5, 0x57, 0x51, 0xe7, 0x68, 0x9d, 0xc1, 0xfb, 0xf3, 0x97, 0xfc, 0xc5, 0x11,
0xbc, 0x4c, 0xd0, 0x51, 0x50, 0xcc, 0xf4, 0xc3, 0xa6, 0x73, 0x98, 0x25, 0x73, 0xc5, 0x5f, 0x01,
0xc4, 0xcb, 0x1f, 0x3d, 0x16, 0x22, 0x6b, 0x2f, 0x9a, 0x4e, 0x7b, 0x8d, 0xce, 0x75, 0x7b, 0x50,
0x4f, 0xed, 0x59, 0xf4, 0x34, 0xd9, 0x86, 0x29, 0x20, 0xe8, 0x3c, 0xc9, 0x63, 0x05, 0x46, 0x52,
0xeb, 0x2f, 0x30, 0x92, 0xb7, 0x68, 0x03, 0x23, 0xeb, 0xdb, 0x12, 0x69, 0xd0, 0xcc, 0x6c, 0x32,
0xf4, 0xcc, 0xff, 0x60, 0xee, 0x0e, 0xed, 0x3c, 0xcd, 0x67, 0x72, 0x53, 0x5f, 0x41, 0x23, 0xbd,
0x83, 0x50, 0x27, 0x0c, 0x7e, 0x7d, 0x9d, 0x75, 0x94, 0x5c, 0x1e, 0xb7, 0xf3, 0x07, 0x78, 0x9c,
0xbf, 0x3a, 0x90, 0x2a, 0x74, 0xb6, 0x6e, 0xab, 0xce, 0xf1, 0x56, 0x19, 0x6e, 0x7f, 0x01, 0xca,
0x26, 0x50, 0x46, 0x9f, 0x08, 0xed, 0x07, 0x36, 0x53, 0x47, 0x7d, 0x40, 0xca, 0x31, 0xef, 0xbb,
0xff, 0x91, 0x00, 0xe2, 0x29, 0xf5, 0x93, 0x93, 0x44, 0xc7, 0x28, 0x39, 0x39, 0xe0, 0x1f, 0x25,
0x67, 0x1d, 0x4e, 0x31, 0x3c, 0xd9, 0x80, 0x29, 0xe8, 0x27, 0x7e, 0x69, 0xb6, 0x22, 0x65, 0xe7,
0xe3, 0xed, 0x42, 0x41, 0x1d, 0xd3, 0x10, 0x13, 0xb8, 0x9a, 0x8b, 0x55, 0x81, 0xab, 0x39, 0x98,
0xd4, 0x6d, 0xc0, 0xc1, 0xb9, 0xc7, 0x6c, 0xce, 0x72, 0x0c, 0x6b, 0x79, 0xbd, 0x2f, 0xfe, 0x95,
0x7b, 0xfd, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x88, 0xf3, 0xb7, 0x05, 0xa2, 0x13, 0x00, 0x00,
// 1802 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x6e, 0x1b, 0xc7,
0x15, 0xf6, 0x92, 0xa2, 0x48, 0x1e, 0x8a, 0xe4, 0x6a, 0x44, 0xc9, 0x2b, 0xda, 0x8e, 0x95, 0x4d,
0x9a, 0x08, 0x2a, 0x22, 0x37, 0x52, 0x8b, 0x26, 0x01, 0x8a, 0x42, 0x3f, 0x8c, 0xba, 0xb0, 0x48,
0x0a, 0x4b, 0x3a, 0x6e, 0x7b, 0x51, 0x62, 0x4c, 0x8e, 0xe9, 0xad, 0xf7, 0xaf, 0x3b, 0x43, 0x25,
0xf4, 0x23, 0xf4, 0xaa, 0x40, 0x81, 0x5e, 0xf4, 0x19, 0x7a, 0x57, 0xa0, 0x2f, 0xd0, 0x9b, 0x3e,
0x48, 0xdf, 0xa3, 0xc5, 0xcc, 0xfe, 0x2f, 0x97, 0x3f, 0x75, 0x7d, 0xb7, 0x73, 0xe6, 0x9c, 0x33,
0xe7, 0xe7, 0x3b, 0xdf, 0x0c, 0x09, 0x55, 0xec, 0x1a, 0xa7, 0xae, 0xe7, 0x30, 0x07, 0x15, 0xb1,
0x6b, 0xa8, 0x37, 0x50, 0xff, 0x96, 0x60, 0x6a, 0xbc, 0x32, 0xc9, 0xc0, 0xc5, 0x63, 0x82, 0x64,
0x28, 0x5a, 0xf8, 0x07, 0x45, 0x3a, 0x92, 0x8e, 0xab, 0x3a, 0xff, 0x14, 0x12, 0xc3, 0x56, 0x0a,
0x81, 0xc4, 0xb0, 0x11, 0x82, 0x2d, 0xd3, 0xa0, 0x4c, 0x29, 0x1e, 0x15, 0x8f, 0xab, 0xba, 0xf8,
0x56, 0xff, 0x24, 0x41, 0xf3, 0x0e, 0x7b, 0xd8, 0x22, 0x8c, 0x78, 0x57, 0x8e, 0xfd, 0xda, 0x98,
0x72, 0x3d, 0x1b, 0x5b, 0x24, 0x70, 0x26, 0xbe, 0xd1, 0xd7, 0xd0, 0x70, 0x43, 0xb5, 0x11, 0x9b,
0xbb, 0x44, 0x38, 0x6e, 0x9c, 0xa1, 0x53, 0x1e, 0x59, 0xe4, 0x61, 0x38, 0x77, 0x89, 0x5e, 0x77,
0x93, 0x4b, 0x74, 0x0a, 0x95, 0xd7, 0x41, 0xac, 0x4a, 0xf1, 0x48, 0x3a, 0xae, 0x05, 0x46, 0xa9,
0x04, 0xf4, 0x48, 0x47, 0x75, 0xa1, 0x1a, 0xf9, 0xfb, 0xd0, 0xb1, 0xb4, 0xa0, 0x74, 0x8f, 0xcd,
0x99, 0x1f, 0x48, 0x55, 0xf7, 0x17, 0xea, 0x39, 0x94, 0xbb, 0x84, 0x79, 0xc6, 0x98, 0xe6, 0x9e,
0x17, 0x19, 0x15, 0x92, 0x46, 0xcf, 0xa1, 0xde, 0xe1, 0x5f, 0x98, 0x19, 0x8e, 0x7d, 0xeb, 0x88,
0xb2, 0x31, 0x23, 0x36, 0xe5, 0xdf, 0xe8, 0x33, 0x28, 0x5b, 0xbe, 0x67, 0xa5, 0x70, 0x54, 0x3c,
0xae, 0x9d, 0xed, 0x88, 0x18, 0x83, 0xd3, 0xf4, 0x70, 0x53, 0xfd, 0x25, 0xec, 0x0d, 0x66, 0xd3,
0x29, 0xa1, 0xdc, 0xd9, 0xea, 0xec, 0xf3, 0xa3, 0xb9, 0x84, 0x83, 0x0e, 0xf6, 0xcc, 0xf9, 0x80,
0x39, 0xae, 0x6b, 0xd8, 0xd3, 0xf7, 0xf1, 0xf1, 0x0c, 0x8a, 0x43, 0x3c, 0xfd, 0x1f, 0x0c, 0xbe,
0x84, 0x6a, 0xd7, 0x99, 0xd9, 0x8c, 0xe3, 0x86, 0xe3, 0xcd, 0xbd, 0x1f, 0x87, 0x08, 0x74, 0xef,
0xc7, 0xdc, 0x91, 0x8b, 0xd9, 0x9b, 0xc0, 0x46, 0x7c, 0xab, 0x7f, 0x2e, 0x40, 0x69, 0xe8, 0x19,
0xd8, 0x44, 0x87, 0x50, 0x61, 0xfc, 0x63, 0x64, 0x4c, 0x02, 0xa3, 0xb2, 0x58, 0x6b, 0x13, 0xbe,
0x45, 0xd9, 0x6c, 0x32, 0xe7, 0x5b, 0xbe, 0x71, 0x59, 0xac, 0xb5, 0x09, 0x3a, 0x87, 0xb8, 0xa3,
0x23, 0x4a, 0x7c, 0x30, 0xd7, 0xce, 0x1a, 0xe9, 0xd6, 0xeb, 0x3b, 0x91, 0xd2, 0x80, 0x30, 0xf4,
0x39, 0x6c, 0x53, 0x86, 0xd9, 0x8c, 0x2a, 0x5b, 0x02, 0x28, 0x4d, 0xa1, 0x2d, 0xc2, 0x18, 0x30,
0xcc, 0x88, 0x1e, 0x6c, 0xa3, 0x67, 0x50, 0x25, 0xf7, 0xd8, 0x1c, 0x99, 0xce, 0x94, 0x2a, 0x25,
0xe1, 0xd9, 0x07, 0x55, 0xaa, 0xd3, 0x7a, 0x85, 0x2b, 0xdd, 0x3a, 0x53, 0x8a, 0x3e, 0x87, 0xa6,
0xf3, 0xea, 0xf7, 0x64, 0xcc, 0x8c, 0x7b, 0x32, 0xf2, 0x2b, 0xb4, 0x2d, 0x02, 0x6e, 0x44, 0xe2,
0xef, 0xb8, 0x14, 0x3d, 0x86, 0x2d, 0x86, 0xa7, 0x54, 0x29, 0x0b, 0xa7, 0x15, 0x3f, 0x00, 0x3c,
0xd5, 0x85, 0x54, 0xfd, 0x7b, 0x19, 0x6a, 0x03, 0x9e, 0xe1, 0x8a, 0x09, 0x6c, 0x41, 0xc9, 0xf9,
0xde, 0x26, 0x5e, 0xd8, 0x02, 0xb1, 0x40, 0x97, 0xb0, 0xeb, 0xb8, 0xcc, 0xb0, 0x8c, 0x77, 0x22,
0x3a, 0x7f, 0x1c, 0x8a, 0x22, 0xcb, 0x7d, 0x71, 0x48, 0x3f, 0xb1, 0x2b, 0x26, 0x42, 0x76, 0x32,
0x12, 0xf4, 0xe3, 0x8c, 0x8f, 0xa9, 0x83, 0x4d, 0x51, 0x29, 0x29, 0xad, 0x7c, 0xe3, 0x60, 0x13,
0xf5, 0x60, 0x37, 0x6e, 0xc0, 0x58, 0x84, 0xcb, 0x4b, 0xc5, 0xc7, 0xfa, 0x63, 0x71, 0x60, 0x22,
0x8f, 0xd3, 0x0c, 0xb3, 0x50, 0x5d, 0x76, 0x33, 0x12, 0xf4, 0x05, 0x20, 0x3c, 0x1e, 0x13, 0x4a,
0x47, 0x2e, 0xf1, 0x2c, 0x83, 0x52, 0xc3, 0xb1, 0xa9, 0xb2, 0x2d, 0x28, 0x6a, 0xd7, 0xdf, 0xb9,
0x8b, 0x37, 0x78, 0xac, 0xd4, 0x1f, 0x94, 0x11, 0x36, 0xa7, 0x8e, 0x67, 0xb0, 0x37, 0x96, 0x52,
0x16, 0x15, 0x91, 0x83, 0x8d, 0x8b, 0x50, 0x8e, 0xbe, 0x02, 0x85, 0xf0, 0xa1, 0x18, 0xd1, 0x60,
0x2a, 0x12, 0x36, 0x15, 0x61, 0x73, 0x40, 0x92, 0x43, 0x13, 0x5b, 0x7e, 0x06, 0x4d, 0x1f, 0x81,
0x0c, 0xd3, 0xb7, 0x23, 0xd1, 0x8b, 0xaa, 0x30, 0xa8, 0x0b, 0xf1, 0x10, 0xd3, 0xb7, 0x3d, 0xde,
0x94, 0x2e, 0xec, 0xd3, 0x68, 0x6e, 0x47, 0x51, 0x72, 0x54, 0x01, 0xd1, 0x67, 0xc5, 0xaf, 0xc8,
0xe2, 0x64, 0xeb, 0x2d, 0xba, 0x28, 0xa4, 0xe8, 0x25, 0x1c, 0x66, 0x02, 0x4e, 0xb8, 0xac, 0x09,
0x97, 0x8f, 0x7c, 0x3c, 0xe6, 0xce, 0xba, 0xfe, 0x90, 0xe4, 0xca, 0x69, 0x04, 0xbf, 0x9d, 0x3c,
0xf8, 0xa1, 0x9f, 0x40, 0x2b, 0x83, 0x62, 0x3f, 0xe5, 0xba, 0x48, 0x19, 0xa5, 0xa1, 0x2c, 0xf2,
0x56, 0x62, 0x5e, 0x6b, 0x88, 0x56, 0x85, 0x4b, 0x0e, 0x53, 0xc3, 0xc2, 0x53, 0xa2, 0x34, 0x7d,
0x98, 0x8a, 0x05, 0xd7, 0x1f, 0x3b, 0x96, 0x85, 0xed, 0x89, 0x22, 0xfb, 0xfa, 0xc1, 0x92, 0xd3,
0xc6, 0xd4, 0x9d, 0x29, 0xbb, 0x47, 0xd2, 0x71, 0x49, 0xe7, 0x9f, 0xe8, 0x31, 0x54, 0xe9, 0xf8,
0x0d, 0x99, 0xcc, 0x4c, 0xe2, 0x29, 0x48, 0x78, 0x89, 0x05, 0xe8, 0x53, 0x28, 0x59, 0x9c, 0x73,
0x94, 0x3d, 0x81, 0x39, 0x7f, 0xf0, 0x23, 0x16, 0xd2, 0xfd, 0x4d, 0xf4, 0x14, 0x6a, 0xee, 0xcc,
0x34, 0x47, 0x94, 0x8c, 0x3d, 0xc2, 0x94, 0x96, 0xf0, 0x02, 0x5c, 0x34, 0x10, 0x92, 0xf6, 0x25,
0xc8, 0x59, 0x70, 0xa2, 0x53, 0x1e, 0xa4, 0x0f, 0x68, 0x49, 0xd4, 0xa9, 0x95, 0x66, 0x15, 0x5f,
0x4f, 0x0f, 0x95, 0x54, 0x0d, 0xd0, 0x95, 0x47, 0x30, 0x23, 0x02, 0xf2, 0x3a, 0xf9, 0xc3, 0x8c,
0x50, 0x86, 0xce, 0x61, 0xc7, 0x87, 0x8e, 0xaf, 0x26, 0x66, 0xb8, 0x76, 0x26, 0x67, 0x67, 0x43,
0xaf, 0xd1, 0x78, 0xa1, 0x7e, 0x01, 0x72, 0xca, 0x95, 0x6b, 0xce, 0x53, 0x2c, 0x28, 0xa5, 0x58,
0x90, 0xab, 0xf3, 0x26, 0xa7, 0xce, 0x5d, 0xa1, 0x2e, 0x43, 0x23, 0xa1, 0xee, 0x9a, 0x73, 0x75,
0x0f, 0x76, 0x6f, 0x08, 0xe3, 0x02, 0x83, 0xd0, 0xc0, 0x83, 0xfa, 0x37, 0x09, 0xaa, 0x42, 0x47,
0xb3, 0x5f, 0x3b, 0x2b, 0xfc, 0x45, 0xf4, 0x54, 0xc8, 0xa3, 0xa7, 0x62, 0x92, 0x9e, 0x4e, 0x60,
0xd7, 0x9b, 0xd9, 0x36, 0x47, 0xb2, 0x4f, 0xf6, 0xf6, 0xcc, 0x12, 0xd4, 0x52, 0xd2, 0x9b, 0xc1,
0x86, 0xa0, 0xe1, 0xde, 0xcc, 0x42, 0xa7, 0xb0, 0x37, 0x76, 0x2c, 0xd7, 0x24, 0x8c, 0x4c, 0x12,
0xda, 0x25, 0xa1, 0xbd, 0x1b, 0x6d, 0x85, 0xfa, 0xea, 0x25, 0x34, 0x93, 0x39, 0xf0, 0x92, 0x3d,
0x83, 0x5a, 0x10, 0xb3, 0xfd, 0xda, 0x09, 0xbb, 0xd8, 0x88, 0x4b, 0xcf, 0x13, 0xd3, 0x81, 0x86,
0x9f, 0x54, 0xfd, 0xa3, 0x04, 0xad, 0x60, 0x3c, 0x85, 0x5f, 0xba, 0xbe, 0x9a, 0xf9, 0x14, 0x54,
0x58, 0x42, 0x41, 0x27, 0x31, 0xa6, 0x8a, 0x4b, 0x80, 0x10, 0xe1, 0xe9, 0x3b, 0x40, 0x99, 0x58,
0x78, 0x4e, 0x2a, 0x6c, 0x8b, 0x62, 0x84, 0xe9, 0x40, 0x7c, 0x79, 0xe9, 0xc1, 0x0e, 0x1f, 0x99,
0xa8, 0x3e, 0x22, 0x94, 0x8a, 0x1e, 0x0b, 0x54, 0x0b, 0x5a, 0x57, 0xc1, 0xc2, 0x37, 0x5b, 0x9f,
0x63, 0xf2, 0x72, 0x2e, 0xa4, 0x2f, 0xe7, 0xa7, 0x50, 0x33, 0xe8, 0x28, 0xf4, 0x2e, 0xb2, 0xaa,
0xe8, 0x60, 0xd0, 0xf0, 0x08, 0xb5, 0x05, 0x28, 0x73, 0x1c, 0x47, 0xdc, 0x5b, 0x68, 0xa5, 0x48,
0x6b, 0x83, 0x20, 0x56, 0xd1, 0x77, 0x61, 0x15, 0x7d, 0xab, 0x5f, 0x01, 0xca, 0x1c, 0xb6, 0x61,
0x25, 0xd5, 0x9f, 0xc2, 0xfe, 0x0d, 0x61, 0x7d, 0xc1, 0x78, 0x82, 0xee, 0xc2, 0x38, 0x1f, 0x41,
0xf5, 0x7b, 0xc7, 0x7b, 0x4b, 0xbc, 0x38, 0xd0, 0x8a, 0x2f, 0xd0, 0x26, 0xea, 0xd7, 0xb0, 0x97,
0xb5, 0xda, 0xf4, 0xc0, 0x21, 0x3c, 0xb9, 0x98, 0x4c, 0xba, 0x04, 0xd3, 0x99, 0x47, 0x2c, 0x62,
0xb3, 0xa1, 0xb3, 0x31, 0x12, 0x95, 0xe4, 0xeb, 0x52, 0x4a, 0xb0, 0xb0, 0xfa, 0x04, 0x1e, 0x2d,
0xf3, 0xca, 0x9b, 0xf1, 0x6f, 0x09, 0x9e, 0x6a, 0xb6, 0xc1, 0x0c, 0x6c, 0x1a, 0xef, 0x48, 0x00,
0xba, 0x01, 0xf1, 0xee, 0x8d, 0x31, 0xf9, 0xd0, 0x13, 0xb0, 0xf4, 0x8a, 0x2c, 0xbe, 0xd7, 0x15,
0x99, 0x18, 0xa8, 0xad, 0x75, 0x03, 0xf5, 0x14, 0x9e, 0x2c, 0xcf, 0x92, 0xd7, 0xe1, 0x5f, 0x12,
0x6f, 0xb7, 0x4d, 0x3c, 0x1c, 0x60, 0x75, 0x93, 0xaa, 0x27, 0x22, 0x28, 0xac, 0x89, 0x00, 0xfd,
0x0c, 0xe4, 0x0c, 0xa7, 0x85, 0x79, 0x27, 0xb1, 0xd0, 0x4c, 0x93, 0x1b, 0x45, 0x5f, 0x42, 0x23,
0x45, 0x9b, 0x3c, 0xd7, 0xac, 0x51, 0x3d, 0xc9, 0x9f, 0x54, 0x7d, 0xc9, 0x21, 0x98, 0xce, 0xe4,
0xc3, 0xb0, 0xc7, 0x3f, 0x24, 0xf8, 0x68, 0x40, 0x58, 0x4e, 0x87, 0x36, 0x29, 0xd6, 0xd2, 0xee,
0x17, 0xfe, 0xdf, 0xee, 0xaf, 0xa5, 0xd3, 0x8f, 0xe0, 0xf1, 0xd2, 0xb8, 0x79, 0xf3, 0xcf, 0x60,
0x5f, 0xdc, 0x8a, 0x91, 0xc2, 0x06, 0x37, 0xe9, 0x3e, 0xec, 0x65, 0x6d, 0xb8, 0xab, 0x73, 0x38,
0x18, 0xbc, 0x71, 0x66, 0xe6, 0x24, 0xf8, 0x4d, 0xe1, 0xb8, 0x1b, 0xf8, 0xfa, 0x06, 0x5a, 0x0b,
0x46, 0x9b, 0xb2, 0xc6, 0x5f, 0x24, 0x38, 0x1a, 0x10, 0xb6, 0xe4, 0x19, 0xb8, 0xbe, 0x2d, 0x2b,
0x1f, 0x9a, 0x85, 0xf7, 0x7f, 0x68, 0xaa, 0x47, 0x02, 0x2c, 0xcb, 0xe2, 0x72, 0xcd, 0xf9, 0xc9,
0x0b, 0xa8, 0xa7, 0x7e, 0xa2, 0x23, 0x19, 0x76, 0x5e, 0xf4, 0x9e, 0xf7, 0xfa, 0x2f, 0x7b, 0xa3,
0xe1, 0x6f, 0xee, 0x3a, 0xf2, 0x03, 0x04, 0xb0, 0x7d, 0xdd, 0x7f, 0x71, 0x79, 0xdb, 0x91, 0x25,
0x54, 0x86, 0xa2, 0xd6, 0x1b, 0xca, 0x05, 0xb4, 0x03, 0x95, 0x6b, 0x6d, 0x70, 0xa5, 0x77, 0x86,
0x1d, 0xb9, 0x88, 0x9a, 0x50, 0xbb, 0xba, 0x18, 0x76, 0x6e, 0xfa, 0xba, 0x76, 0x75, 0x71, 0x2b,
0x6f, 0x9d, 0xfc, 0x0a, 0xe4, 0xec, 0x4f, 0x1d, 0xa4, 0x40, 0x2b, 0xf4, 0xdc, 0xbf, 0x1b, 0x6a,
0x5d, 0xed, 0xb7, 0x17, 0x43, 0xad, 0xdf, 0x93, 0x1f, 0x70, 0x67, 0x5d, 0xad, 0xc7, 0x25, 0xfc,
0x0c, 0xbe, 0xba, 0xf8, 0xb5, 0xbf, 0x2a, 0x9c, 0xdc, 0x02, 0xc4, 0x3f, 0x0d, 0x51, 0x0d, 0xca,
0x77, 0x9d, 0xde, 0xb5, 0xd6, 0xbb, 0x91, 0x1f, 0xf0, 0x85, 0xfe, 0xa2, 0xd7, 0xe3, 0x0b, 0x09,
0xd5, 0xa1, 0x7a, 0xd5, 0xef, 0xde, 0xdd, 0x76, 0x86, 0x9d, 0x6b, 0xb9, 0xc0, 0x83, 0x7e, 0xae,
0xdd, 0xde, 0x76, 0xae, 0xe5, 0x22, 0xaa, 0x42, 0xa9, 0xa3, 0xeb, 0x7d, 0x5d, 0xfe, 0xe1, 0xec,
0xaf, 0x25, 0x28, 0x77, 0xb1, 0x8d, 0xa7, 0xc4, 0x43, 0xbf, 0x80, 0x5a, 0xe2, 0x95, 0x87, 0x1e,
0x8a, 0x0a, 0x2f, 0x3e, 0x21, 0xdb, 0xfb, 0x8b, 0x1b, 0x1c, 0x18, 0x3f, 0xe7, 0xcf, 0xb3, 0xe0,
0x19, 0x87, 0xf6, 0x03, 0xe0, 0xa7, 0x5f, 0x81, 0xed, 0xbd, 0xac, 0x98, 0x1b, 0x7e, 0x03, 0x10,
0xbf, 0x94, 0xd0, 0x81, 0x50, 0x59, 0x78, 0xfe, 0xb5, 0x5b, 0x0b, 0x72, 0x6e, 0x7b, 0x05, 0xf5,
0xd4, 0xa3, 0x04, 0x1d, 0x26, 0x47, 0x36, 0x45, 0x9a, 0xed, 0x87, 0x79, 0x5b, 0x81, 0x93, 0xd4,
0x93, 0x20, 0x70, 0x92, 0xf7, 0x2a, 0x09, 0x9c, 0x2c, 0xbe, 0x20, 0xb8, 0x93, 0x14, 0xae, 0x02,
0x27, 0x79, 0xaf, 0x8a, 0xc0, 0x49, 0xce, 0x1b, 0xe0, 0x5b, 0x68, 0xa4, 0x6f, 0x6a, 0xd4, 0x0e,
0xd3, 0x5e, 0xbc, 0xf4, 0xdb, 0x4a, 0xee, 0x1e, 0xf7, 0xf3, 0x3b, 0x38, 0xc8, 0xbf, 0x60, 0x91,
0x2a, 0x6c, 0x56, 0xde, 0xe9, 0xed, 0xa3, 0x95, 0x3a, 0xdc, 0xff, 0x04, 0x94, 0x65, 0x57, 0x17,
0xfa, 0x54, 0x58, 0xaf, 0xb9, 0xbf, 0xdb, 0xea, 0x1a, 0x2d, 0xd7, 0x9c, 0x9f, 0xfd, 0x47, 0x02,
0x88, 0xb9, 0xcc, 0x2f, 0x4e, 0xf2, 0x0e, 0x89, 0x8a, 0x93, 0x73, 0x45, 0x46, 0xc5, 0x59, 0xbc,
0x74, 0x30, 0x3c, 0x5c, 0xc2, 0xbc, 0xe8, 0x13, 0x1f, 0x22, 0x2b, 0xef, 0x93, 0xf6, 0xc7, 0xab,
0x95, 0x82, 0x3e, 0xa6, 0x89, 0x38, 0x08, 0x35, 0x97, 0xd1, 0x83, 0x50, 0x73, 0x98, 0xfb, 0xec,
0x9f, 0x52, 0x16, 0x55, 0x1a, 0x34, 0x33, 0xb4, 0x8c, 0x7c, 0x2a, 0xcc, 0x67, 0xf8, 0xf6, 0x61,
0xfe, 0x26, 0x0f, 0x72, 0x0a, 0x87, 0x4b, 0xc9, 0x10, 0xfd, 0x28, 0x4c, 0x72, 0x25, 0x89, 0xb7,
0x3f, 0x59, 0xa7, 0xe6, 0x9a, 0xf3, 0x57, 0xdb, 0xe2, 0xaf, 0xe1, 0xf3, 0xff, 0x06, 0x00, 0x00,
0xff, 0xff, 0x0e, 0x98, 0x7c, 0xff, 0x27, 0x16, 0x00, 0x00,
}
+43 -19
View File
@@ -8,7 +8,7 @@ service Manager {
rpc GetStudies(GetStudiesRequest) returns (GetStudiesReply);
rpc SuggestTrials(SuggestTrialsRequest) returns (SuggestTrialsReply);
rpc CompleteTrial(CompleteTrialRequest) returns (CompleteTrialReply);
rpc ShouldTrialStop(ShouldTrialStopRequest) returns (ShouldTrialStopReply);
rpc EarlyStopping(EarlyStoppingRequest) returns (EarlyStoppingReply);
rpc GetObjectValue(GetObjectValueRequest) returns (GetObjectValueReply);
rpc AddMeasurementToTrials(AddMeasurementToTrialsRequest) returns (AddMeasurementToTrialsReply);
rpc InitializeSuggestService(InitializeSuggestServiceRequest) returns(InitializeSuggestServiceReply);
@@ -20,7 +20,9 @@ service Suggestion {
rpc StopSuggestion(StopSuggestionRequest) returns (StopSuggestionReply);
}
service AutoStopping {
service EarlyStopping {
rpc ShouldTrialStop(ShouldTrialStopRequest) returns (ShouldTrialStopReply);
rpc SetEarlyStoppingParameter(SetEarlyStoppingParameterRequest) returns (SetEarlyStoppingParameterReply);
}
enum ParameterType {
@@ -84,6 +86,11 @@ message SuggestionParameter {
string value = 2;
}
message EarlyStoppingParameter {
string name = 1;
string value = 2;
}
message Tag {
string name = 1;
string value = 2;
@@ -115,18 +122,19 @@ message StudyConfig {
ParameterConfigs parameter_configs = 5;
repeated string access_permissions = 6;
string suggest_algorithm = 7;
string autostop_algorithm = 8;
string early_stopping_algorithm = 8;
string study_task_name = 9;
repeated SuggestionParameter suggestion_parameters =10;
repeated Tag tags = 11;
string objective_value_name = 12;
repeated string metrics = 13;
string image = 14;
repeated string command = 15;
int32 gpu = 16;
string scheduler = 17;
MountConf mount = 18;
string pull_secret = 19;
repeated SuggestionParameter suggestion_parameters = 10;
repeated EarlyStoppingParameter early_stopping_parameters= 11;
repeated Tag tags = 12;
string objective_value_name = 13;
repeated string metrics = 14;
string image = 15;
repeated string command = 16;
int32 gpu = 17;
string scheduler = 18;
MountConf mount = 19;
string pull_secret = 20;
//string log_collector = 10; // XXX
}
@@ -172,21 +180,21 @@ message SuggestTrialsReply {
}
message CompleteTrialRequest {
string worker_id = 1;
bool is_complete = 2;
string study_id = 1;
string trial_id = 2;
bool is_complete = 3;
}
message CompleteTrialReply {
}
message ShouldTrialStopRequest {
message EarlyStoppingRequest {
string study_id = 1;
string autostop_algorithm = 2;
string early_stopping_algorithm = 2;
}
message ShouldTrialStopReply {
message EarlyStoppingReply {
repeated Trial trials = 1;
repeated string worker_ids = 2;
}
message GetObjectValueRequest {
@@ -243,3 +251,19 @@ message StopSuggestionRequest {
message StopSuggestionReply {
}
message ShouldTrialStopRequest {
string study_id = 1;
}
message ShouldTrialStopReply {
repeated Trial trials = 1;
}
message SetEarlyStoppingParameterRequest {
string study_id = 1;
repeated EarlyStoppingParameter early_stopping_parameters =2;
}
message SetEarlyStoppingParameterReply {
}
+1
View File
@@ -6,6 +6,7 @@ docker build -t ${PREFIX}vizier-core -f manager/Dockerfile .
docker build -t ${PREFIX}suggestion-random -f suggestion/random/Dockerfile .
docker build -t ${PREFIX}suggestion-grid -f suggestion/grid/Dockerfile .
docker build -t ${PREFIX}suggestion-hyperband -f suggestion/hyperband/Dockerfile .
docker build -t ${PREFIX}earlystopping-medianstopping -f earlystopping/medianstopping/Dockerfile .
docker build -t ${PREFIX}dlk-manager -f dlk/Dockerfile .
docker build -t ${PREFIX}katib-frontend -f manager/modeldb/Dockerfile .
docker build -t ${PREFIX}katib-cli -f cli/Dockerfile .
+2 -1
View File
@@ -14,9 +14,10 @@ func (d *db_conn) DB_Init() {
"optimization_goal DOUBLE, " +
"parameter_configs TEXT, " +
"suggest_algo VARCHAR(255), " +
"autostop_algo VARCHAR(255), " +
"early_stop_algo VARCHAR(255), " +
"study_task_name VARCHAR(255), " +
"suggestion_parameters TEXT, " +
"early_stopping_parameters TEXT, " +
"tags TEXT, " +
"objective_value_name VARCHAR(255), " +
"metrics TEXT, " +
+13 -4
View File
@@ -98,7 +98,7 @@ func (d *db_conn) GetStudyConfig(id string) (*api.StudyConfig, error) {
row := d.db.QueryRow("SELECT * FROM studies WHERE id = ?", id)
study := new(api.StudyConfig)
var dummy_id, configs, suggestion_parameters, tags, metrics, command, mconf string
var dummy_id, configs, suggestion_parameters, early_stopping_parameters, tags, metrics, command, mconf string
err := row.Scan(&dummy_id,
&study.Name,
&study.Owner,
@@ -106,9 +106,10 @@ func (d *db_conn) GetStudyConfig(id string) (*api.StudyConfig, error) {
&study.OptimizationGoal,
&configs,
&study.SuggestAlgorithm,
&study.AutostopAlgorithm,
&study.EarlyStoppingAlgorithm,
&study.StudyTaskName,
&suggestion_parameters,
&early_stopping_parameters,
&tags,
&study.ObjectiveValueName,
&metrics,
@@ -204,6 +205,13 @@ func (d *db_conn) CreateStudy(in *api.StudyConfig) (string, error) {
log.Printf("Error marshalling %v: %v", elem, err)
}
}
earlystopping_parameters := make([]string, len(in.EarlyStoppingParameters))
for i, elem := range in.EarlyStoppingParameters {
earlystopping_parameters[i], err = (&jsonpb.Marshaler{}).MarshalToString(elem)
if err != nil {
log.Printf("Error marshalling %v: %v", elem, err)
}
}
var mconf string = ""
if in.Mount != nil {
mconf, err = (&jsonpb.Marshaler{}).MarshalToString(in.Mount)
@@ -236,7 +244,7 @@ func (d *db_conn) CreateStudy(in *api.StudyConfig) (string, error) {
for true {
study_id = generate_randid()
_, err := d.db.Exec(
"INSERT INTO studies VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
"INSERT INTO studies VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
study_id,
in.Name,
in.Owner,
@@ -244,9 +252,10 @@ func (d *db_conn) CreateStudy(in *api.StudyConfig) (string, error) {
in.OptimizationGoal,
configs,
in.SuggestAlgorithm,
in.AutostopAlgorithm,
in.EarlyStoppingAlgorithm,
in.StudyTaskName,
strings.Join(suggestion_parameters, ",\n"),
strings.Join(earlystopping_parameters, ",\n"),
strings.Join(tags, ",\n"),
in.ObjectiveValueName,
strings.Join(in.Metrics, ",\n"),
+22 -2
View File
@@ -56,8 +56,28 @@ func TestGetStudyConfig(t *testing.T) {
}
// mock.ExpectExec("SELECT * FROM studies WHERE id").WithArgs(id).WillReturnRows(sqlmock.NewRows())
mock.ExpectQuery("SELECT").WillReturnRows(
sqlmock.NewRows([]string{"id", "name", "owner", "optimization_type", "optimization_goal", "parameter_configs", "suggest_algo", "autostop_algo", "study_task_name", "suggestion_parameters", "tags", "objective_value_name", "metrics", "image", "command", "gpu", "scheduler", "mount", "pull_secret"}).
AddRow("abc", "test", "admin", 1, 0.99, "{}", "random", "test", "", "", "", "", "", "", "", 1, "", "", ""))
sqlmock.NewRows([]string{"id",
"name",
"owner",
"optimization_type",
"optimization_goal",
"parameter_configs",
"suggest_algo",
"early_stop_algo",
"study_task_name",
"suggestion_parameters",
"early_stopping_parameters",
"tags",
"objective_value_name",
"metrics",
"image",
"command",
"gpu",
"scheduler",
"mount",
"pull_secret",
}).
AddRow("abc", "test", "admin", 1, 0.99, "{}", "random", "test", "", "", "", "", "", "", "", "", 1, "", "", ""))
study, err := db_interface.GetStudyConfig(id)
if err != nil {
t.Errorf("GetStudyConfig failed: %v", err)
-67
View File
@@ -1,67 +0,0 @@
package earlystopping
import (
// "fmt"
"github.com/kubeflow/hp-tuning/api"
"sort"
// "strconv"
)
type EarlyStoppingService interface {
ShouldStoppingTrial(runningTrials []*api.Trial, completedTrials []*api.Trial, leastStep int) []api.Trial
}
type MedianStoppingRule struct{}
func NewMedianStoppingRule() *MedianStoppingRule {
m := &MedianStoppingRule{}
return m
}
func (m *MedianStoppingRule) getMedianRunningAverage(completedTrials []api.Trial, step int) float64 {
r := []float64{}
for _, ct := range completedTrials {
if ct.Status == api.TrialState_COMPLETED {
// var ra float64
// for s := 0; s < step; s++ {
// p, _ := strconv.ParseFloat(ct.EvalLogs[s].Value, 64)
// ra += p
// }
// ra = ra / float64(len(ct.EvalLogs))
// r = append(r, ra)
// var p float64
// if len(ct.EvalLogs) < step {
// p, _ = strconv.ParseFloat(ct.EvalLogs[len(ct.EvalLogs)-1].Value, 64)
// } else {
// p, _ = strconv.ParseFloat(ct.EvalLogs[step-1].Value, 64)
// }
// r = append(r, p)
}
}
if len(r) == 0 {
return 0
} else {
sort.Float64s(r)
return r[len(r)/2]
}
}
func (m *MedianStoppingRule) ShouldStoppingTrial(runningTrials []api.Trial, completedTrials []api.Trial, leastStep int) []api.Trial {
s_t := []api.Trial{}
for _, t := range runningTrials {
if t.Status != api.TrialState_RUNNING {
continue
}
s := len(t.EvalLogs)
if s < leastStep {
continue
}
//om := m.getMedianRunningAverage(completedTrials, s)
// v, _ := strconv.ParseFloat(t.EvalLogs[s-1].Value, 64)
// fmt.Printf("Trial %v, Current value %v Median value in step %v %v\n", t.TrialId, v, s, om)
// if v < (om - 0.03) {
// s_t = append(s_t, t)
// }
}
return s_t
}
+198
View File
@@ -0,0 +1,198 @@
package earlystopping
import (
"context"
"errors"
"github.com/kubeflow/hp-tuning/api"
vdb "github.com/kubeflow/hp-tuning/db"
"log"
"sort"
"strconv"
)
const (
defaultLeastStep = 20
defaultMargin = 0
defaultBurnIn = 0
)
type MedianStoppingParam struct {
LeastStep int
Margin float64
EvalMetric string
BurnIn int
}
type MedianStoppingRule struct {
confList map[string]*MedianStoppingParam
dbIf vdb.VizierDBInterface
}
func NewMedianStoppingRule() *MedianStoppingRule {
m := &MedianStoppingRule{}
m.confList = make(map[string]*MedianStoppingParam)
m.dbIf = vdb.New()
return m
}
func (m *MedianStoppingRule) SetEarlyStoppingParameter(ctx context.Context, in *api.SetEarlyStoppingParameterRequest) (*api.SetEarlyStoppingParameterReply, error) {
sc, err := m.dbIf.GetStudyConfig(in.StudyId)
if err != nil {
return &api.SetEarlyStoppingParameterReply{}, err
}
p := &MedianStoppingParam{LeastStep: defaultLeastStep, Margin: defaultMargin, EvalMetric: sc.ObjectiveValueName, BurnIn: defaultBurnIn}
for _, ep := range in.EarlyStoppingParameters {
switch ep.Name {
case "LeastStep":
l, err := strconv.Atoi(ep.Value)
if err != nil {
log.Printf("Fail to puerse parameter %s : %s", ep.Name, ep.Value)
} else {
p.LeastStep = l
}
case "EvalMargin":
mar, err := strconv.ParseFloat(ep.Value, 64)
if err != nil {
log.Printf("Fail to puerse parameter %s : %s", ep.Name, ep.Value)
} else {
p.Margin = mar
}
case "EvalMetrics":
p.EvalMetric = ep.Value
case "BurnInPeriod":
b, err := strconv.Atoi(ep.Value)
if err != nil {
log.Printf("Fail to puerse parameter %s : %s", ep.Name, ep.Value)
} else {
p.BurnIn = b
}
default:
log.Printf("Unknown EarlyStopping Parameter %v", ep.Name)
}
}
m.confList[in.StudyId] = p
log.Printf("Parameter for Study %s : LeastStep %d, Margin %v, EvalMetric %s, BurnInPeriod %d", in.StudyId, p.LeastStep, p.Margin, p.EvalMetric, p.BurnIn)
return &api.SetEarlyStoppingParameterReply{}, nil
}
func (m *MedianStoppingRule) getMedianRunningAverage(completedTrialslogs [][]*vdb.TrialLog, step int, burnin int) float64 {
r := []float64{}
var ra float64
for _, ctl := range completedTrialslogs {
ra = 0
var st int
var errParce bool = false
if step > len(ctl) {
st = len(ctl)
} else {
st = step
}
for s := burnin; s < st; s++ {
v, err := strconv.ParseFloat(ctl[s].Value, 64)
if err != nil {
log.Printf("Fail to Parse %s : %s", ctl[s].Name, ctl[s].Value)
errParce = true
break
}
ra += v
}
if errParce {
continue
}
ra = ra / float64(st)
r = append(r, ra)
}
if len(r) == 0 {
return 0
} else {
sort.Float64s(r)
return r[len(r)/2]
}
}
func (m *MedianStoppingRule) getBestValue(sid string, sc *api.StudyConfig, logs []*vdb.TrialLog) (float64, error) {
if len(logs) == 0 {
return 0, errors.New("Evaluation Log is missing")
}
ot := sc.OptimizationType
if ot != api.OptimizationType_MAXIMIZE && ot != api.OptimizationType_MINIMIZE {
return 0, errors.New("OptimizationType Unknown.")
}
var ret float64
var target_objlog []float64
for _, l := range logs {
v, err := strconv.ParseFloat(l.Value, 64)
if err != nil {
log.Printf("Fail to Parse %s : %s", l.Name, l.Value)
continue
}
target_objlog = append(target_objlog, v)
}
if len(target_objlog) == 0 {
return 0, errors.New("No Objective value log in Logs")
}
sort.Float64s(target_objlog)
if ot == api.OptimizationType_MAXIMIZE {
ret = target_objlog[len(target_objlog)-1]
} else if ot == api.OptimizationType_MINIMIZE {
ret = target_objlog[0]
}
return ret, nil
}
func (m *MedianStoppingRule) ShouldTrialStop(ctx context.Context, in *api.ShouldTrialStopRequest) (*api.ShouldTrialStopReply, error) {
if _, ok := m.confList[in.StudyId]; !ok {
return &api.ShouldTrialStopReply{}, errors.New("EarlyStopping config is not set.")
}
tl, err := m.dbIf.GetTrialList(in.StudyId)
if err != nil {
return &api.ShouldTrialStopReply{}, err
}
sc, err := m.dbIf.GetStudyConfig(in.StudyId)
if err != nil {
return &api.ShouldTrialStopReply{}, err
}
rtl := []*api.Trial{}
ctl := make([][]*vdb.TrialLog, 0, len(tl))
s_t := []*api.Trial{}
for _, t := range tl {
switch t.Status {
case api.TrialState_RUNNING:
rtl = append(rtl, t)
case api.TrialState_COMPLETED:
tl, err := m.dbIf.GetTrialLogs(t.TrialId, &vdb.GetTrialLogOpts{Name: m.confList[in.StudyId].EvalMetric})
if err != nil {
log.Printf("Fail to get trial %v logs", t.TrialId)
continue
}
if len(tl) > m.confList[in.StudyId].BurnIn {
ctl = append(ctl, tl)
}
default:
}
}
if len(ctl) == 0 {
return &api.ShouldTrialStopReply{}, nil
}
for _, t := range rtl {
tl, err := m.dbIf.GetTrialLogs(t.TrialId, &vdb.GetTrialLogOpts{Name: m.confList[in.StudyId].EvalMetric})
if err != nil {
log.Printf("Fail to get trial %v logs", t.TrialId)
continue
}
if len(tl) < m.confList[in.StudyId].LeastStep || len(tl) <= m.confList[in.StudyId].BurnIn {
continue
}
v, err := m.getBestValue(in.StudyId, sc, tl)
if err != nil {
log.Printf("Fail to Get Best Value at %s: %v Log:%v", t.TrialId, err, tl)
continue
}
om := m.getMedianRunningAverage(ctl, len(tl), m.confList[in.StudyId].BurnIn)
log.Printf("Trial %s, In step %d Current value: %v Median value: %v\n", t.TrialId, len(tl), v, om)
if (v < (om-m.confList[in.StudyId].Margin) && sc.OptimizationType == api.OptimizationType_MAXIMIZE) || v > (om+m.confList[in.StudyId].Margin) && sc.OptimizationType == api.OptimizationType_MINIMIZE {
log.Print("Trial %s shuold be stopped", t.TrialId)
s_t = append(s_t, t)
}
}
return &api.ShouldTrialStopReply{Trials: s_t}, nil
}
+10
View File
@@ -0,0 +1,10 @@
FROM golang:alpine AS build-env
# The GOPATH in the image is /go.
ADD . /go/src/github.com/kubeflow/hp-tuning
WORKDIR /go/src/github.com/kubeflow/hp-tuning/earlystopping/medianstopping
RUN go build -o medianstopping
FROM alpine:3.7
WORKDIR /app
COPY --from=build-env /go/src/github.com/kubeflow/hp-tuning/earlystopping/medianstopping /app/
ENTRYPOINT ["./medianstopping"]
+27
View File
@@ -0,0 +1,27 @@
package main
import (
"log"
"net"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
pb "github.com/kubeflow/hp-tuning/api"
"github.com/kubeflow/hp-tuning/earlystopping"
)
func main() {
listener, err := net.Listen("tcp", earlystopping.DefaultPort)
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
size := 1<<31 - 1
s := grpc.NewServer(grpc.MaxRecvMsgSize(size), grpc.MaxSendMsgSize(size))
pb.RegisterEarlyStoppingServer(s, earlystopping.NewMedianStoppingRule())
reflection.Register(s)
log.Printf("Median Stopping Rule EarlyStopping Service\n")
if err = s.Serve(listener); err != nil {
log.Fatalf("Failed to serve: %v", err)
}
}
+18
View File
@@ -0,0 +1,18 @@
package earlystopping
import (
"context"
"github.com/kubeflow/hp-tuning/api"
)
const (
// DefaultPort is the port to serve the earlystopping service.
DefaultPort = "0.0.0.0:6789"
)
// EarlyStoppingService is the interface for earlystopping service.
type EarlyStoppingService interface {
ShouldTrialStop(ctx context.Context, in *api.ShouldTrialStopRequest) (*api.ShouldTrialStopReply, error)
SetEarlyStoppingParameter(ctx context.Context, in *api.SetEarlyStoppingParameterRequest) (*api.SetEarlyStoppingParameterReply, error)
}
+77 -6
View File
@@ -9,6 +9,7 @@ import (
"log"
"net"
"os"
"strconv"
"time"
"github.com/kubeflow/hp-tuning/manager/worker_interface"
@@ -32,8 +33,9 @@ import (
)
const (
k8s_namespace = "katib"
port = "0.0.0.0:6789"
k8s_namespace = "katib"
port = "0.0.0.0:6789"
defaultEarlyStopInterval = 60
)
var init_db = flag.Bool("init", false, "Initialize DB")
@@ -93,6 +95,20 @@ func (s *server) trialIteration(conf *pb.StudyConfig, study_id string, sCh study
defer delete(s.StudyChList, study_id)
defer s.wIF.CleanWorkers(study_id)
tm := time.NewTimer(1 * time.Second)
ei := 0
var err error
for _, ec := range conf.EarlyStoppingParameters {
if ec.Name == "CheckInterval" {
ei, err = strconv.Atoi(ec.Value)
if err != nil {
ei = 0
}
}
}
if ei == 0 {
ei = defaultEarlyStopInterval
}
estm := time.NewTimer(time.Duration(ei) * time.Second)
log.Printf("Study %v start.", study_id)
log.Printf("Study conf %v", conf)
for {
@@ -137,6 +153,18 @@ func (s *server) trialIteration(conf *pb.StudyConfig, study_id string, sCh study
}
tm.Reset(1 * time.Second)
}
case <-estm.C:
ret, err := s.EarlyStopping(context.Background(), &pb.EarlyStoppingRequest{StudyId: study_id, EarlyStoppingAlgorithm: conf.EarlyStoppingAlgorithm})
if err != nil {
log.Printf("Early Stopping Error: %v", err)
} else {
if len(ret.Trials) > 0 {
for _, t := range ret.Trials {
s.CompleteTrial(context.Background(), &pb.CompleteTrialRequest{StudyId: study_id, TrialId: t.TrialId, IsComplete: false})
}
}
}
estm.Reset(time.Duration(ei) * time.Second)
case <-sCh.stopCh:
log.Printf("Study %v is stopped.", study_id)
for _, t := range s.wIF.GetRunningTrials(study_id) {
@@ -151,6 +179,10 @@ func (s *server) trialIteration(conf *pb.StudyConfig, study_id string, sCh study
}
func (s *server) CreateStudy(ctx context.Context, in *pb.CreateStudyRequest) (*pb.CreateStudyReply, error) {
if in == nil || in.StudyConfig == nil {
return &pb.CreateStudyReply{}, errors.New("StudyConfig is missing.")
}
if in.StudyConfig.ObjectiveValueName == "" {
return &pb.CreateStudyReply{}, errors.New("Objective_Value_Name is required.")
}
@@ -172,6 +204,25 @@ func (s *server) CreateStudy(ctx context.Context, in *pb.CreateStudyRequest) (*p
} else {
log.Printf("Suggestion Algorithm is not set.")
}
if in.StudyConfig.EarlyStoppingAlgorithm != "" && in.StudyConfig.EarlyStoppingAlgorithm != "none" {
conn, err := grpc.Dial("vizier-earlystopping-"+in.StudyConfig.EarlyStoppingAlgorithm+":6789", grpc.WithInsecure())
if err != nil {
return &pb.CreateStudyReply{}, err
}
defer conn.Close()
c := pb.NewEarlyStoppingClient(conn)
_, err = c.SetEarlyStoppingParameter(
context.Background(),
&pb.SetEarlyStoppingParameterRequest{
StudyId: study_id,
EarlyStoppingParameters: in.StudyConfig.EarlyStoppingParameters,
},
)
if err != nil {
return &pb.CreateStudyReply{}, err
}
}
sCh := studyCh{stopCh: make(chan bool), addMetricsCh: make(chan string)}
go s.trialIteration(in.StudyConfig, study_id, sCh)
s.StudyChList[study_id] = sCh
@@ -280,12 +331,32 @@ func (s *server) SuggestTrials(ctx context.Context, in *pb.SuggestTrialsRequest)
return &pb.SuggestTrialsReply{Trials: r.Trials, Completed: r.Completed}, nil
}
func (s *server) CompleteTrial(context.Context, *pb.CompleteTrialRequest) (*pb.CompleteTrialReply, error) {
return nil, errors.New("not implemented")
func (s *server) CompleteTrial(ctx context.Context, in *pb.CompleteTrialRequest) (*pb.CompleteTrialReply, error) {
err := s.wIF.CompleteTrial(in.StudyId, in.TrialId, in.IsComplete)
return &pb.CompleteTrialReply{}, err
}
func (s *server) ShouldTrialStop(context.Context, *pb.ShouldTrialStopRequest) (*pb.ShouldTrialStopReply, error) {
return nil, errors.New("not implemented")
func (s *server) EarlyStopping(ctx context.Context, in *pb.EarlyStoppingRequest) (*pb.EarlyStoppingReply, error) {
if in.EarlyStoppingAlgorithm == "" || in.EarlyStoppingAlgorithm == "none" {
return &pb.EarlyStoppingReply{}, nil
}
conn, err := grpc.Dial("vizier-earlystopping-"+in.EarlyStoppingAlgorithm+":6789", grpc.WithInsecure())
if err != nil {
return &pb.EarlyStoppingReply{}, err
}
defer conn.Close()
c := pb.NewEarlyStoppingClient(conn)
req := &pb.ShouldTrialStopRequest{StudyId: in.StudyId}
r, err := c.ShouldTrialStop(context.Background(), req)
if err != nil {
return &pb.EarlyStoppingReply{}, err
}
// TODO: do async
return &pb.EarlyStoppingReply{Trials: r.Trials}, nil
}
func (s *server) GetObjectValue(context.Context, *pb.GetObjectValueRequest) (*pb.GetObjectValueReply, error) {
return nil, errors.New("not implemented")
}
@@ -10,7 +10,6 @@ import (
k8syaml "k8s.io/apimachinery/pkg/util/yaml"
"k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
// "log"
)
func initk8sCl() (*kubernetes.Clientset, error) {
@@ -52,7 +51,6 @@ func SpawnTensorBoard(sid string, tid string, namespace string, mount *api.Mount
k8syaml.NewYAMLOrJSONDecoder(bytes.NewReader(tFile), BUFSIZE).Decode(&svc)
tname := "tensorboard-" + sid + "-" + tid
dep.ObjectMeta.Name = tname
dep.ObjectMeta.Labels["TrialID"] = tid
dep.ObjectMeta.Labels["StudyID"] = sid
+35
View File
@@ -311,3 +311,38 @@ func (d *DlkWorkerInterface) CleanWorkers(studyId string) error {
}
return nil
}
func (d *DlkWorkerInterface) CompleteTrial(studyId string, tID string, iscomplete bool) error {
url := fmt.Sprintf("%s/learningTasks/%s/", d.dlkmanager, d.namespace)
d.mux.Lock()
defer d.mux.Unlock()
if iscomplete {
log.Printf("Trial %s completed", tID)
} else {
log.Printf("Trial %s has been killed", tID)
}
req, err := http.NewRequest("DELETE", url+tID, nil)
if err != nil {
log.Printf("failed to create DELETE request: %s\n", err)
return err
}
//send REST API Request
_, err = http.DefaultClient.Do(req)
if err != nil {
fmt.Println(err.Error())
return err
}
for i, t := range d.RunningTrialList[studyId] {
if t.TrialId == tID {
d.RunningTrialList[studyId] = append(d.RunningTrialList[studyId][:i], d.RunningTrialList[studyId][i+1:]...)
if iscomplete {
t.Status = api.TrialState_COMPLETED
d.dbIf.UpdateTrial(t.TrialId, api.TrialState_COMPLETED)
} else {
t.Status = api.TrialState_KILLED
d.dbIf.UpdateTrial(t.TrialId, api.TrialState_KILLED)
}
d.CompletedTrialList[studyId] = append(d.CompletedTrialList[studyId], t)
}
}
return nil
}
@@ -101,23 +101,23 @@ func (d *KubernetesWorkerInterface) PollingShouldStop(ess earlystopping.EarlySto
select {
case <-tm.C:
tm.Reset(60 * time.Second)
d.mux.Lock()
st := ess.ShouldStoppingTrial(d.RunningTrialList[studyId], d.CompletedTrialList[studyId], 10)
jcl := d.clientset.BatchV1().Jobs(apiv1.NamespaceDefault)
pcl := d.clientset.CoreV1().Pods(apiv1.NamespaceDefault)
for _, t := range st {
jcl.Delete(t.TrialId, &metav1.DeleteOptions{})
pl, _ := pcl.List(metav1.ListOptions{LabelSelector: "job-name=" + t.TrialId})
pcl.Delete(pl.Items[0].ObjectMeta.Name, &metav1.DeleteOptions{})
log.Printf("Trial %v is Killed.", t.TrialId)
for i := range d.RunningTrialList[studyId] {
if d.RunningTrialList[studyId][i].TrialId == t.TrialId {
d.RunningTrialList[studyId][i].Status = api.TrialState_KILLED
break
}
}
}
d.mux.Unlock()
// d.mux.Lock()
// st := ess.ShouldTrialStop(d.RunningTrialList[studyId], d.CompletedTrialList[studyId], 10)
// jcl := d.clientset.BatchV1().Jobs(apiv1.NamespaceDefault)
// pcl := d.clientset.CoreV1().Pods(apiv1.NamespaceDefault)
// for _, t := range st {
// jcl.Delete(t.TrialId, &metav1.DeleteOptions{})
// pl, _ := pcl.List(metav1.ListOptions{LabelSelector: "job-name=" + t.TrialId})
// pcl.Delete(pl.Items[0].ObjectMeta.Name, &metav1.DeleteOptions{})
// log.Printf("Trial %v is Killed.", t.TrialId)
// for i := range d.RunningTrialList[studyId] {
// if d.RunningTrialList[studyId][i].TrialId == t.TrialId {
// d.RunningTrialList[studyId][i].Status = api.TrialState_KILLED
// break
// }
// }
// }
// d.mux.Unlock()
case <-stop:
return
}
@@ -252,3 +252,11 @@ func (d *KubernetesWorkerInterface) CleanWorkers(studyId string) error {
delete(d.CompletedTrialList, studyId)
return nil
}
func (d *KubernetesWorkerInterface) CompleteTrial(studyId string, tID string, iscomplete bool) error {
jcl := d.clientset.BatchV1().Jobs(apiv1.NamespaceDefault)
pcl := d.clientset.CoreV1().Pods(apiv1.NamespaceDefault)
jcl.Delete(tID, &metav1.DeleteOptions{})
pl, _ := pcl.List(metav1.ListOptions{LabelSelector: "job-name=" + tID})
pcl.Delete(pl.Items[0].ObjectMeta.Name, &metav1.DeleteOptions{})
return nil
}
@@ -482,3 +482,13 @@ func (n *NvDockerWorkerInterface) CleanWorkers(studyId string) error {
delete(n.RunningTrialList, studyId)
return nil
}
func (n *NvDockerWorkerInterface) CompleteTrial(studyId string, tID string, iscomplete bool) error {
cid := n.tidToCid[tID]
err := n.dcli.ContainerRemove(context.Background(), cid, types.ContainerRemoveOptions{Force: true})
if err != nil {
return err
}
delete(n.tidToCid, tID)
n.ngm.ReleaseGPU(tID)
return nil
}
@@ -17,6 +17,7 @@ type WorkerInterface interface {
GetRunningTrials(studyId string) []*api.Trial
GetCompletedTrials(studyId string) []*api.Trial
CleanWorkers(studyId string) error
CompleteTrial(studyId string, tID string, iscomplete bool) error
}
// Those functions can go after EvalLog transition to DB is complete.
@@ -0,0 +1,30 @@
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: vizier-earlystopping-medianstopping
namespace: katib
labels:
app: vizier
component: earlystopping-medianstopping
spec:
replicas: 1
template:
metadata:
name: vizier-earlystopping-medianstopping
labels:
app: vizier
component: earlystopping-medianstopping
spec:
containers:
- name: vizier-earlystopping-medianstopping
image: katib/earlystopping-medianstopping
ports:
- name: api
containerPort: 6789
# resources:
# requests:
# cpu: 500m
# memory: 500M
# limits:
# cpu: 500m
# memory: 500M
@@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
name: vizier-earlystopping-medianstopping
namespace: katib
labels:
app: vizier
component: earlystopping-medianstopping
spec:
type: ClusterIP
ports:
- port: 6789
protocol: TCP
name: api
selector:
app: vizier
component: earlystopping-medianstopping
+3
View File
@@ -39,6 +39,7 @@ go build -o bin/dlkmanager github.com/kubeflow/hp-tuning//dlk/dlkmanager
go build -o bin/katib-suggestion-grid github.com/kubeflow/hp-tuning/suggestion/grid
go build -o bin/katib-suggestion-hyperband github.com/kubeflow/hp-tuning/suggestion/hyperband
go build -o bin/katib-suggestion-random github.com/kubeflow/hp-tuning/suggestion/random
go build -o bin/katib-earlystopping-medianstopping github.com/kubeflow/hp-tuning/earlystopping/medianstopping
go build -o bin/katib github.com/kubeflow/hp-tuning/cli
#echo "building container in gcloud"
#gcloud version
@@ -51,6 +52,8 @@ cp suggestion/grid/Dockerfile .
gcloud container builds submit . --tag=${REGISTRY}/${REPO_NAME}/suggestion-grid:${VERSION} --project=${PROJECT}
cp suggestion/hyperband/Dockerfile .
gcloud container builds submit . --tag=${REGISTRY}/${REPO_NAME}/suggestion-hyperband:${VERSION} --project=${PROJECT}
cp earlystopping/medianstopping/Dockerfile .
gcloud container builds submit . --tag=${REGISTRY}/${REPO_NAME}/earlystopping-medianstopping:${VERSION} --project=${PROJECT}
cp dlk/Dockerfile .
gcloud container builds submit . --tag=${REGISTRY}/${REPO_NAME}/dlk-manager:${VERSION} --project=${PROJECT}
cp manager/modeldb//Dockerfile .
+1
View File
@@ -46,6 +46,7 @@ sed -i -e "s@image: katib\/vizier-core@image: ${REGISTRY}\/${REPO_NAME}\/vizier-
sed -i -e "s@image: katib\/suggestion-random@image: ${REGISTRY}\/${REPO_NAME}\/suggestion-random:${VERSION}@" manifests/vizier/suggestion/random/deployment.yaml
sed -i -e "s@image: katib\/suggestion-grid@image: ${REGISTRY}\/${REPO_NAME}\/suggestion-grid:${VERSION}@" manifests/vizier/suggestion/grid/deployment.yaml
sed -i -e "s@image: katib\/suggestion-hyperband@image: ${REGISTRY}\/${REPO_NAME}\/suggestion-hyperband:${VERSION}@" manifests/vizier/suggestion/hyperband/deployment.yaml
sed -i -e "s@image: katib\/earlystopping-medianstopping@image: ${REGISTRY}\/${REPO_NAME}\/earlystopping-medianstopping:${VERSION}@" manifests/vizier/earlystopping/medianstopping/deployment.yaml
sed -i -e "s@image: katib\/dlk-manager@image: ${REGISTRY}\/${REPO_NAME}\/dlk-manager:${VERSION}@" manifests/dlk/deployment.yaml
sed -i -e "s@image: katib\/katib-frontend@image: ${REGISTRY}\/${REPO_NAME}\/katib-frontend:${VERSION}@" manifests/modeldb/frontend/deployment.yaml
cd ${GO_DIR}