Sanitize `None` params during pruning (#6836)
* sanitize none params during pruning * amend
This commit is contained in:
parent
264aa689de
commit
c3da7f50bb
|
@ -170,6 +170,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
|
|||
|
||||
### Fixed
|
||||
|
||||
- Sanitize `None` params during pruning ([#6836](https://github.com/PyTorchLightning/pytorch-lightning/pull/6836))
|
||||
|
||||
|
||||
- Made the `Plugin.reduce` method more consistent across all Plugins to reflect a mean-reduction by default ([#6011](https://github.com/PyTorchLightning/pytorch-lightning/pull/6011))
|
||||
|
||||
|
||||
|
|
|
@ -422,7 +422,9 @@ class ModelPruning(Callback):
|
|||
current_modules = [m for m in pl_module.modules() if not isinstance(m, _MODULE_CONTAINERS)]
|
||||
|
||||
if parameters_to_prune is None:
|
||||
parameters_to_prune = [(m, p) for p in parameters for m in current_modules if hasattr(m, p)]
|
||||
parameters_to_prune = [
|
||||
(m, p) for p in parameters for m in current_modules if getattr(m, p, None) is not None
|
||||
]
|
||||
elif (
|
||||
isinstance(parameters_to_prune, (list, tuple)) and len(parameters_to_prune) > 0
|
||||
and all(len(p) == 2 for p in parameters_to_prune)
|
||||
|
|
|
@ -36,7 +36,7 @@ class TestModel(BoringModel):
|
|||
self.layer = Sequential(
|
||||
OrderedDict([
|
||||
("mlp_1", nn.Linear(32, 32)),
|
||||
("mlp_2", nn.Linear(32, 32)),
|
||||
("mlp_2", nn.Linear(32, 32, bias=False)),
|
||||
("mlp_3", nn.Linear(32, 2)),
|
||||
])
|
||||
)
|
||||
|
@ -85,7 +85,10 @@ def train_with_pruning_callback(
|
|||
if parameters_to_prune:
|
||||
pruning_kwargs["parameters_to_prune"] = [(model.layer.mlp_1, "weight"), (model.layer.mlp_2, "weight")]
|
||||
else:
|
||||
pruning_kwargs["parameter_names"] = ["weight"]
|
||||
if isinstance(pruning_fn, str) and pruning_fn.endswith("_structured"):
|
||||
pruning_kwargs["parameter_names"] = ["weight"]
|
||||
else:
|
||||
pruning_kwargs["parameter_names"] = ["weight", "bias"]
|
||||
if isinstance(pruning_fn, str) and pruning_fn.endswith("_structured"):
|
||||
pruning_kwargs["pruning_dim"] = 0
|
||||
if pruning_fn == "ln_structured":
|
||||
|
@ -249,14 +252,14 @@ def test_multiple_pruning_callbacks(tmpdir, caplog, make_pruning_permanent: bool
|
|||
actual = [m for m in actual if m.startswith("Applied")]
|
||||
assert actual == [
|
||||
"Applied `L1Unstructured`. Pruned: 0/1122 (0.00%) -> 544/1122 (48.48%)",
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=32, bias=True).weight` with amount=0.5. Pruned: 0 (0.00%) -> 506 (49.41%)", # noqa: E501
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=2, bias=True).weight` with amount=0.5. Pruned: 0 (0.00%) -> 38 (59.38%)", # noqa: E501
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=32, bias=True).weight` with amount=0.5. Pruned: 0 (0.00%) -> 500 (48.83%)", # noqa: E501
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=2, bias=True).weight` with amount=0.5. Pruned: 0 (0.00%) -> 44 (68.75%)", # noqa: E501
|
||||
"Applied `RandomUnstructured`. Pruned: 544/1122 (48.48%) -> 680/1122 (60.61%)",
|
||||
"Applied `RandomUnstructured` to `Linear(in_features=32, out_features=32, bias=True).weight` with amount=0.25. Pruned: 506 (49.41%) -> 633 (61.82%)", # noqa: E501
|
||||
"Applied `RandomUnstructured` to `Linear(in_features=32, out_features=2, bias=True).weight` with amount=0.25. Pruned: 38 (59.38%) -> 47 (73.44%)", # noqa: E501
|
||||
"Applied `RandomUnstructured` to `Linear(in_features=32, out_features=32, bias=True).weight` with amount=0.25. Pruned: 500 (48.83%) -> 635 (62.01%)", # noqa: E501
|
||||
"Applied `RandomUnstructured` to `Linear(in_features=32, out_features=2, bias=True).weight` with amount=0.25. Pruned: 44 (68.75%) -> 45 (70.31%)", # noqa: E501
|
||||
"Applied `L1Unstructured`. Pruned: 680/1122 (60.61%) -> 884/1122 (78.79%)",
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=32, bias=True).weight` with amount=0.5. Pruned: 633 (61.82%) -> 828 (80.86%)", # noqa: E501
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=2, bias=True).weight` with amount=0.5. Pruned: 47 (73.44%) -> 56 (87.50%)", # noqa: E501
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=32, bias=True).weight` with amount=0.5. Pruned: 635 (62.01%) -> 830 (81.05%)", # noqa: E501
|
||||
"Applied `L1Unstructured` to `Linear(in_features=32, out_features=2, bias=True).weight` with amount=0.5. Pruned: 45 (70.31%) -> 54 (84.38%)", # noqa: E501
|
||||
]
|
||||
|
||||
filepath = str(tmpdir / "foo.ckpt")
|
||||
|
|
Loading…
Reference in New Issue