Debugging TVM
导航
Debugging TVM#
注意:这个页面是一个正在进行中的工作。欢迎大家通过发送 PR 来添加建议和提示修改本页面。这个页面的目标是集中调试 TVM 所使用的常用技术,并向社区传播这种认识。为了达到这个目的,可能会寻求将更广泛使用的技术推广到本文档的顶部。
VLOGging#
TVM 提供了详细日志记录功能,允许提交跟踪级别的调试消息,而不会影响生产中 TVM 的二进制大小或运行时。你可以在你的代码中使用 VLOG 如下:
void Foo(const std::string& bar) {
VLOG(2) << "Running Foo(" << bar << ")";
// ...
}
在本例中,传递给 VLOG()
的整数 2
表示 verbosity 级别。级别越高,打印的日志越多。通常,TVM 级别从 0 到 2 不等,3 只用于极低级的核心运行时属性。VLOG 系统在启动时被配置为打印 0
到整数 N
之间的 VLOG 语句。 N
可以每个文件设置或全局设置。
VLOG 默认不打印或影响二进制大小或运行时间(当编译时使用适当的优化)。要启用 VLOGging,请执行以下操作:
在
config/cmake
中,确保设置set(USE_RELAY_DEBUG ON)
。该标志用于启用 VLOGging。启动 Python 传递
TVM_LOG_DEBUG=<spec>
,其中<spec>>
是逗号分隔的级别赋值列表,格式为<file_name>=<level>
;特别地:特殊的文件名
DEFAULT
设置所有文件的 VLOG 级别设置。<level>>
可以设置为-1
来禁用 VLOG。<file_name>
是相对于 TVM repo 中的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'