机器学习本该用起来更简单

2020 年 3 月 30 日

机器学习本该用起来更简单

免责声明:本文内容是基于我对一些机器学习团队的观察结果,而不是对这个行业的一份学术调查。利益相关,我需要先表明自己是Cortex项目的贡献者,Cortex是一个用来在生产中部署模型的开源平台。


为了方便读者理解,我拿软件中无处不在的东西为例,比如数据库。构建一个数据库是什么意思呢?对于 Postgres 的贡献者来说,“创建一个数据库”就是要写一百万行 C 代码。对于 Rails 开发者来说,这就是 rake db:create 的操作。显然,谁都没错,它们只是代表了不同的抽象级别,适用于不同的工程师。


这就是软件构建的方式,为现代应用程序提供支持的基本软件(数据库、Web 服务器、请求路由器、哈希库等)都是因为抽象层的存在让非专业人士也可以轻松使用它们。


机器学习历来缺少这样的抽象层,这就限制了该技术的普及。但是,情况正在发生变化。新兴起的一批项目的关注重点就是让机器学习的应用变得更容易。


模型需要对开发人员友好的界面


为了在生产中使用机器学习技术,你需要:


  • 了解模型的专业知识

  • 足够的数据和资金来训练模型

  • 清楚机器学习基础架构知识以部署模型


于是,任何动用机器学习的项目都需要多名专家参与,这是客观存在的瓶颈。但是,开发人员所希望的是即便缺乏机器学习背景,也能在生产中使用该技术,就像没有密码学背景的开发人员仍然可以应用哈希库来保护用户数据一样。


幸运的是,这一天终于要到来了。


填补机器学习的抽象层鸿沟


为了让机器学习的应用广泛普及,开发人员必须对机器学习有一个高级层面的理解(什么是模型、微调、推断等),并使用可用的抽象来构建应用。


许多必要的抽象已经在研究中了,总结起来可归结为以下重点领域:


需要更简单的方法来训练模型


其实,对于许多应用机器学习技术的用例而言,我们并不需要从头开始训练新的模型。


例如,如果你正在开发会话代理,则几乎可以肯定谷歌 Meena 的表现要优于其他。如果正在开发文本生成器,则可能使用 OpenAI 的 GPT-2,而不是从头开始构建文本生成器。对于对象检测用例,YOLOv3 之类的模型可能是不错的选择。


得益于迁移学习技术,开发人员可以使用相对少量的数据,将这些开源模型微调以用于任务中。


例如,使用 gpt-2-simple 之类的新库时,可以使用简单的命令行界面微调 GPT-2:


$ gpt_2_simple finetune your_custom_data.txt
复制代码


有了这一抽象层,开发人员就不需要深度的机器学习专业知识,他们只需要知道什么是微调即可。而且,gpt-2-simple 不是唯一可用的抽象。谷歌的 CloudAutoML 为用户提供了一个 GUI,可让用户选择自己的数据集并自动训练新模型,过程中无需编写代码:



Sundar Pichai 在撰写关于AutoML的文章时说:“我们希望 AutoML 具备当下很少几位 PhD 才拥有的能力,并在未来三到五年内,让成千上万的开发人员能够为他们的特定需求设计新的神经网络。”


从模型生成预测的过程必须简单


读到这里,我们可以发现为特定任务获取经过训练的模型已经容易多了。接下来的问题是如何根据模型来生成预测?


有一大把项目提供了模型服务(model serving)功能,其中许多都对接了流行的 ML 框架。例如,TensorFlow 具有 TF 服务,而 ONNX 具有 ONNX 运行时。


除了科技巨头提供的项目外,许多独立的开源项目正在解决这个问题。例如,Bert Extractive Summarizer 是一个可以轻松使用谷歌 BERT 提取文本摘要的项目。以下是其文档中的示例


from summarizer import Summarizer
body = 'Text body that you want to summarize with BERT'body2 = 'Something else you want to summarize with BERT'model = Summarizer()model(body)model(body2)
复制代码


使用这个库来生成预测非常简单,只需导入语句并调用 Summarizer()即可。这样的项目数量越来越多,开发人员无需深入挖掘模型本身的细节,也能更轻松地从模型生成预测。


部署模型必须简单


最后的瓶颈是基础架构。


