常见问题
导航
常见问题#
如何安装#
阅读 安装 TVM
如何添加一个新的硬件后端#
如果硬件后端有 LLVM 支持,那么我们可以通过设置正确的目标三要素,如
target
直接生成代码。如果目标硬件是 GPU,尽量使用 cuda、opencl 或 vulkan 后端。
如果目标硬件是一个特殊的加速器,签出 VTA:通用张量加速器 和 带你自己的 Codegen 到 TVM。
对于上述所有情况,你可能想使用 AutoTVM 添加目标特定的优化模板,见 Auto-Tune with Templates and AutoTVM。
除了使用 LLVM 的矢量化,我们还可以嵌入微内核来利用硬件本征,见 Use Tensorize to Leverage Hardware Intrinsics。
TVM 与其他 IR/DSL 项目的关系#
在深度学习系统中,通常有两个层次的 IR 抽象。TensorFlow 的 XLA 和英特尔的 ngraph 都使用计算图表示。这种表示法是高水平的,可以帮助进行通用优化,如内存重用、布局转换和自动区分”
TVM 采用了一种低级别的表示方法,明确表达了对内存布局、并行化模式、位置性和硬件基元等的选择。这一层次的 IR 更接近于直接的目标硬件。低级别的 IR 采用了现有的图像处理语言的想法,如 Halide、darkroom 和循环转换工具,如 loopy 和基于多面体的分析。我们特别关注表达深度学习的工作负载(如递归),为不同的硬件后端进行优化,并与框架嵌入,以提供端到端的编译栈。
TVM 与 libDNN、cuDNN 的关系#
TVM 可以将这些库作为外部调用纳入。TVM 的一个目标是能够生成高性能的内核。我们将以渐进的方式发展 TVM,因为我们从手工制作内核的技术中学习,并将这些技术作为基元加入 DSL 中。TVM 中运算符的配方也见顶部。
安全#
参阅:安全指南