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版本的模型也可以在同一应用程序中运行。
  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/UgcbumC50YxFjmrwS4KG
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券