调试工具
文章平均质量分 55
Hi20240217
每天进步一点点
展开
-
python获取某些城市的GPS坐标
【代码】python获取某些城市的GPS坐标。原创 2024-05-21 16:12:45 · 253 阅读 · 1 评论 -
基于gcc plugin机制,编译源码时在每个函数前插入一条指令,打印当前的调用栈,省去了修改源码的时间
在学习开源库时,想了解它的调用流程,可以使用valgrind的callgrind功能。这里介绍另一种方法,gcc有一种plugin机制,可以利用这种机制在编译源码时,在函数中插入call指令,调用自己的api调用,咱们在这个函数中调用libunwind获取调用栈信息原创 2024-05-21 16:05:14 · 401 阅读 · 1 评论 -
pytorch模型精度对比工具
通过register_forward_pre_hook、register_forward_hook、register_full_backward_pre_hook、register_full_backward_hook记录Module的耗时及输出结果;aten算子则通过torch_dispatch实现。之后对比不同的平台输出结果的耗时及相对误差并绘出直方图。可通过diff信息,定位从哪里开始出现误差原创 2024-05-19 19:01:44 · 833 阅读 · 0 评论 -
Windows11挂载LVM2
Windows11挂载LVM2原创 2024-05-18 14:12:05 · 261 阅读 · 0 评论 -
linux基于LD_PRELOAD机制的内存泄露检测工具
Valgrind影响性能且某些程序会报错,同时我们希望跳过初始化阶段,在程序稳定运行之后再去检测内存是否会持续增涨,为了更高效的记录内存分配情况,采用b+树.该程序会拦截malloc,free,calloc,realloc,new,delete。记录10层的PC指针,方便解析脚本定位调用的代码位置.原创 2024-05-17 16:52:21 · 721 阅读 · 0 评论 -
python通过ctypes调用C/C++ SDK,当SDK异常时,同时打印C/C++/Python的栈信息
本文演示了python通过ctypes调用C/C++ SDK,当SDK异常时,同时打印C/C++/Python的栈信息.基于traceback、addr2line、PyErr_SetString、backtrace_symbols。原创 2024-05-14 18:20:11 · 840 阅读 · 0 评论 -
相同的随机种子CPU和GPU上torch.nn.init.xavier_normal_结果并不一致
在训练pytorch模型时,相同的随机种子,不同的服务器上loss并不一样,通过调试发现这二个平台的权值也不一样.单独测试torch.nn.init.xavier_normal_,发现也不一样.如果都放在CPU上则二台服务器上的结果一致,原来Megatron-DeepSpeed也有–use-cpu-initialization这样一个参数,采用CPU初始化权值。原创 2024-05-14 17:11:23 · 300 阅读 · 0 评论 -
一次pytorch分布式训练精度调试过程
9.在异常的时候pause进程,在python调用reduce_scatter的位置打印调用栈。15.review该算子内部实现,确实有几行代码将输入当fp32处理。8.dump reduce_scatter的输入,发现每次都不样。2.dropout设置为0,重复运行二次,对比loss是否一致。4.对比backward之后的梯度,发现某一个梯度不一致。5.dump得到所有算子的规模,单算子测试功能正常。7.排除通信库的问题,逐算子bypass。10.定位到有问题的模块,是一个融合算子。原创 2024-05-13 22:28:45 · 296 阅读 · 0 评论 -
pytorch如何知道某个Parameter是在哪一个Module中的创建的
在定位pytorch精度问题时,发现optimizer中某些Parameter值异常,想知道它属于哪个模块的.本文提供二种方法1.全局搜索2.在创建Parameter的地方加一个属性,写明所在的模块名,需要的时候直接获取。原创 2024-05-12 10:48:15 · 458 阅读 · 0 评论 -
判断某地址是否为合法的PCIE BAR空间地址
以下脚本用来判断某地址是否为合法的PCIE BAR空间地址。原创 2024-05-11 20:16:38 · 543 阅读 · 0 评论 -
基于torch_dispatch机制生成Megatron-DeepSpeed调用关系图
想知道Megatron-DeepSpeed训练过程中各模块之间的调用关系。torch_dispatch机制可以拦截算子,inspect又能获取到调用栈(文件,类名,函数,行号).基于这些信息可以生成调用关系,最后用graphviz生成SVG图像。该思路也可以用来画其它pytorch工程的调用关系图1.为了减少图像宽度,一行显示一级文件路径2.没有显示具体的ATen算子。因为边太乱。原创 2024-05-10 19:23:27 · 750 阅读 · 1 评论 -
基于LD_PRELOAD机制的API批量拦截方法
之前采用LD_PRELOAD拦截某个SDK API时,会定义跟被拦截API一样的参数,如果要拦截的API很多,就太浪费时间了。于是想能不能定义一个足长参数的API代替呢以下实验实现了一个10个参数的API,通过宏批量生成拦截API,实验结论是,如果是参数不多,是没问题的,如果参数太多,可以用结构体指针传递。原创 2024-05-09 11:01:30 · 603 阅读 · 0 评论 -
通过os.dup sys.stdout.fileno捕获标准输出,判断pytorch算子是否fallback到了cpu
某种设备在运行pytorch算子时,如果不支持会自动fallback到cpu,输出的tensor.device却不是cpu,我希望能获取到这个状态。本文通过捕获标准输出,根据终端是否输出fallback字符串,判断是否触发了fallback。原创 2024-05-08 11:30:22 · 617 阅读 · 0 评论 -
基于picklerpc的pytorch单算子测试[单算子远程测试]
通过得到了算子类型及参数信息。我希望对比每个算子在不同硬件平台上的性能和误差。如果将所有的结果都存成文件,则占用空间太大。下文演示了如何使用picklerpc 将算子类型及参数传递到远程服务器测试。原创 2024-05-06 20:49:13 · 541 阅读 · 0 评论 -
pygame学习--精灵组、碰撞检测、精灵更新
通过pygame库,模拟种群的分化。1.X从左往右移动,表示年龄的增加;Y坐标表示阶层2.随着X坐标不断增大,圆逐渐增大,颜色也加深3.精灵越多,碰撞后死亡的概率越大,诞生新精灵的概率越小4.每个精灵都有随机的运动速度及Y坐标的移动方向5.发生碰撞且诞生新精灵时,继承当前坐标的Y值。原创 2024-05-05 13:32:50 · 413 阅读 · 1 评论 -
C/C++__VA_ARGS__学习--自动打印函数的参数和返回值
通过__VA_ARGS__,自动打印函数的参数和返回值原创 2024-05-04 19:37:42 · 1180 阅读 · 0 评论 -
asyncio&networkx&FuncAnimation学习--动态显示计算图的运行情况
1.动态显示计算图的运行状态(点或边是否已完成)1.定义计算图2.asyncio 并行计算3.networkx 显示计算图4.FuncAnimation 动态更新。原创 2024-05-02 14:15:32 · 557 阅读 · 1 评论 -
基于__torch_dispatch__机制的dump方法
之前拦截torch和torch.Tensor的办法,在处理backward时,不能看到aten算子的细节.以下基于__torch_dispatch__机制的方案更节约代码,且能看到调用栈。原创 2024-04-24 11:46:11 · 778 阅读 · 0 评论 -
拦截pytorch算子,dump输入输出
希望dump出pytorch每个算子的输入输出,但pytorch普通的hook机制只能拦截module.以下提供一种方法可以拦截torch.add,torch.Tensor.add这类算子.原理是通过模板替换,劫持torch和torch.Tensor中的算子.遍历next_functions调用register_hook拦截backward.原创 2024-04-23 22:01:51 · 630 阅读 · 0 评论 -
ptrace动态修改某个进程的数据
本文演示了如何基于ptrace机制,修改另一个进程的数据。原创 2024-04-22 09:43:41 · 259 阅读 · 0 评论 -
基于pytorch hook机制,生成一次前后向的timeline
本文通过pytorch hook机制,拦截所有子module的forward和backward,统计执行时间及内存使用情况。原创 2024-04-20 11:54:38 · 798 阅读 · 1 评论 -
通过nvtx和Nsight Compute分析pytorch算子的耗时
本文演示了如何借助nvtx和Nsight Compute分析pytorch算子的耗时。原创 2024-03-30 15:48:05 · 593 阅读 · 1 评论 -
Python耗时统计-可嵌套-生成Timeline-chrome://tracing/预览
本文演示了如何用chrome://tracing查看python嵌套代码的耗时成分原创 2024-03-30 15:17:41 · 917 阅读 · 0 评论 -
以调试ffmpeg为例,演示gdb如何定位内存被修改
本文演示了如何使用gdb定位avformat_find_stream_info函数破坏codecpar变量的情况原创 2024-03-13 21:37:15 · 529 阅读 · 0 评论 -
硬件解码器封装Python api的踩坑记录
硬件解码器封装Python api的踩坑记录原创 2024-03-13 19:50:09 · 378 阅读 · 0 评论 -
linux进程disk sleep状态的定位方法
在调试设备驱动时,可能会遇到进程阻塞,kill不掉,查看进程状态为disk sleep,本文演示了如何定位原因。原创 2024-03-13 19:29:00 · 533 阅读 · 0 评论 -
封装SDK时如何隐藏内部符号
在封装SDK,对外提供API时。希望不暴露内部符号,免得产生冲突,给集成带来麻烦.本文演示了二种方法。原创 2024-03-11 09:13:56 · 447 阅读 · 0 评论 -
基于RabbitMQ的RPC通信
当需要调用局域网中的服务时,可以用frp进行穿透,也可以在公网搭建RabbitMQ服务器做消息中转,本文演示了这个步骤。原创 2024-02-28 19:59:36 · 814 阅读 · 0 评论 -
客户支持工程师,常用命令整理
以下整理了一些工作中常用到但个人不易记住的命令,方便后查看【不定期更新】原创 2024-02-24 11:47:26 · 823 阅读 · 0 评论 -
如何通过frp内网穿透工具访问内网里的NVR、IPC等嵌入式设备
本文介绍了如何使用frp内网穿透工具访问内网里的NVR、IPC等嵌入式设备。原创 2024-02-22 11:40:17 · 895 阅读 · 0 评论 -
基于Linux LD_PRELOAD机制的Profing工具
本文提供了一种不需要修改工程源码的Profing方法,它基于Linux的LD_PRELOAD机制,并且能拦截dlsym加载的函数.并且生成被拦截函数调用的timeline,用于分析耗时成分.可通过https://ui.perfetto.dev/或ChromeTrace可视化通过Timeline,可进一步分析,是否有空泡、耗时成分、是否充分overlap,协助优化用户程序。原创 2024-02-19 21:31:29 · 970 阅读 · 2 评论