国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

新聞 前端
OpenAI 開源了全新的 GPU 編程語言 Triton,它能成為 CUDA 的替代品嗎?

 

過去十年中,深度神經網絡 (DNN) 已成為最重要的機器學習模型之一,創造了從自然語言處理到計算機視覺、計算神經科學等許多領域的 SOTA 實現。DNN 模型的優勢來自于它的層次結構,這一特征導致其計算量巨大,但也會產生大量高度并行化的工作,特別適合多核和眾核處理器。

深度學習領域的新研究思路往往是結合原生框架 operator 來實現的,這種方法雖然方便,但需要創建或移動許多臨時張量,因此可能會造成神經網絡的性能損失。編寫專門的 GPU 內核或許可以解決這個問題,但 GPU 編程的確是一件相當復雜的事。

DNN 計算潛力與 GPU 編程困難之間的矛盾由來已久。英偉達在 2007 年發布了 CUDA 的初始版本,CUDA 平臺是一個軟件層,使用者可以直接訪問 GPU 的虛擬指令集和并行計算單元,用于執行計算內核。近年來,主流深度學習框架幾乎都是基于 CUDA 進行加速,英偉達也一直在完善 CUDA 工具包,但對于一般的開發者來說,CUDA 還是「不那么容易上手」。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

今天,OpenAI 正式推出 Triton 1.0,這是一種類 Python 的開源編程語言。即使沒有 CUDA 經驗的研究人員,也能夠高效編寫 GPU 代碼。例如,它可以用不到 25 行代碼寫出與 cuBLAS 性能相匹配的 FP16 矩陣乘法內核,后者是許多專業的 GPU 編程者尚且無法做到的。此外,OpenAI 的研究者已經使用 Triton 成功生成了比 PyTorch 同類實現效率高 2 倍的內核。

代碼地址:https://github.com/openai/triton

Triton 的最初想法來源于現任 OpenAI 科學家的 Philippe Tillet 2019 年在哈佛大學攻讀研究生學位時發表的一篇論文,當時他的導師是 H. T. Kung 和 David Cox。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

論文鏈接:http://www.eecs.harvard.edu/~htk/publication/2019-mapl-tillet-kung-cox.pdf

Tillet 希望解決的問題是打造一種比英偉達的 CUDA 等特定供應商庫更好用的庫,能夠處理神經網絡中涉及矩陣的各種操作,具備可移植性,且性能可與 cuDNN 或類似的供應商庫相媲美。團隊表示:「直接用 CUDA 進行 GPU 編程太難了,比如為 GPU 編寫原生內核或函數這件事,會因為 GPU 編程的復雜性而出奇困難。」

Facebook AI 研究中心科學家 Soumith Chintala 也在推特上表達了自己對 Triton 的期待:

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

新發布的 Triton 可以為一些核心的神經網絡任務(例如矩陣乘法)提供顯著的易用性優勢。「我們的目標是使其成為深度學習 CUDA 的可行替代方案,」Philippe Tillet 作為 Triton 項目負責人如此表示。

GPU 編程面臨的挑戰

現代 GPU 的架構大致可以分為三個主要組件:DRAM、SRAM 和 ALU。優化 CUDA 代碼時,必須考慮到每一個組件:

  • 來自 DRAM 的內存傳輸必須合并進大型事務,以利用現代內存接口的總線位寬;
  • 必須在數據重新使用之前手動存儲到 SRAM 中,并進行管理以最大限度地減少檢索時共享內存庫沖突;
  • 計算必須在流處理器(SM)內部或之間細致分區和調度,以促進指令 / 線程級的并行以及專用算術邏輯單元(ALU)的利用。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

GPU 基礎架構。

種種因素導致 GPU 編程難度驟增,即使對于具有多年經驗的 CUDA 程序員也是如此。Triton 的目的是將這些優化過程自動化,以此讓開發人員更專注于并行代碼的高級邏輯。出于對泛用能力的考量,Triton 不會自動調度跨流處理器的工作,而是將一些重要的算法考慮因素(例如 tiling、SM 間同步)留給開發者自行決定。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

CUDA vs Triton 編譯器優化對比。

編程模型

在所有可用的領域專用語言和 JIT 編譯器中,Triton 或許與 Numba 最相似:內核被定義為修飾過的 Python 函數,并與實例網格上不同的 program_id 的同時啟動。但不同之處值得注意:如下圖代碼片段所示,Triton 通過對 block 的操作來展示 intra-instance 并行,此處 block 是維數為 2 的冪的數組,而不是單指令多線程(SIMT)執行模型。如此一來,Triton 高效地抽象出了與 CUDA 線程 block 內的并發相關的所有問題(比如內存合并、共享內存同步 / 沖突、張量核心調度)。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

