pytorch-optimizer 3.3.3__tar.gz → 3.4.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.
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/PKG-INFO +9 -6
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/README.md +7 -2
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pyproject.toml +25 -25
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/__init__.py +6 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/optimizer.py +23 -2
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/scheduler.py +4 -3
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/types.py +1 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/jaccard.py +2 -2
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +3 -4
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/rex.py +3 -4
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/__init__.py +24 -8
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adafactor.py +2 -2
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamp.py +4 -3
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamw.py +1 -2
- pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/exadam.py +123 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/experimental/ranger25.py +39 -26
- pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/focus.py +95 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/fp16.py +31 -36
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ftrl.py +1 -1
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lookahead.py +7 -5
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/muon.py +2 -2
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/nero.py +4 -4
- pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/orthograd.py +71 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/pcgrad.py +5 -5
- pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/psgd.py +375 -0
- pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/psgd_utils.py +94 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/rotograd.py +1 -1
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sam.py +4 -3
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sgd.py +2 -2
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/shampoo_utils.py +3 -3
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/soap.py +13 -5
- pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/spam.py +269 -0
- pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/tam.py +221 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/trac.py +16 -8
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/utils.py +1 -1
- pytorch_optimizer-3.3.3/pytorch_optimizer/optimizer/orthograd.py +0 -48
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/LICENSE +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/__init__.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/exception.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/__init__.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/bi_tempered.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/cross_entropy.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/dice.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/f1.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/focal.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/ldam.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/lovasz.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/tversky.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/wsd.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/a2grad.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adabelief.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adabound.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adadelta.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adahessian.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adai.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adalite.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adam_mini.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamax.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamg.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamod.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adams.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adan.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adanorm.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adapnm.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adashift.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adasmooth.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ademamix.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adopt.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/agc.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/aggmo.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/aida.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/alig.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/amos.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/apollo.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/avagrad.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/came.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/dadapt.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/demo.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/diffgrad.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/fadam.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/fromage.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/galore.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/galore_utils.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/gc.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/grams.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/gravity.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/grokfast.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/kate.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lamb.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/laprop.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lars.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lion.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lomo.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/madgrad.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/mars.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/msvag.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/novograd.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/padam.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/pid.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/pnm.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/prodigy.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/qhadam.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/qhm.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/radam.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ranger.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ranger21.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/schedulefree.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sgdp.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/shampoo.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sm3.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sophia.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/srmm.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/swats.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/tiger.py +0 -0
- {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/yogi.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pytorch_optimizer
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.4.0
|
|
4
4
|
Summary: optimizer & lr scheduler & objective function collections in PyTorch
|
|
5
5
|
License: Apache-2.0
|
|
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,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,EXAdam,FAdam,FOCUS,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,PSGD,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
|
|
7
7
|
Author: kozistr
|
|
8
8
|
Author-email: kozistr@gmail.com
|
|
9
9
|
Maintainer: kozistr
|
|
@@ -29,8 +29,6 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
29
29
|
Classifier: Topic :: Software Development
|
|
30
30
|
Classifier: Topic :: Software Development :: Libraries
|
|
31
31
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
32
|
-
Provides-Extra: bitsandbytes
|
|
33
|
-
Requires-Dist: bitsandbytes (>=0.44,<0.45) ; extra == "bitsandbytes"
|
|
34
32
|
Requires-Dist: numpy (<=1.24.4) ; python_version < "3.9"
|
|
35
33
|
Requires-Dist: numpy (>1.24.4) ; python_version >= "3.9"
|
|
36
34
|
Requires-Dist: torch (>=1.10) ; python_version >= "3.8"
|
|
@@ -51,8 +49,8 @@ Description-Content-Type: text/markdown
|
|
|
51
49
|
|
|
52
50
|
## The reasons why you use `pytorch-optimizer`.
|
|
53
51
|
|
|
54
|
-
* Wide range of supported optimizers. Currently, **
|
|
55
|
-
* Including many variants such as `Cautious`, `AdamD`, `Gradient Centrailiaztion`
|
|
52
|
+
* Wide range of supported optimizers. Currently, **95 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
|
|
53
|
+
* Including many variants such as `ADOPT`, `Cautious`, `AdamD`, `StableAdamW`, and `Gradient Centrailiaztion`
|
|
56
54
|
* Easy to use, clean, and tested codes
|
|
57
55
|
* Active maintenance
|
|
58
56
|
* Somewhat a bit more optimized compared to the original implementation
|
|
@@ -239,6 +237,11 @@ get_supported_optimizers(['adam*', 'ranger*'])
|
|
|
239
237
|
| Grams | *Gradient Descent with Adaptive Momentum Scaling* | | <https://arxiv.org/abs/2412.17107> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv241217107C/exportcitation) |
|
|
240
238
|
| 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
239
|
| Adam-ATAN2 | *Scaling Exponents Across Parameterizations and Optimizers* | | <https://arxiv.org/abs/2407.05872> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv240705872E/exportcitation) |
|
|
240
|
+
| 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) |
|
|
241
|
+
| TAM | *Torque-Aware Momentum* | | <https://arxiv.org/abs/2412.18790> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv241218790M/exportcitation) |
|
|
242
|
+
| FOCUS | *First Order Concentrated Updating Scheme* | [github](https://github.com/liuyz0/FOCUS) | <https://arxiv.org/abs/2501.12243> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250112243M/exportcitation) |
|
|
243
|
+
| PSGD | *Preconditioned Stochastic Gradient Descent* | [github](https://github.com/lixilinx/psgd_torch) | <https://arxiv.org/abs/1512.04202> | [cite](https://github.com/lixilinx/psgd_torch?tab=readme-ov-file#resources) |
|
|
244
|
+
| EXAdam | *The Power of Adaptive Cross-Moments* | [github](https://github.com/AhmedMostafa16/EXAdam) | <https://arxiv.org/abs/2412.20302> | [cite](https://github.com/AhmedMostafa16/EXAdam?tab=readme-ov-file#citation) |
|
|
242
245
|
|
|
243
246
|
## Supported LR Scheduler
|
|
244
247
|
|
|
@@ -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, **95 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
|
|
@@ -198,6 +198,11 @@ get_supported_optimizers(['adam*', 'ranger*'])
|
|
|
198
198
|
| Grams | *Gradient Descent with Adaptive Momentum Scaling* | | <https://arxiv.org/abs/2412.17107> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv241217107C/exportcitation) |
|
|
199
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
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) |
|
|
203
|
+
| FOCUS | *First Order Concentrated Updating Scheme* | [github](https://github.com/liuyz0/FOCUS) | <https://arxiv.org/abs/2501.12243> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250112243M/exportcitation) |
|
|
204
|
+
| PSGD | *Preconditioned Stochastic Gradient Descent* | [github](https://github.com/lixilinx/psgd_torch) | <https://arxiv.org/abs/1512.04202> | [cite](https://github.com/lixilinx/psgd_torch?tab=readme-ov-file#resources) |
|
|
205
|
+
| EXAdam | *The Power of Adaptive Cross-Moments* | [github](https://github.com/AhmedMostafa16/EXAdam) | <https://arxiv.org/abs/2412.20302> | [cite](https://github.com/AhmedMostafa16/EXAdam?tab=readme-ov-file#citation) |
|
|
201
206
|
|
|
202
207
|
## Supported LR Scheduler
|
|
203
208
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pytorch_optimizer"
|
|
3
|
-
version = "3.
|
|
3
|
+
version = "3.4.0"
|
|
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", "
|
|
18
|
-
"Kate", "Lamb", "LaProp", "LARS", "Lion", "LOMO", "Lookahead", "MADGRAD", "MARS", "MSVAG",
|
|
19
|
-
"NovoGrad", "OrthoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"Tversky", "FocalTversky", "LovaszHinge", "bitsandbytes", "WSD", "QGaLore",
|
|
17
|
+
"DAdaptLion", "DeMo", "DiffGrad", "EXAdam", "FAdam", "FOCUS", "Fromage", "FTRL", "GaLore", "Grams", "Gravity",
|
|
18
|
+
"GrokFast", "GSAM", "Kate", "Lamb", "LaProp", "LARS", "Lion", "LOMO", "Lookahead", "MADGRAD", "MARS", "MSVAG",
|
|
19
|
+
"Muno", "Nero", "NovoGrad", "OrthoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "PSGD", "QHAdam", "QHM",
|
|
20
|
+
"RAdam", "Ranger", "Ranger21", "RotoGrad", "SAM", "ScheduleFreeSGD", "ScheduleFreeAdamW", "ScheduleFreeRAdam",
|
|
21
|
+
"SGDP", "Shampoo", "ScalableShampoo", "SGDW", "SignSGD", "SM3", "SOAP", "SopihaH", "SPAM", "SRMM", "StableAdamW",
|
|
22
|
+
"SWATS", "TAM", "Tiger", "TRAC", "WSAM", "Yogi", "BCE", "BCEFocal", "Focal", "FocalCosine", "SoftF1", "Dice",
|
|
23
|
+
"LDAM", "Jaccard", "Bi-Tempered", "Tversky", "FocalTversky", "LovaszHinge", "bitsandbytes", "WSD", "QGaLore",
|
|
24
24
|
]
|
|
25
25
|
classifiers = [
|
|
26
26
|
"License :: OSI Approved :: Apache Software License",
|
|
@@ -52,29 +52,27 @@ numpy = [
|
|
|
52
52
|
{ version = "<=1.24.4", python = "<3.9" },
|
|
53
53
|
]
|
|
54
54
|
torch = { version = ">=1.10", python = ">=3.8", source = "torch" }
|
|
55
|
-
bitsandbytes = { version = "^0.44", optional = true }
|
|
56
55
|
|
|
57
|
-
[tool.poetry.dev
|
|
58
|
-
isort =
|
|
59
|
-
|
|
56
|
+
[tool.poetry.group.dev.dependencies]
|
|
57
|
+
isort = [
|
|
58
|
+
{ version = "<6", python = "<3.9" },
|
|
59
|
+
{ version = "^6", python = ">=3.9" },
|
|
60
|
+
]
|
|
61
|
+
black = [
|
|
62
|
+
{ version = "<25", python = "<3.9" },
|
|
63
|
+
{ version = "^25", python = ">=3.9" },
|
|
64
|
+
]
|
|
60
65
|
ruff = "*"
|
|
61
66
|
pytest = "*"
|
|
62
67
|
pytest-cov = "*"
|
|
63
68
|
|
|
64
|
-
[tool.poetry.extras]
|
|
65
|
-
bitsandbytes = ["bitsandbytes"]
|
|
66
|
-
|
|
67
69
|
[[tool.poetry.source]]
|
|
68
70
|
name = "torch"
|
|
69
71
|
url = "https://download.pytorch.org/whl/cpu"
|
|
70
72
|
priority = "explicit"
|
|
71
73
|
|
|
72
74
|
[tool.ruff]
|
|
73
|
-
src = [
|
|
74
|
-
"pytorch_optimizer",
|
|
75
|
-
"tests",
|
|
76
|
-
"examples",
|
|
77
|
-
]
|
|
75
|
+
src = ["pytorch_optimizer", "tests", "examples"]
|
|
78
76
|
target-version = "py312"
|
|
79
77
|
line-length = 119
|
|
80
78
|
exclude = [
|
|
@@ -97,8 +95,10 @@ select = [
|
|
|
97
95
|
"TID", "ARG", "ERA", "RUF", "YTT", "PL", "Q"
|
|
98
96
|
]
|
|
99
97
|
ignore = [
|
|
100
|
-
"A005", "B905",
|
|
101
|
-
"
|
|
98
|
+
"A005", "B905",
|
|
99
|
+
"D100", "D102", "D104", "D105", "D107", "D203", "D213", "D413",
|
|
100
|
+
"PLR0912", "PLR0913", "PLR0915", "PLR2004",
|
|
101
|
+
"Q003", "ARG002",
|
|
102
102
|
]
|
|
103
103
|
fixable = ["ALL"]
|
|
104
104
|
unfixable = ["F401"]
|
|
@@ -107,10 +107,10 @@ flake8-quotes.docstring-quotes = "double"
|
|
|
107
107
|
flake8-quotes.inline-quotes = "single"
|
|
108
108
|
|
|
109
109
|
[tool.ruff.lint.extend-per-file-ignores]
|
|
110
|
-
"hubconf.py" = ["D", "INP001"]
|
|
111
110
|
"examples/visualize_optimizers.py" = ["D103", "D400", "D415"]
|
|
112
|
-
"**/__init__.py" = ["F401"]
|
|
113
111
|
"{tests,examples}/*.py" = ["D", "S101"]
|
|
112
|
+
"**/__init__.py" = ["F401"]
|
|
113
|
+
"hubconf.py" = ["D", "INP001"]
|
|
114
114
|
|
|
115
115
|
[tool.ruff.lint.isort]
|
|
116
116
|
combine-as-imports = false
|
|
@@ -129,9 +129,9 @@ testpaths = "tests"
|
|
|
129
129
|
|
|
130
130
|
[tool.coverage.run]
|
|
131
131
|
omit = [
|
|
132
|
-
"./pytorch_optimizer/optimizer/rotograd.py",
|
|
133
132
|
"./pytorch_optimizer/optimizer/adam_mini.py",
|
|
134
133
|
"./pytorch_optimizer/optimizer/demo.py",
|
|
134
|
+
"./pytorch_optimizer/optimizer/rotograd.py",
|
|
135
135
|
]
|
|
136
136
|
|
|
137
137
|
[build-system]
|
|
@@ -46,6 +46,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
46
46
|
ASGD,
|
|
47
47
|
BSAM,
|
|
48
48
|
CAME,
|
|
49
|
+
FOCUS,
|
|
49
50
|
FTRL,
|
|
50
51
|
GSAM,
|
|
51
52
|
LARS,
|
|
@@ -61,8 +62,10 @@ from pytorch_optimizer.optimizer import (
|
|
|
61
62
|
SGDW,
|
|
62
63
|
SM3,
|
|
63
64
|
SOAP,
|
|
65
|
+
SPAM,
|
|
64
66
|
SRMM,
|
|
65
67
|
SWATS,
|
|
68
|
+
TAM,
|
|
66
69
|
TRAC,
|
|
67
70
|
WSAM,
|
|
68
71
|
A2Grad,
|
|
@@ -87,6 +90,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
87
90
|
AdaPNM,
|
|
88
91
|
AdaShift,
|
|
89
92
|
AdaSmooth,
|
|
93
|
+
AdaTAM,
|
|
90
94
|
AdEMAMix,
|
|
91
95
|
AggMo,
|
|
92
96
|
Aida,
|
|
@@ -102,6 +106,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
102
106
|
DeMo,
|
|
103
107
|
DiffGrad,
|
|
104
108
|
DynamicLossScaler,
|
|
109
|
+
EXAdam,
|
|
105
110
|
FAdam,
|
|
106
111
|
Fromage,
|
|
107
112
|
GaLore,
|
|
@@ -109,6 +114,7 @@ from pytorch_optimizer.optimizer import (
|
|
|
109
114
|
Gravity,
|
|
110
115
|
GrokFastAdamW,
|
|
111
116
|
Kate,
|
|
117
|
+
Kron,
|
|
112
118
|
Lamb,
|
|
113
119
|
LaProp,
|
|
114
120
|
Lion,
|
|
@@ -6,7 +6,16 @@ import torch
|
|
|
6
6
|
from torch.optim import Optimizer
|
|
7
7
|
|
|
8
8
|
from pytorch_optimizer.base.exception import NegativeLRError, NegativeStepError
|
|
9
|
-
from pytorch_optimizer.base.types import
|
|
9
|
+
from pytorch_optimizer.base.types import (
|
|
10
|
+
BETAS,
|
|
11
|
+
CLOSURE,
|
|
12
|
+
DEFAULTS,
|
|
13
|
+
HUTCHINSON_G,
|
|
14
|
+
LOSS,
|
|
15
|
+
OPTIMIZER_INSTANCE_OR_CLASS,
|
|
16
|
+
PARAMETERS,
|
|
17
|
+
STATE,
|
|
18
|
+
)
|
|
10
19
|
|
|
11
20
|
|
|
12
21
|
class BaseOptimizer(ABC, Optimizer):
|
|
@@ -15,6 +24,18 @@ class BaseOptimizer(ABC, Optimizer):
|
|
|
15
24
|
def __init__(self, params: PARAMETERS, defaults: DEFAULTS) -> None:
|
|
16
25
|
super().__init__(params, defaults)
|
|
17
26
|
|
|
27
|
+
@staticmethod
|
|
28
|
+
def load_optimizer(optimizer: OPTIMIZER_INSTANCE_OR_CLASS, **kwargs) -> Optimizer:
|
|
29
|
+
r"""Build torch.optim.Optimizer class."""
|
|
30
|
+
if isinstance(optimizer, Optimizer):
|
|
31
|
+
return optimizer
|
|
32
|
+
|
|
33
|
+
if 'params' in kwargs:
|
|
34
|
+
params = kwargs.pop('params')
|
|
35
|
+
return optimizer(params, **kwargs)
|
|
36
|
+
|
|
37
|
+
raise ValueError('need to pass `params` when you pass the `torch.optim.Optimizer` instance.')
|
|
38
|
+
|
|
18
39
|
@staticmethod
|
|
19
40
|
@torch.no_grad()
|
|
20
41
|
def set_hessian(param_groups: PARAMETERS, state: STATE, hessian: List[torch.Tensor]) -> None:
|
|
@@ -317,7 +338,7 @@ class BaseOptimizer(ABC, Optimizer):
|
|
|
317
338
|
@staticmethod
|
|
318
339
|
def validate_options(x: str, name: str, options: List[str]) -> None:
|
|
319
340
|
if x not in options:
|
|
320
|
-
opts: str = ' or '.join([f'
|
|
341
|
+
opts: str = ' or '.join([f"'{option}'" for option in options]).strip()
|
|
321
342
|
raise ValueError(f'[-] {name} {x} must be one of ({opts})')
|
|
322
343
|
|
|
323
344
|
@staticmethod
|
|
@@ -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']
|
|
@@ -49,7 +49,7 @@ class JaccardLoss(_Loss):
|
|
|
49
49
|
def __init__(
|
|
50
50
|
self,
|
|
51
51
|
mode: CLASS_MODE,
|
|
52
|
-
classes: List[int] = None,
|
|
52
|
+
classes: Optional[List[int]] = None,
|
|
53
53
|
log_loss: bool = False,
|
|
54
54
|
from_logits: bool = True,
|
|
55
55
|
label_smooth: float = 0.0,
|
|
@@ -59,7 +59,7 @@ class JaccardLoss(_Loss):
|
|
|
59
59
|
|
|
60
60
|
if classes is not None:
|
|
61
61
|
if mode == 'binary':
|
|
62
|
-
raise ValueError('
|
|
62
|
+
raise ValueError('masking classes is not supported with mode=binary')
|
|
63
63
|
|
|
64
64
|
classes = torch.LongTensor(classes)
|
|
65
65
|
|
|
@@ -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,8 +40,10 @@ 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.exadam import EXAdam
|
|
43
44
|
from pytorch_optimizer.optimizer.experimental.ranger25 import Ranger25
|
|
44
45
|
from pytorch_optimizer.optimizer.fadam import FAdam
|
|
46
|
+
from pytorch_optimizer.optimizer.focus import FOCUS
|
|
45
47
|
from pytorch_optimizer.optimizer.fp16 import DynamicLossScaler, SafeFP16Optimizer
|
|
46
48
|
from pytorch_optimizer.optimizer.fromage import Fromage
|
|
47
49
|
from pytorch_optimizer.optimizer.ftrl import FTRL
|
|
@@ -69,6 +71,7 @@ from pytorch_optimizer.optimizer.pcgrad import PCGrad
|
|
|
69
71
|
from pytorch_optimizer.optimizer.pid import PID
|
|
70
72
|
from pytorch_optimizer.optimizer.pnm import PNM
|
|
71
73
|
from pytorch_optimizer.optimizer.prodigy import Prodigy
|
|
74
|
+
from pytorch_optimizer.optimizer.psgd import Kron
|
|
72
75
|
from pytorch_optimizer.optimizer.qhadam import QHAdam
|
|
73
76
|
from pytorch_optimizer.optimizer.qhm import QHM
|
|
74
77
|
from pytorch_optimizer.optimizer.radam import RAdam
|
|
@@ -83,8 +86,10 @@ from pytorch_optimizer.optimizer.shampoo import ScalableShampoo, Shampoo
|
|
|
83
86
|
from pytorch_optimizer.optimizer.sm3 import SM3
|
|
84
87
|
from pytorch_optimizer.optimizer.soap import SOAP
|
|
85
88
|
from pytorch_optimizer.optimizer.sophia import SophiaH
|
|
89
|
+
from pytorch_optimizer.optimizer.spam import SPAM
|
|
86
90
|
from pytorch_optimizer.optimizer.srmm import SRMM
|
|
87
91
|
from pytorch_optimizer.optimizer.swats import SWATS
|
|
92
|
+
from pytorch_optimizer.optimizer.tam import TAM, AdaTAM
|
|
88
93
|
from pytorch_optimizer.optimizer.tiger import Tiger
|
|
89
94
|
from pytorch_optimizer.optimizer.trac import TRAC
|
|
90
95
|
from pytorch_optimizer.optimizer.yogi import Yogi
|
|
@@ -251,6 +256,8 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
|
|
|
251
256
|
SRMM,
|
|
252
257
|
AvaGrad,
|
|
253
258
|
AdaShift,
|
|
259
|
+
TAM,
|
|
260
|
+
AdaTAM,
|
|
254
261
|
AdaDelta,
|
|
255
262
|
Amos,
|
|
256
263
|
AdaHessian,
|
|
@@ -285,7 +292,11 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
|
|
|
285
292
|
LaProp,
|
|
286
293
|
MARS,
|
|
287
294
|
SGDSaI,
|
|
295
|
+
FOCUS,
|
|
288
296
|
Grams,
|
|
297
|
+
SPAM,
|
|
298
|
+
Kron,
|
|
299
|
+
EXAdam,
|
|
289
300
|
Ranger25,
|
|
290
301
|
]
|
|
291
302
|
OPTIMIZERS: Dict[str, OPTIMIZER] = {str(optimizer.__name__).lower(): optimizer for optimizer in OPTIMIZER_LIST}
|
|
@@ -298,8 +309,9 @@ def create_optimizer(
|
|
|
298
309
|
weight_decay: float = 0.0,
|
|
299
310
|
wd_ban_list: List[str] = ('bias', 'LayerNorm.bias', 'LayerNorm.weight'),
|
|
300
311
|
use_lookahead: bool = False,
|
|
312
|
+
use_orthograd: bool = False,
|
|
301
313
|
**kwargs,
|
|
302
|
-
):
|
|
314
|
+
) -> Optimizer:
|
|
303
315
|
r"""Build optimizer.
|
|
304
316
|
|
|
305
317
|
:param model: nn.Module. model.
|
|
@@ -307,7 +319,8 @@ def create_optimizer(
|
|
|
307
319
|
:param lr: float. learning rate.
|
|
308
320
|
:param weight_decay: float. weight decay.
|
|
309
321
|
:param wd_ban_list: List[str]. weight decay ban list by layer.
|
|
310
|
-
:param use_lookahead: bool. use
|
|
322
|
+
:param use_lookahead: bool. use Lookahead.
|
|
323
|
+
:param use_orthograd: bool. use OrthoGrad.
|
|
311
324
|
"""
|
|
312
325
|
optimizer_name = optimizer_name.lower()
|
|
313
326
|
|
|
@@ -315,14 +328,17 @@ def create_optimizer(
|
|
|
315
328
|
get_optimizer_parameters(model, weight_decay, wd_ban_list) if weight_decay > 0.0 else model.parameters()
|
|
316
329
|
)
|
|
317
330
|
|
|
318
|
-
|
|
331
|
+
optimizer_class: OPTIMIZER = load_optimizer(optimizer_name)
|
|
319
332
|
|
|
320
333
|
if optimizer_name == 'alig':
|
|
321
|
-
optimizer =
|
|
334
|
+
optimizer = optimizer_class(parameters, max_lr=lr, **kwargs)
|
|
322
335
|
elif optimizer_name in {'lomo', 'adalomo', 'adammini'}:
|
|
323
|
-
optimizer =
|
|
336
|
+
optimizer = optimizer_class(model, lr=lr, **kwargs)
|
|
324
337
|
else:
|
|
325
|
-
optimizer =
|
|
338
|
+
optimizer = optimizer_class(parameters, lr=lr, **kwargs)
|
|
339
|
+
|
|
340
|
+
if use_orthograd:
|
|
341
|
+
optimizer = OrthoGrad(optimizer, **kwargs)
|
|
326
342
|
|
|
327
343
|
if use_lookahead:
|
|
328
344
|
optimizer = Lookahead(
|
{pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/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,8 +107,7 @@ 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
|
-
lr = group['lr'] / rms
|
|
110
|
+
lr: float = group['lr'] / self.get_stable_adamw_rms(grad, exp_avg_sq, eps=eps_p2)
|
|
112
111
|
|
|
113
112
|
self.apply_weight_decay(
|
|
114
113
|
p,
|