使用 OpenMDAO 进行 运行 优化时出现磁盘 I/O 错误

Getting a disk I/O error when running an optimization with OpenMDAO

当 运行 使用 ScipyOptimizeDriver 在本地存储库中进行优化并记录结果文件时出现此错误。它完美地工作,但是突然之间,我收到了这个错误:

  File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openmdao\recorders\sqlite_recorder.py", line 234, in _initialize_database
    c.execute("CREATE TABLE global_iterations(id INTEGER PRIMARY KEY, "
sqlite3.OperationalError: disk I/O error

我没有对我的代码进行任何更改,因此我不知道它来自哪里。我也可以在网上找到任何解决方案。在这里,我的代码的通用版本。

import openmdao.api as om

prob = om.Problem()

indep_var_comp = om.IndepVarComp()
indep_var_comp.add_output(...)
prob.model.add_subsystem("prob_vars", indep_var_comp, promotes=["*"])

prob.model.connect(...)

prob.driver = om.ScipyOptimizeDriver()

prob.driver.options["tol"] = 1e-6
prob.driver.options["optimizer"] = 'SLSQP'
prob.driver.recording_options["includes"] = ["*"]

rec_data_file = 'opt_output.db'
rec = om.SqliteRecorder(rec_data_file)
prob.driver.add_recorder(rec)
prob.add_recorder(rec)

prob.model.add_objective(....)
prob.model.add_design_var(...)
prob.model.add_constraint(...)

prob.setup()
prob.run_driver()

我建议您 post 将此作为错误报告提交给 OpenMDAO issue tracker。因为这似乎是一个潜在的错误,您可能需要提供有关 OpenMDAO 版本、python 版本等的详细信息。

一般来说,这种 sql 错误意味着数据库文件发生了“坏”的事情。也许操作系统出于某种原因锁定了它,或者文件系统搞砸了。

您 运行 在本地机器上吗?或者在某种 HPC 集群上的“神奇”文件系统上。如果您在集群上使用并行文件系统,那么 sql-lite 记录器通常可能会变得脾气暴躁(这些文件系统真的不是为那种磁盘设计的 i/o)。

最终,我们只需要更多信息来为您提供更完整的答案,这可能最好作为错误报告,并提供有关您的环境的更多详细信息。