Architecture 数据科学家和工程师之间长期有效合作的代码库设计最佳实践
一些上下文:Architecture 数据科学家和工程师之间长期有效合作的代码库设计最佳实践,architecture,Architecture,一些上下文: 核心产品堆栈采用Java语言,由工程师专门维护。数据科学家负责提出算法改进/补充。 数据科学家不使用Java编写代码,而是使用Python进行工作。他们与工程团队合作,将想法表达为在核心Java代码库中实现的Python代码 问题: 审查新想法取决于工程团队编写新的Java代码。这降低了整个技术团队的迭代速度 什么架构可以缓解这个问题 我们在一些ML项目中遇到了类似的设置:产品工程师有一个核心Java堆栈,为存储在NoSQL(MongoDB)中的数据提供一系列RESTful API
核心产品堆栈采用Java语言,由工程师专门维护。数据科学家负责提出算法改进/补充。
数据科学家不使用Java编写代码,而是使用Python进行工作。他们与工程团队合作,将想法表达为在核心Java代码库中实现的Python代码 问题:
审查新想法取决于工程团队编写新的Java代码。这降低了整个技术团队的迭代速度
什么架构可以缓解这个问题 我们在一些ML项目中遇到了类似的设置:产品工程师有一个核心Java堆栈,为存储在NoSQL(MongoDB)中的数据提供一系列RESTful API,数据工程师/数据科学家用Python编写ML脚本,用于培训和功能工程。以下是一些帮助我们的事情:
版本
和/或标记
和/或散列
,您可以使用此方法还原/跳转到任何保存的模型状态或历元(例如,对于神经网络)从coult.data.username导入我的\u数据\u包
Runtime
类中的exec()
方法,使用命令行Python脚本(由Python数据工程师编写——这些是带有命令行参数的可执行文件,用于使用经过正确训练的模型和数据输入)批量处理新数据/新数据加载pickle模型以生成预测李>
我认为这本身不是一个规范的解决方案或最佳实践,但它帮助我们平衡了Java工程团队和Python DE/DS的需求
被子的一些好处:
- 再现性-想象一下没有版本的源代码。哎哟为什么要使用未版本化的数据?版本化数据通过创建对潜在复杂数据依赖关系的明确引用,使分析具有可复制性
- 协作与透明-数据喜欢共享。Cutter为查找和共享数据提供了统一的目录
- 审核-注册表跟踪所有读写操作,以便管理员知道何时访问或更改数据
- 更少的数据准备-注册表将网络、存储和文件格式抽象出来,以便用户能够专注于他们希望对数据做什么
- 重复数据消除-数据通过其SHA-256散列进行标识。对于每个用户,重复数据都会写入磁盘一次。因此,大型重复数据片段消耗的磁盘和网络带宽更少
- 更快的分析-序列化数据加载速度比文件快5到20倍。此外,像ApacheParquet这样的专用存储格式可以最大限度地减少I/O瓶颈,从而使Presto DB和Hive等工具运行得更快
我希望这有帮助!祝你好运,我很想听听进展如何。请你更清楚地说明为什么数据科学家需要为主要产品提出代码。他们不处理数据并使用自己的算法吗?我们的评论是关于角色范围的政策。但我会让你开心的。在对数据科学家角色的广义解释下,除了进行事后数据分析等工作外,为主要产品提出/试验新的算法方法也是他们工作的一部分