AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

Uber 推出 PyML:加速机器学习开发的秘密武器

  • 2018-11-09
  • 本文字数:1571 字

    阅读完需:约 5 分钟

Uber推出PyML:加速机器学习开发的秘密武器

Uber 一直是加速真实世界机器学习解决方案实现最活跃的公司之一。就在今年,Uber 推出了 Michelangelo、Pyro.ai 和 Horovod 等技术,这些技术以现实世界中机器学习解决方案关键构建块为重点。近日,Uber 推出了一个机器学习栈,这一次是为了缩短从实验到产品的周期。PyML 是一个库,能够以与生产运行时兼容的方式快速开发 Python 应用程序。


PyML 试图解决的问题是大规模机器学习应用中无处不在的挑战之一。通常,数据科学家用于原型模型的工具和框架与相应的生产运行时之间存在明显的不匹配。例如,对于数据科学家来说,使用基于 python 的框架(如 PyTorch 或 Keras)来生成实验模型,然后调整这些模型使其适合于像 Apache Spark ML 管道这样具有特定约束的运行时,这是非常常见的。机器学习技术专家把这个问题称为灵活性和资源效率之间的取舍问题。就 Uber 而言,数据科学家正在使用 Python 机器学习框架构建模型,这些框架需要由 Michelangelo 团队进行重构,以匹配 Apache Spark 管道的约束。


克服这一限制意味着扩展 Michelangelo 的功能,以支持使用主流机器学习框架创建的模型,同时保持训练和优化模型的一致性。

PyML 简介

Uber PyML 的目标是简化机器学习应用程序的开发,弥合实验和生产运行时之间的差距。为了实现这一点,PyML 以下面三个方面为重点:


  • 提供机器学习模型的标准契约。

  • 实现使用 Docker 容器打包和部署机器学习模型的模型一致性。

  • 把集成了 Michelangelo 的运行时用于在线和离线预测模型。


下图说明了 PyML 的基本架构原则。


标准机器学习契约

PyML 模型可以使用不同的机器学习框架编写,如 TensorFlow、PyTorch 或 Scikit-Learn。模型可以使用的数据集类型主要有两种:DataFrames 和 Tensors。DataFrames 存储表格式结构化数据,而 Tensors 存储多维命名数组。在创建模型之后,把它们调整为标准的 PyML 契约定义,这本质上是一个从抽象类 DataFrameModel 或 TensorModel 继承的类。在这两种情况下,用户只需要实现两个方法:一个是加载模型参数的构造函数,另一个是接受并返回 DataFrames 或 Tensors 的 predict()方法。


打包和部署

在创建 PyML 模型之后,可以使用一致的结构把它们打包到 Docker 容器中。PyML 引入了一种基于四个基本构件的标准部署格式:



使用这种结构,开发人员可以使用以下代码打包和部署 PyML 模型。PyML Docker 镜像将包含模型和所有相应的依赖项。模型将可以立即在 Michelangelo 控制台执行。



在线和离线预测

PyML 支持批处理(离线)和在线执行模型进行预测。离线预测被建模为 PySpark 上的抽象。在那种情况下,PyML 用户只需提供一个 SQL 查询,与模型期望输入相匹配的列名和类型,以及存储预测输出的目标 Hive 表的名称。在后台,PyML 使用与在线模型相同的镜像和 Python 环境启动了一个容器化 PySpark 任务,以确保离线和在线预测之间没有区别。执行离线预测相对简单,如下面的代码所示:



PyML 模型的标准双操作(init、predict)契约简化了在线预测的实现。PyML 通过启用 Docker 容器的轻量级 gRPC 接口实现了在线预测,Docker 容器由一个如下图所示的常见的在线预测服务使用。根据请求,在线预测服务将通过 Mesos 的 API 以嵌入式 Docker 容器的形式启动相应的特定于 PyML 模型的 Docker 镜像。当启动容器时,它启动 PyML RPC 服务器,并开始监听来自在线预测服务的 Unix 域套接字上的预测请求。



PyML 通过弥合实验和运行时环境之间的差距,解决了大型机器学习应用程序中其中一个最重要的挑战。除了特定的技术贡献外,PyML 的架构可以适应不同的技术栈,可以作为组织开始机器学习旅程的重要参考。


