pytorch-optimizer 3.1.1__tar.gz → 3.1.2__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 (103) hide show
  1. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/PKG-INFO +4 -3
  2. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/README.md +2 -1
  3. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pyproject.toml +11 -11
  4. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/__init__.py +2 -0
  5. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/rex.py +1 -1
  6. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/a2grad.py +1 -0
  7. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adabelief.py +1 -0
  8. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adabound.py +1 -0
  9. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adadelta.py +1 -0
  10. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adafactor.py +1 -0
  11. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adahessian.py +1 -0
  12. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adai.py +1 -0
  13. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adalite.py +1 -0
  14. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adam_mini.py +1 -0
  15. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adamax.py +1 -0
  16. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adamg.py +1 -0
  17. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adamod.py +1 -0
  18. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adamp.py +1 -0
  19. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adams.py +1 -0
  20. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adamw.py +1 -0
  21. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adan.py +1 -0
  22. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adanorm.py +1 -0
  23. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adapnm.py +1 -0
  24. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adashift.py +1 -0
  25. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/adasmooth.py +1 -0
  26. pytorch_optimizer-3.1.2/pytorch_optimizer/optimizer/ademamix.py +149 -0
  27. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/aggmo.py +1 -0
  28. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/aida.py +1 -0
  29. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/alig.py +1 -0
  30. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/amos.py +1 -0
  31. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/apollo.py +1 -0
  32. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/avagrad.py +1 -0
  33. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/came.py +1 -0
  34. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/dadapt.py +5 -0
  35. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/diffgrad.py +1 -0
  36. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/fadam.py +1 -0
  37. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/fromage.py +1 -1
  38. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/galore.py +6 -1
  39. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/gravity.py +1 -0
  40. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/grokfast.py +1 -0
  41. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/kate.py +1 -0
  42. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/lamb.py +1 -0
  43. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/lars.py +1 -0
  44. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/lion.py +1 -0
  45. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/lomo.py +2 -0
  46. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/lookahead.py +1 -0
  47. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/madgrad.py +1 -0
  48. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/msvag.py +7 -1
  49. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/nero.py +7 -1
  50. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/novograd.py +1 -0
  51. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/padam.py +1 -0
  52. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/pid.py +1 -0
  53. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/pnm.py +1 -0
  54. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/prodigy.py +1 -0
  55. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/qhadam.py +1 -0
  56. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/qhm.py +1 -0
  57. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/radam.py +1 -0
  58. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/ranger.py +1 -0
  59. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/ranger21.py +1 -0
  60. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/rotograd.py +1 -1
  61. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/schedulefree.py +2 -0
  62. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/sgd.py +4 -0
  63. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/sgdp.py +1 -0
  64. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/shampoo.py +2 -0
  65. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/shampoo_utils.py +1 -1
  66. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/sm3.py +1 -0
  67. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/sophia.py +1 -0
  68. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/srmm.py +8 -1
  69. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/swats.py +1 -0
  70. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/tiger.py +1 -0
  71. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/trac.py +1 -0
  72. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/yogi.py +1 -0
  73. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/LICENSE +0 -0
  74. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/base/__init__.py +0 -0
  75. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/base/exception.py +0 -0
  76. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/base/optimizer.py +0 -0
  77. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/base/scheduler.py +0 -0
  78. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/base/types.py +0 -0
  79. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/__init__.py +0 -0
  80. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/bi_tempered.py +0 -0
  81. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/cross_entropy.py +0 -0
  82. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/dice.py +0 -0
  83. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/f1.py +0 -0
  84. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/focal.py +0 -0
  85. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/jaccard.py +0 -0
  86. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/ldam.py +0 -0
  87. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/lovasz.py +0 -0
  88. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/loss/tversky.py +0 -0
  89. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
  90. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
  91. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +0 -0
  92. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
  93. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
  94. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
  95. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
  96. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/lr_scheduler/wsd.py +0 -0
  97. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/__init__.py +0 -0
  98. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/agc.py +0 -0
  99. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/fp16.py +0 -0
  100. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/gc.py +0 -0
  101. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/pcgrad.py +0 -0
  102. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/sam.py +0 -0
  103. {pytorch_optimizer-3.1.1 → pytorch_optimizer-3.1.2}/pytorch_optimizer/optimizer/utils.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytorch_optimizer
3
- Version: 3.1.1
3
+ Version: 3.1.2
4
4
  Summary: optimizer & lr scheduler & objective function collections in PyTorch
5
5
  Home-page: https://github.com/kozistr/pytorch_optimizer
6
6
  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,AdaHessian,Adai,Adalite,AdaLomo,AdamMini,AdamP,AdamS,Adan,AggMo,Aida,AliG,Amos,Apollo,AvaGrad,bSAM,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DAdaptLion,DiffGrad,FAdam,Fromage,GaLore,Gravity,GrokFast,GSAM,Kate,Lamb,LARS,Lion,LOMO,Lookahead,MADGRAD,MSVAG,Nero,NovoGrad,PAdam,PCGrad,PID,PNM,Prodigy,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,ScheduleFreeSGD,ScheduleFreeAdamW,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SopihaH,SRMM,StableAdamW,SWATS,Tiger,TRAC,WSAM,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge,bitsandbytes,WSD,QGaLore
7
+ Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdamG,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdEMAMix,AdaHessian,Adai,Adalite,AdaLomo,AdamMini,AdamP,AdamS,Adan,AggMo,Aida,AliG,Amos,Apollo,AvaGrad,bSAM,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DAdaptLion,DiffGrad,FAdam,Fromage,GaLore,Gravity,GrokFast,GSAM,Kate,Lamb,LARS,Lion,LOMO,Lookahead,MADGRAD,MSVAG,Nero,NovoGrad,PAdam,PCGrad,PID,PNM,Prodigy,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,ScheduleFreeSGD,ScheduleFreeAdamW,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SopihaH,SRMM,StableAdamW,SWATS,Tiger,TRAC,WSAM,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge,bitsandbytes,WSD,QGaLore
8
8
  Author: kozistr
9
9
  Author-email: kozistr@gmail.com
10
10
  Maintainer: kozistr
@@ -49,7 +49,7 @@ Description-Content-Type: text/markdown
49
49
 
50
50
  **pytorch-optimizer** is optimizer & lr scheduler collections in PyTorch.
51
51
  I just re-implemented (speed & memory tweaks, plug-ins) the algorithm while based on the original paper. Also, It includes useful and practical optimization ideas.
