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
896c516f
Unverified
Commit
896c516f
authored
Dec 06, 2021
by
J-shang
Committed by
GitHub
Dec 06, 2021
Browse files
[UT] move compression ut to an additional folder & speed up simulated annealing search (#4357)
parent
822556b7
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
46 additions
and
40 deletions
+46
-40
nni/algorithms/compression/v2/pytorch/pruning/tools/task_generator.py
...ms/compression/v2/pytorch/pruning/tools/task_generator.py
+4
-1
pipelines/fast-test.yml
pipelines/fast-test.yml
+8
-8
test/ut/compression/__init__.py
test/ut/compression/__init__.py
+0
-0
test/ut/compression/v1/__init__.py
test/ut/compression/v1/__init__.py
+0
-0
test/ut/compression/v1/test_compression_utils.py
test/ut/compression/v1/test_compression_utils.py
+0
-0
test/ut/compression/v1/test_compressor_tf.py
test/ut/compression/v1/test_compressor_tf.py
+0
-0
test/ut/compression/v1/test_compressor_torch.py
test/ut/compression/v1/test_compressor_torch.py
+0
-0
test/ut/compression/v1/test_dependecy_aware.py
test/ut/compression/v1/test_dependecy_aware.py
+0
-0
test/ut/compression/v1/test_model_speedup.py
test/ut/compression/v1/test_model_speedup.py
+0
-0
test/ut/compression/v1/test_pruners.py
test/ut/compression/v1/test_pruners.py
+2
-2
test/ut/compression/v1/test_transformer_pruners.py
test/ut/compression/v1/test_transformer_pruners.py
+2
-2
test/ut/compression/v2/__init__.py
test/ut/compression/v2/__init__.py
+0
-0
test/ut/compression/v2/test_iterative_pruner_torch.py
test/ut/compression/v2/test_iterative_pruner_torch.py
+13
-12
test/ut/compression/v2/test_pruner_torch.py
test/ut/compression/v2/test_pruner_torch.py
+8
-7
test/ut/compression/v2/test_pruning_tools_torch.py
test/ut/compression/v2/test_pruning_tools_torch.py
+8
-7
test/ut/compression/v2/test_scheduler.py
test/ut/compression/v2/test_scheduler.py
+0
-0
test/ut/compression/v2/test_task_generator.py
test/ut/compression/v2/test_task_generator.py
+1
-1
No files found.
nni/algorithms/compression/v2/pytorch/pruning/tools/task_generator.py
View file @
896c516f
...
...
@@ -229,8 +229,11 @@ class SimulatedAnnealingTaskGenerator(TaskGenerator):
if
target_sparsity
==
0
:
return
[],
[]
low_limit
=
0
while
True
:
random_sparsity
=
sorted
(
np
.
random
.
uniform
(
0
,
1
,
len
(
op_names
)))
# This is to speed up finding the legal sparsity.
low_limit
=
(
1
-
low_limit
)
*
0.05
+
low_limit
random_sparsity
=
sorted
(
np
.
random
.
uniform
(
low_limit
,
1
,
len
(
op_names
)))
rescaled_sparsity
=
self
.
_rescale_sparsity
(
random_sparsity
,
target_sparsity
,
op_names
)
if
rescaled_sparsity
is
not
None
and
rescaled_sparsity
[
0
]
>=
0
and
rescaled_sparsity
[
-
1
]
<
1
:
break
...
...
pipelines/fast-test.yml
View file @
896c516f
...
...
@@ -179,14 +179,14 @@ stages:
set -e
cd test
python -m pytest ut --cov-config=.coveragerc \
--ignore=ut/
sdk
/test_pruners.py \
--ignore=ut/
sdk
/test_compressor_tf.py \
--ignore=ut/
sdk
/test_compressor_torch.py \
--ignore=ut/
sdk
/test_model_speedup.py
python -m pytest ut/
sdk
/test_pruners.py --cov-config=.coveragerc --cov-append
python -m pytest ut/
sdk
/test_compressor_tf.py --cov-config=.coveragerc --cov-append
python -m pytest ut/
sdk
/test_compressor_torch.py --cov-config=.coveragerc --cov-append
python -m pytest ut/
sdk
/test_model_speedup.py --cov-config=.coveragerc --cov-append
--ignore=ut/
compression/v1
/test_pruners.py \
--ignore=ut/
compression/v1
/test_compressor_tf.py \
--ignore=ut/
compression/v1
/test_compressor_torch.py \
--ignore=ut/
compression/v1
/test_model_speedup.py
python -m pytest ut/
compression/v1
/test_pruners.py --cov-config=.coveragerc --cov-append
python -m pytest ut/
compression/v1
/test_compressor_tf.py --cov-config=.coveragerc --cov-append
python -m pytest ut/
compression/v1
/test_compressor_torch.py --cov-config=.coveragerc --cov-append
python -m pytest ut/
compression/v1
/test_model_speedup.py --cov-config=.coveragerc --cov-append
cp coverage.xml ../coverage/python.xml
displayName
:
Python unit test
...
...
test/ut/compression/__init__.py
0 → 100644
View file @
896c516f
test/ut/compression/v1/__init__.py
0 → 100644
View file @
896c516f
test/ut/
sdk
/test_compression_utils.py
→
test/ut/
compression/v1
/test_compression_utils.py
View file @
896c516f
File moved
test/ut/
sdk
/test_compressor_tf.py
→
test/ut/
compression/v1
/test_compressor_tf.py
View file @
896c516f
File moved
test/ut/
sdk
/test_compressor_torch.py
→
test/ut/
compression/v1
/test_compressor_torch.py
View file @
896c516f
File moved
test/ut/
sdk
/test_dependecy_aware.py
→
test/ut/
compression/v1
/test_dependecy_aware.py
View file @
896c516f
File moved
test/ut/
sdk
/test_model_speedup.py
→
test/ut/
compression/v1
/test_model_speedup.py
View file @
896c516f
File moved
test/ut/
sdk
/test_pruners.py
→
test/ut/
compression/v1
/test_pruners.py
View file @
896c516f
...
...
@@ -15,8 +15,8 @@ from nni.algorithms.compression.pytorch.pruning import LevelPruner, SlimPruner,
TaylorFOWeightFilterPruner
,
NetAdaptPruner
,
SimulatedAnnealingPruner
,
ADMMPruner
,
\
AutoCompressPruner
,
AMCPruner
sys
.
path
.
append
(
os
.
path
.
dirname
(
__file__
))
from
models.pytorch_models.mobilenet
import
MobileNet
sys
.
path
.
append
(
os
.
path
.
dirname
(
os
.
path
.
dirname
(
os
.
path
.
dirname
(
__file__
))
))
from
sdk.
models.pytorch_models.mobilenet
import
MobileNet
def
validate_sparsity
(
wrapper
,
sparsity
,
bias
=
False
):
masks
=
[
wrapper
.
weight_mask
]
...
...
test/ut/
sdk
/test_transformer_pruners.py
→
test/ut/
compression/v1
/test_transformer_pruners.py
View file @
896c516f
...
...
@@ -13,8 +13,8 @@ from unittest import TestCase, main
from
nni.algorithms.compression.pytorch.pruning
import
TransformerHeadPruner
sys
.
path
.
append
(
os
.
path
.
dirname
(
__file__
))
from
models.pytorch_models.transformer
import
TransformerEncoder
sys
.
path
.
append
(
os
.
path
.
dirname
(
os
.
path
.
dirname
(
os
.
path
.
dirname
(
__file__
))
))
from
sdk.
models.pytorch_models.transformer
import
TransformerEncoder
def
validate_sparsity
(
wrapper
,
sparsity
,
bias
=
False
):
...
...
test/ut/compression/v2/__init__.py
0 → 100644
View file @
896c516f
test/ut/
sdk
/test_
v2_
iterative_pruner_torch.py
→
test/ut/
compression/v2
/test_iterative_pruner_torch.py
View file @
896c516f
...
...
@@ -41,6 +41,7 @@ class TorchModel(torch.nn.Module):
def
trainer
(
model
,
optimizer
,
criterion
):
model
.
train
()
for
_
in
range
(
10
):
input
=
torch
.
rand
(
10
,
1
,
28
,
28
)
label
=
torch
.
Tensor
(
list
(
range
(
10
))).
type
(
torch
.
LongTensor
)
optimizer
.
zero_grad
()
...
...
@@ -65,7 +66,7 @@ class IterativePrunerTestCase(unittest.TestCase):
def
test_linear_pruner
(
self
):
model
=
TorchModel
()
config_list
=
[{
'op_types'
:
[
'Conv2d'
],
'sparsity'
:
0.8
}]
pruner
=
LinearPruner
(
model
,
config_list
,
'level'
,
3
,
log_dir
=
'../../logs'
)
pruner
=
LinearPruner
(
model
,
config_list
,
'level'
,
3
,
log_dir
=
'../../
../
logs'
)
pruner
.
compress
()
_
,
pruned_model
,
masks
,
_
,
_
=
pruner
.
get_best_result
()
sparsity_list
=
compute_sparsity_mask2compact
(
pruned_model
,
masks
,
config_list
)
...
...
@@ -74,7 +75,7 @@ class IterativePrunerTestCase(unittest.TestCase):
def
test_agp_pruner
(
self
):
model
=
TorchModel
()
config_list
=
[{
'op_types'
:
[
'Conv2d'
],
'sparsity'
:
0.8
}]
pruner
=
AGPPruner
(
model
,
config_list
,
'level'
,
3
,
log_dir
=
'../../logs'
)
pruner
=
AGPPruner
(
model
,
config_list
,
'level'
,
3
,
log_dir
=
'../../
../
logs'
)
pruner
.
compress
()
_
,
pruned_model
,
masks
,
_
,
_
=
pruner
.
get_best_result
()
sparsity_list
=
compute_sparsity_mask2compact
(
pruned_model
,
masks
,
config_list
)
...
...
@@ -83,7 +84,7 @@ class IterativePrunerTestCase(unittest.TestCase):
def
test_lottery_ticket_pruner
(
self
):
model
=
TorchModel
()
config_list
=
[{
'op_types'
:
[
'Conv2d'
],
'sparsity'
:
0.8
}]
pruner
=
LotteryTicketPruner
(
model
,
config_list
,
'level'
,
3
,
log_dir
=
'../../logs'
)
pruner
=
LotteryTicketPruner
(
model
,
config_list
,
'level'
,
3
,
log_dir
=
'../../
../
logs'
)
pruner
.
compress
()
_
,
pruned_model
,
masks
,
_
,
_
=
pruner
.
get_best_result
()
sparsity_list
=
compute_sparsity_mask2compact
(
pruned_model
,
masks
,
config_list
)
...
...
@@ -92,7 +93,7 @@ class IterativePrunerTestCase(unittest.TestCase):
def
test_simulated_annealing_pruner
(
self
):
model
=
TorchModel
()
config_list
=
[{
'op_types'
:
[
'Conv2d'
],
'sparsity'
:
0.8
}]
pruner
=
SimulatedAnnealingPruner
(
model
,
config_list
,
evaluator
,
start_temperature
=
40
,
log_dir
=
'../../logs'
)
pruner
=
SimulatedAnnealingPruner
(
model
,
config_list
,
evaluator
,
start_temperature
=
40
,
log_dir
=
'../../
../
logs'
)
pruner
.
compress
()
_
,
pruned_model
,
masks
,
_
,
_
=
pruner
.
get_best_result
()
sparsity_list
=
compute_sparsity_mask2compact
(
pruned_model
,
masks
,
config_list
)
...
...
@@ -112,7 +113,7 @@ class IterativePrunerTestCase(unittest.TestCase):
'evaluator'
:
evaluator
,
'start_temperature'
:
40
}
pruner
=
AutoCompressPruner
(
model
,
config_list
,
10
,
admm_params
,
sa_params
=
sa_params
,
log_dir
=
'../../logs'
)
pruner
=
AutoCompressPruner
(
model
,
config_list
,
10
,
admm_params
,
sa_params
=
sa_params
,
log_dir
=
'../../
../
logs'
)
pruner
.
compress
()
_
,
pruned_model
,
masks
,
_
,
_
=
pruner
.
get_best_result
()
sparsity_list
=
compute_sparsity_mask2compact
(
pruned_model
,
masks
,
config_list
)
...
...
test/ut/
sdk
/test_
v2_
pruner_torch.py
→
test/ut/
compression/v2
/test_pruner_torch.py
View file @
896c516f
...
...
@@ -44,6 +44,7 @@ class TorchModel(torch.nn.Module):
def
trainer
(
model
,
optimizer
,
criterion
):
model
.
train
()
for
_
in
range
(
10
):
input
=
torch
.
rand
(
10
,
1
,
28
,
28
)
label
=
torch
.
Tensor
(
list
(
range
(
10
))).
type
(
torch
.
LongTensor
)
optimizer
.
zero_grad
()
...
...
test/ut/
sdk
/test_
v2_
pruning_tools_torch.py
→
test/ut/
compression/v2
/test_pruning_tools_torch.py
View file @
896c516f
...
...
@@ -50,6 +50,7 @@ class TorchModel(torch.nn.Module):
def
trainer
(
model
,
optimizer
,
criterion
):
model
.
train
()
for
_
in
range
(
10
):
input
=
torch
.
rand
(
10
,
1
,
28
,
28
)
label
=
torch
.
Tensor
(
list
(
range
(
10
))).
type
(
torch
.
LongTensor
)
optimizer
.
zero_grad
()
...
...
test/ut/
sdk
/test_
v2_
scheduler.py
→
test/ut/
compression/v2
/test_scheduler.py
View file @
896c516f
File moved
test/ut/
sdk
/test_
v2_
task_generator.py
→
test/ut/
compression/v2
/test_task_generator.py
View file @
896c516f
...
...
@@ -7,7 +7,7 @@ import unittest
import
torch
import
torch.nn.functional
as
F
from
nni.algorithms.compression.v2.pytorch.base
import
Task
,
TaskResult
from
nni.algorithms.compression.v2.pytorch.base
import
TaskResult
from
nni.algorithms.compression.v2.pytorch.pruning.tools
import
(
AGPTaskGenerator
,
LinearTaskGenerator
,
...
...
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