关于 PyML 的更多技术细节,请查阅 Uber 技术博客:https://eng.uber.com/michelangelo-pyml/


查看英文原文:https://towardsdatascience.com/uber-introduces-pyml-their-secret-weapon-for-rapid-machine-learning-development-c0f40009a617


2018-11-09 16:411423
用户头像

发布了 1008 篇内容, 共 412.1 次阅读, 收获喜欢 346 次。

关注

评论

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

鉴释人物丨专访首席科学家李隆: 重一步业务逻辑验证,省百步漏洞补缺

鉴释

业务逻辑 漏洞修复

揭秘百度微服务监控:百度游戏服务监控的演进

百度开发者中心

云计算 微服务 最佳实践 方法论 云原生

阿里秋招面试必问的几个知识点:Spring+Redis+MySQL+HashMap+多线程,不看我真的怕你后悔

Java 程序员 架构 面试 计算机

fil价格今日行情?2021年fil币预估价格多少钱一枚?

区块链 分布式存储 IPFS fil价格 fil预测

51CTO专访|鉴释首席架构师刘新铭:让软件开发更安全、更高效

鉴释

编译器

工程师文化落地的几点思考

baiyutang

敏捷 敏捷开发 精益开发 精益思想 敏捷管理

第八周作业——知识星球内容管理功能

小夏

产品经理训练营 邱岳

RTC月度小报5月丨教育aPaaS灵动课堂升级、抢先体验VUE版 Agora Web SDK、声网Agora与HTC达成合作

声网

月度小报 行业深度

架构实战训练营模块三课后作业

Clarke

百度前端三面面试题全部公开,三面的最后一个问题令我窒息

前端依依

百度 面试 大前端 经验总结

Kubernetes实战:高可用集群的搭建和部署

华为云开发者联盟

Kubernetes 高可用 集群 高可用集群 apiserver

性能测试误差对比研究(二)

FunTester

性能测试 压测 接口测试 测试框架 误差分析

我们三岁啦!

鉴释

MES、ERP和低代码下的智慧工厂

优秀

低代码 ERP mes

论工作几年深陷业务代码的程序员如何实现自我提升

北游学Java

Java 程序人生

鉴释人物 | 专访产品开发总监吴翔:DevSecOps的竞技之道

鉴释

敏捷开发 应用安全 软件安全 软件质量与安全

鉴释人物丨专访首席技术官陈新中:三十年磨一“鉴”, 打造静态代码分析行业标杆

鉴释

编译器 静态代码分析

C/C++Linux服务器开发高级架构师/Linux后台开发架构师丨高级进阶

Linux服务器开发

架构师 Linux服务器开发 Linux后台开发 后台开发架构师 服务器开发架构师

提升源代码安全管控,从源头保护敏感数据

鉴释

数据安全

鉴释×中科院计算所丨OS2ATC 2020精彩回顾

鉴释

开源 操作系统

图灵奖得主Judea Pearl谈机器学习:不能只靠数据

百度开发者中心

机器学习 最佳实践 方法论 文化 & 方法 其他

我们该如何应对日益增长的安全债务风险?

鉴释

应用安全 代码安全

2021全国人工智能师资培训走进北理工,百度飞桨助力高校教师提升AI能力

百度大脑

人工智能 高校

Linkflow签约未卡VETRESKA,精细化运营赋能品牌成功破圈,开启种草新模式

Linkflow

CloudQuery 如何实现云上数据导入导出

BinTools图尔兹

数据库 dba 国产数据库 运维开发

认识容器,我们从它的历史开始聊起

华为云开发者联盟

Docker Kubernetes 容器 进程

“Talk is cheap, show me the code”你一行代码有多少漏洞?

鉴释

代码质量 静态代码分析

性能测试误差对比研究(一)

FunTester

性能测试 接口测试 测试框架 误差分析

鉴释×RT-Thread丨2020 RT-Thread开发者大会精彩回顾

鉴释

操作系统 物联网

如何利用FL Studio中文版做出失真效果

懒得勤快

即时通信 IM 产品怎么选? 本文超详细解说,马住!

腾讯云音视频

Uber推出PyML:加速机器学习开发的秘密武器_AI&大模型_Jesus Rodriguez_InfoQ精选文章