Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
0f0c6288
Unverified
Commit
0f0c6288
authored
Dec 16, 2020
by
QuanluZhang
Committed by
GitHub
Dec 16, 2020
Browse files
[retiarii] fix test (#3197)
parent
a0e2f8ef
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
29 additions
and
138 deletions
+29
-138
nni/retiarii/converter/graph_gen.py
nni/retiarii/converter/graph_gen.py
+1
-3
nni/retiarii/debug_configs.py
nni/retiarii/debug_configs.py
+1
-1
nni/retiarii/integration.py
nni/retiarii/integration.py
+1
-1
test/ut/retiarii/advisor_entry.py
test/ut/retiarii/advisor_entry.py
+0
-4
test/ut/retiarii/debug_strategy.py
test/ut/retiarii/debug_strategy.py
+0
-31
test/ut/retiarii/fake_search_space.json
test/ut/retiarii/fake_search_space.json
+0
-1
test/ut/retiarii/mnist-tensorflow.json
test/ut/retiarii/mnist-tensorflow.json
+9
-9
test/ut/retiarii/mnist.json
test/ut/retiarii/mnist.json
+0
-40
test/ut/retiarii/nni.yaml
test/ut/retiarii/nni.yaml
+0
-18
test/ut/retiarii/nni_cgo.yaml
test/ut/retiarii/nni_cgo.yaml
+0
-18
test/ut/retiarii/test_cgo_engine.py
test/ut/retiarii/test_cgo_engine.py
+12
-6
test/ut/retiarii/test_dedup_input.py
test/ut/retiarii/test_dedup_input.py
+4
-1
test/ut/retiarii/test_graph.py
test/ut/retiarii/test_graph.py
+0
-4
test/ut/retiarii/test_mutator.py
test/ut/retiarii/test_mutator.py
+1
-1
No files found.
nni/retiarii/converter/graph_gen.py
View file @
0f0c6288
...
@@ -337,14 +337,12 @@ def handle_graph_nodes(script_module, sm_graph, module, module_name, ir_model, i
...
@@ -337,14 +337,12 @@ def handle_graph_nodes(script_module, sm_graph, module, module_name, ir_model, i
new_node
=
ir_graph
.
add_node
(
build_full_name
(
module_name
,
OpTypeName
.
Attr
,
global_seq
),
new_node
=
ir_graph
.
add_node
(
build_full_name
(
module_name
,
OpTypeName
.
Attr
,
global_seq
),
node_type
,
attrs
)
node_type
,
attrs
)
node_index
[
node
]
=
new_node
node_index
[
node
]
=
new_node
elif
node
.
kind
()
==
'prim::min'
:
print
(
'zql: '
,
sm_graph
)
exit
(
1
)
elif
node
.
kind
()
==
'prim::If'
:
elif
node
.
kind
()
==
'prim::If'
:
last_block_node
=
handle_if_node
(
node
)
last_block_node
=
handle_if_node
(
node
)
# last_block_node is None means no node in the branch block
# last_block_node is None means no node in the branch block
node_index
[
node
]
=
last_block_node
node_index
[
node
]
=
last_block_node
elif
node
.
kind
()
==
'prim::Loop'
:
elif
node
.
kind
()
==
'prim::Loop'
:
# refer to https://gist.github.com/liuzhe-lz/90c35d9dd6fd7f3f32544940151ab186
raise
RuntimeError
(
'Loop has not been supported yet!'
)
raise
RuntimeError
(
'Loop has not been supported yet!'
)
else
:
else
:
raise
RuntimeError
(
'Unsupported kind: {}'
.
format
(
node
.
kind
()))
raise
RuntimeError
(
'Unsupported kind: {}'
.
format
(
node
.
kind
()))
...
...
nni/retiarii/debug_configs.py
View file @
0f0c6288
#
these should be experiment config in
release
#
we will support tensorflow in future
release
framework
=
'pytorch'
framework
=
'pytorch'
nni/retiarii/integration.py
View file @
0f0c6288
...
@@ -9,7 +9,7 @@ from nni.utils import MetricType
...
@@ -9,7 +9,7 @@ from nni.utils import MetricType
from
.graph
import
MetricData
from
.graph
import
MetricData
_logger
=
logging
.
getLogger
(
'nni.msg_dispatcher_base'
)
_logger
=
logging
.
getLogger
(
__name__
)
class
RetiariiAdvisor
(
MsgDispatcherBase
):
class
RetiariiAdvisor
(
MsgDispatcherBase
):
...
...
test/ut/retiarii/advisor_entry.py
deleted
100644 → 0
View file @
a0e2f8ef
import
os
import
sys
from
nni.retiarii.integration
import
RetiariiAdvisor
test/ut/retiarii/debug_strategy.py
deleted
100644 → 0
View file @
a0e2f8ef
import
json
import
os
import
logging
from
nni.retiarii
import
Model
,
submit_models
,
wait_models
def
single_model_strategy
():
with
open
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'converted_mnist_pytorch.json'
))
as
f
:
ir
=
json
.
load
(
f
)
model
=
Model
.
_load
(
ir
)
submit_models
(
model
)
wait_models
(
model
)
print
(
'Strategy says:'
,
model
.
metric
)
def
multi_model_cgo
():
os
.
environ
[
'CGO'
]
=
'true'
with
open
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'converted_mnist_pytorch.json'
))
as
f
:
ir
=
json
.
load
(
f
)
m
=
Model
.
_load
(
ir
)
models
=
[
m
]
for
i
in
range
(
3
):
models
.
append
(
m
.
fork
())
submit_models
(
*
models
)
wait_models
(
*
models
)
print
(
'Strategy says:'
,
[
_
.
metric
for
_
in
models
])
if
__name__
==
'__main__'
:
single_model_strategy
()
test/ut/retiarii/fake_search_space.json
deleted
100644 → 0
View file @
a0e2f8ef
{}
test/ut/retiarii/mnist-tensorflow.json
View file @
0f0c6288
...
@@ -4,11 +4,11 @@
...
@@ -4,11 +4,11 @@
"outputs"
:
[
"metric"
],
"outputs"
:
[
"metric"
],
"nodes"
:
{
"nodes"
:
{
"stem"
:
{
"type"
:
"_cell"
,
"
cell
"
:
"stem"
},
"stem"
:
{
"operation"
:
{
"type"
:
"_cell"
,
"
parameters"
:
{},
"cell_name
"
:
"stem"
}
}
,
"flatten"
:
{
"type"
:
"Flatten"
},
"flatten"
:
{
"operation"
:
{
"type"
:
"Flatten"
,
"parameters"
:
{}}
},
"fc1"
:
{
"type"
:
"Dense"
,
"parameters"
:
{
"units"
:
1024
,
"activation"
:
"relu"
}},
"fc1"
:
{
"operation"
:
{
"type"
:
"Dense"
,
"parameters"
:
{
"units"
:
1024
,
"activation"
:
"relu"
}}
}
,
"fc2"
:
{
"type"
:
"Dense"
,
"parameters"
:
{
"units"
:
10
}},
"fc2"
:
{
"operation"
:
{
"type"
:
"Dense"
,
"parameters"
:
{
"units"
:
10
}}
}
,
"softmax"
:
{
"type"
:
"Softmax"
}
"softmax"
:
{
"operation"
:
{
"type"
:
"Softmax"
,
"parameters"
:
{}}
}
},
},
"edges"
:
[
"edges"
:
[
...
@@ -23,10 +23,10 @@
...
@@ -23,10 +23,10 @@
"stem"
:
{
"stem"
:
{
"nodes"
:
{
"nodes"
:
{
"conv1"
:
{
"type"
:
"Conv2D"
,
"parameters"
:
{
"filters"
:
32
,
"kernel_size"
:
5
,
"activation"
:
"relu"
}},
"conv1"
:
{
"operation"
:
{
"type"
:
"Conv2D"
,
"parameters"
:
{
"filters"
:
32
,
"kernel_size"
:
5
,
"activation"
:
"relu"
}}
}
,
"pool1"
:
{
"type"
:
"MaxPool2D"
,
"parameters"
:
{
"pool_size"
:
2
}},
"pool1"
:
{
"operation"
:
{
"type"
:
"MaxPool2D"
,
"parameters"
:
{
"pool_size"
:
2
}}
}
,
"conv2"
:
{
"type"
:
"Conv2D"
,
"parameters"
:
{
"filters"
:
64
,
"kernel_size"
:
5
,
"activation"
:
"relu"
}},
"conv2"
:
{
"operation"
:
{
"type"
:
"Conv2D"
,
"parameters"
:
{
"filters"
:
64
,
"kernel_size"
:
5
,
"activation"
:
"relu"
}}
}
,
"pool2"
:
{
"type"
:
"MaxPool2D"
,
"parameters"
:
{
"pool_size"
:
2
}}
"pool2"
:
{
"operation"
:
{
"type"
:
"MaxPool2D"
,
"parameters"
:
{
"pool_size"
:
2
}}
}
},
},
"edges"
:
[
"edges"
:
[
...
...
test/ut/retiarii/mnist.json
deleted
100644 → 0
View file @
a0e2f8ef
{
"_model"
:
{
"inputs"
:
[
"image"
],
"outputs"
:
[
"metric"
],
"nodes"
:
{
"stem"
:
{
"cell"
:
"stem"
},
"flatten"
:
{
"type"
:
"Flatten"
},
"fc1"
:
{
"type"
:
"Dense"
,
"units"
:
1024
,
"activation"
:
"relu"
},
"fc2"
:
{
"type"
:
"Dense"
,
"units"
:
10
},
"softmax"
:
{
"type"
:
"Softmax"
}
},
"edges"
:
[
{
"head"
:
[
"_inputs"
,
0
],
"tail"
:
[
"stem"
,
0
]},
{
"head"
:
[
"stem"
,
0
],
"tail"
:
[
"flatten"
,
null
]},
{
"head"
:
[
"flatten"
,
null
],
"tail"
:
[
"fc1"
,
null
]},
{
"head"
:
[
"fc1"
,
null
],
"tail"
:
[
"fc2"
,
null
]},
{
"head"
:
[
"fc2"
,
null
],
"tail"
:
[
"softmax"
,
null
]},
{
"head"
:
[
"softmax"
,
null
],
"tail"
:
[
"_outputs"
,
0
]}
]
},
"stem"
:
{
"nodes"
:
{
"conv1"
:
{
"type"
:
"Conv2D"
,
"filters"
:
32
,
"kernel_size"
:
5
,
"activation"
:
"relu"
},
"pool1"
:
{
"type"
:
"MaxPool2D"
,
"pool_size"
:
2
},
"conv2"
:
{
"type"
:
"Conv2D"
,
"filters"
:
64
,
"kernel_size"
:
5
,
"activation"
:
"relu"
},
"pool2"
:
{
"type"
:
"MaxPool2D"
,
"pool_size"
:
2
}
},
"edges"
:
[
{
"head"
:
[
"_inputs"
,
0
],
"tail"
:
[
"conv1"
,
null
]},
{
"head"
:
[
"conv1"
,
null
],
"tail"
:
[
"pool1"
,
null
]},
{
"head"
:
[
"pool1"
,
null
],
"tail"
:
[
"conv2"
,
null
]},
{
"head"
:
[
"conv2"
,
null
],
"tail"
:
[
"pool2"
,
null
]},
{
"head"
:
[
"pool2"
,
null
],
"tail"
:
[
"_outputs"
,
0
]}
]
}
}
test/ut/retiarii/nni.yaml
deleted
100644 → 0
View file @
a0e2f8ef
authorName
:
nni
experimentName
:
naive
trialConcurrency
:
3
maxExecDuration
:
1h
maxTrialNum
:
10
trainingServicePlatform
:
local
searchSpacePath
:
fake_search_space.json
useAnnotation
:
false
advisor
:
codeDir
:
.
classFileName
:
advisor_entry.py
className
:
RetiariiAdvisor
classArgs
:
strategy
:
debug_strategy.single_model_strategy
trial
:
command
:
python3 -m nni.retiarii.trial_entry
codeDir
:
../..
gpuNum
:
0
test/ut/retiarii/nni_cgo.yaml
deleted
100644 → 0
View file @
a0e2f8ef
authorName
:
nni
experimentName
:
naive
trialConcurrency
:
4
maxExecDuration
:
1h
maxTrialNum
:
10
trainingServicePlatform
:
local
searchSpacePath
:
fake_search_space.json
useAnnotation
:
false
advisor
:
codeDir
:
.
classFileName
:
advisor_entry.py
className
:
RetiariiAdvisor
classArgs
:
strategy
:
debug_strategy.multi_model_cgo
trial
:
command
:
CGO=true python -m nni.retiarii.trial_entry
codeDir
:
../..
gpuNum
:
4
test/ut/retiarii/test_cgo_engine.py
View file @
0f0c6288
...
@@ -5,7 +5,9 @@ import threading
...
@@ -5,7 +5,9 @@ import threading
import
unittest
import
unittest
import
logging
import
logging
import
time
import
time
import
torch
import
torch
from
pathlib
import
Path
from
nni.retiarii.execution.cgo_engine
import
CGOExecutionEngine
from
nni.retiarii.execution.cgo_engine
import
CGOExecutionEngine
from
nni.retiarii.execution.logical_optimizer.logical_plan
import
LogicalPlan
from
nni.retiarii.execution.logical_optimizer.logical_plan
import
LogicalPlan
...
@@ -22,7 +24,8 @@ from nni.retiarii.utils import import_
...
@@ -22,7 +24,8 @@ from nni.retiarii.utils import import_
def
_load_mnist
(
n_models
:
int
=
1
):
def
_load_mnist
(
n_models
:
int
=
1
):
with
open
(
'converted_mnist_pytorch.json'
)
as
f
:
path
=
Path
(
__file__
).
parent
/
'converted_mnist_pytorch.json'
with
open
(
path
)
as
f
:
mnist_model
=
Model
.
_load
(
json
.
load
(
f
))
mnist_model
=
Model
.
_load
(
json
.
load
(
f
))
if
n_models
==
1
:
if
n_models
==
1
:
return
mnist_model
return
mnist_model
...
@@ -38,6 +41,7 @@ class CGOEngineTest(unittest.TestCase):
...
@@ -38,6 +41,7 @@ class CGOEngineTest(unittest.TestCase):
os
.
environ
[
'CGO'
]
=
'true'
os
.
environ
[
'CGO'
]
=
'true'
os
.
makedirs
(
'generated'
,
exist_ok
=
True
)
os
.
makedirs
(
'generated'
,
exist_ok
=
True
)
from
nni.runtime
import
protocol
,
platform
from
nni.runtime
import
protocol
,
platform
import
nni.runtime.platform.test
as
tt
protocol
.
_out_file
=
open
(
'generated/debug_protocol_out_file.py'
,
'wb'
)
protocol
.
_out_file
=
open
(
'generated/debug_protocol_out_file.py'
,
'wb'
)
protocol
.
_in_file
=
open
(
'generated/debug_protocol_out_file.py'
,
'rb'
)
protocol
.
_in_file
=
open
(
'generated/debug_protocol_out_file.py'
,
'rb'
)
...
@@ -50,15 +54,15 @@ class CGOEngineTest(unittest.TestCase):
...
@@ -50,15 +54,15 @@ class CGOEngineTest(unittest.TestCase):
params
=
json
.
loads
(
data
)
params
=
json
.
loads
(
data
)
params
[
'parameters'
][
'training_kwargs'
][
'max_steps'
]
=
100
params
[
'parameters'
][
'training_kwargs'
][
'max_steps'
]
=
100
platform
.
tes
t
.
init_params
(
params
)
t
t
.
init_params
(
params
)
trial_thread
=
threading
.
Thread
(
target
=
CGOExecutionEngine
.
trial_execute_graph
())
trial_thread
=
threading
.
Thread
(
target
=
CGOExecutionEngine
.
trial_execute_graph
())
trial_thread
.
start
()
trial_thread
.
start
()
last_metric
=
None
last_metric
=
None
while
True
:
while
True
:
time
.
sleep
(
1
)
time
.
sleep
(
1
)
if
platform
.
tes
t
.
_last_metric
:
if
t
t
.
_last_metric
:
metric
=
platform
.
tes
t
.
get_last_metric
()
metric
=
t
t
.
get_last_metric
()
if
metric
==
last_metric
:
if
metric
==
last_metric
:
continue
continue
advisor
.
handle_report_metric_data
(
metric
)
advisor
.
handle_report_metric_data
(
metric
)
...
@@ -75,4 +79,6 @@ class CGOEngineTest(unittest.TestCase):
...
@@ -75,4 +79,6 @@ class CGOEngineTest(unittest.TestCase):
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
#CGOEngineTest().test_dedup_input()
#CGOEngineTest().test_dedup_input()
#CGOEngineTest().test_submit_models()
#CGOEngineTest().test_submit_models()
unittest
.
main
()
#unittest.main()
\ No newline at end of file
# TODO: fix ut
pass
\ No newline at end of file
test/ut/retiarii/test_dedup_input.py
View file @
0f0c6288
...
@@ -6,6 +6,8 @@ import unittest
...
@@ -6,6 +6,8 @@ import unittest
import
logging
import
logging
import
time
import
time
from
pathlib
import
Path
from
nni.retiarii.execution.cgo_engine
import
CGOExecutionEngine
from
nni.retiarii.execution.cgo_engine
import
CGOExecutionEngine
from
nni.retiarii.execution.logical_optimizer.logical_plan
import
LogicalPlan
from
nni.retiarii.execution.logical_optimizer.logical_plan
import
LogicalPlan
from
nni.retiarii.execution.logical_optimizer.opt_dedup_input
import
DedupInputOptimizer
from
nni.retiarii.execution.logical_optimizer.opt_dedup_input
import
DedupInputOptimizer
...
@@ -19,7 +21,8 @@ from nni.retiarii.trainer import PyTorchImageClassificationTrainer, PyTorchMulti
...
@@ -19,7 +21,8 @@ from nni.retiarii.trainer import PyTorchImageClassificationTrainer, PyTorchMulti
from
nni.retiarii.utils
import
import_
from
nni.retiarii.utils
import
import_
def
_load_mnist
(
n_models
:
int
=
1
):
def
_load_mnist
(
n_models
:
int
=
1
):
with
open
(
'converted_mnist_pytorch.json'
)
as
f
:
path
=
Path
(
__file__
).
parent
/
'converted_mnist_pytorch.json'
with
open
(
path
)
as
f
:
mnist_model
=
Model
.
_load
(
json
.
load
(
f
))
mnist_model
=
Model
.
_load
(
json
.
load
(
f
))
if
n_models
==
1
:
if
n_models
==
1
:
return
mnist_model
return
mnist_model
...
...
test/ut/retiarii/test_graph.py
View file @
0f0c6288
...
@@ -29,14 +29,10 @@ def _test_file(json_path):
...
@@ -29,14 +29,10 @@ def _test_file(json_path):
graph
[
'inputs'
]
=
None
graph
[
'inputs'
]
=
None
if
'outputs'
not
in
graph
:
if
'outputs'
not
in
graph
:
graph
[
'outputs'
]
=
None
graph
[
'outputs'
]
=
None
for
node_name
,
node
in
graph
[
'nodes'
].
items
():
if
'parameters'
not
in
node
:
node
[
'parameters'
]
=
{}
# debug output
# debug output
#json.dump(orig_ir, open('_orig.json', 'w'), indent=4)
#json.dump(orig_ir, open('_orig.json', 'w'), indent=4)
#json.dump(dump_ir, open('_dump.json', 'w'), indent=4)
#json.dump(dump_ir, open('_dump.json', 'w'), indent=4)
assert
orig_ir
==
dump_ir
assert
orig_ir
==
dump_ir
...
...
test/ut/retiarii/test_mutator.py
View file @
0f0c6288
...
@@ -45,7 +45,7 @@ model0 = Model._load(ir)
...
@@ -45,7 +45,7 @@ model0 = Model._load(ir)
def
test_dry_run
():
def
test_dry_run
():
candidates
=
mutator
.
dry_run
(
model0
)
candidates
,
_
=
mutator
.
dry_run
(
model0
)
assert
len
(
candidates
)
==
2
assert
len
(
candidates
)
==
2
assert
candidates
[
0
]
==
[
max_pool
,
avg_pool
,
global_pool
]
assert
candidates
[
0
]
==
[
max_pool
,
avg_pool
,
global_pool
]
assert
candidates
[
1
]
==
[
max_pool
,
avg_pool
,
global_pool
]
assert
candidates
[
1
]
==
[
max_pool
,
avg_pool
,
global_pool
]
...
...
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