A pytorch implementation of the Lookahead optimizer with RAdam as inner optimizer
Project description
RangerLite
A pytorch implementation of the Lookahead optimizer [1] with RAdam [2] as inner optimizer. This combination is inspired by the Ranger optimizer [3]. RangerLite is a lightweight, easy to use and type hinted alternative. The publication on PyPi allows easy installation via pip.
Table of Contents
Installation
The simplest way to install RangerLite is to use pip:
pip install rangerlite
Requirements
RangerLite requires Python 3.10 or later and PyTorch 2.0 or later.
Usage
You can use RangerLite as a drop in pytorch optimizer:
import torch
from rangerlite import RangerLite
model = ... # your model
optimizer = RangerLite(model.parameters())
A simple example of using RangerLite to find the minimum of the quadratic function (20 steps are not sufficient to get close to the minimum, but you can see the loss decreasing):
import torch
from rangerlite import RangerLite
x = torch.tensor(2.0, requires_grad=True)
optimizer = RangerLite(
params=[x],
lr=2e-1,
lookahead_steps=4,
)
for step in range(20):
loss = x**2
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Step {step+1:2d}: x = {x:.4f}, loss = {loss:.4f}, grad = {x.grad:.4f}")
Relation to other Implementations
The RangerLite optimizer is inspired by the original Ranger[3] optimizer, which combines RAdam[2], Lookahead[1] and gradient centralization[4]. RangerLite drops the gradient centralization and provides a lightweight alternative inheriting from PyTorch's RAdam implementation. It can easily be used and integrated into existing PyTorch workflows and provides type hinting for better developer experience.
Why not use the original Lookahead implementation?
The original Lookahead implementation[5] uses composition of optimizers, which can lead to unexpected behavior when setting hyper-parameters for individual parameter groups or frameworks like pytorch-lightning. Saving and loading the state dict is also not guaranteed to result in the same state leading to potential issues with checkpointing.
Development
For development, first clone the repository and than install it as editable package including the development dependencies:
# clone the repository
git clone https://github.com/FLC-QU-hep/ranger-lite.git
cd ranger-lite
# create a virtual environment (you can also use a different tool)
python3 -m venv .venv
source .venv/bin/activate
# install the package and its development dependencies as editable package
pip install -e .
pip install --group dev
pip install --group test
This repository uses pre-commit hooks to ensure consistent code style. To install the pre-commit hooks, run:
pre-commit install
The unit tests can be run with:
pytest
References
- Lookahead: https://arxiv.org/abs/1907.08610
- RAdam: https://arxiv.org/abs/1908.03265
- Ranger: https://github.com/lessw2020/Ranger-Deep-Learning-Optimizer
- Gradient Centralization: https://arxiv.org/abs/2004.01461
- Original Lookahead implementation: https://github.com/michaelrzhang/lookahead
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rangerlite-1.0.2.tar.gz.
File metadata
- Download URL: rangerlite-1.0.2.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1ef6fae8044494ac266f957f0494905acaf940cab07002fc86b9c35f3fb350b
|
|
| MD5 |
d2aecc8b86eda71122b29dca9bbedf22
|
|
| BLAKE2b-256 |
9ada63449134ac28a606a606de269ad517388a070e6d8349222c8381638ddf55
|
Provenance
The following attestation bundles were made for rangerlite-1.0.2.tar.gz:
Publisher:
publish.yml on FLC-QU-hep/ranger-lite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rangerlite-1.0.2.tar.gz -
Subject digest:
d1ef6fae8044494ac266f957f0494905acaf940cab07002fc86b9c35f3fb350b - Sigstore transparency entry: 545750398
- Sigstore integration time:
-
Permalink:
FLC-QU-hep/ranger-lite@04a7ccf5bbced4a307b41b933387f2f61073ac5b -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/FLC-QU-hep
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@04a7ccf5bbced4a307b41b933387f2f61073ac5b -
Trigger Event:
push
-
Statement type:
File details
Details for the file rangerlite-1.0.2-py3-none-any.whl.
File metadata
- Download URL: rangerlite-1.0.2-py3-none-any.whl
- Upload date:
- Size: 5.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
acfd8358d9a5532b419fb883c6221cf1fdd4fd5b7eec98d6c053f9f7a4d2601b
|
|
| MD5 |
d450c1a45024ae2dcfeefc52225b695e
|
|
| BLAKE2b-256 |
98c974943718e08a2f31968d4e9773dc6ad6a47913582bb2808c56bd6c1910c5
|
Provenance
The following attestation bundles were made for rangerlite-1.0.2-py3-none-any.whl:
Publisher:
publish.yml on FLC-QU-hep/ranger-lite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rangerlite-1.0.2-py3-none-any.whl -
Subject digest:
acfd8358d9a5532b419fb883c6221cf1fdd4fd5b7eec98d6c053f9f7a4d2601b - Sigstore transparency entry: 545750429
- Sigstore integration time:
-
Permalink:
FLC-QU-hep/ranger-lite@04a7ccf5bbced4a307b41b933387f2f61073ac5b -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/FLC-QU-hep
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@04a7ccf5bbced4a307b41b933387f2f61073ac5b -
Trigger Event:
push
-
Statement type: