写在前面: 想跑一下AutoNER,之前已经在服务器跑好了demo。但是,团队的同学需要在华为云服务器上把我们的数据跑一下,结果就各种报错,然后我开始debug(前几天开会的时候还有华为云的客服给我打电话问我以后会不会用这个产品,我说近期都没有这个计划,哈哈)。于是有了通宵,一抬头天就亮了。一夜学到不少东西,在此记录。
问题起初: 最开始的问题是每次run的时候,都会在加载embedding的时候自动kill,后来就出现了各种问题。
问题1: 首先出现如下问题,即每次自动kill,因为觉得本来就是租的云服务器,怎么可以内存还不够呢,于是最先想到是代码问题。
然后开始一步一步找代码,看数据,最开始发现确实是少了数据,但是添加后发现原因不在于此。指导后来,我利用如下linux命令行看资源的时候发现问题所在。
问题原因:
利用如下命令查看显卡使用情况,发现还没有使用显卡,于是断定和显卡无关。
nvidia-smi
然后使用如下命令查看内存使用情况,发现内存有32G,觉得应该足够使用,但是实际上used已经很高了。
free -m
然后使用top 动态查看线程的内存使用情况(超级用于的技巧:shfit + m
根据内存使用情况排序),如下图:
此时我发现**%MEM**竟然已经满了,这才找到本质问题之一。
解决方案: 然后发现最大的内存就是32G,于是开始研究华为与平台,怎么扩内存。
1.进入控制台
2.进入我们的资源(弹性云服务器ECS)
3.点击更多,进入变更规格
4. 然后就可以根据不同的需求选择不同的服务了,包括内存和显卡等
最后我把32G的内存扩到64G,最后验证64G内存够用。
问题2:
报错:ImportError: cannot import name ‘NoReturn‘
一顿好找,才发现可能是python版本的问题,python3.6.1不太稳定,于是想改变python版本(参考)。输入如下命令(之前已经换了镜像):
pip install python==3.6.5
但是报错如下:
ERROR: Could not find a version that satisfies the requirement
最后不再针对如何下载固定版本的python了,而是针对在已有虚拟环境中进行python升级,于是问题得到了解决,命令如下:
conda install python==3.6.5
问题3:
报错:
1、The NVIDIA driver is too old PyTorch version that has been compiled with your version of the CUDA
2、RuntimeError: CuDNN error: CUDNN_STATUS_SUCCESS
主要是cuda、torch等版本不匹配问题。参考这篇博客
后来开始疯狂的对torch和nvidia的版本,用到的命令以及版本对应表可参考这里
注: 尽量找合适的torch版本,轻易别换nvidia版本。中间经历了很久很久,后来在重装系统后,最后的最后我直接使用pip install torch
,而没有利用版本对应表格下载了torch,倒是也可以用了。
问题4: 在上述匹配版本的时候,由于系统偷偷的自己更新或者我无意间做了什么,致使ubantu内核和显卡不匹配,导致显卡掉了,在执行nvidia-smi
后报错如下:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver
这让我很慌张,解决的方案很多,大致就是:
1、改torch版本
2、在linux系统重新启动的时候,选择新的内核
3、重新安装合适的NVIDIA版本(非常复杂)
这里,为了使用图形化界面,我还去研究了一下华为云的图形化界面,非常nice,参考链接放在这里,不再详述。
上述方法全部无果,于是我重装了系统······
华为云的重装系统非常容易,如下图所示:
于是,我重新把系统装了一遍:
1、下载安装anconda
2、创建环境
3、拷贝代码
4、下载数据(因为是预训练的embedding,有10G)
5、最后针对代码本身有配置了半天的环境
问题5
报错:_pickle.UnpicklingError: pickle data was truncated
分析: 是因为已经生成了一个文件,但是这个文件并不完整,所以报了这个错。具体的,是因为利用预训练bio_embedding,pk进行训练得到的embedding.pk不完整,因此报错。
解决方案: 删除不完整文件,重新跑代码生成文件。
最后,在使用了大量的内存资源完成embedding后(忘记截图),使用GPU完成标注任务,资源消耗如下:
最后终于Done了。
很多问题已经记不得了,先记录这些,用于回顾和分享,希望对大家有所帮助。
开台灯,闭台灯,天亮了,我先去吃个饭!