Facebook发布PyTorch 1.1,开源AI模型优化简化工具BoTorch & Ax

美国时间4月30日,Facebook F8 开发者大会在美国加利福尼亚州的圣何塞举办。在此次开发者大会期间,Facebook开源了简化模型优化的工具——BoTorch和Ax,还发布了Pytorch 1.1。

Facebook F8 大会主要面向围绕该网站开发产品和服务的开发人员及企业家,大会通常包括主题演讲以及 Facebook 新产品、新工具的发布。其名称源自 Facebook 的 8 小时黑客马拉松竞赛。

在今年的 Facebook F8 大会上,扎克伯格谈到了过去一年最敏感的隐私问题,称「过去我们常常是先发布,然后发现问题后再解决」,「未来我们会更加谨慎,咨询专家做出评估,并采取更为主动积极的应对策略」。

除此之外,Facebook 还发布了 PyTorch 的最新迭代版本——Pytorch 1.1 以及用于简化模型优化流程的新工具 BoTorch 和 Ax。

开源 Ax 和 BoTorch 简化 AI 模型优化

在 F8 开发者大会上,Facebook 开源了两款全新的 AI 工具:Ax 和 BoTorch,让开发者无需大量数据就能在研究与产品中解决 AI 难题。

据 Facebook 博客介绍:

  • BoTorch 是一个基于 PyTorch 的灵活、新式的贝叶斯优化库;

  • Ax 是一个理解、管理、部署、自适应实验的易获取、通用 AI 平台;

贝叶斯优化库 BoTorch

项目地址:https://botorch.org (https://botorch.org/)

其实,BoTorch 并非首个贝叶斯优化工具,但 Facebook 发现已有的工具难以扩展或者自定义,无法满足他们日益增长的需求。所以,Facebook 开发了全新的方法,让它能够支持多噪声目标函数优化,可扩展到高度并行的测试环境,利用低保真度逼近、优化高维参数空间。

Facebook 利用 PyTorch 的计算能力,重新思考了实现模型和优化程序的路径,开发出了 BoTorch。整体来说,BoTorch 提供了一个模块化以及用于组合贝叶斯优化原语的易扩展接口,包括概率代理模型,采集函数(acquisition functions)和优化器。它还提供以下支持:

当前硬件(包括 GPU)上的自动差分、高度并行化计算,以及通过 PyTorch 与深度学习模块的无缝集成。

GPyTorch 中最顶级的概率建模,包括支持多任务高斯过程(GP)、可扩展 GP、深度核学习、深度 GP 和近似推理。

通过再参数化技巧的基于蒙特卡罗的采集函数,使得实现新思想变得简单,不需要对基础模型施加限制性假设。

Facebook 表示,BoTorch 大大提高了贝叶斯优化研究的开发效率。它为无法分析解决方案的新方法打开了大门,包括批量采集函数和正确处理具有多个相关结果的丰富多任务模型。BoTorch 的模块化设计使研究人员能够更换或重新排列单个组件,自定义算法的各个方面,从而使他们能够对现代贝叶斯优化方法进行最前沿的研究。

自适应实验可扩展平台 Ax

为了配合 BoTorch,Ax 提供了易于使用的 API,以及面向产品和研究复现所需的管理。在开发层面,这使得开发人员能够专注于应用的问题,例如探索配置等;在研究层面,它让研究人员能够花更多时间专注于贝叶斯优化的构建块。

下图展示了 Ax 和 BoTorch 在优化生态系统中的应用。以 Facebook 为例,Ax 与其主要 A / B 测试、机器学习平台,以及模拟器、其他后端系统相接,需要最少的用户参与来部署配置以及收集结果。

Ax 让开发人员能够创建自定义优化应用程序,或者从 Jupyter 笔记本中临时优化。新算法可以使用 BoTorch 库或其他应用程序实现。

通过以下核心功能,Ax 降低了开发人员和研究人员进行自适应实验的障碍:

  • 跨框架接口:实现新的自适应实验算法。虽然 Ax 大量使用 BoTorch 作为其优化算法,但提供了通用的 NumPy 和 PyTorch 接口,以便研究人员和开发人员可以插入任何框架中可实现的方法。

  • 可定制的自动化优化程序。根据实验的特征,Ax 从贝叶斯优化、 bandit 优化以及其他技术中选择适当的优化策略。用户可以轻松定制这些默认例程,以满足其特定应用程序的需求。

  • 系统理解工具。交互式的可视化让用户可以查看代理模型、执行诊断,以及了解不同结果之间的权衡。

  • 人可参与的优化。除了支持多个 objective 和系统理解之外,Ax 的底层数据模型还使实验者能够在收集新数据时安全地介入其搜索空间和目标。

  • 创建自定义优化服务的能力。多个 API 使得 Ax 既可用作部署控制、收集数据的框架,也可用作可通过远程服务调用的轻量级库。

  • 用于评估新的自适应实验算法的基准测试套件。轻松比较不同算法在测试问题上的优化性能,并保存结果,以便进行可重复的研究。

为了展示 Ax 是如何工作的,以下是一个使用人工 Booth 函数作为评估函数的简单优化循环示例:

from ax import optimize

