type
status
date
slug
summary
tags
category
icon
password
 
用 Taichi 加速 PyTorch:轻松编写奇奇怪怪的深度学习算子 – 闪念基因 – 个人技术分享
 

贡献指南

测试
代码风格

安装指南

taichi LLVM
 

论文介绍

 

The taichi

JIT编译流水线

Python AST → Taichi AST
Chi-IR 结合 Taichi compiler 将Front-end AST自动并行,并转换为intermediate representation(IR)。Taichi compiler执行了主要的优化工作
优化后的Chi-IR发送给 Taichi backend,backend编译到GPU kernel,Backend APIs即为CUDA、CPU、OpenGL

AOT

部分工业软件平台JIT pipline开销过大

Engineering Challenges

Taichi的后端逐渐增多,而这些后端都是独立维护的,导致Taichi在使用不同后端时需要考虑不同的功能支持,这和Taichi的初衷背道而驰
 

本repo主要工作贡献

  1. 通过GPU抽象层,使用SPIR-V codegen
  1. Taichi CGraph AOT 预编译
 

Unified Device API

需要多游戏引擎和渲染中间件通常都使用一个抽象层,称为Render Hardeware Interface RHI,这里从用类似的方法,创建RHI 中间件 Unified Device API

设计阶段

作者首先survey了常用的backend API,找出他们间的共性,区别以适配这些后端。
 
Work-submission Model
主要有两种任务提交模型,immediate and batched
immediate在实际执行时可能也被API转换为batched以进行一些优化
batched:API提供 stream 和 command list 执行一个指令串,具有更少的overhead和更好的transparency,通常在较新的API使用
 
Resource Model
API tracked:API对硬件资源的分配可能时lazy的,API需要保证硬件资源是可用的
User Controlled:explicit model允许高级的资源管理技巧
 

Unifuied Device API设计细节

notion image
Device object代表实际backend API提供的硬件设备,所有的资源allocate目标
Allocation 分配资源的call
Stream object:每个stream中的指令有序执行,但是不一定按顺序完成,因此需要保证stream的顺序
StreamSemaphore:barrier
 

3.1.3 设计依据

  • code-gen 和 runtime的isolation
  • batched execution 和 graph based execution更容易优化
notion image
notion image
  • explicit memory management
  • optional features

3.1.4 Implementation

基于Vulkan API,并且Vulkan的特性比较丰富
Valkan需要手动track resource的usage
由于代码在host端运行,track GPU resource life-time 比较困难,由于command batches的执行方式,确保资源在batch中使用,结束batch则释放
但是这种方式比较占用memory

3.2 SPIR-V codegen

portability
Single Static Assignment fron IR:transform Chi-IR to SPIR-V
efficency
 

3.2.2 Implementation

Chi-IR → SPIR-V statements
squad 步兵圣经QT online installer 安装使用镜像站加速
Loading...