版本控制 – 如何标记科学数据处理工具以确保可重复性
我们开发了一个数据处理工具,从一组给定的原始数据中提取一些科学结果.在数据科学中,您可以重新获得结果并重复计算,从而产生结果集非常重要
由于该工具正在发展,我们需要一种方法来找出我们的工具的哪个版本/构建生成给定的结果集以及如何找到构建工具的相应源. 该工具是用C和Python编写的;使用Boost :: Python将C部分粘合在一起.我们使用CMake作为构建系统,为Linux生成Make文件.目前该项目存储在subversion repo中,但是我们中的一些人已经使用了git resp. hg,我们计划在不久的将来将整个项目迁移到其中一个项目. 在这样的场景中,获得源代码,二进制和结果集之间的唯一映射的最佳实践是什么? 我们已经在讨论的想法: >以某种方式注入全局修订号 解决方法
这是我花费大量时间工作的问题. @VonC已经写过的内容让我添加了一些想法.
我认为软件配置管理的主题很好理解,并且经常在商业环境中仔细实践.然而,这种一般方法通常缺乏科学数据处理环境,其中许多环境保留在学术界或已经从学术界发展出来.但是,如果您处于这样一个工作环境中,那么随时可以获得信息和建议的来源以及许多可以提供帮助的工具.我不会进一步扩展这一点. 我认为,即使在可行的情况下,您建议将整个源代码包含在可执行文件中也是必要的.实际上,如果你的SCM正确,那么你已经完成的一项基本测试,并且继续这样做,就是你能够按需重建“旧的”可执行文件.您还应该能够确定每个可执行文件和版本中使用的源代码版本.这些应该使源代码包含在可执行文件中是不必要的. 正如您所说,将结果集绑定到计算中的主题也是必不可少的.以下是我们正在构建的解决方案的一些组件: 我们正在远离传统的非结构化文本文件,这是许多科学程序输出结构化文件的特征,在我们的例子中,我们正在研究HDF5和XML,其中感兴趣的数据和元数据被储存了.元数据包括用于产生结果的程序(和版本)的识别,输入数据集的识别,作业参数和一堆其他东西. 我们研究了使用DBMS存储结果;我们想要这样做,但我们今年没有足够的资源去做,也许下次也不会.但是企业出于各种原因使用DBMS,其中一个原因是它们能够回滚,提供审计跟踪等等. 我们还在密切关注需要存储哪些结果集.一种很好的方法只能存储从我们的现场传感器捕获的原始数据集.不幸的是,我们的一些计算需要花费1000个CPU小时来生成,因此根据需要从头开始再生它们是不可行的.但是,我们将来存储的中间数据集将远远少于过去. 我们也在努力让用户更直接地编辑结果集(我想不可能,但我不确定我们是否在那里).一旦有人这样做,世界上所有的出处信息都是错误和无用的. 最后,如果您想了解有关该主题的更多信息,请尝试使用Google搜索“科学工作流程”和“数据来源”类似主题. 编辑:我上面写的不清楚,但我们修改了我们的程序,以便它们包含自己的标识(我们使用Subversion的关键字功能,使用我们自己的扩展或两个)并将其写入它们生成的任何输出中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |