执行安装命令后等待一段时间,它会在终端里要求你选择安装一系列的组件,其中我们需要先去掉里面的显卡驱动,只去安装剩余的 CUDA 组件(光标对准敲回车,有 X 表示安装此项)。当 CUDA 组件安装完成时,你会发现它会提示没有可用的驱动,使用 xxx 命令进行安装(没记错的话应该是 sudo ./yyy.run --slient --driver,yyy.run 是你下载的驱动文件的路径)。OK,这表示目前 CUDA 组件安装完毕,但是缺少驱动的支持,无法正常工作,而这个命令就是不进这个界面,直接在后台静默安装驱动的命令,把它用手机拍下来,或者用纸记下来备用。
至此如果没报错的话,找到生成的可执行文件,直接./NCNN_test,如果输出结果和上一章节的一致,则表示成功在 Deepin OS 下打通了一条深度学习从开发到部署测试的路(想搞移动端的同学可能得搭个交叉编译平台,又是另外一个主题了 orz)。
这时候赶紧截图通知你们QQ群的爱好者,你成功了~
结语
这篇文章最初是写给我自己看的,我最开始的目标是想仅使用一文来记录这段时间在 Deepin OS 下折腾深度学习的过程。但是现在在论坛里逛了一段时间,我发现大家讨论的都是这个操作系统的基本使用,就连置顶也是把Deepin 装进口袋的这种非常基础的操作。。。所以写着写着,我的目标变成了在 Deepin 论坛上发布一篇关于 Deepin OS 跑复杂专业应用的博客233333333。
Deepin Learning on Deepin —— 基础环境架设
日期:2021年8月21日
作者:南风LI
背景
最近因为公司项目需要,自己花费了大量精力研究如何在已经存在一些合适的深度学习算法的时候,去挑选、训练、测试、部署这些算法。由于本人并不是 AI 相关专业或者说这个领域的专业从业者,所以本文仅从工程实施角度来进行说明如何部署这套环境。
适合本文的读者:想利用深度学习技术解决项目难题的工程师,算法原理已经非常熟练但是不知道怎么落地的科研人员,以及其它在环境架设上疯狂碰壁的新入门的小白。
在本文中,我假设你已经入门了 Python 和 C++,并大致了解 Debian 系操作系统的基本玩法,同时我也假设你的 GPU 计算设备是 NVIDIA 的。
为了聚焦本文主题,我不会详细介绍什么是深度学习,也不会详细介绍文章内所涉及的相关框架。
Deepin OS 简介
本文的系统环境是基于 Deepin OS 的,这是由国内的武汉深之度开发的、基于 Debian 的操作系统。它目前有以下几个特点:
嘛,这也算是给国产系统打个广告了,希望它有朝一日可以干掉 bug10 和 bug11,同时成长为比 Fedora 和 Ubuntu 更流行的开发用 Linux。
PS:虽然国产系统现在依旧不好用,但你们都不用且都不去提建议的话,它就只能一直不好用。
PPS:Deepin OS 有个弟弟叫 UOS,两兄弟长得很像,但 UOS 更适合政企单位或者个人日常办公,并不像 Deepin 这样适合搞开发。
系统安装
系统安装非常简单,首先前往官方网站下载镜像和启动盘制作工具,找一个U盘直接刻入,修改 BIOS 引导顺序,插入U盘开始启动电脑......都是比较常规的操作。
不常规的地方只有三个:
至此,你的系统应该已经安装在了电脑上,在点过了欢迎界面(就是选特效还是普通),请继续以下操作以优化后续体验:
至此,系统基本安装完毕,在我们进一步折腾环境前,可以先去商店把你需要的软件,比如 QQ 什么的都装上,因为一会儿开始折腾环境的时候,大概率会让这些软件无法正常安装。
另外可能会有同学尝试在虚拟机下部署这个系统,emmmmmm,折腾显卡虚拟化更折磨人。什么?你想用 CPU 跑深度学习?emmmmmm,请让我叫你一声勇士。
NVIDIA 显卡驱动、CUDA、cuDNN
至此,你的操作系统已经准备就绪,现在让我们来进行一项非常蛋疼且非常容易让人重装系统的操作:安装 NVIDIA 官方闭源驱动、CUDA驱动、cuDNN 库。
那么问题来了,这三者是什么关系?大概就是 cuDNN 依赖 CUDA,CUDA 同时依赖显卡驱动和显卡硬件,而要想显卡硬件正常工作,就需要 NVIDIA 的官方闭源驱动(你说你是 AMD 的卡?啊这,AMD 的卡我还没折腾过=。=)
知道三者的关系后,再来看深度学习等一系列依赖 NV 显卡的专业软件:他们大都是依赖于使用 CUDA 进行计算加速,同时如果有 cuDNN 库,他们会加速加得更猛烈一些,嗯,大概是这样的。
这里为了保证驱动和 CUDA 的兼容性,我们直接下载 CUDA 的驱动。由于我前面说过,Deepin OS 和 Ubuntu 之流其实非常相似,但由于这个系统的影响力还不够,所以我们只能将就一下 Ubuntu 或者 Debian 系统的驱动。
这里我选择的是 x86_64/Ubuntu/20.04/runfile(local),选择完毕后,如下图所示,网页下方会出现两条命令:
第一条是下载命令,直接在终端执行就行,或者用其它下载器进行下载(推荐 Free Download Manager)。
第二条是安装命令,需要在下载完成后执行。
执行安装命令后等待一段时间,它会在终端里要求你选择安装一系列的组件,其中我们需要先去掉里面的显卡驱动,只去安装剩余的 CUDA 组件(光标对准敲回车,有 X 表示安装此项)。当 CUDA 组件安装完成时,你会发现它会提示没有可用的驱动,使用 xxx 命令进行安装(没记错的话应该是 sudo ./yyy.run --slient --driver,yyy.run 是你下载的驱动文件的路径)。OK,这表示目前 CUDA 组件安装完毕,但是缺少驱动的支持,无法正常工作,而这个命令就是不进这个界面,直接在后台静默安装驱动的命令,把它用手机拍下来,或者用纸记下来备用。
接下来安装显卡驱动,需要按以下步骤操作:
至此 CUDA 环境已经部署完毕,接下来开始安装令人想大喊一声 NVIDIA fxxk you ! 的 cuDNN 库。
首先要去 NV 开发者官网 注册账号成为会员,然后登录进网站。接着再点开 cuDNN主页 选择和刚才下载的 CUDA 所匹配的 cuDNN 库。emmmmm,大概有 1.5GB 左右吧。而且中间还要填一份又臭又长的问卷调查,唉。。。
这个地方最大的坑就是,因为众所周知的原因,这个网站非常慢,且会员注册需要某种不存在的手段才能注册成功,否则会因为看不到验证码而被拒绝入会。。。。。。为啥很想 fxxk 它呢?我都花这么多钱买你的显卡了,这点开发工具还藏着掖着。。。。。。AMD 啥时候才能在专业应用上把 NV 给干了啊啊啊啊啊啊啊。
cuDNN 的安装就简单了,直接解压,然后把头文件贴到 CUDA 的头文件路径下,把库文件贴到 CUDA 的库文件路径下(是的,俩直接贴贴),这样就完成了安装。
如果到目前为止,你的安装一切顺利没有报错,所有的检测都通过,那么恭喜,基础环境已经搭建完毕,准备进入更高层的开发环境搭建。
什么?你 xxx 地方报错了?emmmmm,自己想办法解决吧,不行就回去重装系统。。。尤其是 Intel 核显 + NV 独显的同学,请跟我一起喊:NVIDIA fxxk you !(我的是单的 NV 独显,没有这个问题)
PS:Deepin 貌似有显卡切换工具,可以去下一个来试试
Caffe 框架的编译、安装、测试
至此,你的操作系统和显卡应该已经准备就绪,按理说最痛苦的地方已经结束,接下来我们开始尝试安装深度学习框架的老大哥:Caffe .
但是这里我准备着重介绍 NVIDIA 版本的 Caffe 如何在 Deepin OS 上进行编译安装和测试。嗯?你说为啥不介绍伯克利那个原版的?因为原版已经停更一年多,且显存占用优化和效率优化被 NV 版的吊打,还不支持 8.x 版本的 cuDNN ~ 所以为了更流程的开发体验,建议用 NVIDIA 版的。
顺便再提一嘴:如果你准备在超大数据集上跑深度学习,且准备使用 N 卡进行训练,那么一定要去购买带 Tensor Core 的卡,这个东西可以在一个时钟周期内完成一次 4 * 4 的矩阵乘加运算,懂硬件的朋友应该知道我说的意思。但是这玩意儿就和鞋子上的气垫一样,如果数据量不够大,深度学习框架和显卡驱动可能会不屑于调用 Tensor Core,所以请理性消费。
好了,废话了半天,我们打开项目地址,然后 git clone 也好,直接下载 zip 包也好,总之先把源码扒到本地,然后解压放好。
在进行下一步操作前,我们再做一个骚操作:快速解决 Caffe 编译的环境依赖,根据我最近编译安装它的经验,我们需要按以下步骤进行:
至于我们为啥要安装一下上游仓库 Caffe 的依赖呢(而且还是那个CPU版的)?因为 NVIDIA Caffe 的主干部分和原版基本一致,依赖也基本一致,所以直接套用。那么为啥不装 caffe-cuda 的依赖呢?因为这会导致 Debian 仓库里老掉牙的驱动覆盖掉我们刚刚安装好的驱动(是的,Deepin OS 的软件仓库大部分来自于 Debian)。
其中你可能会看到里面有个叫 jpegturbo62 的东西,然而那不是真正的 jpeg turbo,正版的叫 turbojpeg .
最后,它还有可能会说没找到一个什么 doxygen 文件,直接新建一个同名的空白文件就行。
至此,所有编译依赖解决完毕,然后就是中规中矩的 cmake 编译环节:
至此,我们的编译结果已经放在了 build/install 目录下,然后我们需要执行一下测试。
测试方法我参考了这篇文章,整体测试流程如下:
如果期间显卡占用达到一个非常高的值,同时在 examples/mnist 下出现了 xxxx.caffemodel 文件,则表示训练阶段测试成功,而加的那一句表示输出和原版兼容的权重文件。
如果还不过瘾,可以继续以下操作来测试生成的权重文件是否正常且可以兼容原版 Caffe:
如果一切正常,最后应该会看到和他一样的输出:predicted class: 4
这里为了防止链接失效,同时也因为我本人是 Python3 党,因此在此贴出适合本文步骤的 Python3 版本的测试代码(其实大同小异了~):
最后 NVIDIA Caffe 和原版有个最大的不同点:使用 ctrl + c 终止训练时,原版会保存一个当前迭代的结果再退出,而 NV 的会直接退出去,所以要注意观察距离存档点的距离。
NCNN 框架的编译、安装、测试
上一个章节中,我们在 Deepin OS 上拥有了一套可用于深度学习的训练框架,本章我们将选择 NCNN 作为推理框架侧的案例。
老规矩,先去项目地址扒源码。
关于 NCNN 的编译众说纷纭,介绍的时候都会说它是无第三方依赖,直接编就是了,而真正开始编的时候,大家又一边倒地说这玩意儿依赖 OpenCV 和 Protobuf,而 Protobuf 的安装失败率极高。。。。。。
实际上没有那么复杂,如果你仅仅需要 NCNN 的本体,那么给个 g++ 就行了;如果你需要它下面的工具箱、demo,或者是希望启动 Vulkan 加速功能,那么此时才需要安装这坨东西。
那么折腾开始,由于我们前面打了 NVIDIA 的闭源驱动,这里我懒得去折腾 Vulkan,所以就直接忽略(况且 NCNN 的 CPU 优化据说做得很不错),所以我们按照默认模式来进行编译安装,即我们需要工具箱和演示 demo:
至此,如果顺利的话,所有的文件都会存放在 build/install 目录下,包括工具包,NCNN 静态库,演示 demo 等等。然后就是激动人心的测试环节:
CMakeLists:
main.cpp:
至此如果没报错的话,找到生成的可执行文件,直接./NCNN_test,如果输出结果和上一章节的一致,则表示成功在 Deepin OS 下打通了一条深度学习从开发到部署测试的路(想搞移动端的同学可能得搭个交叉编译平台,又是另外一个主题了 orz)。
这时候赶紧截图通知你们QQ群的爱好者,你成功了~
结语
这篇文章最初是写给我自己看的,我最开始的目标是想仅使用一文来记录这段时间在 Deepin OS 下折腾深度学习的过程。但是现在在论坛里逛了一段时间,我发现大家讨论的都是这个操作系统的基本使用,就连置顶也是把 Deepin 装进口袋的这种非常基础的操作。。。所以写着写着,我的目标变成了在 Deepin 论坛上发布一篇关于 Deepin OS 跑复杂专业应用的博客233333333。
算是给大家展示一下,这个系统不仅仅有 deepin-wine,有与众不同的 DTK 风格软件,它还有能给开发者提供支撑的一系列配套设施。
参考文献
NV闭源驱动安装
CUDA安装
Caffe安装测试
NCNN 的 CMake 编写
NCNN 的 Hello world