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.
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/PKG-INFO +1 -1
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/pyproject.toml +1 -1
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/__init__.py +1 -0
- nshtrainer-0.30.0/src/nshtrainer/config/__init__.py +3 -0
- nshtrainer-0.30.0/src/nshtrainer/config/duration.py +31 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/linear_warmup_cosine.py +18 -9
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/README.md +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_callback.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_checkpoint/loader.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_checkpoint/metadata.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_checkpoint/saver.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_experimental/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/_hf_hub.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/_throughput_monitor_callback.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/actsave.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/base.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/_base.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/best_checkpoint.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/last_checkpoint.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/on_exception_checkpoint.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/early_stopping.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/ema.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/finite_checks.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/gradient_skipping.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/interval.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/log_epoch.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/norm_logging.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/print_table.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/throughput_monitor.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/timer.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/wandb_watch.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/data/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/data/balanced_batch_sampler.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/data/transform.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/_experimental.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/actsave.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/callbacks.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/config.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/data.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/log.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/lr_scheduler.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/model.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/nn.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/optimizer.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/runner.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/snapshot.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/snoop.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/trainer.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/typecheck.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/ll/util.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/_base.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/csv.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/tensorboard.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/loggers/wandb.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/_base.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/lr_scheduler/reduce_lr_on_plateau.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/metrics/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/metrics/_config.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/base.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/config.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/callback.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/debug.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/distributed.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/logger.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/profiler.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/rlp_sanity_checks.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/model/modules/shared_parameters.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/mlp.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/module_dict.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/module_list.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/nn/nonlinearity.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/optimizer.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/runner.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/scripts/find_packages.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/__init__.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/_runtime_callback.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/checkpoint_connector.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/signal_connector.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/trainer/trainer.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/_environment_info.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/_useful_types.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/environment.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/path.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/seed.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/slurm.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/typed.py +0 -0
- {nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/util/typing_utils.py +0 -0
|
@@ -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
|
-
|
|
95
|
-
r"""The
|
|
96
|
-
The learning rate is linearly increased from `warmup_start_lr` to the initial learning rate over this
|
|
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
|
-
|
|
99
|
-
r"""The total
|
|
100
|
-
The learning rate is decayed to `min_lr` over this
|
|
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 =
|
|
125
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/_throughput_monitor_callback.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/best_checkpoint.py
RENAMED
|
File without changes
|
{nshtrainer-0.29.1 → nshtrainer-0.30.0}/src/nshtrainer/callbacks/checkpoint/last_checkpoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|