我们开发了一种数据处理工具,可以从给定的原始数据集中提取一些科学结果。在数据科学中,非常重要的一点是您可以重新获得结果并重复计算,从而得出结果集

由于该工具在不断发展,我们需要一种方法来找出该工具的哪个修订/版本生成了给定的结果集,以及如何找到从中构建该工具的相应来源。

该工具是用C++和Python编写的;使用Boost::Python将C++部分粘合在一起。我们使用CMake作为生成系统,为Linux生成Make文件。目前,该项目存储在Subversion版本库中,但是我们中有些人已经在使用git resp。 hg,我们计划在不久的将来将整个项目迁移到其中一个。

在这种情况下,获得源代码,二进制文件和结果集之间唯一映射的最佳实践是什么?

我们已经在讨论的想法:

  • 以某种方式注入(inject)全局修订号
  • 使用内部版本号生成器
  • 将整个源代码存储在可执行文件本身中
  • 最佳答案

    我花了很多时间来解决这个问题。对于@VonC已经编写的内容,让我补充一些想法。

    我认为软件配置管理的主题已广为人知,并且经常在商业环境中认真实践。但是,在科学数据处理环境中通常缺乏这种通用方法,其中许多环境要么留在学术界,要么已经不在学术界长大。但是,如果您处于这样的工作环境中,则可以随时获得信息和建议资源以及许多帮助工具。我不会在此进一步扩展。

    我认为,即使可行,您也不建议将整个源代码包含在可执行文件中。的确,如果您正确使用了SCM,那么您已经做过并且将继续这样做的一项基本测试就是您能够按需重建“旧”可执行文件的能力。您还应该能够确定在每个可执行文件和版本中使用了哪个版本的源代码。这些应该使将源代码包含在可执行文件中成为不必要的。

    正如您所说,将结果集绑定(bind)到计算上的主题也是必不可少的。以下是我们正在构建的解决方案的一些组件:

    我们正在从传统的非结构化文本文件转变为结构化文件,而传统的非结构化文本文件是许多科学程序输出的特征,在这种情况下,我们正在研究HDF5和XML,其中关注的数据和元数据被储存了。元数据包括用于生成结果的程序(和版本)的标识,输入数据集,作业参数的标识以及许多其他内容。

    我们考虑使用DBMS来存储结果。我们想采用这种方式,但今年我们没有足够的资源来做,也许明年也不会。但是企业使用DBMS的原因有很多,原因之一是它们具有回滚,提供审计跟踪等功能的能力。

    我们还在密切关注需要存储哪些结果集。最好的办法是仅存储从我们的现场传感器捕获的原始数据集。不幸的是,我们的某些计算需要1000个小时的CPU时间才能产生,因此按需从头开始再现它们是不可行的。但是,与过去相比,我们将来存储的中间数据集将少得多。

    我们也使用户直接编辑结果集变得更加困难(我想认为这是不可能的,但不确定是否已经存在)。一旦有人这样做,世界上所有的出处信息都是错误且无用的。

    最后,如果您想了解更多有关该主题的信息,请尝试使用Google搜索搜索类似“科学工作流程”和“数据来源”的主题。

    编辑:从上面我写的内容不清楚,但是我们已经修改了程序,以便它们包含自己的标识(为此,我们使用Subversion的关键字功能(带有一个或两个扩展名))并将其写到任何输出中他们生产。

    关于version-control - 如何标记科学数据处理工具以确保可重复性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3244479/

    10-13 07:28
    查看更多