在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Triton編譯器的原理和性能

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-12-16 11:22 ? 次閱讀

我們推出了一個新的系列,對PytorchConference2023 的博客進行中文編譯,會陸續在公眾號發表。

Triton是一種用于編寫高效自定義深度學習原語的語言和編譯器。Triton的目的是提供一個開源環境,以比CUDA更高的生產力編寫快速代碼,但也比其他現有DSL具有更大的靈活性。Triton已被采用為Torch inductor的基本組件,以合成針對GPU的高效內核。與傳統庫使用相比,這具有多種優勢。它允許創建各種各樣的融合,它可以獨立調整,并且它的內存占用更小。本次演講將介紹Triton編譯器,并描述使其能夠以最少的用戶努力生成閃電般快速內核的過程。

全文

今天我要和大家談談的是Triton。那么,我將要討論的大致內容是Triton是什么?我們為什么要創建這個工具?它可以用來做什么?然后,我將討論如何將其集成在ML編譯器堆棧中。最后,我將簡要介紹其背后的原理以及編譯器是如何簡化管理的。

Triton是一個Python DSL(領域特定語言),旨在用于編寫機器學習內核。 最初,它嚴格用于GPU內核,但慢慢地擴展以支持用于機器學習的任何硬件,包括CPUASIC等。Triton的目標是讓那些沒有GPU經驗的研究人員能夠編寫高性能代碼。如果你看到幻燈片底部的圖表,那真的是Triton想要達到的地方。通過少量的開發工作,你可以非常接近峰值性能。

95e409ca-9bb7-11ee-8b88-92fbcf53809c.jpg

簡而言之,Triton是一個幫助研究人員輕松編寫高性能機器學習內核的工具,無論他們是否有GPU經驗。

當然,總是會有像CUDA或匯編語言這樣的其他語言,它們能讓你獲得同樣或更高的性能,但通常你需要對硬件有更多的了解,并花費更多的時間。為什么我們需要這種新的語言呢?如果你看看現有的選擇,例如在不同的硬件上編程機器學習,有PyTorch這樣的工具,它允許你輕松地將不同類型的操作映射到硬件上,并且非常容易從中獲得高性能。

但問題在于你對它的控制非常有限。如果現有的操作集中沒有你需要的東西,你就只能束手無策,唯一的解決辦法是走向另一個極端,例如編寫CUDA或編寫PTX,甚至直接編寫匯編代碼。但問題在于,要編寫這些語言,你需要真正成為硬件方面的專家,并且用這些語言編寫高效的內核可能非常棘手 。所以Triton實際上是嘗試在這里找到一個中間地帶,它允許用戶編寫高效的內核,并有大量的控制權,但又不必關心那些微小的細節。

是的,硬件的細節以及如何在特定硬件上獲得性能。實際上,設計的難點在于找到這個最佳平衡點。Triton的設計方式就是找到這個抽象的平衡點,即你想向用戶暴露什么,以及你想讓編譯器做什么?

95fd4ebc-9bb7-11ee-8b88-92fbcf53809c.jpg

編譯器是生產力工具,真的……在這方面,Triton的目標是讓編譯器為你完成你不想做的工作,但仍然讓你能夠控制算法、你想要用來進行調整的任何tuning。Triton介于Cuda和Torch之間,因為你仍然可以編寫自己的算法,你仍然可以控制自己的類型,你仍然需要決定是否需要以某種類型來保存中間值,你控制所有的精度。你不必關心如何處理共享內存、在目標有張量核時使用張量核、如何很好地處理負載聚合,以便你有良好的內存訪問模式。 這些人們在編寫GPU內核時經常要考慮的事情。你總是要擔心這些問題,或者弄清楚我的中間數據的布局是什么等等。編譯器會為你完成這些工作。

讓我們來看一個例子。這是一個softmax內核的示例。這是一個工作解決方案的復制品,它是有效的。

