购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 人工智能的问题、挑战以及应对措施

人工智能在企业落地成功率低、成本高的问题究竟出在哪里?为什么AI科学家在实验室内构建模型比较简单,但是到线上运行就麻烦得多呢?归根到底,这是人工智能系统研发的工程问题。

相对于传统的企业应用系统或者互联网应用系统,人工智能系统的特点是除了需要算法模型之外,还需要数据(往往是海量数据和新鲜数据)。而数据带来的问题是最大的,规模化部署人工智能系统又带来工程实践规模化的挑战。

1.2.1 问题1:机器学习代码只是整个系统的一小部分

谷歌发现:AI科学家根据给定的相关训练数据可以在离线环境下训练出效果非常出色的模型,但是真正的挑战并不是得到一个效果不错的模型,而是在生产环境下构建一个持续运行的机器学习系统,并一直保持不错的效果。谷歌工程师2015年在NIPS发表的论文“Hidden Technical Debt in Machine Learning Systems”中提到,人工智能系统进行包含数据收集、数据验证、资源管理、特征提取、流程管理、监控等诸多环节,但真正和机器学习算法相关的代码工作量仅占整个人工智能系统代码量的5%,其余95%的代码量与数据相关。而数据是最重要的部分,也是最容易出错的部分。

该论文展示了机器学习系统中系统架构和代码占比情况,如图1-1所示。

图1-1 机器学习系统架构和机器学习代码占比

(资料来源:https://proceedings.neurips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf)

如图1-1所示,真正和机器学习模型计算相关的代码只占整个系统代码的一部分。而配置、数据收集、特征提取、数据验证、资源管理、预测服务、监控等占了95%的代码量。

1.2.2 问题2:数据是最主要的问题

2017年,Uber的机器学习工程师在一篇机器学习博客“Meet Michelangelo:Uber's Machine Learning Platform”中系统地阐述了Uber内部机器学习平台的构建思路和实践,这被认为是AI工程化的里程碑式文档之一。(本书第7章对该博客还有更详细的解读。)在该博客中,这位Uber工程师感叹数据之难:“数据是机器学习中最难的部分,也是得到正确结果的关键。错误的数据是生产环境中出现问题最常见的原因。”

笔者非常认同他的观点,数据给人工智能系统落地带来的问题主要包括以下几点:

● 可扩展性:海量的特征读取是一个挑战,训练往往需要海量的特征数据,不是TB级,更多是PB级,例如各大媒体网站和电商网站的推荐系统都需要处理海量用户行为数据,包括点击、收藏、观看等,每天产生几PB、几十PB规模的数据。

● 低延时:线上预测服务需要做到低延时和高吞吐。提供预测服务往往需要同时达到高吞吐和低延时的服务能力,才能满足像实时风控、实时推荐等业务场景的需求,保证基本的用户体验,从而实现业务价值。

● 模型效果衰退:机器学习模型是从数据中挖掘、提取规律的,当外部发生变化时,模型效果会发生衰退。如何来应对?我们往往需要及时收集数据、重新进行训练,还需要很好的效果监控体系。

● 时序数据穿越:在处理和时间序列相关的数据时容易出现时序数据穿越问题。时序数据穿越是指在机器学习模型训练时,把发生在某一特定时间点之后的行为数据也混入需要训练的数据集,这样的训练结果往往不错,但是模型上线之后效果不达标,因为本应该把特定时间点之后的行为数据排除在模型训练之外,详见4.4.2节。

● 训练和预测不一致:模型训练和模型预测使用的数据和代码逻辑不一致,导致线下训练效果不错,但是在线上生产环境效果很差。

此外,人工智能落地对数据的保鲜程度要求很高,需要数据是实时数据,因为实时数据是更贴近用户场景的数据。对于企业来说,一些机器学习场景(例如电商行业的推荐、金融行业的风控、物流行业的物流预测)需要引入实时数据,而实时数据会带来更大的挑战。

图1-2是人工智能商业价值分析图,横轴是机器学习系统技术能力,纵轴是商业价值。

从图1-2可以看出,既具备流式实时数据接入又具备实时在线预测能力的机器学习模型的商业价值最大。这很容易理解,因为在企业中机器学习模型最能产生商业价值的场景莫过于广告系统的CTR预估模型和电商系统的推荐模型等。这些场景下的机器学习模型如果能以用户的最新行为数据进行训练,并提供实时预测能力,则能提升推荐准确度并最终体现在商业效果提升上。而接入实时数据流,并完成在线训练和预测,对机器学习系统要求更高,挑战也更大。

图1-2 人工智能商业价值分析

机器学习项目需要收集大量原始数据,然后进行数据聚合、数据抽取、数据转换、数据训练。多个业务场景下的机器学习模型训练需要使用大量特征数据,这些特征数据往往存在重复的情况,即从原始日志文件读取开始,经执行一系列特征提取工程,最后得到一个表现力强的特征,这个特征可以被模型A使用,也可以被模型B使用,这就会产生特征数据共享和复用的问题。很显然,如果特征数据不能共享和复用,那么所有特征工程任务都需要重复执行,这会浪费大量的存储资源和计算资源,同时增加了模型上市时间。

1.2.3 挑战:人工智能系统如何规模化落地

对于构建人工智能系统的工程师来说,解决现有的数据问题已经很难,人工智能系统规模化落地则带来更大挑战。以笔者熟悉的一个国内大型金融企业为例,该企业在线上同时运行1000多个机器学习模型,这些机器学习模型在金融核心业务的风控场景、To C消费场景的实时推荐和预测场景中发挥着非常关键的作用。

模型在企业内部规模化落地“快、好、省”方面面临挑战。

● 快:需要系统落地时间短,迭代速度快。比如在实时推荐场景中,常常需要做到每天1次全量训练,每30min甚至每15min 1次增量训练。

● 好:需要每个系统的落地效果达到预期,要体现业务价值。

● 省:需要每个系统的落地成本低,符合预期。

1.2.4 应对措施:MLOps

我们回顾一下当年是如何解决软件研发质量和效率问题的。当年,软件研发周期超出预期,代码质量不达标,甚至有线上服务崩溃、不响应用户请求等严重影响用户体验和业务的问题出现。在这种情况下,我们采用DevOps来改进研发模式,在保证质量的前提下,更快地提高版本发布的速度,实现更多、更快地研发和部署,从而进行更多的功能迭代和功能试错。为此,我们采用大量的自动化研发、测试、运维等工具进行流水线(俗称Pipeline)作业,即从工程师代码提交开始,触发流水线自动化执行一系列任务,完成代码静态检查、代码编译、代码动态检查、单元测试、自动化接口测试、自动化功能测试、小流量部署、蓝绿部署、全流量部署等操作。在计算机系统逐渐云原生化,容器成为业内主流技术后,流水线加上编译产出物打包成容器镜像并部署到容器仓库,以便用户从容器仓库按需拉取容器镜像。这一系列任务需要在多个业务线上执行,并做到尽可能自动化。通过在企业内部推行DevOps实践和工具,软件研发和部署效率得到大大提升。

既然DevOps这么成功,我们可以借鉴DevOps的实践经验,把机器学习模型研发和现代软件模型研发结合起来形成一套人工智能系统落地流程,我们将其称为MLOps。 xGjAwjtOtHU4Y5cryTlq7DpEOjj555gm7+UNMGjpm/iVofDHaxS6Jh2b+rLVxz5t

点击中间区域
呼出菜单
上一章
目录
下一章
×