52
- Currently, **75 optimizers (+ `bitsandbytes`, `qgalore`)**, **16 lr schedulers**, and **13 loss functions** are supported!
52
+ Currently, **76 optimizers (+ `bitsandbytes`, `qgalore`)**, **16 lr schedulers**, and **13 loss functions** are supported!
53
53
 
54
54
  Highly inspired by [pytorch-optimizer](https://github.com/jettify/pytorch-optimizer).
55
55
 
@@ -212,6 +212,7 @@ supported_optimizers = get_supported_optimizers()
212
212
  | AdamMini | *Use Fewer Learning Rates To Gain More* | [github](https://github.com/zyushun/Adam-mini) | <https://arxiv.org/abs/2406.16793> | [cite](https://github.com/zyushun/Adam-mini?tab=readme-ov-file#citation) |
213
213
  | TRAC | *Adaptive Parameter-free Optimization* | [github](https://github.com/ComputationalRobotics/TRAC) | <https://arxiv.org/abs/2405.16642> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv240516642M/exportcitation) |
214
214
  | AdamG | *Towards Stability of Parameter-free Optimization* | | <https://arxiv.org/abs/2405.04376> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv240504376P/exportcitation) |
215
+ | AdEMAMix | *Better, Faster, Older* | [github](https://github.com/nanowell/AdEMAMix-Optimizer-Pytorch) | <https://arxiv.org/abs/2409.03137> | [cite](https://github.com/nanowell/AdEMAMix-Optimizer-Pytorch?tab=readme-ov-file#reference) |
215
216
 
216
217
  ## Supported LR Scheduler
217
218
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  **pytorch-optimizer** is optimizer & lr scheduler collections in PyTorch.
12
12
  I just re-implemented (speed & memory tweaks, plug-ins) the algorithm while based on the original paper. Also, It includes useful and practical optimization ideas.
13
- Currently, **75 optimizers (+ `bitsandbytes`, `qgalore`)**, **16 lr schedulers**, and **13 loss functions** are supported!
13
+ Currently, **76 optimizers (+ `bitsandbytes`, `qgalore`)**, **16 lr schedulers**, and **13 loss functions** are supported!
14
14
 
15
15
  Highly inspired by [pytorch-optimizer](https://github.com/jettify/pytorch-optimizer).
16
16
 
@@ -173,6 +173,7 @@ supported_optimizers = get_supported_optimizers()
173
173
  | AdamMini | *Use Fewer Learning Rates To Gain More* | [github](https://github.com/zyushun/Adam-mini) | <https://arxiv.org/abs/2406.16793> | [cite](https://github.com/zyushun/Adam-mini?tab=readme-ov-file#citation) |
174
174
  | TRAC | *Adaptive Parameter-free Optimization* | [github](https://github.com/ComputationalRobotics/TRAC) | <https://arxiv.org/abs/2405.16642> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv240516642M/exportcitation) |
175
175
  | AdamG | *Towards Stability of Parameter-free Optimization* | | <https://arxiv.org/abs/2405.04376> | [cite](https://ui.adsabs.harvard.edu/abs/2024arXiv240504376P/exportcitation) |
176
+ | AdEMAMix | *Better, Faster, Older* | [github](https://github.com/nanowell/AdEMAMix-Optimizer-Pytorch) | <https://arxiv.org/abs/2409.03137> | [cite](https://github.com/nanowell/AdEMAMix-Optimizer-Pytorch?tab=readme-ov-file#reference) |
176
177
 
177
178
  ## Supported LR Scheduler
178
179
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pytorch_optimizer"
3
- version = "3.1.1"
3
+ version = "3.1.2"
4
4
  description = "optimizer & lr scheduler & objective function collections in PyTorch"
5
5
  license = "Apache-2.0"
6
6
  authors = ["kozistr <kozistr@gmail.com>"]
@@ -11,15 +11,15 @@ repository = "https://github.com/kozistr/pytorch_optimizer"
11
11
  documentation = "https://pytorch-optimizers.readthedocs.io/en/latest"
12
12
  keywords = [
13
13
  "pytorch", "deep-learning", "optimizer", "lr scheduler", "A2Grad", "ASGD", "AccSGD", "AdaBelief", "AdaBound",
14
- "AdaDelta", "AdaFactor", "AdaMax", "AdamG", "AdaMod", "AdaNorm", "AdaPNM", "AdaSmooth", "AdaHessian", "Adai",
15
- "Adalite", "AdaLomo", "AdamMini", "AdamP", "AdamS", "Adan", "AggMo", "Aida", "AliG", "Amos", "Apollo", "AvaGrad",
16
- "bSAM", "CAME", "DAdaptAdaGrad", "DAdaptAdam", "DAdaptAdan", "DAdaptSGD", "DAdaptLion", "DiffGrad", "FAdam",
17
- "Fromage", "GaLore", "Gravity", "GrokFast", "GSAM", "Kate", "Lamb", "LARS", "Lion", "LOMO", "Lookahead", "MADGRAD",
18
- "MSVAG", "Nero", "NovoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "QHAdam", "QHM", "RAdam", "Ranger",
19
- "Ranger21", "RotoGrad", "SAM", "ScheduleFreeSGD", "ScheduleFreeAdamW", "SGDP", "Shampoo", "ScalableShampoo", "SGDW",
20
- "SignSGD", "SM3", "SopihaH", "SRMM", "StableAdamW", "SWATS", "Tiger", "TRAC", "WSAM", "Yogi", "BCE", "BCEFocal",
21
- "Focal", "FocalCosine", "SoftF1", "Dice", "LDAM", "Jaccard", "Bi-Tempered", "Tversky", "FocalTversky",
22
- "LovaszHinge", "bitsandbytes", "WSD", "QGaLore",
14
+ "AdaDelta", "AdaFactor", "AdaMax", "AdamG", "AdaMod", "AdaNorm", "AdaPNM", "AdaSmooth", "AdEMAMix", "AdaHessian",
15
+ "Adai", "Adalite", "AdaLomo", "AdamMini", "AdamP", "AdamS", "Adan", "AggMo", "Aida", "AliG", "Amos", "Apollo",
16
+ "AvaGrad", "bSAM", "CAME", "DAdaptAdaGrad", "DAdaptAdam", "DAdaptAdan", "DAdaptSGD", "DAdaptLion", "DiffGrad",
17
+ "FAdam", "Fromage", "GaLore", "Gravity", "GrokFast", "GSAM", "Kate", "Lamb", "LARS", "Lion", "LOMO", "Lookahead",
18
+ "MADGRAD", "MSVAG", "Nero", "NovoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "QHAdam", "QHM", "RAdam",
19
+ "Ranger", "Ranger21", "RotoGrad", "SAM", "ScheduleFreeSGD", "ScheduleFreeAdamW", "SGDP", "Shampoo",
20
+ "ScalableShampoo", "SGDW", "SignSGD", "SM3", "SopihaH", "SRMM", "StableAdamW", "SWATS", "Tiger", "TRAC", "WSAM",
21
+ "Yogi", "BCE", "BCEFocal", "Focal", "FocalCosine", "SoftF1", "Dice", "LDAM", "Jaccard", "Bi-Tempered", "Tversky",
22
+ "FocalTversky", "LovaszHinge", "bitsandbytes", "WSD", "QGaLore",
23
23
  ]
24
24
  classifiers = [
25
25
  "License :: OSI Approved :: Apache Software License",
@@ -71,7 +71,7 @@ lint.select = [
71
71
  ]
72
72
  lint.ignore = [
73
73
  "B905", "D100", "D102", "D104", "D105", "D107", "D203", "D213", "D413", "PIE790", "PLR0912", "PLR0913", "PLR0915",
74
- "PLR2004", "RUF013", "Q003",
74
+ "PLR2004", "RUF013", "Q003", "ARG002",
75
75
  ]
76
76
  lint.fixable = ["ALL"]
77
77
  lint.unfixable = ["F401"]
@@ -54,6 +54,7 @@ from pytorch_optimizer.optimizer.adanorm import AdaNorm
54
54
  from pytorch_optimizer.optimizer.adapnm import AdaPNM
55
55
  from pytorch_optimizer.optimizer.adashift import AdaShift
56
56
  from pytorch_optimizer.optimizer.adasmooth import AdaSmooth
57
+ from pytorch_optimizer.optimizer.ademamix import AdEMAMix
57
58
  from pytorch_optimizer.optimizer.agc import agc
58
59
  from pytorch_optimizer.optimizer.aggmo import AggMo
59
60
  from pytorch_optimizer.optimizer.aida import Aida
@@ -208,6 +209,7 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
208
209
  AdamMini,
209
210
  AdaLOMO,
210
211
  AdamG,
212
+ AdEMAMix,
211
213
  ]
212
214
  OPTIMIZERS: Dict[str, OPTIMIZER] = {str(optimizer.__name__).lower(): optimizer for optimizer in OPTIMIZER_LIST}
213
215
 
@@ -52,7 +52,7 @@ class REXScheduler(LRScheduler):
52
52
 
53
53
  return self.min_lr + (self.max_lr - self.min_lr) * ((1.0 - progress) / (1.0 - progress / 2.0))
54
54
 
55
- def step(self, epoch: Optional[int] = None) -> float: # noqa: ARG002
55
+ def step(self, epoch: Optional[int] = None) -> float:
56
56
  value: float = self.get_linear_lr()
57
57
 
58
58
  self.step_t += 1
@@ -27,6 +27,7 @@ class A2Grad(BaseOptimizer):
27
27
  lips: float = 10.0,
28
28
  rho: float = 0.5,
29
29
  variant: str = 'uni',
30
+ **kwargs,
30
31
  ):
31
32
  self.validate_learning_rate(lr)
32
33
  self.validate_non_negative(lips, 'lips')
@@ -42,6 +42,7 @@ class AdaBelief(BaseOptimizer):
42
42
  adanorm: bool = False,
43
43
  adam_debias: bool = False,
44
44
  eps: float = 1e-16,
45
+ **kwargs,
45
46
  ):
46
47
  self.validate_learning_rate(lr)
47
48
  self.validate_betas(betas)
@@ -37,6 +37,7 @@ class AdaBound(BaseOptimizer):
37
37
  ams_bound: bool = False,
38
38
  adam_debias: bool = False,
39
39
  eps: float = 1e-8,
40
+ **kwargs,
40
41
  ):
41
42
  self.validate_learning_rate(lr)
42
43
  self.validate_betas(betas)
@@ -26,6 +26,7 @@ class AdaDelta(BaseOptimizer):
26
26
  weight_decouple: bool = False,
27
27
  fixed_decay: bool = False,
28
28
  eps: float = 1e-6,
29
+ **kwargs,
29
30
  ):
30
31
  self.validate_learning_rate(lr)
31
32
  self.validate_range(rho, 'rho', 0.0, 1.0)
@@ -49,6 +49,7 @@ class AdaFactor(BaseOptimizer):
49
49
  eps1: float = 1e-30,
50
50
  eps2: float = 1e-3,
51
51
  momentum_dtype: torch.dtype = torch.bfloat16,
52
+ **kwargs,
52
53
  ):
53
54
  self.validate_learning_rate(lr)
54
55
  self.validate_betas(betas)
@@ -40,6 +40,7 @@ class AdaHessian(BaseOptimizer):
40
40
  hessian_distribution: HUTCHINSON_G = 'rademacher',
41
41
  adam_debias: bool = False,
42
42
  eps: float = 1e-16,
43
+ **kwargs,
43
44
  ):
44
45
  self.validate_learning_rate(lr)
45
46
  self.validate_betas(betas)
@@ -35,6 +35,7 @@ class Adai(BaseOptimizer):
35
35
  dampening: float = 1.0,
36
36
  use_gc: bool = False,
37
37
  eps: float = 1e-3,
38
+ **kwargs,
38
39
  ):
39
40
  self.validate_learning_rate(lr)
40
41
  self.validate_betas(betas)
@@ -35,6 +35,7 @@ class Adalite(BaseOptimizer):
35
35
  tau: float = 1.0,
36
36
  eps1: float = 1e-6,
37
37
  eps2: float = 1e-10,
38
+ **kwargs,
38
39
  ):
