首页 > 科技 > 真香!优步的开源深度学习栈

真香!优步的开源深度学习栈

让我们看一下Uber的一些顶级机器学习开源项目

人工智能(AI)已经成为非典型的技术趋势。 在传统的技术周期中,创新通常始于试图破坏行业的初创公司。 以人工智能为例,该领域的大多数创新都来自大型公司实验室,例如Google,Facebook,Uber或Microsoft。 这些公司不仅在令人印象深刻的研究方面处于领先地位,而且还定期开放源代码,以简化AI技术的采用。 在这种情况下,Uber已经成为当前生态系统中开源AI技术最活跃的参与者之一。 在短短的几年内,Uber定期跨AI生命周期的不同领域开源项目。 今天,我想回顾一些我的最爱。

Uber是AI技术的近乎完美的游乐场。 该公司将大型科技公司的所有传统AI要求与前排座椅相结合,满足AI优先运输的需求。 因此,Uber一直在从客户分类到自动驾驶车辆的各种场景中构建机器/深度学习应用程序。 Uber团队使用的许多技术都是开源的,并获得了机器学习社区的赞誉。 让我们看看我的一些最爱:

注意:我没有介绍像Michelangelo或PyML这样的技术,因为它们已经公开地有据可查。

Ludwig:无代码机器学习模型的工具箱

Ludwig是一个基于TensorFlow的工具箱,无需编写代码即可训练和测试深度学习模型。 从概念上讲,路德维希是根据五个基本原则创建的:

  • 无需编码:不需要任何编码技能即可训练模型并将其用于获得预测。
  • 通用性:一种基于数据类型的新方法来进行深度学习模型设计,使该工具可在许多不同的用例中使用。
  • 灵活性:经验丰富的用户对模型的建立和培训具有广泛的控制权,而新用户则发现它易于使用。
  • 可扩展性:易于添加新的模型架构和新的特征数据类型。
  • 可理解性:深度学习模型的内部通常被认为是黑匣子,但是我们提供标准的可视化效果以了解其性能并比较其预测。

使用Ludwig,数据科学家可以通过简单地提供一个包含训练数据的CSV文件以及一个带有模型输入和输出的YAML文件来训练深度学习模型。 利用这两个数据点,Ludwig执行多任务学习例程,以同时预测所有输出并评估结果。 在幕后,路德维希提供了一系列深度学习模型,这些模型会不断进行评估,并且可以结合到最终的体系结构中。 Uber工程团队使用以下类比来解释此过程:"如果深度学习库提供了建造建筑物的基础,Ludwig提供了建造城市的建筑物,您可以在可用的建筑物中进行选择,也可以在其中添加自己的建筑物可用的集合。"

Pyro:一种本机概率编程语言

Pyro是由Uber AI Labs发布的一种深度概率编程语言(PPL)。 Pyro建立在PyTorch之上,并基于以下四个基本原则:

  • 通用:Pyro是通用PPL-它可以表示任何可计算的概率分布。 怎么样? 从具有迭代和递归(任意Python代码)的通用语言开始,然后添加随机采样,观察和推理。
  • 可扩展:Pyro可扩展到大型数据集,而手写代码的开销却很小。 怎么样? 通过构建使用小批数据的现代黑盒优化技术来近似推断。
  • 最小:Pyro是敏捷且可维护的。 怎么样? Pyro以强大的,可组合的抽象的小核心实现。 尽可能将繁重的工作委托给PyTorch和其他库。
  • 灵活:Pyro的目标是在需要时实现自动化,并在需要时进行控制。 怎么样? Pyro使用高级抽象来表示生成模型和推理模型,同时使专家可以轻松自定义推理。

这些原则常常使Pyro的实现方向相反。 例如,要实现通用,就需要在Pyro程序中允许任意控制结构,但是这种通用性使其难以扩展。 但是,总的来说,Pyro在这些功能之间实现了出色的平衡,从而成为现实应用中最好的PPL之一。

Manifold:用于机器学习模型的调试和解释工具集

