写点什么

未来,机器学习所需的工程量会大大减少

  • 2020-02-24
  • 本文字数:2524 字

    阅读完需:约 8 分钟

未来,机器学习所需的工程量会大大减少

未来,构建 ML 产品将更加有趣,并且这些系统会工作得更好。随着 ML 自动化工具的不断改进,数据科学家和 ML 工程师将把更多的时间花在构建优秀的模型上,而花在与生产级 ML 系统相关的繁琐但必要的任务上的时间会更少。


本文最初发布于KDnuggets,经原作者授权由 InfoQ 中文站翻译并分享。


AI是一个系统工程问题。


构建一个有用的机器学习产品需要创建大量的工程组件,其中只有一小部分涉及 ML 代码。构建生产级 ML 系统涉及到很多工作,比如构建数据管道、配置云资源和管理服务基础设施。


传统上,ML 的研究主要集中于创建更好的模型,推动语言建模和图像处理等领域前沿技术的发展。很少有人在系统层面关注设计和实现生产级 ML 应用程序的最佳实践。尽管得到的关注较少,但是 ML 系统层面的设计和工程挑战仍然非常重要——创建有用的东西比构建良好的模型需要的东西更多,它需要构建良好的系统。

真实世界的 ML

2015 年,谷歌的一个团队绘制了下面这幅图:



它显示了真实世界的 ML 系统中专门用于建模的代码量(小黑框)与 ML 应用程序的支撑设施和管道所需的代码的比较。这张图表并没有多么令人惊讶。对于大多数项目来说,构建一个生产系统所涉及到的大多数令人头痛的问题并不是来自典型的 ML 问题,如过拟合或欠拟合,而是来自于在系统中构建足够的结构以使模型可以按预期工作。

生产级 ML 系统

构建一个生产级 ML 系统可以归结为构建一个工作流——从数据摄取到模型服务的一系列步骤,其中每个步骤前后串联,并且足够健壮,可以在生产环境中运行。



工作流从一些数据源开始,包括创建模型端点所需的所有步骤——输入数据预处理、特征工程、训练和评估模型、将模型推送到服务环境,以及在生产环境中持续监控模型端点。


这个工作流中的特征工程>训练>调优部分通常被认为是机器学习的“艺术”。对于大多数问题,特征设计、模型架构构建和超参数调整,都有许许多多的方法,以至于数据科学家/ML 工程师只能依赖于直觉和实验的混合。建模过程也是机器学习的一个有趣部分。

建模与工程

在不同的应用场景和问题域中,这个建模过程都会有所不同。如果你训练一个模型在 Netflix 上推荐内容,这个建模过程与你为客户服务构建聊天机器人会有很大的不同。不仅底层数据的格式会不同(稀疏矩阵 vs 文本),而且预处理、模型构建和调优步骤也会有很大的不同。但是,尽管建模过程在跨应用场景和问题域时基本上都是特有的,但工程上的挑战很大程度上是相同的。


无论你将哪种类型的模型投入生产,围绕该模型构建生产工作流的工程挑战在很大程度上是相同的。



这些跨 ML 领域的工程挑战的同质性是一个巨大的机会。在未来(大部分是现在),这些工程挑战将在很大程度上实现自动化。将 Jupyter Notebook 中创建的模型转换成生产级 ML 系统的过程将变得更加容易。不需要创建专门的基础设施来解决这些挑战,数据科学家/ML 工程师已经使用的开源框架和云服务将在底层自动实现这些解决方案。

大规模数据摄取

所有生产级 ML 工作流都从一个数据源开始。通常,与数据来源相关的工程挑战是围绕大规模数据摄取展开的——我们如何从各种数据来源导入和预处理数据集,因为这些数据及太大,无法装入内存。


开源机器学习框架通过开发数据加载程序,在很大程度上解决了这个问题。这些工具(包括 TensorFlow 的tf.data API和 PyTorch DataLoader库)将数据分段加载到内存中,并且几乎可以用于任何大小的数据集。它们还提供动态特征工程,并且可以扩展到生产环境。

加速模型训练

ML 社区做了大量的工作来减少训练大型模型所需的时间。对于大型训练工作,通常会将训练工作分配给一组机器(训练集群)。还有一种常见的做法是使用专门的硬件(GPU 和现在的 TPU)来进一步减少训练模型所需的时间。


传统上,在多台机器和设备上分配训练操作需要修改模型代码,这并不简单。为了能真正获得使用机器集群和专用硬件所带来的效率提升,代码必须针对每个训练步骤智能地分割矩阵操作并合并参数更新。


现代工具使这个过程变得更加容易。TensorFlow Estimator API从根本上简化了将模型代码配置为在分布式集群上进行训练的过程。使用 Estimator API,设置一个参数就可以将训练图自动分布到多台机器/设备上。


AI Platform Training这样的工具能够提供随需应变的资源供应,实现分布式集群上的模型训练。可以使用bash shell命令为训练作业提供多种机器和设备类型(高性能 CPU、GPU 设备、TPU)。

可移植、可扩展、可重复的 ML 实验

创建一个既能实现快速原型设计又能够标准化实验过程的环境会面临一连串的工程挑战。


如果没有一个清晰的方法来重复过去的实验,并将模型元数据(参数值)与观察到的评估指标关联起来,超参数调优(更改模型参数的值以降低验证错误)的过程就不可靠。快速迭代和高效运行实验的能力需要分布式和硬件加速器支持下的大规模训练。此外,如果 ML 代码不可移植,实验过程将变得不可管理——其他团队成员/涉众无法复制实验,并且随着新数据的出现,生产中的模型也无法重新训练。


