精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

【TVM 教程】編寫自定義 Pass 原創

發布于 2025-6-3 10:50
瀏覽
0收藏

Apache TVM是一個深度的深度學習編譯框架,適用于 CPU、GPU 和各種機器學習加速芯片。更多 TVM 中文文檔可訪問 →https://tvm.hyper.ai/

作者Jian Weng

TVM 是一個抽象出機器學習加速器異質性的框架,有時用戶希望自定義一些分析和 IR 轉換,使得 TVM 適應自己的專用硬件。本教程介紹如何在 TVM 中編寫自定義 Pass。

先決條件?

閱讀本教程前,假設讀者已經熟悉以下主題:

  • 在 TVM 中編寫算法并對其進行調度,若不熟悉,請參閱示例教程如?如何在 CPU 上優化 GEMM
  • 熟悉 HalideIR 的基本結構,若不熟悉,請參閱?HalideIR/src/ir/IR.h?了解定義了 IR 節點的哪些屬性。
  • 訪問器設計模式,若不熟悉,請參閱?Python AST 模塊?以查看 AST 訪問器的實現原理。
  • Schedule 如何降低為 IRModule 類或 LLVM 模塊。若不熟悉,請參閱?python/tvm/build_module.py?獲取相關基礎知識。
import tvm
from tvm import te
import numpy as np

首先編寫一個簡單的向量加法,并用默認 schedule 構建。然后,使用自定義的降低 pass 而非調度原語,來直接操作 IR。

n = tvm.tir.const(128, "int32")
a = te.placeholder((n,), name="a")
b = te.placeholder((n,), name="b")
c = te.compute((n,), lambda i: a[i] + b[i], name="c")

sch = te.create_schedule(c.op)
ir = tvm.lower(sch, [a, b, c])
print(ir)

輸出結果:

@main = primfn(a_1: handle, b_1: handle, c_1: handle) -> ()
  attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
  buffers = {a: Buffer(a_2: Pointer(float32), float32, [128], []),
             b: Buffer(b_2: Pointer(float32), float32, [128], []),
             c: Buffer(c_2: Pointer(float32), float32, [128], [])}
  buffer_map = {a_1: a, b_1: b, c_1: c}
  preflattened_buffer_map = {a_1: a_3: Buffer(a_2, float32, [128], []), b_1: b_3: Buffer(b_2, float32, [128], []), c_1: c_3: Buffer(c_2, float32, [128], [])} {
  for (i: int32, 0, 128) {
    c[i] = (a[i] + b[i])
  }
}

編寫 Pass?

本質上,「IR 轉換 pass」是將語句映射到新語句的函數。因此,我們要定義這個向量化函數,并逐步實現它。

TVM 為用戶提供了兩個類來分析和轉換 IR。

IR 訪問器?

可以用?tvm.tir.stmt_functor.post_order_visit(stmt, func)?從 Halide IR 中收集信息。?func?是一個回調函數,會在退出當前 IR 節點之前調用,即 post-order visit。然后存儲 IR 訪問的結果,因為?func?的返回值將被忽略。

備注

必須用數組來存儲 IR 訪問的結果。值甚至是一個單變量。這主要是由于 Python-C runtime 的限制,每次遞歸都會刷新變量值,但會保留數組值。

loops = []

def find_width8(op):
    """查找范圍可以被 8 整除的所有「tir.For」節點。"""
    if isinstance(op, tvm.tir.For):
        if isinstance(op.extent, tvm.tir.IntImm):
            if op.extent.value % 8 == 0:
                loops.append(op)

IR 轉換?

轉換接口與訪問器接口略有不同。訪問器中只有一個后序回調,但轉換訪問器同時支持前序回調和后序回調。若要保留原始 IR 節點,只需返回 None。若要將當前節點更改為某個節點,使用 TVM IR maker 接口構建,并返回這個值。

備注

若調用 pre-order 函數后返回一個非 None 的值,則將跳過 post-order 函數。

