写点什么

Facebook 开源框架如何简化 PyTorch 实验

  • 2020-11-07
  • 本文字数:2889 字

    阅读完需:约 9 分钟

Facebook开源框架如何简化 PyTorch 实验

简化从实验到生产的周期是现代机器学习应用中最难实现的事情之一。在市场上的深度学习框架中,Facebook 孵化的 PyTorch 因其快速建模和运行实验的灵活性,从而成为数据科学界的宠儿。然而,深度学习应用实验的许多挑战超出了特定框架的能力。数据科学家评估不同模型或超参数配置的能力,通常会受到运行这些实验所需的昂贵计算资源和时间的阻碍。几个月前,Facebook 开源了两个新工具,旨在简化 PyTorch 应用中的自适应实验:


  • Ax:是一个可访问的通用平台,用于理解、管理、部署和自动化自适应实验。

  • BoTorch:基于 PyTorch,是一个灵活的、现代的库,用于贝叶斯优化,这是一种数据高效全局优化的概率方法。


这两个工具的目标是降低 PyTorch 开发人员的进入壁垒,以便能够进行快速实验,从而为特定问题找到最佳模型。Ax 和 BoTorch 都是基于概率模型,简化了机器学习问题中对给定环境的探索。然而,这两个框架针对的是实验问题空间的不同维度。

BoTorch

BoTorch 是构建在 PyTorch 之上的贝叶斯优化(Bayesian Optimization)库。贝叶斯优化的目标是在资源有限的情况下找到问题的最优解。贝叶斯优化通常应用于机器学习算法的超参数优化、A/B 测试等黑盒优化问题,以及许多科学和工程问题。


贝叶斯优化问题试图在无需获得 的函数形式的情况下,使一些昂贵的、难以评估的黑盒函数 最大化。在这种情况下,优化技术在一系列测试点上对 进行评估,以期在少量评估后确定一个接近最优的值。为了优化 实现这一目标,贝叶斯优化方法需要一种外推信念的方法,即在我们尚未评估的点上, 看起来是什么样子的。在贝叶斯优化中,这被称为代理模型。重要的是,代理模型应该能够量化其预测的不确定性,其形式是函数值 在点 上的后验概率。



BoTorch 是 Facebook 在贝叶斯优化方面反复研究的结果,并将这些技术整合到 PyTorch 编程模型中。从概念上讲,与其他优化方法相比,BoTorch 带来了一系列独特的优势。


PyTorch 功能:BoTorch 构建在 PyTorch 框架之上,利用了原生功能,诸如自动微分、支持使用设备无关代码的高并行化现代硬件(如 GPU),以及便于交互式开发的动态计算图。


最先进的建模:BoTorch 支持 GPyTorch 中的最先进的概率建模,包括支持多任务高斯过程(Gaussian processes,GP)。可伸缩 GP、深度内核学习、深度 GP 和近似推理。


提高开发效率:BoTorch 为组合贝叶斯优化原语提供了一个简单的编程模型。具体来说,BoTorch 依赖于基于蒙特卡洛(Monte Carlo)的采集函数,这使得实现新想法变得很简单,而不必对底层模型施加限制性假设。


并行性:BoTorch 编程模型通过批处理计算对并发性和并行性进行了优化,提高了其在大型基础架构中的可扩展性。


BoTorch 设计允许 PyTorch 开发人员更改、交换或重新安排深度神经网络架构的不同组件,而无需重新构建整个图来重新训练整个模型。显然,构建低级贝叶斯优化原语是一项需要深厚专业知识水平的任务。为应对这一挑战,Facebook 决定将 BoTorch 与另一个项目进行整合,为深度学习实验提供一个简单的编程模型:Ax。

Ax

从概念上讲,Ax 是一个优化实验的平台,例如 A/B 测试、模拟或机器学习模型。Ax 提供了一个高级的、易于使用的 API 与 BoTorch 接口,允许开发人员快速地建模并运行实验。Ax 和 BoTorch 之间的关系如下图所示。虽然可以使用 BoTorch 原语实现新的优化算法,但 Ax 为调度配置、查询数据和评估结果提供了一个简单的 API。



从优化的角度来看,Ax 可以使用多臂老虎机(multi-armed bandit)优化处理离散配置(如 A/B 测试的变体),也可以使用贝叶斯优化处理连续(如整数或浮点数)值的配置。Ax 提供了一个非常可扩展的框架,允许开发人员为 PyTorch 模型定制各种实验。从编程模型的角度来看,Ax 提供了三个主要 API:


Loop API:此 API 用于同步优化循环,可以立即对试验进行评估。有了此 API,优化可以在单个调用中执行,并且在优化完成后就可以进行实验内省。


Service API:此 API 用作参数调整应用程序的轻量级服务。在这些应用程序中,试验可以并行评估,并且数据可以异步获得。


Developer API:此 API 供数据科学家、机器学习工程师和研究人员临时使用。Developer API 允许进行大量的定制和内省,并且建议计划使用 Ax 优化 A/B 测试的人员使用。


从编程模型的角度来看,LoopAPI 提供了最大程度的简单性,而 Developer API 支持最高级别的定制。使用 Loop API 实现无约束的合成 Branin 函数就像下面的代码一样简单:


from ax import optimizefrom ax.utils.measurement.synthetic_functions import braninbest_parameters, values, experiment, model = optimize(    parameters=[        {            "name": "x1",            "type": "range",            "bounds": [-5.0, 10.0],        },        {              "name": "x2",            "type": "range",            "bounds": [0.0, 10.0],        },    ],    evaluation_function=lambda p: branin(p["x1"], p["x2"]),    minimize=True,)
复制代码


