调试 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 记录功能,请按照以下步骤操作:
在
config/cmake
中,确保你set(USE_RELAY_DEBUG ON)
。此标志用于启用 VLOGgingLaunch 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'