Julia开源新框架SimpleChain:小型神经网络速度比PyTorch快5倍!

OpenCV学堂 2022-05-13 23:26



点击上方↑↑↑OpenCV学堂”关注我

来源:公众号 新智元 授权


【导读】世上没有免费的午餐,享受了通用框架的便利,在特定任务上就要牺牲性能。最近Julia开源了一个新框架SimpleChain,在小型神经网络的运行速度上比PyTorch至少快5倍!


Julia从一出生开始,就瞄准了科学计算领域,并且一直在与Python暗中较量。

 

在神经网络的框架上,Python有PyTorch和TensorFlow,几乎是深度学习开发的首选框架,并且获得了Meta和Google在技术和资金上的支持,蓬勃发展。

 

虽然Julia也有Flux.jl框架,但Julia社区一直依赖于语言本身的高性能产生的生产力,所以Flux.jl的代码量相比Python框架来说,可以称得上是特别「苗条」了,例如PyTorch和TensorFlow包括了整个独立的语言和编译器(torchscript、XLA等),而Flux.jl仅仅由Julia语言编写。

 

 

当然,世界上没有免费的午餐,如果以不同的视角来看,想要在机器学习领域开发出一个简单、通用且高性能的框架几乎是不可能的,只能不断权衡。

 

比如对于一个特定的问题,如果需要稀疏的小模型,想要获得最高性能的方法就是重写一遍,而非采用通用框架。

 

最近Julia社区又开源了一个新框架SimpleChains.jl,在小模型场景下相比PyTorch最少能提速5倍。

 

代码链接:https://github.com/PumasAI/SimpleChains.jl

 

开发人员表示,这个框架不会对所有人都有用,但对那些需要它的人来说,它是非常有用的。

 

有网友表示十分赞同:「不同的任务用不同的工具」,因为TF和pyTorch消耗了大量的内存,并且没有原地操作,所以在小模型上很浪费时间。他数年前在Netflex时就设计开发了一个D语言的框架vectorflow,目前在github已获1200个stars

 

 

机器学习模型的假设


SimpleChains.jl是由Pumas-AI和Julia Computing与Roche和马里兰大学巴尔的摩分校合作开发的一个库,它的主要目的就是为小型神经网络提供尽可能高的性能。

 

SimpleChains.jl最开始用于在医疗数据分析中用于科学机器学习(SciML)的解决方案:小型神经网络(和其他近似器,如傅里叶数列或切比雪夫多项式展开)可以与已知的半生理学模型(semi-physiologic models)相结合,发现以前未知的机制和预后因素。

 

从黑洞动力学到地震安全建筑的开发,SciML方法的有效性已经在许多学科中得到证实,能够灵活地发现/指导(生物)物理方程。

 

应用场景变化太大,在这种情况下,使用一些专用(specialization)的神经网络才有可能提升模型的运行性能。

 

 

具体来说,在机器学习模型的研究中,通常依赖于一个假设:神经网络足够大,其中矩阵乘法(如卷积)的O(n^3)时间成本占了运行时间的绝大部分,这基本上也是机器学习库的大部分机制背后的4大指导原则:

 

1. 矩阵乘法的复杂度是立方的,而内存分配的规模是线性的,所以用非分配(non-allocating)内存的方式来操作向量的优先级并不高;

 

2. 目前AI加速的工作主要集中于GPU内核加速,让指令运行尽可能快,由于这些大型矩阵-矩阵操作在GPU上是最快的,并且也是大模型的主要瓶颈,所以性能基准基本上只是衡量这些特定内核的速度;

 

3. 当做自动微分反向传播时,将数值复制到内存的操作几乎感觉不到,内存分配被较大的内核调用所隐藏;

 

4. 用户可以随意写一个tape来生成反向传播,虽然增加了在前向过程中建立字典的成本,但是也会被更大的内核调用所掩盖。

 

但,这些假设在真实的案例中是否真的能全部成立?

 

如果不成立的话,能不能把重点放在这些方面的改进,从而提升更高的运算性能?

 

小型神经网络的瓶颈在哪?


对于初学者来说,可以先测试一下假设1和2,通过一段Julia代码来测试内存申请时间、GPU运算时间等。

 

 

可以看到当我们进行较大的矩阵乘法操作时,比如100x100*100x100,基本可以忽略由于内存分配而产生的任何开销。

 

 

但同时也可以看到,在lower end有可能出现一些相当显著的性能提升,这些收益是通过使用纯Julia LoopVectorization.jl实现的,因为标准的BLAS工具在这个区域往往有额外的线程开销(同样,在这个区域没有进行优化)。

 

如果你一直在利用GPU带来的好处而不去研究细节,那么这个事实可能会让你大吃一惊!GPU被设计成具有许多内核的慢速芯片,因此它们只对非常并行的操作有效,例如大型矩阵乘法。正是从这一点出发,假设2可以被认为是大型网络操作。

 

但同样,在小网络的情况下,由于缺乏并行计算,使用GPU内核的性能可能还不如设计良好的CPU内核。

 

矩阵操作只有在能够使用批处理(A*B中的B矩阵的每一列都是一个单独的批处理)时才会发生。

 

在大部分科学机器学习的情境下,如ODE邻接中的向量Jacobian乘积的计算,这种操作是矩阵-向量乘法。这些操作的时间复杂度只有O(n^2),在这种情况下内存开销会被放大。

 

 

神经网络的基本操作是Sigma,所以还有一个O(n)时间复杂度的操作,这种情况下内存开销显得更严重。

 

 

对于假设3和4来说,需要更加关注反向传播的实现。不同机器学习库的自动微分方法也存在着区别。有些库是立刻反向传播梯度值,也有些需要把梯度保存起来,这样就又需要额外的内存开销操作了。

 

 