39
40
  self.validate_learning_rate(lr)
40
41
  self.validate_betas(betas)
@@ -38,6 +38,7 @@ class AdamMini(BaseOptimizer): # pragma: no cover
38
38
  num_heads: int = 32,
39
39
  num_query_groups: Optional[int] = None,
40
40
  eps: float = 1e-8,
41
+ **kwargs,
41
42
  ):
42
43
  self.validate_learning_rate(lr)
43
44
  self.validate_betas(betas)
@@ -32,6 +32,7 @@ class AdaMax(BaseOptimizer):
32
32
  adanorm: bool = False,
33
33
  adam_debias: bool = False,
34
34
  eps: float = 1e-8,
35
+ **kwargs,
35
36
  ):
36
37
  self.validate_learning_rate(lr)
37
38
  self.validate_betas(betas)
@@ -32,6 +32,7 @@ class AdamG(BaseOptimizer):
32
32
  weight_decouple: bool = False,
33
33
  fixed_decay: bool = False,
34
34
  eps: float = 1e-8,
35
+ **kwargs,
35
36
  ):
36
37
  self.validate_learning_rate(lr)
37
38
  self.validate_betas(betas)
@@ -31,6 +31,7 @@ class AdaMod(BaseOptimizer):
31
31
  fixed_decay: bool = False,
