Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
VisualDL
提交
19275c3d
V
VisualDL
项目概览
PaddlePaddle
/
VisualDL
接近 2 年 前同步成功
通知
89
Star
4655
Fork
642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
5
Wiki
分析
仓库
DevOps
项目成员
Pages
V
VisualDL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
5
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
19275c3d
编写于
1月 14, 2018
作者:
Y
Yan Chunwei
提交者:
GitHub
1月 14, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add try call to enhance robust of server (#133)
上级
06583b18
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
65 addition
and
40 deletion
+65
-40
visualdl/server/graph.py
visualdl/server/graph.py
+3
-3
visualdl/server/graph_test.py
visualdl/server/graph_test.py
+2
-1
visualdl/server/graphviz_graph.py
visualdl/server/graphviz_graph.py
+3
-4
visualdl/server/lib.py
visualdl/server/lib.py
+12
-11
visualdl/server/lib_test.py
visualdl/server/lib_test.py
+19
-4
visualdl/server/mock/data.py
visualdl/server/mock/data.py
+1
-1
visualdl/server/visualDL
visualdl/server/visualDL
+25
-16
未找到文件。
visualdl/server/graph.py
浏览文件 @
19275c3d
import
os
import
json
import
os
from
google.protobuf.json_format
import
MessageToJson
from
PIL
import
Image
import
onnx
import
graphviz_graph
as
gg
from
PIL
import
Image
import
onnx
def
debug_print
(
json_obj
):
...
...
visualdl/server/graph_test.py
浏览文件 @
19275c3d
import
json
import
unittest
import
graph
import
json
class
GraphTest
(
unittest
.
TestCase
):
...
...
visualdl/server/graphviz_graph.py
浏览文件 @
19275c3d
import
subprocess
import
tempfile
import
sys
import
os
import
random
import
subprocess
import
os
import
sys
import
tempfile
def
crepr
(
v
):
...
...
visualdl/server/lib.py
浏览文件 @
19275c3d
import
pprint
import
random
import
re
import
time
import
urllib
from
tempfile
import
NamedTemporaryFile
...
...
@@ -133,7 +133,7 @@ def get_invididual_image(storage, mode, tag, step_index, max_size=80):
shape
=
record
.
shape
()
if
shape
[
2
]
==
1
:
shape
=
[
shape
[
0
],
shape
[
1
]]
shape
=
[
shape
[
0
],
shape
[
1
]]
data
=
np
.
array
(
record
.
data
(),
dtype
=
'uint8'
).
reshape
(
shape
)
tempfile
=
NamedTemporaryFile
(
mode
=
'w+b'
,
suffix
=
'.png'
)
with
Image
.
fromarray
(
data
)
as
im
:
...
...
@@ -174,12 +174,13 @@ def get_histogram(storage, mode, tag):
return
res
if
__name__
==
'__main__'
:
reader
=
storage
.
LogReader
(
'./tmp/mock'
)
tags
=
get_image_tags
(
reader
)
tags
=
get_image_tag_steps
(
reader
,
'train'
,
'layer1/layer2/image0/0'
)
pprint
.
pprint
(
tags
)
image
=
get_invididual_image
(
reader
,
"train"
,
'layer1/layer2/image0/0'
,
2
)
print
image
def
retry
(
ntimes
,
function
,
time2sleep
,
*
args
,
**
kwargs
):
'''
try to execute `function` `ntimes`, if exception catched, the thread will
sleep `time2sleep` seconds.
'''
for
i
in
xrange
(
ntimes
):
try
:
return
function
(
*
args
,
**
kwargs
)
except
:
time
.
sleep
(
time2sleep
)
visualdl/server/lib_test.py
浏览文件 @
19275c3d
import
pprint
import
unittest
import
lib
from
visualdl
import
LogReader
,
LogWriter
import
pprint
from
storage_mock
import
add_
scalar
,
add_image
,
add_histogram
import
lib
from
storage_mock
import
add_
histogram
,
add_image
,
add_scalar
_retry_counter
=
0
class
LibTest
(
unittest
.
TestCase
):
def
setUp
(
self
):
dir
=
"./tmp/mock"
writer
=
LogWriter
(
dir
,
sync_cycle
=
1
0
)
writer
=
LogWriter
(
dir
,
sync_cycle
=
3
0
)
add_scalar
(
writer
,
"train"
,
"layer/scalar0/min"
,
1000
,
1
)
add_scalar
(
writer
,
"test"
,
"layer/scalar0/min"
,
1000
,
10
)
...
...
@@ -32,6 +32,21 @@ class LibTest(unittest.TestCase):
self
.
reader
=
LogReader
(
dir
)
def
test_retry
(
self
):
ntimes
=
7
time2sleep
=
1
def
func
():
global
_retry_counter
if
_retry_counter
<
5
:
_retry_counter
+=
1
raise
return
_retry_counter
lib
.
retry
(
ntimes
,
func
,
time2sleep
)
self
.
assertEqual
(
_retry_counter
,
5
)
def
test_modes
(
self
):
modes
=
lib
.
get_modes
(
self
.
reader
)
self
.
assertEqual
(
...
...
visualdl/server/mock/data.py
浏览文件 @
19275c3d
...
...
@@ -225,4 +225,4 @@ def graph_data():
}
}
]
}"""
\ No newline at end of file
}"""
visualdl/server/visualDL
浏览文件 @
19275c3d
...
...
@@ -2,6 +2,8 @@
import
json
import
os
import
exceptions
import
time
import
sys
from
optparse
import
OptionParser
...
...
@@ -21,9 +23,20 @@ app = Flask(__name__, static_url_path="")
# set static expires in a short time to reduce browser's memory usage.
app
.
config
[
'SEND_FILE_MAX_AGE_DEFAULT'
]
=
30
error_retry_times
=
3
error_sleep_time
=
2
# seconds
SERVER_DIR
=
os
.
path
.
join
(
visualdl
.
ROOT
,
'server'
)
def
try_call
(
function
,
*
args
,
**
kwargs
):
res
=
lib
.
retry
(
error_retry_times
,
function
,
error_sleep_time
,
*
args
,
**
kwargs
)
if
not
res
:
raise
exceptions
.
IOError
(
"server IO error, will retry latter."
)
return
res
def
option_parser
():
"""
:return:
...
...
@@ -64,6 +77,7 @@ log_reader = LogReader(options.logdir)
graph_image_path
=
None
# return data
# status, msg, data
def
gen_result
(
status
,
msg
,
data
):
...
...
@@ -89,11 +103,12 @@ def serve_static(filename):
return
send_from_directory
(
os
.
path
.
join
(
server_path
,
static_file_path
),
filename
)
@
app
.
route
(
'/graphs/image'
)
def
serve_graph
():
print
'send file'
,
graph_image_path
return
send_file
(
graph_image_path
)
@
app
.
route
(
'/data/logdir'
)
def
logdir
():
result
=
gen_result
(
0
,
""
,
{
"logdir"
:
options
.
logdir
})
...
...
@@ -110,10 +125,7 @@ def runs():
def
scalar_tags
():
mode
=
request
.
args
.
get
(
'mode'
)
is_debug
=
bool
(
request
.
args
.
get
(
'debug'
))
if
is_debug
:
result
=
mock_tags
.
data
()
else
:
result
=
lib
.
get_scalar_tags
(
log_reader
)
result
=
try_call
(
lib
.
get_scalar_tags
,
log_reader
)
result
=
gen_result
(
0
,
""
,
result
)
return
Response
(
json
.
dumps
(
result
),
mimetype
=
'application/json'
)
...
...
@@ -121,7 +133,7 @@ def scalar_tags():
@
app
.
route
(
"/data/plugin/images/tags"
)
def
image_tags
():
mode
=
request
.
args
.
get
(
'run'
)
result
=
lib
.
get_image_tags
(
log_reader
)
result
=
try_call
(
lib
.
get_image_tags
,
log_reader
)
result
=
gen_result
(
0
,
""
,
result
)
return
Response
(
json
.
dumps
(
result
),
mimetype
=
'application/json'
)
...
...
@@ -129,7 +141,8 @@ def image_tags():
@
app
.
route
(
"/data/plugin/histograms/tags"
)
def
histogram_tags
():
mode
=
request
.
args
.
get
(
'run'
)
result
=
lib
.
get_histogram_tags
(
log_reader
)
# hack to avlid IO conflicts
result
=
try_call
(
lib
.
get_histogram_tags
,
log_reader
)
result
=
gen_result
(
0
,
""
,
result
)
return
Response
(
json
.
dumps
(
result
),
mimetype
=
'application/json'
)
...
...
@@ -138,12 +151,7 @@ def histogram_tags():
def
scalars
():
run
=
request
.
args
.
get
(
'run'
)
tag
=
request
.
args
.
get
(
'tag'
)
is_debug
=
bool
(
request
.
args
.
get
(
'debug'
))
if
is_debug
:
result
=
mock_data
.
sequence_data
()
else
:
result
=
lib
.
get_scalar
(
log_reader
,
run
,
tag
)
result
=
try_call
(
lib
.
get_scalar
,
log_reader
,
run
,
tag
)
result
=
gen_result
(
0
,
""
,
result
)
return
Response
(
json
.
dumps
(
result
),
mimetype
=
'application/json'
)
...
...
@@ -153,7 +161,7 @@ def images():
mode
=
request
.
args
.
get
(
'run'
)
tag
=
request
.
args
.
get
(
'tag'
)
result
=
lib
.
get_image_tag_steps
(
log_reader
,
mode
,
tag
)
result
=
try_call
(
lib
.
get_image_tag_steps
,
log_reader
,
mode
,
tag
)
result
=
gen_result
(
0
,
""
,
result
)
return
Response
(
json
.
dumps
(
result
),
mimetype
=
'application/json'
)
...
...
@@ -166,7 +174,8 @@ def individual_image():
step_index
=
int
(
request
.
args
.
get
(
'index'
))
# index of step
offset
=
0
imagefile
=
lib
.
get_invididual_image
(
log_reader
,
mode
,
tag
,
step_index
)
imagefile
=
try_call
(
lib
.
get_invididual_image
,
log_reader
,
mode
,
tag
,
step_index
)
response
=
send_file
(
imagefile
,
as_attachment
=
True
,
attachment_filename
=
'img.png'
)
return
response
...
...
@@ -176,7 +185,7 @@ def individual_image():
def
histogram
():
run
=
request
.
args
.
get
(
'run'
)
tag
=
request
.
args
.
get
(
'tag'
)
result
=
lib
.
get_histogram
(
log_reader
,
run
,
tag
)
result
=
try_call
(
lib
.
get_histogram
,
log_reader
,
run
,
tag
)
result
=
gen_result
(
0
,
""
,
result
)
return
Response
(
json
.
dumps
(
result
),
mimetype
=
'application/json'
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录