Manifold是Uber的技术,用于大规模调试和解释机器学习模型。 借助Manifold,Uber工程团队希望实现一些非常切实的目标:

  • 在机器学习模型中调试代码错误。
  • 分别了解一个模型与其他模型的优缺点。
  • 比较和整合不同的模型。
  • 将通过检查和性能分析收集的见解纳入模型迭代中。

为了实现这些目标,Manifold将机器学习分析过程分为三个主要阶段:检查,说明和改进。

  • 检查:在分析过程的第一部分,用户设计模型,并尝试调查模型结果并将其与其他现有结果进行比较。 在此阶段中,用户将比较典型的性能指标,例如准确性,精度/召回率和接收器工作特性曲线(ROC),以粗粒度了解新模型是否优于现有模型。
  • 解释:分析过程的这一阶段试图解释上一阶段提出的不同假设。 此阶段依靠比较分析来解释特定模型的某些症状。
  • 优化:在此阶段,用户尝试通过将从解释中提取的知识编码到模型中并测试性能来验证从上一阶段生成的解释。


Plato:大规模构建会话代理的框架

优步建立了Plato研究对话系统(PRDS),以应对构建大规模对话应用程序的挑战。 从概念上讲,PRDS是一个框架,可以在各种环境下创建,训练和评估对话式AI代理。 从功能的角度来看,PRDS包括以下构件:

  • 语音识别(将语音转录为文本)
  • 语言理解(从该文本中提取含义)
  • 状态跟踪(有关到目前为止所说的和完成的操作的汇总信息)
  • API调用(搜索数据库,查询API等)
  • 对话政策(产生座席回应的抽象含义)
  • 语言生成(将抽象含义转换为文本)
  • 语音合成(将文本转换为语音)

PRDS在设计时就考虑了模块化,以便将最新研究纳入对话系统中,并不断发展平台的每个组件。 在PRDS中,可以在线(通过交互)或离线训练每个组件,并将其合并到核心引擎中。 从训练的角度来看,PRDS支持与人类和模拟用户的交互。 后者是在研究场景中快速启动对话式AI代理的常用方法,而前者则更能代表实时交互。

Horovod:大规模训练深度学习的框架

Horovod是在社区中变得非常流行的Uber ML堆栈之一,并已被DeepMind或OpenAI等AI强国的研究团队采用。 从概念上讲,Horovod是用于大规模运行分布式深度学习培训工作的框架。

Horovod利用诸如OpenMPI之类的消息传递接口栈,来使训练作业能够在高度并行且分布式的基础架构上运行,而无需进行任何修改。 通过以下四个简单的步骤即可在Horovod中运行分布式TensorFlow培训工作:

  • hvd.init()初始化Horovod。
  • config.gpu_options.visible_device_list = str(hvd.local_rank())为每个TensorFlow进程分配一个GPU。
  • opt = hvd.DistributedOptimizer(opt)用Horovod优化器包装任何常规TensorFlow优化器,该优化器使用环减少法来平均梯度。
  • hvd.BroadcastGlobalVariablesHook(0)将变量从第一个进程广播到所有其他进程,以确保一致的初始化。

Uber AI研究:AI研究的常规资源

最后,我们要特别提到的是Uber对AI研究的积极贡献。 Uber的许多开源版本都受到他们研究工作的启发。 Uber AI研究网站是一个惊人的论文目录,着重介绍了Uber在AI研究方面的最新成果。

这些是Uber工程团队的一些贡献,这些发现已被AI研究与开发社区定期采用。 随着Uber继续大规模实施AI解决方案,我们应该看到创新的框架,这些框架可以简化数据科学家和研究人员对机器学习的采用。

(本文翻译自Jesus Rodriguez的文章《Uber Has Been Quietly Assembling One of the Most Impressive Open Source Deep Learning Stacks in the Market》,参考:https://towardsdatascience.com/uber-has-been-quietly-assembling-one-of-the-most-impressive-open-source-deep-learning-stacks-in-b645656ddddb)

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/2315465.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)