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

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

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

3天內不再提示

如何設計MLIR的Dialect來在GPU上生成高性能的代碼?

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-05-10 14:57 ? 次閱讀

前言

為什么又要開一個新坑?原因是,最近在做的項目都是和MLIR有關,并且發現自己已經在MLIR的研發道路上越走越遠了。剛剛好前段時間大家都在跟風各種GPT,就去看了看openai目前放出來的產品,無意間發現了triton這把瑞士軍刀。其實早在一些年前就聽過triton,那會的triton代碼還沒有被MLIR進行重構,代碼內部的某些邏輯寫的也沒有看的很明白,結合"Triton: An Intermediate Language and Compiler for Tiled Neural Network Computations"這篇論文其實也沒有看出太多新的東西。這次在重新撿起來看的時候,發現其中很多不錯的優化,其實還是抱著學習如何設計MLIR的Dialect來在GPU上生成高性能的代碼為初衷,來對triton進行一個深入的分析。

什么是Triton?

Triton是openai針對gpu上的算子優化提出的一個programming language & compiler。以NVIDIA GPU為例,使用triton可以越過cuda的閉源生態,直接將自己的后端接入llvm IR,通過走NVPTX來生成在GPU上的代碼。這樣做相比傳統的手寫cuda代碼的好處是可以不需要借助NVIDIA的nvcc compiler就可以得到在GPU上能跑的machine code。同時,triton的一些設計理念對于 不管是深度學習領域還是其他數據科學領域來做高性能計算來說都可以提供豐富的指導意義。同時,triton不僅僅只支持nv的gpu,它同時對amd的gpu,intel的gpu都會推出后續的支持方案,這其所就彰顯出了mlir的優勢,可以通過設計Dialect來支持更多的后端。

源碼編譯Triton

接下來帶大家一起從源碼來編譯下triton的代碼,后續我準備分為幾章,對triton的設計以及具體的優化細節展開分析,能夠給大家一個較為全面的理解。畢竟triton作為mlir中為數不多成功的end-to-end的例子,對于編譯技術和系統優化的研究者或者工程師來說,都是不可或缺的好資料了。

0x0 先去官網clone triton的官方repo

$gitclonehttps://github.com/openai/triton.git
$cdtriton
$gitcheckout132fe1bb01e0a734d39c60835c76da257dbe7151

0x1 安裝第三方依賴

Triton 整個源碼編譯的過程中,需要使用到兩個最為重要的依賴,一個是llvm,一個是pybind11,我在編譯和構建triton的過程中,都是通過手動將llvm和pybind11編譯安裝好后,在編譯triton的過程中通過CMakLists.txt來指定對應的路徑。

0x10 LLVM的下載與配置

為什么要使用llvm?其實大家都知道,這就是triton最吸引人的地方,通過將高層的python代碼一步一步lower到llvm IR,然后通過llvm生態得到最終可以跑在具體設備上的machine code,將llvm作為最重要的后端,并且triton內部的實現也被MLIR進行重構,MLIR剛剛好也是llvm中非常重要的一個子項目。那么,llvm的安裝對于想要基于triton來進行二次開發的工程師或者研究人員來說就顯得非常重要了。

$gitclonehttps://github.com/llvm/llvm-project
$cdllvm-project
$gitcheckoutf733b4fb9b8b
$mkdirbuild
$cdbuild
$cmake-GNinja../llvm
-DLLVM_ENABLE_PROJECTS=mlir
-DLLVM_BUILD_EXAMPLES=ON
-DLLVM_TARGETS_TO_BUILD="X86;NVPTX;RISCV;AMDGPU"
-DMLIR_ENABLE_CUDA_RUNNER=ON
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_ASSERTIONS=ON
-DCMAKE_C_COMPILER=clang
-DCMAKE_CXX_COMPILER=clang++
-DLLVM_ENABLE_RTTI=ON
-DLLVM_INSTALL_UTILS=ON
-DMLIR_INCLUDE_INTEGRATION_TESTS=ON

