debug个人学习记录

加载预训练模型

timm.create_model连接不上

2023.12.29

报错信息:An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on.

解决:【Deep Learning\pretrained】timm库在huggingface无法联网时的预训练权重的下载办法 || 代码测试_huggingface_hub.utils._errors.localentrynotfounder-CSDN博客

专属包的model

代码示例

from hiera import Hiera

model = hiera.hiera_base_16x224(pretrained=True, checkpoint="mae_k400_ft_k400")  # Checkpoint is optional (will use default)

对于这样的特定包,一般可以根据官网对model名字的描述,自行修改

可以参照得到:model = hiera.hiera_large_16x224(pretrained=True, checkpoint="mae_k400_ft_k400")  即可。可以不用下载官网的pth权重。

terminated with signal SIGSEGV

2024.2.27

报错理由是Pytorch训练网络时存储器区段错误,出现内存泄漏。可能原因一般是无效的内存引用,如访问空指针,内存越界访问,访问已经释放的内存等。

查阅了issue和网上的一些方案,如改成单线程跑,查看数组有无越界等,但是都没解决

解决:PyTorch 等版本不对应,看paper用的是什么版本

由于复现的模型是21年的文章,查看了readme,要求如下Python >= 3.6,PyTorch >= 1.3,版本比较老。目前是python:3.9.18,torch:2.2.1+cu118,故尝试降版本,配置Python3.7,pytorch 1.10.1,torchvision=0.11.2即可。

配置Python pytorch torchvision torchaudio cudatoolkit等

配置Python3.7

conda create -n name python=3.7

配置torch torchvision等

特别注意!必须按官网下载!conda有时速度太慢会fail(应该是网络问题 但是有时换了清华源还是不行,看网上有说法是把命令的 -c pytorch删掉【若有还是用默认源】,但是速度还是很慢) 可以用pip安装。从官网下载的话还能考虑到toolkit等,就不用反复配了

当前:Start Locally | PyTorch

之前版本:Previous PyTorch Versions | PyTorch

配置cudnn cudatoolkit

重新按官网安cudnn(lls服务器就我们在用可以换)

下载方法:复制链接到迅雷下

笔记--Ubuntu20.04安装Nvidia驱动、CUDA Toolkit和CUDA CuDNN_nvidia-cuda-toolkit-CSDN博客cudatoolkit不能低于系统那个

CUDA error: device-side assert triggered

报错信息:

解决:
参考文章:【已解决】RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronous-CSDN博客

此处是分类问题,所以主要检查了类别。原模型在AVA数据集上搭建,类别60,而新建数据集类别50。在config处修改num_classes。

Descriptors cannot not be created directly. 

2024.3.6

报错信息:

报错原因:大概率是安装的protobuf版本高了的问题,更新低版本的protobuf,具体操作:pip install protobuf==3.19.0

下载安装包pip

24.3.7

以detectron2为例:

git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2

解压下来,如果得到detectron2-main文件夹,注意则改名成detectron2,再用python -m pip install -e detectron2。或者直接用python -m pip install -e detectron2-main

No module named ‘cv2‘

24.3.8

1.注意安装命令是opencv-python

2.注意下载的目录 有时会安到其他环境中 如下所示

所以可以用命令 

pip install opencv-python -t /home/amax/anaconda3/envs/XXX/lib/python3.7/site-packages

虚拟环境

24.3.9

查看cuda版本:nvcc -V

  • 虚拟环境

    同一机器上复制虚拟环境:

    conda create -n ljyYP--clone ljySD

    conda create -n new_env_name --clone old_env_name
  • 查看该环境中安装的包

    pip list

  • 删除虚拟环境

    conda env remove --name ljy_itr2
  • 查看有什么虚拟环境

    conda info --env
  • 选择虚拟环境

    如果没有直接选 就把/home/zhoudf/anaconda3/envs 里面对应的路径输进去

  • 清理缓存和安装包

    conda clean -p  //删除缓存
    conda clean -t
    conda clean -y --all    //删除pkgs目录下所有的无用安装包及cache
  • 根据requirement创建虚拟环境

    conda create --name yolo_pose --file requirements.txt
    
  • 从guthhub下载:git clone 网址

  • pytorch

    官网Start Locally | PyTorch

  • 创建指定python版本的环境

    conda create --name CHZ python=3.8.2
  • 查看安装包所在的位置

    pip show <package_name>

