社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

首个GPU高级语言,大规模并行如同Python,已突破1万 Star!(附GitHub链接)

江大白 • 11 月前 • 231 次点击  

以下章来源于微信公众号:小白学视觉

作者:小白学视觉

链接:https://mp.weixin.qq.com/s/j9SOhGWzIzrFaGWqaKKr6w

本文仅用于学术分享,如有侵权,请联系台作删文处理

导读
GUP能给深度学习算法带来巨大的加速,其重要性不言而喻。近日研究人员提出了首个能够在GPU上运行的高级语言,其能够像写python一样大规模并行。本文对此项研究做了详细介绍,一起来看看吧。
经过近 10 年的不懈努力,对计算机科学核心的深入研究,人们终于实现了一个梦想:在 GPU 上运行高级语言。

上周末,一种名为 Bend 的编程语言在开源社区引发了热烈的讨论,GitHub 的 Star 量已经超过了 8500。



GitHub:https://github.com/HigherOrderCO/Bend


作为一种大规模并行的高级编程语言,它仍处于研究阶段,但提出的思路已经让人们感到非常惊讶。使用 Bend,你可以为多核 CPU/GPU 编写并行代码,而无需成为具有 10 年经验的 C/CUDA 专家,感觉就像 Python 一样!


是的,Bend 采用了 Python 语法。


与 CUDA、Metal 等低级替代方案不同,Bend 具有 Python、Haskell 等表达性语言的功能,包括快速对象分配、完全闭包支持的高阶函数、无限制的递归,甚至 continuation。Bend 运行在大规模并行硬件上,具有基于核心数量的近线性加速。Bend 由 HVM2 运行时提供支持。

该项目的主要贡献者 Victor Taelin 来自巴西,他在 X 平台上分享了 Bend 的主要特性和开发思路。

首先,Bend 不适用于现代机器学习算法,因为这些算法是高度正则化的(矩阵乘法),具有预先分配的内存,并且通常已经有编写好的 CUDA 内核。

Bend 的巨大优势体现在实际应用中,这是因为「真正的应用程序」通常没有预算来制作专用的 GPU 内核。试问,谁在 CUDA 中制作了网站?而且,即使有人这样做了,也是不可行的,因为:

1. 真正的应用程序需要从许多不同的库导入函数,无法为它们编写 CUDA 内核;
2. 真实的应用程序具有动态函数和闭包;
3. 真实的应用程序会动态且不可预测地分配大量内存。

Bend 完成了一些新的尝试,并且在某些情况下可以相当快,但现在想写大语言模型肯定是不行的。

作者对比了一下旧方法和新的方法,使用相同的算法树中的双调排序,涉及 JSON 分配和操作。Node.js 的速度是 3.5 秒(Apple M3 Max),Bend 的速度是 0.5 秒(NVIDIA RTX 4090)。

是的,目前 Bend 需要整块 GPU 才能在一个核心上击败 Node.js。但另一方面,这还是一个初生的新方法与大公司(Google)优化了 16 年的 JIT 编译器在进行比较。未来还有很多可能性。


如何使用


在 GitHub 上,作者简要介绍了 Bend 的使用流程。

首先,安装 Rust。如果你想使用 C 运行时,请安装 C 编译器(例如 GCC 或 Clang);如果要使用 CUDA 运行时,请安装 CUDA 工具包(CUDA 和 nvcc)版本 12.x。Bend 目前仅支持 Nvidia GPU。

然后,安装 HVM2 和 Bend:


cargo +nightly install hvmcargo +nightly install bend-lang


最后,编写一些 Bend 文件,并使用以下命令之一运行它:


bend run     # uses the Rust interpreter (sequential)bend run-c   # uses the C interpreter (parallel)bend run-cu  # uses the CUDA interpreter (massively parallel)


你还可以使用 gen-c 和 gen-cu 将 Bend 编译为独立的 C/CUDA 文件,以获得最佳性能。但 gen-c、gen-cu 仍处于起步阶段,远没有像 GCC 和 GHC 这样的 SOTA 编译器那么成熟。


Bend 中的并行编程


这里举例说明可以在 Bend 中并行运行的程序。例如,表达式:





    
(((1 + 2) + 3) + 4)


