-->

AI内参_153_146_数据科学团队必备的工程流程三部曲

你好,我是洪亮杰。

今天我和你分享的主题是数据科学团队必备的工程流程三部曲。

今天我们来继续聊一聊数据科学团队的一些基础构建思路,讨论一些日常的在工程流程方面所需要注意的问题。

和我们上一次分享的项目管理不一样,工程流程没有很多可以直接借鉴的经验,需要从业人员进行更多的思考和创新。

我们首先来看一看什么是工程流程。

一般来说,工程流程指的是我们有什么制度,或者说是策略来保障所做的项目,能够达到一定的质量标准。

那工程流程和项目管理流程有什么区别呢?我们说项目管理流程是从宏观上把握项目的进展,而工程流程则主要是在微观上定义和掌控具体的每一个步骤上的输入输出和过程。

从另外一个角度来说,这两者之间并不存在一个必然的关联关系。

一个项目在细节的工程流程上成功与否和一个项个自身的最终成功与否,并不能完全划问号。

那那说到这儿,你是不是有疑问?既然如此,那我们为什么还要关注工程流程呢?原因是,虽然一个好的工程流程并不一定带来项目的成功,但是可以增加成功的可能性或者开发概率。

同时,一个好的工程流程可以帮助一个团队在日常的运作中减少问题的发生,从而能够达到事半功倍的效果。

那么工程流程究竟包含哪些方面呢?我们在今天的分享里讲了三个方面,第一,代码管理的流程。

第一开发部署环境的流程。

第三数据管理的流程。

这三个流程可以说是涵盖了一个人工智能项目发展和成功所必不可少的三个重要方面。

我们先来看代码管理流程,人工智能项目一个很重要的环节就是开发代码。

然而,因为数据科学人工智能项目的一些特殊性,从业人员对于代码的管理普遍存在不够重视的情况。

我们在上一期的分享里提到过,数据科学和人工智能的很多项目,往往会被当做学术界的研究项目来进行开发。

如果是研究项目代码开发有哪些特点呢?我简单归纳了两大特点。

第一,代码的主要目的是完成学术文章发表所需要的实验结果。

第二,在绝大多数情况下,代码所容易变成无人维护和继续更新的情况。

如果是当做研究项目来开发,那研究人员很可能并不在意代码的可读性、可维护性以及可扩展性等软件工程非常重视的方面。

那么这样开发出来的代码就无法真正扩展为一个大型项目的代码库。

那么对于一个人工智能项目的代码管理,我们需要去关注哪些因素呢?第一,所有的代码一定要保存在代码版本管理工具中,而不是某一个数据科学家或者工程师自己的电脑上,这也是一个先决条件。

在当今的软件开发的工具中,gate或者说是企业级的gate, hop已经成为了一个标准的工具,用于代码版本管理、追踪和分享。

任何项目以及任何人只要开始进行开发,都需要把所有的代码,包括或核心的文档存放在代码版本管理工具中,这保证了代码能够被追踪,并得到及时的备份。

第二,如果我们利用gate或者类似的代码版本管理工具代码的开发,一定要尽量遵循这个版本管理工具所提倡的某种流程。

比如我们有两个工程师在同一个项目中一起工作。

在这样的情况下,大部分的代码版本管理工具都可以允许这两个工程师在不同的分支进行开发。

这两个分支和项目当前的主分支又不同,因此项目目前代码的运行不会受到这两个分支的影响,而这两个分支之间也不会互相影响。

尽管进行分支开发已经算是软件开发的一个标准流程了,但是在人工智能项目中,依然有很多开发人员不遵循这个方法来进行代码,不同开发进度之间的隔离。

了解了代码版本管理的重要性。

之后我们来看一看,开发环境流程的控制,从代码到可以被运行和部署的软件包,成为一个大型互联网产品或者人工智能产品中的一个的组成部分,往往还有很多路要走。

首先,开发部署环境中一个重要的组成就是流畅的从代码到部署软件包的直通流程。

目前,在软件开发领域有诸如CICD方法,也就是持续集成和持续交付。

这样的方法来帮助工程师能够相对方便的对代码进行包装和部署。

我们在这里并不去展开讨论CICD的内涵。

但是要意识到对于人工智能项目,我们也需要有能够流畅部署的思想,那么具体来说,哪个部分需要有流畅部署的思想呢?如果我们从大的角度来看,一个数据科学项目最需要动态更新的部分往往是模型的产生。

也就是说,我们希望能够用最新的数据来训练和测试模型,让模型能够考虑到最新的用户行为。

因此就可以说,只要是对模型的产生流程,有影响的步骤,都需要能够达到流畅部署。

假如我们更新的模型产生的代码,这些代码必须能够快速的反映到生产系统中。

除了快速和持续部署,人工智能项目的另外一个重要需求,就是可以对代码的不同分支进行测试和运行。

也就是说,我们不仅仅需要能对主分支进行部署,还需要能够对不同的其他分支进行部署,从而能够无缝运行。

这些不同的分支,这一点,我们在开发环境中往往很容易忽视。

举个例子,人工智能项目需要做大量的AB测试,而这些测试中的控制组和代遇组往往就对应着代码中不同分支的开发成果。

因此,在我们不清楚代遇组所对应的代码是不是能够真正带来好处之前,最好不要把这个分支和主分支进行合并。

我们首先需要在线测试这个分支的效果,这就带来了运行不同分支的一个需求。

最后我们来简单聊一聊数据管理流程,这也是从事数据科学项目。

我们最容易忽视的一个部分。

对于绝大多数的人工智能产品来说,代码也就是项目的业务逻辑是和数据是密不可分的。

从某种意义上说,我们应该把对数据的关注程度排在第一位。

因为即便有正确的代码,如果数据出现偏差,有时候哪怕是一点点小的偏差,都有可能对最后的结果产生重大的影响。

因此我们需要不断的强调数据质量的重要性。

那么对于一个项目的数据管理,又有哪些方面需要注意呢?在绝大多数的项目或者是产品中,数据的产生者,数据的运营者以及数据的使用者往往是不同的团队,这是数据管理的最大挑战。

这种决策上的差别往往导致了对于数据质量的忽视。

举一个例子,如果数据的产生者是一个产品团队,在最近的一次软件更新中,一个工程师把旧代码中对数据进行追踪的部分主观臆断的删除了一些字段,或者是为了变量名好看,更改了字段的名字。

如果这个更新没有通知数据的运营者或者使用者,这往往会带来什么后果呢?后果是下游整个软件线的流程中数据可能发生重大变化。

严重的时候,这样的问题会导致模型发生完全异常,产生不可控的后果。

因此,从端到端的思维来考虑,数据链路是非常有必要的。

在数据的产生、运行和使用的链条上,所有的用户必须达成某种数据的API或者说是共识。

第何对于数据的改变,都需要在满足这种共识的基础上来沟通和进行。

同时数据的检测也是非常重要的,否则就是垃圾进入导致垃圾输出。

今天我为你讲了数据科学团队的另外一个核心问题,那就是如何对工程流程进行管理。

一起来回顾一下要点。

第一,我们简单介绍了什么是人工智能项目的工程流程,以及这个概念和项目管理流程的区别。

第二,我们分析了人工智能项目工程流程的三个主要方面,包括代码管理的要素,如何开发和部署环境以及数据管理的要素。

最后给你留一个思考题,除了我们所提及的工程流程的这三个方面,你还能想到什么?其他的方面在工程流程中也是至关重要的,需要我们在开发中注意呢,欢迎你给我留言,和我一起讨论。