Uber开源Neuropod:可统一AI框架并将模型转化为产品

2020 年 6 月 09 日

Uber开源Neuropod:可统一AI框架并将模型转化为产品

近日,Uber 在其官方博客宣布正式开源 Neuropod ,该工具是一个提供统一界面的库,用于从 C ++ 和 Python 的多个框架中运行深度学习模型。Uber 表示,Neuropod 使研究人员可以轻松地在所选择的框架内构建模型,同时还简化了这些模型的生产。

在工业和学术界,数据科学家在开发过程中使用多个框架的情况并不少见。例如,Uber 的高级技术小组(ATG)在过渡到 Facebook 的 PyTorch 之前整合了 Google 的 TensorFlow,这导致与 TensorFlow 一起运行时出现了内存损坏和调试问题。

为了解决这类问题,Uber 发布了 Neuropod,通过使框架在运行模型时看起来相同,从而防止了不兼容问题的出现,并为 TensorFlow,PyTorch,Keras 和 TorchScript 提供开箱即用的支持。

GitHub 地址: https://github.com/uber/neuropod

自 2019 年初内部发布以来,Neuropod 一直在快速部署新模型方面发挥了作用。去年,Uber 在其 ATG、AI 和其他核心业务中部署了数百种 Neuropod 模型。这些模型包括用于需求预测的模型、用于乘车的到达时间(ETA)预测、用于 Uber Eats 的菜单转录以及用于自动驾驶车辆的对象检测模型。

Neuropod 从问题定义的概念开始——对模型要解决的“问题”的正式描述。在这种情况下,问题可能是图像的语义分割或文本的语言翻译。通过正式定义问题,可以将其视为接口并抽象出具体的实现。每个 Neuropod 模型都实现问题定义,结果,解决相同问题的任何模型都可以互换,即使它们使用不同的框架也是如此。

Neuropod 的工作原理是:将现有模型包装在 Neuropod 包中,该软件包包含原始模型以及元数据、测试数据和自定义操作(如果有)。

使用 Neuropod,任何模型都可以从任何受支持的语言下执行。例如,如果用户想从 C ++ 运行 PyTorch 模型,Neuropod 将在后台启动一个 Python 解释器,并与之通信以运行模型。这是必需的,因为 PyTorch 模型需要运行 Python 解释器。此功能使开发者能够快速测试 PyTorch 模型,然后再尝试将其转换为 TorchScript ,该模型可以从 C ++ 本地运行。

Neuropod 当前支持从 Python 和 C ++ 运行模型。但是,为该库编写其他语言绑定很简单。例如,Uber 的 ML 平台 Michelangelo 使用 Neuropod 作为其核心 DL 模型格式,并实现了 Go 绑定以从 Go 运行其生产模型。

应用程序与框架无关的 API 进行交互,并且 Neuropod 将这些与框架无关的调用转换为对基础框架的调用。最后,Neuropod 导出模型并建立度量标准管道以将性能与定义的基准进行比较。

Uber 在博客中写道,Neuropod 仅仅是开始,未来将实现的一些功能包括:

  1. 版本选择:此功能使用户能够在导出模型时指定框架的所需版本范围。例如,一个模型可能需要 TensorFlow 1.13.1,而 Neuropod 将使用带有正确版本框架的 OPE 自动运行该模型,使用户可以在单个应用程序中使用多个框架和每个框架的多个版本。

  2. 封装操作:此功能使应用程序可以指定使用张量“完成”的时间。一旦张量被封装,Neuropod 可以在运行推理之前将数据异步传输到正确的目的地(例如本地 GPU 或工作进程等)。这有助于用户并行化数据传输和计算。

  3. Dockerized 工作进程:这样可以在模型之间提供更多的隔离。例如,使用此功能,即使需要不同 CUDA 版本的模型也可以在同一应用程序中运行。

2020 年 6 月 09 日 13:58 1303
用户头像
陈思 InfoQ编辑

发布了 513 篇内容, 共 179.3 次阅读, 收获喜欢 954 次。

关注

评论

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

Flutter开发环境配置

玉龙BB

flutter android vscode

DDD 中的那些模式 — 使用 Specification 管理业务规则

Joshua

设计模式 领域驱动设计 DDD 架构模式

如何做好Code Review?

架构精进之路

Code Review

眼中有码,心中无码

小眼睛聊技术

深度思考 学习方法 程序员 最佳实践 算法

区块链技术大显身手,仅用20分钟就打完一场官司!

CECBC区块链专委会

CECBC 区块链技术 数字版权 存证

ARTS打卡计划_第一周

叫不醒装睡的人

ARTS 打卡计划

MySQL 可重复读,差点就我背上了一个 P0 事故!

楼下小黑哥

Java MySQL

后疫情时代,区块链的发展迎来曙光!

CECBC区块链专委会

CECBC 区块链技术

2万字长文带你细细盘点五种负载均衡策略。

why技术

Java 负载均衡 源码分析 dubbo java面试

clang-format 使用与集成介绍

Geek_101627

Mysql索引不会怎么办?6000字长文教会你

Super~琪琪

MySQL 数据库 sql 索引

ARTS-1

你当像鸟飞往你的山

ARTS 打卡计划

我的编程之路 -6(新时代)

顿晓

android 编程之路 时代

5G时代下应用的安全防御研究

Nick

5G 5G网络安全 5G安全

我为什么开始技术写作?

架构精进之路

技术创作

Java日志门面系统

泛泛之辈

Java 日志 slf4j

如何设置线程池参数?美团给出了一个让面试官虎躯一震的回答。

why技术

Java 源码分析 面试题 线程池

重学 Java 设计模式:实战单例模式

小傅哥

设计模式 编程思维 重构 优化代码

爬虫框架Scrapy应用实践-淘宝保险频道数据抓取【2】-抓包分析

hadesxiong

Python 爬虫 保险 Scrapy

ARTS 打卡 WEEK2

编程之心

ARTS 打卡计划

深入计算机底层,从几本靠谱的书开始

HackMSF

计算机工作原理

那些会阻碍程序员成长的细节[2]

码闻强

程序员 程序人生

如何使用 Apache CXF 快速实现一个 WebService

Rayjun

Java WebService CXF

ARTS打卡第一周

GKNick

体验一次简洁的代码

你当像鸟飞往你的山

ARTS-01

NIMO

ARTS 打卡计划 ARTS活动

ARTS week 3

刘昱

像孩子一样认识新事物 —— 读《终身幼儿园》

YoungZY

读书笔记 学习方法 读书

关爱孩子的心理建设

Neco.W

人生 感悟 教育

数据产品经理实战-数据门户搭建(上)

第519区

数据中台 开发数据

[ARTS打卡] week 01

Mau

ARTS 打卡计划

Uber开源Neuropod:可统一AI框架并将模型转化为产品-InfoQ