Module neuralops.trainer.schedulers

Functions

def create_cosine(optimizer, T_max=10000, **kwargs) ‑> Any
Expand source code
@SCHEDULER_REGISTRY.register("cosine")
def create_cosine(optimizer, T_max=10000, **kwargs) -> Any:
    """Build and return cosine."""
    return lr_scheduler.CosineAnnealingLR(optimizer, T_max=T_max)

Build and return cosine.

def create_cosine_warmup(optimizer, num_warmup_steps=500, num_training_steps=10000, **kwargs) ‑> Any
Expand source code
@SCHEDULER_REGISTRY.register("cosine_warmup")
def create_cosine_warmup(
    optimizer, num_warmup_steps=500, num_training_steps=10000, **kwargs
) -> Any:
    """Build and return cosine warmup."""

    def lr_lambda(current_step: int) -> float:
        """Lr lambda."""
        if current_step < num_warmup_steps:
            return float(current_step) / float(max(1, num_warmup_steps))
        progress = float(current_step - num_warmup_steps) / float(
            max(1, num_training_steps - num_warmup_steps)
        )
        # FIX: Use math.cos and math.pi instead of torch.cos on Python float to avoid TypeError
        return max(0.0, 0.5 * (1.0 + math.cos(math.pi * progress)))

    return lr_scheduler.LambdaLR(optimizer, lr_lambda)

Build and return cosine warmup.

def create_linear(optimizer, num_warmup_steps=0, num_training_steps=10000, **kwargs) ‑> Any
Expand source code
@SCHEDULER_REGISTRY.register("linear")
def create_linear(optimizer, num_warmup_steps=0, num_training_steps=10000, **kwargs) -> Any:
    """Build and return linear."""
    return lr_scheduler.LinearLR(
        optimizer, start_factor=1.0, end_factor=0.0, total_iters=num_training_steps
    )

Build and return linear.

def create_onecycle(optimizer, max_lr=0.01, steps_per_epoch=1000, epochs=10, **kwargs) ‑> Any
Expand source code
@SCHEDULER_REGISTRY.register("one_cycle")
def create_onecycle(optimizer, max_lr=0.01, steps_per_epoch=1000, epochs=10, **kwargs) -> Any:
    """Build and return onecycle."""
    return lr_scheduler.OneCycleLR(
        optimizer, max_lr=max_lr, steps_per_epoch=steps_per_epoch, epochs=epochs
    )

Build and return onecycle.

def create_poly(optimizer, total_iters=10000, power=1.0, **kwargs) ‑> Any
Expand source code
@SCHEDULER_REGISTRY.register("polynomial")
def create_poly(optimizer, total_iters=10000, power=1.0, **kwargs) -> Any:
    """Build and return poly."""
    return lr_scheduler.PolynomialLR(optimizer, total_iters=total_iters, power=power)

Build and return poly.

def create_rop(optimizer, factor=0.1, patience=10, **kwargs) ‑> Any
Expand source code
@SCHEDULER_REGISTRY.register("reduce_on_plateau")
def create_rop(optimizer, factor=0.1, patience=10, **kwargs) -> Any:
    """Build and return rop."""
    return lr_scheduler.ReduceLROnPlateau(optimizer, factor=factor, patience=patience)

Build and return rop.

def get_cosine_schedule_with_warmup(optimizer, num_warmup_steps=500, num_training_steps=10000, **kwargs) ‑> Any
Expand source code
@SCHEDULER_REGISTRY.register("cosine_warmup")
def create_cosine_warmup(
    optimizer, num_warmup_steps=500, num_training_steps=10000, **kwargs
) -> Any:
    """Build and return cosine warmup."""

    def lr_lambda(current_step: int) -> float:
        """Lr lambda."""
        if current_step < num_warmup_steps:
            return float(current_step) / float(max(1, num_warmup_steps))
        progress = float(current_step - num_warmup_steps) / float(
            max(1, num_training_steps - num_warmup_steps)
        )
        # FIX: Use math.cos and math.pi instead of torch.cos on Python float to avoid TypeError
        return max(0.0, 0.5 * (1.0 + math.cos(math.pi * progress)))

    return lr_scheduler.LambdaLR(optimizer, lr_lambda)

Build and return cosine warmup.