女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TVM編譯器的整體架構(gòu)和基本方法

FPGA之家 ? 來源:AI加速 ? 2023-11-30 09:36 ? 次閱讀

引言

有將近兩個(gè)月沒有學(xué)習(xí)一些新東西,更新一下博客了。一直在忙公司的一個(gè)項(xiàng)目,是做一款支持LSTM和RNN的通用架構(gòu)加速IP。自己恰好負(fù)責(zé)指令編譯工作,雖然開始的指令比較粗糙,沒有一套完整的編譯器架構(gòu)。但是這其中也去思考了一下基于FPGA加速器的編譯器架構(gòu)。在FPGA深度學(xué)習(xí)加速器中,編譯器除了需要自動(dòng)化生成指令外,還要優(yōu)化指令的結(jié)構(gòu),來最大化加速器性能。TVM是一個(gè)支持GPU、CPU、FPGA指令生成的開源編譯器框架,雖然在我們自己的加速IP上無法直接拿過來用,但是其中的很多方法和思想還是很值得借鑒的。TVM最大的特點(diǎn)是基于圖和算符結(jié)構(gòu)來優(yōu)化指令生成,最大化硬件執(zhí)行效率。其中使用了很多方法來改善硬件執(zhí)行速度,包括算符融合、數(shù)據(jù)規(guī)劃、基于機(jī)器學(xué)習(xí)的優(yōu)化器等。它向上對(duì)接Tensorflow、Pytorch等深度學(xué)習(xí)框架,向下兼容GPU、CPU、ARM、TPU等硬件設(shè)備。

1. 整體結(jié)構(gòu)

0495a300-8f11-11ee-939d-92fbcf53809c.png

TVM是一個(gè)端到端的指令生成器。它從深度學(xué)習(xí)框架中接收模型輸入,然后進(jìn)行圖的轉(zhuǎn)化和基本的優(yōu)化,最后生成指令完成到硬件的部署。整個(gè)架構(gòu)是基于圖描述結(jié)構(gòu),不論是對(duì)指令的優(yōu)化還是指令生成,一個(gè)圖結(jié)構(gòu)清晰的描述了數(shù)據(jù)流方向,操作之間的依賴關(guān)系等。基于機(jī)器學(xué)習(xí)的優(yōu)化器是優(yōu)化過程中的重點(diǎn),指令空間很大,通過優(yōu)化函數(shù)來尋找最優(yōu)值是一個(gè)很合理的想法。它的主要特點(diǎn)如下:

1) 基于GPU、TPU等硬件結(jié)構(gòu),將張量運(yùn)算作為一個(gè)基本的算符,通過把一個(gè)深度學(xué)習(xí)網(wǎng)絡(luò)描述成圖結(jié)構(gòu)來抽象出數(shù)據(jù)計(jì)算流程。在這樣的圖結(jié)構(gòu)基礎(chǔ)上,更方便記性優(yōu)化。同時(shí)能夠有更好的向上向下兼容性,同時(shí)支持多種深度學(xué)習(xí)框架和硬件架構(gòu)。

2) 巨大的優(yōu)化搜索空間。在優(yōu)化圖結(jié)構(gòu)方面,其不再局限于通過某一種方式,而是通過機(jī)器學(xué)習(xí)方法來搜索可能的空間來最大化部署效率。這種方式雖然會(huì)導(dǎo)致編譯器較大的計(jì)算量,但是更加通用。

TVM提供了一個(gè)非常簡單的端到端用戶接口,通過調(diào)用TVM的API可以很方便的進(jìn)行硬件部署。比如:

04a6b852-8f11-11ee-939d-92fbcf53809c.png

以上就是將Keras的模型輸入到TVM,指定部署的硬件GPU,然后進(jìn)行優(yōu)化和代碼生成。

TVM也提供了Java、C++Python界面供用戶調(diào)用。

2. 圖結(jié)構(gòu)基本優(yōu)化

圖結(jié)構(gòu)是大多數(shù)深度學(xué)習(xí)框架中普遍采用的描述方式。這種圖是一種高層次的描述,將一個(gè)張量運(yùn)算用一個(gè)算符描述,而不是拆分的更細(xì)。這樣更有利于優(yōu)化,而且也符合GPU、TPU的硬件架構(gòu),在這些芯片中計(jì)算核算力很大,通??梢酝瓿梢粋€(gè)較大的計(jì)算,比如卷積、矩陣運(yùn)算等。以下是一個(gè)卷積計(jì)算的例子,整個(gè)計(jì)算圖包含了2D卷積、ReLu,dense、softmas等。這樣的圖結(jié)構(gòu)也正好符合FPGA加速器的結(jié)構(gòu),在FPGA中也是用一個(gè)計(jì)算核來專門計(jì)算某個(gè)大的計(jì)算。TVM圖中節(jié)點(diǎn)描述一個(gè)張量數(shù)據(jù)或者算符,而邊表示了不同計(jì)算的依賴關(guān)系。

04c09290-8f11-11ee-939d-92fbcf53809c.png

基于圖結(jié)構(gòu),TVM采用了很多圖優(yōu)化策略。包括算符融合,將可以在硬件上用一個(gè)算符完成的多個(gè)連續(xù)運(yùn)算合并;常量折疊,將可以預(yù)先計(jì)算的數(shù)據(jù)放在編譯器中完成,減少硬件計(jì)算;存儲(chǔ)規(guī)劃,預(yù)先為中間數(shù)據(jù)分配存儲(chǔ)空間來儲(chǔ)存中間值,避免中間數(shù)據(jù)無法存儲(chǔ)在片上而增加片外存儲(chǔ)開銷;數(shù)據(jù)規(guī)劃,重新排列數(shù)據(jù)有利于硬件計(jì)算。

1) 算符融合

TVM中將運(yùn)算劃分為4種:1對(duì)1運(yùn)算,比如加法、點(diǎn)乘;降運(yùn)算,比如累加;復(fù)雜運(yùn)算,比如2D卷積,融合了乘法和累加;不透明的,比如分類、數(shù)據(jù)排列等,這些不能被融合。算符融合可以減少存儲(chǔ)開銷,實(shí)現(xiàn)pipeline,特別是在FPGA中更有利。比如我們目前的項(xiàng)目中是開發(fā)一款通用RNN架構(gòu)IP,其中涉及到矩陣乘法,加法。其中加法就可以融合到矩陣乘中,這樣就減少了單獨(dú)加法模塊計(jì)算開銷以及讀寫cache開銷。

2) 數(shù)據(jù)規(guī)劃

以我們XRNN來說,片上有一個(gè)矩陣運(yùn)算陣列,由于陣列大小固定,一次計(jì)算矩陣大小也是固定的。比如計(jì)算一個(gè)32x32對(duì)應(yīng)32x1的矩陣向量乘法,那么就要求權(quán)重和向量必須要按照32倍數(shù)進(jìn)行對(duì)齊,這就需要對(duì)權(quán)重?cái)?shù)據(jù)等進(jìn)行規(guī)劃。

3. 張量計(jì)算

TVM中使用的張量描述語言是透明的,可以根據(jù)硬件需要進(jìn)行修改。這樣更加靈活和有利于進(jìn)行優(yōu)化。但是這樣可能增加了編譯器優(yōu)化的復(fù)雜性。TVM描述例子如下:

04d28dd8-8f11-11ee-939d-92fbcf53809c.png

描述算符中包含結(jié)果大小,計(jì)算方式。但是這其中沒有涉及到循環(huán)結(jié)構(gòu)和更多數(shù)據(jù)操作細(xì)節(jié)。TVM采用了Halide思想,通過使用schedule來對(duì)張量計(jì)算進(jìn)行等價(jià)變換,從中計(jì)算出執(zhí)行效率最高的schedule結(jié)構(gòu)。整個(gè)schedule流程如下圖:

04e9f66c-8f11-11ee-939d-92fbcf53809c.png

