Uber开源深度学习框架抽象层,让机器学习应用可快速抽换底层框架

Uber为了要让自家应用程序可以灵活使用多种深度学习框架,因此开发了抽象层Neuropod,作为开发、训练和部署机器学习模型的接口,Uber提到,这个框架的目的,是要让研究人员可以更简单地应用各种框架构建模型,并简化模型的部署。

Uber为了发展自动驾驶的软件,因此寻求各种新方法来改进模型,而这代表研究人员要广泛地尝试使用各种不同的深度学习框架,包括各式新框架,以及TensorFlow和PyTorch等现有框架及其更新版本,Uber表示,他们希望研究人员可以灵活地选用适合他们的工具。不过,要在机器学习堆栈中支持新的深度学习框架并非简单的事,需要花费大量的人力资源和时间。

因此为了简化这个过程,Uber便开发了Neuropod,这是创建在现有深度学习框架之上的抽象层,其提供了执行深度学习模型的统一接口,简化人工智能应用程序开发,Uber举例,要将TensorFlow计算机视觉模型集成到服务中,需要在服务以及其他相关工具中,添加对TensorFlow API的支持,当改天他们也想使用PyTorch模型时,便需要重复进行相同的工作,如果想要灵活使用多个深度学习框架,就必需要重复多次相同的工作。

应用Neuropod则可消除这类重复性工作,因为Neuropod是TensorFlow这类框架与应用程序之间的抽象接口,应用程序不直接使用TensorFlow API,而是与Neuropod沟通,所以开发人员只需要增加对Neuropod的支持,就能与多个深度学习框架兼容。

Neuropod规范了输入与输出的描述,包括名称、资料类型等,由于抽象化实例,因此只要用来解决相同问题的模型,就可以互换,即使用不同的框架和程序语言也没关系,例如用户想要以C++搭配使用PyTorch模型,Neuropod则会在后台启动一个Python解释器,并与该模型沟通。

Neuropod会打包模型,包括原始模型、元资料、测试资料以及自定义操作,应用程序只调用无关框架的API,而Neuropod会把这些调用转换成对底层框架的调用,最后,Neuropod导出模型并创建指标工作管线,以定义基准来比较模型性能。

过去一年间,Uber已经使用Neuropod开发了数百种模型,包括预测乘车抵达时间,以及自动驾驶的对象侦测等模型,Uber提到,他们将来的版本会加入版本控制功能,在导出模型的时候可指定框架版本,并且以容器化的方式,对模型进行更多的隔离。