这是纸上谈兵后第一次跑一个网络,惭愧,而且是为了完成一项作业才开始的,emm。
这次主要记录一下自己在使用pytorch训练时的感受。
刚开始,我找到了一个基于pytorch框架,使用u-net分割肝脏的代码,在朋友的帮助下,迅速调通了代码,并且能够运行。不过,你懂得,很慢,而且是在cpu上运行的。当时,我的电脑如同“难产”,涨得浑身是汗。
后面,我查了资料才知道,原来我缺点东西。cuda是英伟达开发的一个基于英伟达显卡的一个工具,基于cuda训练能够将网络的训练从cpu转移到gpu,因为本身显卡对图像的处理能力强,所以速度会提升很多。
不过我的cuda安装路有点长。现在梳理一下流程。首先,应该查看自己的显卡类型。在命令行中输入nvidia-smi,可以看到显卡的类型,以及支持的cuda的最高版本是什么。
可以看到,本人电脑的显卡很low,入门级别,这也是我后面出现问题的一个原因。我们接着说,我这边电脑显卡支持的最高cuda版本是10.2.因此,我跑去英伟达官网下载了CUDA Toolkit 10.2 Download。具体选择如下,
这个安装包下载完毕后,打开exe进行安装。这里我自定义安装,选了一些常用的。大家可以根据自己的情况进行安装,我根据网上的资料最终安装的包如下图。然后,安装位置也更改到了D盘。
PS:我Visual Studio Integration也没装。
可参考:https://www.cnblogs.com/arxive/p/11198420.html
cuda安装完毕后,需要配置路径,找到计算机里的高级系统设置,配置环境变量,具体配置如下图。
然后在命令行中输入nvcc -V查看安装情况,很明显,我安装成功了,
于是乎,屁颠屁颠的打开pycharm,运行自己的代码,然后,可悲的事发生了。
然后,我很执着的觉得可能不是自己显存不足的原因,从网上各位码农的介绍中,感觉可能会是另外两个原因,而且主要是“人穷志坚”。
https://blog.csdn.net/xu380393916/article/details/106277909
我很执着的找各种解决方案。而且,了解到,跑深度学习时,cudnn是一个大家都用的包,与cuda一起使用,于是乎,跑到cudnn官网下载合适的包。
官网:https://developer.nvidia.com/cudnn
但结局想必大家已经想到了,没错,就是显存不足,努力解决也没成功。不过,在这个过程中,倒是学到了很多知识。
其中一条是,我本人电脑是联想Yoga的,里面一个集显,一个独显,独显就刚刚那个配置,集显后面看清是intel的。可能早点看清就不会那么纠结。
之前有几个小时都在纠结我的cuda设备有几个。因为自己没有vs,所以devicequery没有跑通,查看不了。后面,在python中调用pytorch看到了,没错就只有一个,哈哈哈。突然觉得自己好傻,好可怜。测试的代码很简单,供大家参考,提供给和我一样没有vs的同胞。
另外,附cuda查询和选取设备信息,有关于通过devicequery进行测试的方法,可以参考其他博客。
import torch
torch.cuda_version # 查看已经安装的cuda版本
Out[3]: '10.2'
torch.cuda.device_count() # 查看能够使用的显卡数量
Out[7]: 1
torch.cuda.get_device_name() # 查看显卡类型
Out[9]: 'GeForce MX250'
torch.cuda.get_device_properties('cuda') # 查看显卡属性
Out[13]: _CudaDeviceProperties(name='GeForce MX250', major=6, minor=1, total_memory=2048MB, multi_processor_count=3)
torch.cuda.get_device_capability('cuda')
Out[14]: (6, 1)
总结,想要跑图像方面复杂网络的朋友,还是找个好点(显卡级别高点,显存高)的电脑,或者扔服务器上跑(我还没有尝试过,后面会尝试的)。
参考资料:PyTorch- 笔记本Nvidia MX250 显卡模型推理性能测试
后续学习资料:
pytorch1.4教程&文档
用Unet实现图像分割(by pytorch)