pytorch-optimizer 3.3.2__tar.gz → 3.3.4__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.
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/PKG-INFO +15 -6
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/README.md +11 -2
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pyproject.toml +10 -10
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/__init__.py +6 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/base/optimizer.py +10 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/base/scheduler.py +4 -3
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/base/types.py +1 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +3 -4
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/rex.py +3 -4
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/__init__.py +23 -8
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adafactor.py +2 -2
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adamp.py +4 -3
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adamw.py +2 -4
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/ademamix.py +7 -1
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adopt.py +9 -2
- pytorch_optimizer-3.3.4/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
- pytorch_optimizer-3.3.4/pytorch_optimizer/optimizer/experimental/ranger25.py +175 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/fp16.py +31 -36
- pytorch_optimizer-3.3.4/pytorch_optimizer/optimizer/grams.py +108 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/lookahead.py +13 -5
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/nero.py +4 -4
- pytorch_optimizer-3.3.4/pytorch_optimizer/optimizer/orthograd.py +66 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/pcgrad.py +5 -5
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/prodigy.py +12 -6
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/rotograd.py +2 -2
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/sam.py +4 -3
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/sgd.py +2 -2
- pytorch_optimizer-3.3.4/pytorch_optimizer/optimizer/spam.py +269 -0
- pytorch_optimizer-3.3.4/pytorch_optimizer/optimizer/tam.py +221 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/trac.py +13 -5
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/LICENSE +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/base/__init__.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/base/exception.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/__init__.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/bi_tempered.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/cross_entropy.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/dice.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/f1.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/focal.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/jaccard.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/ldam.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/lovasz.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/loss/tversky.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/lr_scheduler/wsd.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/a2grad.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adabelief.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adabound.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adadelta.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adahessian.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adai.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adalite.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adam_mini.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adamax.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adamg.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adamod.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adams.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adan.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adanorm.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adapnm.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adashift.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adasmooth.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/agc.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/aggmo.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/aida.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/alig.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/amos.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/apollo.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/avagrad.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/came.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/dadapt.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/demo.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/diffgrad.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/fadam.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/fromage.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/ftrl.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/galore.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/galore_utils.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/gc.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/gravity.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/grokfast.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/kate.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/lamb.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/laprop.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/lars.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/lion.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/lomo.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/madgrad.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/mars.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/msvag.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/muon.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/novograd.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/padam.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/pid.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/pnm.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/qhadam.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/qhm.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/radam.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/ranger.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/ranger21.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/schedulefree.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/sgdp.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/shampoo.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/shampoo_utils.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/sm3.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/soap.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/sophia.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/srmm.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/swats.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/tiger.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/utils.py +0 -0
- {pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/yogi.py +0 -0
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: pytorch_optimizer
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.4
|
|
4
4
|
Summary: optimizer & lr scheduler & objective function collections in PyTorch
|
|
5
|
-
Home-page: https://github.com/kozistr/pytorch_optimizer
|
|
6
5
|
License: Apache-2.0
|
|
7
|
-
Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdamG,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdEMAMix,ADOPT,AdaHessian,Adai,Adalite,AdaLomo,AdamMini,AdamP,AdamS,Adan,AggMo,Aida,AliG,Amos,Apollo,APOLLO,AvaGrad,bSAM,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DAdaptLion,DeMo,DiffGrad,FAdam,Fromage,FTRL,GaLore,Gravity,GrokFast,GSAM,Kate,Lamb,LaProp,LARS,Lion,LOMO,Lookahead,MADGRAD,MARS,MSVAG,Muno,Nero,NovoGrad,PAdam,PCGrad,PID,PNM,Prodigy,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,ScheduleFreeSGD,ScheduleFreeAdamW,ScheduleFreeRAdam,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SOAP,SopihaH,SRMM,StableAdamW,SWATS,Tiger,TRAC,WSAM,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge,bitsandbytes,WSD,QGaLore
|
|
6
|
+
Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdamG,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdEMAMix,ADOPT,AdaHessian,Adai,Adalite,AdaLomo,AdamMini,AdamP,AdamS,Adan,AggMo,Aida,AliG,Amos,Apollo,APOLLO,AvaGrad,bSAM,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DAdaptLion,DeMo,DiffGrad,FAdam,Fromage,FTRL,GaLore,Grams,Gravity,GrokFast,GSAM,Kate,Lamb,LaProp,LARS,Lion,LOMO,Lookahead,MADGRAD,MARS,MSVAG,Muno,Nero,NovoGrad,OrthoGrad,PAdam,PCGrad,PID,PNM,Prodigy,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,ScheduleFreeSGD,ScheduleFreeAdamW,ScheduleFreeRAdam,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SOAP,SopihaH,SPAM,SRMM,StableAdamW,SWATS,TAM,Tiger,TRAC,WSAM,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge,bitsandbytes,WSD,QGaLore
|
|
8
7
|
Author: kozistr
|
|
9
8
|
Author-email: kozistr@gmail.com
|
|
10
9
|
Maintainer: kozistr
|
|
@@ -36,6 +35,7 @@ Requires-Dist: numpy (<=1.24.4) ; python_version < "3.9"
|
|
|
36
35
|
Requires-Dist: numpy (>1.24.4) ; python_version >= "3.9"
|
|
37
36
|
Requires-Dist: torch (>=1.10) ; python_version >= "3.8"
|
|
38
37
|
Project-URL: Documentation, https://pytorch-optimizers.readthedocs.io/en/latest
|
|
38
|
+
Project-URL: Homepage, https://github.com/kozistr/pytorch_optimizer
|
|
39
39
|
Project-URL: Repository, https://github.com/kozistr/pytorch_optimizer
|
|
40
40
|
Description-Content-Type: text/markdown
|
|
41
41
|
|
|
@@ -51,8 +51,8 @@ Description-Content-Type: text/markdown
|
|
|
51
51
|
|
|
52
52
|
## The reasons why you use `pytorch-optimizer`.
|
|
53
53
|
|
|
54
|
-
* Wide range of supported optimizers. Currently, **
|
|
55
|
-
* Including many variants such as `Cautious`, `AdamD`, `Gradient Centrailiaztion`
|
|
54
|
+
* Wide range of supported optimizers. Currently, **92 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
|
|
55
|
+
* Including many variants such as `ADOPT`, `Cautious`, `AdamD`, `StableAdamW`, and `Gradient Centrailiaztion`
|
|
56
56
|
* Easy to use, clean, and tested codes
|
|
57
57
|
* Active maintenance
|
|
58
58
|
* Somewhat a bit more optimized compared to the original implementation
|
|
@@ -236,6 +236,11 @@ get_supported_optimizers(['adam*', 'ranger*'])
|
|
|
236
236
|
| APOLLO | *SGD-like Memory, AdamW-level Performance* | [github](https://github.com/zhuhanqing/APOLLO) | <https://arxiv.org/abs/2412.05270> | [cite](https://github.com/zhuhanqing/APOLLO?tab=readme-ov-file#-citation) |
|
|
237
237
|
| MARS | *Unleashing the Power of Variance Reduction for Training Large Models* | [github](https://github.com/AGI-Arena/MARS) | <https://arxiv.org/abs/2411.10438> | [cite](https://github.com/AGI-Arena/MARS/tree/main?tab=readme-ov-file#citation) |
|
|
238
238
|
| SGDSaI | *No More Adam: Learning Rate Scaling at Initialization is All You Need* | [github](https://github.com/AnonymousAlethiometer/SGD_SaI) | <https://arxiv.org/abs/2411.10438> | [cite](https://github.com/AnonymousAlethiometer/SGD_SaI?tab=readme-ov-file#citation) |
|
|
239
|
+
| Grams | *Gradient Descent with Adaptive Momentum Scaling* | | <https://arxiv.org/abs/2412.17107> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv241217107C/exportcitation) |
|
|
240
|
+
| OrthoGrad | *Grokking at the Edge of Numerical Stability* | [github](https://github.com/LucasPrietoAl/grokking-at-the-edge-of-numerical-stability) | <https://arxiv.org/abs/2501.04697> | [cite](https://github.com/LucasPrietoAl/grokking-at-the-edge-of-numerical-stability?tab=readme-ov-file#citation) |
|
|
241
|
+
| Adam-ATAN2 | *Scaling Exponents Across Parameterizations and Optimizers* | | <https://arxiv.org/abs/2407.05872> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv240705872E/exportcitation) |
|
|
242
|
+
| SPAM | *Spike-Aware Adam with Momentum Reset for Stable LLM Training* | [github](https://github.com/TianjinYellow/SPAM-Optimizer) | <https://arxiv.org/abs/2501.06842> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250106842H/exportcitation) |
|
|
243
|
+
| TAM | *Torque-Aware Momentum* | | <https://arxiv.org/abs/2412.18790> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv241218790M/exportcitation) |
|
|
239
244
|
|
|
240
245
|
## Supported LR Scheduler
|
|
241
246
|
|
|
@@ -411,6 +416,10 @@ Correcting the norm of a gradient in each iteration based on the adaptive traini
|
|
|
411
416
|
|
|
412
417
|
Updates only occur when the proposed update direction aligns with the current gradient.
|
|
413
418
|
|
|
419
|
+
### Adam-ATAN2
|
|
420
|
+
|
|
421
|
+
Adam-atan2 is a new numerically stable, scale-invariant version of Adam that eliminates the epsilon hyperparameter.
|
|
422
|
+
|
|
414
423
|
## Frequently asked questions
|
|
415
424
|
|
|
416
425
|
[here](docs/qa.md)
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
## The reasons why you use `pytorch-optimizer`.
|
|
12
12
|
|
|
13
|
-
* Wide range of supported optimizers. Currently, **
|
|
14
|
-
* Including many variants such as `Cautious`, `AdamD`, `Gradient Centrailiaztion`
|
|
13
|
+
* Wide range of supported optimizers. Currently, **92 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
|
|
14
|
+
* Including many variants such as `ADOPT`, `Cautious`, `AdamD`, `StableAdamW`, and `Gradient Centrailiaztion`
|
|
15
15
|
* Easy to use, clean, and tested codes
|
|
16
16
|
* Active maintenance
|
|
17
17
|
* Somewhat a bit more optimized compared to the original implementation
|
|
@@ -195,6 +195,11 @@ get_supported_optimizers(['adam*', 'ranger*'])
|
|
|
195
195
|
| APOLLO | *SGD-like Memory, AdamW-level Performance* | [github](https://github.com/zhuhanqing/APOLLO) | <https://arxiv.org/abs/2412.05270> | [cite](https://github.com/zhuhanqing/APOLLO?tab=readme-ov-file#-citation) |
|
|
196
196
|
| MARS | *Unleashing the Power of Variance Reduction for Training Large Models* | [github](https://github.com/AGI-Arena/MARS) | <https://arxiv.org/abs/2411.10438> | [cite](https://github.com/AGI-Arena/MARS/tree/main?tab=readme-ov-file#citation) |
|
|
197
197
|
| SGDSaI | *No More Adam: Learning Rate Scaling at Initialization is All You Need* | [github](https://github.com/AnonymousAlethiometer/SGD_SaI) | <https://arxiv.org/abs/2411.10438> | [cite](https://github.com/AnonymousAlethiometer/SGD_SaI?tab=readme-ov-file#citation) |
|
|
198
|
+
| Grams | *Gradient Descent with Adaptive Momentum Scaling* | | <https://arxiv.org/abs/2412.17107> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv241217107C/exportcitation) |
|
|
199
|
+
| OrthoGrad | *Grokking at the Edge of Numerical Stability* | [github](https://github.com/LucasPrietoAl/grokking-at-the-edge-of-numerical-stability) | <https://arxiv.org/abs/2501.04697> | [cite](https://github.com/LucasPrietoAl/grokking-at-the-edge-of-numerical-stability?tab=readme-ov-file#citation) |
|
|
200
|
+
| Adam-ATAN2 | *Scaling Exponents Across Parameterizations and Optimizers* | | <https://arxiv.org/abs/2407.05872> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv240705872E/exportcitation) |
|
|
201
|
+
| SPAM | *Spike-Aware Adam with Momentum Reset for Stable LLM Training* | [github](https://github.com/TianjinYellow/SPAM-Optimizer) | <https://arxiv.org/abs/2501.06842> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250106842H/exportcitation) |
|
|
202
|
+
| TAM | *Torque-Aware Momentum* | | <https://arxiv.org/abs/2412.18790> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv241218790M/exportcitation) |
|
|
198
203
|
|
|
199
204
|
## Supported LR Scheduler
|
|
200
205
|
|
|
@@ -370,6 +375,10 @@ Correcting the norm of a gradient in each iteration based on the adaptive traini
|
|
|
370
375
|
|
|
371
376
|
Updates only occur when the proposed update direction aligns with the current gradient.
|
|
372
377
|
|
|
378
|
+
### Adam-ATAN2
|
|
379
|
+
|
|
380
|
+
Adam-atan2 is a new numerically stable, scale-invariant version of Adam that eliminates the epsilon hyperparameter.
|
|
381
|
+
|
|
373
382
|
## Frequently asked questions
|
|
374
383
|
|
|
375
384
|
[here](docs/qa.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pytorch_optimizer"
|
|
3
|
-
version = "3.3.
|
|
3
|
+
version = "3.3.4"
|
|
4
4
|
description = "optimizer & lr scheduler & objective function collections in PyTorch"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
authors = ["kozistr <kozistr@gmail.com>"]
|
|
@@ -14,13 +14,13 @@ keywords = [
|
|
|
14
14
|
"AdaDelta", "AdaFactor", "AdaMax", "AdamG", "AdaMod", "AdaNorm", "AdaPNM", "AdaSmooth", "AdEMAMix", "ADOPT",
|
|
15
15
|
"AdaHessian", "Adai", "Adalite", "AdaLomo", "AdamMini", "AdamP", "AdamS", "Adan", "AggMo", "Aida", "AliG", "Amos",
|
|
16
16
|
"Apollo", "APOLLO", "AvaGrad", "bSAM", "CAME", "DAdaptAdaGrad", "DAdaptAdam", "DAdaptAdan", "DAdaptSGD",
|
|
17
|
-
"DAdaptLion", "DeMo", "DiffGrad", "FAdam", "Fromage", "FTRL", "GaLore", "
|
|
18
|
-
"Lamb", "LaProp", "LARS", "Lion", "LOMO", "Lookahead", "MADGRAD", "MARS", "MSVAG", "Muno", "Nero",
|
|
19
|
-
"PAdam", "PCGrad", "PID", "PNM", "Prodigy", "QHAdam", "QHM", "RAdam", "Ranger",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"LovaszHinge", "bitsandbytes", "WSD", "QGaLore",
|
|
17
|
+
"DAdaptLion", "DeMo", "DiffGrad", "FAdam", "Fromage", "FTRL", "GaLore", "Grams", "Gravity", "GrokFast", "GSAM",
|
|
18
|
+
"Kate", "Lamb", "LaProp", "LARS", "Lion", "LOMO", "Lookahead", "MADGRAD", "MARS", "MSVAG", "Muno", "Nero",
|
|
19
|
+
"NovoGrad", "OrthoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "QHAdam", "QHM", "RAdam", "Ranger",
|
|
20
|
+
"Ranger21", "RotoGrad", "SAM", "ScheduleFreeSGD", "ScheduleFreeAdamW", "ScheduleFreeRAdam", "SGDP", "Shampoo",
|
|
21
|
+
"ScalableShampoo", "SGDW", "SignSGD", "SM3", "SOAP", "SopihaH", "SPAM", "SRMM", "StableAdamW", "SWATS", "TAM",
|
|
22
|
+
"Tiger", "TRAC", "WSAM", "Yogi", "BCE", "BCEFocal", "Focal", "FocalCosine", "SoftF1", "Dice", "LDAM", "Jaccard",
|
|
23
|
+
"Bi-Tempered", "Tversky", "FocalTversky", "LovaszHinge", "bitsandbytes", "WSD", "QGaLore",
|
|
24
24
|
]
|
|
25
25
|
classifiers = [
|
|
26
26
|
"License :: OSI Approved :: Apache Software License",
|
|
@@ -97,8 +97,8 @@ select = [
|
|
|
97
97
|
"TID", "ARG", "ERA", "RUF", "YTT", "PL", "Q"
|
|
98
98
|
]
|
|
99
99
|
ignore = [
|
|
100
|
-
"B905", "D100", "D102", "D104", "D105", "D107", "D203", "D213", "D413", "PIE790", "PLR0912", "PLR0913",
|
|
101
|
-
"PLR2004", "RUF013", "Q003", "ARG002",
|
|
100
|
+
"A005", "B905", "D100", "D102", "D104", "D105", "D107", "D203", "D213", "D413", "PIE790", "PLR0912", "PLR0913",
|
|
101
|
+
"PLR0915", "PLR2004", "RUF013", "Q003", "ARG002",
|
|
102
102
|
]
|
|
103
103
|
fixable = ["ALL"]
|
|
104
104
|
unfixable = ["F401"]
|
|
@@ -61,8 +61,10 @@ from pytorch_optimizer.optimizer import (
|
|
|
61
61
|
SGDW,
|
|
62
62
|
SM3,
|
|
63
63
|
SOAP,
|
|
64
|
+
SPAM,
|
|
64
65
|
SRMM,
|
|
65
66
|
SWATS,
|
|
67
|
+
TAM,
|
|
66
68
|
TRAC,
|
|
67
69
|
WSAM,
|
|
68
70
|
A2Grad,
|
|
@@ -87,6 +89,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
87
89
|
AdaPNM,
|
|
88
90
|
AdaShift,
|
|
89
91
|
AdaSmooth,
|
|
92
|
+
AdaTAM,
|
|
90
93
|
AdEMAMix,
|
|
91
94
|
AggMo,
|
|
92
95
|
Aida,
|
|
@@ -105,6 +108,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
105
108
|
FAdam,
|
|
106
109
|
Fromage,
|
|
107
110
|
GaLore,
|
|
111
|
+
Grams,
|
|
108
112
|
Gravity,
|
|
109
113
|
GrokFastAdamW,
|
|
110
114
|
Kate,
|
|
@@ -115,6 +119,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
115
119
|
Muon,
|
|
116
120
|
Nero,
|
|
117
121
|
NovoGrad,
|
|
122
|
+
OrthoGrad,
|
|
118
123
|
PAdam,
|
|
119
124
|
PCGrad,
|
|
120
125
|
Prodigy,
|
|
@@ -122,6 +127,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
122
127
|
RAdam,
|
|
123
128
|
Ranger,
|
|
124
129
|
Ranger21,
|
|
130
|
+
Ranger25,
|
|
125
131
|
RotoGrad,
|
|
126
132
|
SafeFP16Optimizer,
|
|
127
133
|
ScalableShampoo,
|
|
@@ -266,6 +266,16 @@ class BaseOptimizer(ABC, Optimizer):
|
|
|
266
266
|
mask.mul_(mask.numel() / (mask.sum() + 1))
|
|
267
267
|
update.mul_(mask)
|
|
268
268
|
|
|
269
|
+
@staticmethod
|
|
270
|
+
def get_stable_adamw_rms(grad: torch.Tensor, exp_avg_sq: torch.Tensor, eps: float = 1e-16) -> float:
|
|
271
|
+
r"""Get StableAdamW RMS.
|
|
272
|
+
|
|
273
|
+
:param grad: torch.Tensor. gradient.
|
|
274
|
+
:param exp_avg_sq: torch.Tensor. exp_avg_sq.
|
|
275
|
+
:param eps: float. epsilon.
|
|
276
|
+
"""
|
|
277
|
+
return grad.pow(2).div_(exp_avg_sq.clip(min=eps)).mean().sqrt_().clip_(min=1.0).item()
|
|
278
|
+
|
|
269
279
|
@staticmethod
|
|
270
280
|
def validate_range(x: float, name: str, low: float, high: float, range_type: str = '[)') -> None:
|
|
271
281
|
if range_type == '[)' and not low <= x < high:
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
from typing import List
|
|
3
3
|
|
|
4
|
+
from torch.optim import Optimizer
|
|
5
|
+
|
|
4
6
|
from pytorch_optimizer.base.exception import NegativeLRError, NegativeStepError
|
|
5
|
-
from pytorch_optimizer.base.types import OPTIMIZER
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class BaseLinearWarmupScheduler(ABC):
|
|
@@ -10,7 +11,7 @@ class BaseLinearWarmupScheduler(ABC):
|
|
|
10
11
|
|
|
11
12
|
The LR Scheduler class based on this class has linear warmup strategy.
|
|
12
13
|
|
|
13
|
-
:param optimizer: Optimizer.
|
|
14
|
+
:param optimizer: Optimizer. It will set learning rate to all trainable parameters in optimizer.
|
|
14
15
|
:param t_max: int. total steps to train.
|
|
15
16
|
:param max_lr: float. maximum lr.
|
|
16
17
|
:param min_lr: float. minimum lr.
|
|
@@ -20,7 +21,7 @@ class BaseLinearWarmupScheduler(ABC):
|
|
|
20
21
|
|
|
21
22
|
def __init__(
|
|
22
23
|
self,
|
|
23
|
-
optimizer:
|
|
24
|
+
optimizer: Optimizer,
|
|
24
25
|
t_max: int,
|
|
25
26
|
max_lr: float,
|
|
26
27
|
min_lr: float = 0.0,
|
|
@@ -11,6 +11,7 @@ DEFAULTS = Dict
|
|
|
11
11
|
PARAMETERS = Optional[Union[Iterable[Dict], Iterable[torch.Tensor]]]
|
|
12
12
|
STATE = Dict
|
|
13
13
|
OPTIMIZER = Type[Optimizer]
|
|
14
|
+
OPTIMIZER_INSTANCE_OR_CLASS = Union[OPTIMIZER, Optimizer]
|
|
14
15
|
SCHEDULER = Type[LRScheduler]
|
|
15
16
|
|
|
16
17
|
HUTCHINSON_G = Literal['gaussian', 'rademacher']
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import math
|
|
2
2
|
from typing import List, Optional
|
|
3
3
|
|
|
4
|
+
from torch.optim import Optimizer
|
|
4
5
|
from torch.optim.lr_scheduler import LRScheduler
|
|
5
6
|
|
|
6
|
-
from pytorch_optimizer.base.types import OPTIMIZER
|
|
7
|
-
|
|
8
7
|
|
|
9
8
|
class CosineAnnealingWarmupRestarts(LRScheduler):
|
|
10
9
|
r"""CosineAnnealingWarmupRestarts.
|
|
@@ -21,7 +20,7 @@ class CosineAnnealingWarmupRestarts(LRScheduler):
|
|
|
21
20
|
|
|
22
21
|
def __init__(
|
|
23
22
|
self,
|
|
24
|
-
optimizer:
|
|
23
|
+
optimizer: Optimizer,
|
|
25
24
|
first_cycle_steps: int,
|
|
26
25
|
cycle_mult: float = 1.0,
|
|
27
26
|
max_lr: float = 1e-4,
|
|
@@ -53,7 +52,7 @@ class CosineAnnealingWarmupRestarts(LRScheduler):
|
|
|
53
52
|
|
|
54
53
|
self.init_lr()
|
|
55
54
|
|
|
56
|
-
def init_lr(self):
|
|
55
|
+
def init_lr(self) -> None:
|
|
57
56
|
self.base_lrs = []
|
|
58
57
|
for param_group in self.optimizer.param_groups:
|
|
59
58
|
param_group['lr'] = self.min_lr
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
from typing import List, Optional
|
|
2
2
|
|
|
3
|
+
from torch.optim import Optimizer
|
|
3
4
|
from torch.optim.lr_scheduler import LRScheduler
|
|
4
5
|
|
|
5
|
-
from pytorch_optimizer.base.types import OPTIMIZER
|
|
6
|
-
|
|
7
6
|
|
|
8
7
|
class REXScheduler(LRScheduler):
|
|
9
8
|
r"""Revisiting Budgeted Training with an Improved Schedule.
|
|
@@ -16,7 +15,7 @@ class REXScheduler(LRScheduler):
|
|
|
16
15
|
|
|
17
16
|
def __init__(
|
|
18
17
|
self,
|
|
19
|
-
optimizer:
|
|
18
|
+
optimizer: Optimizer,
|
|
20
19
|
total_steps: int,
|
|
21
20
|
max_lr: float = 1.0,
|
|
22
21
|
min_lr: float = 0.0,
|
|
@@ -35,7 +34,7 @@ class REXScheduler(LRScheduler):
|
|
|
35
34
|
|
|
36
35
|
self.init_lr()
|
|
37
36
|
|
|
38
|
-
def init_lr(self):
|
|
37
|
+
def init_lr(self) -> None:
|
|
39
38
|
self.base_lrs = []
|
|
40
39
|
for param_group in self.optimizer.param_groups:
|
|
41
40
|
param_group['lr'] = self.min_lr
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import fnmatch
|
|
2
2
|
from importlib.util import find_spec
|
|
3
|
-
from typing import Dict, List, Optional, Sequence, Set, Union
|
|
3
|
+
from typing import Dict, List, Optional, Sequence, Set, Type, Union
|
|
4
4
|
|
|
5
5
|
import torch
|
|
6
6
|
from torch import nn
|
|
7
|
-
from torch.optim import AdamW
|
|
7
|
+
from torch.optim import AdamW, Optimizer
|
|
8
8
|
|
|
9
9
|
from pytorch_optimizer.base.types import OPTIMIZER, PARAMETERS
|
|
10
10
|
from pytorch_optimizer.optimizer.a2grad import A2Grad
|
|
@@ -40,12 +40,14 @@ from pytorch_optimizer.optimizer.came import CAME
|
|
|
40
40
|
from pytorch_optimizer.optimizer.dadapt import DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptLion, DAdaptSGD
|
|
41
41
|
from pytorch_optimizer.optimizer.demo import DeMo
|
|
42
42
|
from pytorch_optimizer.optimizer.diffgrad import DiffGrad
|
|
43
|
+
from pytorch_optimizer.optimizer.experimental.ranger25 import Ranger25
|
|
43
44
|
from pytorch_optimizer.optimizer.fadam import FAdam
|
|
44
45
|
from pytorch_optimizer.optimizer.fp16 import DynamicLossScaler, SafeFP16Optimizer
|
|
45
46
|
from pytorch_optimizer.optimizer.fromage import Fromage
|
|
46
47
|
from pytorch_optimizer.optimizer.ftrl import FTRL
|
|
47
48
|
from pytorch_optimizer.optimizer.galore import GaLore
|
|
48
49
|
from pytorch_optimizer.optimizer.gc import centralize_gradient
|
|
50
|
+
from pytorch_optimizer.optimizer.grams import Grams
|
|
49
51
|
from pytorch_optimizer.optimizer.gravity import Gravity
|
|
50
52
|
from pytorch_optimizer.optimizer.grokfast import GrokFastAdamW
|
|
51
53
|
from pytorch_optimizer.optimizer.kate import Kate
|
|
@@ -61,6 +63,7 @@ from pytorch_optimizer.optimizer.msvag import MSVAG
|
|
|
61
63
|
from pytorch_optimizer.optimizer.muon import Muon
|
|
62
64
|
from pytorch_optimizer.optimizer.nero import Nero
|
|
63
65
|
from pytorch_optimizer.optimizer.novograd import NovoGrad
|
|
66
|
+
from pytorch_optimizer.optimizer.orthograd import OrthoGrad
|
|
64
67
|
from pytorch_optimizer.optimizer.padam import PAdam
|
|
65
68
|
from pytorch_optimizer.optimizer.pcgrad import PCGrad
|
|
66
69
|
from pytorch_optimizer.optimizer.pid import PID
|
|
@@ -80,8 +83,10 @@ from pytorch_optimizer.optimizer.shampoo import ScalableShampoo, Shampoo
|
|
|
80
83
|
from pytorch_optimizer.optimizer.sm3 import SM3
|
|
81
84
|
from pytorch_optimizer.optimizer.soap import SOAP
|
|
82
85
|
from pytorch_optimizer.optimizer.sophia import SophiaH
|
|
86
|
+
from pytorch_optimizer.optimizer.spam import SPAM
|
|
83
87
|
from pytorch_optimizer.optimizer.srmm import SRMM
|
|
84
88
|
from pytorch_optimizer.optimizer.swats import SWATS
|
|
89
|
+
from pytorch_optimizer.optimizer.tam import TAM, AdaTAM
|
|
85
90
|
from pytorch_optimizer.optimizer.tiger import Tiger
|
|
86
91
|
from pytorch_optimizer.optimizer.trac import TRAC
|
|
87
92
|
from pytorch_optimizer.optimizer.yogi import Yogi
|
|
@@ -248,6 +253,8 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
|
|
|
248
253
|
SRMM,
|
|
249
254
|
AvaGrad,
|
|
250
255
|
AdaShift,
|
|
256
|
+
TAM,
|
|
257
|
+
AdaTAM,
|
|
251
258
|
AdaDelta,
|
|
252
259
|
Amos,
|
|
253
260
|
AdaHessian,
|
|
@@ -282,6 +289,9 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
|
|
|
282
289
|
LaProp,
|
|
283
290
|
MARS,
|
|
284
291
|
SGDSaI,
|
|
292
|
+
Grams,
|
|
293
|
+
SPAM,
|
|
294
|
+
Ranger25,
|
|
285
295
|
]
|
|
286
296
|
OPTIMIZERS: Dict[str, OPTIMIZER] = {str(optimizer.__name__).lower(): optimizer for optimizer in OPTIMIZER_LIST}
|
|
287
297
|
|
|
@@ -293,8 +303,9 @@ def create_optimizer(
|
|
|
293
303
|
weight_decay: float = 0.0,
|
|
294
304
|
wd_ban_list: List[str] = ('bias', 'LayerNorm.bias', 'LayerNorm.weight'),
|
|
295
305
|
use_lookahead: bool = False,
|
|
306
|
+
use_orthograd: bool = False,
|
|
296
307
|
**kwargs,
|
|
297
|
-
):
|
|
308
|
+
) -> Optimizer:
|
|
298
309
|
r"""Build optimizer.
|
|
299
310
|
|
|
300
311
|
:param model: nn.Module. model.
|
|
@@ -302,7 +313,8 @@ def create_optimizer(
|
|
|
302
313
|
:param lr: float. learning rate.
|
|
303
314
|
:param weight_decay: float. weight decay.
|
|
304
315
|
:param wd_ban_list: List[str]. weight decay ban list by layer.
|
|
305
|
-
:param use_lookahead: bool. use
|
|
316
|
+
:param use_lookahead: bool. use Lookahead.
|
|
317
|
+
:param use_orthograd: bool. use OrthoGrad.
|
|
306
318
|
"""
|
|
307
319
|
optimizer_name = optimizer_name.lower()
|
|
308
320
|
|
|
@@ -310,14 +322,17 @@ def create_optimizer(
|
|
|
310
322
|
get_optimizer_parameters(model, weight_decay, wd_ban_list) if weight_decay > 0.0 else model.parameters()
|
|
311
323
|
)
|
|
312
324
|
|
|
313
|
-
|
|
325
|
+
optimizer_class: OPTIMIZER = load_optimizer(optimizer_name)
|
|
314
326
|
|
|
315
327
|
if optimizer_name == 'alig':
|
|
316
|
-
optimizer =
|
|
328
|
+
optimizer = optimizer_class(parameters, max_lr=lr, **kwargs)
|
|
317
329
|
elif optimizer_name in {'lomo', 'adalomo', 'adammini'}:
|
|
318
|
-
optimizer =
|
|
330
|
+
optimizer = optimizer_class(model, lr=lr, **kwargs)
|
|
319
331
|
else:
|
|
320
|
-
optimizer =
|
|
332
|
+
optimizer = optimizer_class(parameters, lr=lr, **kwargs)
|
|
333
|
+
|
|
334
|
+
if use_orthograd:
|
|
335
|
+
optimizer = OrthoGrad(optimizer, **kwargs)
|
|
321
336
|
|
|
322
337
|
if use_lookahead:
|
|
323
338
|
optimizer = Lookahead(
|
{pytorch_optimizer-3.3.2 → pytorch_optimizer-3.3.4}/pytorch_optimizer/optimizer/adafactor.py
RENAMED
|
@@ -13,8 +13,8 @@ class AdaFactor(BaseOptimizer):
|
|
|
13
13
|
|
|
14
14
|
:param params: PARAMETERS. iterable of parameters to optimize or dicts defining parameter groups.
|
|
15
15
|
:param lr: float. learning rate.
|
|
16
|
-
:param betas: BETAS. coefficients used for computing running averages of gradient and the squared
|
|
17
|
-
|
|
16
|
+
:param betas: BETAS. coefficients used for computing running averages of gradient and the squared hessian trace.
|
|
17
|
+
if beta1 is None, first momentum will be skipped.
|
|
18
18
|
:param decay_rate: float. coefficient used to compute running averages of square gradient.
|
|
19
19
|
:param weight_decay: float. weight decay (L2 penalty).
|
|
20
20
|
:param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
|
|
@@ -141,6 +141,10 @@ class AdamP(BaseOptimizer):
|
|
|
141
141
|
inv_de_nom = exp_avg_sq.rsqrt().add_(group['eps']).mul_(bias_correction2_sq)
|
|
142
142
|
|
|
143
143
|
perturb = exp_avg.clone()
|
|
144
|
+
|
|
145
|
+
if self.cautious:
|
|
146
|
+
self.apply_cautious(perturb, grad)
|
|
147
|
+
|
|
144
148
|
if group['nesterov']:
|
|
145
149
|
perturb.mul_(beta1).addcmul_(grad, inv_de_nom, value=1.0 - beta1)
|
|
146
150
|
else:
|
|
@@ -173,9 +177,6 @@ class AdamP(BaseOptimizer):
|
|
|
173
177
|
bias_correction1=bias_correction1,
|
|
174
178
|
)
|
|
175
179
|
|
|
176
|
-
if self.cautious:
|
|
177
|
-
self.apply_cautious(perturb, grad)
|
|
178
|
-
|
|
179
180
|
p.add_(perturb, alpha=-step_size)
|
|
180
181
|
|
|
181
182
|
return loss
|
|
@@ -107,13 +107,11 @@ class StableAdamW(BaseOptimizer):
|
|
|
107
107
|
exp_avg.lerp_(grad, weight=beta1_comp)
|
|
108
108
|
exp_avg_sq.mul_(beta2_hat).addcmul_(grad, grad, value=1.0 - beta2_hat)
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
lr = group['lr'] / rms.clip(min=1.0)
|
|
110
|
+
lr: float = group['lr'] / self.get_stable_adamw_rms(grad, exp_avg_sq, eps=eps_p2)
|
|
113
111
|
|
|
114
112
|
self.apply_weight_decay(
|
|
115
113
|
p,
|
|
116
|
-
|
|
114
|
+
grad,
|
|
117
115
|
lr=lr,
|
|
118
116
|
weight_decay=group['weight_decay'],
|
|
119
117
|
weight_decouple=group['weight_decouple'],
|
|
@@ -19,7 +19,8 @@ class AdEMAMix(BaseOptimizer):
|
|
|
19
19
|
:param fixed_decay: bool. fix weight decay.
|
|
20
20
|
:param alpha: float. usually between 4 and 10 would work well.
|
|
21
21
|
:param t_alpha_beta3: Optional[float]. total number of iterations is preferred when needed.
|
|
22
|
-
:param cautious: bool. whether to use
|
|
22
|
+
:param cautious: bool. whether to use the Cautious variant.
|
|
23
|
+
:param stable_adamw: bool. whether to use stable AdamW variant.
|
|
23
24
|
:param eps: float. term added to the denominator to improve numerical stability.
|
|
24
25
|
"""
|
|
25
26
|
|
|
@@ -34,6 +35,7 @@ class AdEMAMix(BaseOptimizer):
|
|
|
34
35
|
alpha: float = 5.0,
|
|
35
36
|
t_alpha_beta3: Optional[float] = None,
|
|
36
37
|
cautious: bool = False,
|
|
38
|
+
stable_adamw: bool = False,
|
|
37
39
|
eps: float = 1e-8,
|
|
38
40
|
**kwargs,
|
|
39
41
|
):
|
|
@@ -45,6 +47,7 @@ class AdEMAMix(BaseOptimizer):
|
|
|
45
47
|
self.validate_non_negative(eps, 'eps')
|
|
46
48
|
|
|
47
49
|
self.cautious = cautious
|
|
50
|
+
self.stable_adamw = stable_adamw
|
|
48
51
|
|
|
49
52
|
defaults: DEFAULTS = {
|
|
50
53
|
'lr': lr,
|
|
@@ -150,6 +153,9 @@ class AdEMAMix(BaseOptimizer):
|
|
|
150
153
|
if self.cautious:
|
|
151
154
|
self.apply_cautious(update, grad)
|
|
152
155
|
|
|
156
|
+
if self.stable_adamw:
|
|
157
|
+
step_size /= self.get_stable_adamw_rms(grad, exp_avg_sq)
|
|
158
|
+
|
|
153
159
|
update.add_(exp_avg_slow, alpha=alpha_t).div_(de_nom)
|
|
154
160
|
|
|
155
161
|
p.add_(update, alpha=-step_size)
|
|
@@ -18,6 +18,7 @@ class ADOPT(BaseOptimizer):
|
|
|
18
18
|
:param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
|
|
19
19
|
:param fixed_decay: bool. fix weight decay.
|
|
20
20
|
:param cautious: bool. whether to use the Cautious variant.
|
|
21
|
+
:param stable_adamw: bool. whether to use stable AdamW variant.
|
|
21
22
|
:param eps: float. term added to the denominator to improve numerical stability.
|
|
22
23
|
"""
|
|
23
24
|
|
|
@@ -31,6 +32,7 @@ class ADOPT(BaseOptimizer):
|
|
|
31
32
|
weight_decouple: bool = False,
|
|
32
33
|
fixed_decay: bool = False,
|
|
33
34
|
cautious: bool = False,
|
|
35
|
+
stable_adamw: bool = False,
|
|
34
36
|
eps: float = 1e-6,
|
|
35
37
|
**kwargs,
|
|
36
38
|
):
|
|
@@ -41,6 +43,7 @@ class ADOPT(BaseOptimizer):
|
|
|
41
43
|
|
|
42
44
|
self.clip_lambda = clip_lambda
|
|
43
45
|
self.cautious = cautious
|
|
46
|
+
self.stable_adamw = stable_adamw
|
|
44
47
|
|
|
45
48
|
defaults: DEFAULTS = {
|
|
46
49
|
'lr': lr,
|
|
@@ -80,6 +83,7 @@ class ADOPT(BaseOptimizer):
|
|
|
80
83
|
group['step'] = 1
|
|
81
84
|
|
|
82
85
|
beta1, beta2 = group['betas']
|
|
86
|
+
lr: float = group['lr']
|
|
83
87
|
|
|
84
88
|
for p in group['params']:
|
|
85
89
|
if p.grad is None:
|
|
@@ -98,7 +102,7 @@ class ADOPT(BaseOptimizer):
|
|
|
98
102
|
self.apply_weight_decay(
|
|
99
103
|
p=p,
|
|
100
104
|
grad=grad,
|
|
101
|
-
lr=
|
|
105
|
+
lr=lr,
|
|
102
106
|
weight_decay=group['weight_decay'],
|
|
103
107
|
weight_decouple=group['weight_decouple'],
|
|
104
108
|
fixed_decay=group['fixed_decay'],
|
|
@@ -127,6 +131,9 @@ class ADOPT(BaseOptimizer):
|
|
|
127
131
|
else:
|
|
128
132
|
update = exp_avg
|
|
129
133
|
|
|
130
|
-
|
|
134
|
+
if self.stable_adamw:
|
|
135
|
+
lr /= self.get_stable_adamw_rms(grad, exp_avg_sq)
|
|
136
|
+
|
|
137
|
+
p.add_(update, alpha=-lr)
|
|
131
138
|
|
|
132
139
|
return loss
|
|
File without changes
|