從中可以看出,TVM除了采用了Halide的schedule方式外,還增加了三種針對(duì)GPU和TPU的schedule方式:specile memory scope,tensorization,latency hiding。這些schedule方式可以對(duì)一個(gè)張量運(yùn)算進(jìn)行等價(jià)變換,產(chǎn)生多種代碼結(jié)構(gòu),從中選擇出最有利于硬件執(zhí)行的代碼結(jié)構(gòu)。

3.1 并行優(yōu)化

并行計(jì)算是提高硬件執(zhí)行效率的重要一步,因?yàn)橹T如卷積、矩陣計(jì)算等都是大量的可以并發(fā)進(jìn)行的計(jì)算,如何優(yōu)化并行結(jié)構(gòu)對(duì)改善硬件性能很關(guān)鍵。在這里需要考慮兩點(diǎn)問題:一個(gè)是并行度,另外一個(gè)是數(shù)據(jù)共享。如果數(shù)據(jù)不共享那么就會(huì)增加數(shù)據(jù)讀寫消耗。而盡量利用可共享數(shù)據(jù),則需要盡心設(shè)計(jì)一個(gè)計(jì)算結(jié)構(gòu)。

TVM提出了memory scope的概念,其將數(shù)據(jù)計(jì)算進(jìn)行可并行和不可并行分類,對(duì)于可以并行計(jì)算的,就可以使用多線程來并行計(jì)算,而不可并行,則需要等待被依賴數(shù)據(jù)計(jì)算完成。比如一個(gè)矩陣乘法例子:

050145ec-8f11-11ee-939d-92fbcf53809c.jpg

在XRNN中也會(huì)遇到類似的問題,對(duì)于不同的計(jì)算比如矩陣乘法和激活函數(shù),如果沒有依賴的話,就是可以并行執(zhí)行的。

3.2 存儲(chǔ)讀寫優(yōu)化

在FPGA中讀寫cache或者external ddr也是一筆開銷。如何將存儲(chǔ)讀寫開銷降低也有利于提高硬件執(zhí)行效率。比如在我們的XRNN中,save數(shù)據(jù)到ddr會(huì)消耗很多時(shí)間,而這個(gè)數(shù)據(jù)下一次又會(huì)被利用,同時(shí)又增加了load的時(shí)間。如果將數(shù)據(jù)緩存到片上,那么就減少了load和save開銷。還有比如片上cache也會(huì)來回讀寫數(shù)據(jù),如果可以將一個(gè)計(jì)算完成的數(shù)據(jù)直接送給下一個(gè)計(jì)算核,實(shí)現(xiàn)流水,那么讀寫cache開銷也節(jié)省了。

對(duì)于隱藏存儲(chǔ)讀寫開銷還有一種方法,在下一次計(jì)算開始前而這一次計(jì)算正在進(jìn)行的時(shí)候,就進(jìn)行片外數(shù)據(jù)加載,就將加載和計(jì)算重合了,減少額外加載消耗的時(shí)間。

050c8114-8f11-11ee-939d-92fbcf53809c.png

4. 自動(dòng)優(yōu)化器

TVM在豐富的schedule方式基礎(chǔ)上,提出了一個(gè)機(jī)器學(xué)習(xí)模型來尋找最優(yōu)化的schedule結(jié)構(gòu)。其包含兩部分:一部分是基于schedule方式產(chǎn)生所有可能的計(jì)算結(jié)構(gòu);另外一個(gè)是機(jī)器學(xué)習(xí)代駕模型來預(yù)測(cè)性能。

Schedule空間是巨大的,它可能產(chǎn)生很多種計(jì)算流結(jié)構(gòu),而對(duì)其中進(jìn)行探索,找到最合適的結(jié)構(gòu)。這會(huì)產(chǎn)生大量的計(jì)算。不過在我們的XRNN結(jié)構(gòu)中,因?yàn)槭艿接布?nèi)核的限制,還是可以對(duì)空間進(jìn)行縮減的。只采用最可能影響性能schedule方式。比如矩陣乘、加法、點(diǎn)乘、激活這些不同的計(jì)算可以進(jìn)行并發(fā)和非并發(fā)安排,這樣的空間相對(duì)小,有利于加速編譯器生成工作。