DDP多卡训练

24.3.10

PyTorch多卡/多GPU/分布式DPP的基本概念(node&rank&local_rank&nnodes&node_rank&nproc_per_node&world_size)

node
物理节点,就是一台机器,节点内部可以有多个GPU(一台机器有多卡)。

rank & local_rank
用于表示进程的序号,用于进程间通信。每一个进程对应了一个rank。

rank=0的进程就是master进程。

local_rank: rank是指在整个分布式任务中进程的序号;local_rank是指在一台机器上(一个node上)进程的相对序号,例如机器一上有0,1,2,3,4,5,6,7,机器二上也有0,1,2,3,4,5,6,7。local_rank在node之间相互独立。

单机多卡时,rank就等于local_rank

nnodes
物理节点数量

node_rank
物理节点的序号

nproc_per_node
每个物理节点上面进程的数量。

group

进程组。默认只有一个组

world size 全局的并行数
全局(一个分布式任务)中,rank的数量。

每个node包含16个GPU,且nproc_per_node=8,nnodes=3,机器的node_rank=5,请问world_size是多少? 答案:world_size = 3*8 = 24

torch.multiprocessing.spawn

代码:

parser.add_argument('--nproc_per_node', type=int, default=8) 
    
torch.multiprocessing.spawn(main, args=(args,), nprocs=args.nproc_per_node)

设置:

  1. 全局GPU设置(os.environ['CUDA_VISIBLE_DEVICES'] )必须与进程数(nproc_per_node)匹配,因为每个进程使用一个GPU。这样可以避免使用不同GPU导致的错误。另外,建议全局指定的GPU尽量为空闲,以防止内存溢出等问题。

  2. 当进程数(nproc_per_node)设置为1时,表示单卡运行。

  3. 进程数(nproc_per_node)的设置看环境变量os.environ['CUDA_VISIBLE_DEVICES']所设定的值。例如,如果os.environ['CUDA_VISIBLE_DEVICES']的值为'1,2,3',则进程数(nproc_per_node)应设为3,以确保每个进程都能分配到对应的GPU。

  4. bs说明:若设的bs=1(可以理解为每个GPU的bs),但是用3个GPU,其实是相当于总bs=3的

运行效果:

就是相当于本来有184,376个样本,这个方法就是把184,376个样本分到了不同的进程上,每个分到 46094 个

nn.DataParallel

github参考:https://github.com/liujf69/TD-GCN-Gesture/blob/master/main.py

文章参考:Pytorch 多GPU训练,nn.DataParallel 的几种实现方式,(亲测自用那种)_dataparallel(network)-CSDN博客

之前需要把input数据和target放在cuda上(此处的cuda device可以随意设置)

注意要这种方法要指定主GPU,在训练时把网络和数据都要.to(main_device)加载到主GPU,然后nn.DataParallel会把数据均匀负载到 device_ids=[]指定的几个GPU上,注意哦device_ids=[]这里默认第一个是主GPU,也就是要和你定义的main_device 对应上

#指定主GPU,这里特意用main_device表示
main_device = torch.device('cuda:2')
 
#模型初始化
network = net()
network.to(main_device)
network = nn.DataParallel(net, device_ids=[2,3,4])
 
#训练阶段
data = data.to(main_device)
target = target.to(main_device)
 
out = network(data)
 
loss = loss(out,target)
 

效果:其实就是把数据均匀分到几个gpu上

模型的to device是单卡的;但是数据的to device可分配多卡

用nn.parallel是对模型封装 之前数据也需要放在gpu上 且之前随便放在一个gpu上即可 到后面parallel会自动分配的

