Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
5fd3b083
Commit
5fd3b083
authored
Jul 05, 2019
by
suiguoxin
Browse files
Merge branch 'master' of
git://github.com/microsoft/nni
parents
571817e2
f6d66673
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
28 deletions
+31
-28
src/webui/src/static/style/table.scss
src/webui/src/static/style/table.scss
+0
-2
tools/nni_cmd/config_schema.py
tools/nni_cmd/config_schema.py
+2
-0
tools/nni_cmd/nnictl.py
tools/nni_cmd/nnictl.py
+1
-1
tools/nni_cmd/nnictl_utils.py
tools/nni_cmd/nnictl_utils.py
+28
-25
No files found.
src/webui/src/static/style/table.scss
View file @
5fd3b083
...
...
@@ -30,7 +30,6 @@
tr
{
text-align
:
center
;
color
:
#212121
;
font-family
:
'Segoe'
;
font-size
:
14px
;
/* background-color: #f2f2f2; */
}
...
...
@@ -38,7 +37,6 @@
padding
:
2px
;
background-color
:white
!
important
;
font-size
:
14px
;
font-family
:
'Segoe'
;
color
:
#808080
;
border-bottom
:
1px
solid
#d0d0d0
;
text-align
:
center
;
...
...
tools/nni_cmd/config_schema.py
View file @
5fd3b083
...
...
@@ -215,6 +215,7 @@ pai_trial_schema = {
Optional
(
'outputDir'
):
And
(
Regex
(
r
'hdfs://(([0-9]{1,3}.){3}[0-9]{1,3})(:[0-9]{2,5})?(/.*)?'
),
\
error
=
'ERROR: outputDir format error, outputDir format is hdfs://xxx.xxx.xxx.xxx:xxx'
),
Optional
(
'virtualCluster'
):
setType
(
'virtualCluster'
,
str
),
Optional
(
'nasMode'
):
setChoice
(
'classic_mode'
,
'enas_mode'
,
'oneshot_mode'
)
}
}
...
...
@@ -229,6 +230,7 @@ pai_config_schema = {
kubeflow_trial_schema
=
{
'trial'
:{
'codeDir'
:
setPathCheck
(
'codeDir'
),
Optional
(
'nasMode'
):
setChoice
(
'classic_mode'
,
'enas_mode'
,
'oneshot_mode'
),
Optional
(
'ps'
):
{
'replicas'
:
setType
(
'replicas'
,
int
),
'command'
:
setType
(
'command'
,
str
),
...
...
tools/nni_cmd/nnictl.py
View file @
5fd3b083
...
...
@@ -119,7 +119,7 @@ def parse_args():
parser_experiment_status
.
add_argument
(
'id'
,
nargs
=
'?'
,
help
=
'the id of experiment'
)
parser_experiment_status
.
set_defaults
(
func
=
experiment_status
)
parser_experiment_list
=
parser_experiment_subparsers
.
add_parser
(
'list'
,
help
=
'list all of running experiment ids'
)
parser_experiment_list
.
add_argument
(
'all'
,
nargs
=
'?'
,
help
=
'list all of experiments'
)
parser_experiment_list
.
add_argument
(
'
--
all'
,
action
=
'store_true'
,
default
=
False
,
help
=
'list all of experiments'
)
parser_experiment_list
.
set_defaults
(
func
=
experiment_list
)
parser_experiment_clean
=
parser_experiment_subparsers
.
add_parser
(
'delete'
,
help
=
'clean up the experiment data'
)
parser_experiment_clean
.
add_argument
(
'id'
,
nargs
=
'?'
,
help
=
'the id of experiment'
)
...
...
tools/nni_cmd/nnictl_utils.py
View file @
5fd3b083
...
...
@@ -106,14 +106,14 @@ def check_experiment_id(args, update=True):
print
(
EXPERIMENT_INFORMATION_FORMAT
%
experiment_information
)
exit
(
1
)
elif
not
running_experiment_list
:
print_error
(
'There is no experiment running
!
'
)
print_error
(
'There is no experiment running
.
'
)
return
None
else
:
return
running_experiment_list
[
0
]
if
experiment_dict
.
get
(
args
.
id
):
return
args
.
id
else
:
print_error
(
'Id not correct
!
'
)
print_error
(
'Id not correct
.
'
)
return
None
def
parse_ids
(
args
):
...
...
@@ -151,7 +151,7 @@ def parse_ids(args):
exit
(
1
)
else
:
result_list
=
running_experiment_list
elif
args
.
id
==
'
all
'
:
elif
args
.
all
:
result_list
=
running_experiment_list
elif
args
.
id
.
endswith
(
'*'
):
for
id
in
running_experiment_list
:
...
...
@@ -176,7 +176,7 @@ def get_config_filename(args):
'''get the file name of config file'''
experiment_id
=
check_experiment_id
(
args
)
if
experiment_id
is
None
:
print_error
(
'Please set correct experiment id
!
'
)
print_error
(
'Please set correct experiment id
.
'
)
exit
(
1
)
experiment_config
=
Experiments
()
experiment_dict
=
experiment_config
.
get_all_experiments
()
...
...
@@ -186,7 +186,7 @@ def get_experiment_port(args):
'''get the port of experiment'''
experiment_id
=
check_experiment_id
(
args
)
if
experiment_id
is
None
:
print_error
(
'Please set correct experiment id
!
'
)
print_error
(
'Please set correct experiment id
.
'
)
exit
(
1
)
experiment_config
=
Experiments
()
experiment_dict
=
experiment_config
.
get_all_experiments
()
...
...
@@ -235,7 +235,7 @@ def stop_experiment(args):
except
Exception
as
exception
:
print_error
(
exception
)
nni_config
.
set_config
(
'tensorboardPidList'
,
[])
print_normal
(
'Stop experiment success
!
'
)
print_normal
(
'Stop experiment success
.
'
)
experiment_config
.
update_experiment
(
experiment_id
,
'status'
,
'STOPPED'
)
time_now
=
time
.
strftime
(
'%Y-%m-%d %H:%M:%S'
,
time
.
localtime
(
time
.
time
()))
experiment_config
.
update_experiment
(
experiment_id
,
'endTime'
,
str
(
time_now
))
...
...
@@ -360,10 +360,10 @@ def log_trial(args):
if
trial_id_path_dict
.
get
(
args
.
trial_id
):
print_normal
(
'id:'
+
args
.
trial_id
+
' path:'
+
trial_id_path_dict
[
args
.
trial_id
])
else
:
print_error
(
'trial id is not valid
!
'
)
print_error
(
'trial id is not valid
.
'
)
exit
(
1
)
else
:
print_error
(
'please specific the trial id
!
'
)
print_error
(
'please specific the trial id
.
'
)
exit
(
1
)
else
:
for
key
in
trial_id_path_dict
:
...
...
@@ -385,7 +385,7 @@ def local_clean(directory):
try
:
shutil
.
rmtree
(
directory
)
except
FileNotFoundError
as
err
:
print_error
(
'{0} does not exist
!
'
.
format
(
directory
))
print_error
(
'{0} does not exist
.
'
.
format
(
directory
))
def
remote_clean
(
machine_list
,
experiment_id
=
None
):
'''clean up remote data'''
...
...
@@ -435,19 +435,19 @@ def experiment_clean(args):
experiment_id_list
=
list
(
experiment_dict
.
keys
())
else
:
if
args
.
id
is
None
:
print_error
(
'please set experiment id
!
'
)
print_error
(
'please set experiment id
.
'
)
exit
(
1
)
if
args
.
id
not
in
experiment_dict
:
print_error
(
'
c
an
not find
id
{0}
!
'
.
format
(
args
.
id
))
print_error
(
'
C
annot find
experiment
{0}
.
'
.
format
(
args
.
id
))
exit
(
1
)
experiment_id_list
.
append
(
args
.
id
)
while
True
:
print
(
'INFO: This action will delete experiment {0}, and it
’
s not recoverable.'
.
format
(
' '
.
join
(
experiment_id_list
)))
print
(
'INFO: This action will delete experiment {0}, and it
\'
s not recoverable.'
.
format
(
' '
.
join
(
experiment_id_list
)))
inputs
=
input
(
'INFO: do you want to continue?[y/N]:'
)
if
not
inputs
.
lower
()
or
inputs
.
lower
()
in
[
'n'
,
'no'
]:
exit
(
0
)
elif
inputs
.
lower
()
not
in
[
'y'
,
'n'
,
'yes'
,
'no'
]:
print_warning
(
'please input Y or N
!
'
)
print_warning
(
'please input Y or N
.
'
)
else
:
break
for
experiment_id
in
experiment_id_list
:
...
...
@@ -464,7 +464,7 @@ def experiment_clean(args):
hdfs_clean
(
host
,
user_name
,
output_dir
,
experiment_id
)
elif
platform
!=
'local'
:
#TODO: support all platforms
print_warning
(
'platform {0} clean up not supported yet
!
'
.
format
(
platform
))
print_warning
(
'platform {0} clean up not supported yet
.
'
.
format
(
platform
))
exit
(
0
)
#clean local data
home
=
str
(
Path
.
home
())
...
...
@@ -475,7 +475,7 @@ def experiment_clean(args):
experiment_config
=
Experiments
()
print_normal
(
'removing metadata of experiment {0}'
.
format
(
experiment_id
))
experiment_config
.
remove_experiment
(
experiment_id
)
print_normal
(
'
Finish!
'
)
print_normal
(
'
Done.
'
)
def
get_platform_dir
(
config_content
):
'''get the dir list to be deleted'''
...
...
@@ -486,13 +486,13 @@ def get_platform_dir(config_content):
for
machine
in
machine_list
:
host
=
machine
.
get
(
'ip'
)
port
=
machine
.
get
(
'port'
)
dir_list
.
append
(
host
+
':'
+
str
(
port
)
+
'/tmp/nni
/experiments
'
)
dir_list
.
append
(
host
+
':'
+
str
(
port
)
+
'/tmp/nni'
)
elif
platform
==
'pai'
:
pai_config
=
config_content
.
get
(
'paiConfig'
)
host
=
config_content
.
get
(
'paiConfig'
).
get
(
'host'
)
user_name
=
config_content
.
get
(
'paiConfig'
).
get
(
'userName'
)
output_dir
=
config_content
.
get
(
'trial'
).
get
(
'outputDir'
)
dir_list
.
append
(
'
hdfs://{0}:9000/{1}/nni/experiments
'
.
format
(
host
,
user_name
))
dir_list
.
append
(
'
server: {0}, path: {1}/nni
'
.
format
(
host
,
user_name
))
if
output_dir
:
dir_list
.
append
(
output_dir
)
return
dir_list
...
...
@@ -501,12 +501,15 @@ def platform_clean(args):
'''clean up the experiment data'''
config_path
=
os
.
path
.
abspath
(
args
.
config
)
if
not
os
.
path
.
exists
(
config_path
):
print_error
(
'Please set correct config path
!
'
)
print_error
(
'Please set correct config path
.
'
)
exit
(
1
)
config_content
=
get_yml_content
(
config_path
)
platform
=
config_content
.
get
(
'trainingServicePlatform'
)
if
platform
==
'local'
:
print_normal
(
'it doesn’t need to clean local platform.'
)
exit
(
0
)
if
platform
not
in
[
'remote'
,
'pai'
]:
print_normal
(
'platform {0} not supported
!
'
.
format
(
platform
))
print_normal
(
'platform {0} not supported
.
'
.
format
(
platform
))
exit
(
0
)
experiment_config
=
Experiments
()
experiment_dict
=
experiment_config
.
get_all_experiments
()
...
...
@@ -514,7 +517,7 @@ def platform_clean(args):
id_list
=
list
(
experiment_dict
.
keys
())
dir_list
=
get_platform_dir
(
config_content
)
if
not
dir_list
:
print_normal
(
'No folder of NNI caches is found
!
'
)
print_normal
(
'No folder of NNI caches is found
.
'
)
exit
(
1
)
while
True
:
print_normal
(
'This command will remove below folders of NNI caches. If other users are using experiments on below hosts, it will be broken.'
)
...
...
@@ -524,7 +527,7 @@ def platform_clean(args):
if
not
inputs
.
lower
()
or
inputs
.
lower
()
in
[
'n'
,
'no'
]:
exit
(
0
)
elif
inputs
.
lower
()
not
in
[
'y'
,
'n'
,
'yes'
,
'no'
]:
print_warning
(
'please input Y or N
!
'
)
print_warning
(
'please input Y or N
.
'
)
else
:
break
if
platform
==
'remote'
:
...
...
@@ -537,18 +540,18 @@ def platform_clean(args):
user_name
=
config_content
.
get
(
'paiConfig'
).
get
(
'userName'
)
output_dir
=
config_content
.
get
(
'trial'
).
get
(
'outputDir'
)
hdfs_clean
(
host
,
user_name
,
output_dir
,
None
)
print_normal
(
'Done
!
'
)
print_normal
(
'Done
.
'
)
def
experiment_list
(
args
):
'''get the information of all experiments'''
experiment_config
=
Experiments
()
experiment_dict
=
experiment_config
.
get_all_experiments
()
if
not
experiment_dict
:
print
(
'There is no
experiment
running..
.'
)
print
_normal
(
'Cannot find
experiment
s
.'
)
exit
(
1
)
update_experiment
()
experiment_id_list
=
[]
if
args
.
all
and
args
.
all
==
'all'
:
if
args
.
all
:
for
key
in
experiment_dict
.
keys
():
experiment_id_list
.
append
(
key
)
else
:
...
...
@@ -556,7 +559,7 @@ def experiment_list(args):
if
experiment_dict
[
key
][
'status'
]
!=
'STOPPED'
:
experiment_id_list
.
append
(
key
)
if
not
experiment_id_list
:
print_warning
(
'There is no experiment running...
\n
You can use
\'
nnictl experiment list all
\'
to list all stopped experiments
!
'
)
print_warning
(
'There is no experiment running...
\n
You can use
\'
nnictl experiment list
--
all
\'
to list all stopped experiments
.
'
)
experiment_information
=
""
for
key
in
experiment_id_list
:
experiment_information
+=
(
EXPERIMENT_DETAIL_FORMAT
%
(
key
,
experiment_dict
[
key
][
'status'
],
experiment_dict
[
key
][
'port'
],
\
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment