1660Ti+AlmaLinux9搭建YOLO5环境

前言

看着图像识别好像很有意思的样子,于是就自己搭了一个深度学习服务器。虽然说是服务器,实际上也是垃圾佬套装搭一个勉强够看的显卡。

硬件配置

硬件配置对于现在的服务器配置而言可能有些滑稽了。

key value
CPU e3-1245v3
GPU GTX 1660Ti 6G(YESTON)
memory SAMSUNG ECC 1600MHz 8Gx2
motherboard B85itx(EPOX)
HardDisk 500G M2(IDK)

滑稽归滑稽,能用还是能用。对于垃圾佬来说,这个配置可不低了。

准备工作:CUDA适配性

在这里格外强调一下,有个叫显卡适配性的东西,需要各位做好售前调研。官方也给出了适配性说明:点击此处跳转到该页面

适配性说明文档中对所有适配的显卡进行了说明,包括很多系列。在这里我们以最大众的GTX(也就是GeForce系列)为例:

GeForce适配性说明

可以看到每种卡支持什么都已经列出来了。不过单纯看这个什么的可能有些难懂,这里需要额外观察这篇说明这些数字的文档:可用性数字说明

其实也没什么相当值得注意的内容,只是单纯的告诉你哪些支持分布式共享内存,哪些支持更宽的位数,哪些支持Tensor核心等等内容。我们真正意义上关心的只有我们当前要买的卡,或者说已经有的卡是否在名单中。

显然,1660Ti不在里面,只有一个1650Ti。这就相当尴尬了。

你可能会有些迷惑,因为你明明在CSDN上看到有些网站写了这些玩意的,比如深度学习小记录——显卡1660Ti适配的Tensorflow和CUDA、CUDNN安装教程,又比如Windows+GTX1660TI下安装CUDA 10.1&cudnn 7.6.5 + tensorflow/pytorch

官方并没有一个详细的说明,实际测试下来似乎也确实能用。所以,目前我的猜测是,对于部分主流设备,1660Ti展现出较强的适配性。但是部分非主流设备,1660Ti多少会有点问题。可以总结为:官方也不确定是不是完美支持

那就相当随机了。如果希望稳一手,还是买截图中存在的设备;如果希望极致性价比,买什么都行,但买上述列出设备之外的还是像开盲盒一样刺激。

实际上手:CUDA安装

这些教程都已经很多了,没什么别的可讲的,有必要的话各位参照一下其他的教程就行了。

所以我在这里仅作总结:

如果是Windows,直接下载好所有的安装包,然后逐个双击开始安装,然后等待到结束后开始下一个安装包的安装。整体流程简单方便,没有什么难点。

如果是Linux,尤其是像我一样使用最新版的AlmaLinux的话,可能会遇到一点奇奇怪怪的问题。

Linux中安装过程与Windows不同。WindowsGeForce驱动与CUDA驱动分开安装的,LinuxGeForce驱动在CUDA驱动里面集成了,作为一个选项给用户提供安装选择。所以,如果你优先安装了GeForce驱动,那就不要再勾选CUDA中的GeForce驱动了。如果你没有安装GeForce驱动,那就别忘了勾选CUDA中的GeForce驱动了。

由于我已经安装过了,所以这里利用人家Ubuntu的截图:

CUDA中集成的GeForce驱动

使用红色方框框住的部分就是GeForce驱动。如果你单独安装了,那就别勾选;如果直接安装的CUDA,那就勾选。

于是等待就好了。

多嘴一句:全球主流才是稳一手

我安装的最新版。其实没有什么硬件限制,直接上最新的,没关系。有限制的是后来的框架底层,只要使用的是PyTorchTensorflow这两个主流深度学习框架就行。

全球主流的话,那就一定会有一个人为这个主流做出一点贡献。这个人可能是开源社区大佬,也有可能是官方在编人员。

如果你安装的是PaddlePaddle这类并没有在全球成为主流的深度学习框架的话,即使官方文档再怎么充分、再怎么细致,有些兼容问题还是没办法。比如PaddlePaddle,如果直接上最新的CUDA一定会出现问题,甚至gccg++版本较高也一定会出现问题。最坏的情况是设备全部重买,最好的情况是降版本重装。总之跟垃圾佬折腾硬件一样需要一步一个脚印地折腾。

cudnn才是真正的玄学

如果说主流框架没有什么CUDA版本的限制,那么cudnn这类深度底层的东西就该有限制了吧?

确实,有限制。但是怎么限制的,我还没弄明白。总之,如果你使用的显卡在适配性说明中并没有出现,但是CUDA顺利安装了,cudnn就会展现出它的作用。

在执行测试的时候,使用命令:

1
2
3
4
$ python3 # 尝试测试
>>> import torch # 导入包
>>> torch.cuda.is_available() # 检测显卡可用性
true # 返回可用

这一切都看起来没问题。

但是在执行train.py的时候,问题来了。

1
RuntimeError: CUDA error: no kernel image is available for execution on the device

你可能认为是环境问题,实际上就是环境不兼容罢了。但比较奇怪的是,没有环境兼容。我也做过很多次测试,但是就是不行。

只能说,全是玄学。

删除cudnn后一切正常,显卡也确实比苹果电脑M1的核显要快上倍左右,也不确定是否正常。

凑合着用吧。

2024年2月26日更新

由于内核挂掉,整个重装了一遍。于是发现cudnn并不是没有,而是需要配置环境变量:

1
2
3
4
# cuda
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
export CUDA_HOME=/usr/local/cuda/
export PATH=$PATH:$CUDA_HOME/bin:$LD_LIBRARY_PATH

这次就再也没有问题了。

最后,如同日志所述,1660Ti的适配性指数为