TensorFlow 拆包

2018-01-15 14:20:32来源:http://jcf94.com/2018/01/13/2018-01-13-tfunpacking/作者:Chenfan Blog人点击

分享

18年的第一篇,开一个估计又是会持续超长时间的坑。


要来拆包 TensorFlow 啦。


嗯,话说这件事情前年、去年就一直在做,做完 RDMA 写完论文就扔一边了,也没再整理过。没想到之后的工作还是回到了这里,所以还是稍微记一下。


GDB 调试大法

扔一个当时写的简单指南:


TensorFlow-SourceCode-Reading.pdf

最近的新版 TF 在 dbg 模式下编 GPU 版会有奇怪的 bug,Eigen 在做内存分配的时候有个地方会报错,Github 上也能找到相关的 issues,但是至少目前的 1.4、1.5 版本都还没解决。


于是尝试了一下曲线救国的方案,在 opt 模式下面手动在编译选项里加上“-g”,虽然还不清楚 dbg 模式具体加了什么,但是至少后面 gdb 调试的时候 label 都是有的,还算能用,于是就这么用了。


$ bazel build -c opt --config=cuda --copt="-g" --cxxopt="-g" //tensorflow/tools/pip_package:build_pip_package

在要调的 python 代码前面加上这么一段:


import os
PID = os.getpid()
print('Program pid:', PID)
print('Pause here to enter DBG')
os.system("read")


然后gdb -p PID
进去就好了。



另外补充一个 python 和 gdb 的交互脚本。在 python 的源码目录下面有个Tools/gdb
目录,里面是一个 python 脚本libpython.py


启动 gdb 之后:


(gdb) python
>import sys
>sys.path.append('/path/to/libpython.py')
>import libpython
>end
(gdb) ...


或者把libpython.py
拷出来放到 gdb 启动的地方也行。导进来之后,后面 gdb 里面就会多出来一堆py-
开头的命令,除了 gdb 原有支持的查看 c/c++ 层面的信息以外,可以用这些新命令查看 python 层面的东西


To be continued.


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台