From 3aa2fa96eef0e11d7aabbe13d838a67a5c003c45 Mon Sep 17 00:00:00 2001 From: Mark Kurtz Date: Wed, 12 May 2021 17:11:00 -0400 Subject: [PATCH 1/3] Fix bugs with ScheduledOptimizer and pytorch scheduler refactor --- src/sparseml/pytorch/optim/modifier.py | 4 +--- src/sparseml/pytorch/optim/optimizer.py | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/sparseml/pytorch/optim/modifier.py b/src/sparseml/pytorch/optim/modifier.py index 907867c583d..55ac01bace4 100644 --- a/src/sparseml/pytorch/optim/modifier.py +++ b/src/sparseml/pytorch/optim/modifier.py @@ -196,9 +196,7 @@ def initialize( for individual modifiers. """ self._initialized = True - - if loggers: - self.initialize_loggers(loggers) + self.initialize_loggers(loggers) def initialize_loggers(self, loggers: Union[None, List[BaseLogger]]): """ diff --git a/src/sparseml/pytorch/optim/optimizer.py b/src/sparseml/pytorch/optim/optimizer.py index 02a2def1eb5..cdb9788e7de 100644 --- a/src/sparseml/pytorch/optim/optimizer.py +++ b/src/sparseml/pytorch/optim/optimizer.py @@ -81,11 +81,11 @@ def __init__( ): # do not call into super since this instance is not passing all calls to # the nested optimizer - warnings.warn( - "ScheduledOptimizer is deprecated and will be deleted in the future. " - "Please replace with manager.modify", - UserWarning, - ) + # warnings.warn( + # "ScheduledOptimizer is deprecated and will be deleted in the future. " + # "Please replace with manager.modify", + # UserWarning, + # ) TODO: uncomment in next release once docs are ready manager.initialize(module, epoch=0.0, loggers=loggers) self._wrapper = RecipeManagerStepWrapper( @@ -107,7 +107,7 @@ def __getattr__(self, item): if item in self.__dict__: return getattr(self, item) - return getattr(self._wrapped, item) + return getattr(self._wrapper.wrapped_optimizer, item) def __setattr__(self, key, value): if key in [ @@ -118,7 +118,7 @@ def __setattr__(self, key, value): ]: super().__setattr__(key, value) else: - setattr(self._optimizer, key, value) + setattr(self._wrapper.wrapped_optimizer, key, value) @property def learning_rate(self) -> float: @@ -126,7 +126,7 @@ def learning_rate(self) -> float: :return: convenience function to get the first learning rate for any of the param groups in the optimizer """ - return get_optim_learning_rate(self._optimizer) + return get_optim_learning_rate(self._wrapper.wrapped_optimizer) @learning_rate.setter def learning_rate(self, value: float): @@ -134,7 +134,7 @@ def learning_rate(self, value: float): :param value: the learning rate to set for the optimizer, will set all param groups in the optim to this value """ - set_optim_learning_rate(self._optimizer, value) + set_optim_learning_rate(self._wrapper.wrapped_optimizer, value) @property def manager(self) -> ScheduledModifierManager: @@ -144,10 +144,10 @@ def manager(self) -> ScheduledModifierManager: return self._wrapper.wrapped_manager def manager_state_dict(self): - return self._manager.state_dict() + return self._wrapper.wrapped_manager.state_dict() def load_manager_state_dict(self, state_dict): - self._manager.load_state_dict(state_dict) + self._wrapper.wrapped_manager.load_state_dict(state_dict) def step(self, closure=None): """ From d5c7314de1f6feb4d83ae13cec17d2c01207d7ed Mon Sep 17 00:00:00 2001 From: Mark Kurtz Date: Wed, 12 May 2021 17:18:50 -0400 Subject: [PATCH 2/3] fix test cases for updated log_update initialization --- notebooks/pytorch_classification.ipynb | 355 +++++++++++++++++- tests/sparseml/pytorch/optim/test_modifier.py | 10 - 2 files changed, 345 insertions(+), 20 deletions(-) diff --git a/notebooks/pytorch_classification.ipynb b/notebooks/pytorch_classification.ipynb index cdb71ebb0c9..255bc5c638e 100644 --- a/notebooks/pytorch_classification.ipynb +++ b/notebooks/pytorch_classification.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -62,9 +62,284 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loading model...\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b79a138cd5f24ec685ebe1f2a2a4eaa1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "downloading...: 0%| | 0/94371997 [00:00 Date: Wed, 12 May 2021 17:20:53 -0400 Subject: [PATCH 3/3] revert changes to classification notebook --- notebooks/pytorch_classification.ipynb | 355 +------------------------ 1 file changed, 10 insertions(+), 345 deletions(-) diff --git a/notebooks/pytorch_classification.ipynb b/notebooks/pytorch_classification.ipynb index 255bc5c638e..cdb71ebb0c9 100644 --- a/notebooks/pytorch_classification.ipynb +++ b/notebooks/pytorch_classification.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -62,284 +62,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "loading model...\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b79a138cd5f24ec685ebe1f2a2a4eaa1", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "downloading...: 0%| | 0/94371997 [00:00