Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Info logs to console and debug logs to file #1861

Merged
merged 31 commits into from
Dec 11, 2023

Conversation

rahul-tuli
Copy link
Member

@rahul-tuli rahul-tuli commented Nov 28, 2023

Before this PR, the streamhandler was not created properly because filehandler is also a streamhandler; thus info logs were not printed to console:

Test Code:

from sparseml.core import LoggerManager

def run():
    logger_manager = LoggerManager()
    logging_method_names = ["info", "debug", "critical", "error", "warning"]
    
    get_method_string = lambda method_name: f"{method_name} tag"
    get_method_tag = lambda method_name: f"{method_name} message"
    
    for method_name in logging_method_names:
        # will fail if method does not exist
        method = getattr(logger_manager, method_name)
        method(string=get_method_string(method_name), tag=get_method_tag(method_name))


run()

Output initially(without this PR) :

python local.py                                                                            (info-logs-to-console-everything-to-file|✚1…2⚑4)
Logging all SparseML modifier-level logs to sparse_logs/28-11-2023_14.32.47.log
2023-11-28 14:32:47 sparseml.core.logger INFO     Logging all SparseML modifier-level logs to sparse_logs/28-11-2023_14.32.47.log

Output now(with this PR):

python local.py                                                                            (info-logs-to-console-everything-to-file|✚1…2⚑4)
Logging all SparseML modifier-level logs to sparse_logs/28-11-2023_14.32.47.log
2023-11-28 14:32:47 sparseml.core.logger INFO     Logging all SparseML modifier-level logs to sparse_logs/28-11-2023_14.32.47.log
python info message step None: info tag
python critical message step None: critical tag
python error message step None: error tag
python warning message step None: warning tag

Now everything above debug logs is outputted to the console.

The log file still contains all logs (including debug logs)
file contents:

Logging all SparseML modifier-level logs to sparse_logs/28-11-2023_14.40.14.log
python info message step None: info tag
python debug message [None - 1701200414.3932433]: debug tag
python critical message step None: critical tag
python error message step None: error tag
python warning message step None: warning tag

A pytest to check this behavior:

import logging

from sparseml.core.logger import LoggerManager


def test_only_info_logs_are_sent_to_stdout(capsys):
    logger_manager = LoggerManager()

    # set propagate to True to ensure that
    # logs are sent to capsys
    for logger in logger_manager.loggers:
        assert logger.logger.hasHandlers()
        logger.logger.propagate = True

    logging_method_names = ["info", "debug", "critical", "error", "warning"]

    get_method_string = lambda method_name: f"{method_name} tag"
    get_method_tag = lambda method_name: f"{method_name} message"

    for method_name in logging_method_names:
        # will fail if method does not exist
        method = getattr(logger_manager, method_name)
        method(string=get_method_string(method_name), tag=get_method_tag(method_name))

    console_output = capsys.readouterr().err

    # debug logs not should be sent to stdout
    assert get_method_tag("debug") not in console_output

    for method_name in logging_method_names:
        if method_name == "debug":
            continue
        assert get_method_tag(method_name) in console_output
        assert get_method_string(method_name) in console_output

    # all logs should be sent to file
    for logger in logger_manager.loggers:
        _logger = logger.logger
        if any(
            isinstance(file_handler := handler, logging.FileHandler)
            for handler in _logger.handlers
        ):
            log_file_content = open(file_handler.baseFilename, "r").read().strip()

            assert all(
                get_method_tag(method_name) in log_file_content
                and get_method_string(method_name) in log_file_content
                for method_name in logging_method_names
            )

Pytest output:

pytest -vv tests/sparseml/core/test_logger_file_and_stdout.py   


====================================================== 1 passed, 104 warnings in 3.90s =======================================================

