随笔:每日bug系列(2021-11-05)

随笔-每日bug系列

2021-11-05

Bug 1

计算矩阵特征值,求行列式时,一定要写成 的形式,否则展开求解时极容易出错(今天计算行列式看着原矩阵脑补写特征多项式一连写错五次的痛,对自己的算术能力表示深刻怀疑)

Bug 2

记住 ,是加在对角线元素上的,不是每个位置都加2。这个惯性错误犯了好多次了!!

Bug 3

相似矩阵有相同特征值,但逆命题不成立(即有相同特征值,包括每个特征值的代数重数也相同的两个矩阵不一定相似)。因为可能有不同的Jordan标准型形式。比如一个矩阵可以对角化,相似于某个对角阵;而另一个矩阵无法对角化,只能相似于某个Jordan标准型,相同特征值个数的Jordan标准型又有很多种,所以导致这两个矩阵无法相似。

2023-7-20

Bug1

在安装一个Pyttorch项目的环境时,遇到了如下问题:

TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are:

  1. Downgrade the protobuf package to 3.20.x or lower.
  2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

参考如下(回答)[https://wenku.csdn.net/answer/dd136ae829e0919f8bdcdec4d407d728], 初步判断是因为protoc版本无法兼容protobuf的版本,需要按照如上要求降低protobuf的版本到3.19.0较好。深层原因似乎是高版本的protobuf取消李直接构建描述子(descriptors)的代码规范。(具体也不太懂)

随后运行代码时指出来了段错误(Segmentation Errors)的报错,没有其他任何信息。这种错误一般都和c/c++编译相关,比如说CUDA编程时编译的Library库版本与新环境的GCC, CUDA-toolkit版本不一致的原因。我想到的比较好的调试思路就是逐行debug,看哪里出问题。后来发现在import torch-scatter,和import torch-sparse的地方出问题了。我就想到这两个包似乎都是需要有build的操作的。所以卸载了当下的这两个包,重新安装一遍就不会报这个错误了。

以后再出现类似错误的时候可以参考这个思路。

Bug2

解决import error的一些常见方法:

  • 添加到PYTHONPATH变量中, export PYTHONPATH=XXXXX:$PYTHONPATH

  • 在代码中添加路径,例如:

    1
    2
    3
    import os.path as osp
    import sys
    sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
  • 如果使用VSCODE或PYCHARM这种IDE, 可以选择右键单击文件夹,寻找设置为根目录(Set as Source Root)类似的命令,确定。应该这个配置会被写进VSCODE或PYCHARM的工程配置文件中(猜测)。

2023-09-08

OSError: [Errno 24] Too many open files

同时还伴随着RuntimeError: received 0 items of ancdata 是在dataloader加载数据时出现的错误,参考这篇博客:https://zhuanlan.zhihu.com/p/585186356

主要原因是文件打开太多或线程太多,超过系统最大数量限制(比如默认1024)。但是我遇到一个比较诡异的问题,同一个Pytorch程序在VSCode里能正常运行,但是在bash terminal里就报这个错误。所以我一开始觉得不太可能是文件打开太多(相同的worker_num情况下,难道VSCode打开的文件会变少?)但是后来,我采用他的第二条方法,torch.multiprocessing.set_sharing_strategy('file_system'),果然在bash里成功了。


随笔:每日bug系列(2021-11-05)
https://oier99.cn/posts/c0437afa/
作者
oier99
发布于
2021年11月5日
许可协议