2.2 角色划分以及角色之间存在的问题
2.2.1 角色划分
以上种种角色,除了产品经理外,其他都是研发和运维相关人员。这些角色在本书中划分为两类:一类是AI科学家,另一类是AI工程师。AI科学家即前文所说的数据科学家,AI工程师即前文所说的数据工程师、机器学习工程师、DevOps工程师、IT运维工程师等的集合。这两类角色在人工智能应用开发和运维中承担不同的职能,又相互协作来确保通过人工智能应用达到业务目标。
常见的大中型企业中的人工智能业务研发部基本上分为AI科学家团队和AI工程师团队。例如国内各互联网大厂内部负责核心人工智能业务系统(包括广告系统和信息流推荐系统)的部门,都分为策略或者算法团队、工程团队,对应AI科学家团队和AI工程师团队。
AI科学家的主要职责是和产品经理一起定义问题,收集数据并分析数据,构建和训练模型,设计出符合预期的算法和特征处理逻辑。
AI工程师的主要职责是提供真实数据,帮助AI科学家训练模型;然后更新线上业务,把训练好的模型部署到线上真实环境来承接业务流量并产生业务价值;之后继续采集日志数据等用于之后的持续训练;同时监控整个流程中的各个环节,确保服务的可用性。此外,AI工程师还需要监控模型的预测情况,确保模型效果不随着时间推移而变差,必要时需要使用更新的数据重新训练模型。
下面说明AI科学家和AI工程师因为技术栈和关注点不一致而存在的两个主要问题。
2.2.2 问题1:技术栈不一致导致人工智能模型线上、线下效果不一致
如前文所述,AI科学家擅长特征探索、数据转化、模型开发等工作,比较熟悉Python编程语言以及Python的各种人工智能开发库和开发工具。他们常用的工具是Notebook。
AI工程师比较熟悉的编程语言是各种高级编程语言,例如C++、Java、Go等,适合编写和运维高吞吐、低延时系统。他们常用的工具是各种编程语言的集成式开发工具、简单的VI等工具和各种命令行工具。除了对Java、C++编程比较了解外,AI工程师还对底层的资源调度系统、分布式计算系统、存储系统、云系统包括监控系统、消息队列等比较熟悉。
这些差异导致人工智能线上、线下效果一致性问题的出现,表现为AI科学家在线下环境训练得到的模型的预测效果非常好;但是部署到线上环境后,预测效果差得很远。部分原因在于线下训练时,AI科学家使用Python语言进行各种特征转化的逻辑,并不能100%准确地通过Java或者C++语言重新编写并在线上运行,这导致人工智能模型预测偏差较大,详见本书第4章。
2.2.3 问题2:关注点不同导致对系统的需求不同
AI科学家关注的是模型或算法的效果,一般用常见的指标来度量效果。例如精确率:预测正确的样本数量占总体样本数量的比例,是常用的模型效果度量指标。一般来说,模型精确率越高,说明模型效果越好。此外,召回率、AUC等也是常用的模型效果度量指标。AI科学家往往对线上系统运行相关的事情不是太关心,例如如何保证线上系统的低延时和高吞吐,如何弹性伸缩线上系统以适应快速变化的流量,如何保证系统的可用性等。
相反,AI工程师往往不关注模型是如何实现的,比如各种人工智能模型的网络结构以及算法相关的各种超参数等。他们更关注如何把模型部署到线上,一是保证模型线上运行效果和线下测试效果一致;二是保证线上系统的高吞吐、低延时,从而给下游用户应用系统开发创造条件,保证最终的用户体验;三是做好资源的弹性伸缩和线上预测服务的监控,保证在用户接受范围内的服务稳定性,保证服务可用性(SLA)为3个9或者4个9。所以,他们关心的是模型的大小、预测服务的延时和QPS等和工程相关的技术指标。
因为AI科学家关心的是模型的效果,所以他们会不断尝试引入新的数据进行数据探索,并不断对模型进行调优或者尝试更复杂的算法,希望不断对模型进行更新,以取得更好的预测效果。相对来说,他们对线上服务的改动会更激进一些。
但是,AI工程师因为需要对线上服务负责,往往需要保证预测服务的可用性,所以倾向于对线上系统尽量少做修改,避免因为各种更新操作而引起服务故障。相对来说,AI工程师对线上系统更有敬畏之心,改动更保守一些。
2.2.4 协作问题及解决办法
1.协作问题
综上所述,AI科学家和AI工程师擅长的技术栈不同会导致人工智能模型线上、线下效果不一致,两者关注点不同导致系统迭代方向、迭代节奏不同。而这都会导致人工智能模型部署时间超出预期,效果不达预期等问题出现。
例如,AI科学家抱怨AI工程师部署模型耗时长,AI工程师抱怨AI科学家根本不懂线上服务,二者互相抱怨不给力,这在人工智能模型落地时是一个常见的现象。
2.解决办法
两者之间出现问题是很正常的,因为两个团队关注的内容不同,技术栈也大不相同,但是他们需要相互配合,共同保证人工智能模型在线上有比较好的预测效果和好的用户体验,以实现业务价值。两者在人工智能团队中扮演非常重要、不可或缺的角色。试想一下,如果一个人工智能团队只有AI科学家而没有AI工程师,那么他们只会开发出一些针对线下小规模数据训练出来的、理论上效果不错的模型;如果只有AI工程师而没有AI科学家,那么线上系统根本无法发挥人工智能的价值。
出现问题不可怕,我们需要开发和利用工具和平台——MLOps,让这些角色充分发挥价值。