32
32
  adam_debias: bool = False,
33
33
  eps: float = 1e-8,
34
+ **kwargs,
34
35
  ):
35
36
  self.validate_learning_rate(lr)
36
37
  self.validate_betas(betas)
@@ -45,6 +45,7 @@ class AdamP(BaseOptimizer):
45
45
  adanorm: bool = False,
46
46
  adam_debias: bool = False,
47
47
  eps: float = 1e-8,
48
+ **kwargs,
48
49
  ):
49
50
  self.validate_learning_rate(lr)
50
51
  self.validate_betas(betas)
@@ -36,6 +36,7 @@ class AdamS(BaseOptimizer):
36
36
  adanorm: bool = False,
37
37
  adam_debias: bool = False,
38
38
  eps: float = 1e-8,
39
+ **kwargs,
39
40
  ):
40
41
  self.validate_learning_rate(lr)
41
42
  self.validate_betas(betas)
@@ -29,6 +29,7 @@ class StableAdamW(BaseOptimizer):
29
29
  weight_decay: float = 1e-2,
30
30
  weight_decouple: bool = True,
31
31
  eps: float = 1e-8,
32
+ **kwargs,
32
33
  ):
33
34
  self.validate_learning_rate(lr)
34
35
  self.validate_betas(betas)
@@ -37,6 +37,7 @@ class Adan(BaseOptimizer):
37
37
  r: float = 0.95,
38
38
  adanorm: bool = False,
39
39
  eps: float = 1e-8,
40
+ **kwargs,
40
41
  ):
41
42
  self.validate_learning_rate(lr)
42
43
  self.validate_betas(betas)
@@ -34,6 +34,7 @@ class AdaNorm(BaseOptimizer):
34
34
  ams_bound: bool = False,
35
35
  adam_debias: bool = False,
36
36
  eps: float = 1e-8,
37
+ **kwargs,
37
38
  ):
38
39
  self.validate_learning_rate(lr)
39
40
  self.validate_betas(betas)
@@ -36,6 +36,7 @@ class AdaPNM(BaseOptimizer):
36
36
  adanorm: bool = False,
37
37
  adam_debias: bool = False,
38
38
  eps: float = 1e-8,
39
+ **kwargs,
39
40
  ):
40
41
  self.validate_learning_rate(lr)
41
42
  self.validate_betas(betas)
@@ -28,6 +28,7 @@ class AdaShift(BaseOptimizer):
28
28
  keep_num: int = 10,
29
29
  reduce_func: Optional[Callable] = torch.max,
30
30
  eps: float = 1e-10,
31
+ **kwargs,
31
32
  ):
32
33
  self.validate_learning_rate(lr)
33
34
  self.validate_betas(betas)
@@ -26,6 +26,7 @@ class AdaSmooth(BaseOptimizer):
26
26
  weight_decouple: bool = False,
27
27
  fixed_decay: bool = False,
28
28
  eps: float = 1e-6,
29
+ **kwargs,
29
30
  ):
30
31
  self.validate_learning_rate(lr)
31
32
  self.validate_betas(betas)