機(jī)器學(xué)習(xí)代價(jià)模型主要考慮了不同操作的延時(shí)來預(yù)測(cè)性能:存儲(chǔ)訪問方式,數(shù)據(jù)重利用,pipeline等。TVM中對(duì)代價(jià)函數(shù)的求解不是通過隨機(jī)統(tǒng)計(jì)方式,而是使用實(shí)時(shí)的配置數(shù)據(jù)進(jìn)行訓(xùn)練,周期性更替代碼結(jié)構(gòu)。人為的探尋更合理的優(yōu)化結(jié)構(gòu),然后提供給模型,讓其不斷更替。這種方式避免了探索大量schedule空間的時(shí)間消耗,同時(shí)也能更接近于實(shí)際情況。

053ea3b0-8f11-11ee-939d-92fbcf53809c.png

總結(jié)

以上簡要介紹了TVM的整體架構(gòu)和基本方法,其實(shí)還挺符合FPGA加速硬件結(jié)構(gòu)的。很多方法還是可以借用的。而且TVM是一個(gè)兼容更廣的編譯器架構(gòu),針對(duì)我們自身的FPGA特性,也會(huì)有很多不一樣的設(shè)計(jì)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1643

    文章

    21954

    瀏覽量

    613989
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11031

    瀏覽量

    215959
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1654

    瀏覽量

    49884
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5554

    瀏覽量

    122469

