TorchInductor - Introduction

PyTorch 2.x通過TorchDynamo通過Python Bytecode的動態變換實現了圖捕獲功能,需要搭配一個Compiler Backend完成圖編譯。

Pytorch嘗試集成了多個后端,并使用一個輕量級的autotuner來選擇最優的后端圖編譯結果。這個解決方案存在2個問題:

  • 這些后端的Execution Model和Pytorch差異較大,引入了許多轉換步驟,導致性能損失較大。
  • 大多數后端僅支持推理,一些設計決策使得支持訓練非常困難。

因此Pytorch需要原生的Compiler Backend:TorchInductor。

整體設計

TorchInductor的整體設計思路是一個輕量級、易于擴展和實驗的框架,用于將PyTorch的表示符號化映射到Compiler Backend:

  • 完整表達Pytorch:torch.Tensor -> TensorBox,torch.Storage ->?StorageBox?等。
  • 通過symbolically strided tensor表達各種View:Reshape/Transpose/Slice等。
  • 支持訓練
  • 支持多后端
  • 支持高層級優化:如Memory Planning。

TorchInductor的初始設計支持2種不同的target:

  • Triton:一種新型的編程語言,開發效率高于CUDA,同時性能可以媲美CUDA的庫(如cuDNN),支持NVIDIA/AMD GPU等。
  • C++/OpenMP:一種被廣泛使用的編寫高性能并行Kernel的API,支持CPU。

TorchInductor設計上優先考慮對Pytorch支持的完整性,包括:

  • aliasing/mutation/views
  • scatter (間接寫)
  • gather (間接讀)
  • pooling/windows/reductions
  • masked/conditional execution(如padding)
  • template epilogue fusions
  • tiling
  • horizontal/vertical fusions

TorchInductor使用SymPy庫來支持動態形狀(dynamic shapes)和步長(strides):

使用SymPy符號化tensor的shape,并在整個程序中傳播。

load和store直接通過SymPy的索引公式來表達。

通過guards來提升已編譯好的子圖的使用前提,在guards fail時,觸發子圖的重編譯。

TorchInductor? IR

TorchInductor IR使用了一種define-by-run的loop-level IR。大部分IR是Python里的Callable,輸入是SymPy Expression。基于這種IR做分析或代碼生成的實現方式是改變ops.*?的實現,并運行IR。

例如對x.permute(1, 0) + x[2, :]?的IR:

def inner_fn(index: List[sympy.Expr]):i1, i0 = indextmp0 = ops.load("x", i1 + i0*size1)tmp1 = ops.load("x", 2*size1 + i0)return ops.add(tmp0, tmp1)torchinductor.ir.Pointwise(device=torch.device("cuda"),dtype=torch.float32,inner_fn=inner_fn,ranges=[size0, size1],
)

TODO:待補充

參考:

TorchInductor: a PyTorch-native Compiler with Define-by-Run IR and Symbolic Shapes - compiler - PyTorch Developer Mailing List

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

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

相關文章

Adobe Illustrator默認鍵盤快捷鍵

目錄 默認鍵盤快捷鍵 常用的快捷鍵 處理文檔 選擇工具 查看圖稿 處理所選對象 繪制 編輯形狀 處理實時上色組 處理對象 創建可變寬度點 處理文字 使用面板 動作面板 “畫筆”面板 “字符”和“段落”面板 “顏色”面板 “漸變”面板 “圖層”面板 “色板”…

「數據獲取」《中國能源統計年鑒》(1986-2023)(獲取方式看綁定的資源)

01、數據簡介一、年鑒基本定位與發展歷程《中國能源統計年鑒》作為一部權威性極強的能源領域資料典籍,始終以全面、精準反映中國能源建設推進、生產運行、消費態勢以及供需平衡狀況為核心使命。其編纂工作發軔于 1986 年,最初由國家統計局工業交通統計司…

SpringBoot3系列---【SpringBoot3集成sqlite】

SpringBoot3集成sqlite 1.引入pom.xml <dependencies><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.34.0</version></dependency><dependency><groupId>com.…

頭部 TTS 開源項目深度對比

語音合成&#xff08;TTS&#xff09;開源項目是技術研究與產業落地的核心支撐&#xff0c;不同項目因技術路線、設計目標差異&#xff0c;在語言覆蓋、合成自然度、可擴展性等方面表現懸殊。本文選取當前開源生態中應用最廣、影響力最大的五大 TTS 項目——MaryTTS、Coqui TTS…

可視化-模塊1-HTML-02

1-新建一個HTML文檔&#xff0c;命名為&#xff1a;week1-12-<h1>標簽<body><h1>這是標題 1</h1> <h2>這是標題 2</h2> <h3>這是標題 3</h3> <h4>這是標題 4</h4> <h5>這是標題 5</h5> <h6>這是…

搜索算法在實際場景中的應用

1. 數據庫系統 B+樹索引 應用場景:關系型數據庫(MySQL、PostgreSQL等)的索引實現 算法特點: 平衡多路搜索樹,優化磁盤I/O 支持范圍查詢和排序操作 典型實現: CREATE INDEX idx_name ON users(last_name); 哈希索引 應用場景:鍵值存儲(Redis、Memcached)、等值查詢 算…

基礎IO

目錄 一、進程和文件的關系 二、背景補充 三、打開文件接口 (1) FILE *fopen(const char* filename , const char *mode) &#xff08;2&#xff09;open 系統調用 文件描述符 open和fopen的關系 &#xff08;3&#xff09;size_t fwrite&#xff08;const void * ptr, …