@@ -0,0 +1,149 @@
1
+ import math
2
+ from typing import Optional
3
+
4
+ import torch
5
+
6
+ from pytorch_optimizer.base.exception import NoSparseGradientError
7
+ from pytorch_optimizer.base.optimizer import BaseOptimizer
8
+ from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
+
10
+
11
+ class AdEMAMix(BaseOptimizer):
12
+ r"""Better, Faster, Older.
13
+
14
+ :param params: PARAMETERS. iterable of parameters to optimize or dicts defining parameter groups.
15
+ :param lr: float. learning rate.
16
+ :param betas: BETAS. coefficients used for computing running averages of gradient and the squared hessian trace.
17
+ :param weight_decay: float. weight decay (L2 penalty).
18
+ :param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
19
+ :param fixed_decay: bool. fix weight decay.
20
+ :param alpha: float. usually between 4 and 10 would work well.
21
+ :param t_alpha_beta3: Optional[float]. total number of iterations is preferred when needed.
22
+ :param eps: float. term added to the denominator to improve numerical stability.
23
+ """
24
+
25
+ def __init__(
26
+ self,
27
+ params: PARAMETERS,
28
+ lr: float = 1e-3,
29
+ betas: BETAS = (0.9, 0.999, 0.9999),
30
+ weight_decay: float = 0.0,
31
+ weight_decouple: bool = False,
32
+ fixed_decay: bool = False,
33
+ alpha: float = 5.0,
34
+ t_alpha_beta3: Optional[float] = None,
35
+ eps: float = 1e-8,
36
+ **kwargs,
37
+ ):
38
+ self.validate_learning_rate(lr)
39
+ self.validate_betas(betas)
40
+ self.validate_non_negative(alpha, 'alpha')
41
+ self.validate_non_negative(t_alpha_beta3, 't_alpha_beta3')
42
+ self.validate_non_negative(weight_decay, 'weight_decay')
43
+ self.validate_non_negative(eps, 'eps')
44
+
45
+ defaults: DEFAULTS = {
46
+ 'lr': lr,
47
+ 'betas': betas,
48
+ 'weight_decay': weight_decay,
49
+ 'weight_decouple': weight_decouple,
50
+ 'fixed_decay': fixed_decay,
51
+ 'alpha': alpha,
52
+ 't_alpha_beta3': t_alpha_beta3,
53
+ 'eps': eps,
54
+ }
55
+
56
+ super().__init__(params, defaults)
57
+
58
+ def __str__(self) -> str:
59
+ return 'AdEMAMix'
60
+
61
+ @torch.no_grad()
62
+ def reset(self):
63
+ for group in self.param_groups:
64
+ group['step'] = 0
65
+ for p in group['params']:
66
+ state = self.state[p]
67
+
68
+ state['exp_avg'] = torch.zeros_like(p)
69
+ state['exp_avg_sq'] = torch.zeros_like(p)
70
+ state['exp_avg_slow'] = torch.zeros_like(p)
71
+
72
+ @staticmethod
73
+ def schedule_alpha(t_alpha_beta3: Optional[float], step: int, alpha: float) -> float:
74
+ if t_alpha_beta3 is None:
75
+ return alpha
76
+ return min(step * alpha / t_alpha_beta3, alpha)
77
+
78
+ @staticmethod
79
+ def schedule_beta3(t_alpha_beta3: Optional[float], step: int, beta1: float, beta3: float) -> float:
80
+ if t_alpha_beta3 is None:
81
+ return beta3
82
+
83
+ log_beta1, log_beta3 = math.log(beta1), math.log(beta3)
84
+
85
+ return min(
86
+ math.exp(
87
+ log_beta1 * log_beta3 / ((1.0 - step / t_alpha_beta3) * log_beta3 + (step / t_alpha_beta3) * log_beta1)
88
+ ),
89
+ beta3,
90
+ )
91
+
92
+ @torch.no_grad()
93
+ def step(self, closure: CLOSURE = None) -> LOSS:
94
+ loss: LOSS = None
95
+ if closure is not None:
96
+ with torch.enable_grad():
97
+ loss = closure()
98
+
99
+ for group in self.param_groups:
100
+ if 'step' in group:
101
+ group['step'] += 1
102
+ else:
103
+ group['step'] = 1
104
+
105
+ beta1, beta2, beta3 = group['betas']
106
+
107
+ bias_correction1: float = self.debias(beta1, group['step'])
108
+ bias_correction2_sq: float = math.sqrt(self.debias(beta2, group['step']))
109
+
110
+ alpha_t: float = self.schedule_alpha(group['t_alpha_beta3'], group['step'], group['alpha'])
111
+ beta3_t: float = self.schedule_beta3(group['t_alpha_beta3'], group['step'], beta1, beta3)
112
+
113
+ for p in group['params']:
114
+ if p.grad is None:
115
+ continue
116
+
117
+ grad = p.grad
118
+ if grad.is_sparse:
119
+ raise NoSparseGradientError(str(self))
120
+
121
+ state = self.state[p]
122
+
123
+ if len(state) == 0:
124
+ state['exp_avg'] = torch.zeros_like(p)
125
+ state['exp_avg_sq'] = torch.zeros_like(p)
126
+ state['exp_avg_slow'] = torch.zeros_like(p)
127
+
128
+ self.apply_weight_decay(
129
+ p=p,
130
+ grad=grad,
131
+ lr=group['lr'],
132
+ weight_decay=group['weight_decay'],
133
+ weight_decouple=group['weight_decouple'],
134
+ fixed_decay=group['fixed_decay'],
135
+ )
136
+
137
+ exp_avg, exp_avg_sq, exp_avg_slow = state['exp_avg'], state['exp_avg_sq'], state['exp_avg_slow']
138
+
139
+ exp_avg.mul_(beta1).add_(grad, alpha=1.0 - beta1)
140
+ exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1.0 - beta2)
141
+ exp_avg_slow.mul_(beta3_t).add_(grad, alpha=1.0 - beta3_t)
142
+
143
+ de_nom = (exp_avg_sq.sqrt() / bias_correction2_sq).add_(group['eps'])
144
+
145
+ step_size = group['lr'] / bias_correction1
146
+
147
+ p.addcdiv_(exp_avg + alpha_t * exp_avg_slow, de_nom, value=-step_size)
148
+
149
+ return loss
@@ -24,6 +24,7 @@ class AggMo(BaseOptimizer):
24
24
  weight_decay: float = 0.0,
25
25
  weight_decouple: bool = False,
26
26
  fixed_decay: bool = False,
27
+ **kwargs,
27
28
  ):
28
29
  self.validate_learning_rate(lr)
29
30
  self.validate_betas(betas)
@@ -46,6 +46,7 @@ class Aida(BaseOptimizer):
46
46
  adanorm: bool = False,
47
47
  adam_debias: bool = False,
48
48
  eps: float = 1e-8,
49
+ **kwargs,
49
50
  ):
50
51
  self.validate_learning_rate(lr)
51
52
  self.validate_betas(betas)
@@ -25,6 +25,7 @@ class AliG(BaseOptimizer):
25
25
  projection_fn: Optional[Callable] = None,
26
26
  momentum: float = 0.0,
27
27
  adjusted_momentum: bool = False,
28
+ **kwargs,
28
29
  ):
29
30
  self.validate_learning_rate(max_lr)
30
31
  self.validate_range(momentum, 'momentum', 0.0, 1.0)
@@ -31,6 +31,7 @@ class Amos(BaseOptimizer):
31
31
  c_coef: float = 0.25,
32
32
  d_coef: float = 0.25,
33
33
  eps: float = 1e-18,
34
+ **kwargs,
34
35
  ):
35
36
  self.validate_learning_rate(lr)
36
37
  self.validate_range(momentum, 'momentum', 0.0, 1.0, range_type='[)')
@@ -33,6 +33,7 @@ class Apollo(BaseOptimizer):
33
33
  weight_decay_type: str = 'l2',
34
34
  warmup_steps: int = 500,
35
35
  eps: float = 1e-4,
36
+ **kwargs,
36
37
  ):
37
38
  self.validate_learning_rate(lr)
38
39
  self.validate_range(beta, 'beta', 0.0, 1.0, range_type='[]')
@@ -30,6 +30,7 @@ class AvaGrad(BaseOptimizer):
30
30
  fixed_decay: bool = False,
31
31
  adam_debias: bool = False,
32
32
  eps: float = 1e-1,
33
+ **kwargs,
33
34
  ):
34
35
  self.validate_learning_rate(lr)
35
36
  self.validate_betas(betas)
@@ -35,6 +35,7 @@ class CAME(BaseOptimizer):
35
35
  ams_bound: bool = False,
36
36
  eps1: float = 1e-30,
37
37
  eps2: float = 1e-16,
38
+ **kwargs,
38
39
  ):
39
40
  self.validate_learning_rate(lr)
40
41
  self.validate_betas(betas)
@@ -39,6 +39,7 @@ class DAdaptAdaGrad(BaseOptimizer):
39
39
  weight_decouple: bool = False,
40
40
  fixed_decay: bool = False,
41
41
  eps: float = 0.0,
42
+ **kwargs,
42
43
  ):
43
44
  self.validate_learning_rate(lr)
44
45
  self.validate_range(momentum, 'momentum', 0.0, 1.0, range_type='[)')
