首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于数据科学家和工程师之间长期有效协作的代码库设计最佳实践

用于数据科学家和工程师之间长期有效协作的代码库设计最佳实践
EN

Stack Overflow用户
提问于 2018-07-06 20:19:47
回答 1查看 122关注 0票数 0

一些上下文:

核心产品堆栈是用Java编写的,由工程师专门维护。数据科学家负责提出算法改进/添加。

数据科学家不使用Java编写代码,而是使用Python进行工作。他们与工程团队合作,将想法表达为在核心Java代码库中实现的Python代码。

问题是:

审查新想法依赖于工程团队编写新的Java代码。这减慢了整个技术团队的迭代速度。

什么样的架构可以缓解这个问题?

EN

回答 1

Stack Overflow用户

发布于 2018-07-25 03:59:48

我们在一些ML项目中遇到了类似的设置:产品工程师有一个核心Java栈,它为存储在NoSQL (MongoDB)中的数据提供了一系列RESTful API,数据工程师/数据科学家使用Python语言编写ML脚本进行培训和特征工程。以下是一些对我们有帮助的事情:

  1. Java产品工程团队构建RESTful API,允许数据工程师定期从MongoDB中提取数据(JSON/CSV格式),用于模型开发/培训/功能使用Quilt轻松管理我们的数据集,如代码(版本化的,可重用的数据包)和pickled ML模型的版本控制Git。通过使用versions和/或tags和/或hashes.
  2. The数据科学家使用Jupyter notebooks查看/处理数据和模型,您可以使用此方法恢复/跳转到任何已保存的模型状态或时期(例如,对于神经网络)。您可以使用Quilt将数据非常容易地(懒惰地加载)到Pandas dataframe中,这只是一个Python package

--

代码语言:javascript
复制
from quilt.data.username import my_data_package

  1. Java工程团队使用Java类中的exec()方法,通过命令行Runtime脚本(由Python data engineers编写--这些脚本带有命令行参数以使用正确训练的模型和数据输入)批量处理新的/新的数据,这些脚本加载了pickled模型以生成预测。See this SO answer.

我不认为这本身就是一个规范的解决方案或最佳实践,但它帮助我们平衡了Java工程团队和Python DE/DS的需求。

棉被的一些好处:

  • Reproducibility -想象一下没有版本的源代码。唉哟。为什么要与未版本化的数据共存?版本化数据通过创建对潜在复杂数据的明确引用而使分析可重现- dependencies.
  • Collaboration &透明-数据喜欢共享。Quilt为查找和共享data.
  • Auditing提供了统一的目录-注册表跟踪所有读取和写入,以便管理员知道数据何时被访问或changed.
  • Less数据准备-注册表抽象网络、存储和文件格式,以便用户可以专注于他们希望对data.
  • De-duplication做什么-数据由他们的SHA-256 标识。对于每个用户,重复数据只写入磁盘一次。因此,大型重复数据片段占用的磁盘和网络bandwidth.
  • Faster分析序列化数据加载速度比文件快5到20倍。此外,像Apache Parquet这样的专用存储格式最大限度地减少了I/O瓶颈,因此像Presto DB和Hive这样的工具运行得更快。

Source

我希望这对你有帮助!祝你好运,并想听听进展如何。

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

https://stackoverflow.com/questions/51210354

复制
相关文章

相似问题

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