def vectorize8(op):
    """Split 可以向量化 `find_width8` 中的循環。"""
    if op in loops:
        extent = op.extent.value
        name = op.loop_var.name
        lo, li = te.var(name + ".outer"), te.var(name + ".inner")
        body = tvm.tir.stmt_functor.substitute(op.body, {op.loop_var: lo * 8 + li})
        body = tvm.tir.For(li, 0, 8, tvm.tir.ForKind.VECTORIZED, body)
        body = tvm.tir.For(lo, 0, extent // 8, tvm.tir.ForKind.SERIAL, body)
        return body
    return None

@tvm.tir.transform.prim_func_pass(opt_level=0)
def vectorize(f, mod, ctx):
    global loops

    tvm.tir.stmt_functor.post_order_visit(f.body, find_width8)

    if not loops:
        return f

    # 最后一個列表參數表示將轉換哪些類型的節點。
    # 在這種情況下,只有 `For` 節點會調用 `vectorize8`
    return f.with_body(tvm.tir.stmt_functor.ir_transform(f.body, None, vectorize8, ["tir.For"]))

對接低層(Glue to Lowering)?

到目前為止,已經完成了這個 IR 轉換 pass 的編寫。接下來將這個 pass 和 TVM 的底層 pass 對接。

在這種情況下,通過元組列表作為參數提供給?tir.add_lower_pass,將上面編寫的 pass 注入 TVM 標準較低級的 pass。「元組」表示降級的不同階段。 TVM 中有四個階段的降級,每個階段完成后,都會調用自定義的階段。

備注

以下是每個階段完成的基本轉換:

  • 階段 0 生成原始 IR 和循環級別。
  • 階段 1 扁平化數組存儲。
  • 階段 2 轉換循環,如展開、矢量化和線程綁定。
  • 階段 3 清理工作。

因此,這個轉換 pass 適合放在第 1 階段之后。

with tvm.transform.PassContext(config={"tir.add_lower_pass": [(1, vectorize)]}):
    print(tvm.lower(sch, [a, b, c]))

輸出結果:

@main = primfn(a_1: handle, b_1: handle, c_1: handle) -> ()
  attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
  buffers = {a: Buffer(a_2: Pointer(float32), float32, [128], []),
             b: Buffer(b_2: Pointer(float32), float32, [128], []),
             c: Buffer(c_2: Pointer(float32), float32, [128], [])}
  buffer_map = {a_1: a, b_1: b, c_1: c}
  preflattened_buffer_map = {a_1: a_3: Buffer(a_2, float32, [128], []), b_1: b_3: Buffer(b_2, float32, [128], []), c_1: c_3: Buffer(c_2, float32, [128], [])} {
  for (i.outer: int32, 0, 16) {
    let cse_var_1: int32 = (i.outer*8)
    c[ramp(cse_var_1, 1, 8)] = (a[ramp(cse_var_1, 1, 8)] + b[ramp(cse_var_1, 1, 8)])
  }
}

快速回顧?

快速回顧本教程有關編寫自定義 IR 轉換 pass:

  • 用?tvm.tir.stmt_functor.post_order_visit?收集每個 IR 節點的信息。
  • 用?tvm.tir.stmt_functor.ir_transform?轉換 IR 節點。
  • 總結以上兩點來編寫一個 IR 轉換函數。
  • 用?tvm.transform.PassContext?將此函數放入 TVM 降級 pass。

下載 Python 源代碼:low_level_custom_pass.py

下載 Jupyter Notebook:low_level_custom_pass.ipynb

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
www 日韩| 国产性生活视频| 在线视频亚洲欧美中文| 亚洲国产成人tv| 欧洲精品码一区二区三区免费看| 国产精品第六页| 伊人情人综合网| 亚洲精品久久久久久久久| 亚洲 中文字幕 日韩 无码| 欧美高清视频| 91在线观看下载| 成人免费直播live| 二区视频在线观看| 亚洲人体av| 亚洲欧美激情精品一区二区| 91香蕉视频免费看| 欧美黑人巨大xxxxx| 亚洲免费观看高清| 欧美一级爽aaaaa大片| av免费观看在线| 视频一区视频二区中文| 日韩一区二区精品视频| 亚洲av片不卡无码久久| 欧美片网站免费| 在线观看国产一区二区| 免费观看国产精品视频| 在线电影福利片| 中文字幕免费不卡在线| 久久久久国产精品视频| 国模私拍视频在线| 精品一区二区三区免费播放 | 最新av网站在线观看 | 日本道免费精品一区二区三区| 一级黄色免费在线观看| 国产黄色免费在线观看| 99视频有精品| 国产99视频精品免费视频36| 国产精品探花视频| 免费在线视频一区| 国产成人高清激情视频在线观看| 日本亚洲欧美在线| 国内精品亚洲| 欧美成人精品在线| 51精品免费网站| 久久视频精品| 中文字幕成人精品久久不卡| 熟女少妇一区二区三区| 全国精品免费看| 亚洲成色www8888| 美女伦理水蜜桃4| 亚洲大奶少妇| 欧美大片一区二区| 波多野结衣三级视频| 国产激情精品一区二区三区| 911精品国产一区二区在线| 中文久久久久久| 久久久免费人体| 欧美日韩国产片| mm131亚洲精品| 成人在线视频免费看| 欧美午夜片在线看| 亚洲一级片网站| 日本亚洲欧洲无免费码在线| 欧美日韩国产精品自在自线| 日韩欧美亚洲另类| 亚洲国产综合在线观看| 91.成人天堂一区| 欧美性猛交xx| 国产精品超碰| 亚洲欧洲一区二区三区在线观看| 91视频免费观看网站| 蜜臀91精品国产高清在线观看| 亚洲女在线观看| 五月婷婷欧美激情| 91成人国产| 欧美大片免费看| 成年免费在线观看| 日韩成人dvd| 国产综合久久久久久| 国产黄a三级三级看三级| 成人一区二区三区在线观看| 精品欧美一区二区久久久伦| 国产黄色免费在线观看| 亚洲视频网在线直播| 免费观看亚洲视频| 成入视频在线观看| 在线观看免费一区| 深夜福利网站在线观看| 欧美国产亚洲精品| 日韩经典第一页| 成人欧美一区二区三区黑人一| 亚洲成人免费| 欧美一级免费视频| 中文字幕乱码无码人妻系列蜜桃| 国产精品 日产精品 欧美精品| 国产在线精品一区二区中文| 国产精品久久久久久久龚玥菲 | 精品爽片免费看久久| 国产探花视频在线播放| 中文字幕一区二区精品区| 性色av一区二区三区免费| 久久久999久久久| 粉嫩av一区二区三区粉嫩| 欧美大陆一区二区| 精品国产白色丝袜高跟鞋| 亚洲成av人片| 日本特黄在线观看| 香蕉精品久久| 久久99青青精品免费观看| 亚洲自拍一区在线观看| 国产成人综合自拍| 日韩亚洲视频| 日韩欧美一中文字暮专区| 欧美精品粉嫩高潮一区二区| 欧美精品黑人猛交高潮| 综合一区在线| 国产精品尤物福利片在线观看| 粉嫩小泬无遮挡久久久久久| 国产精品不卡在线| 中文字幕欧美人妻精品一区| 一本一道久久a久久| www.日韩av.com| 亚洲va在线观看| 成人av电影在线观看| 99精品视频网站| 欧美网站免费| 亚洲丝袜在线视频| 天堂在线免费观看视频| 豆国产96在线|亚洲| 天天干天天色天天爽| 成人做爰免费视频免费看| 亚洲国产另类久久精品| 久久精品第一页| 国产真实乱子伦精品视频| 奇米视频888战线精品播放| 1区2区3区在线| 精品国产伦理网| 国产va在线播放| 韩国三级中文字幕hd久久精品| 日产精品一线二线三线芒果| 在线观看v片| 日韩黄色高清视频| 你懂的国产在线| 91丨九色丨尤物| 黄色动漫在线免费看| 久久精品国产亚洲5555| 韩日欧美一区二区| 天天干天天舔天天射| 香蕉影视欧美成人| 大乳护士喂奶hd| 国产亚洲成人一区| 激情小说综合网| sqte在线播放| 亚洲黄色免费三级| 自拍偷拍欧美亚洲| 91性感美女视频| 波多野结衣家庭教师在线| 欧美一区二区三区久久| 欧美中文在线观看国产| 国产私人尤物无码不卡| 在线视频国产一区| 91ts人妖另类精品系列| 国产在线国偷精品产拍免费yy| 免费看av软件| 成人三级av在线| 69av在线视频| 久久伊伊香蕉| 欧美另类高清zo欧美| 青青青在线免费观看| 成人蜜臀av电影| 黄在线观看网站| 欧美黄色录像片| 999国内精品视频在线| a天堂资源在线| 日韩精品免费看| 一区精品在线观看| 亚洲激情在线激情| 五十路六十路七十路熟婆| 香蕉久久夜色精品国产| 视频在线99re| 91精品短视频| 国产www精品| www在线免费观看视频| 亚洲国产欧美精品| 无码久久精品国产亚洲av影片| 亚洲丝袜精品丝袜在线| 欧美日韩一区二区三区四区五区六区| 亚洲欧美网站| 国产又粗又硬又长| 蜜乳av综合| 97人摸人人澡人人人超一碰| 九色porny自拍视频在线播放| 伊人久久五月天| www.国产.com| 在线观看一区不卡| 69av.com| 欧美国产一区视频在线观看| 日本人dh亚洲人ⅹxx| 翔田千里一区二区| 亚洲av综合色区| 亚洲日本三级| 99在线视频免费观看| 人人视频精品| 久久人人看视频| 免费观看在线黄色网| 亚洲精品国产电影| av手机免费看| 欧美天堂一区二区三区| 日韩欧美性视频| 亚洲婷婷综合色高清在线| 草草地址线路①屁屁影院成人| 久久国产精品99精品国产| www.浪潮av.com| 欧美激情综合| 亚洲国产一区二区精品视频| 日韩mv欧美mv国产网站| 69174成人网| 欧美成人福利| 国产91在线高潮白浆在线观看| free性欧美| 大胆人体色综合| 欧美三级理伦电影| 国产一区二区三区视频| 五月天婷婷激情网| 欧美大黄免费观看| 国产wwwxxx| 欧美精品日韩一区| 亚洲手机在线观看| 色婷婷亚洲精品| 国产精品xxxx喷水欧美| 亚洲国产精品麻豆| 久久午夜无码鲁丝片午夜精品| 国产精品日韩精品欧美在线| 中文字幕成人动漫| 久久精品视频一区二区三区| 精品一区二区视频在线观看| 国产成人高清在线| 国产亚洲色婷婷久久| 精品一区二区三区免费视频| 亚洲综合欧美在线| 蜜桃视频免费观看一区| 无人在线观看的免费高清视频| 香蕉久久夜色精品| 国产aaa一级片| 久热精品在线| 欧美一级黄色影院| 日韩1区2区日韩1区2区| 大肉大捧一进一出好爽动态图| 国产亚洲亚洲| 浮妇高潮喷白浆视频| 99热免费精品在线观看| 欧美深夜福利视频| aa国产精品| 成年人观看网站| 日韩电影在线一区二区三区| 国产精品乱码久久久久| 麻豆中文一区二区| 色婷婷一区二区三区在线观看| 韩国女主播成人在线| 中文字幕久久久久久久| 懂色av一区二区三区免费看| 精品人妻在线视频| 97se亚洲国产综合自在线不卡| 蜜臀av一区二区三区有限公司| 久久伊人蜜桃av一区二区| b站大片免费直播| 中文一区在线播放| 乱h高h女3p含苞待放| 亚洲一区二区五区| 日韩一区二区视频在线| 欧美偷拍一区二区| 国产成人av免费看| 亚洲二区中文字幕| 国产免费视频在线| 久久精品影视伊人网| 四虎影院观看视频在线观看| 97在线免费观看视频| 日本欧美韩国| 91久久精品视频| 另类春色校园亚洲| 亚洲一区二区高清视频| 欧美区日韩区| av观看免费在线| 久草精品在线观看| 人妻 丝袜美腿 中文字幕| 久久免费视频色| 欧美特级一级片| 日韩欧美一区二区在线| 一级视频在线播放| 亚洲成人黄色网| 午夜在线观看视频| 久久噜噜噜精品国产亚洲综合 | 在线观看日韩精品视频| 久久久国际精品| 69xx绿帽三人行| 91久久精品国产91性色tv| 国产超碰人人模人人爽人人添| 亚洲精选一区二区| 搞黄网站在线观看| 国产成人在线一区二区| 秋霞一区二区| 手机看片福利永久国产日韩| 国产精品成人一区二区网站软件| 亚洲 欧美 日韩系列| 丁香一区二区三区| 开心激情五月网| 欧美性xxxx在线播放| 国产熟女精品视频| 亚洲美女自拍视频| 美女精品视频| 国产专区欧美专区| 国产精品一区二区三区av麻| 国产精品www在线观看| 精品一区免费av| xxxx日本黄色| 精品欧美激情精品一区| 国产suv精品一区二区69| 中文字幕亚洲自拍| 伊人久久国产| 国产日韩欧美精品| 欧美精品播放| 不卡中文字幕在线观看| 中文字幕免费不卡在线| 国产三级精品三级在线观看| 亚洲成人av中文字幕| 超碰在线免费公开| 国产精品自拍偷拍| 国产成人久久| 日本精品一区在线观看| 成人精品鲁一区一区二区| 麻豆一区产品精品蜜桃的特点| 9191国产精品| 老司机午夜在线| 国产综合视频在线观看| 久久要要av| 一区二区三区网址| 国产欧美久久久精品影院| 在线免费黄色av| 亚洲精品中文字幕av| 中国字幕a在线看韩国电影| 九色综合婷婷综合| 国产日韩一区二区三区在线播放| 亚洲成年人av| 婷婷夜色潮精品综合在线| 亚洲精品第五页| 欧美激情免费视频| 97久久超碰| 黄页网站大全在线观看| 91丨porny丨首页| 黄色片中文字幕| 亚洲性av网站| 88xx成人网| 中文字幕一区二区三区四区五区人| 久久精品国产一区二区| www.xx日本| 日韩手机在线导航| 啦啦啦中文在线观看日本| 国产区日韩欧美| 一区二区三区精品视频在线观看| 少妇户外露出[11p]| 天天亚洲美女在线视频| 欧美美乳在线| 国产精品日日做人人爱| 91精品国产91久久久久久密臀| 亚洲自拍第三页| 亚洲国产日韩在线一区模特 | 四虎影视国产精品| 热这里只有精品| 成人av高清在线| 亚洲精品91天天久久人人| 日韩中文在线观看| 视频一区国产| 人妻熟妇乱又伦精品视频| 国产欧美日韩久久| 国内精品国产成人国产三级| 性欧美长视频免费观看不卡| 精品国产精品国产偷麻豆| 青青草原国产在线视频| 一区二区三区波多野结衣在线观看| 天天综合天天综合| 国产精品成人观看视频国产奇米| 爽成人777777婷婷| 日本wwwwwww| 91高清视频在线| 2024最新电影免费在线观看| 久久99久久99精品蜜柚传媒| 久久99久久久久| 日本午夜视频在线观看| 精品国产欧美成人夜夜嗨| 乱亲女h秽乱长久久久| 超碰在线播放91| 亚洲6080在线| 日本中文字幕在线2020| 国产伦精品一区二区| 美国一区二区三区在线播放 | 成人在线国产精品| 国产精品毛片在线| 成人性生活毛片| 亚洲色图第一页| 91成人精品在线|