@@ -266,6 +267,7 @@ class DAdaptAdam(BaseOptimizer):
266
267
  fixed_decay: bool = False,
267
268
  bias_correction: bool = False,
268
269
  eps: float = 1e-8,
270
+ **kwargs,
269
271
  ):
270
272
  self.validate_learning_rate(lr)
271
273
  self.validate_betas(betas)
@@ -423,6 +425,7 @@ class DAdaptSGD(BaseOptimizer):
423
425
  weight_decay: float = 0.0,
424
426
  weight_decouple: bool = False,
425
427
  fixed_decay: bool = False,
428
+ **kwargs,
426
429
  ):
427
430
  self.validate_learning_rate(lr)
428
431
  self.validate_range(momentum, 'momentum', 0.0, 1.0, range_type='[)')
@@ -560,6 +563,7 @@ class DAdaptAdan(BaseOptimizer):
560
563
  d0: float = 1e-6,
561
564
  growth_rate: float = float('inf'),
562
565
  eps: float = 1e-8,
566
+ **kwargs,
563
567
  ):
564
568
  self.validate_learning_rate(lr)
565
569
  self.validate_betas(betas)
@@ -721,6 +725,7 @@ class DAdaptLion(BaseOptimizer):
721
725
  weight_decay: float = 0.0,
722
726
  weight_decouple: bool = False,
723
727
  fixed_decay: bool = False,
728
+ **kwargs,
724
729
  ):
725
730
  self.validate_learning_rate(lr)
726
731
  self.validate_betas(betas)
@@ -40,6 +40,7 @@ class DiffGrad(BaseOptimizer):
40
40
  adanorm: bool = False,
41
41
  adam_debias: bool = False,
42
42
  eps: float = 1e-8,
43
+ **kwargs,
43
44
  ):
44
45
  self.validate_learning_rate(lr)
45
46
  self.validate_betas(betas)
@@ -30,6 +30,7 @@ class FAdam(BaseOptimizer):
30
30
  eps: float = 1e-8,
31
31
  momentum_dtype: torch.dtype = torch.float32,
32
32
  fim_dtype: torch.dtype = torch.float32,
33
+ **kwargs,
33
34
  ):
34
35
  self.validate_learning_rate(lr)
35
36
  self.validate_betas(betas)
@@ -22,7 +22,7 @@ class Fromage(BaseOptimizer):
22
22
  norms to lie within 2x their initial norms. This regularises the model class.
23
23
  """
24
24
 
25
- def __init__(self, params: PARAMETERS, lr: float = 1e-2, p_bound: Optional[float] = None):
25
+ def __init__(self, params: PARAMETERS, lr: float = 1e-2, p_bound: Optional[float] = None, **kwargs):
26
26
  self.validate_learning_rate(lr)
27
27
 
28
28
  self.p_bound = p_bound
@@ -21,7 +21,12 @@ class GaLoreProjector:
21
21
  """
22
22
 
23
23
  def __init__(
24
- self, rank: int = 128, update_proj_gap: int = 50, scale: float = 1.0, projection_type: PROJECTION_TYPE = 'std'
24
+ self,
25
+ rank: int = 128,
26
+ update_proj_gap: int = 50,
27
+ scale: float = 1.0,
28
+ projection_type: PROJECTION_TYPE = 'std',
29
+ **kwargs,
25
30
  ):
26
31
  self.rank = rank
27
32
  self.update_proj_gap = update_proj_gap
@@ -20,6 +20,7 @@ class Gravity(BaseOptimizer):
20
20
  lr: float = 1e-2,
21
21
  alpha: float = 0.01,
22
22
  beta: float = 0.9,
23
+ **kwargs,
23
24
  ):
24
25
  self.validate_learning_rate(lr)
25
26
  self.validate_range(alpha, 'alpha', 0.0, 1.0)
@@ -128,6 +128,7 @@ class GrokFastAdamW(BaseOptimizer):
128
128
  fixed_decay: bool = False,
129
129
  normalize_lr: bool = True,
130
130
  eps: float = 1e-8,
131
+ **kwargs,
131
132
  ):
132
133
  self.validate_learning_rate(lr)
133
134
  self.validate_betas(betas)
@@ -26,6 +26,7 @@ class Kate(BaseOptimizer):
26
26
  weight_decouple: bool = True,
27
27
  fixed_decay: bool = False,
28
28
  eps: float = 1e-8,
29
+ **kwargs,
29
30
  ):
30
31
  self.validate_learning_rate(lr)
31
32
  self.validate_range(delta, 'delta', 0.0, 1.0, '[)')
@@ -53,6 +53,7 @@ class Lamb(BaseOptimizer):
53
53
  adanorm: bool = False,
54
54
  adam_debias: bool = False,
55
55
  eps: float = 1e-6,
56
+ **kwargs,
56
57
  ):
57
58
  self.validate_learning_rate(lr)
58
59
  self.validate_betas(betas)
@@ -26,6 +26,7 @@ class LARS(BaseOptimizer):
26
26
  dampening: float = 0.0,
27
27
  trust_coefficient: float = 1e-3,
28
28
  nesterov: bool = False,
29
+ **kwargs,
29
30
  ):
30
31
  self.validate_learning_rate(lr)
31
32
  self.validate_non_negative(weight_decay, 'weight_decay')
@@ -31,6 +31,7 @@ class Lion(BaseOptimizer):
31
31
  use_gc: bool = False,
32
32
  r: float = 0.95,
33
33
  adanorm: bool = False,
34
+ **kwargs,
34
35
  ):
35
36
  self.validate_learning_rate(lr)
36
37
  self.validate_betas(betas)
@@ -30,6 +30,7 @@ class LOMO(BaseOptimizer):
30
30
  lr: float = 1e-3,
31
31
  clip_grad_norm: Optional[float] = None,
32
32
  clip_grad_value: Optional[float] = None,
33
+ **kwargs,
33
34
  ):
34
35
  self.validate_learning_rate(lr)
35
36
  self.validate_non_negative(clip_grad_norm, 'clip_grad_norm')
@@ -228,6 +229,7 @@ class AdaLOMO(BaseOptimizer):
228
229
  clip_grad_value: Optional[float] = None,
229
230
  eps1: float = 1e-30,
230
231
  eps2: float = 1e-3,
232
+ **kwargs,
231
233
  ) -> None: # fmt: skip
232
234
  self.validate_learning_rate(lr)
233
235
  self.validate_non_negative(weight_decay, 'weight_decay')
@@ -22,6 +22,7 @@ class Lookahead(BaseOptimizer):
22
22
  k: int = 5,
