Ubuntu14.04安装CUDA8.0折腾之路

新购置了Dell的Tower7810服务器,出厂预装了Ubunutu14.04,并且已经安装好了NVIDIA的专有显卡驱动,版本是361。
考虑给机器配置上CUDA的运行环境,以加速数据处理的速度,最大化的利用机器的性能。于是开始了几天的折腾。。。
这个真是不容易,还是记录一下,毕竟网上的文章不能全盘参考,还是要搞清楚关系,我几天的痛苦经历就是证明。
以此作为自己下一步配置机器的参考。

  • 第一次失败
    草草看了一下NVIDIA官方的安装指南,满怀信心的尝试,结果是无限登录循环。。。
    步骤大致如下:

    • 添加了nouveau的blacklist。
      /etc/modprobe.d中创建文件blacklist-nouveau.conf,在文件中输入一下内容
    blacklist nouveau
    options nouveau modeset=0

    打开终端,运行$ sudo update-initramfs –u

    • 重启,然后使用ctrl+alt+F1进入字符模式,安装显卡驱动,提示X-server还在运行,搜索后,输入命令sudo service lightdm stop,可以继续安装显示驱动。提示编译内核,选择生成新的内核签名,加入内核,安装32位兼容库等等步骤之后,提示安装成功。
    • 紧接着,安装CUDA8,选择了安装驱动,y;安装OpenGL库,y;安装CUDA ToolKit,y;使用nvidia-xconfig,y;其余都是默认。
    • 提示安装成功,但是缺失一些库libXi.so,libXmu.so之类的,记不清了。
    • 开心的重启电脑,好吧,无限登录循环出现。。。
    • 百度之,告知说因为用户目录下的.Xauthority文件的权限可能出错,需要修改权限为当前用户所有,sudo chown user:user ~/.Xauthority。然并卵。删除该文件也没用。
    • 此时,恶向胆边生,想着我已经创建了Dell的恢复光盘,我恢复一下系统好了。
    • 选择了覆盖系统,但保留用户的数据的恢复选项。然而,现实很残酷,用户数据并没有保留下来。。。细想之,大约是当初Dell在预装的时候,根本没有给/home创建单独的分区。数据没有了,前面刚刚安装好的数十个大大小小的软件包啊。。。ಥ_ಥ
  • 第二次失败
    面对干净的Ubuntu14.04系统,第二次尝试开始。看了不少网友的经验,说是不应该安装OpenGL库。好吧,按照第一次的流程来,只是在安装CUDA的时候,特意选择不安装OpenGL。
    结果仍然是无限登录循环。。。我。。。(略)
  • 第三次失败
    回想自己去年曾经在自己的Dell笔记本上成功的安装了CUDA,好像没有这种事情啊。为毛??
    首先想到的是,也许Ubuntu系统不好,好吧,我换,换成曾经成功过的CentOS,反正FSL也喜欢这个系统。下载CentOS7.3,制作启动盘,全盘删除后,全新安装CentOS7。
    因为着急,安装时大意了,没有修改软件包选择,结果很快装好,重启,嗯??字符界面??神马情况?startx,哦,不行。。。
    好吧,搜索后想起来,默认是最小安装模式,不带图形界面,我去。。。
    重来。这次一狠心选了开发模式,顺手加了很多额外看起来会用到的软件包。嗯,2300多个软件要装。耐心等待安装完成,想着这次应该是有把握的。重启之后,进入到CentOS7配置CUDA8的流程。
    谨慎的按照某CSDN网友教程来
    • kernel开发环境(编译cuda需要), sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
    • gcc, g++, sudo yum install gcc gcc-g++
    • 检查nouveau驱动是否加载,lsmod | grep nouveau
    • 发现有,按照NV官网的教程,添加blacklist(和第一次Ubuntu的一样)
    • 在终端窗口,输入sudo init 3,进入字符界面,安装专门下载的NVIDIA显卡驱动,最新的版本。
    • 继续安装CUDA8,继续采用全部yes的选择。
    • 重启,进不了图形界面。。。(准确的描述是,在快要出现登录界面的时候,一闪进入字符模式,显示的是启动过程,大概到gnome display这个地方,卡死不动了。此时可以通过ctrl+alt+F2进入新的命令行界面登录)
    • 排查问题:
      • lsmod | grep nouveau 一直有输出,说明没有能够禁用掉开源的nouveau驱动。官方手册的方法完全不凑效。网友们说法不一,有的说安装NV驱动的时候,会自动检测nouveau有没有被禁用,如果有,会贴心的帮忙禁用掉,试了下,发现确实在/etc/modprob.d/ 下面生成了nvidia-installer-no-nouveau.conf(大概是叫这个名字),里面的内容也是和官方的一致。然而,似乎CentOS就是不买这个帐。有的说,应该建立的禁用文件是dist-blacklist.conf,这个没有试过,总觉得不应该。
      • CentOS7的尝试导致了3次系统重装,反复试,包括不安装驱动,直接安装CUDA,因为CUDA就包含了显示驱动,也不行,因为在安装时提示,找不到kernel source

        Installing the NVIDIA display driver...
        The driver installation is unable to locate the kernel source. Please make sure that the kernel source packages are installed and set up correctly.
        If you know that the kernel source packages are installed and set up correctly, you may pass the location of the kernel source with the '--kernel-source-path' flag.

        ,然而我已经把kernel-devel之类的都装了。据说是要这样安装sudo yum install epel-release
        sudo yum install --enablerepo=epel dkms不过我并没有尝试;包括安装驱动,但是CUDA时不安装驱动;包括不安装驱动,CUDA时安装驱动,但不安装OpenGL,也不行;还包括单独安装显卡驱动,先不进行CUDA的安装,重启,依然如故。
      • 没辙了。。。
  • 第四次失败
    考虑CentOS 7和CentOS 6据说变化很大,想起原先在双显卡笔记本上成功的案例是CentOS 6.8配合CUDA6.5,于是决定照搬老版本试试。
    • 安装CentOS 6.8,发现启动U盘时,EFI模式不认。这个奇怪了,明明看镜像里面有EFI的目录啊,官方也说支持EFI启动。郁闷了。
    • 不研究这个,不管啥方式启动,反正得装上啊。于是全盘全新安装系统(先进BIOS禁用了secure boot,然后才能打开Legacy方式启动选项)
    • 安装成功,重启。嗯???what the F??机器提示找不到可引导的操作系统。重试安装一次,还是不行。我彻底晕了。。。
  • 第五次失败
    到这个时候,真的内心是崩溃的。强迫让自己冷静下来,仔细想清楚原因再说。
    反复折腾的结果要么是Ubuntu出现循环登录,要么是CentOS7进不去图形界面。在stackoverflow上有个回答说是对于CentOS的情况,这说明gdm挂掉了,说是可以yum安装一个lightdm,然后进入图形界面重新搞一下gdm,然后卸载lightdm,但是这个我没法使用,因为网络需要经过iNode客户端的认证才能连接互联网,而iNode好像需要图形界面才能用啊。
    继续仔细的翻看官方的那个详细的指导手册,里面说到关于那个OpenGL的库,如果系统的显示不是用了NVIDIA的显卡(比如对于双显卡的案例,Intel集成显卡用于显示,NVIDIA独立显卡用于运算),安装CUDA的时候是不应该安装OpenGL的,否则会覆盖集显的opengl库,造成图形界面失败。
    好吧,这个是个重要的知识点,但是并没有解决我的问题,因为我的服务器没有集显。
    仔细想想,出现问题的最大可能还是在显卡驱动上,对于CentOS,系统没有NVIDIA的驱动,所以,不管我安装的是独立的驱动,还是CUDA里面的显示驱动,而是两个都装上,都因为没有真正的禁用掉nouveau而导致重启卡死。
    同时,想明白一个事情,显卡的驱动和CUDA工具包实际上应该是独立的,如果NV显卡驱动本身已经能够正常工作的话,理论上只要CUDA版本能够支持显卡驱动的版本,那么根本不用那么麻烦,只需要直接安装CUDA开发包就行,不用驱动,也不用OpenGL。
    如此说来,已经预装好NVIDIA显卡驱动的Ubuntu才是最容易成功的,想到这里,再次拿起Dell恢复盘,恢复了预装的系统。
    • 不用禁用nouveau了,因为系统本身就已经不使用nouveau了,而是使用NVIDIA的驱动。这一点,通过lsmod | grep nouveau 可以验证,没有任何输出。
    • ctrl+alt+F1进入字符模式,停用lightdm,这样x-server就关掉了。sudo service lightdm stop
    • 修改cuda.run文件的权限,使其可执行。sudo chmod a+x ~/Desktop/cuda_xxx_linux.run
    • 安装CUDA,注意不安装Driver(也就不会出现opengl的询问了)sudo ~/Desktop/cuda_xxx_linux.run
    • 可能会提示安装成功,但是缺少一些需要的库。先不管它
    • 重新启动lightdm,会自动跳转到图形化的登录界面。sudo service lightdm start
    • 祈祷,并输入密码登录。如果这一步没有循环登录,那么重启也不会循环登录。这一次,顺利的登录进了系统。撒花,大把的撒花
    • 验证CUDA安装的是否正常。这里先配置/etc/profile文件或者~/.bashrc文件,在其中一个文件的最后,按照官方手册,添加两行环境变量的声明。然后,source一下修改后的文件,让其生效。接下来,检查ls /dev/nvidia*,这一步应当有输出。
    • nvcc -V,应当输出CUDA的一些版本信息
    • 进入NVIDIA_CUDA-8.0_samples\1_Utitily\deviceQuery目录,运行make。嗯?居然报错了,提示说:g++:No such file or directory. 首先怀疑是LD_LIBRARY_PATH没有设置好,是不是除了cuda的lib还要加入系统的lib?不管,先加上/usr/lib:/usr/local/lib这些路径再说。
    • make还是不行,难道g++没有安装?gcc已经是最新版本了啊。试试,sudo apt-get install g++这一步和CentOS叫法不同。
    • 这次可以成功的make了。那么进入NVIDIA_CUDA-8.0_samples\bin\linux\x86_64\release\,运行./deviceQuery,输出的信息提示FAIL,原因是insufficient accelerate driver.也就是说,CUDA8不能正确的识别到Dell预装的那个版本的NV显卡驱动。(此时,Dell预装的驱动版本是361,CUDA版本是375.26),难道361的显卡驱动版本太低?
    • 既然如此,我想到,趁着目前还是NV驱动发挥作用,我直接卸载预装的NV驱动,然后重新安装CUDA中的驱动不就好了么?
    • 卸载原有驱动sudo apt-get remove --purge nvidia*
    • ctrl+alt+F1进入字符界面,关掉lightdm,运行cuda的run文件,这次只选择driver和OpenGL,其它都不要。再打开lightdm,登录,好,顺利进入桌面。
    • 再次运行./deviceQuery,这回终于出现了正确的信息。激动啊,终于成功了。。。???
    • 才不是!!!!还没有重启呢。
    • 重启之后,祈祷登录界面不要无限循环,祈祷,祈祷。。。嗯?我靠怎么还不出来登录界面?怎么一直黑屏没反应?我靠,按下ctrl+alt+F1都没反应啊。这是什么情况?我强制再次重启,依然如故。。。
  • 第六次,成功了一半
    没办法,再次恢复系统到预装状态。这次,吸取教训,应该是刚才卸载完NVIDIA驱动之后,要先重启一下,然后再按照流程来,不能省步骤。
    • 先安装好g++
    • 卸载显示驱动,重启
    • 黑屏!再重启,黑屏!!
    • 再次重启时, 尝试直接进字符界面。然而一旦黑屏之后系统没有反应,启动的时候也没有操作系统选择的界面让我选择单用户恢复模式。也就不可能通过网上说的修改grub配置,或者修改initab的配置来做。
    • 再次重启,尝试不断的按下ESC键,居然出现了grub的加载选择界面。太好了,选择advanced选项,选择recovery选项,再选择resume选项,然后系统就出现了登录界面。
    • 进入桌面后,想着,黑屏的原因可能是启动加载的内核没有显卡驱动了,而内核也没有重新回到含有nouveau驱动的状态。但是recovery模式的可能是含有nouveau驱动的。运行lsmod | grep nouveau,果然看到了很多输出。
    • 那么现在就要先屏蔽nouveau了。按照最上面的方法建立black-list.conf。
    • 运行sudo update-initramfs –u,重新形成不含有nouveau驱动的initram。
    • lsmod | grep nouveau 现在没有输出了。那么重启。
    • 然后按照ctrl+alt+F1的方式,停止lightdm,安装cuda,驱动和toolkit都装上。中间会有个问是否需要自动运行nvidia-xconfig来配置xconfig文件以让系统使用驱动。记不清了是选择yes还是no了。
    • 然后再次启动lightdm,登录,没有无限循环。重启,没有黑屏。
    • 登录进入桌面,检查lsmod | grep nouveau,没有了。检查lsmod | grep nv,有。
    • 检查nvcc,检查cat /proc/driver/nvidia/version应该能看到驱动版本。
    • 然后编译一个samples试试。没有问题。运行deviceQuery和bandwidthTest这两个编译出来的工具。应该可以看到详细的显卡设备信息和带宽情况,这个也没问题。
    • 终于好了!!!!

不过折腾之路还没有结束,因为似乎FSL的GPU加速还没有支持到CUDA8.0??不过我看到moisess分享的bedpostx似乎有8.0版本的啊,这个要等到后续再测试了。如果不行的话,那么,显然我需要重新来一遍,安装CUDA7.5或者更低版本。
等待后续更新记录吧。

参考链接:
【run file方式】http://blog.csdn.net/masa_fish/article/details/51882183
【deb网络安装方式】http://blog.csdn.net/baiyu9821179/article/details/57412131

你可能感兴趣的:(LInux)