不能并行运行,因为 + 4 取决于 + 3,而 + 3 又取决于 (1+2)。而表达式:


((1 + 2) + (3 + 4))


可以并行运行,因为 (1+2) 和 (3+4) 是独立的。Bend 并行运行的条件就是符合并行逻辑。

再来看一个更完整的代码示例:


# Sorting Network = just rotate trees!def sort (d, s, tree):  switch d:    case 0:      return treecase _:      (x,y) = treelft   = sort (d-1, 0, x)      rgt   = sort (d-1, 1, y)      return rots (d, s, lft, rgt)# Rotates sub-trees (Blue/Green Box)def rots (d, s, tree):  switch d:    case 0:      return treecase _:      (x,y) = treereturn down (d, s, warp (d-1, s, x, y))

(...)


该文件实现了具有不可变树旋转的双调排序器。它不是很多人期望的在 GPU 上快速运行的算法。然而,由于它使用本质上并行的分治方法,因此 Bend 会以多线程方式运行它。一些速度基准:

  •  CPU,Apple M3 Max,1 个线程:12.15 秒

  •  CPU,Apple M3 Max,16 线程:0.96 秒

  •  GPU,NVIDIA RTX 4090,16k 线程:0.21 秒


不执行任何操作即可实现 57 倍的加速。没有线程产生,没有锁、互斥锁的显式管理。我们只是要求 Bend 在 RTX 上运行我们的程序,就这么简单。

Bend 不限于特定范例,例如张量或矩阵。任何的并发系统,从着色器到类 Erlang 的 actor 模型都可以在 Bend 上进行模拟。例如,要实时渲染图像,我们可以简单地在每个帧上分配一个不可变的树:


# given a shader, returns a square imagedef render (depth, shader):  bend d = 0, i = 0:    when d < depth:      color = (fork (d+1, i*2+0), fork (d+1, i*2+1))    else:      width = depth / 2color = shader (i % width, i /width)  return color# given a position, returns a color# for this demo, it just busy loopsdef demo_shader (x, y):  bend i = 0:    when i < 5000:      color = fork (i + 1)    else:      color = 0x000001return color


    
# renders a 256x256 image using demo_shaderdef main:  return render (16, demo_shader)


它确实会起作用,即使涉及的算法在 Bend 上也能很好地并行。长距离通信通过全局 beta 缩减(根据交互演算)执行,并通过 HVM2 的原子链接器正确有效地同步。

最后,作者表示 Bend 现在仅仅是第一个版本,还没有在合适的编译器上投入太多精力。大家可以预期未来每个版本的原始性能都会大幅提高。而现在,我们已经可以使用解释器,从 Python 高级语言的角度一睹大规模并行编程的样子了。


参考内容:
https://news.ycombinator.com/item?id=40390287
https://x.com/VictorTaelin?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
https://x.com/DrJimFan/status/1791514371086250291

AI视觉编推一体机已上市,支持自上传算法模型,并通过逻辑组件的方式,根据业务场景需求,快速优化算法功能。
适用于现场项目需求快速POC,算法功能调优验证。目前已支持多款边缘设备,GPU服务器版本。
感兴趣的小伙伴,可以私信大白wxqzy68。




  • 编推一体机:10分钟快速完成算法功能开发及部署


想快速开发算法功能,快速应用部署到不同算力设备,可以尝试大白团队开发的算法功能开发平台,项目算法编排部署,可联系大白wxqzy68。
时长统计算法功能编排

推荐阅读

    江大白 | 这些年从0转行AI行业的一些感悟

    AI项目应用 | 万字长文教你一步步实现离岗识别


    AI行业大家有想问的,欢迎来《AI未来星球》,一起成长
    扫描下方二维码即可加入~


    你可以获得什么? 

    1、AI行业创业/工作/生活中遇到的各类问题,都可获高质量解答, 有效期一年,无限次提问,有问必答。

    2、购买过的,数万元的各类数据集的分享;

    3、定期邀请AI行业各类嘉宾分享,创业/商业等方面的经验!

    4、AI行业研发、产品、商业落地方面专业分享(大白主业,也在负责公司AI业务板块)

    帮助你解决遇到的实际问题,升职加薪!

    大家一起加油! 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/170401
 
231 次点击