速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:002259
用户头像
李冬梅 加V:busulishang4668

发布了 960 篇内容, 共 556.2 次阅读, 收获喜欢 1119 次。

关注

评论

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

聊聊什么是CommonJs和Es Module及它们的区别

蛙人

大前端 js ES6

力扣(LeetCode)刷题,简单题(第27期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

“新作者 新入驻 新征程”第一季获奖名单

InfoQ写作社区官方

热门活动

2月大事件:度目CM-Mini智能面板机全新发布,飞桨PaddleGAN“复活”李焕英

百度大脑

百度 百度大脑

(28DW-S8-Day20) 以太坊账户

mtfelix

28天写作

植树节,种个二叉树吧?

悟空聊架构

数据结构 算法 二叉树

华云大咖说 | 华云数据与瀚高软件携手共建国产云生态 助力政企用户安全可靠发展

华云数据

物联网常用协议:MQTT、CoAP、LwM2M、HTTP、LoRaWAN和NB-IoT

不脱发的程序猿

物联网 通信协议 28天写作 3月日更 物联网常用协议

关于广东欢太科技可不可信?那是你还不了解

Geek_4a453c

企业 欢太 欢太科技

一步一步教你如何在Centos7中配置Kafka运行时环境

happlyfox

28天写作 3月日更

【LeetCode】验证二叉树的前序序列化Java题解

Albert

算法 LeetCode 28天写作 3月日更

区块链应用解决方案赋能到农产品溯源上究竟能解决什么问题?

源中瑞-龙先生

《未来世界的幸存者》读书笔记

SilentMacUser

极客时间 互联网 技术学习 阅读 阮一峰

硬核!一文学完Flink流计算常用算子(Flink算子大全)

五分钟学大数据

大数据 flink 28天写作 3月日更

你以为在做的是微服务?不!你只是做了个比单体还糟糕的分布式单体!

程序猿DD

微服务

《精通比特币》学习笔记(第八章)

棉花糖

区块链 学习 3月日更

翻译:《实用的Python编程》05_01_Dicts_revisited

codists

Python

一起来学习LiteOS中断模块的源代码

华为云开发者联盟

代码 华为云 LiteOS 中断 中断控制器

3月12日学习笔记

Nydia

微服务简介

insight

微服务 3月日更

这是看脸的时代吗——晕轮效应

Justin

心理学 28天写作 游戏设计

“种”下黑科技,守护每株绿,“植”了!

华为云开发者联盟

华为 AI IoT modelarts 森林

ECMAScript 2016(ES7)新特性简介

程序那些事

JavaScript ecmascript ES6 程序那些事 es7

翻译:《实用的Python编程》05_00_Overview

codists

算法喜刷刷之验证二叉树的前序序列化

Kylin

算法 3月日更 刷题笔记

滚雪球学 Python 之闭包操作,本系列第 8 篇文章

梦想橡皮擦

28天写作 3月日更

真·“拜师学艺”?2021中科院开源之夏,开源大牛1V1&万元奖金只等你来!

京东科技开发者

开源 开源社区

带你了解VXLAN网络中报文的转发机制

华为云开发者联盟

网络 网关 VXLAN 报文 分布式网关

算法攻关 - 验证二叉搜索树 (O(n))_098

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 验证二叉搜索树

Python With 关键字和语句

HoneyMoose

如何成为一名架构师?

xcbeyond

程序人生 方法论 架构师 成长与思考 3月日更

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