Relay算子注冊(在pytorch.py端調用)

1. Relay算子注冊 (C++層)

(a) 算子屬性注冊

路徑: src/relay/op/nn/nn.cc

RELAY_REGISTER_OP("hardswish").set_num_inputs(1).add_argument("data", "Tensor", "Input tensor.").set_support_level(3).add_type_rel("Identity", Identity);
(b) 調用節點構造

路徑: src/relay/op/nn/activation.cc

TVM_REGISTER_GLOBAL("relay.op._make.hardswish").set_body_typed([](Expr data) {static const Op& op = Op::Get("hardswish");return Call(op, {data}, Attrs(), {});});

2. TOPI計算實現 (C++層)

? TOPI注冊入口

路徑: src/topi/elemwise.cc

TVM_REGISTER_GLOBAL("topi.hardswish").set_body([](TVMArgs args, TVMRetValue* rv) {*rv = hardswish(args[0]);});
(d) 數學內核實現

路徑: include/tvm/topi/nn.h

inline Tensor hardswish(const Tensor& x, std::string name = "T_hardswish") {auto three = make_const(x->dtype, 3);auto six = make_const(x->dtype, 6);return compute(x->shape,[&](const Array<Var>& i) {return x(i) * max(min(x(i) + three, six), 0) / six;},name, kElementWise);
}

3. Python接口層

(e) Relay Python API

路徑: python/tvm/relay/op/nn/_nn.py

def hardswish(data):return _make.hardswish(data)
(f) TOPI通用接口

路徑: python/tvm/topi/nn.py

@tvm.target.generic_func
def hardswish(x):return cpp.hardswish(x)

4. 計算調度注冊

(g) Compute注冊

路徑: python/tvm/relay/op/strategy/generic.py

@register_compute("hardswish")
def hardswish_compute(attrs, inputs, out_type):return [topi.hardswish(inputs[0])]
(h) 調度策略

路徑: `python/tvm/relay/op/op.py**

register_broadcast_schedule("hardswish")
register_shape_func("hardswish", False, elemwise_shape_func)

5. 硬件專用實現

(i) NPU支持聲明

路徑: `src/relay/backend/contrib/npu/src/op_map.cc**

const std::vector<std::string> _NPU_OP = {...,"hardswish"  // 添加算子名
};
(j) NPU內核實現

路徑: `python/tvm/relay/backend/contrib/npu/ops.py**

def custom_hardswish(x):x1 = custom_add(x, te.extern_scalar_value(3.0))x2 = custom_relu(x1)return npu_hardwish(x2, ...)
(k) NPU策略注冊

路徑: `python/tvm/relay/op/strategy/npu.py**

@hardswish.register("npu")
def hardswish_npu(x):return npu_api.custom_hardswish(x)

6. 前端框架對接

(l) PyTorch轉換器

