成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

首個(gè)GPU高級(jí)語(yǔ)言,大規(guī)模并行就像寫(xiě)Python,已獲8500 Star

人工智能 新聞
上周末,一種名為 Bend 的編程語(yǔ)言在開(kāi)源社區(qū)引發(fā)了熱烈的討論,GitHub 的 Star 量已經(jīng)超過(guò)了 8500。

經(jīng)過(guò)近 10 年的不懈努力,對(duì)計(jì)算機(jī)科學(xué)核心的深入研究,人們終于實(shí)現(xiàn)了一個(gè)夢(mèng)想:在 GPU 上運(yùn)行高級(jí)語(yǔ)言。

上周末,一種名為 Bend 的編程語(yǔ)言在開(kāi)源社區(qū)引發(fā)了熱烈的討論,GitHub 的 Star 量已經(jīng)超過(guò)了 8500。

圖片

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

作為一種大規(guī)模并行的高級(jí)編程語(yǔ)言,它仍處于研究階段,但提出的思路已經(jīng)讓人們感到非常驚訝。使用 Bend,你可以為多核 CPU/GPU 編寫(xiě)并行代碼,而無(wú)需成為具有 10 年經(jīng)驗(yàn)的 C/CUDA 專家,感覺(jué)就像 Python 一樣!

圖片

是的,Bend 采用了 Python 語(yǔ)法。

與 CUDA、Metal 等低級(jí)替代方案不同,Bend 具有 Python、Haskell 等表達(dá)性語(yǔ)言的功能,包括快速對(duì)象分配、完全閉包支持的高階函數(shù)、無(wú)限制的遞歸,甚至 continuation。Bend 運(yùn)行在大規(guī)模并行硬件上,具有基于核心數(shù)量的近線性加速。Bend 由 HVM2 運(yùn)行時(shí)提供支持。

該項(xiàng)目的主要貢獻(xiàn)者 Victor Taelin 來(lái)自巴西,他在 X 平臺(tái)上分享了 Bend 的主要特性和開(kāi)發(fā)思路。

首先,Bend 不適用于現(xiàn)代機(jī)器學(xué)習(xí)算法,因?yàn)檫@些算法是高度正則化的(矩陣乘法),具有預(yù)先分配的內(nèi)存,并且通常已經(jīng)有編寫(xiě)好的 CUDA 內(nèi)核。

Bend 的巨大優(yōu)勢(shì)體現(xiàn)在實(shí)際應(yīng)用中,這是因?yàn)椤刚嬲膽?yīng)用程序」通常沒(méi)有預(yù)算來(lái)制作專用的 GPU 內(nèi)核。試問(wèn),誰(shuí)在 CUDA 中制作了網(wǎng)站?而且,即使有人這樣做了,也是不可行的,因?yàn)椋?/span>

1. 真正的應(yīng)用程序需要從許多不同的庫(kù)導(dǎo)入函數(shù),無(wú)法為它們編寫(xiě) CUDA 內(nèi)核;

2. 真實(shí)的應(yīng)用程序具有動(dòng)態(tài)函數(shù)和閉包;

3. 真實(shí)的應(yīng)用程序會(huì)動(dòng)態(tài)且不可預(yù)測(cè)地分配大量?jī)?nèi)存。

Bend 完成了一些新的嘗試,并且在某些情況下可以相當(dāng)快,但現(xiàn)在想寫(xiě)大語(yǔ)言模型肯定是不行的。

作者對(duì)比了一下舊方法和新的方法,使用相同的算法樹(shù)中的雙調(diào)排序,涉及 JSON 分配和操作。Node.js 的速度是 3.5 秒(Apple M3 Max),Bend 的速度是 0.5 秒(NVIDIA RTX 4090)。

是的,目前 Bend 需要整塊 GPU 才能在一個(gè)核心上擊敗 Node.js。但另一方面,這還是一個(gè)初生的新方法與大公司(Google)優(yōu)化了 16 年的 JIT 編譯器在進(jìn)行比較。未來(lái)還有很多可能性。

如何使用

在 GitHub 上,作者簡(jiǎn)要介紹了 Bend 的使用流程。

首先,安裝 Rust。如果你想使用 C 運(yùn)行時(shí),請(qǐng)安裝 C 編譯器(例如 GCC 或 Clang);如果要使用 CUDA 運(yùn)行時(shí),請(qǐng)安裝 CUDA 工具包(CUDA 和 nvcc)版本 12.x。Bend 目前僅支持 Nvidia GPU。

然后,安裝 HVM2 和 Bend:

cargo +nightly install hvm
cargo +nightly install bend-lang

最后,編寫(xiě)一些 Bend 文件,并使用以下命令之一運(yùn)行它:

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

你還可以使用 gen-c 和 gen-cu 將 Bend 編譯為獨(dú)立的 C/CUDA 文件,以獲得最佳性能。但 gen-c、gen-cu 仍處于起步階段,遠(yuǎn)沒(méi)有像 GCC 和 GHC 這樣的 SOTA 編譯器那么成熟。

Bend 中的并行編程

這里舉例說(shuō)明可以在 Bend 中并行運(yùn)行的程序。例如,表達(dá)式:

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

不能并行運(yùn)行,因?yàn)?+ 4 取決于 + 3,而 + 3 又取決于 (1+2)。而表達(dá)式:

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

可以并行運(yùn)行,因?yàn)?(1+2) 和 (3+4) 是獨(dú)立的。Bend 并行運(yùn)行的條件就是符合并行邏輯。