就我个人而言,我在团队中为AI Hub构建容器,我们正在努力帮助解决这些挑战。我们将 ML 算法(XGBoostResNet等)的高性能实现构建为 Docker 容器。容器提供了对 AI 平台的原生支持,并且会默认保存模型元数据,提供了一个可重复的过程来运行实验。这些容器支持分布式训练,可以在 GPU 或 TPU 设备上运行。它们还具有可移植性——只要安装了 Docker,容器就可以在任何地方由任何人运行。

服务基础设施

生产级 ML 系统两端的规模都很大:大规模的数据摄取和模型训练,以及大规模的模型服务。一旦一个模型被训练过,它就必须被导出到一个环境中,用来生成推断。正如消费者网站需要处理 Web 流量的巨大波动一样,模型端点也必须能够处理预测请求的波动。


AI Platform Prediction这样的云工具为模型服务提供了一个可扩展的解决方案。云服务的弹性特性允许服务基础设施根据预测请求的数量伸缩。这些环境还允许对模型进行持续监控,并且可以编写测试过程来检查模型在生产过程中的行为。

未来更好的 ML 系统

未来,构建 ML 产品将更加有趣,并且这些系统会工作得更好。随着 ML 自动化工具的不断改进,数据科学家和 ML 工程师将把更多的时间花在构建优秀的模型上,而花在与生产级 ML 系统相关的繁琐但必要的任务上的时间会更少。


2020-02-24 09:321489
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 288.3 次阅读, 收获喜欢 1303 次。

关注

评论 1 条评论

发布
用户头像
随着服务器的计算能力的提升、数据治理的有效开展、数据自动化框架的搭建,数据分析师的工作难度会变的越来越高,常见的指标可以自动化生成,谁都能看懂,异常数据甚至可以自动化报警,不需要数据分析师整天盯着盘面看,数据分析师越来越从提数+常见指标分析向需要概率论基础+ML知识的高端数据分析师改进。如果以后,我也还是要通过时序图知道异常点、还需要自己写sql去判断最热销的产品已经用户画像,那我怕三两年内就会被淘汰掉。最近总看到很多人想转数据分析师,无论是从事产品经理、运营的偏产品的人,还是偏技术的程序员。我觉得,数据分析师这个职位不是很重要,重要的是数据思维。数据思维就像外语一样,大多数人学习外语并不是靠外语吃饭,但是外语可以帮助我们看懂外面的信息(翻译搬运工往往会加入主观内容,不够真实)、学到外面的东西、和更多的更广范围的人交流。不要觉得做数据分析师才是做数据,在自己岗位上好好工作+数据思维才能发挥更大的价值。
2020-02-24 10:11
回复
没有更多了
发现更多内容

【腾讯云 Finops Crane 集训营】安装使用及EHPA弹性演示

指剑

腾讯云 Kubernetes 降本增效 FinOps crane

可以免费使用的ChatGPT-4,微软开放Bing Chat功能,供用户体验

炜娓道来程序人生

AI AIGC ChatGPT

即时通讯(IM)开源项目OpenIM对WebAssembly支持,提升web端体验

Geek_1ef48b

2023-05-22:给定一个长度为 n 的字符串 s ,其中 s[i] 是: D 意味着减少; I 意味着增加。 有效排列 是对有 n + 1 个在 [0, n] 范围内的整数的一个排列 perm

福大大架构师每日一题

Go 算法 rust 福大大

C/C++项目构建指南:如何使用Makefile提高开发效率

小万哥

c++ 程序员 面试 后端 开发

AIGC产业研究报告2023——分子发现与电路设计篇

易观分析

产业 AIGC

SpringWeb服务构建轻量级Web技术体系:SpringHATEOAS

Java你猿哥

Java spring RESTful Web ssm

打卡智能中国(五):博士都去哪儿了?

脑极体

AI 智能中国

TLS 加速技术:Intel QuickAssist Technology(QAT)解决方案

vivo互联网技术

TLS 加速 Intel QAT

iOS MachineLearning 系列(17)—— 几个常用的对象识别 CoreML 模型

珲少

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

西柚子

记一次redis主从切换导致的数据丢失与陷入只读状态故障

Java你猿哥

redis sentinel ssm 高可用架构

利用 DynamoDB 和 S3 结合 gzip 压缩,最大化存储玩家数据

亚马逊云科技 (Amazon Web Services)

存储

Java开发分析用什么软件好?

真大的脸盆

Mac JAVA开发 Mac 软件 Java开发分析工具

数字化转型应该如何去做?(方法篇)

数字随行

数字化转型

如何使用Go实现原型设计模式

Jack

golang 设计模式 架构设计 golang 面试

为什么 HashMap 会死循环?

javacn.site

名侦探白洞(一):智能家居灵异事件

白洞计划

AI

扩展可能性:发挥React Native与小程序集成的优势

FinFish

React Native 跨端开发 小程序容器 跨端框架 小程序技术

Transformer模型的基础演算

OneFlow

人工智能 AI

2023开放原子全球开源峰会分论坛即将来袭,Pick你最关注的峰会话题!

开放原子开源基金会

Last Week in Milvus

Zilliz

开源赋能 普惠未来|QUICKPOOL诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源

开源赋能 普惠未来|OpenNJet诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

共话开源,为热爱而聚!2023开放原子全球开源峰会“开发者之夜”节目征集进行中!

开放原子开源基金会

开源

JavaScript作用域深度剖析:动态作用域

沉浸式趣谈

开源模式新探索!卡奥斯工业互联网开源开放社区再升级

Openlab_cosmoplat

开源 工业互联网 天工开物

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

股市老人

面试官:你能和我说一下 CMS 垃圾回收器吗?

Java你猿哥

Java 算法 CMS 垃圾回收器 垃圾收集器

未来,机器学习所需的工程量会大大减少_AI&大模型_David LiCause_InfoQ精选文章