随笔:每日bug系列(2021-11-05)
随笔-每日bug系列
2021-11-05
Bug 1
计算矩阵特征值,求行列式
Bug 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:
- Downgrade the protobuf package to 3.20.x or lower.
- 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
3import 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里成功了。