【TVM 教程】如何使用 TensorCores 优化卷积

💡 原文中文,约18900字,阅读约需45分钟。
📝

内容提要

Apache TVM 是一个支持 CPU 和 GPU 的深度学习编译框架。本文介绍了如何利用 TensorCores 进行高性能卷积调度,重点优化矩阵乘法和内存调度,并通过示例代码展示卷积算法的实现及性能评估。

🎯

关键要点

  • Apache TVM 是一个支持 CPU 和 GPU 的深度学习编译框架。
  • 本文介绍如何利用 TensorCores 进行高性能卷积调度。
  • 每个 Tensor Core 提供一个 4x4x4 矩阵处理数组,用于矩阵乘法。
  • CUDA 开发者使用 warp 级原语在张量核上执行半精度矩阵乘法。
  • 示例中使用固定大小的输入张量和卷积过滤器进行卷积操作。
  • 代码示例定义了 TVM 中的卷积算法,包括输入、过滤器和输出特征图的形状。
  • 为了支持 TensorCores,添加了特殊的内存范围。
  • TensorCore 是一种特殊的硬件操作,可以用 tensorize 替换计算单元。
  • TensorCore 中有四个基本操作:fill_fragment、load_matrix、mma_sync 和 store_matrix。
  • 在 TVM 中使用 TensorCores 需要将计算调度到特定结构中。
  • 每个块包含多个 warp,每个 warp 调用 TensorCore 指令。
  • 所有 TensorCore 指令都是 warp 级指令,确保一个 warp 中的所有线程同时执行。
  • 定义了 tile 大小和调度本地计算的策略。
  • 最后阶段将计算循环降级到 TensorCore 硬件内联函数。
  • 使用 TVM 生成和编译 CUDA 内核,并评估卷积的延迟。

延伸问答

什么是 Apache TVM?

Apache TVM 是一个支持 CPU 和 GPU 的深度学习编译框架。

如何在 TVM 中使用 TensorCores 进行卷积优化?

在 TVM 中使用 TensorCores 进行卷积优化需要将计算调度到特定结构,并使用张量内联函数。

TensorCore 的基本操作有哪些?

TensorCore 中有四个基本操作:fill_fragment、load_matrix、mma_sync 和 store_matrix。

在使用 TensorCores 时需要注意哪些内存范围?

使用 TensorCores 时需要添加特殊的内存范围:wmma.matrix_a、wmma.matrix_b 和 wmma.accumulator。

如何评估使用 TensorCores 的卷积性能?

可以使用 TVM 生成和编译 CUDA 内核,并通过时间评估卷积的延迟。

TensorCore 支持的 GPU 计算能力是什么?

TensorCores 仅支持 Compute Capability 7.0 或更高版本的 NVIDIA GPU。

➡️

继续阅读