Fix for an override failure of nv-one-logger-pytorch-lightning-integration with Python 3.14
This should be a GitHub issue on https://github.com/NVIDIA/nv-one-logger/blob/main/nv_one_logger/one_logger_pytorch_lightning_integration/src/nv_one_logger/training_telemetry/integration/pytorch_lightning.py but Nvidia is not interested. So, for posterity and my own future self, I’ll put it here.
(PS: Just kidding, this is probably one of the third parties being a bit overzealous.)
To replicate, run the following
import nemo
print(nemo.__version__)
import nemo.collections.asr as nemo_asr
print([model for model in dir(nemo_asr.models) if model.endswith("Model")])
to get:
Traceback (most recent call last):
File "/DATA/borys/specific-voice-classifier/test.py", line 4, in <module>
import nemo.collections.asr as nemo_asr
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/collections/asr/__init__.py", line 15, in <module>
from nemo.collections.asr import data, losses, models, modules
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/collections/asr/losses/__init__.py", line 15, in <module>
from nemo.collections.asr.losses.angularloss import AngularSoftmaxLoss
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/collections/asr/losses/angularloss.py", line 18, in <module>
from nemo.core.classes import Loss, Typing, typecheck
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/core/__init__.py", line 16, in <module>
from nemo.core.classes import *
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/core/classes/__init__.py", line 33, in <module>
from nemo.core.classes.modelPT import ModelPT
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/core/classes/modelPT.py", line 51, in <module>
from nemo.lightning.callback_group import CallbackGroup
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/__init__.py", line 28, in <module>
from nemo.lightning.fabric.strategies import FabricMegatronStrategy
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/fabric/strategies.py", line 70, in <module>
from nemo.lightning.pytorch.strategies import MegatronStrategy
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/pytorch/strategies/__init__.py", line 15, in <module>
from nemo.lightning.pytorch.strategies.fsdp2_strategy import FSDP2Strategy
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/pytorch/strategies/fsdp2_strategy.py", line 37, in <module>
from nemo.lightning.pytorch.strategies.utils import (
...<4 lines>...
)
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/pytorch/strategies/utils.py", line 51, in <module>
from nemo.lightning.pytorch.callbacks import MegatronProgressBar, ProgressPrinter
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/pytorch/callbacks/__init__.py", line 22, in <module>
from nemo.lightning.pytorch.callbacks.model_checkpoint import ModelCheckpoint
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/pytorch/callbacks/model_checkpoint.py", line 30, in <module>
from nemo.lightning.callback_group import CallbackGroup
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/callback_group.py", line 21, in <module>
from nemo.lightning.one_logger_callback import OneLoggerNeMoCallback
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nemo/lightning/one_logger_callback.py", line 29, in <module>
from nv_one_logger.training_telemetry.integration.pytorch_lightning import TimeEventCallback as OneLoggerPTLCallback
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nv_one_logger/training_telemetry/integration/pytorch_lightning.py", line 251, in <module>
class OneLoggerPTLTrainer(Trainer):
...<52 lines>...
return self._nv_one_logger_callback
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/nv_one_logger/training_telemetry/integration/pytorch_lightning.py", line 274, in OneLoggerPTLTrainer
@override
^^^^^^^^
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/overrides/overrides.py", line 143, in override
return _overrides(method, check_signature, check_at_runtime)
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/overrides/overrides.py", line 172, in _overrides
_validate_method(method, super_class, check_signature)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/overrides/overrides.py", line 191, in _validate_method
ensure_signature_is_compatible(super_method, method, is_static)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/overrides/signature.py", line 104, in ensure_signature_is_compatible
ensure_all_kwargs_defined_in_sub(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
super_sig, sub_sig, super_type_hints, sub_type_hints, is_static, method_name
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/DATA/borys/specific-voice-classifier/.venv/lib/python3.14/site-packages/overrides/signature.py", line 165, in ensure_all_kwargs_defined_in_sub
raise TypeError(
f"`{method_name}: {name} must be a supertype of `{super_param.annotation}` but is `{sub_param.annotation}`"
)
TypeError: `OneLoggerPTLTrainer.save_checkpoint: weights_only must be a supertype of `bool | None` but is `<class 'bool'>`
To fix, add an expanded type suggestion to the definition of OneLoggerPTLTrainer.save_checkpoint: weights_only in pytorch_lightning.py. So change line 275 from
def save_checkpoint(self, filepath: Union[str, Path], weights_only: bool = False, storage_options: Optional[Any] = None) -> None:
to
def save_checkpoint(self, filepath: Union[str, Path], weights_only: bool | None = False, storage_options: Optional[Any] = None) -> None:
Not exactly a genius-level find, I know, but this bug wasted me a good 15 minutes to track down and there is nothing else out there about it.