Unfortunately I could not add this pytest into the main repo, due to some capsys issue where when this test was run in conjunction with other tests the capsys output was empty. But when run standalone this test passes (proof is above) (It's probably related to proper setups and teardowns of loggers b/w tests)


- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests
to better conform to python's  `logging.Logger`
Base automatically changed from add-logging-convenience-methods to logger-framework December 11, 2023 15:29
@rahul-tuli rahul-tuli merged commit 776c0ce into logger-framework Dec 11, 2023
@rahul-tuli rahul-tuli deleted the info-logs-to-console-everything-to-file branch December 11, 2023 15:29
rahul-tuli added a commit that referenced this pull request Jan 11, 2024
author Rahul Tuli <rahul@neuralmagic.com> 1702308513 -0500
committer rahul-tuli <rahul@neuralmagic.com> 1704999325 -0500

[Feature] Add Model Level Logs to new Framework (#1783)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

`[Feature][Logger Framework]` Add convenience methods for logging strings (#1855)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

[Feature] Info logs to console and debug logs to file (#1861)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

* Move FileHandler creation above StreamHandler creation

* Remove missed comment

[Move] logger into it's own package (#1924)

improves structure and separation of concerns

Add local logs directory to .gitignore (#1925)

[Add] frequency_manager to check log "readiness" (#1927)

* Add frequency_manager to check log "readiness"

* Refactor condition to be more readable

[Logger Framework][Add] mode and frequency type to FrequencyManager (#1930)

* Add mode and frequency type to FrequencyManager

* move tests cases near the test
rahul-tuli added a commit that referenced this pull request Jan 19, 2024
* parent 5007b8c
author Rahul Tuli <rahul@neuralmagic.com> 1702308513 -0500
committer rahul-tuli <rahul@neuralmagic.com> 1704999325 -0500

[Feature] Add Model Level Logs to new Framework (#1783)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

`[Feature][Logger Framework]` Add convenience methods for logging strings (#1855)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

[Feature] Info logs to console and debug logs to file (#1861)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

* Move FileHandler creation above StreamHandler creation

* Remove missed comment

[Move] logger into it's own package (#1924)

improves structure and separation of concerns

Add local logs directory to .gitignore (#1925)

[Add] frequency_manager to check log "readiness" (#1927)

* Add frequency_manager to check log "readiness"

* Refactor condition to be more readable

[Logger Framework][Add] mode and frequency type to FrequencyManager (#1930)

* Add mode and frequency type to FrequencyManager

* move tests cases near the test

* Style

* [Use] frequency manager in logger (#1931)

* Make log_frequency a property of FrequencyManager
Add FrequencyManager to LoggerManager
Add log_wriiten and model_updated to LoggerManager

* [Set] [OLD MODIFIERS]
_last_log_epoch to None

* Update old modifiers to use named arguments to log_ready

* [Update][Rename]
* `PossibleLoggingMode` --> `LoggingModeType`
* `PossibleFrequencyType` --> `FrequencyType`

* Fix log format when step is None (#1933)

* [Add] Wrap System and Metric Logging into it's own classes (#1932)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* [Logger Refactor] Session based Logs (#1920)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add session level logs

* [Logger Framework] Log Losses (#1934)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add logs for loss

* Add test

* Use Sparsification Group logger (#1936)

* Save last log step
Add a stateless log_ready method

* log only when loss is not None

* Add tb style logging functions (#1919)

* Add wandb log function (#1918)

* [Test Update] Fix failing tests after adding back old logger (#1963)

* [Logger Refactor] Add timer in logger manager (#1967)

* Add timer in logger manager

* Address review comments

* update docstring

* fix argument
rahul-tuli added a commit that referenced this pull request Jan 19, 2024
* parent 5007b8c
author Rahul Tuli <rahul@neuralmagic.com> 1702308513 -0500
committer rahul-tuli <rahul@neuralmagic.com> 1704999325 -0500

[Feature] Add Model Level Logs to new Framework (#1783)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

`[Feature][Logger Framework]` Add convenience methods for logging strings (#1855)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

[Feature] Info logs to console and debug logs to file (#1861)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

* Move FileHandler creation above StreamHandler creation

* Remove missed comment

[Move] logger into it's own package (#1924)

improves structure and separation of concerns

Add local logs directory to .gitignore (#1925)

[Add] frequency_manager to check log "readiness" (#1927)

* Add frequency_manager to check log "readiness"

* Refactor condition to be more readable

[Logger Framework][Add] mode and frequency type to FrequencyManager (#1930)

* Add mode and frequency type to FrequencyManager

* move tests cases near the test

* Style

* [Use] frequency manager in logger (#1931)

* Make log_frequency a property of FrequencyManager
Add FrequencyManager to LoggerManager
Add log_wriiten and model_updated to LoggerManager

* [Set] [OLD MODIFIERS]
_last_log_epoch to None

* Update old modifiers to use named arguments to log_ready

* [Update][Rename]
* `PossibleLoggingMode` --> `LoggingModeType`
* `PossibleFrequencyType` --> `FrequencyType`

* Fix log format when step is None (#1933)

* [Add] Wrap System and Metric Logging into it's own classes (#1932)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* [Logger Refactor] Session based Logs (#1920)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add session level logs

* [Logger Framework] Log Losses (#1934)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add logs for loss

* Add test

* Use Sparsification Group logger (#1936)

* Save last log step
Add a stateless log_ready method

* log only when loss is not None

* Add tb style logging functions (#1919)

* Add wandb log function (#1918)

* [Test Update] Fix failing tests after adding back old logger (#1963)

* [Logger Refactor] Add timer in logger manager (#1967)

* Add timer in logger manager

* Address review comments

* update docstring

* fix argument
rahul-tuli added a commit that referenced this pull request Jan 22, 2024
* parent 5007b8c
author Rahul Tuli <rahul@neuralmagic.com> 1702308513 -0500
committer rahul-tuli <rahul@neuralmagic.com> 1704999325 -0500

[Feature] Add Model Level Logs to new Framework (#1783)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

`[Feature][Logger Framework]` Add convenience methods for logging strings (#1855)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

[Feature] Info logs to console and debug logs to file (#1861)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

* Move FileHandler creation above StreamHandler creation

* Remove missed comment

[Move] logger into it's own package (#1924)

improves structure and separation of concerns

Add local logs directory to .gitignore (#1925)

[Add] frequency_manager to check log "readiness" (#1927)

* Add frequency_manager to check log "readiness"

* Refactor condition to be more readable

[Logger Framework][Add] mode and frequency type to FrequencyManager (#1930)

* Add mode and frequency type to FrequencyManager

* move tests cases near the test

* Style

* [Use] frequency manager in logger (#1931)

* Make log_frequency a property of FrequencyManager
Add FrequencyManager to LoggerManager
Add log_wriiten and model_updated to LoggerManager

* [Set] [OLD MODIFIERS]
_last_log_epoch to None

* Update old modifiers to use named arguments to log_ready

* [Update][Rename]
* `PossibleLoggingMode` --> `LoggingModeType`
* `PossibleFrequencyType` --> `FrequencyType`

* Fix log format when step is None (#1933)

* [Add] Wrap System and Metric Logging into it's own classes (#1932)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* [Logger Refactor] Session based Logs (#1920)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add session level logs

* [Logger Framework] Log Losses (#1934)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add logs for loss

* Add test

* Use Sparsification Group logger (#1936)

* Save last log step
Add a stateless log_ready method

* log only when loss is not None

* Add tb style logging functions (#1919)

* Add wandb log function (#1918)

* [Test Update] Fix failing tests after adding back old logger (#1963)

* [Logger Refactor] Add timer in logger manager (#1967)

* Add timer in logger manager

* Address review comments

* update docstring

* fix argument
bfineran pushed a commit that referenced this pull request Jan 22, 2024
* parent 5007b8c
author Rahul Tuli <rahul@neuralmagic.com> 1702308513 -0500
committer rahul-tuli <rahul@neuralmagic.com> 1704999325 -0500

[Feature] Add Model Level Logs to new Framework (#1783)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

`[Feature][Logger Framework]` Add convenience methods for logging strings (#1855)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

[Feature] Info logs to console and debug logs to file (#1861)

* Empty commit

* - Add loggable_items in ModifiableModel Contract
- Add pytorch implementation od loggable_items
- Attach logger to state
- Make changes in lifecycle convenience functions to include loggers
- Add log_model_info method in Modifier which is called on
each `update_event` but logs only on epoch end

* - Move log call at the end of update_event
- Remove extra space

* - Move model level logging responsibility to
`ModelLoggingMixin_`

* - Style

* - Update docstring

* - Move mixin to it's own file

* - Add test

* - update logic to check epoch end

* - Add more tests

* - log model level logs at session level
- filter logs to only include percentages
- filter logs to only include params with non zero sparsity
- filter logs to include only quantized modules
- LoggerMixin functions to helpers.py

* - Expose model log cadence
- Propagate cadence via session to state and loggers
- log model info in session
- update log condition in logger.py

* - Migrate tests

* Fix epoch number logging

* - fix failing test

* Address review comments!

* Remove event_type from should log model info

* Update docstring

* Style

* mock _log_model_info

* Move to using log scalar over log string
Do not log at last_log_epoch but only if current epoch has reached specified cadence
Remove model log cadence
Style
Update tests

* Adds convenience methods to logger manager
to better conform to python's  `logging.Logger`

* Move FileHandler creation above StreamHandler creation

* Remove missed comment

[Move] logger into it's own package (#1924)

improves structure and separation of concerns

Add local logs directory to .gitignore (#1925)

[Add] frequency_manager to check log "readiness" (#1927)

* Add frequency_manager to check log "readiness"

* Refactor condition to be more readable

[Logger Framework][Add] mode and frequency type to FrequencyManager (#1930)

* Add mode and frequency type to FrequencyManager

* move tests cases near the test

* Style

* [Use] frequency manager in logger (#1931)

* Make log_frequency a property of FrequencyManager
Add FrequencyManager to LoggerManager
Add log_wriiten and model_updated to LoggerManager

* [Set] [OLD MODIFIERS]
_last_log_epoch to None

* Update old modifiers to use named arguments to log_ready

* [Update][Rename]
* `PossibleLoggingMode` --> `LoggingModeType`
* `PossibleFrequencyType` --> `FrequencyType`

* Fix log format when step is None (#1933)

* [Add] Wrap System and Metric Logging into it's own classes (#1932)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* [Logger Refactor] Session based Logs (#1920)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add session level logs

* [Logger Framework] Log Losses (#1934)

* Add __repr__
Move string logging functions to SystemLoggingWrapper
Move metric logging functions to MetricLoggingWrapper

* minor fixes

* Remove warnings

* Add back old logger

* Add logs for loss

* Add test

* Use Sparsification Group logger (#1936)

* Save last log step
Add a stateless log_ready method

* log only when loss is not None

* Add tb style logging functions (#1919)

* Add wandb log function (#1918)

* [Test Update] Fix failing tests after adding back old logger (#1963)

* [Logger Refactor] Add timer in logger manager (#1967)

* Add timer in logger manager

* Address review comments

* update docstring

* fix argument
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants