【AI编译器入门⑤】编译后端CUDA Codegen、CUTLASS与TensorRT三足鼎立本文是「AI编译器」系列的第五篇。后端是AI编译器的出口——把优化后的IR变成硬件能跑的代码。TVM的后端可不止一种CUDA Codegen、CUTLASS、TensorRT……它们各有什么特点性能怎么样分别适合什么场景本文一一对比。一、写在前面后端是干什么的前端负责翻译中端负责优化后端负责落地——把优化后的IR变成具体硬件能执行的代码。后端不只是生成kernel这么简单它还要做TIR lowering把高层IR降到底层循环表示做Schedule优化分块、向量化、线程绑定做Codegen生成硬件代码做Runtime打包kernel、权重、元数据打成一个文件处理多种后端GPU/NPU/CPU先上一张后端Pipeline图二、后端在Pipeline中的位置优化后的高层IRRelay/Relax → Lower到TIR降低到底层IR → 后端选择 ├── CUDA CodegenTIR → CUDA C → nvcc → .so ├── CUTLASS匹配MatMul/Conv模式 → CUTLASS kernel ├── TensorRTpartition子图 → TensorRT engine ├── NPU SDKLegalize → 硬件指令 └── CPULLVM → SIMD → 生成runtime产物 → 加载执行下面我们重点讲三个GPU后端CUDA Codegen、CUTLASS、TensorRT。三、CUDA Codegen通用但需调优3.1 什么是CUDA CodegenCUDA Codegen是TVM最基础的GPU后端——把TIR直接打印成CUDA C代码然后调用nvcc编译。3.2 完整流程1. TIR传入BuildModule 2. CodegenCUDA把TIR打印成CUDA C代码 3. 调用nvcc编译.cu为.cubin 4. 打包进TVM runtime module3.3 TIR到CUDA的映射TIR抽象CUDA概念绑定了threadIdx.x的循环CUDA线程绑定了blockIdx.x的循环CUDA blockBuffer全局/共享/寄存器内存Vectorize/Ramp向量加载/存储3.4 优点与缺点优点缺点通用什么算子都能生成性能依赖Schedule的好坏开源可控可以深度定制默认调度性能一般需要Ansor/Dlight调优调试方便可以直接看生成的CUDA代码核心算子GEMM/Conv比CUTLASS/TensorRT慢3.5 什么时候用CUDA Codegen自定义算子CUTLASS/TensorRT不支持需要深度定制的融合算子调试阶段需要看生成的代码非核心算子性能要求不高四、CUTLASS核心算子的性能担当4.1 什么是CUTLASSCUTLASS是NVIDIA开源的高性能CUDA模板库专门用来写GEMM和Conv这类核心算子的。你可以把它理解为半成品的手写GEMM/Conv——你填参数它生成高性能kernel。CUTLASS的性能接近cuBLAS手写专家级别但比手写CUDA灵活得多——可以定制epilogue fusion、数据类型、tile大小等。4.2 TVM怎么用CUTLASSTVM通过**partition子图切分**的方式接入CUTLASS1. 遍历Relay/Relax图识别MatMul、Conv、BMM等可offload的算子 2. 把这些算子标记为CUTLASS子图 3. 通过PartitionGraph把子图切分出来 4. CUTLASS子图调用CUTLASS生成kernel 5. 其余算子走TVM CUDA Codegen4.3 代码示例fromtvmimportrelayfromtvm.contrib.cutlassimportpartition_for_cutlass# 把可支持的算子partition到CUTLASSmodpartition_for_cutlass(mod,params)# 编译withtvm.target.cuda(modela100):librelay.build(mod,targetcuda,paramsparams)lib.export_library(model_cutlass.so)4.4 优点与缺点优点缺点GEMM/Conv性能接近手写专家级只支持特定算子GEMM、Conv等支持多种数据类型和epilogue融合算子之外的部分还是要走TVM Codegen与TVM Codegen互补编译时间长CUTLASS模板编译慢4.5 最佳实践核心GEMM/Conv走CUTLASS——性能最高其余融合算子走TVM Codegen——灵活可控两者配合整体性能和灵活性都有五、TensorRT工业部署的性能天花板5.1 什么是TensorRTTensorRT是NVIDIA官方的推理优化引擎是目前NVIDIA GPU上性能最强的推理优化工具。它不只是一个后端而是一个完整的推理优化框架——包含了图优化、算子融合、量化、kernel自动调优等全套能力。5.2 TVM怎么接入TensorRT和CUTLASS类似TVM通过partition把子图卸载到TensorRT1. 遍历图检查每个算子是否被TensorRT支持 2. 把连续支持的子图标记为TensorRT子图 3. PartitionGraph切分子图 4. TensorRT子图调用TensorRT builder生成engine 5. 不支持的算子fallback到TVM CUDA Codegen5.3 代码示例fromtvmimportrelayfromtvm.contrib.tensorrtimportpartition_for_tensorrt# 把可支持的子图partition到TensorRTmodpartition_for_tensorrt(mod,params)withtvm.transform.PassContext(opt_level3):librelay.build(mod,targetcuda,paramsparams)lib.export_library(model_tensorrt.so)5.4 优点与缺点优点缺点性能通常最高尤其是CNN/Transformer黑盒可调试性弱丰富的plugin生态对动态shape支持有限支持INT8/FP16量化某些算子不支持需要fallback工业级成熟度只支持NVIDIA GPU5.5 直接用TensorRT vs TVMTensorRT方式优点缺点直接TensorRT完整图优化性能最高只支持NVIDIA黑盒自定义算子难TVMTensorRT可跨平台可自定义算子可调试子图切分可能引入overhead部分算子fallback怎么选如果只用NVIDIA GPU算子都是标准的 → 直接TensorRT性能最好如果有自定义算子、要跨平台、需要可调试性 → TVMTensorRT灵活性更高六、多后端性能对比最后我们用一张表把三个后端做个全面对比维度CUDA CodegenCUTLASSTensorRT定位通用后端核心算子加速全图推理优化性能依赖Schedule默认一般GEMM/Conv接近手写通常最高灵活性最高什么都能改中等只支持特定算子最低黑盒可调试性最好可以看生成的代码中等最差黑盒算子覆盖全覆盖GEMM/Conv/BMM等大部分标准算子动态shape支持Relax支持有限需要explicit batch/profile编译速度快慢模板编译中等适合场景自定义算子、调试核心GEMM/Conv加速工业部署、标准模型6.1 Ansor vs Dlight提到后端调度还有两个概念要知道Ansor基于搜索的自动调度适合静态图Relay。搜索时间长但性能高。Dlight基于规则的默认调度适合动态图Relax。编译快性能可预期。简单说Ansor是精雕细琢Dlight是快速出品。6.2 后端选择建议场景推荐后端静态CNN/BERT追求极致性能Relay Ansor CUTLASS TensorRT动态LLM/MoERelax Dlight CUTLASS极致性能且可接受黑盒直接TensorRT需要自定义算子、深度定制CUDA Codegen 手写TIR实战中通常是混合的大部分算子走TensorRT/CUTLASS少数自定义算子走TVM Codegen——各取所长。七、后端编译产物长什么样编译完成后产物通常是一个.so或.dll文件里面包含model.so ├── tvm::runtime::Module CUDA/CPU模块 ├── 参数序列化params/权重 ├── 函数表PackedFunc └── 权重常量加载和调用很简单importtvm modtvm.runtime.load_module(model.so)exmod.get_function(main)outex(input_ndarray)八、常见误区误区一“后端只需要生成kernel”错。后端还要处理runtime打包、内存对齐、多stream、符号解析、权重序列化。产物必须能被Runtime正确加载执行。误区二“TensorRT一定最快”TensorRT在标准CNN和Transformer上通常最快但对某些自定义算子、动态shape、复杂控制流支持有限可能大量fallback到TVM整体反而更慢。误区三“Relax后端已经完全成熟”Relax是TVM新一代IRDlight/CUTLASS后端仍在快速迭代。生产部署要评估版本兼容性和算子覆盖度。九、总结一下今天这篇文章我们讲了AI编译器的后端CUDA Codegen通用、灵活、可调试但性能依赖ScheduleCUTLASS核心GEMM/Conv的性能担当和TVM Codegen互补TensorRT工业部署性能天花板但黑盒、灵活度低选型建议根据场景选择实际中往往是混合后端Ansor vs DlightAnsor搜索慢但性能高静态图Dlight规则快但性能中等动态图下一篇预告我们把前端、中端、后端串起来走一遍完整的端到端编译流程——从ONNX到TensorRT/TVM看看整个链路是怎么跑通的。本系列导航第1篇AI编译器基础三段式Pipeline与全链路协同第2篇TVM架构拆解Relay、Relax、TIR与Runtime第3篇编译前端ONNX、TorchScript与动态shape处理第4篇编译中端图优化Pass全解析第5篇编译后端CUDA Codegen、CUTLASS与TensorRT本文第6篇端到端编译流程ONNX → TVM → TensorRT全链路实战更多内容持续更新中……