记录一下自己跑通一个GitHub项目《GAT-BiLSTM-CRF》的过程

自己电脑环境如下:

  • 显卡:3060TI
  • CUDA : 11.0
  • CUDAToolkit : 8.0.2

首先新建一个conda环境

conda create -n GBC python=3.7
conda activate GBC

然后用Pycharm打开其项目,并把Pycharm的环境也切换到GBC

屏幕截图 2023-06-24 093507

下面就是安装环境了,根据作者的md文件,需要装一个Pytorch1.1版本

从官网找见下载链接,并把-c pytorch去掉,以便使用清华源

conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=10.0

屏幕截图 2023-06-24 095053

看来这种方法不太行,换一种方法!

打开Pytorch官网的下载源,搜索cu100/torch-1.1.0,下载如下的包

屏幕截图 2023-06-24 095456

ちょっと待って,我好像已经发现了问题,我的CUDA11.0肯定和这个不匹配,装了也没用,那就用CPU版本的torch跑一跑试试吧

# CPU Only
conda install pytorch-cpu==1.1.0 torchvision-cpu==0.3.0 cpuonly

屏幕截图 2023-06-25 124226

应该是numpy版本不对?重装一下试试

pip install numpy -U

屏幕截图 2023-06-25 130608

那就卸载了重装一下吧

pip uninstall numpy
pip install numpy

屏幕截图 2023-06-25 130928

咦?我不是卸载了吗?根据之前的经验,可以试试强制升级numpy版本

pip install numpy --ignore-installed numpy

屏幕截图 2023-06-25 131310

再跑一次试试

屏幕截图 2023-06-25 131408

刚刚那个错解决了!这个应该是没有装nltk的包,装一下试试

pip install nltk

再跑一次

屏幕截图 2023-06-25 131544

能跑起来一点点了,这应该是我还没有改地址的问题,改一下去,先全局搜索一下这个地址哪用到了(第52行)

image-20230625131832793

出现大问题了,作者并没有提供数据集,但是他提供了数据集的格式

Input is in CoNLL format (We use BIO tag scheme), where each character and its label are in one line. Sentences are split with a null line.

翻译一下

输入是CoNLL格式(我们使用BIO标签方案),其中每个字符和它的标签都在一行。句子用空行分割。

那就先自己找一个数据集康康能不能跑吧,数据集就用我之前的找的试试

按照作者的地址和文件夹创建一下

屏幕截图 2023-06-25 133501

先跑一下试试吧

屏幕截图 2023-06-25 133550

可恶啊,可能就是数据集的格式不对了。但是感觉有戏

换一个有一个标注的数据集试试,经过一番搜索,找到了一个数据集

屏幕截图 2023-06-25 135200

复制到项目中并修改一下路径试试

屏幕截图 2023-06-25 140111

跑一下试试

屏幕截图 2023-06-25 140224

可恶啊,还是数据集读的方式不对

找师兄borrow了一个数据集,这个配置后的样子

屏幕截图 2023-06-25 142415

运行走起!

屏幕截图 2023-06-25 142455

又报错了,搜了一下,试试在最前面导入一个包

from tqdm import tqdm_notebook as tqdm

image-20230625142708124

emmmm再换一个别的包试试?

from tqdm import tqdm

屏幕截图 2023-06-25 142851

又回到了格式问题,一直说是gdk编码不能识别,但我看了一下自己的数据集是utf-8编码的

要不试试把打开文件的编码改一下?找到打开文件的编码,加上encoding属性(19行)

屏幕截图 2023-06-25 190447

in_lines = open(input_file, 'r', encoding='utf-8').readlines()

屏幕截图 2023-06-25 191202

啊?越界了!调试一下康康

屏幕截图 2023-06-25 191742

我猜,这个label应该就是标注,可能他的数据集中,标签在pairs[-5]的这个位置。但我的理论上貌似应该大概也许在pairs[1]的位置吧。改一下试试

label = pairs[1]

再跑一次!

屏幕截图 2023-06-25 192031

emmmmmm为什么————

我肯定的一点是,我应该是改对了,难道是数据太大了吗

屏幕截图 2023-06-25 192521

查了一下网上的方法,试试加入一个判断条件防止越界

屏幕截图 2023-06-25 192811

if not idx in range(len(in_lines)):
break

屏幕截图 2023-06-25 193334

跑一下试试

屏幕截图 2023-06-25 193411

纳尼?还可以越界的吗

最后一招!我试试把数据集弄小一点

