pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

Description

@HaithamGaafer

I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
Those are the other parameters I used in my fittings,

kappa = 0.08
nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
ladder_type = 'power_order'
ladder_step = [20, 0.1]
batch_size = 1000
early_stopping_patience = 200
max_iter = 1000

This is the error message I get from the log file after the 1000th iteration,

 --------------------------------------------TEST STATS--------------------------------------------
Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
-------------------------------------------------------------------------------------------------
Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
MAE: 3.90 2.27 10.31 6.08
MAX_AE: 154.11 28.21 1023.20 208.15
-------------------------------------------------------------------------------------------------
2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
Current function value: 0.000229
Iterations: 1000
Function evaluations: 1028
Gradient evaluations: 1028
Fitting took 1767.17 seconds
Current function value: 0.000065
Iterations: 1000
Function evaluations: 1023
Gradient evaluations: 1023
Fitting took 1998.61 seconds
Current function value: 0.000044
Iterations: 1000
Function evaluations: 1024
Gradient evaluations: 1024
Fitting took 3360.17 seconds
Current function value: 0.000031
Iterations: 1000
Function evaluations: 1010
Gradient evaluations: 1010
Fitting took 2765.05 seconds
Current function value: 0.000024
Iterations: 1000
Function evaluations: 1013
Gradient evaluations: 1013
Traceback (most recent call last):
File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
main(sys.argv[1:])
File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
general_fit.fit()
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
current_bbasisconfig = self.fit_backend.fit(
^^^^^^^^^^^^^^^^^^^^^
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
raise e
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
self.process_test_metric()
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
self.test_metric_callback(curr_test_metrics_data)
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
self.detect_early_stopping(mode='test')
File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
raise TestLossChangeTooSmallException(msg)
pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
Traceback (most recent call last):
File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
bbasis = ACEBBasisSet(input_yaml_filename)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Potential file output_potential.yaml doesn't exists

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

      Description

      @HaithamGaafer

      I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

      This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
      Those are the other parameters I used in my fittings,

      kappa = 0.08
      nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
      ladder_type = 'power_order'
      ladder_step = [20, 0.1]
      batch_size = 1000
      early_stopping_patience = 200
      max_iter = 1000
      

      This is the error message I get from the log file after the 1000th iteration,

       --------------------------------------------TEST STATS--------------------------------------------
      Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
      -------------------------------------------------------------------------------------------------
      Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
      MAE: 3.90 2.27 10.31 6.08
      MAX_AE: 154.11 28.21 1023.20 208.15
      -------------------------------------------------------------------------------------------------
      2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
      /cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
      res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
      2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
      Current function value: 0.000229
      Iterations: 1000
      Function evaluations: 1028
      Gradient evaluations: 1028
      Fitting took 1767.17 seconds
      Current function value: 0.000065
      Iterations: 1000
      Function evaluations: 1023
      Gradient evaluations: 1023
      Fitting took 1998.61 seconds
      Current function value: 0.000044
      Iterations: 1000
      Function evaluations: 1024
      Gradient evaluations: 1024
      Fitting took 3360.17 seconds
      Current function value: 0.000031
      Iterations: 1000
      Function evaluations: 1010
      Gradient evaluations: 1010
      Fitting took 2765.05 seconds
      Current function value: 0.000024
      Iterations: 1000
      Function evaluations: 1013
      Gradient evaluations: 1013
      Traceback (most recent call last):
      File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
      main(sys.argv[1:])
      File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
      general_fit.fit()
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
      self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
      current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
      current_bbasisconfig = self.fit_backend.fit(
      ^^^^^^^^^^^^^^^^^^^^^
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
      raise e
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
      fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
      self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
      self.process_test_metric()
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
      self.test_metric_callback(curr_test_metrics_data)
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
      self.detect_early_stopping(mode='test')
      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
      raise TestLossChangeTooSmallException(msg)
      pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
      Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
      Traceback (most recent call last):
      File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
      bbasis = ACEBBasisSet(input_yaml_filename)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      ValueError: Potential file output_potential.yaml doesn't exists
      

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        No labels
        No labels

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

          Description

          @HaithamGaafer

          I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

          This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
          Those are the other parameters I used in my fittings,

          kappa = 0.08
          nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
          ladder_type = 'power_order'
          ladder_step = [20, 0.1]
          batch_size = 1000
          early_stopping_patience = 200
          max_iter = 1000
          

          This is the error message I get from the log file after the 1000th iteration,

           --------------------------------------------TEST STATS--------------------------------------------
          Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
          -------------------------------------------------------------------------------------------------
          Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
          MAE: 3.90 2.27 10.31 6.08
          MAX_AE: 154.11 28.21 1023.20 208.15
          -------------------------------------------------------------------------------------------------
          2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
          /cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
          res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
          2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
          Current function value: 0.000229
          Iterations: 1000
          Function evaluations: 1028
          Gradient evaluations: 1028
          Fitting took 1767.17 seconds
          Current function value: 0.000065
          Iterations: 1000
          Function evaluations: 1023
          Gradient evaluations: 1023
          Fitting took 1998.61 seconds
          Current function value: 0.000044
          Iterations: 1000
          Function evaluations: 1024
          Gradient evaluations: 1024
          Fitting took 3360.17 seconds
          Current function value: 0.000031
          Iterations: 1000
          Function evaluations: 1010
          Gradient evaluations: 1010
          Fitting took 2765.05 seconds
          Current function value: 0.000024
          Iterations: 1000
          Function evaluations: 1013
          Gradient evaluations: 1013
          Traceback (most recent call last):
          File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
          main(sys.argv[1:])
          File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
          general_fit.fit()
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
          self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
          current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
          current_bbasisconfig = self.fit_backend.fit(
          ^^^^^^^^^^^^^^^^^^^^^
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
          raise e
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
          fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
          self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
          self.process_test_metric()
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
          self.test_metric_callback(curr_test_metrics_data)
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
          self.detect_early_stopping(mode='test')
          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
          raise TestLossChangeTooSmallException(msg)
          pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
          Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
          Traceback (most recent call last):
          File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
          bbasis = ACEBBasisSet(input_yaml_filename)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          ValueError: Potential file output_potential.yaml doesn't exists
          

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            No labels
            No labels

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

              Description

              @HaithamGaafer

              I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

              This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
              Those are the other parameters I used in my fittings,

              kappa = 0.08
              nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
              ladder_type = 'power_order'
              ladder_step = [20, 0.1]
              batch_size = 1000
              early_stopping_patience = 200
              max_iter = 1000
              

              This is the error message I get from the log file after the 1000th iteration,

               --------------------------------------------TEST STATS--------------------------------------------
              Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
              -------------------------------------------------------------------------------------------------
              Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
              MAE: 3.90 2.27 10.31 6.08
              MAX_AE: 154.11 28.21 1023.20 208.15
              -------------------------------------------------------------------------------------------------
              2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
              /cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
              res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
              2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
              Current function value: 0.000229
              Iterations: 1000
              Function evaluations: 1028
              Gradient evaluations: 1028
              Fitting took 1767.17 seconds
              Current function value: 0.000065
              Iterations: 1000
              Function evaluations: 1023
              Gradient evaluations: 1023
              Fitting took 1998.61 seconds
              Current function value: 0.000044
              Iterations: 1000
              Function evaluations: 1024
              Gradient evaluations: 1024
              Fitting took 3360.17 seconds
              Current function value: 0.000031
              Iterations: 1000
              Function evaluations: 1010
              Gradient evaluations: 1010
              Fitting took 2765.05 seconds
              Current function value: 0.000024
              Iterations: 1000
              Function evaluations: 1013
              Gradient evaluations: 1013
              Traceback (most recent call last):
              File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
              main(sys.argv[1:])
              File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
              general_fit.fit()
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
              self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
              current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
              current_bbasisconfig = self.fit_backend.fit(
              ^^^^^^^^^^^^^^^^^^^^^
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
              raise e
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
              fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
              self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
              self.process_test_metric()
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
              self.test_metric_callback(curr_test_metrics_data)
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
              self.detect_early_stopping(mode='test')
              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
              raise TestLossChangeTooSmallException(msg)
              pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
              Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
              Traceback (most recent call last):
              File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
              bbasis = ACEBBasisSet(input_yaml_filename)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              ValueError: Potential file output_potential.yaml doesn't exists
              

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                No labels
                No labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

                  Description

                  @HaithamGaafer

                  I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

                  This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
                  Those are the other parameters I used in my fittings,

                  kappa = 0.08
                  nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
                  ladder_type = 'power_order'
                  ladder_step = [20, 0.1]
                  batch_size = 1000
                  early_stopping_patience = 200
                  max_iter = 1000
                  

                  This is the error message I get from the log file after the 1000th iteration,

                   --------------------------------------------TEST STATS--------------------------------------------
                  Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
                  -------------------------------------------------------------------------------------------------
                  Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
                  MAE: 3.90 2.27 10.31 6.08
                  MAX_AE: 154.11 28.21 1023.20 208.15
                  -------------------------------------------------------------------------------------------------
                  2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
                  /cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
                  res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
                  2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                  Current function value: 0.000229
                  Iterations: 1000
                  Function evaluations: 1028
                  Gradient evaluations: 1028
                  Fitting took 1767.17 seconds
                  Current function value: 0.000065
                  Iterations: 1000
                  Function evaluations: 1023
                  Gradient evaluations: 1023
                  Fitting took 1998.61 seconds
                  Current function value: 0.000044
                  Iterations: 1000
                  Function evaluations: 1024
                  Gradient evaluations: 1024
                  Fitting took 3360.17 seconds
                  Current function value: 0.000031
                  Iterations: 1000
                  Function evaluations: 1010
                  Gradient evaluations: 1010
                  Fitting took 2765.05 seconds
                  Current function value: 0.000024
                  Iterations: 1000
                  Function evaluations: 1013
                  Gradient evaluations: 1013
                  Traceback (most recent call last):
                  File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
                  main(sys.argv[1:])
                  File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
                  general_fit.fit()
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
                  self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
                  current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
                  current_bbasisconfig = self.fit_backend.fit(
                  ^^^^^^^^^^^^^^^^^^^^^
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
                  raise e
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
                  fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
                  self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
                  self.process_test_metric()
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
                  self.test_metric_callback(curr_test_metrics_data)
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
                  self.detect_early_stopping(mode='test')
                  File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
                  raise TestLossChangeTooSmallException(msg)
                  pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                  Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
                  Traceback (most recent call last):
                  File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
                  bbasis = ACEBBasisSet(input_yaml_filename)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  ValueError: Potential file output_potential.yaml doesn't exists
                  

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    No labels
                    No labels

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

                      Description

                      @HaithamGaafer

                      I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

                      This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
                      Those are the other parameters I used in my fittings,

                      kappa = 0.08
                      nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
                      ladder_type = 'power_order'
                      ladder_step = [20, 0.1]
                      batch_size = 1000
                      early_stopping_patience = 200
                      max_iter = 1000
                      

                      This is the error message I get from the log file after the 1000th iteration,

                       --------------------------------------------TEST STATS--------------------------------------------
                      Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
                      -------------------------------------------------------------------------------------------------
                      Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
                      MAE: 3.90 2.27 10.31 6.08
                      MAX_AE: 154.11 28.21 1023.20 208.15
                      -------------------------------------------------------------------------------------------------
                      2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
                      /cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
                      res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
                      2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                      Current function value: 0.000229
                      Iterations: 1000
                      Function evaluations: 1028
                      Gradient evaluations: 1028
                      Fitting took 1767.17 seconds
                      Current function value: 0.000065
                      Iterations: 1000
                      Function evaluations: 1023
                      Gradient evaluations: 1023
                      Fitting took 1998.61 seconds
                      Current function value: 0.000044
                      Iterations: 1000
                      Function evaluations: 1024
                      Gradient evaluations: 1024
                      Fitting took 3360.17 seconds
                      Current function value: 0.000031
                      Iterations: 1000
                      Function evaluations: 1010
                      Gradient evaluations: 1010
                      Fitting took 2765.05 seconds
                      Current function value: 0.000024
                      Iterations: 1000
                      Function evaluations: 1013
                      Gradient evaluations: 1013
                      Traceback (most recent call last):
                      File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
                      main(sys.argv[1:])
                      File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
                      general_fit.fit()
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
                      self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
                      current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
                      current_bbasisconfig = self.fit_backend.fit(
                      ^^^^^^^^^^^^^^^^^^^^^
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
                      raise e
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
                      fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
                      self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
                      self.process_test_metric()
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
                      self.test_metric_callback(curr_test_metrics_data)
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
                      self.detect_early_stopping(mode='test')
                      File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
                      raise TestLossChangeTooSmallException(msg)
                      pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                      Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
                      Traceback (most recent call last):
                      File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
                      bbasis = ACEBBasisSet(input_yaml_filename)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                      ValueError: Potential file output_potential.yaml doesn't exists
                      

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        No labels
                        No labels

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

                          Description

                          @HaithamGaafer

                          I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

                          This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
                          Those are the other parameters I used in my fittings,

                          kappa = 0.08
                          nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
                          ladder_type = 'power_order'
                          ladder_step = [20, 0.1]
                          batch_size = 1000
                          early_stopping_patience = 200
                          max_iter = 1000
                          

                          This is the error message I get from the log file after the 1000th iteration,

                           --------------------------------------------TEST STATS--------------------------------------------
                          Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
                          -------------------------------------------------------------------------------------------------
                          Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
                          MAE: 3.90 2.27 10.31 6.08
                          MAX_AE: 154.11 28.21 1023.20 208.15
                          -------------------------------------------------------------------------------------------------
                          2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
                          /cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
                          res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
                          2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                          Current function value: 0.000229
                          Iterations: 1000
                          Function evaluations: 1028
                          Gradient evaluations: 1028
                          Fitting took 1767.17 seconds
                          Current function value: 0.000065
                          Iterations: 1000
                          Function evaluations: 1023
                          Gradient evaluations: 1023
                          Fitting took 1998.61 seconds
                          Current function value: 0.000044
                          Iterations: 1000
                          Function evaluations: 1024
                          Gradient evaluations: 1024
                          Fitting took 3360.17 seconds
                          Current function value: 0.000031
                          Iterations: 1000
                          Function evaluations: 1010
                          Gradient evaluations: 1010
                          Fitting took 2765.05 seconds
                          Current function value: 0.000024
                          Iterations: 1000
                          Function evaluations: 1013
                          Gradient evaluations: 1013
                          Traceback (most recent call last):
                          File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
                          main(sys.argv[1:])
                          File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
                          general_fit.fit()
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
                          self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
                          current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
                          current_bbasisconfig = self.fit_backend.fit(
                          ^^^^^^^^^^^^^^^^^^^^^
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
                          raise e
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
                          fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
                          self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
                          self.process_test_metric()
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
                          self.test_metric_callback(curr_test_metrics_data)
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
                          self.detect_early_stopping(mode='test')
                          File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
                          raise TestLossChangeTooSmallException(msg)
                          pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                          Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
                          Traceback (most recent call last):
                          File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
                          bbasis = ACEBBasisSet(input_yaml_filename)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                          ValueError: Potential file output_potential.yaml doesn't exists
                          

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            No labels
                            No labels

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              pacemaker crashes when early stopping and maximum iterations flags are raised at the same time #86

                              Description

                              @HaithamGaafer

                              I have been using the min_relative_train_loss_per_iter and min_relative_test_loss_per_iter in my fittings but during the ladder scheme fitting when the early stopping is triggered at the same time the maximum number of iterations have been reached (I set this to 1000), it crashes the run.

                              This may happen when min_relative_test_loss_per_iter is set to 5e-5 or 1e-4
                              Those are the other parameters I used in my fittings,

                              kappa = 0.08
                              nrad_max = [15, 7, 3, 2, 1, 1], l_max = [0, 4, 3, 2, 1, 1] => 374 functions
                              ladder_type = 'power_order'
                              ladder_step = [20, 0.1]
                              batch_size = 1000
                              early_stopping_patience = 200
                              max_iter = 1000
                              

                              This is the error message I get from the log file after the 1000th iteration,

                               --------------------------------------------TEST STATS--------------------------------------------
                              Iteration: #1000Loss: Total: 2.6584e-05 (100%) Energy: 1.2040e-05 ( 45%) Force: 1.3858e-05 ( 52%) L1: 4.0020e-07 ( 2%) L2: 2.8561e-07 ( 1%) Number of params./funcs: 585/100 Avg. time: 0.00 mcs/at
                              -------------------------------------------------------------------------------------------------
                              Energy/at, meV/at Energy_low/at, meV/at Force, meV/A Force_low, meV/A RMSE: 7.70 3.36 31.63 13.22
                              MAE: 3.90 2.27 10.31 6.08
                              MAX_AE: 154.11 28.21 1023.20 208.15
                              -------------------------------------------------------------------------------------------------
                              2025/02/11 13:15:36 I - Last relative TEST loss change -4.72e-05/iter (averaged over last 50 step(s))
                              /cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/scipy/optimize/_minimize.py:726: OptimizeWarning: Maximum number of iterations has been exceeded.
                              res = _minimize_bfgs(fun, x0, args, jac, callback, **options)
                              2025/02/11 13:15:40 I - EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                              Current function value: 0.000229
                              Iterations: 1000
                              Function evaluations: 1028
                              Gradient evaluations: 1028
                              Fitting took 1767.17 seconds
                              Current function value: 0.000065
                              Iterations: 1000
                              Function evaluations: 1023
                              Gradient evaluations: 1023
                              Fitting took 1998.61 seconds
                              Current function value: 0.000044
                              Iterations: 1000
                              Function evaluations: 1024
                              Gradient evaluations: 1024
                              Fitting took 3360.17 seconds
                              Current function value: 0.000031
                              Iterations: 1000
                              Function evaluations: 1010
                              Gradient evaluations: 1010
                              Fitting took 2765.05 seconds
                              Current function value: 0.000024
                              Iterations: 1000
                              Function evaluations: 1013
                              Gradient evaluations: 1013
                              Traceback (most recent call last):
                              File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 401, in <module>
                              main(sys.argv[1:])
                              File "/cmmc/ptmp/hgaafer/mambaforge/bin/pacemaker", line 248, in main
                              general_fit.fit()
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 481, in fit
                              self.target_bbasisconfig = self.ladder_fitting(self.initial_bbasisconfig, self.target_bbasisconfig)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 509, in ladder_fitting
                              current_bbasisconfig = self.cycle_fitting(current_bbasisconfig)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 564, in cycle_fitting
                              current_bbasisconfig = self.fit_backend.fit(
                              ^^^^^^^^^^^^^^^^^^^^^
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 129, in fit
                              raise e
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 96, in fit
                              fit_res = self.run_tensorpot_fit(bbasisconfig, dataframe, loss_spec, fit_config,
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/fitadapter.py", line 236, in run_tensorpot_fit
                              self.fitter.fit(dataframe, test_df=test_dataframe, niter=fit_config[FIT_NITER_KW],
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 125, in fit
                              self.process_test_metric()
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/tensorpotential/fit.py", line 318, in process_test_metric
                              self.test_metric_callback(curr_test_metrics_data)
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 410, in test_metric_callback
                              self.detect_early_stopping(mode='test')
                              File "/cmmc/ptmp/hgaafer/mambaforge/lib/python3.11/site-packages/pyace/generalfit.py", line 465, in detect_early_stopping
                              raise TestLossChangeTooSmallException(msg)
                              pyace.generalfit.TestLossChangeTooSmallException: EARLY STOPPING: Too small or even positive TEST loss change (best=-9.94e-05 / iter, last=+0.00e+00/iter, threshold = -1.00e-04/iter) within last 200 iterations. Stopping
                              Exception: Potential file output_potential.yaml doesn't existsLoading B-basis from 'output_potential.yaml'
                              Traceback (most recent call last):
                              File "/cmmc/ptmp/hgaafer/mambaforge/bin/pace_yaml2yace", line 28, in <module>
                              bbasis = ACEBBasisSet(input_yaml_filename)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                              ValueError: Potential file output_potential.yaml doesn't exists
                              

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                No labels
                                No labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions