mirror of
https://github.com/newnius/YAO-scheduler.git
synced 2025-12-15 08:16:43 +00:00
update
This commit is contained in:
@@ -4,6 +4,9 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"sync"
|
"sync"
|
||||||
"strings"
|
"strings"
|
||||||
|
"io/ioutil"
|
||||||
|
"strconv"
|
||||||
|
"encoding/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Optimizer struct {
|
type Optimizer struct {
|
||||||
@@ -97,6 +100,11 @@ func (optimizer *Optimizer) feed(job string, utils []UtilGPUTimeSeries) {
|
|||||||
predict.Main = 0
|
predict.Main = 0
|
||||||
}
|
}
|
||||||
predict.Version++
|
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, "-")
|
str := strings.Split(job, "-")
|
||||||
if len(str) == 2 {
|
if len(str) == 2 {
|
||||||
jobName := str[0]
|
jobName := str[0]
|
||||||
if _, ok := optimizer.predicts[jobName]; ok {
|
if est, ok := optimizer.cache[jobName]; ok {
|
||||||
return optimizer.predicts[jobName], optimizer.predicts[jobName].Version >= 5
|
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
|
return &OptimizerJobExecutionTime{}, false
|
||||||
@@ -130,3 +150,72 @@ func (optimizer *Optimizer) getAllPredicts() map[string]*OptimizerJobExecutionTi
|
|||||||
func (optimizer *Optimizer) getAllGPUUtils() map[string]*OptimizerUtilGPU {
|
func (optimizer *Optimizer) getAllGPUUtils() map[string]*OptimizerUtilGPU {
|
||||||
return optimizer.jobUtilsGPU
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -186,6 +186,15 @@ type OptimizerUtilGPU struct {
|
|||||||
Version int `json:"version"`
|
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 {
|
func str2int(str string, defaultValue int) int {
|
||||||
i, err := strconv.Atoi(str)
|
i, err := strconv.Atoi(str)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user