屏幕截图 2023-06-25 193916

其他的数据集也差不多这么大,就一句话!我不信这也可以越界了,把地址改完重跑一次

屏幕截图 2023-06-25 194043

emm确实不越界了,这个错误可能是之前没注释干净,继续注释试试

image-20230625194305060

再跑一次

屏幕截图 2023-06-25 194334

我猜想,我是安装的是CPU版本的torch,而他程序里要求的是带GPUtorch。我康康能不能把程序改一下吧

网上搜索了一下,试试这么改

屏幕截图 2023-06-25 194942

屏幕截图 2023-06-25 195143

感觉这是一条不归路啊,要不先试试torch1.7版本(电脑这个版本可以调用GPU)能不能跑,如果不行再用cpu吧。

官网找的链接

conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0

安装完了

屏幕截图 2023-06-25 195937

跑跑试试(希望兼容希望兼容!)

image-20230625200042482

NO————————————!!!!!!!

看了一下好像是自己的torch安装乱了,果然还得是先卸载再安装啊,不会自动卸载的

先卸载

pip uninstall torch
pip uninstall torchvision

然后看一下有没有卸载干净

pip list

屏幕截图 2023-06-25 232346

像这样就可以了,再重装一下吧

conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0

安装完再检查一下

屏幕截图 2023-06-25 232540

好的,现在就可以跑一下试试了!

屏幕截图 2023-06-25 232647

啊嘞?!我用python命令行试试能不能调用GPU

python
import torch
torch.cuda.is_available()
torch.cuda.get_device_name(0)

屏幕截图 2023-06-25 232835

emmm好吧,看来确实不能,再卸载了重装一下吧

pip uninstall torch
pip uninstall torchvision
pip install torch==1.7.0+cu110 torchvision==0.8.0+cu110 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

屏幕截图 2023-06-25 235355

又是什么情况?!那还是用conda装吧

conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0

屏幕截图 2023-06-25 235505

为什么是CPU版本的啊,换torch1.7.1试试?

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

屏幕截图 2023-06-25 235744

这也太艰难了吧,网上查了一下

屏幕截图 2023-06-26 000009

按照他说的找到文件夹并且删除

屏幕截图 2023-06-26 000302

再重装一下

pip install numpy

然后再装一下torch试试

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

屏幕截图 2023-06-26 000557

感天动地,终于装好了。跑一下试试!

屏幕截图 2023-06-26 000741

是不是我数据量太少的原因,先改回原来的数据集

然后我发现了设定数据集大小的位置,修改成比自己数据集大的大小

屏幕截图 2023-06-26 001114

走起试试!

屏幕截图 2023-06-26 001202

突然又发现了一个参数,可能是不是没改全的原因,改完跑一下试试

屏幕截图 2023-06-26 220112

走起

屏幕截图 2023-06-26 220233

emmmm好神秘啊!换成只有800行左右试试

屏幕截图 2023-06-26 002211

这又是什么诡异的错误…网上查了一下

屏幕截图 2023-06-26 220622

好像比较好改,直接看报错信息,找到最后一个代码里的报错

屏幕截图 2023-06-26 002211

点进去,会自动跳到报错那一行,然后用网上的方法修改一下

embeds_pack = pack_padded_sequence(embeds, batch_len.to('cpu'), batch_first=True)

屏幕截图 2023-06-26 221334

再跑试试!

image-20230626221422520

跑了但没完全跑起来,是哪除0的情况没有考虑到应该,点进去代码里加一个判断条件试试

把原本这段代码

epoch_cost = epoch_finish - epoch_start
print("Epoch: %s training finished. Time: %.2fs, speed: %.2fst/s, total loss: %s" % (
idx, epoch_cost, train_num / epoch_cost, total_loss))

修改为这段

epoch_cost = epoch_finish - epoch_start
train_speed = null
if epoch_cost != 0:
train_speed = train_num / epoch_cost
print("Epoch: %s training finished. Time: %.2fs, speed: %.2fst/s, total loss: %s" % (
idx, epoch_cost, train_speed, total_loss))

屏幕截图 2023-06-26 222314

在试试吧

屏幕截图 2023-06-26 222500

emmm这样吗,网上一查

屏幕截图 2023-06-26 222529

那就把null改成none试试

image-20230626222633707

emmm行吧,那就直接改一个数字算了(114514/doge

woc跑起来!?

image-20230626222825231

所以这是成功了?!但是为什么好多0,总感觉不太对的样子