Developer API 需要对 Ax 架构组件进行更深层次的操作:


from ax import *branin_search_space = SearchSpace(    parameters=[        RangeParameter(            name="x1", parameter_type=ParameterType.FLOAT, lower=-5, upper=10        ),        RangeParameter(            name="x2", parameter_type=ParameterType.FLOAT, lower=0, upper=15        ),    ])exp = SimpleExperiment(    name="test_branin",    search_space=branin_search_space,    evaluation_function=lambda p: branin(p["x1"], p["x2"]),    objective_name="branin",    minimize=True,)sobol = Models.SOBOL(exp.search_space)for i in range(5):    exp.new_trial(generator_run=sobol.gen(1))best_arm = Nonefor i in range(15):    gpei = Models.GPEI(experiment=exp, data=exp.eval())    generator_run = gpei.gen(1)    best_arm, _ = generator_run.best_arm_predictions    exp.new_trial(generator_run=generator_run)best_parameters = best_arm.parameters
复制代码


与其他实验框架相比,Ax 提供了一些明显的优势。首先,对于初学者来说,编程模型可以与 BoTorch 之外的不同优化框架一起使用。此外,Ax 实现了优化例程选择的自动化,这减轻了数据科学家在微调模型方面的工作量。最后,该框架还得到了可视化工具和基准测试套件的补充,这些工具和套件简化了优化技术的评估。


在不同的 Facebook 团队中,Ax 和 BoTorch 得到了广泛的使用。这些框架的开源可用性是对 PyTorch 生态系统的巨大补充。PyTorch 生态系统已被认为是数据科学实验中最为灵活的深度学习框架之一。随着数据科学界开始使用 Ax 和 BoTorch 进行实验,新的想法可能会被整合到这两个栈中,以缩短 PyTorch 应用程序中的实验周期。


作者介绍


Jesus Rodriguez,IntoTheBlock 首席执行官,Invector 实验室首席科学家、哥伦比亚大学客座讲师、天使投资人、作家、演讲家。


原文链接


https://medium.com/dataseries/facebooks-open-source-frameworks-to-streamline-pytorch-experimentation-4a33f0947d99


2020-11-07 08:002729
用户头像
李冬梅 加V:busulishang4668

发布了 1208 篇内容, 共 833.1 次阅读, 收获喜欢 1313 次。

关注

评论

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

清览题库--C语言程序设计第五版编程题解析(2)

吉师职业混子

9月月更

算法基础(四)| 前缀和算法及模板详解

timerring

算法 9月月更

跟着卷卷龙一起学Camera--内存池浅析01

卷卷龙

ISP 9月月更

【云原生 | 从零开始学Kubernetes】七、Kubernetes的命名空间

泡泡

Docker 云计算 容器 云原生 9月月更

脑机接口照进现实:5位脑科学家带来的最新启示

脑极体

2022-09-24:以下go语言代码输出什么?A:1;B:3;C:13;D:7。 package main import ( “fmt“ “io/ioutil“ “net/

福大大架构师每日一题

golang 福大大 选择题

openEuler资源利用率提升之道 03:rubik混部引擎简介

openEuler

Linux 开源 cpu 操作系统 openEuler

面向深度神经网络的特定领域架构

俞凡

深度学习 架构 TPU

【jvm】通过JDBC为例谈谈双亲委派模型的破坏

石臻臻的杂货铺

JVM 9月月更

大数据调度平台Airflow(八):Airflow分布式集群搭建及测试

Lansonli

airflow 9月月更

最近几周react面试遇到的题总结

beifeng1996

前端 React

每日算法刷题Day1-隐式转换与精度丢失

timerring

算法题 9月月更

新书上市|听说你翻开数学书就眼睛疼?

图灵教育

数学 科普 教育

【编程基础】正则表达式基本使用及在Python中使用正则表达式匹配内容

迷彩

Python 正则表达式 9月月更

2022react高频面试题有哪些

beifeng1996

前端 React

关爱2700多万听障者,手语服务助力无声交流

HarmonyOS SDK

手语

工赋开发者社区 |【数智化】数字化工厂规划与建设方案

工赋开发者社区

架构实战营-模块一作业

Geek_92ba6f

如何在笔记本上安装openEuler 22.03 LTS

openEuler

开源 操作系统 openEuler 安装部署

基于微服务的应用性能监控方案

穿过生命散发芬芳

9月月更 微服务监控

Javaweb核心之注解开发Servlet

楠羽

Servlet 笔记 9月月更

新书上市|听说你翻开数学书就眼睛疼?

图灵社区

数学 科普 教育

在家学习如何保持高度自律

大数据搬运工

学习方法

SQL是什么?它能做什么?

乌龟哥哥

9月月更

开发者有话说|一名普通大专学历开发者的成长

彭发红

闲着刷题

吉师职业混子

9月月更

Java服务异常排查定位大图

慕枫技术笔记

后端 9月月更

Identity and Access Management

冯亮

DevOps security AWS Cloud

NestOS应用案例:容器化部署OpenStack

openEuler

架构 openEuler 开源操作系统 OpenStack

深入了解之链接器与加载器

邱学喆

加载器 链接器 ELF文件结构

leetcode 669. Trim a Binary Search Tree 修剪二叉搜索树 (简单)

okokabcd

LeetCode 算法与数据结构

Facebook开源框架如何简化 PyTorch 实验_开源_Jesus Rodriguez_InfoQ精选文章