@@ -76,11 +76,11 @@ func getExtraParams() map[string]string {
76
76
return map [string ]string {
77
77
"user" : * USER ,
78
78
"password" : * PASSWORD ,
79
- "version" : "3 " ,
79
+ "version" : "4 " ,
80
80
}
81
81
}
82
82
83
- func uploadGame (httpClient * http.Client , path string , pgn string , nextGame client.NextGameResponse ) error {
83
+ func uploadGame (httpClient * http.Client , path string , pgn string , nextGame client.NextGameResponse , retryCount uint ) error {
84
84
extraParams := getExtraParams ()
85
85
extraParams ["training_id" ] = strconv .Itoa (int (nextGame .TrainingId ))
86
86
extraParams ["network_id" ] = strconv .Itoa (int (nextGame .NetworkId ))
@@ -96,13 +96,33 @@ func uploadGame(httpClient *http.Client, path string, pgn string, nextGame clien
96
96
body := & bytes.Buffer {}
97
97
_ , err = body .ReadFrom (resp .Body )
98
98
if err != nil {
99
+ log .Print (err )
100
+ log .Print ("Error uploading, retrying..." )
101
+ time .Sleep (time .Second * (2 << retryCount ))
102
+ err = uploadGame (httpClient , path , pgn , nextGame , retryCount + 1 )
99
103
return err
100
104
}
101
105
resp .Body .Close ()
102
106
fmt .Println (resp .StatusCode )
103
107
fmt .Println (resp .Header )
104
108
fmt .Println (body )
105
109
110
+ train_dir := filepath .Dir (path )
111
+ if _ , err := os .Stat (train_dir ); err == nil {
112
+ files , err := ioutil .ReadDir (train_dir )
113
+ if err != nil {
114
+ log .Fatal (err )
115
+ }
116
+ fmt .Printf ("Cleanup training files:\n " )
117
+ for _ , f := range files {
118
+ fmt .Printf ("%s/%s\n " , train_dir , f .Name ())
119
+ }
120
+ err = os .RemoveAll (train_dir )
121
+ if err != nil {
122
+ log .Fatal (err )
123
+ }
124
+ }
125
+
106
126
return nil
107
127
}
108
128
@@ -252,36 +272,21 @@ func playMatch(baselinePath string, candidatePath string, params []string, flip
252
272
return result , game .String (), nil
253
273
}
254
274
255
- func train (networkPath string , params []string ) (string , string ) {
275
+ func train (networkPath string , count int , params []string ) (string , string ) {
256
276
// pid is intended for use in multi-threaded training
257
277
pid := os .Getpid ()
258
278
259
279
dir , _ := os .Getwd ()
260
- train_dir := path .Join (dir , fmt .Sprintf ("data-%v" , pid ))
261
- if _ , err := os .Stat (train_dir ); err == nil {
262
- files , err := ioutil .ReadDir (train_dir )
263
- if err != nil {
264
- log .Fatal (err )
265
- }
266
- fmt .Printf ("Cleanup training files:\n " )
267
- for _ , f := range files {
268
- fmt .Printf ("%s/%s\n " , train_dir , f .Name ())
269
- }
270
- err = os .RemoveAll (train_dir )
271
- if err != nil {
272
- log .Fatal (err )
273
- }
274
- }
275
-
280
+ train_dir := path .Join (dir , fmt .Sprintf ("data-%v-%v" , pid , count ))
276
281
if * DEBUG {
277
282
logs_dir := path .Join (dir , fmt .Sprintf ("logs-%v" , pid ))
278
283
os .MkdirAll (logs_dir , os .ModePerm )
279
284
logfile := path .Join (logs_dir , fmt .Sprintf ("%s.log" , time .Now ().Format ("20060102150405" )))
280
- params = append (params , "-l" + logfile )
285
+ params = append (params , "-l" + logfile )
281
286
}
282
287
283
288
num_games := 1
284
- train_cmd := fmt .Sprintf ("--start=train %v %v" , pid , num_games )
289
+ train_cmd := fmt .Sprintf ("--start=train %v-%v %v" , pid , count , num_games )
285
290
params = append (params , train_cmd )
286
291
287
292
c := CmdWrapper {}
@@ -319,7 +324,7 @@ func getNetwork(httpClient *http.Client, sha string, clearOld bool) (string, err
319
324
return path , nil
320
325
}
321
326
322
- func nextGame (httpClient * http.Client ) error {
327
+ func nextGame (httpClient * http.Client , count int ) error {
323
328
nextGame , err := client .NextGame (httpClient , * HOSTNAME , getExtraParams ())
324
329
if err != nil {
325
330
return err
@@ -343,15 +348,15 @@ func nextGame(httpClient *http.Client) error {
343
348
if err != nil {
344
349
return err
345
350
}
346
- client .UploadMatchResult (httpClient , * HOSTNAME , nextGame .MatchGameId , result , pgn , getExtraParams ())
351
+ go client .UploadMatchResult (httpClient , * HOSTNAME , nextGame .MatchGameId , result , pgn , getExtraParams ())
347
352
return nil
348
353
} else if nextGame .Type == "train" {
349
354
networkPath , err := getNetwork (httpClient , nextGame .Sha , true )
350
355
if err != nil {
351
356
return err
352
357
}
353
- trainFile , pgn := train (networkPath , params )
354
- uploadGame (httpClient , trainFile , pgn , nextGame )
358
+ trainFile , pgn := train (networkPath , count , params )
359
+ go uploadGame (httpClient , trainFile , pgn , nextGame , 0 )
355
360
return nil
356
361
}
357
362
@@ -373,13 +378,16 @@ func main() {
373
378
}
374
379
375
380
httpClient := & http.Client {}
376
- for {
377
- err := nextGame (httpClient )
381
+ start := time .Now ()
382
+ for i := 0 ; ; i ++ {
383
+ err := nextGame (httpClient , i )
378
384
if err != nil {
379
385
log .Print (err )
380
386
log .Print ("Sleeping for 30 seconds..." )
381
387
time .Sleep (30 * time .Second )
382
388
continue
383
389
}
390
+ elapsed := time .Since (start )
391
+ log .Printf ("Completed %d games in %s time" , i , elapsed )
384
392
}
385
393
}
0 commit comments