调试 TVM

目录

调试 TVM#

注意: 此页面正在进行中。欢迎大家通过提交 PR 来添加建议和技巧以修改本页面。此页面的目标是将用于调试 TVM 的常用技术集中起来,并向社区传播这些知识。为此,可能会寻求将更广泛使用的技术推向本文档的顶部。

VLOGging#

TVM 提供了详细的日志记录功能,允许你在不影响生产环境中 TVM 的二进制大小或运行时间的情况下提交跟踪级别的调试信息。你可以在代码中如下使用 VLOG:

void Foo(const std::string& bar) {
  VLOG(2) << "Running Foo(" << bar << ")";
  // ...
}

在这个例子中,传递给 VLOG() 的整数 2 表示“详细级别”。级别越高,打印的日志就越多。通常,TVM 的级别从 0 到 2 不等,其中 3 仅用于极端低级别的核心运行时属性。VLOG 系统在启动时配置为打印介于 0 和某个整数 N 之间的 VLOG 语句。N 可以按文件设置或全局设置。

VLOGs 默认情况下不会增加二进制文件的大小或影响运行时(当使用适当的优化编译时)。要启用 VLOG 记录功能,请按照以下步骤操作:

  1. config/cmake 中,确保你 set(USE_RELAY_DEBUG ON)。此标志用于启用 VLOGging

  2. Launch Python passing TVM_LOG_DEBUG=<spec>, where <spec> is a comma-separated list of level assignments of the form <file_name>=<level>. Here are some specializations:

    • 特殊文件名 DEFAULT 设置了所有文件的 VLOG 级别设置。

    • <level> 可以设置为 -1 来禁用该文件中的 VLOG。

    • <file_name> 是相对于 TVM 存储库中的 src/ 目录的 c++ 源文件的名称(例如 .cc,而不是 .h)。当指定文件路径时,你不需要提供 src/,但如果这样做,VLOG 仍然可以正确解释路径。

示例:

# enable VLOG(0), VLOG(1), VLOG(2) in all files.
$ TVM_LOG_DEBUG=DEFAULT=2 python3 -c 'import tvm'

# enable VLOG(0), VLOG(1), VLOG(2) in all files, except not VLOG(2) in src/bar/baz.cc.
$ TVM_LOG_DEBUG=DEFAULT=2,bar/baz.cc=1 python3 -c 'import tvm'

# enable VLOG(0), VLOG(1), VLOG(2) in all files, except not in src/foo/bar.cc.
$ TVM_LOG_DEBUG=DEFAULT=2,src/foo/bar.cc=-1 python3 -c 'import tvm'