ninja-j8
sudoninjainstall

經過一定時間的等待,就可以將llvm裝好了

0x11 pybind11的下載與配置

為什么要使用pybind11?pybind11已經是目前主流的ai開發工具中必不可少的組件了。大部分的框架都以python的DSL暴露給用戶,然后用戶通過寫對應的python語法,調用已經用C++/CUDA或者assemble寫好的高性能組件。那么,裝配pybind11的目的就是為了能夠讓我們通過import triton,然后絲滑調用對應的python api來完成高性能算子生成的任務。

$pipinstallpytest
$gitclonehttps://github.com/pybind/pybind11.git
$cdpybind11
$mkdirbuild
$cdbuild
$cmake..
$makecheck-j8
$sudomakeinstall

0x2 編譯Triton

$cdtriton
$vimCMakeLists.txt(option(TRITON_BUILD_PYTHON_MODULE"BuildPythonTritonbindings"ON))
$mkdirbuild
$cdbuild
$cmake..
$make-j8
c53e544c-eeff-11ed-90ce-dac502259ad0.pngimg

編輯切換為居中

添加圖片注釋,不超過 140 字(可選)

可以看到最終生成了一個.so文件,libtriton.so

那么接下來只要將libtriton.so文件移動到triton/python/triton/_C目錄下,將triton的python路徑下入bashrc

exportTRITON_HOME=/home/Documents/compiler/triton
exportPYTHONPATH=$TRITON_HOME/python:${PYTHONPATH}

然后通過簡單的import triton,沒有任何錯誤則可以通過triton進行開發了

c5670180-eeff-11ed-90ce-dac502259ad0.pngimg

編輯切換為居中

添加圖片注釋,不超過 140 字(可選)

接下來進入triton/python/tutorials,隨便找一個例子進行驗證,這里我們選擇最常見和實用的03-matrix-multiplication.py,直接python 03-matrix-multiplication.py,稍等片刻則可以得到最終結果。

c579b41a-eeff-11ed-90ce-dac502259ad0.pngimg

編輯

添加圖片注釋,不超過 140 字(可選)

可以看到,triton最終生成的代碼,在3090上,對應單batch的gemm在部分size上已經超過了cuBLAS。

同時,可以在build目錄下去檢查對應的三個bin tool: triton-opt, triton-reduce, triton-translate

然后將本機下的ptxas復制到該build目錄下,我的ptxas在(/usr/local/cuda-11.6/bin)下。關于這些工具的使用將會在后續的解讀中根據不同層的dialect之間的conversion來進行詳細介紹。

0x3 為什么采用這樣的編譯方式?

其實有的同學說,直接按照triton教程里的pip install -e . 不就行了么?這樣做的原因是因為后續我們需要對triton以及對應的llvm進行改進,每次改進后,都需要對triton和llvm分別進行編譯。這種分離的方式,可以使得我們在改進完對應的llvm代碼或者triton的源碼后,分步編譯,然后再整合成一個新的shared library (libtriton.so)

在后續的教程中,我將會從triton的frontend, optimizer,backend來作為切入點,分別講講triton是如何通過將用戶手寫的python dsl編譯成能跑在gpu上的machine code的。

Triton目前的設計

從triton的源碼來看,triton目前在NV的GPU上已經有了一套自己比較成熟的mapping路線,通過先對python語言層,也就是triton DSL進行抽象,得到AST,然后將AST中的每個節點lower到Triton Dialect上,Triton Dialect則是一個比較貼近上層語言表達的IR,他的主要作用則是為了保持用戶在書寫對應算法時的準確性。接下來會進一步被map到TritonGPU Dialect上,那么TritonGPU Dialect則是一個更加貼近GPU層面的IR,它則是為了具體的性能優化而設計。圖中其他的藍色模塊,比如SCF,Arith,Tensor等都是MLIR生態中已經被實現好并且廣為使用的Dialect。

