nshtrainer 0.29.1__tar.gz → 0.30.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/PKG-INFO +1 -1
  2. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/pyproject.toml +1 -1
  3. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/__init__.py +1 -0
  4. nshtrainer-0.30.1/src/nshtrainer/config/__init__.py +3 -0
  5. nshtrainer-0.30.1/src/nshtrainer/config/duration.py +31 -0
  6. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/lr_scheduler/linear_warmup_cosine.py +13 -9
  7. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/README.md +0 -0
  8. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/_callback.py +0 -0
  9. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/_checkpoint/loader.py +0 -0
  10. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/_checkpoint/metadata.py +0 -0
  11. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/_checkpoint/saver.py +0 -0
  12. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/_experimental/__init__.py +0 -0
  13. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/_hf_hub.py +0 -0
  14. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/__init__.py +0 -0
  15. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/_throughput_monitor_callback.py +0 -0
  16. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/actsave.py +0 -0
  17. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/base.py +0 -0
  18. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/checkpoint/__init__.py +0 -0
  19. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/checkpoint/_base.py +0 -0
  20. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/checkpoint/best_checkpoint.py +0 -0
  21. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/checkpoint/last_checkpoint.py +0 -0
  22. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/checkpoint/on_exception_checkpoint.py +0 -0
  23. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/early_stopping.py +0 -0
  24. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/ema.py +0 -0
  25. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/finite_checks.py +0 -0
  26. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/gradient_skipping.py +0 -0
  27. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/interval.py +0 -0
  28. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/log_epoch.py +0 -0
  29. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/norm_logging.py +0 -0
  30. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/print_table.py +0 -0
  31. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/throughput_monitor.py +0 -0
  32. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/timer.py +0 -0
  33. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/callbacks/wandb_watch.py +0 -0
  34. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/data/__init__.py +0 -0
  35. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/data/balanced_batch_sampler.py +0 -0
  36. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/data/transform.py +0 -0
  37. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/__init__.py +0 -0
  38. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/_experimental.py +0 -0
  39. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/actsave.py +0 -0
  40. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/callbacks.py +0 -0
  41. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/config.py +0 -0
  42. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/data.py +0 -0
  43. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/log.py +0 -0
  44. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/lr_scheduler.py +0 -0
  45. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/model.py +0 -0
  46. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/nn.py +0 -0
  47. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/optimizer.py +0 -0
  48. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/runner.py +0 -0
  49. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/snapshot.py +0 -0
  50. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/snoop.py +0 -0
  51. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/trainer.py +0 -0
  52. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/typecheck.py +0 -0
  53. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/ll/util.py +0 -0
  54. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/loggers/__init__.py +0 -0
  55. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/loggers/_base.py +0 -0
  56. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/loggers/csv.py +0 -0
  57. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/loggers/tensorboard.py +0 -0
  58. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/loggers/wandb.py +0 -0
  59. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/lr_scheduler/__init__.py +0 -0
  60. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/lr_scheduler/_base.py +0 -0
  61. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/lr_scheduler/reduce_lr_on_plateau.py +0 -0
  62. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/metrics/__init__.py +0 -0
  63. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/metrics/_config.py +0 -0
  64. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/__init__.py +0 -0
  65. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/base.py +0 -0
  66. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/config.py +0 -0
  67. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/modules/callback.py +0 -0
  68. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/modules/debug.py +0 -0
  69. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/modules/distributed.py +0 -0
  70. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/modules/logger.py +0 -0
  71. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/modules/profiler.py +0 -0
  72. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/modules/rlp_sanity_checks.py +0 -0
  73. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/model/modules/shared_parameters.py +0 -0
  74. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/nn/__init__.py +0 -0
  75. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/nn/mlp.py +0 -0
  76. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/nn/module_dict.py +0 -0
  77. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/nn/module_list.py +0 -0
  78. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/nn/nonlinearity.py +0 -0
  79. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/optimizer.py +0 -0
  80. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/runner.py +0 -0
  81. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/scripts/find_packages.py +0 -0
  82. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/trainer/__init__.py +0 -0
  83. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/trainer/_runtime_callback.py +0 -0
  84. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/trainer/checkpoint_connector.py +0 -0
  85. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/trainer/signal_connector.py +0 -0
  86. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/trainer/trainer.py +0 -0
  87. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/_environment_info.py +0 -0
  88. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/_useful_types.py +0 -0
  89. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/environment.py +0 -0
  90. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/path.py +0 -0
  91. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/seed.py +0 -0
  92. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/slurm.py +0 -0
  93. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/typed.py +0 -0
  94. {nshtrainer-0.29.1 → nshtrainer-0.30.1}/src/nshtrainer/util/typing_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nshtrainer