分布式训练报错RuntimeError: Expected to have finished reduction in the prior iteration

24.3.21

报错:

报错原因:有部分参数初始化了,但是并没有在模型的foward过程中使用,因此没有梯度无法反传参数更新。

本次报错是尝试更换backbone,原backbone网络的neck是用不到的 只是用选择的网络的backbone,所以这部分参数没办法更新。

解决方法

1.法一:直接忽略该问题

按照报错信息说的,在这个分布式训练函数torch.nn.parallel.DistributedDataParallel加上参数find_unused_parameters=True,也即:

 net = DistributedDataParallel(net, device_ids=[local_rank], broadcast_buffers=False,find_unused_parameters=True )

2.法二:找出没有进行forward的参数,针对性解决问题

本部分参考Pytorch——基于mmseg/mmdet训练报错:RuntimeError: Expected to have finished reduction in the prior iteration_in addition, you can set the environment variable -CSDN博客

找出参数所在位置,不用的可以直接去掉

分布式训练边训边测结果和load ckpt测试结果不同

  • 问题:模型在训练状态下最佳状态无法通过直接load对应的checkpoint达到。且,直接load checkpoint的mAP会比边训边测的mAP差2~3%。

  • 原因:由于采用了分布式训练,因此在进行eval状态时,所有分布式机器并不是同步的,有些卡的模型可能还没有稳定下来。因此,在进行边训边测时,eval状态的模型实际上是不稳定的。然而,保存下来的检查点是在模型稳定后得到的结果,因此边训边测和直接加载checkpoint得到的结果有所不同。

  • 解决:我们在训练结束后进行分布式进程同步,使得进入eval的模型状态已经稳定。

QT Designer + VS Code + PyQt5

QT Designer + VS Code + PyQt5 安装教程_qt designer用终端安装-CSDN博客

服务器问题

修改权限

配置anaconda/ 发现没有conda环境(但有配):换权限 sudo su更换到root,

内存不足

看磁盘空间占用大小

  • du -sh /home/hbenke/Project

  • du -sh *

  1. df(磁盘空间查看):

    • df(磁盘空间查看)命令用于显示文件系统的磁盘空间利用情况,包括文件系统的总大小、已用空间、可用空间、使用率以及挂载点等信息。

    • df 命令只关注文件系统级别的空间使用情况,不会深入到具体文件或目录的级别。

  2. du(磁盘使用情况查看):

    • du(磁盘使用情况查看)命令用于查看指定文件或目录的磁盘使用情况,包括所占用的磁盘空间大小。

    • du 命令会递归地统计指定目录及其子目录的大小,并汇总报告出来。

磁盘要是满了就要清东西 比如清过去存的模型参数

  • 没用的文件,mv到备份的服务器上的备份去 /data1/hjh

  • 阿里云盘里面去

  • 使用 ln -s 映射内存空间

 Linux /dev/mapper/ubuntu--vg-ubuntu--lv 磁盘空间不足

24.3.22

可以尝试扩容,具体操作:解决 Linux /dev/mapper/ubuntu--vg-ubuntu--lv 磁盘空间不足的问题_ubuntu vg 为什么不用满-CSDN博客

Open 3D点云可视化

在服务器上配置会报错远程服务器回显问题,解决可参考:远程服务器回显问题(open3d/matplotlib)_glfw error #65544: x11: the display environment va-CSDN博客

在本地配置,对open3d的配置还是有点麻烦的,有很多版本不兼容的问题

最终配置成的环境:

python:

open3d:0.16.0

Werkzeug:2.0.3

MarkupSafe:2.0.1

importError: cannot import name ‘BaseResponse‘ from ‘werkzeug.wrappers‘_cannot import name 'baseresponse' from 'werkzeug.w-CSDN博客

vscode降级1.85, 处理远程主机可能不符合glibc

背景:要登上之前的一个服务器,但vscode1.88版无法连接,需要降级。

处理:vscode降级1.85, 处理远程主机可能不符合glibc_vscode 降版本-CSDN博客

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值