路徑: `python/tvm/relay/frontend/pytorch.py**

def _hardswish():def _impl(inputs, input_types):return _op.hardswish(inputs[0])return _impl

關鍵文件路徑總結

功能模塊關鍵路徑
Relay核心注冊src/relay/op/nn/{nn.cc, activation.cc}
TOPI計算{include,src}/topi/{nn.h, elemwise.cc}
Python接口python/tvm/{relay/op/nn/_nn.py, topi/nn.py}
策略注冊python/tvm/relay/op/strategy/{generic.py, npu.py}
硬件后端src/relay/backend/contrib/npu/
前端對接python/tvm/relay/frontend/pytorch.py

開發流程示意圖

Relay注冊
TOPI實現
Python接口
硬件后端
前端框架

通過這種清晰的路徑劃分,TVM實現了:

  1. 模塊化開發:各層級代碼物理隔離
  2. 可擴展性:新增硬件只需在對應目錄添加實現
  3. 維護性:相關功能的代碼集中存放

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81939.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81939.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81939.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JavaEE】網絡原理之初識(1.0)

目錄 ?編輯 局域網與廣域網 IP地址和端口號 實現簡單的服務器客戶端交互 簡單理解socket TCP和UDP的差別&#xff08;初識&#xff09; socket面對udp DatagramSocket API DatagramSocket 構造方法 DatagramSocket 方法&#xff1a; DatagramPacket API Data…

Redis數據結構ZipList,QuickList,SkipList

目錄 1.ZipList 1.2.解析Entry&#xff1a; 1.3Encoding編碼 1.4.ZipList連鎖更新問題 2.QuickList SkipList跳表 RedisObject 五種數據類型 1.ZipList redis中的ZipList是一種緊湊的內存儲存結構&#xff0c;主要可以節省內存空間儲存小規模數據。是一種特殊的雙端鏈表…

laravel 12 監聽syslog消息,并將消息格式化后存入mongodb

在Laravel 12中實現監聽Syslog消息并格式化存儲到MongoDB&#xff0c;需結合日志通道配置、Syslog解析和MongoDB存儲操作。以下是具體實現方案&#xff1a; 一、環境配置 安裝MongoDB擴展包 執行以下命令安裝必要的依賴&#xff1a; composer require jenssegers/mongodb ^4.0確…

【STM32項目實戰】一文了解單片機的SPI驅動外設功能

前言&#xff1a;在前面我有文章介紹了關于單片機的SPI外設CUBEMX配置&#xff0c;但是要想使用好SPI這個外設我們還必須對其原理性的時序有一個詳細的了解&#xff0c;所以這篇文章就補充一下SPI比較偏向底層的時序性的邏輯。 1&#xff0c;SPI簡介 SPI是MCU最常見的對外通信…

【挖洞利器】GobyAwvs解放雙手

【滲透測試工具】解放雙手&Goby配合Awvs滲透測試利器\x0a通過Goby和Awvs 解放雙手https://mp.weixin.qq.com/s/SquRK8C5cRpWmfGbIOqxoQ

LangChain4j(15)——RAG高級之跳過檢索

之前的文章中&#xff0c;我們介紹了RAG的使用&#xff0c;但是&#xff0c;每次提問時&#xff0c;都會通過RAG進行檢索。有時&#xff0c;檢索是不必要執行的&#xff0c;比如&#xff0c;當用戶只是說“你好”時。于是&#xff0c;我們需要有條件的跳過檢索過程。 跳過決策…

【SDRS】面向多模態情感分析的情感感知解糾纏表征轉移

abstract 多模態情感分析(MSA)旨在利用多模態的互補信息對用戶生成的視頻進行情感理解。現有的方法主要集中在設計復雜的特征融合策略來整合單獨提取的多模態表示,忽略了與情感無關的信息的干擾。在本文中,我們提出將單模表征分解為情感特定特征和情感獨立特征,并將前者融…

Sui 上線兩周年,掀起增長「海嘯」

兩年前的 5 月 3 日&#xff0c;Sui 的主網正式發布&#xff0c;將在開發網和測試網上驗證過的下一代技術承諾變為現實。這一新興網絡旨在優化現有區塊鏈技術&#xff0c;結合高性能計算環境與安全性、可驗證性及韌性。 隨著 Sui 迎來兩周年&#xff0c;這股浪潮已成長為「海嘯…

深入理解 mapper-locations

mybatis-plus.mapper-locations: classpath*:/mapper/**/*.xml 是 MyBatis/MyBatis-Plus 在 Spring Boot 配置文件&#xff08;如 application.yml 或 application.properties&#xff09;中的一項關鍵配置&#xff0c;用于指定 MyBatis Mapper XML 文件的存放路徑。以下是詳細…

電容的作用

使用多個電容是從電容的實際等效模型去考慮的(也就是從SI&#xff0c;信號完整性方面&#xff09;。只考慮一個實際電容時&#xff0c;它的阻抗曲線是一個類似于倒三角形的形狀&#xff0c;只在諧振頻率點(與等效串聯電感形成)處的阻抗最小。因此相當于只在這一個頻率點處及附近…

移植的本質是什么

有斷時間我就在想&#xff0c;為什么freertos&#xff0c;lvgl等等的移植都是把庫文件放進來&#xff0c;直接點擊編譯&#xff0c;然后把bug都處理完成就移植成功了&#xff0c;為什么呢&#xff1f; 明明我一個函數都沒調用&#xff0c;為什么會有一堆錯誤&#xff0c;莫名其…

廣告場景下的檢索平臺技術

檢索方向概述 數據檢索領域技術選型大體分為SQL事務數據庫、NoSQL數據庫、分析型數據庫三個類型。 SQL數據庫的設計思路是采用關系模型組織數據&#xff0c;注重讀寫操作的一致性&#xff0c;注重數據的絕對安全。為了實現這一思路&#xff0c;SQL數據庫往往會犧牲部分性能&…

高頻PCB設計如何選擇PCB層數?

以四層板為例&#xff0c;可以第一層和第二層畫信號&#xff0c;作為信號層。 第三層可以走電源&#xff0c;然后第四層走GND 但是更可以第一層和第三層畫信號。第二層可以走電源&#xff0c;然后第四層走GND 用中間的電源層以及地層可以起到屏蔽的作用&#xff0c;有效降低寄…

[Linux_69] 數據鏈路層 | Mac幀格式 | 局域網轉發 | MTU MSS

目錄 0.引入 1.以太網幀格式 2.重談局域網轉發的原理(基于協議) 小結 3.認識MTU 3.1MTU對IP協議的影響 3.2MTU對UDP協議的影響 3.3MTU對于TCP協議的影響 0.引入 在去年的這篇文章中&#xff0c;我們有對網絡進行過一個概述[Linux#47][網絡] 網絡協議 | TCP/IP模型 | 以…

vue2 provide 后 inject 數據不是響應式的,不實時更新

今天用 provide 后&#xff0c;inject 獲取數據時不是實時更新的&#xff0c;獲取的不是更新后的值 祖父組件 <div style"text-align: left !important;"><button click"change">更改</button> </div>data() {return {name: ini…

洛谷---P1629 郵遞員送信

題目描述 有一個郵遞員要送東西&#xff0c;郵局在節點 1。他總共要送 n?1 樣東西&#xff0c;其目的地分別是節點 2 到節點 n。由于這個城市的交通比較繁忙&#xff0c;因此所有的道路都是單行的&#xff0c;共有 m 條道路。這個郵遞員每次只能帶一樣東西&#xff0c;并且運…

2025年LangChain(V0.3)開發與綜合案例

LangChain是什么&#xff1f; 在實際企業開發中&#xff0c;大模型應用往往比簡單的問答要復雜得多。如果只是簡單地向大模型提問并獲取回答&#xff0c;那么大模型的許多強大功能都沒有被充分利用。 要開始使用LangChain&#xff0c;首先需要安裝相關的庫&#xff1a; pip …

十分鐘了解 @MapperScan

MapperScan 是 MyBatis 和 MyBatis-Plus 提供的一個 Spring Boot 注解&#xff0c;用于自動掃描并注冊 Mapper 接口&#xff0c;使其能夠被 Spring 容器管理&#xff0c;并與對應的 XML 或注解 SQL 綁定。它的核心作用是簡化 MyBatis Mapper 接口的配置&#xff0c;避免手動逐個…

深度解析 MindTorch:無縫遷移 PyTorch 到 MindSpore 的高效工具

在深度學習領域&#xff0c;框架的選擇往往取決于開發者的習慣、硬件支持以及項目需求。PyTorch 作為當前最受歡迎的深度學習框架之一&#xff0c;以其動態圖機制和簡潔的 API 設計深受開發者喜愛。然而&#xff0c;隨著昇騰硬件的崛起&#xff0c;如何高效地利用昇騰的強大計算…

[250506] Auto-cpufreq 2.6 版本發布:帶來增強的 TUI 監控及多項改進

目錄 Auto-cpufreq 2.6 版本發布&#xff1a;帶來增強的 TUI 監控及多項改進 Auto-cpufreq 2.6 版本發布&#xff1a;帶來增強的 TUI 監控及多項改進 Auto-cpufreq&#xff0c;一款適用于 Linux 的免費開源自動 CPU 速度與功耗優化器&#xff0c;已發布其最新版本 2.6。該工具…