gpt4 book ai didi

version-control - 如何标记科学数据处理工具以确保可重复性

转载 作者:行者123 更新时间:2023-12-04 20:23:53 26 4
gpt4 key购买 nike

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

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

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

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

我们已经在讨论的想法:

  • 不知何故注入(inject)了全局修订号
  • 使用内部版本号生成器
  • 将整个源代码存储在可执行文件本身
  • 最佳答案

    这是我花费大量时间研究的问题。对于@VonC 已经写的内容,让我添加一些想法。

    我认为软件配置管理的主题很好理解,并且经常在商业环境中仔细实践。然而,这种通用方法通常在科学数据处理环境中缺乏,其中许多环境要么留在学术界,要么已经从学术界发展出来。但是,如果您处于这样的工作环境中,则有现成的信息和建议来源以及许多可以提供帮助的工具。我不会进一步展开这个。

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

    正如您所说,将结果集与计算相关联的主题也是必不可少的。以下是我们正在构建的解决方案的一些组件:

    我们正在从作为许多科学程序输出特征的传统非结构化文本文件转向结构化文件,在我们的例子中,我们正在研究 HDF5 和 XML,其中感兴趣的数据和元数据被储存了。元数据包括用于产生结果的程序(和版本)的标识、输入数据集的标识、作业参数和一堆其他东西。

    我们研究了使用 DBMS 来存储我们的结果;我们想走这条路,但今年我们没有资源去做,可能明年也没有。但是企业使用 DBMS 有多种原因,其中一个原因是它们能够回滚,提供审计跟踪,诸如此类。

    我们也在密切关注需要存储哪些结果集。一个好的方法是只存储从我们的现场传感器捕获的原始数据集。不幸的是,我们的一些计算需要 1000 多个 CPU 小时才能产生,因此无法按需从头开始重现它们。但是,我们 future 存储的中间数据集将比过去少得多。

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

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

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

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

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com