0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow有了替代品,竟然还是谷歌自己做出来的?

DPVg_AI_era 来源:lq 2018-12-16 10:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

TensorFlow有了替代品,竟然还是谷歌自己做出来的?这其实是TensorFlow的一个简化库,名为JAX,可以支持部分TensorFlow的功能,但是比TensorFlow更加简洁易用。

什么?TensorFlow 有了替代品?什么?竟然还是谷歌自己做出来的?先别慌,从各种意义上来说,这个所谓的 “替代品” 其实是 TensorFlow 的一个简化库,名为JAX,结合 Autograd 和 XLA,可以支持部分 TensorFlow 的功能,但是比 TensorFlow 更加简洁易用。

虽然还不至于替代 TensorFlow,但已经有 Reddit 网友对 JAX 寄予厚望,并表示“早就期待能有一个可以直接调用 Numpy API 接口的库了!”,“希望它可以取代 TensorFlow!”。

JAX 结合了 Autograd 和 XLA,是专为高性能机器学习研究打造的产品。

有了新版本的Autograd,JAX 能够自动对 Python 和 NumPy 的自带函数求导,支持循环、分支、递归、闭包函数求导,而且可以求三阶导数。它支持自动模式反向求导(也就是反向传播)和正向求导,且二者可以任意组合成任何顺序。

JAX 的创新之处在于,它基于XLA在 GPU 和 TPU 上编译和运行 NumPy 程序。默认情况下,编译是在底层进行的,库调用能够及时编译和执行。但是 JAX 还允许使用单一函数 API jit将自己的 Python 函数及时编译成经过 XLA 优化的内核。编译和自动求导可以任意组合,因此可以在不脱离 Python 环境的情况下实现复杂算法并获得最优性能。

JAX 最初由 Matt Johnson、Roy Frostig、Dougal Maclaurin 和 Chris Leary 发起,他们均任职于谷歌大脑团队。在 GitHub 的说明文档中,作者明确表示:JAX 目前还只是一个研究项目,不是谷歌的官方产品,因此可能会有一些 bug。从作者的 GitHub 简介来看,这应该是谷歌大脑正在尝试的新项目,在同一个 GitHub 目录下的开源项目还包括 8 月份在业内引起热议的强化学习框架 Dopamine。

以下是 JAX 的简单使用示例。

GitHub 项目传送门:https://github.com/google/JAX

有关具体的安装和简单的入门指导大家可以在 GitHub 中自行查看,在此不做过多赘述。

JAX 库的实现原理

机器学习中的编程是关于函数的表达和转换。转换包括自动微分、加速器编译和自动批处理。像 Python 这样的高级语言非常适合表达函数,但是通常使用者只能应用它们。我们无法访问它们的内部结构,因此无法执行转换。

JAX 可以用于专门化高级Python+NumPy函数,并将其转换为可转换的表示形式,然后再提升为 Python 函数。

JAX 通过跟踪专门处理 Python 函数。跟踪一个函数意味着:监视应用于其输入,以产生其输出的所有基本操作,并在有向无环图 (DAG) 中记录这些操作及其之间的数据流。为了执行跟踪,JAX 包装了基本的操作,就像基本的数字内核一样,这样一来,当调用它们时,它们就会将自己添加到执行的操作列表以及输入和输出中。为了跟踪这些原语之间的数据流,跟踪的值被包装在 Tracer 类的实例中。

当 Python 函数被提供给 grad 或 jit 时,它被包装起来以便跟踪并返回。当调用包装的函数时,我们将提供的具体参数抽象到 AbstractValue 类的实例中,将它们框起来用于跟踪跟踪器类的实例,并对它们调用函数。

抽象参数表示一组可能的值,而不是特定的值:例如,jit 将 ndarray 参数抽象为抽象值,这些值表示具有相同形状和数据类型的所有 ndarray。相反,grad 抽象 ndarray 参数来表示底层值的无穷小邻域。通过在这些抽象值上跟踪 Python 函数,我们确保它足够专门化,以便转换是可处理的,并且它仍然足够通用,以便转换后的结果是有用的,并且可能是可重用的。然后将这些转换后的函数提升回 Python 可调用函数,这样就可以根据需要跟踪并再次转换它们。

