PyGAT问题

       最近在做torch下GAT模型改进的实验,虽然在Cora数据集上取得了不错的结果,但是切换其他数据集时遇到了些问题:

       之前跑Cora数据集的时候,训练的速度在0.0.3s/epoch。但是Cora数据集跑好后,在试着用Citeseer和Pubmed数据集跑起来的时候,发现速度变得特别慢,Citeseer要4、5s一个epoch,pubmed就更夸张了,一个epoch要200多s。

排查问题

       首先因为跑citeseer和pubmed需要新的处理数据方式,尤其是pubmed需要sparse方法,不然系统会杀死进程,所以在数据处理块utils上引用了新的处理数据的方式,怀疑是否是新处理方法太慢导致的。

结果还原了最初的方法,速度依然从0.03降速到了2s,问题不出在utils

       刚开始用autodl云服务器,不太熟悉,之前放入新数据集或者新打开一个程序之后,显示找不到file,每次都重新上传一遍所有文件,虽然把文件存在了数据盘autodl-tmp,但不知道是不是会占用内存导致出问题,所以查看了一下内存容量,发现数据盘内存只需占了2%,问题不出在内存占用。

        回想起中间很顺畅的跑过一次cora,换成citeseer之后,改过一个bug,将cuda的版本从8更新到了11.3,之后程序运行就变慢了,不知道问题是不是出在这。

查看环境时,发现更新cuda导致torch也从0.4.1更新到了1.5.1

还原代码,重新配置环境至torch==0.4.1,运行程序,程序运行速度恢复了。。

        从周五下午拿到任务后,到周一早上,一直在改各种各样维度不匹配、cuda版本不对的bug,可以说是一点进展都没有,目前的时间分配基本是 写代码*0.1+改bug*0.9,只能说、只能说。。。

        然后讲讲这两天有进展的事,自从跑数据集速度从0.03变成5、6乃至200后,就开始思考调参时候的效率,因为改进是基于训练好的模型的,所以调参也只在改进部分调就可以,之前在GAT训练的基础上再进行训练,每次调参都会让GAT重新训练一遍,很费时间,看起来也比较费劲,所以打算把改进部分单独拿出来:

 保存训练好的epoch,并存入.plk文件:

    model.load_state_dict(torch.load('{}.pkl'.format(best_epoch)))

 因为best_epoch未知,所以将best_epoch存入txt:

f = open("best_epoch.txt", "wb+")  # w+ :读取文件并读写之前会删除之前内容
    best_epoch = str(best_epoch)
    f.write(best_epoch.encode('utf-8'))  # write只能读取字符串,需要先将其字符串

 这里的.write也很刁钻,只能存入字符串,tuple、int类的都不能存,所以要先将存储信息转为字符串。

然后再到新文件里下载,就可以直接进行改进了:

with open("best_epoch.txt","r") as f:
    best_epoch = f.readline()
model.load_state_dict(torch.load('{}.pkl'.format(best_epoch)))

都不能说是刚入行、刚开开始初学Graph,很多数据集、网络第一次接触,运行代码总会遇到各种各样奇奇怪怪的问题,也发现了一些漏洞:发现问题不够及时、解决问题太局限、心态不是很好。。。也算是补了补之前debug较少的坑,希望以后可以少在没有技术含量的问题上浪费时间,第一次写博客,排版、逻辑也比较混乱,希望以后也可以有所改进吧。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值