best_parameters, _, _, _ = optimize(
    parameters=[{"name": "x1","type": "range","bounds": [-10.0, 10.0],},{"name": "x2","type": "range","bounds": [-10.0, 10.0],},],
    evaluation_function=lambda p: (p["x1"] + 2*p["x2"] - 7)**2 + (2*p["x1"] + p["x2"] - 5)**2, 
    minimize=True,)

best_parameters# returns {'x1': 1.02, 'x2': 2.97}; true min is (1, 3)

发布 PyTorch1.1

自 2017 年开源以来,PyTorch 已经成为全世界最受欢迎的深度学习框架之一。去年秋季发布的《2018 年 GitHub Octoverse 报告》称 PyTorch 是 GitHub 平台上最受欢迎的开源项目之一,全世界有 3100 万开发者使用 PyTorch。去年 12 月,在 NeurIPS 2018 大会上,Facebook 发布了 PyTorch 1.0 正式版。时隔半年,今天,Facebook 发布了 PyTorch1.1。

项目地址:https://github.com/pytorch/pytorch/releases/tag/v1.1.0

官方博客:https://pytorch.org/blog/optimizing-cuda-rnn-with-torchscript/

与之前的版本相比,PyTorch 1.1 具备以下特性:

  • 提供 TensorBoard 的官方支持;

  • 升级了即时编译(JIT)编译器;

  • 提供新的 API;

  • 不再支持 CUDA 8.0。

提供 TensorBoard 的官方支持

TensorBoard 是 Tensorflow 中的一个在浏览器内直接可视化机器学习模型的工具。作为一个用于检查和理解训练脚本、张量和图的 web 应用程序套件,用户可利用 TensorBoard 进行第一级和原生可视化支持以及模型调试。PyTorch 中没有这样的工具,之前有一些方法可以让开发者们在 PyTorch 中使用 TensorBoard,但 PyTorch 一直没有提供官方支持。

现在,PyTorch 1.1 开始官方支持 TensorBoard,只要写入一个简单的「from torch.utils.tensorboard import SummaryWriter」命令即可。直方图、嵌入、图像、文本、图等可在训练中实现可视化。不过,PyTorch 对 TensorBoard 的官方支持目前还处于试验阶段。文档浏览地址:https://pytorch.org/docs/stable/tensorboard.html。

升级了即时编译(JIT)编译器

PyTorch 发明者 Soumith Chintala 认为,JIT 编译器促成了深度学习框架的里程碑式性能改进。PyTorch1.1 升级了用于优化计算图的 JIT 编译器。

Chintala 说道:「一直以来,我们都与英伟达紧密合作,基本上将所有优化都添加到 JIT 编译器中……新版 JIT 编译器实际上接近 cuDNN 的速度,这意味着用户的工作效率会提高很多。」

Chintala 称:「JIT 编译器初版在 PyTorch1.0 中即可使用,但其工作速度并没有比 PyTorch 的基本模式快多少。新的 JIT 编译器是研究者和自动驾驶模型构建者非常需要的一种工具。」JIT 编译器还将为 PyTorch 带来更多的 Python 编程语言概念。

现在,JIT 编译器能够在运行时确定如何生成最有效率的代码。Chintala 希望 JIT 编译器可以为自定义 RNN 模型提供更佳的性能。

提供新的 API

PyTorch1.1 具有新的 API,支持布尔张量以及自定义循环神经网络。

不再支持 CUDA 8.0。

CUDA 8.0 与 PyTorch 1.0 搭配使用效果较好,但 PyTorch 1.1 将不再支持 CUDA 8.0。

主要性能提升

  • nn.BatchNorm CPU 推理速度增加 19 倍

  • nn.AdaptiveAvgPool:将常见情况下 size 为 1 的输出加速 30 倍

  • nn.Embedding Bag:CPU 性能提高了 4 倍

  • Tensor.copy_:将更大的张量复制加速 2-3 倍。

  • torch.nonzero:比 CPU 上的 numpy 快 2 倍

  • 改进用于 Pascal 和新 GPU 的缓存分配器;Mask-RCNN 上的内存使用率提升了 10-20%

  • reducation functions:将一些大张量加速 50-80%

  • [JIT] 图融合器:在广播的情况下更好地融合反向图

  • [JIT] 图融合器:用于推理的 batch_norm 融合

  • [JIT] 图融合器:用于推理的 layer_norm 融合 

参考链接:

  • https://github.com/pytorch/pytorch/releases/tag/v1.1.0

  • https://venturebeat.com/2019/05/01/facebook-launches-pytorch-1-1-with-tensorboard-support/

工程TensorBoard深度学习框架PyTorch
2
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

自动驾驶技术技术

从 20 世纪 80 年代首次成功演示以来(Dickmanns & Mysliwetz (1992); Dickmanns & Graefe (1988); Thorpe et al. (1988)),自动驾驶汽车领域已经取得了巨大进展。尽管有了这些进展,但在任意复杂环境中实现完全自动驾驶导航仍被认为还需要数十年的发展。原因有两个:首先,在复杂的动态环境中运行的自动驾驶系统需要人工智能归纳不可预测的情境,从而进行实时推论。第二,信息性决策需要准确的感知,目前大部分已有的计算机视觉系统有一定的错误率,这是自动驾驶导航所无法接受的。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

TensorBoard技术

一个信息中心,用于显示在执行一个或多个 TensorFlow 程序期间保存的摘要信息。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

高斯过程技术

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~