nshtrainer 0.29.1__tar.gz → 0.30.0__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.0}/PKG-INFO +1 -1
  2. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/pyproject.toml +1 -1
  3. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/__init__.py +1 -0
  4. nshtrainer-0.30.0/src/nshtrainer/config/__init__.py +3 -0
  5. nshtrainer-0.30.0/src/nshtrainer/config/duration.py +31 -0
  6. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/linear_warmup_cosine.py +18 -9
  7. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/README.md +0 -0
  8. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_callback.py +0 -0
  9. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_checkpoint/loader.py +0 -0
  10. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_checkpoint/metadata.py +0 -0
  11. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_checkpoint/saver.py +0 -0
  12. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_experimental/__init__.py +0 -0
  13. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_hf_hub.py +0 -0
  14. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/__init__.py +0 -0
  15. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/_throughput_monitor_callback.py +0 -0
  16. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/actsave.py +0 -0
  17. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/base.py +0 -0
  18. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/__init__.py +0 -0
  19. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/_base.py +0 -0
  20. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/best_checkpoint.py +0 -0
  21. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/last_checkpoint.py +0 -0
  22. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/on_exception_checkpoint.py +0 -0
  23. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/early_stopping.py +0 -0
  24. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/ema.py +0 -0
  25. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/finite_checks.py +0 -0
  26. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/gradient_skipping.py +0 -0
  27. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/interval.py +0 -0
  28. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/log_epoch.py +0 -0
  29. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/norm_logging.py +0 -0
  30. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/print_table.py +0 -0
  31. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/throughput_monitor.py +0 -0
  32. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/timer.py +0 -0
  33. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/wandb_watch.py +0 -0
  34. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/data/__init__.py +0 -0
  35. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/data/balanced_batch_sampler.py +0 -0
  36. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/data/transform.py +0 -0
  37. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/__init__.py +0 -0
  38. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/_experimental.py +0 -0
  39. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/actsave.py +0 -0
  40. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/callbacks.py +0 -0
  41. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/config.py +0 -0
  42. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/data.py +0 -0
  43. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/log.py +0 -0
  44. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/lr_scheduler.py +0 -0
  45. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/model.py +0 -0
  46. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/nn.py +0 -0
  47. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/optimizer.py +0 -0
  48. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/runner.py +0 -0
  49. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/snapshot.py +0 -0
  50. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/snoop.py +0 -0
  51. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/trainer.py +0 -0
  52. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/typecheck.py +0 -0
  53. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/util.py +0 -0
  54. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/__init__.py +0 -0
  55. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/_base.py +0 -0
  56. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/csv.py +0 -0
  57. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/tensorboard.py +0 -0
  58. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/wandb.py +0 -0
  59. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/__init__.py +0 -0
  60. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/_base.py +0 -0
  61. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/reduce_lr_on_plateau.py +0 -0
  62. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/metrics/__init__.py +0 -0
  63. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/metrics/_config.py +0 -0
  64. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/__init__.py +0 -0
  65. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/base.py +0 -0
  66. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/config.py +0 -0
  67. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/callback.py +0 -0
  68. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/debug.py +0 -0
  69. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/distributed.py +0 -0
  70. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/logger.py +0 -0
  71. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/profiler.py +0 -0
  72. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/rlp_sanity_checks.py +0 -0
  73. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/shared_parameters.py +0 -0
  74. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/__init__.py +0 -0
  75. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/mlp.py +0 -0
  76. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/module_dict.py +0 -0
  77. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/module_list.py +0 -0
  78. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/nonlinearity.py +0 -0
  79. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/optimizer.py +0 -0
  80. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/runner.py +0 -0
  81. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/scripts/find_packages.py +0 -0
  82. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/__init__.py +0 -0
  83. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/_runtime_callback.py +0 -0
  84. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/checkpoint_connector.py +0 -0
  85. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/signal_connector.py +0 -0
  86. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/trainer.py +0 -0
  87. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/_environment_info.py +0 -0
  88. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/_useful_types.py +0 -0
  89. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/environment.py +0 -0
  90. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/path.py +0 -0
  91. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/seed.py +0 -0
  92. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/slurm.py +0 -0
  93. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/typed.py +0 -0
  94. {nshtrainer-0.29.1 → nshtrainer-0.30.0}/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.0
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.0"
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,20 @@ 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 = (
125
+ self.warmup_duration.to_steps(num_steps_per_epoch).value
126
+ * num_steps_per_epoch
127
+ )
128
+ max_steps = (
129
+ self.max_duration.to_steps(num_steps_per_epoch).value * num_steps_per_epoch
130
+ )
126
131
  warmup_start_lr = self.warmup_start_lr_factor * lr
127
132
  min_lr = self.min_lr_factor * lr
128
133
 
134
+ # Warmup and max steps should be at least 1.
135
+ warmup_steps = max(warmup_steps, 1)
136
+ max_steps = max(max_steps, 1)
137
+
129
138
  # Create the scheduler
130
139
  scheduler = LinearWarmupCosineAnnealingLR(
131
140
  optimizer=optimizer,
File without changes