這些Dialect會一起和TritonGPU Dialect共存,然后被lower到對應的LLVM Dialect,LLVM Dialect則是最貼近LLVM IR的一層設計,從LLVM Dialect到LLVM IR的轉換是非常容易的,最終代碼就會被接入到LLVM的NVPTX的后端,從而生成后續能跑在GPU上的高性能machine code.

c5962668-eeff-11ed-90ce-dac502259ad0.pngimg

編輯切換為居中

添加圖片注釋,不超過 140 字(可選)

Triton 未來的支持

通過下圖可以看到,triton的未來計劃和大多數的compiler有著一樣的發展藍圖,向上去支持各種各樣具有不同表達能力的前端。向下對接各種不同廠商的hardware,最終將一個application高效的map到一個硬件上。

從哦的

c5ba0b6e-eeff-11ed-90ce-dac502259ad0.pngimg

編輯切換為居中





審核編輯:劉清

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

    關注

    28

    文章

    4744

    瀏覽量

    129018
  • Triton
    +關注

    關注

    0

    文章

    28

    瀏覽量

    7045

原文標題:OpenAI/Triton MLIR 第零章: 源碼編譯

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

收藏 人收藏

    評論

    相關推薦

    如何編寫高性能的Rust代碼

    為了最大限度地提高Rust應用程序的性能,你需要了解支持代碼的底層硬件架構,如何優化算法和數據結構,以及如何對代碼進行配置和基準測試。本文中,我們將簡要介紹這些主題,希望能更好地理解
    的頭像 發表于 11-03 14:28 ?853次閱讀
    如何編寫<b class='flag-5'>高性能</b>的Rust<b class='flag-5'>代碼</b>

    AMD GPU如何安裝和配置triton?

    最近在整理python-based的benchmark代碼,反過來NV的GPU又把Triton裝了一遍,發現Triton的github repo已經給出了對應的llvm的commi
    的頭像 發表于 02-22 17:04 ?2422次閱讀
    <b class='flag-5'>在</b>AMD <b class='flag-5'>GPU</b><b class='flag-5'>上</b>如何安裝和配置triton?

    TPU-MLIR開發環境配置時出現的各種問題求解

    /workspace/model-zoo 2.4. 代碼編譯? docker的容器中, 代碼編譯方式如下: $ cd tpu-mlir$ source ./envsetup.sh$
    發表于 01-10 08:02

    名單公布!【書籍評測活動NO.43】 算力芯片 | 高性能 CPU/GPU/NPU 微架構分析

    力,全球范圍內,對于推動科技進步、經濟發展及社會整體的運作具有至關重要的作用。隨著信息技術的高速發展,高性能計算(HPC)和人工智能(AI)等技術多個領域的應用變得日益廣泛,芯片算力成為支持這些
    發表于 09-02 10:09

    GPU

    的核心處理器。GPU是顯卡的“心臟”,也就相當于CPU電腦中的作用,它決定了該顯卡的檔次和大部分性能,同時也是2D顯示卡和3D顯示卡的區別依據。圖形處理芯片。GPU能夠從硬件
    發表于 01-16 08:59

    NVIDIA火熱招聘GPU高性能計算架構師

    GPU架構設計者提供反饋,以改善和推進未來GPU的架構設計基本要求(其一即可): * 嚴謹的邏輯思維和分析能力* 有CUDA代碼調優經驗(或者SIMD等架構的調優經驗)* 熟悉矩陣計算的優化和加速* 較強C++編程能力、算法分析
    發表于 09-01 17:22

    探求NVIDIA GPU極限性能的利器

    1、探求 NVIDIA GPU 極限性能的利器  通常的 CUDA 編程中,用戶主要通過 CUDA C/C++ 或 python 語言實現 CUDA 功能的調用。 NVIDIA 對
    發表于 10-11 14:35

    如何使用iMX8mmini提高GPU性能

    支持 1000 MHz)。我需要幫助提高 GPU 性能,即將 GPU 頻率提高到 800 MHz。目前我正在使用內核 5.4.142,以下是 GP
    發表于 04-18 07:17

    智能網卡簡介及其高性能計算中的作用

    最先進的人工智能模型不到五年的時間內經歷了超過 5,000 倍的規模擴展。這些 AI 模型嚴重依賴復雜的計算和大量內存實現高性能深度神經網絡 (DNN)。只有使用 CPU、GPU
    發表于 07-28 10:10

    【開源硬件】從PyTorch到RTL - 基于MLIR的高層次綜合技術

    決FPGA的可編程性問題,實現從算法到RTL設計的快速編譯,我們引入了基于MLIR(多級別中間表示)的高層次綜合框架ScaleHLS,對算法的高層次描述進行多級別的抽象和優化,并生成高性能的RTL實現。 本次
    的頭像 發表于 11-24 08:15 ?1942次閱讀

    ClaudeMLIR代碼分析完全超越了ChatGPT

    EliminateAllocOpsPass用來消除IR中的無效memref.alloc指令,AppendOneFlowStreamPass給GPU相關的函數添加GPU啟動kernel需要
    的頭像 發表于 04-19 10:25 ?1295次閱讀

    ClaudeMLIR代碼分析完全超越了ChatGPT并表現十分驚艷

    EliminateAllocOpsPass用來消除IR中的無效memref.alloc指令,AppendOneFlowStreamPass給GPU相關的函數添加GPU啟動kernel需要
    的頭像 發表于 04-24 14:28 ?3241次閱讀
    Claude<b class='flag-5'>在</b><b class='flag-5'>MLIR</b><b class='flag-5'>代碼</b>分析<b class='flag-5'>上</b>完全超越了ChatGPT并表現十分驚艷

    TPU-MLIR之量化感知訓練

    TPU-MLIR之量化感知訓練(
    的頭像 發表于 08-21 10:47 ?819次閱讀
    TPU-<b class='flag-5'>MLIR</b>之量化感知訓練

    如何適配新架構?TPU-MLIR代碼生成CodeGen全解析!

    背景介紹TPU-MLIR的CodeGen是BModel生成的最后一步,該過程目的是將MLIR文件轉換成最終的Bmodel。本文介紹了CodeGen的基本原理和流程,并記錄了針對BM1684X等新架構
    的頭像 發表于 11-02 08:34 ?1730次閱讀
    如何適配新架構?TPU-<b class='flag-5'>MLIR</b><b class='flag-5'>代碼</b><b class='flag-5'>生成</b>CodeGen全解析!

    GPU高性能服務器配置

    GPU高性能服務器作為提升計算速度和效率的關鍵設備,各大應用場景中發揮著越來越重要的作用。在此,petacloud.ai小編為你介紹GPU高性能
    的頭像 發表于 10-21 10:42 ?230次閱讀
    主站蜘蛛池模板: 超h高h文污肉| 午夜爽爽爽| 亚洲影视一区二区| 丁香婷婷啪啪| 亚洲黄网站wwwwww| 精品热99| 亚洲精品黄色| 日韩一级欧美一级| 你懂的在线免费| 国产一级做a爰片久久毛片| 国产高清视频在线免费观看| 大黄香蕉| 色视频免费在线| 亚洲va老文色欧美黄大片人人| 正在播放一区二区| 国产成人精品三级在线| 婷婷六月激情| 久久夜色精品国产亚洲噜噜| 成人观看网站a| 天天干中文字幕| 国产伦精品一区二区三区女| 91av免费观看| 亚洲欧美国产视频| 欧美色图久久| sihu在线| 九月色婷婷| 亚洲男人的性天堂| 五月婷婷中文字幕| 久久精品国产亚洲5555| 亚洲午夜久久| 67194最新网址| 禁网站在线观看免费视频| 生活片毛片| 国产女人视频| 免费理论片在线观看播放| 中文字幕一区二区三区在线不卡| 伊人成人在线| 欧美精品国产第一区二区| 在线视频精品免费| 综合啪啪| 香蕉婷婷|