SpringBoot快速上手

SpringBoot快速上手 環境準備 IDEA版本: 社區版:2021.1-2022.1.4 專業版:無要求 Maven 官方對于Maven的描述: Maven是一個項目管理工具,基于POM(Project Object Model,項目對象模型)的概念,Maven可以通過一小段描述信息來管理項目的構建,報告文檔和項目管理工具軟件. 人…

GitHub Actions workflow最佳實踐

使用 GitHub Actions Workflow 時&#xff0c;遵循最佳實踐可以顯著提升自動化效率、安全性和可維護性。以下是經過實踐驗證的核心最佳實踐&#xff0c;涵蓋配置設計、性能優化、安全防護等維度&#xff0c;并附具體示例&#xff1a; 一、工作流組織與觸發優化 1. 拆分工作流&a…

JAVA讀取項目內的文件或圖片

一、讀取resources下的文件或圖片&#xff1b;文件或圖片位置&#xff1a;代碼&#xff1a;InputStream fis Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" xxx.jpg);二、讀取項目內任意位置的文件或圖片。文件或圖片位置&…

Python如何將兩個列表轉化為一個字典

一、使用zip函數 zip函數是Python內置的一個強大工具&#xff0c;它可以將多個迭代器&#xff08;如列表、元組等&#xff09;“壓縮”成一個迭代器&#xff0c;其中每個元素都是一個元組。使用zip函數將兩個列表轉換為字典是最常見的方法。 1、基本用法 keys [a, b, c] value…

Vue 3 useModel vs defineModel:選擇正確的雙向綁定方案

&#x1f4d6; 概述 useModel() 是 Vue 3.4 版本中引入的一個組合式 API 輔助函數&#xff0c;它是驅動 defineModel() 的底層實現。這個函數主要用于在非單文件組件中實現雙向數據綁定&#xff0c;特別是在使用原始的 setup() 函數時。 ?? 重要提示&#xff1a;如果使用 <…

數據庫備份sql文件過大,phpAdmin無法執行Sql

數據庫導出為sql文件&#xff0c;文件太大導致無法再Sql query執行&#xff0c;可使用命令行執行&#xff1a; windows系統&#xff1a; 1.切換到mysql 安裝目錄的bin目錄下 cd C:\xampp\mysql\bin 2.執行備份sql還原mysql數據庫 mysql -u root -p databasename < C://backu…

三格電子——ModbusTCP 轉 Profinet 主站網關應用實例

型號&#xff1a;SG-TCP- Profinet(M)一、使用場景ModbusTCPClient 通過 ModbusTCP 控制 Profinet 接口設備&#xff0c; Profinet 接口設備接入DCS/工控機等。產品是ModbusTCP和Profinet(M)網關&#xff08;以下簡稱網關&#xff09;&#xff0c;使用數據映射 方式工作。 本產…

網址賬號正確,密碼錯誤返回的狀態碼是多少

問題網址賬號正確&#xff0c;密碼錯誤返回的狀態碼是多少我的回答當賬號正確但密碼錯誤時&#xff0c;服務器通常會返回401 Unauthorized狀態碼。這個狀態碼表示"未授權"&#xff0c;意味著客戶端請求缺乏有效的身份驗證憑據&#xff0c;或者提供的憑據無效。在實際…

JAVA核心基礎篇-操作符

Java 操作符是用于操作變量和值的特殊符號&#xff0c;主要分為以下幾類&#xff1a;1. 算術運算符用于執行基本的數學運算&#xff1a;&#xff1a;加法&#xff08;也可用于字符串拼接&#xff09;-&#xff1a;減法*&#xff1a;乘法/&#xff1a;除法&#xff08;整數相除取…

數據庫字段類型深度解析:從關系型到 NoSQL 的全面指南

數據庫字段類型深度解析&#xff1a;從關系型到 NoSQL 的全面指南 一、引言&#xff1a;數據庫字段類型的重要性 在現代軟件開發和數據管理中&#xff0c;數據庫作為核心組件&#xff0c;其性能、可擴展性和數據完整性在很大程度上取決于字段類型的選擇。作為專業的開發者和數據…

藍牙aoa倉庫管理系統功能介紹

在現代倉儲物流的快節奏運作中&#xff0c;高效管理倉庫人員的位置與行動軌跡&#xff0c;成為提升整體運營效率的關鍵。藍牙AOA&#xff08;Angle of Arrival&#xff0c;信號到達角&#xff09;技術應運而生&#xff0c;以其獨特的優勢和強大的功能&#xff0c;為倉庫人員定位…

【輕量級密碼算法】當安全遇上資源瓶頸:輕量級加密為何成為 IoT 時代的剛需?

在智能家居的場景中&#xff0c;當你輕觸智能門鎖的指紋識別區域&#xff0c;期望它能快速響應并解鎖時&#xff0c;你是否想過在這短短幾秒內&#xff0c;門鎖內部的微控制器&#xff08;MCU&#xff09;正在進行著復雜的安全驗證操作&#xff1f;然而&#xff0c;對于大多數資…

嵌入式開發學習———Linux環境下網絡編程學習(四)

數據庫簡介數據庫是結構化數據的集合&#xff0c;用于高效存儲、檢索和管理數據。常見的數據庫類型包括關系型&#xff08;如MySQL、SQLite&#xff09;和非關系型&#xff08;如MongoDB&#xff09;。關系型數據庫使用表格形式存儲數據&#xff0c;并通過SQL&#xff08;結構化…