首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据科学/ ML项目中使用git

如何在数据科学/ ML项目中使用git
EN

Stack Overflow用户
提问于 2021-04-03 21:24:59
回答 2查看 416关注 0票数 1

我和我的三个同学参加了一场黑客马拉松,有10天的时间。我们得到了一个数据集,并且必须预测一个变量。但是,我想知道在这样的项目中使用git的最佳方法是什么。我们有两个主要目录模型和数据。作为一项数据科学项目,需要进行大量的数据预处理。我们使用jupyter笔记本,既用于数据清理,也用于模型本身。我们如何在git-repo-结构方面作为一个团队有效地清理数据?我不知道如何正确地管理回购。每个人都应该有自己的分支吗?或者,如果每个人都在主分支上工作,并推送更新的数据集和jupyter笔记本,会更方便吗?因为通常在主分支中没有“运行系统”。我们对数据和模型做了大量的实验。使用git有意义吗?不过,对于这个混乱的问题,我很抱歉

EN

回答 2

Stack Overflow用户

发布于 2021-04-03 23:44:11

根据我的经验,数据科学和软件开发在根本上是不一致的。通常,数据科学的需求获胜,因为这些需求与业务需求直接相关,结果(如果您不小心的话)是混乱的、混乱的代码,没有人可以遵循(包括您)。

“数据科学”要求你问很多问题,这意味着你要尽可能快地迭代。你编写的大部分代码不会给出你想要的答案,所以你最终会得到一堆混乱的一次性脚本。有时候很难知道你写的脚本是否值得去写。

“软件开发”除了实际编写代码外,还需要文档、计划、测试、重构以保持代码的可读性等。这要求你放慢速度,这是“数据科学”不希望你做的。显然,这是黑客马拉松,因此“规则”更轻松,但它们的存在使开发代码和团队工作变得更容易,这是您正在尝试的。

简短的回答:是的,你应该使用git。

在不了解更多项目的情况下,以下是一些更具体的建议:

  • 预先组织git :为data (针对dataset)、model (以及您正在尝试的每个模型的子目录)、cleaning (用于清理脚本,请参见下面)以及plotsoutput分别设置单独的目录,并尽可能将它们保持干净。如果一个模型有大量混乱的脚本,因为你正在实验,至少这种噪音是被控制的。这也使得划分工作更加容易,一个目录=一个任务。
  • 子集数据集():如果数据集很大,请使用一个小片段(如10%),然后使用该数据集进行所有初始开发,并在以后进行扩展。“大块头”指的是“任何足以让你等很长时间才能运行的东西。”
  • 尽可能地自动化数据清理,:编写一个清理脚本,然后从模型脚本调用清理脚本。如果数据集庞大且脚本需要一个小时才能清理,则将输出保存到回购并提交,然后从模型脚本调用已清理的数据集。这样,您就不需要区分一个巨大的CSV文件;所有信息都在清理脚本中。
  • 不使用jupyter笔记本(除非您真的需要/需要它们):我认识到有一些工具可以帮助git和jupyter相处,但它们仍然比原始脚本复杂几个数量级。除了其他原因之外,这也是为什么笔记本通常会使编写有组织的代码更加困难。
  • 在必要时保存模型,:有些包可以选择地提出一个模型,您可以在将来保存/提交并加载该模型,而无需再对其进行培训。我只会这样做,如果模型需要很长的时间运行(在我看来,这是超过几分钟)。否则只是在回购中更多的杂乱。
  • 使用虚拟环境:您没有提到您使用的是哪种语言,但是在Python (一个例子)中使用pyenvvirtualenv (或者您最喜欢的语言,因为有几种方法可以这样做)。根据我的经验,许多“数据科学”包在更改版本时可能会变化无常(特别是当您开始使用GPU计算和其他有趣的东西时),所以让团队坚持运行时的一个版本和相关的包可以节省很多麻烦。
  • 不要忘记提交:似乎很明显,但是当您尝试回答问题时,您编写的大部分代码都会失败,了解原因是很有帮助的。很容易认为该项目将“保持足够小,您将记住”...but它不会。
票数 2
EN

Stack Overflow用户

发布于 2021-04-03 21:58:19

MLOPS中的概念对您的情况也可能有用;数据版本控制( deployment,DVC)用于数据版本控制,MLFlow用于管理“ML生命周期,包括实验、可再现性、部署和中心模型注册表”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66936016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档