Triton 中的向量加法。

雖然這對 embarrassingly 并行(即 element-wise)計算可能沒什么幫助,但是可以簡化更復雜的 GPU 程序的開發。例如,在融合 softmax 核的情況下,對于每個輸入張量 X∈R^M×N 來說,每個實例對給定輸入張量的不同行進行歸一化。這種并行化策略的標準 CUDA 實現可能難以編寫,需要線程之間的顯式同步,因為這種策略并發地減少 X 的同一行。而 Triton 很大程度上消除了這種復雜性,每個內核實例加載感興趣的行,并使用類似 NumPy 的原語順序對其進行規范化。

  1. import triton 
  2. import triton.language as tl 
  3. @triton.jit 
  4. def softmax(Y, stride_ym, stride_yn, X, stride_xm, stride_xn, M, N): 
  5.     # row index 
  6.     m = tl.program_id(0
  7.     # col indices 
  8.     # this specific kernel only works for matrices that  
  9.     # have less than BLOCK_SIZE columns 
  10.     BLOCK_SIZE = 1024 
  11.     n = tl.arange(0, BLOCK_SIZE) 
  12.     # the memory address of all the elements 
  13.     # that we want to load can be computed as follows 
  14.     X = X + m * stride_xm + n * stride_xn 
  15.     # load input data; pad out-of-bounds elements with 0  
  16.     x = tl.load(X, mask=n < N, other=-float('inf')) 
  17.     # compute numerically-stable softmax 
  18.     z = x - tl.max(x, axis=0
  19.     num = tl.exp(z) 
  20.     denom = tl.sum(num, axis=0
  21.     y = num / denom 
  22.     # write back to Y 
  23.     Y = Y + m * stride_ym + n * stride_yn 
  24.     tl.store(Y, y, mask=n < N) 
  25. import torch 
  26. # Allocate input/output tensors 
  27. X = torch.normal(01, size=(583931), device='cuda'
  28. Y = torch.empty_like(X) 
  29. # SPMD launch grid 
  30. grid = (X.shape[0], ) 
  31. # enqueue GPU kernel 
  32. softmax[grid](Y, Y.stride(0), Y.stride(1),  
  33.               X, X.stride(0), X.stride(1), 
  34.               X.shape[0]    , X.shape[1]) 

在 Triton 中融合 softmax

Triton JIT 把 X、Y 當作指針而不是張量。最重要的是,softmax 這種特殊實現方式在整個規范化過程中保持 SRAM 中 X 的行不變,從而在適用時最大限度地實現數據重用(約 32K 列)。這與 PyTorch 的內部 CUDA 代碼不同,后者使用臨時內存使其更通用,但速度明顯變慢(見下圖)。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

融合 softmax、M=4096 的 A100 性能。

Torch (v1.9) JIT 較低的性能突出了從高級張量操作序列自動生成 CUDA 代碼的難度。

  1. @torch.jit.script 
  2. def softmax(x): 
  3.     x_max = x.max(dim=1)[0
  4.     z = x - x_max[:, None] 
  5.     numerator = torch.exp(x) 
  6.     denominator = numerator.sum(dim=1
  7.     return numerator / denominator[:, None] 

融合 softmax 與 Torch JIT

矩陣乘法

能夠為元素操作(element-wise operation)和規約操作(reduction operation)編寫融合內核是很重要的,但考慮到神經網絡中矩陣乘法的重要性,這還不夠。事實證明,Triton 在這些方面表現很好,僅用大約 25 行 Python 代碼就能達到最佳性能。相比之下,CUDA 效率就沒有那么高了。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

Triton 中的矩陣乘法。

手寫矩陣乘法內核的一個重要優點是它們可以根據需要進行定制,以適應其輸入(例如切片)和輸出(例如 Leaky ReLU)的融合變換。假如不存在 Triton 這樣的系統,那么對于沒有出色的 GPU 編程專業知識的開發人員來說,矩陣乘法內核將很難大改。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

高級系統架構

Triton 的良好性能得益于以 Triton-IR 為中心的模塊化系統架構。Triton-IR 是一種基于 LLVM 的中間表示,多維值塊(blocks of values)是其中最重要的東西。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

Triton 的高級架構。

@triton.jit 裝飾器的工作原理是遍歷由 Python 函數提供的抽象語法樹(AST),這樣一來就能使用通用的 SSA 構造算法實時生成 Triton-IR。生成的 IR 代碼隨后由編譯器后端進行簡化、優化和自動并行化,然后轉換為高質量的 LLVM-IR,最終轉換為 PTX,以便在最新的 NVIDIA GPU 上執行。目前 Triton 還不支持 CPU 和 AMD GPU,但團隊表示對二者的支持正在開發中。

編譯器后端

研究人員發現通過 Triton-IR 來使用塊狀程序表示,這種方法允許編譯器自動執行各種重要的程序優化。例如,通過查看計算密集型塊級操作(例如 tl.dot)的操作數,數據可以自動存儲到共享內存中,并使用標準的活躍性分析技術進行數據的分配與同步。

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

Triton 編譯器通過分析計算密集型操作中使用的塊變量的活動范圍來分配共享內存。

此外,Triton 還可以在 SM 之間以及 SM 之內高效、自動地并行化,前者通過并發執行不同的內核實例來實現,后者通過分析每個塊級操作的迭代空間,并將其充分劃分到不同的 SIMD 單元來實現。如下所示:

在CUDA的天下,OpenAI開源GPU編程語言Triton,同時支持N卡和A卡

Triton 自動并行化。每個塊級操作都定義了一個塊級迭代空間,該空間可以自動并行化以利用 SM(Streaming Multiprocessor) 上的可用資源。

 

責任編輯:張燕妮 來源: 機器之心Pro
相關推薦

2024-10-08 10:15:00

AI模型

2024-09-09 16:22:51

2025-10-21 08:52:00

2025-09-30 09:05:06

2023-09-27 12:17:06

2015-12-04 10:05:09

蘋果編程開源

2021-06-02 10:01:20

開源技術 軟件

2011-04-21 14:50:24

筆記本游戲AMD

2023-12-04 18:13:03

GPU編程

2020-05-06 22:55:09

顯卡識別工具

2020-06-23 07:56:57

虛擬桌面AMDNvidia

2018-02-01 14:02:48

虛擬化

2020-10-13 06:34:15

編程語言IDE

2020-04-23 16:25:38

NVIDIA RTXN卡游戲卡

2024-09-26 16:34:06

2021-01-13 13:51:04

鴻蒙HarmonyOSTab選項卡

2023-05-17 10:05:56

2020-05-08 17:23:14

Windows 10Windows游戲變卡

2009-08-06 10:07:10

2024-07-16 13:22:42

點贊
收藏

51CTO技術棧公眾號

欧美国产1区2区| 中文在线免费| 亚洲第一天堂av| 欧美在线免费看视频| 北条麻妃在线一区| 色哟哟入口国产精品| 蜜芽一区二区三区| 九色视频成人自拍| 成人xxxx视频| 亚洲高清免费在线| 国产精品手机在线播放| 成人免费视频网站在线看| 一区二区三区四区电影| 91久久精品日日躁夜夜躁国产| 国产精品久久久久婷婷| 精品中文在线| 男女高潮又爽又黄又无遮挡| 中文字幕精品—区二区| 不卡电影一区二区三区| 日韩精选视频| 久久久久免费看黄a片app| 综合欧美国产视频二区| 成人国产精品视频| 91成人app| 精品999在线| 欧美一区视频在线| 亚洲一级电影视频| 羞羞色午夜精品一区二区三区| 日漫免费在线观看网站| 国产精品免费一区二区三区观看 | 91成人免费观看| 欧美视频中文在线看| 综合视频在线| 成人免费看片| 欧美a级黄色大片| 久久精品在线播放| 亚洲色图制服诱惑| 国产精品大片| av在线最新| 国产精品国产亚洲精品看不卡| 欧美激情一区二区三级高清视频| 亚洲黄色小视频| 国产精品爽黄69天堂a| 欧美色资源站| 色av一区二区三区| 91色视频在线导航| 欧美色图片你懂的| 久久婷婷影院| 伊人久久视频| 色婷婷综合久久久久中文字幕| 亚洲91av视频| 精品日韩中文字幕| 久久精品123| 91精品店在线| 成人短视频在线看| 欧美国产小视频| 国产色在线 com| 日产精品一线二线三线芒果| 日韩经典第一页| av亚洲精华国产精华精| 亚洲+变态+欧美+另类+精品| 精品成人一区二区三区免费视频| 日日噜噜噜噜夜夜爽亚洲精品| 一区二区三区精品99久久| 国产精品乱码人人做人人爱| 国产高清久久| 成人免费高清观看| 黄色高清无遮挡| 成人激情在线播放| 亚洲精品国产成人| 亚洲视频一区在线| 精品视频无码一区二区三区| 精品日韩一区二区三区| 99精品视频在线播放观看| 妖精视频一区二区三区| 日本aⅴ中文| 亚洲欧洲久久| 91精品国产色综合久久不卡98口| 欧美日韩综合色| 岛国精品一区二区| 国产精品久久久久久久| 都市激情亚洲综合| 最新国产在线视频| 日韩精品一区二区三区四| 国产精品一区二区3区| 日韩精品视频观看| 亚洲电影激情视频网站| 黑人巨大精品欧美黑白配亚洲| 欧美日韩播放| 亚洲高清免费观看高清完整版在线观看| 一区二区三区网站| 欧美日韩五码| 在线观看黄色小视频| 中文字幕色一区二区| 69久久夜色精品国产7777| 欧美一区日本一区韩国一区| 久久精品免费在线观看| 国产精品老牛| 欧美电影免费网站| 超碰在线中文字幕| 天天干狠狠干| 青青在线免费视频| 青青精品视频播放| 亚洲美女av网站| 一本大道久久a久久精二百| 99久久精品国产一区二区三区| 国产一区二区三区自拍| 亚洲精品aⅴ| 国产激情视频在线看| 中文视频在线| 男人舔女人下面高潮视频| 欧美一区1区三区3区公司| 国产91色在线播放| 中文字幕亚洲一区二区三区五十路| 一本久久a久久精品亚洲| 国产日韩av一区| 日本特黄久久久高潮| 欧美电影三区| 99国产精品久久一区二区三区| 美女精品导航| 精品视频三区| 丁香婷婷自拍| 男女午夜激情视频| 男人的天堂成人| 一区二区三区小说| 日韩成人影院| 亚洲成av人片在线观看www| 久久久久黄久久免费漫画| 三级理论午夜在线观看| 国产网站免费观看| 九热视频在线观看| 中文字幕网在线| 欧美日韩国产首页| 欧美日韩国产不卡在线看| 在线观看国产高清视频| 国产高清欧美| 日本韩国精品一区二区在线观看| 91色在线观看| 波多野结衣天堂| 日韩精品丝袜美腿| 亚洲另类春色国产| 91色精品视频在线| 国产精品免费看久久久无码| 亚洲精品国产品国语在线| 欧美日韩一卡二卡三卡| 亚洲制服丝袜在线| 亚洲色图在线播放| 日本一区二区成人在线| 久久影院视频免费| 91首页免费视频| 成人激情校园春色| 国产91精品一区二区麻豆网站| 精品一区二区三区欧美| 日本不卡在线视频| 免费成人在线网站| 日韩精品一级中文字幕精品视频免费观看| 国语对白精品一区二区| 亚洲欧美综合国产精品一区| 亚洲男女av一区二区| 欧美成人高清| 国内精品福利| 国产一区二区三区成人欧美日韩在线观看 | 日本免费久久高清视频| 51ⅴ精品国产91久久久久久| 欧美精品一区二区三区国产精品 | 你懂的网址一区二区三区| 久久99精品久久久久久秒播放器| 国产精品成人一区二区三区| 丁香五月网久久综合| 国产精品福利视频| 日本精品一区| 水蜜桃在线免费观看| 欧美啪啪免费视频| 欧美日韩理论| 亚洲国产欧美日韩在线观看第一区| 成人偷拍自拍| 91精品论坛| 日韩在线一区二区三区免费视频| 在线成人视屏| 欧美日韩黄色一区二区| 在线观看日韩电影| 7777精品伊人久久久大香线蕉的 | 欧美午夜激情在线| 一本到不卡免费一区二区| 欧美男人的天堂一二区| 亚洲精品一区二区三区影院| 亚洲欧美日韩网| 久久国产精品影片| 青青久久aⅴ北条麻妃| 5g影院天天爽成人免费下载| 国产欧美中文在线| 亚洲区欧洲区| 不卡视频观看| 91成人小视频| 精品美女久久久| 亚洲国产免费看| 国产成人在线影院| 国产精品国产三级国产| 91黄色在线观看| 亚洲精品美女久久久|