3
- Version: 0.29.1
3
+ Version: 0.30.1
4
4
  Summary:
5
5
  Author: Nima Shoghi
6
6
  Author-email: nimashoghi@gmail.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "nshtrainer"
3
- version = "0.29.1"
3
+ version = "0.30.1"
4
4
  description = ""
5
5
  authors = ["Nima Shoghi <nimashoghi@gmail.com>"]
6
6
  readme = "README.md"
@@ -1,5 +1,6 @@
1
1
  from . import _experimental as _experimental
2
2
  from . import callbacks as callbacks
3
+ from . import config as config
3
4
  from . import data as data
4
5
  from . import lr_scheduler as lr_scheduler
5
6
  from . import metrics as metrics
@@ -0,0 +1,3 @@
1
+ from .duration import Duration as Duration
2
+ from .duration import Epochs as Epochs
3
+ from .duration import Steps as Steps
@@ -0,0 +1,31 @@
1
+ import math
2
+ from typing import Annotated, Literal
3
+
4
+ import nshconfig as C
5
+
6
+
7
+ class Steps(C.Config):
8
+ kind: Literal["steps"] = "steps"
9
+
10
+ value: Annotated[int, C.Field(ge=0)]
11
+ """Number of steps."""
12
+
13
+ def to_steps(self, steps_per_epoch: int):
14
+ return self
15
+
16
+
17
+ class Epochs(C.Config):
18
+ kind: Literal["epochs"] = "epochs"
19
+
20
+ value: Annotated[int | float, C.Field(ge=0)]
21
+ """Number of epochs."""
22
+
23
+ def to_steps(self, steps_per_epoch: int):
24
+ value = self.value * steps_per_epoch
25
+ if not isinstance(value, int):
26
+ value = int(math.ceil(value))
27
+
28
+ return Steps(value=value)
29
+
30
+
31
+ Duration = Annotated[Steps | Epochs, C.Field(discriminator="kind")]
@@ -2,11 +2,11 @@ import math
2
2
  import warnings
3
3
  from typing import Literal
4
4
 
5
- import nshconfig as C
6
5
  from torch.optim import Optimizer
7
6
  from torch.optim.lr_scheduler import LRScheduler
8
7
  from typing_extensions import override
9
8
 
9
+ from ..config import Duration
10
10
  from ._base import LRSchedulerConfigBase, LRSchedulerMetadata
11
11
 
12
12
 
@@ -91,13 +91,13 @@ class LinearWarmupCosineAnnealingLR(LRScheduler):
91
91
  class LinearWarmupCosineDecayLRSchedulerConfig(LRSchedulerConfigBase):
92
92
  name: Literal["linear_warmup_cosine_decay"] = "linear_warmup_cosine_decay"
93
93
 
94
- warmup_epochs: int = C.Field(ge=0)
95
- r"""The number of epochs for the linear warmup phase.
96
- The learning rate is linearly increased from `warmup_start_lr` to the initial learning rate over this number of epochs."""
94
+ warmup_duration: Duration
95
+ r"""The duration for the linear warmup phase.
96
+ The learning rate is linearly increased from `warmup_start_lr` to the initial learning rate over this duration."""
97
97
 
98
- max_epochs: int = C.Field(gt=0)
99
- r"""The total number of epochs.
100
- The learning rate is decayed to `min_lr` over this number of epochs."""
98
+ max_duration: Duration
99
+ r"""The total duration.
100
+ The learning rate is decayed to `min_lr` over this duration."""
101
101
 
102
102
  warmup_start_lr_factor: float = 0.0
103
103
  r"""The initial learning rate for the linear warmup phase, as a factor of the initial learning rate.
@@ -121,11 +121,15 @@ class LinearWarmupCosineDecayLRSchedulerConfig(LRSchedulerConfigBase):
121
121
  @override
122
122
  def create_scheduler_impl(self, optimizer, lightning_module, lr):
123
123
  num_steps_per_epoch = self.compute_num_steps_per_epoch(lightning_module)
124
- warmup_steps = self.warmup_epochs * num_steps_per_epoch
125
- max_steps = self.max_epochs * num_steps_per_epoch
124
+ warmup_steps = self.warmup_duration.to_steps(num_steps_per_epoch).value
125
+ max_steps = self.max_duration.to_steps(num_steps_per_epoch).value
126
126
  warmup_start_lr = self.warmup_start_lr_factor * lr
127
127
  min_lr = self.min_lr_factor * lr
128
128
 
129
+ # Warmup and max steps should be at least 1.
130
+ warmup_steps = max(warmup_steps, 1)
131
+ max_steps = max(max_steps, 1)
132
+
129
133
  # Create the scheduler
130
134
  scheduler = LinearWarmupCosineAnnealingLR(
131
135
  optimizer=optimizer,
File without changes