在特定的应用里面,如果知道梯度立刻传播,就可以立即计算梯度,相比通用实现来说,只需要一个缓存向量解千愁,原地赋值,这样的话所有自动微分的额外开销都没有了。

 

 

基于这些想法,研究人员开源了SimpleChains.jl,可以很好地解决这类优化问题,可以在CPU上快速拟合和优化小模型,早期的神经网络原型模型设计大多都希望:

 

1. 达到更好的性能,最好能达到CPU的峰值FLOPs;

2. 专注于小尺寸的模型,在早期开发阶段放弃一些针对大型模型的内核优化操作(如缓存平铺);

3. 有一个API,其中的向量的参数和梯度都是first class,以便更容易地与各种优化器或求解器(如BFGS)协同工作;

4. 使用「纯Julia」编写,更方便开发和优化;在大量使用LoopVectorization.jl的同时,SimpleChains.jl并不依赖任何BLAS或NN库。

 

开发人员的长期目标是将这种循环编译器的优化方法扩展到自动产生pullbacks。但这种以编译器为中心的方法已经被用于实现的便利性:虽然我们仍然需要手写梯度,但我们不需要对它们进行手工优化。

 

SimpleChains.jl的实际性能怎么样?

 

研究人员用一个2×2的矩阵做了一个实验,在带有AVX512指令集的Intel i9-10980XE跑了一下,1万个epoch花了0.41秒,相比之下pyTorch花了15秒,也就是说在这种微型神经网络上,提速大约35倍。

 

 

把实验换到AMD EPYC 7513 带有AVX2指令的机器上,Julia的实现花费时间为0.72秒,而PyTorch的实现则需要70秒,差距拉升到了100倍。

 

研究人员又在AMD Ryzen 9 5950X实验了一份Jax代码,Julia耗时为1.3秒,Jax则需要14秒,提升约10倍。

 

换到Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz 平台上,Jax耗时为9秒,Julia需要0.4秒,大约22倍提升。

 

再换到差一点的处理器,6核CPU上,Jax需要19秒,而Julia需要9秒,速度提升就只有2倍了。

 

在稍微大一点的、实际可用的神经网络上,训练速度还会有这么大的差距吗?

 

研究人员用LeNet5来测试MNIST,这个例子只是一个非常保守的速度估计,因为在更传统的机器学习用例中,批处理可以使用矩阵乘法,不过即使在这种情况下,由于semi-small的网络规模,也能看到大量的性能优势。

 

 

在batch size为2048的情况下训练10个epoch,用PyTorch在A100上训练两次耗时为17.66和17.62,准确率分别为94.91%和96.92%;在V100上训练时间为16.29和15.94,准确率分别为95.6%和97.5%

 

不过这个问题对于GPU来说还是杀鸡用牛刀了,在2048的batch size上运算速度还是很快,时间主要耗费在CPU转移到GPU上了。

 

在AMD EPYC 7513和Intel i9 10980XE又进行了两次实验,结果比GPU更快,准确率也更高。

 

 

换到SimpleChains.jl,在AMD平台上耗时为3秒,准确率98.3%;在Intel平台上,耗时仅为1秒,准确率为98.2%;即使在笔记本的Intel平台上,耗时也仅为5.3秒,准确率97%

 

目前大型机器学习框架在专注于为其99.9%的用户提供一流的性能方面做得非常好,但在另外0.1%的小模型用户手里,框架却不好用。

 

这就是可组合性和灵活性的优势:一种允许你轻松构建机器学习框架的语言,也是一种允许你构建替代框架的语言,这些框架针对替代人群进行优化。


参考资料:

https://julialang.org/blog/2022/04/simple-chains/



OpenCV学堂 专注计算机视觉开发技术分享,技术框架使用,包括OpenCV,Tensorflow,Pytorch教程与案例,相关算法详解,最新CV方向论文,硬核代码干货与代码案例详解!作者在CV工程化方面深度耕耘15年,感谢您的关注!
评论
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 153浏览
  • 故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机的气缸编号 故障诊断接车后试车,发动机怠速运转平稳,但只要换挡起步,稍微踩下一点加速踏板,就能感觉到车身明显抖动。用故障检测仪检测,发动机控制模块(ECM)无故障代码存储,且无失火数据流。用虹科Pico汽车示波器测量气缸1点火信号(COP点火信号)和曲轴位置传感器信
    虹科Pico汽车示波器 2025-01-23 10:46 95浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 155浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 134浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 733浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 219浏览
  • 飞凌嵌入式基于瑞芯微RK3562系列处理器打造的FET3562J-C全国产核心板,是一款专为工业自动化及消费类电子设备设计的产品,凭借其强大的功能和灵活性,自上市以来得到了各行业客户的广泛关注。本文将详细介绍如何启动并测试RK3562J处理器的MCU,通过实际操作步骤,帮助各位工程师朋友更好地了解这款芯片。1、RK3562J处理器概述RK3562J处理器采用了4*Cortex-A53@1.8GHz+Cortex-M0@200MHz架构。其中,4个Cortex-A53核心作为主要核心,负责处理复杂
    飞凌嵌入式 2025-01-24 11:21 93浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 200浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 169浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 206浏览
  • 书接上回:【2022年终总结】阳光总在风雨后,启航2023-面包板社区  https://mbb.eet-china.com/blog/468701-438244.html 总结2019,松山湖有个欧洲小镇-面包板社区  https://mbb.eet-china.com/blog/468701-413397.html        2025年该是总结下2024年的喜怒哀乐,有个好的开始,才能更好的面对2025年即将
    liweicheng 2025-01-24 23:18 27浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 765浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 386浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 218浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