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.
Files changed (122) hide show
  1. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/PKG-INFO +9 -6
  2. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/README.md +7 -2
  3. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pyproject.toml +25 -25
  4. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/__init__.py +6 -0
  5. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/optimizer.py +23 -2
  6. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/scheduler.py +4 -3
  7. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/types.py +1 -0
  8. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/jaccard.py +2 -2
  9. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +3 -4
  10. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/rex.py +3 -4
  11. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/__init__.py +24 -8
  12. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adafactor.py +2 -2
  13. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamp.py +4 -3
  14. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamw.py +1 -2
  15. pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/exadam.py +123 -0
  16. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/experimental/ranger25.py +39 -26
  17. pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/focus.py +95 -0
  18. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/fp16.py +31 -36
  19. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ftrl.py +1 -1
  20. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lookahead.py +7 -5
  21. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/muon.py +2 -2
  22. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/nero.py +4 -4
  23. pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/orthograd.py +71 -0
  24. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/pcgrad.py +5 -5
  25. pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/psgd.py +375 -0
  26. pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/psgd_utils.py +94 -0
  27. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/rotograd.py +1 -1
  28. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sam.py +4 -3
  29. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sgd.py +2 -2
  30. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/shampoo_utils.py +3 -3
  31. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/soap.py +13 -5
  32. pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/spam.py +269 -0
  33. pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/tam.py +221 -0
  34. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/trac.py +16 -8
  35. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/utils.py +1 -1
  36. pytorch_optimizer-3.3.3/pytorch_optimizer/optimizer/orthograd.py +0 -48
  37. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/LICENSE +0 -0
  38. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/__init__.py +0 -0
  39. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/base/exception.py +0 -0
  40. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/__init__.py +0 -0
  41. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/bi_tempered.py +0 -0
  42. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/cross_entropy.py +0 -0
  43. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/dice.py +0 -0
  44. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/f1.py +0 -0
  45. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/focal.py +0 -0
  46. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/ldam.py +0 -0
  47. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/lovasz.py +0 -0
  48. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/loss/tversky.py +0 -0
  49. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
  50. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
  51. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
  52. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
  53. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
  54. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
  55. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/lr_scheduler/wsd.py +0 -0
  56. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/a2grad.py +0 -0
  57. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adabelief.py +0 -0
  58. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adabound.py +0 -0
  59. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adadelta.py +0 -0
  60. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adahessian.py +0 -0
  61. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adai.py +0 -0
  62. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adalite.py +0 -0
  63. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adam_mini.py +0 -0
  64. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamax.py +0 -0
  65. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamg.py +0 -0
  66. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adamod.py +0 -0
  67. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adams.py +0 -0
  68. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adan.py +0 -0
  69. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adanorm.py +0 -0
  70. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adapnm.py +0 -0
  71. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adashift.py +0 -0
  72. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adasmooth.py +0 -0
  73. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ademamix.py +0 -0
  74. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/adopt.py +0 -0
  75. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/agc.py +0 -0
  76. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/aggmo.py +0 -0
  77. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/aida.py +0 -0
  78. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/alig.py +0 -0
  79. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/amos.py +0 -0
  80. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/apollo.py +0 -0
  81. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/avagrad.py +0 -0
  82. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/came.py +0 -0
  83. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/dadapt.py +0 -0
  84. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/demo.py +0 -0
  85. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/diffgrad.py +0 -0
  86. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
  87. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/fadam.py +0 -0
  88. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/fromage.py +0 -0
  89. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/galore.py +0 -0
  90. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/galore_utils.py +0 -0
  91. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/gc.py +0 -0
  92. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/grams.py +0 -0
  93. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/gravity.py +0 -0
  94. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/grokfast.py +0 -0
  95. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/kate.py +0 -0
  96. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lamb.py +0 -0
  97. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/laprop.py +0 -0
  98. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lars.py +0 -0
  99. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lion.py +0 -0
  100. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/lomo.py +0 -0
  101. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/madgrad.py +0 -0
  102. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/mars.py +0 -0
  103. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/msvag.py +0 -0
  104. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/novograd.py +0 -0
  105. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/padam.py +0 -0
  106. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/pid.py +0 -0
  107. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/pnm.py +0 -0
  108. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/prodigy.py +0 -0
  109. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/qhadam.py +0 -0
  110. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/qhm.py +0 -0
  111. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/radam.py +0 -0
  112. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ranger.py +0 -0
  113. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/ranger21.py +0 -0
  114. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/schedulefree.py +0 -0
  115. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sgdp.py +0 -0
  116. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/shampoo.py +0 -0
  117. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sm3.py +0 -0
  118. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/sophia.py +0 -0
  119. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/srmm.py +0 -0
  120. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/swats.py +0 -0
  121. {pytorch_optimizer-3.3.3 → pytorch_optimizer-3.4.0}/pytorch_optimizer/optimizer/tiger.py +0 -0
  122. {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.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, **89 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
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, **89 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
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.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", "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", "SRMM", "StableAdamW", "SWATS", "Tiger", "TRAC",
22
- "WSAM", "Yogi", "BCE", "BCEFocal", "Focal", "FocalCosine", "SoftF1", "Dice", "LDAM", "Jaccard", "Bi-Tempered",
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-dependencies]
58
- isort = { version = "^5", python = ">=3.8" }
59
- black = { version = "^24", python = ">=3.8" }
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", "D100", "D102", "D104", "D105", "D107", "D203", "D213", "D413", "PIE790", "PLR0912", "PLR0913",
101
- "PLR0915", "PLR2004", "RUF013", "Q003", "ARG002",
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 BETAS, CLOSURE, DEFAULTS, HUTCHINSON_G, LOSS, PARAMETERS, STATE
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'\'{option}\'' for option in options]).strip()
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. OPTIMIZER. It will set learning rate to all trainable parameters in 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: 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('[-] Masking classes is not supported with mode=binary')
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: 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: 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 lookahead.
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
- optimizer = load_optimizer(optimizer_name)
331
+ optimizer_class: OPTIMIZER = load_optimizer(optimizer_name)
319
332
 
320
333
  if optimizer_name == 'alig':
321
- optimizer = optimizer(parameters, max_lr=lr, **kwargs)
334
+ optimizer = optimizer_class(parameters, max_lr=lr, **kwargs)
322
335
  elif optimizer_name in {'lomo', 'adalomo', 'adammini'}:
323
- optimizer = optimizer(model, lr=lr, **kwargs)
336
+ optimizer = optimizer_class(model, lr=lr, **kwargs)
324
337
  else:
325
- optimizer = optimizer(parameters, lr=lr, **kwargs)
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(
@@ -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
- hessian trace. if beta1 is None, first momentum will be skipped.
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
- rms = self.get_stable_adamw_rms(grad, exp_avg_sq, eps=eps_p2)
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,