为应用程序提供预测很简单,但是当应用程序需要扩展时,事情就会变得很复杂。以 GPT-2 为例:


  • GPT-2占用的空间大于5GB。你需要一台更大的服务器(这也意味着价格会更高)来托管这么大的模型。

  • GPT-2非常消耗计算资源。就为了提供单个预测,GPT-2就能以100%的占用率吃掉CPU几分钟的计算资源。即便使用一颗GPU,单个预测也可能需要几秒钟才能完成。相比之下,Web应用可以通过一个CPU为数百个并发用户提供服务。

  • GPT-2非常消耗内存。除了巨大的磁盘空间和计算资源需求之外,GPT-2还需要大量内存才能正常运行而不会崩溃。


哪怕是只应对少量用户,基础架构也需要扩展应用程序的很多副本,这意味着要使用 Docker 对模型容器化,使用 Kubernetes 来编排容器,而且还要在所使用的云平台上配置自动缩放。


构建一个用于处理机器学习部署的基础架构需要学习一整套工具,对于大多数缺乏专业背景的开发人员来说,相关知识有很多都是很陌生的:



机器学习基础架构技术栈


为了让开发人员可以使用机器学习技术,还需要抽象机器学习的基础架构。这就是诸如Cortex之类的项目(利益相关:我是一位贡献者)的用武之地。


Cortex 通过配置文件和 CLI 抽象了模型部署的底层开发运维工作:



资料来源:Cortex Repo


像 Cortex 这样的项目的目标很简单:输入一个经过训练的模型,并将其转变为任何开发人员都可以使用的预测 API。


让机器学习应用起来更加轻松


让我澄清一点,机器学习背后的基础数学永远都很困难。没有人仅仅因为自己可以调用一个 predict()函数就能变身机器学习专家。关键在于,开发人员并不必成为机器学习专家(或开发运维专家),也可以在他们的应用程序中使用机器学习技术。


机器学习生态系统终于开始将重心放在简化机器学习的应用难度上了。开发人员只需少量知识就可以微调一个最前沿模型,将其包装在一个 API 中,并使用开源且直观的抽象将其部署在可伸缩的基础架构上。


这样一来,机器学习应用将变得更加容易。进一步说,几乎所有开发人员都可以使用这种技术。


作者介绍:


Caleb Kaiser,Cortex Lab 创始团队成员,曾在 AngelList 工作,最初在 Cadillac 供职。


原文链接:


https://towardsdatascience.com/machine-learning-is-still-too-hard-to-use-e344773725af


2020 年 3 月 30 日 12:07717

评论

发布
暂无评论
发现更多内容

WordPress插件设计

心平气和

php 插件设计 插件系统 WordPress

架构师训练营第六周-总结

人世间

《架构师训练营》第七周命题作业

Debug ArrayList源码

Noneplus

Java

Rust多线程之数据共享

编号94530

rust 多线程 数据共享 什么是多线程

上班摸鱼,可以玩一整天,哈哈哈!!!

诸葛小猿

上班 摸鱼

Java 基础知识整理

多选参数

Java

不变的是什么?

zhongzhq

依道而行 规律 变化

写一个并发测试工具

罗亮

Flink 生态:Pulsar Connector 机制剖析

Apache Flink

flink

Week7 作业

Shawn

第7周笔记:性能优化

Melo

你以为你真的理解 Closure 吗

大导演

Java 前端进阶训练营

raft协议中, 候选人角色能参与投票吗

王传义

raft

浪潮信息推动AI在线教育实现全面应用

Geek_116789

负载均衡+分布式数据库

王鹏飞

CAP原理

王鹏飞

《架构师训练营》第七周总结

程序员都应该知道的数据库避坑指南

Phoenix

MySQL 数据库 事务隔离级别

第七周作业

田振宇

ARTS打卡第3周

Scotty

tcpdump 实例-获取网络包的50种方法

Rayjun

TCP/IP tcpdump

Android | Glide细枝篇

哈利迪

android 源码

Discuz插件设计

心平气和

php Diszuz 插件设计 插件系统

第7周作业:web性能测压工具

Melo

LeetCode题解:1051. 高度检查器,JavaScript,桶排序,详细注释

Lee Chen

LeetCode 前端进阶训练营

普本毕业三年,四面华为,因精通这6大知识点拿到25*16薪offer

互联网架构师小马

Java 程序员 面试 求职 找工作

图解:最短路径之如何理解“松弛”or“放松”?

淡蓝色

Java 数据结构 算法

ARTS Week7

丽子

ARTS 打卡计划

LeetCode题解:141. 环形链表,JavaScript,快慢指针,详细注释

Lee Chen

LeetCode 前端进阶训练营

IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line...

YourBatman

intellij-idea spring IDEA springboot

机器学习本该用起来更简单-InfoQ