Skip to content

Commit ceaf41d

Browse files
committed
Support Sobol's quasirandom sequence
1 parent c36ac54 commit ceaf41d

File tree

9 files changed

+84
-1
lines changed

9 files changed

+84
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ to know more about each algorithm.
143143
- [Hyperband](https://arxiv.org/pdf/1603.06560.pdf)
144144
- [Bayesian Optimization](https://arxiv.org/pdf/1012.2599.pdf)
145145
- [Covariance Matrix Adaptation Evolution Strategy (CMA-ES)](https://arxiv.org/abs/1604.00772)
146+
- [Sobol's Quasirandom Sequence](https://dl.acm.org/doi/10.1145/641876.641879)
146147

147148
#### Neural Architecture Search
148149

docs/proposals/suggestion.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ Table of Contents
2121
* [BOHB](#bohb)
2222
* [TPE](#tpe)
2323
* [SMAC](#smac)
24+
* [CMA-ES](#cma-es)
25+
* [Sobol](#sobol)
2426

2527
Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)
2628

@@ -395,3 +397,7 @@ We can use [SMAC3](https://github.com/automl/SMAC3) to run SMAC.
395397
### CMA-ES
396398
397399
We can use [goptuna](https://github.com/c-bata/goptuna) to run CMA-ES.
400+
401+
### Sobol
402+
403+
We can use [goptuna](https://github.com/c-bata/goptuna) to run Sobol.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
apiVersion: "kubeflow.org/v1beta1"
2+
kind: Experiment
3+
metadata:
4+
namespace: kubeflow
5+
name: sobol-example
6+
spec:
7+
objective:
8+
type: maximize
9+
goal: 0.99
10+
objectiveMetricName: Validation-accuracy
11+
additionalMetricNames:
12+
- Train-accuracy
13+
algorithm:
14+
algorithmName: sobol
15+
parallelTrialCount: 3
16+
maxTrialCount: 12
17+
maxFailedTrialCount: 3
18+
parameters:
19+
- name: lr
20+
parameterType: double
21+
feasibleSpace:
22+
min: "0.01"
23+
max: "0.03"
24+
- name: num-layers
25+
parameterType: int
26+
feasibleSpace:
27+
min: "2"
28+
max: "5"
29+
- name: optimizer
30+
parameterType: categorical
31+
feasibleSpace:
32+
list:
33+
- sgd
34+
- adam
35+
- ftrl
36+
trialTemplate:
37+
primaryContainerName: training-container
38+
trialParameters:
39+
- name: learningRate
40+
description: Learning rate for the training model
41+
reference: lr
42+
- name: numberLayers
43+
description: Number of training model layers
44+
reference: num-layers
45+
- name: optimizer
46+
description: Training model optimizer (sdg, adam or ftrl)
47+
reference: optimizer
48+
trialSpec:
49+
apiVersion: batch/v1
50+
kind: Job
51+
spec:
52+
template:
53+
spec:
54+
containers:
55+
- name: training-container
56+
image: docker.io/kubeflowkatib/mxnet-mnist:v1beta1-45c5727
57+
command:
58+
- "python3"
59+
- "/opt/mxnet-mnist/mnist.py"
60+
- "--batch-size=64"
61+
- "--lr=${trialParameters.learningRate}"
62+
- "--num-layers=${trialParameters.numberLayers}"
63+
- "--optimizer=${trialParameters.optimizer}"
64+
restartPolicy: Never

manifests/v1beta1/components/controller/katib-config.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ data:
4141
"cmaes": {
4242
"image": "docker.io/kubeflowkatib/suggestion-goptuna:latest"
4343
},
44+
"sobol": {
45+
"image": "docker.io/kubeflowkatib/suggestion-goptuna:latest"
46+
},
4447
"enas": {
4548
"image": "docker.io/kubeflowkatib/suggestion-enas:latest",
4649
"resources": {

pkg/new-ui/v1beta1/frontend/src/app/constants/algorithms-settings.const.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ export const CMAESSettings: AlgorithmSetting[] = [
9797
},
9898
];
9999

100+
export const SOBOLSettings: AlgorithmSetting[] = [];
101+
100102
export const ENASSettings: AlgorithmSetting[] = [
101103
{
102104
name: 'controller_hidden_size',
@@ -248,6 +250,7 @@ export const AlgorithmSettingsMap: { [key: string]: AlgorithmSetting[] } = {
248250
[AlgorithmsEnum.BAYESIAN_OPTIMIZATION]: BayesianOptimizationSettings,
249251
[AlgorithmsEnum.TPE]: TPESettings,
250252
[AlgorithmsEnum.CMAES]: CMAESSettings,
253+
[AlgorithmsEnum.SOBOL]: SOBOLSettings,
251254
[AlgorithmsEnum.ENAS]: ENASSettings,
252255
[AlgorithmsEnum.DARTS]: DartsSettings,
253256
};

pkg/new-ui/v1beta1/frontend/src/app/constants/algorithms-types.const.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const AlgorithmNames = {
1010
[AlgorithmsEnum.BAYESIAN_OPTIMIZATION]: 'Bayesian Optimization',
1111
[AlgorithmsEnum.TPE]: 'Tree of Parzen Estimators',
1212
[AlgorithmsEnum.CMAES]: 'Covariance Matrix Adaptation: Evolution Strategy',
13+
[AlgorithmsEnum.SOBOL]: 'Sobol Quasirandom Sequence',
1314
};
1415

1516
export const NasAlgorithmNames = {

pkg/new-ui/v1beta1/frontend/src/app/enumerations/algorithms.enum.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export enum AlgorithmsEnum {
55
BAYESIAN_OPTIMIZATION = 'bayesianoptimization',
66
TPE = 'tpe',
77
CMAES = 'cmaes',
8+
SOBOL = 'sobol',
89
ENAS = 'enas',
910
DARTS = 'darts',
1011
}

pkg/suggestion/v1beta1/goptuna/converter.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323

2424
"github.com/c-bata/goptuna"
2525
"github.com/c-bata/goptuna/cmaes"
26+
"github.com/c-bata/goptuna/sobol"
2627
"github.com/c-bata/goptuna/tpe"
2728
api_v1_beta1 "github.com/kubeflow/katib/pkg/apis/manager/v1beta1"
2829
)
@@ -89,6 +90,8 @@ func toGoptunaSampler(algorithm *api_v1_beta1.AlgorithmSpec) (goptuna.Sampler, g
8990
}
9091
}
9192
return tpe.NewSampler(opts...), nil, nil
93+
} else if name == AlgorithmSobol {
94+
return nil, sobol.NewSampler(), nil
9295
} else {
9396
opts := make([]goptuna.RandomSamplerOption, 0, len(algorithm.GetAlgorithmSettings()))
9497
for _, s := range algorithm.GetAlgorithmSettings() {

pkg/suggestion/v1beta1/goptuna/service.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const (
3131
AlgorithmCMAES = "cmaes"
3232
AlgorithmTPE = "tpe"
3333
AlgorithmRandom = "random"
34+
AlgorithmSobol = "sobol"
3435

3536
defaultStudyName = "Katib"
3637
)
@@ -178,7 +179,7 @@ func (s *SuggestionService) ValidateAlgorithmSettings(
178179
}
179180

180181
algorithmName := req.GetExperiment().GetSpec().GetAlgorithm().GetAlgorithmName()
181-
if algorithmName != AlgorithmRandom && algorithmName != AlgorithmCMAES && algorithmName != AlgorithmTPE {
182+
if algorithmName != AlgorithmRandom && algorithmName != AlgorithmCMAES && algorithmName != AlgorithmTPE && algorithmName != AlgorithmSobol {
182183
return nil, status.Error(codes.InvalidArgument, "unsupported algorithm")
183184
}
184185

0 commit comments

Comments
 (0)