23
23
  alpha: float = 0.5,
24
24
  pullback_momentum: str = 'none',
25
+ **kwargs,
25
26
  ) -> None:
26
27
  self.validate_positive(k, 'k')
27
28
  self.validate_range(alpha, 'alpha', 0.0, 1.0)
@@ -32,6 +32,7 @@ class MADGRAD(BaseOptimizer):
32
32
  weight_decay: float = 0.0,
33
33
  weight_decouple: bool = False,
34
34
  eps: float = 1e-6,
35
+ **kwargs,
35
36
  ):
36
37
  self.validate_learning_rate(lr)
37
38
  self.validate_non_negative(weight_decay, 'weight_decay')
@@ -13,7 +13,13 @@ class MSVAG(BaseOptimizer):
13
13
  :param beta: float. Moving average (momentum) constant (scalar tensor or float value).
14
14
  """
15
15
 
16
- def __init__(self, params: PARAMETERS, lr: float = 1e-2, beta: float = 0.9):
16
+ def __init__(
17
+ self,
18
+ params: PARAMETERS,
19
+ lr: float = 1e-2,
20
+ beta: float = 0.9,
21
+ **kwargs,
22
+ ):
17
23
  self.validate_learning_rate(lr)
18
24
  self.validate_range(beta, 'beta', 0.0, 1.0, range_type='[]')
19
25
 
@@ -17,7 +17,13 @@ class Nero(BaseOptimizer):
17
17
  """
18
18
 
19
19
  def __init__(
20
- self, params: PARAMETERS, lr: float = 0.01, beta: float = 0.999, constraints: bool = True, eps: float = 1e-8
20
+ self,
21
+ params: PARAMETERS,
22
+ lr: float = 0.01,
23
+ beta: float = 0.999,
24
+ constraints: bool = True,
25
+ eps: float = 1e-8,
26
+ **kwargs,
21
27
  ):
22
28
  self.validate_learning_rate(lr)
23
29
  self.validate_range(beta, 'beta', 0.0, 1.0, range_type='[]')
@@ -32,6 +32,7 @@ class NovoGrad(BaseOptimizer):
32
32
  grad_averaging: bool = False,
33
33
  adam_debias: bool = False,
34
34
  eps: float = 1e-8,
35
+ **kwargs,
35
36
  ):
36
37
  self.validate_learning_rate(lr)
37
38
  self.validate_betas(betas)
@@ -30,6 +30,7 @@ class PAdam(BaseOptimizer):
30
30
  weight_decouple: bool = False,
31
31
  fixed_decay: bool = False,
32
32
  eps: float = 1e-8,
33
+ **kwargs,
33
34
  ):
34
35
  self.validate_learning_rate(lr)
35
36
  self.validate_betas(betas)
@@ -30,6 +30,7 @@ class PID(BaseOptimizer):
30
30
  weight_decay: float = 0.0,
31
31
  weight_decouple: bool = False,
32
32
  fixed_decay: bool = False,
33
+ **kwargs,
33
34
  ):
34
35
  self.validate_learning_rate(lr)
35
36
  self.validate_range(momentum, 'momentum', 0.0, 1.0)
@@ -28,6 +28,7 @@ class PNM(BaseOptimizer):
28
28
  weight_decouple: bool = True,
29
29
  fixed_decay: bool = False,
30
30
  eps: float = 1e-8,
31
+ **kwargs,
31
32
  ):
32
33
  self.validate_learning_rate(lr)
33
34
  self.validate_betas(betas)
@@ -44,6 +44,7 @@ class Prodigy(BaseOptimizer):
44
44
  bias_correction: bool = False,
45
45
  safeguard_warmup: bool = False,
46
46
  eps: float = 1e-8,
47
+ **kwargs,
47
48
  ):
48
49
  self.validate_learning_rate(lr)
49
50
  self.validate_betas((*betas, beta3))
@@ -30,6 +30,7 @@ class QHAdam(BaseOptimizer):
30
30
  weight_decouple: bool = False,
31
31
  fixed_decay: bool = False,
32
32
  eps: float = 1e-8,
33
+ **kwargs,
33
34
  ):
34
35
  self.validate_learning_rate(lr)
35
36
  self.validate_betas(betas)
@@ -26,6 +26,7 @@ class QHM(BaseOptimizer):
26
26
  weight_decay: float = 0.0,
27
27
  weight_decouple: bool = False,
28
28
  fixed_decay: bool = False,
29
+ **kwargs,
29
30
  ):
30
31
  self.validate_learning_rate(lr)
31
32
  self.validate_range(momentum, 'momentum', 0.0, 1.0)
@@ -36,6 +36,7 @@ class RAdam(BaseOptimizer):
36
36
  adanorm: bool = False,
37
37
  adam_debias: bool = False,
38
38
  eps: float = 1e-8,
39
+ **kwargs,
39
40
  ):
40
41
  self.validate_learning_rate(lr)
41
42
  self.validate_betas(betas)
@@ -43,6 +43,7 @@ class Ranger(BaseOptimizer):
43
43
  adanorm: bool = False,
44
44
  adam_debias: bool = False,
45
45
  eps: float = 1e-5,
46
+ **kwargs,
46
47
  ):
47
48
  self.validate_learning_rate(lr)
48
49
  self.validate_betas(betas)
@@ -82,6 +82,7 @@ class Ranger21(BaseOptimizer):
82
82
  norm_loss_factor: float = 1e-4,
83
83
  adam_debias: bool = False,
84
84
  eps: float = 1e-8,
85
+ **kwargs,
85
86
  ):
86
87
  self.validate_learning_rate(lr)
87
88
  self.validate_learning_rate(warm_down_min_lr)
@@ -176,7 +176,7 @@ class RotateOnly(nn.Module):
176
176
  backbone: nn.Module,
177
177
  heads: Sequence[nn.Module],
178
178
  latent_size: int,
179
- *args, # noqa: ARG002
179
+ *args,
180
180
  burn_in_period: int = 20,
181
181
  normalize_losses: bool = False,
182
182
  ):
@@ -36,6 +36,7 @@ class ScheduleFreeSGD(BaseOptimizer):
36
36
  weight_lr_power: float = 2.0,
37
37
  warmup_steps: int = 0,
38
38
  eps: float = 1e-8,
39
+ **kwargs,
39
40
  ):
40
41
  self.validate_learning_rate(lr)
41
42
  self.validate_range(momentum, 'momentum', 0.0, 1.0, range_type='[]')
