SongNet在Windows10环境下的复现过程及遇到的问题

这篇笔记是我2021年3月份还在读研时写的,今天上传到CSDN,留作个人备份。

笔记内容(按项目pull下来之后的调试顺序记录):

  • python3: Permission denied

将python3 改为python

原因:在系统环境中,使用的是Anaconda环境配置工具里面的python版本,其命名应该是python.exe,所以输入python才可执行。

  • UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 2411: illegal multibyte sequence错误解决方案

解决方案:编码问题,打开文件时设置参数:UTF-8编码

with open(f_cipai,encoding='utf-8') as f:

with open(f_ci,encoding='utf-8') as f:

  • RuntimeError: No CUDA GPUs are available

首先使用torch.cuda.is_available()验证python是否可正常识别已部署的CUDA GPU

发现可以正常返回true。

再经过排查,源码中设置了多GPU并行训练,而在train.sh中需要设置参数来确认使用GPU阵列中的第几个GPU进行训练。

把train.sh文件首行的参数设置改为0

CUDA_VISIBLE_DEVICES=1 \

CUDA_VISIBLE_DEVICES=0 \

tips:若还是不行,重新按照系统环境及cuda版本,到pytorch官网搜索相关命令,安装Pytorch:

C:\Users\57839>conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch

  • RuntimeError: CUDA out of memory. Tried to allocate 36.00 MiB (GPU 0; 8.00 GiB total capacity; 5.95 GiB already allocated; 3.77 MiB free; 6.22 GiB reserved in total by PyTorch)

调小batchsize 32-》16 仍然报错

RuntimeError: CUDA out of memory. Tried to allocate 62.00 MiB (GPU 0; 8.00 GiB total capacity; 5.65 GiB already allocated; 15.77 MiB free; 6.21 GiB reserved in total by PyTorch)

考虑GPU显存没有释放,关闭终端后重启终端,仍然报错GPU显存不足,而利用

nvidia-smi

命令查询在GPU0上正在使用GPU显存的进程:

显示CPU显存占用仅为1170MB

于是可以确定并不是GPU显存未释放,于是为了确定是否是batch size的问题,直接将batch size调到极小值batch size = 1进行试验,发现可以运行,于是确定是batch size大小问题,逐步减小batchsize,最终确定batchsize = 4。

调小为batch size =

进步训练,显存占用接近90%。

训练过程中发生中断,报错如下

UnicodeDecodeError: 'gbk' codec can't decode byte 0xa5 in position 8: illegal multibyte sequence

根据提示可发现还是字符编码的问题,根据bash的traceBack回溯到出错的代码行,改变读取数据时的代码参数为utf-8

继续运行训练,发现跑一半显存又溢出了

于是,只能考虑减少网络的参数数量:

在train.sh文件中对如下超参数进行设置:

--embed_dim 768 改为 600 //注意这个参数必须是 num_heads 超参数的整数倍,否则会报错

AssertionError: embed_dim must be divisible by num_heads

--ff_embed_dim 3096 改为 1024

--layer 12 改为 10

至此,网络可正常训练。

训练结束后:

由于训练过程中每迭代1000次保存一次模型,模型共88GB。

取损失最小的模型,后缀号为153999。

——————————模型测试:

1 .依旧是GPU设备参数不对导致无法正确识别:

gpu改为 = 0

看情况应该是修改了模型维度导致的参数量不匹配,但是不知道测试过程中哪个代码段出了问题。看了下traceback提示,看不出所以然。

——————————————————————————————

  • 经过几天调试,根据报错定位model的文件中的代码及相关参数,把网络初始化时的参数打印出来细致观察,发现:

而在biglm.py中对BIGLM类的定义如下:

使用了字符集vocab.txt的vocab.size来初始化参数tok_embed,而回过头去观察使用的字符集:

这个字符集的行数的尾数好像和报错信息中的28781有点像,