JAX 跟踪的基本函数大多与 XLA HLO 1:1 对应,并在 lax.py 中定义。这种 1:1 的对应关系使得到 XLA 的大多数转换基本上都很简单,并且确保我们只有一小组原语来覆盖其他转换,比如自动微分。 jax.numpy 层是用纯 Python 编写的,它只是用 LAX 函数 (以及我们已经编写的其他 numpy 函数) 表示 numpy 函数。这使得 jax.numpy 易于延展。

当你使用 jax.numpy 时,底层 LAX 原语是在后台进行 jit 编译的,允许你在加速器上执行每个原语操作的同时编写不受限制的 Python+ numpy 代码。

但是 JAX 可以做更多的事情:你可以在越来越大的函数上使用jit来进行端到端编译和优化,而不仅仅是编译和调度到一组固定的单个原语。例如,可以编译整个网络,或者编译整个梯度计算和优化器更新步骤,而不仅仅是编译和调度卷积运算。

折衷之处是,jit 函数必须满足一些额外的专门化需求:因为我们希望编译专门针对形状和数据类型的跟踪,但不是专门针对具体值的跟踪,所以 jit 装饰器下的 Python 代码必须适用于抽象值。如果我们尝试在一个抽象的 x 上求 x >0 的值,结果是一个抽象的值,表示集合 {True, False},所以 Python 分支就像 if x > 0 会引起报错。

有关使用 jit 的更多要求,请参见:https://github.com/google/jax#whats-supported

好消息是,jit 是可选的:JAX 库在后台对单个操作和函数使用 jit,允许编写不受限制的 Python+Numpy,同时仍然使用硬件加速器。但是,当你希望最大化性能时,通常可以在自己的代码中使用 jit 编译和端到端优化更大的函数。

后续计划

目前项目小组还将对以下几项做更多尝试和更新:

完善说明文档

支持 Cloud TPU

支持多 GPU 和多 TPU

支持完整的 NumPy 功能和部分 SciPy 功能

全面支持 vmap

加速

降低 XLA 函数调度开销

线性代数例程(CPU 上的 MKL 和 GPU 上的 MAGMA)

高效自动微分原语cond和while

有关 JAX 库的介绍大致如此。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    6259

    浏览量

    111972
  • 机器学习
    +关注

    关注

    67

    文章

    8564

    浏览量

    137221
  • tensorflow
    +关注

    关注

    13

    文章

    336

    浏览量

    62371

