Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
A-Tune
提交
38bf68c7
A
A-Tune
项目概览
openeuler
/
A-Tune
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
A-Tune
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
38bf68c7
编写于
1月 10, 2020
作者:
H
hanxinke
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
atune:support multiple evaluation values in the tuning command
上级
92738db8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
68 addition
and
47 deletion
+68
-47
common/config/config.go
common/config/config.go
+1
-0
common/project/projet.go
common/project/projet.go
+5
-6
common/tuning/optimizer.go
common/tuning/optimizer.go
+62
-41
未找到文件。
common/config/config.go
浏览文件 @
38bf68c7
...
...
@@ -91,6 +91,7 @@ const (
TuningFile
string
=
DefaultTempPath
+
"/tuning.log"
TuningRestoreConfig
string
=
"-tuning-restore.conf"
FilePerm
os
.
FileMode
=
0600
DefaultTimeFormat
string
=
"2006-01-02 15:04:05"
)
// the grpc server config
...
...
common/project/projet.go
浏览文件 @
38bf68c7
...
...
@@ -108,7 +108,7 @@ func newProject(path string) (*YamlPrjSvr, error) {
// BenchMark method call the benchmark script
func
(
y
*
YamlPrjCli
)
BenchMark
()
(
string
,
error
)
{
benchStr
:=
""
benchStr
:=
make
([]
string
,
0
)
cmd
:=
exec
.
Command
(
"sh"
,
"-c"
,
y
.
Benchmark
)
benchOutByte
,
err
:=
cmd
.
CombinedOutput
()
...
...
@@ -123,23 +123,22 @@ func (y *YamlPrjCli) BenchMark() (string, error) {
bout
,
err
:=
cmd
.
Output
()
if
err
!=
nil
{
log
.
Error
(
err
)
return
benchStr
,
err
return
strings
.
Join
(
benchStr
,
","
)
,
err
}
floatout
,
err
:=
strconv
.
ParseFloat
(
strings
.
Replace
(
string
(
bout
),
"
\n
"
,
""
,
-
1
),
64
)
if
err
!=
nil
{
log
.
Error
(
err
)
return
benchStr
,
err
return
strings
.
Join
(
benchStr
,
","
)
,
err
}
out
:=
strconv
.
FormatFloat
((
floatout
*
float64
(
evaluation
.
Info
.
Weight
)
/
100
),
'E'
,
-
1
,
64
)
if
evaluation
.
Info
.
Type
==
"negative"
{
out
=
"-"
+
out
}
benchStr
=
benchStr
+
out
+
","
benchStr
=
append
(
benchStr
,
evaluation
.
Name
+
"="
+
out
)
}
benchStr
=
benchStr
[
:
len
(
benchStr
)
-
1
]
return
benchStr
,
nil
return
strings
.
Join
(
benchStr
,
","
),
nil
}
// RunSet method call the set script to set the value
...
...
common/tuning/optimizer.go
浏览文件 @
38bf68c7
...
...
@@ -27,6 +27,7 @@ import (
"path"
"strconv"
"strings"
"time"
)
// Optimizer : the type implement the bayes serch service
...
...
@@ -42,11 +43,12 @@ type BenchMark struct {
var
optimizerPutURL
string
var
optimization
*
Optimizer
var
minEval
string
var
evalMap
map
[
string
]
float64
var
respPutIns
*
models
.
RespPutBody
var
iter
int
var
maxIter
int
var
optimizer
=
Optimizer
{}
var
startIterTime
string
// InitTuned method for init tuning
func
(
o
*
Optimizer
)
InitTuned
(
ch
chan
*
PB
.
AckCheck
,
askIter
int
)
error
{
...
...
@@ -129,7 +131,7 @@ func (o *Optimizer) InitTuned(ch chan *PB.AckCheck, askIter int) error {
log
.
Infof
(
"optimizer put url is: %s"
,
optimizerPutURL
)
optimization
=
o
minEval
=
""
evalMap
=
make
(
map
[
string
]
float64
)
iter
=
0
benchmark
:=
BenchMark
{
Content
:
nil
}
...
...
@@ -144,49 +146,20 @@ func (o *Optimizer) InitTuned(ch chan *PB.AckCheck, askIter int) error {
DynamicTuned method using bayes algorithm to search the best performance parameters
*/
func
(
bench
*
BenchMark
)
DynamicTuned
(
ch
chan
*
PB
.
AckCheck
)
error
{
var
eval
string
var
eval
Value
string
var
err
error
if
bench
.
Content
!=
nil
{
eval
=
string
(
bench
.
Content
)
optimizationTerm
:=
fmt
.
Sprintf
(
"The %dth optimization result is: %s
\n
"
+
" The %dth evaluation value is: %s"
,
iter
,
respPutIns
.
Param
,
iter
,
eval
)
ch
<-
&
PB
.
AckCheck
{
Name
:
optimizationTerm
}
log
.
Info
(
optimizationTerm
)
err
=
utils
.
WriteFile
(
config
.
TuningFile
,
optimizationTerm
+
"
\n
"
,
config
.
FilePerm
,
os
.
O_APPEND
|
os
.
O_WRONLY
)
if
err
!=
nil
{
log
.
Error
(
err
)
return
err
}
floatEval
,
err
:=
strconv
.
ParseFloat
(
eval
,
64
)
if
err
!=
nil
{
log
.
Error
(
err
)
return
err
}
if
minEval
==
""
{
minEval
=
eval
}
floatMinEval
,
err
:=
strconv
.
ParseFloat
(
minEval
,
64
)
evalValue
,
err
=
bench
.
evalParsing
(
ch
)
if
err
!=
nil
{
log
.
Error
(
err
)
return
err
}
if
floatEval
<
floatMinEval
{
minEval
=
eval
}
}
os
.
Setenv
(
"ITERATION"
,
strconv
.
Itoa
(
iter
))
optPutBody
:=
new
(
models
.
OptimizerPutBody
)
optPutBody
.
Iterations
=
iter
optPutBody
.
Value
=
eval
optPutBody
.
Value
=
eval
Value
respPutIns
,
err
=
optPutBody
.
Put
(
optimizerPutURL
)
if
err
!=
nil
{
log
.
Errorf
(
"get setting parameter error: %v"
,
err
)
...
...
@@ -206,16 +179,18 @@ func (bench *BenchMark) DynamicTuned(ch chan *PB.AckCheck) error {
}
log
.
Info
(
"restart project success"
)
startIterTime
=
time
.
Now
()
.
Format
(
config
.
DefaultTimeFormat
)
if
iter
==
maxIter
{
evaluation
:=
make
([]
string
,
0
)
for
evalKey
,
evalValue
:=
range
evalMap
{
value
:=
strconv
.
FormatFloat
(
evalValue
,
'E'
,
-
1
,
64
)
evaluation
=
append
(
evaluation
,
evalKey
+
"="
+
value
)
}
optimizationTerm
:=
fmt
.
Sprintf
(
"
\n
The final optimization result is: %s
\n
"
+
" The final evaluation value is: %s"
,
respPutIns
.
Param
,
minEval
)
" The final evaluation value is: %s"
,
respPutIns
.
Param
,
strings
.
Join
(
evaluation
,
","
))
log
.
Info
(
optimizationTerm
)
ch
<-
&
PB
.
AckCheck
{
Name
:
optimizationTerm
,
Status
:
utils
.
SUCCESS
}
err
:=
utils
.
WriteFile
(
config
.
TuningFile
,
optimizationTerm
+
"
\n
"
,
config
.
FilePerm
,
os
.
O_APPEND
|
os
.
O_WRONLY
)
if
err
!=
nil
{
log
.
Error
(
err
)
return
err
}
if
err
=
deleteTask
(
optimizerPutURL
);
err
!=
nil
{
log
.
Error
(
err
)
...
...
@@ -262,6 +237,52 @@ func (o *Optimizer) RestoreConfigTuned() error {
return
nil
}
func
(
bench
*
BenchMark
)
evalParsing
(
ch
chan
*
PB
.
AckCheck
)
(
string
,
error
)
{
eval
:=
string
(
bench
.
Content
)
optimizationTerm
:=
fmt
.
Sprintf
(
"The %dth optimization result is: %s
\n
"
+
" The %dth evaluation value is: %s"
,
iter
,
respPutIns
.
Param
,
iter
,
eval
)
ch
<-
&
PB
.
AckCheck
{
Name
:
optimizationTerm
}
log
.
Info
(
optimizationTerm
)
endIterTime
:=
time
.
Now
()
.
Format
(
config
.
DefaultTimeFormat
)
iterInfo
:=
make
([]
string
,
0
)
iterInfo
=
append
(
iterInfo
,
strconv
.
Itoa
(
iter
))
iterInfo
=
append
(
iterInfo
,
startIterTime
)
iterInfo
=
append
(
iterInfo
,
endIterTime
)
iterInfo
=
append
(
iterInfo
,
eval
)
iterInfo
=
append
(
iterInfo
,
respPutIns
.
Param
)
output
:=
strings
.
Join
(
iterInfo
,
"|"
)
err
:=
utils
.
WriteFile
(
config
.
TuningFile
,
output
+
"
\n
"
,
config
.
FilePerm
,
os
.
O_APPEND
|
os
.
O_WRONLY
)
if
err
!=
nil
{
log
.
Error
(
err
)
return
""
,
err
}
evalValue
:=
make
([]
string
,
0
)
for
_
,
benchStr
:=
range
strings
.
Split
(
eval
,
","
)
{
kvs
:=
strings
.
Split
(
benchStr
,
"="
)
if
len
(
kvs
)
<
2
{
continue
}
floatEval
,
err
:=
strconv
.
ParseFloat
(
kvs
[
1
],
64
)
if
err
!=
nil
{
log
.
Error
(
err
)
return
""
,
err
}
if
floatEval
<
evalMap
[
kvs
[
0
]]
{
evalMap
[
kvs
[
0
]]
=
floatEval
}
evalValue
=
append
(
evalValue
,
kvs
[
1
])
}
return
strings
.
Join
(
evalValue
,
","
),
nil
}
func
deleteTask
(
url
string
)
error
{
resp
,
err
:=
http
.
Delete
(
url
)
if
err
!=
nil
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录