1
0
mirror of https://github.com/newnius/YAO-scheduler.git synced 2025-12-12 23:36:44 +00:00
This commit is contained in:
2020-05-02 20:55:46 +08:00
parent d726c0b850
commit f167cdea32
2 changed files with 100 additions and 2 deletions

View File

@@ -4,6 +4,9 @@ import (
log "github.com/sirupsen/logrus"
"sync"
"strings"
"io/ioutil"
"strconv"
"encoding/json"
)
type Optimizer struct {
@@ -97,6 +100,11 @@ func (optimizer *Optimizer) feed(job string, utils []UtilGPUTimeSeries) {
predict.Main = 0
}
predict.Version++
optimizer.feedData(jobName, predict.Version, 0, 0, 0, predict.Total)
if predict.Version%10 == 0 && predict.Version > 30 {
optimizer.train(jobName)
}
}
}()
}
@@ -116,8 +124,20 @@ func (optimizer *Optimizer) predictTime(job string) (*OptimizerJobExecutionTime,
str := strings.Split(job, "-")
if len(str) == 2 {
jobName := str[0]
if _, ok := optimizer.predicts[jobName]; ok {
return optimizer.predicts[jobName], optimizer.predicts[jobName].Version >= 5
if est, ok := optimizer.cache[jobName]; ok {
return est, true
}
if est, ok := optimizer.predicts[jobName]; ok {
if est.Version > 40 {
if est2, ok := optimizer.predict(jobName, est.Version); ok {
est2.Pre = est.Pre * est2.Total / est.Total
est2.Main = est.Main * est2.Total / est.Total
est2.Post = est.Post * est2.Total / est.Total
optimizer.cache[jobName] = &est2
return &est2, true
}
}
return est, est.Version >= 5
}
}
return &OptimizerJobExecutionTime{}, false
@@ -130,3 +150,72 @@ func (optimizer *Optimizer) getAllPredicts() map[string]*OptimizerJobExecutionTi
func (optimizer *Optimizer) getAllGPUUtils() map[string]*OptimizerUtilGPU {
return optimizer.jobUtilsGPU
}
func (optimizer *Optimizer) feedData(job string, seq int, pre int, main int, post int, total int) {
spider := Spider{}
spider.Method = "GET"
params := "job=" + job + "&seq=" + strconv.Itoa(seq) + "&value=" + strconv.Itoa(total)
spider.URL = "http://yao-optimizer:8080/feed?" + params
err := spider.do()
if err != nil {
return
}
resp := spider.getResponse()
if _, err := ioutil.ReadAll(resp.Body); err != nil {
log.Warn(err)
}
resp.Body.Close()
if err != nil {
return
}
}
func (optimizer *Optimizer) train(job string) {
spider := Spider{}
spider.Method = "GET"
params := "job=" + job
spider.URL = "http://yao-optimizer:8080/train?" + params
err := spider.do()
if err != nil {
return
}
resp := spider.getResponse()
if _, err := ioutil.ReadAll(resp.Body); err != nil {
log.Warn(err)
}
resp.Body.Close()
if err != nil {
return
}
}
func (optimizer *Optimizer) predict(job string, seq int) (OptimizerJobExecutionTime, bool) {
spider := Spider{}
spider.Method = "GET"
params := "job=" + job + "&seq=" + strconv.Itoa(seq)
spider.URL = "http://yao-optimizer:8080/predict?" + params
err := spider.do()
if err != nil {
return OptimizerJobExecutionTime{}, false
}
resp := spider.getResponse()
body, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
log.Warn(err)
return OptimizerJobExecutionTime{}, false
}
var res MsgOptimizerPredict
err = json.Unmarshal([]byte(string(body)), &res)
if err != nil {
return OptimizerJobExecutionTime{Total: res.Total, Pre: res.Pre, Main: res.Main, Post: res.Post}, true
}
return OptimizerJobExecutionTime{}, false
}

View File

@@ -186,6 +186,15 @@ type OptimizerUtilGPU struct {
Version int `json:"version"`
}
type MsgOptimizerPredict struct {
Code int `json:"code"`
Error string `json:"error"`
Total int `json:"total"`
Pre int `json:"pre"`
Main int `json:"main"`
Post int `json:"post"`
}
func str2int(str string, defaultValue int) int {
i, err := strconv.Atoi(str)
if err == nil {