原文标题:要替代 TensorFlow?谷歌开源机器学习库 JAX

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    替代到必需:氮化镓正在重写电源系统的“游戏规则”

    的电源系统。它不再只是“更好的替代品”,而正在成为下一代电源设计的“必需”。一、氮化镓VS硅传统电源芯片的核心材料是硅,它已经服务电子行业几十年。但硅一个天
    的头像 发表于 04-20 14:36 833次阅读
    从<b class='flag-5'>替代</b>到必需:氮化镓正在重写电源系统的“游戏规则”

    TA6585替代品6586直流双向电机驱动芯片详解

    在电机驱动领域,芯片的性能、稳定性与适配性决定着设备的运行效果与使用寿命。锦锋科技6586作为TA6585的替代品,是一款高性能直流双向电机驱动芯片,凭借其小巧的封装、全面的保护功能及广泛的适配场景
    的头像 发表于 04-02 17:51 283次阅读
    TA6585<b class='flag-5'>替代品</b>6586直流双向电机驱动芯片详解

    锦锋科技|TMI8260SP的替代品7889直流双向电机驱动芯片详解

    ,7889直流双向电机驱动芯片凭借更优异的综合表现,成为TMI8260SP的理想替代产品。锦锋科技推出的7889芯片专注于15V直流双向6A电机驱动,兼具高可靠性、低功耗、易集成等优势,广泛应用于玩具、智能门锁、自动阀门等多类应用场景,为设备厂商
    的头像 发表于 03-27 17:16 237次阅读
    锦锋科技|TMI8260SP的<b class='flag-5'>替代品</b>7889直流双向电机驱动芯片详解

    三防漆稀释剂替代品对比:优缺点+环保选择 |铬锐特实业

    铬锐特实业|东莞厂家|三防漆稀释剂能用什么替代?本文对比原装稀释剂、环保无苯型、醋酸丁酯、PMA等常见替代品的优缺点、成本与性能影响,附行业数据和选择建议,助您兼顾品质与成本。
    的头像 发表于 02-26 00:12 383次阅读
    三防漆稀释剂<b class='flag-5'>替代品</b>对比:优缺点+环保选择 |铬锐特实业

    谷歌评论卡,碰一碰即可完成谷歌评论 #谷歌评论卡 #NFC标签 #nfc卡

    谷歌
    深圳市融智兴科技有限公司
    发布于 :2026年01月15日 17:02:00

    Neway电机方案的替代兼容性体现在哪些方面

    ,某型号DC/DC转换器输入电压为9-36V,输出电压为12V,与TI的TPS5430DDAR参数相同。输出电流能力:Neway模块的输出电流能力与替代品牌产品相当,确保在相同负载条件下稳定运行。例如
    发表于 01-15 09:22

    基于FPGA制作红外热成像传感器,有没有大佬可以给我提提意见和思路呀

    该从何下手,或者有知道哪位大佬做出来不,麻烦推荐一下,不需要设计特别好,设计出的红外热成像传感器能够实现基本操作就可以,如果能够出怎么开发资料会非常感谢的!!! 走过路过,不要错过我呀,孩子头发都要秃,真不知道该怎么弄,我把所有积分都奉上了TAT
    发表于 10-19 17:52

    固态继任:倾佳电子SiC MOSFET为何是现代电力系统中机械继电器的理想替代品的分析报告

    固态继任:倾佳电子SiC MOSFET为何是现代电力系统中机械继电器的理想替代品的分析报告 倾佳电子(Changer Tech)是一家专注于功率半导体和新能源汽车连接器的分销商。主要服务于中国工业
    的头像 发表于 10-19 13:31 773次阅读
    固态继任:倾佳电子SiC MOSFET为何是现代电力系统中机械继电器的理想<b class='flag-5'>替代品</b>的分析报告

    为什么薄硅片是一种高纯度硅的替代品?# 薄硅片# 高纯度# 硅

    半导体
    华林科纳半导体设备制造
    发布于 :2025年09月24日 14:04:46

    【上海晶珩睿莓1开发板试用体验】TensorFlow-Lite物体归类(classify)

    Debian11,系统自带GLIBC库为2.31,所以要部署TensorFlow-Lite代码运行,必须使用GLIBC库为2.34的系统编译出来的OpenCV库文件!若使用睿莓1开发板本身编译OpenCV
    发表于 09-12 22:43

    CPU里真的黄金:看完秒懂

    在大家的印象中,黄金是珠宝、投资和工业原料,但很少有人知道,我们每天使用的电脑CPU里竟然也隐藏着这种贵金属。那为什么芯片会用到黄金,一颗CPU中能有多少纯金呢?不依靠专业设备能提取出来吗?
    的头像 发表于 08-30 15:41 6474次阅读

    我造一台‘迷你 Switch’,还能自己写游戏!

    问题来了——能不能用极低的成本,整出一台性能强劲、画质清晰、手感流畅的掌上游戏机?我可以很负责任地告诉你:能,而且我做出来了!今天的主角就是——启明云端ESP32-
    的头像 发表于 08-12 18:05 828次阅读
    我造<b class='flag-5'>了</b>一台‘迷你 Switch’,还能<b class='flag-5'>自己</b>写游戏!

    SL3065 40V高效同步降压DC/DC控制器 替代RT7272B

    ,SL3065提供更高的转换效率、更宽的输入电压范围以及更为丰富的保护功能。因此,对于需要高效、可靠电源管理解决方案的应用场景,SL3065无疑是一个理想的替代品
    发表于 07-11 16:59

    所以你做出来了吗

    所以你做出来了吗,求
    发表于 06-16 01:43

    黑客马拉松|秀肌肉、拿融资、结交技术大佬!来这里,挑战用52小时完成AI硬件创业项目

    一说一说真心话作为一个AI硬件开发者,我们每天从醒来开始,就在不断地产生idea,但这些idea究竟值不值得被做出来做出来后是否有人愿意掏腰包使用?这款产品的客户是谁、宣传途径是什么、价值在哪
    的头像 发表于 06-12 18:17 1122次阅读
    黑客马拉松|秀肌肉、拿融资、结交技术大佬!来这里,挑战用52小时完成AI硬件创业项目