@@ -180,6 +181,7 @@ class ScheduleFreeAdamW(BaseOptimizer):
180
181
  warmup_steps: int = 0,
181
182
  ams_bound: bool = False,
182
183
  eps: float = 1e-8,
184
+ **kwargs,
183
185
  ):
184
186
  self.validate_learning_rate(lr)
185
187
  self.validate_betas(betas)
@@ -27,6 +27,7 @@ class AccSGD(BaseOptimizer):
27
27
  xi: float = 10.0,
28
28
  constant: float = 0.7,
29
29
  weight_decay: float = 0.0,
30
+ **kwargs,
30
31
  ):
31
32
  self.validate_learning_rate(lr)
32
33
  self.validate_non_negative(kappa, 'kappa')
@@ -124,6 +125,7 @@ class SGDW(BaseOptimizer):
124
125
  weight_decouple: bool = True,
125
126
  dampening: float = 0.0,
126
127
  nesterov: bool = False,
128
+ **kwargs,
127
129
  ):
128
130
  self.validate_learning_rate(lr)
129
131
  self.validate_range(momentum, 'momentum', 0.0, 1.0)
@@ -222,6 +224,7 @@ class ASGD(BaseOptimizer):
222
224
  theta: float = 1.0,
223
225
  dampening: float = 1.0,
224
226
  eps: float = 1e-5,
227
+ **kwargs,
225
228
  ):
226
229
  self.validate_learning_rate(lr)
227
230
  self.validate_non_negative(amplifier, 'amplifier')
@@ -339,6 +342,7 @@ class SignSGD(BaseOptimizer):
339
342
  momentum: float = 0.9,
340
343
  weight_decay: float = 0.0,
341
344
  weight_decouple: bool = True,
345
+ **kwargs,
342
346
  ):
343
347
  self.validate_learning_rate(lr)
344
348
  self.validate_range(momentum, 'beta', 0.0, 1.0)
@@ -36,6 +36,7 @@ class SGDP(BaseOptimizer):
36
36
  wd_ratio: float = 0.1,
37
37
  nesterov: bool = False,
38
38
  eps: float = 1e-8,
39
+ **kwargs,
39
40
  ):
40
41
  self.validate_learning_rate(lr)
41
42
  self.validate_non_negative(weight_decay, 'weight_decay')
@@ -36,6 +36,7 @@ class Shampoo(BaseOptimizer):
36
36
  fixed_decay: bool = False,
37
37
  preconditioning_compute_steps: int = 1,
38
38
  matrix_eps: float = 1e-6,
39
+ **kwargs,
39
40
  ):
40
41
  self.validate_learning_rate(lr)
41
42
  self.validate_range(momentum, 'momentum', 0.0, 1.0)
@@ -211,6 +212,7 @@ class ScalableShampoo(BaseOptimizer):
211
212
  diagonal_eps: float = 1e-10,
212
213
  matrix_eps: float = 1e-6,
213
214
  use_svd: bool = False,
215
+ **kwargs,
214
216
  ):
215
217
  self.validate_learning_rate(lr)
216
218
  self.validate_betas(betas)
@@ -37,7 +37,7 @@ class Graft:
37
37
  r"""Get preconditioned gradient."""
38
38
  return grad
39
39
 
40
- def update_momentum(self, update: torch.Tensor, unused_beta1: float) -> torch.Tensor: # noqa: ARG002
40
+ def update_momentum(self, update: torch.Tensor, unused_beta1: float) -> torch.Tensor:
41
41
  r"""Update momentum."""
42
42
  return update
43
43
 
@@ -23,6 +23,7 @@ class SM3(BaseOptimizer):
23
23
  momentum: float = 0.0,
24
24
  beta: float = 0.0,
25
25
  eps: float = 1e-30,
26
+ **kwargs,
26
27
  ):
27
28
  self.validate_learning_rate(lr)
28
29
  self.validate_range(momentum, 'momentum', 0.0, 1.0)
@@ -38,6 +38,7 @@ class SophiaH(BaseOptimizer):
38
38
  num_samples: int = 1,
39
39
  hessian_distribution: HUTCHINSON_G = 'gaussian',
40
40
  eps: float = 1e-12,
41
+ **kwargs,
41
42
  ):
42
43
  self.validate_learning_rate(lr)
43
44
  self.validate_betas(betas)
@@ -16,7 +16,14 @@ class SRMM(BaseOptimizer):
16
16
  :param memory_length: Optional[int]. internal memory length for moving average. None for no refreshing.
17
17
  """
18
18
 
19
- def __init__(self, params: PARAMETERS, lr: float = 0.01, beta: float = 0.5, memory_length: Optional[int] = 100):
19
+ def __init__(
20
+ self,
21
+ params: PARAMETERS,
22
+ lr: float = 0.01,
23
+ beta: float = 0.5,
24
+ memory_length: Optional[int] = 100,
25
+ **kwargs,
26
+ ):
20
27
  self.validate_learning_rate(lr)
21
28
  self.validate_range(beta, 'beta', 0.0, 1.0, range_type='[]')
22
29
 
@@ -38,6 +38,7 @@ class SWATS(BaseOptimizer):
38
38
  adanorm: bool = False,
39
39
  adam_debias: bool = False,
40
40
  eps: float = 1e-6,
41
+ **kwargs,
41
42
  ):
42
43
  self.validate_learning_rate(lr)
43
44
  self.validate_betas(betas)
@@ -24,6 +24,7 @@ class Tiger(BaseOptimizer):
24
24
  weight_decay: float = 0.01,
25
25
  weight_decouple: bool = True,
26
26
  fixed_decay: bool = False,
27
+ **kwargs,
27
28
  ):
28
29
  self.validate_learning_rate(lr)
29
30
  self.validate_range(beta, 'beta', 0.0, 1.0, range_type='[)')
@@ -105,6 +105,7 @@ class TRAC(BaseOptimizer):
105
105
  num_coefs: int = 128,
106
106
  s_prev: float = 1e-8,
107
107
  eps: float = 1e-8,
108
+ **kwargs,
108
109
  ):
109
110
  self.validate_positive(num_coefs, 'num_coefs')
110
111
  self.validate_non_negative(s_prev, 's_prev')
@@ -36,6 +36,7 @@ class Yogi(BaseOptimizer):
36
36
  adanorm: bool = False,
37
37
  adam_debias: bool = False,
38
38
  eps: float = 1e-3,
39
+ **kwargs,
39
40
  ):
40
41
  self.validate_learning_rate(lr)
41
42
  self.validate_betas(betas)