Skip to content

Commit 0614452

Browse files
committed
o Add code to detect repeated random/grid parameters before evaluation in parallel
1 parent 6743c3f commit 0614452

File tree

5 files changed

+25
-27
lines changed

5 files changed

+25
-27
lines changed

workflows/rnd_or_grid/python/determineParameters.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import sys, json, os
22
import random
3+
import itertools
34

45
# ===== Definitions =========================================================
56
def expand(Vs, fr, to, soFar):
67
soFarNew = []
78
for s in soFar:
8-
print Vs[fr]
99
if (Vs[fr] == None):
1010
print ("ERROR: The order of json inputs and values must be preserved")
1111
sys.exit(1)
@@ -22,7 +22,8 @@ def expand(Vs, fr, to, soFar):
2222
def generate_random(values, n_samples, benchmarkName):
2323
# select '#samples' random numbers between the range provided in settings.json file
2424
result = ""
25-
for s in range(samples[0]):
25+
param_listed = []
26+
for s in range(n_samples):
2627
if(benchmarkName=="p1b1"):
2728
# values = {1:epochs, 2: batch_size, 3: N1, 4: NE}
2829
t_epoch= random.randint(values[1][0], values[1][1])
@@ -61,9 +62,9 @@ def generate_random(values, n_samples, benchmarkName):
6162
print('ERROR: Tried all possible benchmarks, Invalid benchmark name or json file')
6263
sys.exit(1)
6364
# Populate the result string for writing sweep-parameters file
64-
if(s < (samples[0]-1)):
65-
result+=":"
66-
return result
65+
param_listed += [str(result)]
66+
result=""
67+
return (param_listed)
6768

6869
# ===== Main program ========================================================
6970
if (len(sys.argv) < 3):
@@ -75,6 +76,7 @@ def generate_random(values, n_samples, benchmarkName):
7576
benchmarkName = sys.argv[3]
7677
searchType = sys.argv[4]
7778

79+
## Read in the variables from json file
7880
#Trying to open the settings file
7981
print("Reading settings: %s" % settingsFilename)
8082
try:
@@ -85,7 +87,6 @@ def generate_random(values, n_samples, benchmarkName):
8587
print("PWD is: '%s'" % os.getcwd())
8688
sys.exit(1)
8789

88-
# Read in the variables from json file
8990
# Register new variables for any benchmark here
9091
#Common variables
9192
epochs = settings.get('parameters').get('epochs')
@@ -108,41 +109,47 @@ def generate_random(values, n_samples, benchmarkName):
108109
# For random scheme determine number of samples
109110
samples = settings.get('samples', {}).get('num', None)
110111

112+
## Done reading from file
111113

112114
# Make values for computing grid sweep parameters
113115
values = {}
114116
if(benchmarkName=="p1b1"):
115117
values = {1:epochs, 2: batch_size, 3: N1, 4: NE}
116-
print values
117118
elif(benchmarkName=="p1b3"):
118119
values = {1:epochs, 2: batch_size, 3: test_cell_split, 4: drop}
119-
print values
120120
elif(benchmarkName=="nt3"):
121121
values = {1:epochs, 2: batch_size, 3: classes}
122-
print values
123122
elif(benchmarkName=="p2b1"):
124123
values = {1:epochs, 2: batch_size, 3: molecular_epochs, 4: weight_decay}
125-
print values
126124
elif(benchmarkName=="p3b1"):
127125
values = {1:epochs, 2: batch_size, 3: shared_nnet_spec, 4: n_fold}
128-
print values
129126
else:
130127
print('ERROR: Tried all possible benchmarks, Invalid benchmark name or json file')
131128
sys.exit(1)
132129

130+
# this (result) is : seperated string with all params
133131
result = {}
132+
# Determine parameter space based of search type
134133
if(searchType == "grid"):
135134
results = expand(values, 1, len(values), [''])
136-
result = ':'.join(results)
137135
elif(searchType =="random"):
138136
if(samples == None):
139137
print ("ERROR: Provide number of samples in json file")
140138
sys.exit(1)
141-
result = generate_random(values, samples, benchmarkName)
139+
# result, results = generate_random(values, samples, benchmarkName)
140+
results = generate_random(values, samples[0], benchmarkName)
142141
else:
143142
print ("ERROR: Invalid search type, specify either - grid or random")
144143
sys.exit(1)
145144

145+
counter=0
146+
for a, b in itertools.combinations(results, 2):
147+
if(a == b):
148+
print ("Warning: skipping -identical parameters found", counter)
149+
results.remove(a)
150+
151+
#These are final : seperated parameters for evaluation
152+
result = ':'.join(results)
146153

147154
with open(paramsFilename, 'w') as the_file:
148155
the_file.write(result)

workflows/rnd_or_grid/python/evaluateOne.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
benchmarkName = sys.argv[3]
1313

1414
integs = [float(x) for x in parameterString.split(',')]
15-
print (integs)
1615

1716
if (benchmarkName == "p1b1"):
1817
import p1b1_runner

workflows/rnd_or_grid/python/test/test_runners.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,29 +22,27 @@ def main():
2222
print("DONE##########P1B1#####")
2323

2424

25-
#2 # p1b3 - works too big
25+
#2 # p1b3 - works too big for desktop
2626
print("STARTING#####P1B3##########")
27-
# p1b3_validation_loss = p1b3_runner.run(hyper_parameter_map)
27+
p1b3_validation_loss = p1b3_runner.run(hyper_parameter_map)
2828
print("DONE######P1B3#########")
2929

3030
#3 # p2b1 - works
3131
print("STARTING#####P2B1##########")
32-
# p2b1_validation_loss = p2b1_runner.run(hyper_parameter_map)
32+
p2b1_validation_loss = p2b1_runner.run(hyper_parameter_map)
3333
print("DONE#####P2B1##########")
3434

3535
#4 # p3b1 - fails - ValueError: invalid literal for int() with base 10: '1200;1200'
3636
print("STARTING#####P3B1##########")
37-
# p3b1_validation_loss = p3b1_runner.run(hyper_parameter_map)
37+
p3b1_validation_loss = p3b1_runner.run(hyper_parameter_map)
3838
print("DONE#####P3B1##########")
3939

40-
#5 # NT3 - works - too big
40+
#5 # NT3 - works - too big
4141
print("STARTING#####NT3##########")
4242
hyper_parameter_map['model_name'] = 'nt3'
4343
nt3tc1_validation_losss = nt3_tc1_runner.run(hyper_parameter_map)
4444
print("DONE#####NT3##########")
4545

46-
47-
4846
# # print("Validation Loss: ", p1b1_validation_loss)
4947
if __name__ == '__main__':
5048
main()
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
#!/bin/bash
2-
echo $APP_HOME
32
python $APP_HOME/../python/determineParameters.py $1 $2 $3 $4

workflows/rnd_or_grid/swift/rnd_or_grid.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,12 @@ parameters = split(parametersString, ":");
5252
foreach param in parameters
5353
{
5454
string rName = turbine_output+"/result-"+param+".txt";
55-
printf(rName);
5655
file resultFile<rName> = evaluateOne(param, benchmark);
5756
results[param] = string2float(read(resultFile));
5857
}
5958

6059
// Compute stats of this array of results
6160
// Write directly to a file with write
6261
file tmp = write(repr(results));
63-
64-
// Find the name of a file with filename
65-
//trace("Temporary filename is: " + filename(tmp));
66-
6762
computeStats(filename(tmp));
6863

0 commit comments

Comments
 (0)