VizTracer 0.1.1!CodeSnap改名啦!Filter新鲜出炉

今天忽然理解了那些艺人来回来去改艺名的心态,今天觉得这名字太土,明天觉得那名字不吉利,后天发现好名字和人重了……我也经历了一次这种纠结。

刚开始给项目起名的时候其实就挺纠结的,想了半天起了个CodeSnap,觉得挺不错,pypi上也没有重名的项目。这两天忽然发现,有个VSCode的插件也叫CodeSnap,是用来截图的……仔细想想,这名字好像做代码截图更合适,于是越看越觉得这名字不顺眼,决心换个新名。还好现在project还在初级阶段,几乎没有什么用户,改名的代价不算太大。可问题的关键是,改什么呢?想了好几个名字,基本都被人用了,或者有其他比较出名的项目(虽然不一定是python),最后纠结了几个小时还是定格在了VizTrace上。

Viz代表Visualization,是这个项目前端的核心,一定要做到最清晰的可视化。Tracer是这个项目的后端支架,是通过对function的tracing来完成的。合在一起看还蛮酷炫的嘛!关键还没有重名的。好了,就是你了。以后这个项目就有了新名字VizTracer了,希望我不要再喜新厌旧了。

改名的事情说完了,回到功能。

在我发布完0.1.0版本之后,我打算用一个real life project做个测试。我之前有若干项目都想过为什么没有这么个工具,于是我拿出了今年早些时候写的一个五子棋AI,核心是蒙特卡洛搜索树,里面有大量的function call,在当时做profile的时候就很痛苦。

第一次试用,下了五手棋左右,AI算一步大约是20多秒,然后退出,整个程序卡住。我等了半天看没啥反应,就把它强制退出了。大概是数据太多。于是我第二次只走了一手棋,电脑算出来第一步之后我就关了。在漫长的等待之后,我终于拿到了我的report——2个G!

于是我发现,如果想把这个project真正地运用到生产中,有一些功能和优化是刻不容缓的了。首先,尽管我在trace的部分尽量做到了overhead很小,但是在输出report的时候,依然是有大量的数据需要处理的,而这也是占用用户时间的部分。尽管用户对这个时间的容忍度比较高,但是如果时间太久了也受不了。其次,对于一些非常复杂的程序,要有一定的filter机制,让用户可以只收集自己感兴趣的信息,不然这些价值偏低的信息又大又慢,让整个项目的可用度大幅度降低了。

因此,这次更新的功能主要是两个部分。

首先,我把内部数据的保存结构整理了一下,直接用Chrome Trace Event Format来表示数据了,这样可以不用parse两次,也节省了大量的建立TreeNode object的时间。这个优化本身就提供了相当不错的parsing速度加成。

其次,我引入了若干个filter,包括max stack depth, including files和excluding files。这几个filter从名字大概就能看出来是干啥的。有关stack depth限制,我们在做profiling的时候,经常更关注栈底的情况(他们占用时间块大),对于big picture来说,栈底的内容可能更重要。而including files和excluding files可以让用户只记录某些文件里的函数运行。

我又用我的五子棋AI试了一下,这次加了max stack depth,设置成了10。跑了一步,发现report只有18M了。于是我多下了几步,产生了一个80M的report,大概长这样:

可以看到,程序大约运行了50多秒,有一半以上的时间包含大量的计算(啥也没有的地方就是我在思考应该下哪里的时候啦!)

让我们zoom in到一个细节瞅瞅

如果你眼神不错的话,可以看到每次simulate_once会call一个expand和一个rollout(熟悉MCTS的小伙伴应该很熟悉这些词),其中expand里几乎都是generate_evaluateion_map (我的一个价值判断函数,优化搜索深度的),rollout里也有一个巨大的generate_evaluation_map 。但是如果你再zoom in细看的话,rollout里其实是有非常非常多的generate_evaluation_map的(那些颜色相同的都是):

我当时做了一个增量的优化,不每次重复计算,所以得到了这样一个相对比较好的结果。

看着这些图,我大概都能想起来当时是怎么profile的,如果当时有这个工具,profile大概会变得容易很多……

接下来的计划是做一个log,做第二个signal,允许用户在任意时刻写一个小log,在这张图上记录一些和时间有关的数据~

最后,还是老样子,欢迎大家关注VizTracer:

gaogaotiantian/viztracergithub.com图标

发布于 08-13

文章被以下专栏收录