TVM安装常用问题
如何添加新的硬件后端
- 如果硬件后端支持LLVM,则可以通过设置正确的目标三元组来直接生成代码target。
- 如果目标硬件是GPU,请尝试使用cuda,opencl或vulkan后端。
- 如果目标硬件是特殊的加速器,请checkout VTA:深度学习加速器堆栈,并将代码生成到TVM。
- 对于上述所有情况,使用AutoTVM添加特定于目标的优化模板,请参见AutoTVM:基于模板的自动调整AutoTVM : Template-based Auto Tuning。
- 除了使用LLVM的向量化之外,还可以嵌入微内核micro-kernels,以利用硬件内在函数,请参阅使用张量化,以利用硬件内在函数。
TVM与其他IR / DSL项目的关系
在深度学习系统中,IR通常有两个抽象层次。TensorFlow的XLA和Intel的ngraph都使用计算图表示。这种表示形式是高级的,并且有助于执行通用优化,例如内存重用,布局转换和自动微分。
TVM采用低级表示,可明确表示内存布局,并行化模式,局部性和硬件基元等的选择。此IR级别更接近直接针对目标硬件。低级IR采用了来自现有图像处理语言(例如Halide),暗室darkroom和循环转换工具(例如基于loopy和基于多面体的分析)的思想。特别专注于表达深度学习工作负载(例如,递归),针对不同硬件后端的优化以及嵌入框架以提供端到端编译堆栈。
TVM与libDNN,cuDNN的关系
TVM可以将这些库合并为外部调用。TVM的目标之一是能够生成高性能内核。当从人工内核技术中学习,逐步将它们添加为DSL中的原语,逐步发展TVM。另请参阅前面内容以了解TVM中算子的配置。
https://tvm.apache.org/docs/faq.html