原文標(biāo)題:TVM編譯器

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TVM主要的編譯過程解析

    `  TVM主要的編譯過程如下圖:    Import:將tensorflow,onnx,pytorch等構(gòu)建的深度學(xué)習(xí)模型導(dǎo)入,轉(zhuǎn)化成TVM的中間層表示IR。  Lower:將高層IR表示轉(zhuǎn)化成
    發(fā)表于 01-07 16:59

    TVM整體結(jié)構(gòu),TVM代碼的基本構(gòu)成

    完整的編譯器架構(gòu)解決方案,它自定義了IR,對(duì)計(jì)算過程進(jìn)行了抽象化(包括算符,變量等),提供了一個(gè)完整的代碼生成和執(zhí)行框架,開發(fā)者完全可以在其框架內(nèi)改寫自己的編譯器?! ?b class='flag-5'>TVM
    發(fā)表于 01-07 17:21

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

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

    MPLAB? XC8 C編譯器架構(gòu)特性

    本視頻介紹了MPLAB? XC8 C編譯器架構(gòu)特性。該編譯器編譯過程不同于傳統(tǒng)的編譯器,采用了一種稱為"OCG(全知代碼生成)"的技術(shù)。
    的頭像 發(fā)表于 05-23 12:47 ?6570次閱讀
    MPLAB? XC8 C<b class='flag-5'>編譯器</b>的<b class='flag-5'>架構(gòu)</b>特性

    TVM編譯流程是什么

    TVM主要的編譯過程如下圖:Import:將tensorflow,onnx,pytorch等構(gòu)建的深度學(xué)習(xí)模型導(dǎo)入,轉(zhuǎn)化成TVM的中間層表示IR。Lower:將高層IR表示轉(zhuǎn)化成低階TIR表示。Codegen:內(nèi)存分配和硬件可執(zhí)
    的頭像 發(fā)表于 02-08 14:51 ?1932次閱讀
    <b class='flag-5'>TVM</b>的<b class='flag-5'>編譯</b>流程是什么

    TVM學(xué)習(xí)(三)編譯流程

    TVM主要的編譯過程如下圖:Import:將tensorflow,onnx,pytorch等構(gòu)建的深度學(xué)習(xí)模型導(dǎo)入,轉(zhuǎn)化成TVM的中間層表示IR。Lower:將高層IR表示轉(zhuǎn)化成低階TIR表示。Codegen:內(nèi)存分配和硬件可執(zhí)
    發(fā)表于 01-26 09:23 ?13次下載
    <b class='flag-5'>TVM</b>學(xué)習(xí)(三)<b class='flag-5'>編譯</b>流程

    基于C++編譯器的節(jié)點(diǎn)融合優(yōu)化方法

    LLVM是以C十十編寫的架構(gòu)編譯器的框架系統(tǒng),支持多后端和交叉編譯,用于優(yōu)化程序的編譯時(shí)間、鏈接時(shí)間、運(yùn)行時(shí)間和空閑時(shí)間。節(jié)點(diǎn)融合是一種簡單有效的優(yōu)化
    發(fā)表于 06-15 14:29 ?19次下載

    linux的系統(tǒng)移植——交叉編譯器

    1.為什么要有交叉編譯器?\qquad一般電腦是X86架構(gòu),而單片機(jī)一般不是,比如單片機(jī)是ARM架構(gòu),那么gcc編譯生成的程序只能在X86的架構(gòu)
    發(fā)表于 11-30 15:21 ?11次下載
    linux的系統(tǒng)移植——交叉<b class='flag-5'>編譯器</b>

    交叉編譯器安裝教程

    交叉編譯器中“交叉”的意思就是在一個(gè)架構(gòu)編譯另外一個(gè)架構(gòu)的代碼,相當(dāng)于兩種架構(gòu)“交叉”起來了。Ubuntu 自帶的 gcc
    的頭像 發(fā)表于 09-29 09:12 ?3896次閱讀

    領(lǐng)域編譯器發(fā)展的前世今生

    近年來,隨著GPU和DSA架構(gòu)在不同領(lǐng)域的廣泛應(yīng)用,特別是AI系統(tǒng)相關(guān)技術(shù)的飛速發(fā)展,對(duì)于編譯器的需求越來越強(qiáng)烈。編譯器已經(jīng)從一個(gè)相對(duì)小眾的研究領(lǐng)域,變?yōu)閷W(xué)界和業(yè)界都高度關(guān)注并大量投入的方向
    的頭像 發(fā)表于 02-03 10:37 ?2020次閱讀

    新版編譯器的設(shè)計(jì)思路和優(yōu)化方法

    小程序編譯器在小程序開發(fā)、預(yù)覽、發(fā)布各個(gè)階段都需要使用,因此編譯器性能會(huì)直接影響到開發(fā)者開發(fā)效率,也會(huì)影響到開發(fā)者工具的使用體驗(yàn)。 由于舊版的編譯器(基于 webpack4)在構(gòu)建大型項(xiàng)目時(shí)會(huì)很慢,內(nèi)存占用也高,一直被開發(fā)者吐槽
    發(fā)表于 10-13 11:21 ?465次閱讀
    新版<b class='flag-5'>編譯器</b>的設(shè)計(jì)思路和優(yōu)化<b class='flag-5'>方法</b>

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

    。以下是 Triton 編譯器的一些功能介紹和使用教程。 Triton 編譯器功能介紹 多語言支持 :Triton 支持多種編程語言,使得開發(fā)者可以在同一個(gè)編譯器框架下處理不同的語言。 模塊化
    的頭像 發(fā)表于 12-24 17:23 ?1490次閱讀

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

    Triton編譯器與其他編譯器的比較主要體現(xiàn)在以下幾個(gè)方面: 一、定位與目標(biāo) Triton編譯器 : 定位:專注于深度學(xué)習(xí)中最核心、最耗時(shí)的張量運(yùn)算的優(yōu)化。 目標(biāo):提供一個(gè)高度抽象、靈活、高效
    的頭像 發(fā)表于 12-24 17:25 ?882次閱讀

    Triton編譯器的優(yōu)化技巧

    在現(xiàn)代計(jì)算環(huán)境中,編譯器的性能對(duì)于軟件的運(yùn)行效率至關(guān)重要。Triton 編譯器作為一個(gè)先進(jìn)的編譯器框架,提供了一系列的優(yōu)化技術(shù),以確保生成的代碼既高效又適應(yīng)不同的硬件架構(gòu)。 1. 指令
    的頭像 發(fā)表于 12-25 09:09 ?769次閱讀