于是先备份了一份原始字符集,然后再试着删去几行,发现报错的数据28781果然也跟着变化了,于是确定vocab.size这个数据与字符集文本vocab.txt文件的行数有关。两者之间的差应该是1100。

根据报错,模型需要的参数量应该是6410,所以应该把字符集删减为6410-1100 = 5310行。

再使用命令 sh test.sh,参数规模不匹配的报错终于解决。又出现了常见的字符文件的解码错误

将对应文件的302行读取命令处加上encoding=‘utf-8’即可。

出现了新错误:

猜测输出的目录及文本文件需要手动创建:

手动创建后报错修复,可以开始测试生成歌词诗句了。

由于忘记改控制台的输出字符编码为UTF-8,所以控制台的打印乱码了,文本文档里UTF-8编码查看中文字符是没问题的。

测试后未润色的词句非常奇怪,模型的测试效果很差。。。

运行润色模块,出现报错

复制训练好的模型到相应目录,改为tmp.ckpt,出现字符编码错误,只能又改为utf-8

修改命令行窗口的字符编码后运行润色模块polish.py,润色效果如下,效果也很差。

可能原因:1.在我的设备环境下,显存明显不足,为了让网络能够正常训练,修改了多项模型的参数,导致了模型训练效果不好。

2.字典文件有问题。

我查看了data文件夹下的字典文件vocab.txt发现与model文件下的字典vocab.txt有区别,且这个字典正好是5310行,并且里面只有标点符号和中文字符,所以我尝试将原代码中加载的字典文件从model文件夹换为data文件夹:

重新测试模型,发现效果好了很多。(突然好像意识到前面用错字典了,然而只能说,官方提供的demo里用的就是错的字典)

调试到这一步,终于模型生成诗词的句式通顺了,也不存在非中文的不正确字符。

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Windows上搭建3D目标检测的环境,你需要进行以下步骤: 1. 安装CUDA和cuDNN:首先,确保你的计算机上已经安装了NVIDIA的GPU和最新版本的CUDA和cuDNN。你可以从NVIDIA的官方网站下载并安装它们。 2. 安装Anaconda:在Windows上安装Anaconda是一个方便的方法,可以帮助你配置Python环境和依赖库。从Anaconda的官方网站下载并安装Anaconda。 3. 创建虚拟环境:在Anaconda Prompt上,使用conda命令创建一个虚拟环境,并安装Python和必要的依赖库。例如,执行以下命令: ``` conda create --name env_name python=3.6 conda activate env_name conda install numpy opencv pytorch torchvision -c pytorch ``` 4. 下载数据集:选择一个3D目标检测的数据集,比如KITTI、SUN RGB-D等,并从官方网站上下载数据集。 5. 下载代码:从GitHub上下载3D目标检测的代码,例如MV3D、AVOD、SECOND等。 6. 配置环境变量:将CUDA和cuDNN的路径添加到环境变量中,例如: ``` set PATH=%PATH%;C:\Program Files\NVIDIA Corporation\cuda\bin;C:\Program Files\NVIDIA Corporation\NvToolsExt\bin;C:\Program Files\NVIDIA Corporation\cuDNN\bin set CUDA_HOME=C:\Program Files\NVIDIA Corporation\cuda set CUDA_TOOLKIT_ROOT_DIR=C:\Program Files\NVIDIA Corporation\cuda set CUDA_PATH=C:\Program Files\NVIDIA Corporation\cuda set CUDNN_HOME=C:\Program Files\NVIDIA Corporation\cuDNN ``` 7. 训练模型:使用PyTorch等深度学习框架,训练一个3D目标检测模型,比如MV3D、AVOD、SECOND等。 8. 测试模型:使用训练好的模型,在测试集上进行测试,并评估模型的性能指标,比如准确率、召回率、精确度等。 需要注意的是,不同的3D目标检测模型可能需要不同的依赖库和环境配置,因此在搭建环境时需要根据模型的要求进行相应的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值