#https://github.com/openai/triton/blob/main/python/tutorials/02-fused-softmax.py
@triton.jit
defsoftmax_kernel(output_ptr,input_ptr,input_row_stride,output_row_stride,n_cols,BLOCK_SIZE:tl.constexpr):
#Therowsofthesoftmaxareindependent,soweparallelizeacrossthose
row_idx=tl.program_id(0)
#Thestriderepresentshowmuchweneedtoincreasethepointertoadvance1row
row_start_ptr=input_ptr+row_idx*input_row_stride
#Theblocksizeisthenextpoweroftwogreaterthann_cols,sowecanfiteach
#rowinasingleblock
col_offsets=tl.arange(0,BLOCK_SIZE)
input_ptrs=row_start_ptr+col_offsets
#LoadtherowintoSRAM,usingamasksinceBLOCK_SIZEmaybe>thann_cols
row=tl.load(input_ptrs,mask=col_offsets

第一個有趣的事情是這段代碼相對較短。如果你用CUDA編寫同樣的內核,它實際需要更多的努力。我們可以注意到一些有趣的事情。例如,你可以控制如何在計算機上分配工作。多虧了這些編程思想。你可以看到,你仍然可以控制你的內存訪問,因為你可以訪問指針。你可以基于一些原始指針加載一大塊數據。然后編譯器將在后臺決定將其映射到硬件的最佳方式,以及如何進行聚合,如何處理所有事情,以便這個加載將是有效的,并將分布到你的GPU的不同線程和warp上。但你不必擔心這些。在底部,我們可以看到有一個歸約操作,通常它會隱式地使用共享內存,但你不必擔心它。編譯器將確保你為其選擇最佳實現,并為你使用共享內存。

之后我將討論,如何在典型的設備上使用triton,除了內核他還可以集成到完整的graph編譯器堆棧中:

960f1f20-9bb7-11ee-8b88-92fbcf53809c.jpg

Triton為你提供了一個非常容易、非常自然的從graph表示直接到實現的lowering過程,并且它實際上允許更簡單的graph表示實現,因為你不必一次性生成一個完美的內核。你可以只生成Triton部分,然后Triton編譯器將完成繁重的工作,找出如何有效地將其映射到硬件上。

Triton可以被用作的另一個地方是它可以被用作自定義操作語言 。像PyTorch這樣的工具,因為如果你陷入困境,而PyTorch中沒有實現某些功能,添加自定義操作是你能夠完成你想要做的事情的唯一解決方案。

讓我們稍微看一下編譯器架構。這是一個非常高層次的查看Triton架構的方式。

9629dcca-9bb7-11ee-8b88-92fbcf53809c.jpg

Triton被構建為一個老式編譯器,包括前端、中端和后端。這里有趣的部分是這兩個塊,Triton IR和Triton GPU IR,它們是Triton的中間IR,這里有很多魔法發生。你可以在這里看到的另一件有趣的事情是,Triton IR真的允許你針對不同的硬件進行定位,因為Triton IR本身對于這硬件是完全無關的。如果我們放大這個有趣的部分,即基本上發生在Triton IR和最終的LLVM IR之間的事情,LLVM IR是最終的目標。

963d65b0-9bb7-11ee-8b88-92fbcf53809c.jpg

基本上,編譯器首先接收Triton IR,Triton IR與語言本身非常相似。然后,編譯器要做的第一件事是為描述張量如何分布到線程上的布局進行關聯。這真的是編譯器的核心機制,因為基于這些布局,有多種路徑可以改變這些布局,并能夠生成一些能夠有效地映射到硬件上的東西。因此,我們會像進行coalesce一樣,嘗試選擇一個布局,以便加載存儲聚合能夠高效進行。

如果機器有tensorcore,我們會嘗試使用非常適合tensorcore的布局。然后,我們會嘗試避免任何布局轉換,應用一系列典型的編譯器傳遞,然后在此基礎上進行轉換,基于分析轉到llvm ir。

這是非常高層次的,但這就是編譯器的工作原理。嗯,這就是我想告訴你的全部內容。Triton正在完全開源的情況下進行開發,非常歡迎貢獻者。我們每個月都會舉行社區會議。

Triton IR本身對硬件無關。但是,如果你把一個在目標上運行良好的內核拿過來,你可能需要重新調整它,以便在另一個目標上運行良好。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1378

    瀏覽量

    40339
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4760

    瀏覽量

    129131
  • Triton
    +關注

    關注

    0

    文章

    28

    瀏覽量

    7049
  • 編譯器
    +關注

    關注

    1

    文章

    1638

    瀏覽量

    49197
  • 深度學習
    +關注

    關注

    73

    文章

    5510

    瀏覽量

    121335

原文標題:《PytorchConference2023 翻譯系列》6-Triton編譯器

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    編譯器是如何工作的_編譯器的工作過程詳解

    隨著計算機的發展,編譯器已經發揮著十分重要的作用。本文主要介紹了編譯器的種類、編譯器的工作原理以及編譯器工作的具體操作過程及步驟詳解。
    發表于 12-19 12:54 ?1.6w次閱讀

    王垠談編譯器

    由于早期的 Lisp 編譯器生成的代碼效率普遍低下,成為了 Lisp 失敗的主要原因之一。而現在的高性能 Lisp 編譯器(比
    的頭像 發表于 03-30 10:45 ?2106次閱讀

    交叉編譯器安裝教程

    交叉編譯器中“交叉”的意思就是在一個架構上編譯另外一個架構的代碼,相當于兩種架構“交叉”起來了。Ubuntu 自帶的 gcc 編譯器是針對 X86 架構的,而我們現在要編譯的是 ARM
    的頭像 發表于 09-29 09:12 ?3554次閱讀

    編譯器的優化選項

    一個程序首先要保證正確性,在保證正確性的基礎上,性能也是一個重要的考量。要編寫高性能的程序,第一,必須選擇合適的算法和數據結構;第二,應該編寫編譯器能夠有效優化以轉換成高效可執行代碼的源代碼,要做到
    的頭像 發表于 11-24 15:37 ?937次閱讀
    <b class='flag-5'>編譯器</b>的優化選項

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個可擴展和可定制的編譯器框架,允許開發者添加新的編程語言
    的頭像 發表于 12-24 17:23 ?487次閱讀

    Triton編譯器與其他編譯器的比較

    Triton編譯器與其他編譯器的比較主要體現在以下幾個方面: 一、定位與目標 Triton編譯器 : 定位:專注于深度學習中最核心、最耗時的
    的頭像 發表于 12-24 17:25 ?409次閱讀

    Triton編譯器支持的編程語言

    Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過Python接口提供了對Triton
    的頭像 發表于 12-24 17:33 ?392次閱讀

    Triton編譯器安裝步驟詳解

    1. 系統要求 在開始安裝之前,請確保您的系統滿足以下要求: 操作系統 :支持 Linux 或 Windows(通過 WSL 或 Cygwin)。 編譯器 :GCC 或 Clang。 CMake
    的頭像 發表于 12-24 17:35 ?401次閱讀

    Triton編譯器的常見問題解決方案

    Triton編譯器作為一款專注于深度學習的高性能GPU編程工具,在使用過程中可能會遇到一些常見問題。以下是一些常見問題的解決方案: 一、安裝與依賴問題 檢查Python版本 Triton
    的頭像 發表于 12-24 18:04 ?570次閱讀

    Triton編譯器在機器學習中的應用

    1. Triton編譯器概述 Triton編譯器是NVIDIA Triton推理服務平臺的一部分,它負責將深度學習模型轉換為優化的格式,以便
    的頭像 發表于 12-24 18:13 ?441次閱讀

    Triton編譯器的優勢與劣勢分析

    Triton編譯器作為一種新興的深度學習編譯器,具有一系列顯著的優勢,同時也存在一些潛在的劣勢。以下是對Triton編譯器優勢與劣勢的分析:
    的頭像 發表于 12-25 09:07 ?301次閱讀

    Triton編譯器的優化技巧

    在現代計算環境中,編譯器性能對于軟件的運行效率至關重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優化技術,以確保生成的
    的頭像 發表于 12-25 09:09 ?262次閱讀

    Triton編譯器在高性能計算中的應用

    性能計算(High-Performance Computing,HPC)是現代科學研究和工程計算中不可或缺的一部分。隨著計算需求的不斷增長,對計算資源的要求也越來越高。Triton編譯器作為一種
    的頭像 發表于 12-25 09:11 ?280次閱讀

    Triton編譯器如何提升編程效率

    在現代軟件開發中,編譯器扮演著至關重要的角色。它們不僅將高級語言代碼轉換為機器可執行的代碼,還通過各種優化技術提升程序的性能Triton 編譯器作為一種先進的
    的頭像 發表于 12-25 09:12 ?273次閱讀

    Triton編譯器與GPU編程的結合應用

    Triton編譯器簡介 Triton編譯器是一種針對并行計算優化的編譯器,它能夠自動將高級語言代碼轉換為針對特定硬件優化的低級代碼。
    的頭像 發表于 12-25 09:13 ?274次閱讀
    主站蜘蛛池模板: 黄色三级三级三级免费看| 精品欧美小视频在线观看| 在线观看精品国产福利片100| 日本不卡视频一区二区| 超h 高h 污肉男男| 夜色福利久久久久久777777| 亚洲高清国产一线久久| 色婷婷亚洲精品综合影院| 日韩一级一欧美一级国产| 欧美一区a| 波多野结衣中文字幕教师| 国产午夜精品一区二区三区| 成人理伦| 日韩孕交| 亚洲成网| 欧洲一级鲁丝片免费| 激情五月综合婷婷| 4hc44www四虎永久| 日本加勒比官网| bt天堂新版中文在线地址| 91在线免费视频| 最新版天堂中文在线官网| 五月婷婷啪啪| 免费观看一级成人毛片| 日韩图区| 久久综合中文字幕| bt种子天堂| 超级狂色而且免费又超好看| 午夜影院在线观看| 国产亚洲精品aaa大片| 91国在线啪精品一区| 高h细节肉爽文bl文| 色午夜影院| 国产在线97色永久免费视频| 午夜免费福利视频| 丁香亚洲综合五月天婷婷| 亚洲日本一区二区三区| 午夜性影院| 狠狠做久久深爱婷婷97动漫 | 亚洲专区一| 亚洲成人一级片|