《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 在CUDA的天下,OpenAI開源GPU編程語言Triton,將同時支持N卡和A卡

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

2021-07-29
來源:機器之心
關鍵詞: CUDA GPU

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

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

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

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

  今天,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。

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

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

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

  新發布的 Triton 可以為一些核心的神經網絡任務(例如矩陣乘法)提供顯著的易用性優勢?!肝覀兊哪繕耸鞘蛊涑蔀樯疃葘W習 CUDA 的可行替代方案,」Philippe Tillet 作為 Triton 項目負責人如此表示。

  GPU 編程面臨的挑戰

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

  來自 DRAM 的內存傳輸必須合并進大型事務,以利用現代內存接口的總線位寬;

  必須在數據重新使用之前手動存儲到 SRAM 中,并進行管理以最大限度地減少檢索時共享內存庫沖突;

  計算必須在流處理器(SM)內部或之間細致分區和調度,以促進指令 / 線程級的并行以及專用算術邏輯單元(ALU)的利用。

  GPU 基礎架構。

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

  CUDA vs Triton 編譯器優化對比。

  編程模型

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

  Triton 中的向量加法。

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

  import triton

  import triton.language as tl

  @triton.jit

  def softmax(Y, stride_ym, stride_yn, X, stride_xm, stride_xn, M, N):

  # row index

  m = tl.program_id(0)

  # col indices

  # this specific kernel only works for matrices that

  # have less than BLOCK_SIZE columns

  BLOCK_SIZE = 1024

  n = tl.arange(0, BLOCK_SIZE)

  # the memory address of all the elements

  # that we want to load can be computed as follows

  X = X + m * stride_xm + n * stride_xn

  # load input data; pad out-of-bounds elements with 0

  x = tl.load(X, mask=n < N, other=-float(‘inf’))

  # compute numerically-stable softmax

  z = x - tl.max(x, axis=0)

  num = tl.exp(z)

  denom = tl.sum(num, axis=0)

  y = num / denom

  # write back to Y

  Y = Y + m * stride_ym + n * stride_yn

  tl.store(Y, y, mask=n < N)

  import torch

  # Allocate input/output tensors

  X = torch.normal(0, 1, size=(583, 931), device='cuda‘)

  Y = torch.empty_like(X)

  # SPMD launch grid

  grid = (X.shape[0], )

  # enqueue GPU kernel

  softmax[grid](Y, Y.stride(0), Y.stride(1),

  X, X.stride(0), X.stride(1),

  X.shape[0]    , X.shape[1])

  在 Triton 中融合 softmax

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

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

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

  @torch.jit.script

  def softmax(x):

  x_max = x.max(dim=1)[0]

  z = x - x_max[:, None]

  numerator = torch.exp(x)

  denominator = numerator.sum(dim=1)

  return numerator / denominator[:, None]

  融合 softmax 與 Torch JIT

  矩陣乘法

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

  Triton 中的矩陣乘法。

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

  高級系統架構

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

  Triton 的高級架構。

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

  編譯器后端

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

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

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

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




微信圖片_20210517164139.jpg

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美在线观看日本一区| 久久不见久久见免费视频1| 亚洲精品国产精品国自产观看| 久久久久成人网| 亚洲一区二区三区在线观看视频| 欧美va亚洲va日韩∨a综合色| 国产农村妇女精品一区二区| 国产精品theporn| 99视频超级精品| 国产精品美女一区二区| 亚洲精品在线二区| 亚洲无毛电影| 亚洲欧美日本国产专区一区| 国产在线国偷精品产拍免费yy| 久久这里只有精品视频首页| 国产一区日韩二区欧美三区| 欧美午夜精品电影| 欧美激情综合在线| 久久国产精品99国产| 国产亚洲精品一区二区| 欧美日韩在线另类| 亚洲日本国产| 亚洲国产日韩欧美一区二区三区| 欧美精品免费在线观看| 欧美日韩高清不卡| 国产精品国产a| 91久久精品视频| 亚洲欧美国产va在线影院| 悠悠资源网久久精品| 亚洲国产天堂久久国产91| 日韩手机在线导航| 欧美四级剧情无删版影片| 欧美国产精品一区| 午夜亚洲性色福利视频| 国产综合色一区二区三区| 亚洲国产精品一区二区尤物区| 亚洲天堂网站在线观看视频| 亚洲福利视频二区| 免费观看成人| 男人的天堂成人在线| 国产视频一区二区三区在线观看| 国产欧美日本一区二区三区| 麻豆精品一区二区综合av| 激情校园亚洲| 欧美在线在线| 在线观看国产精品淫| 亚洲裸体俱乐部裸体舞表演av| 久久精品成人| 亚洲国产91| 亚洲愉拍自拍另类高清精品| 欧美黄污视频| 欧美精品色综合| 亚洲欧美在线磁力| 久久免费精品日本久久中文字幕| 国产精品久久久久av免费| 宅男精品导航| 欧美与黑人午夜性猛交久久久| 国产精品久久久久永久免费观看| 久久亚洲春色中文字幕久久久| 久久国产精品99精品国产| 毛片一区二区三区| 久久亚洲国产精品日日av夜夜| 亚洲欧美国产日韩中文字幕| 亚洲欧美在线一区| 欧美日韩国产欧美日美国产精品| 中日韩美女免费视频网址在线观看| 亚洲品质自拍| 国产真实乱子伦精品视频| 亚洲激情网站| 久久精品噜噜噜成人av农村| 国产精品免费观看视频| 亚洲精品国产视频| 日韩视频在线观看国产| 在线播放国产一区中文字幕剧情欧美| 欧美深夜福利| 日韩视频一区| 欧美一区精品| 亚洲高清在线观看一区| 国产视频精品网| 欧美精品手机在线| 亚洲美女性视频| 亚洲精美视频| 国产自产在线视频一区| 亚洲老板91色精品久久| 国产综合久久久久久| 精品成人一区二区三区| 亚洲欧美日韩国产成人精品影院| 欧美主播一区二区三区| 先锋影音国产精品| 欧美亚州一区二区三区| 免费观看久久久4p| 欧美日韩另类丝袜其他| 久久综合色8888| 国产乱理伦片在线观看夜一区| 韩日欧美一区二区| 久久国产精品毛片| 狼人天天伊人久久| 国产精品区一区二区三区| 亚洲美女在线国产| 欧美日韩另类综合| 国产精品久久二区二区| 亚洲精品免费一二三区| 亚洲精品日韩一| 亚洲自拍电影| 亚洲欧美在线免费观看| 国产精品一区二区久久久| 国产精品高潮呻吟久久av黑人| 亚洲免费观看高清完整版在线观看| 久久久久久一区| 亚洲国产一区二区a毛片| 一区二区三区产品免费精品久久75| 欧美jizzhd精品欧美巨大免费| 国产精品视频| 久久久久.com| 精品成人国产| 欧美成人国产一区二区| 亚洲三级视频| 国产精品久久影院| 久久激五月天综合精品| 亚洲精品一区二区三区在线观看| 午夜精品99久久免费| 亚洲天堂视频在线观看| 欧美日韩另类在线| 红桃视频亚洲| 国产欧美一区在线| 欧美日韩国产一区二区三区地区| 欧美精品免费视频| 久久久伊人欧美| 欧美日韩精品国产| 国产午夜亚洲精品理论片色戒| 国产精品久久久久久福利一牛影视| 亚洲日本中文字幕区| 亚洲国产天堂久久综合网| 午夜精品久久久久99热蜜桃导演| 久久久久久久综合色一本| 欧美精品免费播放| 欧美一区二区日韩| 久久久久国产精品www| 精品盗摄一区二区三区| 欧美成人a∨高清免费观看| 久久一区二区三区四区| 亚洲免费人成在线视频观看| 尤物在线精品| 欧美黑人一区二区三区| 性欧美video另类hd性玩具| 欧美日韩国产美| 国产精品综合av一区二区国产馆| 国产模特精品视频久久久久| 一区二区三区免费看| av成人免费在线观看| 亚洲乱码久久| 亚洲精品一区在线观看香蕉| 欧美日韩成人| 久久久久久久激情视频| 亚洲午夜视频在线| 一本一本大道香蕉久在线精品| 久久久www免费人成黑人精品| 亚洲视频网站在线观看| 亚洲国产成人精品久久| 国产精品va在线| 欧美天天视频| 亚洲视频高清| 欧美日韩高清在线观看| 欧美激情精品久久久久久黑人| 久久久女女女女999久久| 亚洲黄色免费电影| 欧美ab在线视频| 亚洲欧洲日产国产网站| 亚洲精品一二三区| 亚洲一区二区三区激情| 亚洲一区二区在线免费观看视频| 在线精品亚洲| 国产亚洲成av人片在线观看桃| 欧美影院在线播放| 亚洲人成精品久久久久| 欧美午夜www高清视频| 欧美午夜一区二区福利视频| 在线国产亚洲欧美| 久久福利毛片| 欧美久久久久久久| 亚洲第一中文字幕在线观看| 亚洲日本久久| 亚洲国产精品一区二区久| 欧美成人激情视频| 久久亚洲精品欧美| 久久国产精品久久久久久电车| 国产一区二区精品久久91| 国语自产偷拍精品视频偷| 美女脱光内衣内裤视频久久网站| 亚洲丁香婷深爱综合| 一区二区在线免费观看| 欧美日本韩国一区二区三区| 麻豆精品网站| 国产精品揄拍500视频| 黄色工厂这里只有精品| 麻豆国产精品一区二区三区| 国模 一区 二区 三区| 国产一级久久| 国产精品久久久久9999高清| 一区二区三区产品免费精品久久75| 久久久99国产精品免费| 1024精品一区二区三区| 嫩草伊人久久精品少妇av杨幂| 亚洲欧美日韩综合一区| 久久综合色婷婷| 国产精品入口麻豆原神| 最新成人av网站| 亚洲国产综合在线看不卡| 国产精品免费观看在线| 欧美激情一区二区三区高清视频| 一区二区三区欧美| 欧美日韩免费观看一区=区三区| 亚洲一区二区三| 亚洲最新合集| 亚洲人精品午夜在线观看| 欧美在线free| 午夜精品在线观看| 亚洲国产精品成人一区二区| 亚洲国产成人精品久久久国产成人一区| 欧美三级视频在线观看| 欧美综合第一页| 狠狠色综合网| 免费日韩av片| 一区二区免费在线播放| 亚洲欧洲在线视频| 国产精品成人在线观看| 亚洲国产高清在线| 久久久国产亚洲精品| 国产综合18久久久久久| 欧美人成网站| 国产欧美精品va在线观看| 欧美/亚洲一区| 欧美日韩一级大片网址| 国产精品狼人久久影院观看方式| 99视频在线精品国自产拍免费观看| 欧美福利在线| 欧美色一级片| 欧美成人官网二区| 妖精视频成人观看www| 亚洲欧洲一二三| 亚洲国产精品99久久久久久久久| 亚洲影视九九影院在线观看| 欧美电影免费观看高清完整版| 亚洲欧美国产高清| 国产精品综合不卡av| 国内一区二区在线视频观看| 国产欧美va欧美不卡在线| 红桃视频国产一区| 亚洲老板91色精品久久| 免费精品99久久国产综合精品| 免费观看不卡av| 国产日韩综合一区二区性色av| 欧美精品在线一区| 老司机免费视频久久| 久久精视频免费在线久久完整在线看| 国产精品综合视频| 在线播放亚洲一区| 欧美日韩在线免费观看| 国产专区综合网| 一区二区三区在线观看视频| 亚洲国产精品专区久久| 午夜精品久久久久久| 国产亚洲欧美一区| 在线 亚洲欧美在线综合一区| 国产精品一级二级三级| 国产精品日韩高清| 欧美福利视频在线观看| 欧美精品在线免费| 欧美激情亚洲一区| 亚洲高清资源| 韩国女主播一区| 亚洲一区二区三区在线播放| 欧美成人资源网| 国产自产在线视频一区| 欧美高清在线视频观看不卡| 国产精品久久久久一区二区三区| 亚洲欧美日韩在线播放| 激情欧美丁香| 欧美国产三区| 欧美成人亚洲成人日韩成人| 久久伊人一区二区| 午夜精品久久久久久久99热浪潮| 亚洲小说春色综合另类电影| 欧美精品国产一区二区| 亚洲一区在线观看视频| 亚洲一区二区三区四区五区午夜| 欧美视频在线视频| 亚洲乱码日产精品bd| 久久夜色精品一区| 国产精品捆绑调教| 在线免费一区三区| 亚洲午夜日本在线观看| 亚洲精品资源| 欧美三级乱人伦电影| 亚洲国产免费看| 亚洲一区二区免费| 国产日韩欧美一区二区| 午夜免费久久久久| 亚洲成人在线网| 国产欧美日本在线| 好吊色欧美一区二区三区视频| 久久国产欧美精品| 国产精品成人av性教育| 久久精品国产96久久久香蕉| 欧美色另类天堂2015| 欧美99在线视频观看| 黄色工厂这里只有精品| 欧美精品一区三区在线观看| 久久精品视频导航| 久久色在线观看| 亚洲国产成人在线播放| 尤物精品国产第一福利三区| 亚洲国产精品久久久久婷婷老年| 亚洲在线播放| 一区二区三区精品视频在线观看| 国产一区二区精品久久| 久久久亚洲一区| 久久精品国产99精品国产亚洲性色| 午夜精品久久久久久久男人的天堂| 欧美精品三级在线观看| 久久九九有精品国产23| 欧美激情亚洲一区| 欧美与黑人午夜性猛交久久久| 久久久91精品| 欧美精品综合| 久久久久一区二区三区四区| 亚洲已满18点击进入久久| 国产精品v欧美精品v日韩|