再來(lái)看一個(gè)更完整的代碼示例:

# Sorting Network = just rotate trees!
def sort (d, s, tree):
  switch d:
    case 0:
      return tree
case _:
      (x,y) = tree
lft   = 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 tree
case _:
      (x,y) = tree
return down (d, s, warp (d-1, s, x, y))




(...)

該文件實(shí)現(xiàn)了具有不可變樹(shù)旋轉(zhuǎn)的雙調(diào)排序器。它不是很多人期望的在 GPU 上快速運(yùn)行的算法。然而,由于它使用本質(zhì)上并行的分治方法,因此 Bend 會(huì)以多線程方式運(yùn)行它。一些速度基準(zhǔn):

  •  CPU,Apple M3 Max,1 個(gè)線程:12.15 秒
  •  CPU,Apple M3 Max,16 線程:0.96 秒
  •  GPU,NVIDIA RTX 4090,16k 線程:0.21 秒

不執(zhí)行任何操作即可實(shí)現(xiàn) 57 倍的加速。沒(méi)有線程產(chǎn)生,沒(méi)有鎖、互斥鎖的顯式管理。我們只是要求 Bend 在 RTX 上運(yùn)行我們的程序,就這么簡(jiǎn)單。

Bend 不限于特定范例,例如張量或矩陣。任何的并發(fā)系統(tǒng),從著色器到類 Erlang 的 actor 模型都可以在 Bend 上進(jìn)行模擬。例如,要實(shí)時(shí)渲染圖像,我們可以簡(jiǎn)單地在每個(gè)幀上分配一個(gè)不可變的樹(shù):

# given a shader, returns a square image
def 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 / 2
color = shader (i % width, i /width)
  return color
# given a position, returns a color
# for this demo, it just busy loops
def demo_shader (x, y):
  bend i = 0:
    when i < 5000:
      color = fork (i + 1)
    else:
      color = 0x000001
return color
# renders a 256x256 image using demo_shader
def main:
  return render (16, demo_shader)

它確實(shí)會(huì)起作用,即使涉及的算法在 Bend 上也能很好地并行。長(zhǎng)距離通信通過(guò)全局 beta 縮減(根據(jù)交互演算)執(zhí)行,并通過(guò) HVM2 的原子鏈接器正確有效地同步。

最后,作者表示 Bend 現(xiàn)在僅僅是第一個(gè)版本,還沒(méi)有在合適的編譯器上投入太多精力。大家可以預(yù)期未來(lái)每個(gè)版本的原始性能都會(huì)大幅提高。而現(xiàn)在,我們已經(jīng)可以使用解釋器,從 Python 高級(jí)語(yǔ)言的角度一睹大規(guī)模并行編程的樣子了。


責(zé)任編輯:張燕妮 來(lái)源: 機(jī)器之心
相關(guān)推薦

2021-03-26 09:49:22

架構(gòu)并行處理

2023-04-06 16:29:18

模型AI

2016-01-29 20:23:23

華為

2017-04-26 13:30:24

爬蟲(chóng)數(shù)據(jù)采集數(shù)據(jù)存儲(chǔ)

2009-04-09 09:32:00

VoWLANWLAN

2010-09-01 15:16:49

WLAN交換機(jī)結(jié)構(gòu)

2024-04-01 13:09:41

MySQL數(shù)據(jù)庫(kù)

2018-01-03 12:48:03

云計(jì)算云遷移網(wǎng)絡(luò)

2021-04-22 13:38:21

前端開(kāi)發(fā)技術(shù)

2020-04-09 11:56:10

Elasticsear集群硬件

2013-03-21 09:24:28

2023-05-26 17:20:29

模型工具

2023-10-07 10:41:54

語(yǔ)言模型微調(diào)BitFit

2019-04-02 08:00:39

閃存架構(gòu)共享

2009-03-20 09:49:00

負(fù)載均衡CDN網(wǎng)站架構(gòu)

2024-04-02 14:29:12

網(wǎng)絡(luò)安全數(shù)據(jù)泄露

2015-12-15 11:19:31

2023-06-30 17:59:27

Ray離線推理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩在线视频观看 | 国产精品成人一区二区 | 精品色| 伊人久久大香线 | 欧美电影免费网站 | 日本在线精品视频 | 亚洲精品一区二区三区蜜桃久 | 亚洲不卡在线观看 | 99伊人| 久久com| 国产精品久久久久久一区二区三区 | 日韩精品专区在线影院重磅 | 中文字幕不卡视频在线观看 | 欧美日韩精品一区二区三区蜜桃 | 在线观看毛片网站 | 综合精品久久久 | 国产高清精品一区二区三区 | 久久国产综合 | 免费国产精品久久久久久 | 国产精品成人在线 | 久久另类 | 1000部精品久久久久久久久 | 在线看av网址 | 国产欧美日韩久久久 | 久久精品无码一区二区三区 | 中文字幕av网站 | 久久av网| 国产成人在线一区二区 | 久久成人精品视频 | 久久久久久999 | 国产精品久久久一区二区三区 | 国产激情一区二区三区 | 亚洲精品乱码久久久久久按摩观 | 91激情视频| 久久伊人亚洲 | 国产在线观看一区 | 亚洲三区在线 | 久久久人成影片免费观看 | 日本黄色一级视频 | 久久精品国产久精国产 | 国产精品久久久久久一区二区三区 |