GPU编程(一): Ubuntu下的CUDA8.0环境搭建

作者: sean_depp | 来源:发表于2018-10-19 23:31 被阅读7次

GPU编程(零): 老黄和他的核弹们

目录

  • 前言
  • 开发环境一览
  • 显卡驱动安装
  • 下载驱动
  • 禁用nouveau
  • 安装驱动
  • 安装CUDA8.0
  • 参考
  • 最后

前言

在Linux下安装驱动真的不是一件简单的事情, 我在经历了无数折磨之后终于搭起了GPU编程环境. 我是很心水老黄的, 但是, 我还是想说"So, Nvidia: FUCK YOU!"(Linux之父原话)(手动滑稽).

Linux之父

开发环境一览

  • GPU: NVIDIA GT 750M
  • OS: UBUNTU 14.04.1LTS 64位(之后会说为什么选这个版本, 16.04流程基本类似, 但是要注意内核版本)

用指令看下英伟达显卡:

lspci | grep -i nvidia
NVIDIA GT 750M

显卡驱动安装

千万不要用UBUNTU附加驱动里提供的显卡驱动!!!
千万不要用UBUNTU附加驱动里提供的显卡驱动!!!
千万不要用UBUNTU附加驱动里提供的显卡驱动!!!
一般来说, 你会遇到一些奇怪的问题, 当然, 锦鲤是不会出问题的(手动滑稽).
这是第一个坑点, 大体有三种展现方式:

  • 装完重启进不去系统, 卡住ubuntu加载页面;
  • 无限登录;
  • 装好了, 进入了系统, 然后输入nvidia-smi指令没有任何反应. 正常情况会弹出一张表, 如下所示:
nvidia-smi

下载驱动

行了, 来说说我的实操:
首先到官网下载显卡驱动, 比方说我是GT 750M, 操作系统是64位Linux, 我就找对应的版本进行下载.

下载驱动

删掉以往的驱动. 注意, 就算你啥都没装, 这步也是无害的.

sudo apt-get remove --purge nvidia*

更新并安装一些需要的库, 先装这么多, 之后装CUDA还有一波.

sudo apt-get update
sudo apt-get install dkms build-essential linux-headers-generic

禁用nouveau

打开blacklist.conf, 在最后加入禁用nouveau的设置, 如图所示:

sudo vim /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
禁用nouveau

禁用nouveau内核模块

echo options nouveau modeset=0
sudo update-initramfs -u

重启. 如果运行如下指令没用打印出任何内容, 恭喜你, 禁用nouveau成功了.

lsmod | grep nouveau

安装驱动

来到tty1(快捷键ctrl + alt + f1,如果没反应就f1-f7一个个试, 不同Linux, 按键会略有不同). 关闭图形界面:

sudo service lightdm stop

安装驱动, 注意有坑, 一定要加–no-opengl-files, 不加这个就算安装成功, 也会出现无限登录问题.

sudo chmod u+x NVIDIA-Linux-x86_64-390.87.run 
sudo ./NVIDIA-Linux-x86_64-390.87.run –no-opengl-files

如果你已经装了, 但是没有加–no-opengl-files, 按照如下操作可以救一下.

sudo ./NVIDIA-Linux-x86_64-390.87.run –uninstall
sudo ./NVIDIA-Linux-x86_64-390.87.run –no-opengl-files

重启. 用nvidia-smi指令试一下, 如果看到类似下图, 恭喜你, 驱动安装成功. 或者看到附加驱动显示继续使用手动安装的驱动.

nvidia-smi 附加驱动

安装CUDA8.0

先来补库.

sudo apt-get install freeglut3-dev libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

官网下载要的CUDA版本, 我这里是8.0第二个版本, 下载runfile(local)版本, 如下图所示:

安装CUDA8.0

md5检测一下, 不合格要重新下载. 下图是我的检测结果:

md5sum cuda_8.0.61_375.26_linux.run
md5检测

再次关闭图形界面

sudo service lightdm stop

安装时候依旧要加–no-opengl-files参数, 然后就是先一直空格, 之后一路默认就好.

sudo sh cuda_8.0.61_375.26_linux.run –no-opengl-files

然后会看到三个installed.

开启图形界面

sudo service lightdm start

这里又有一个坑, 如果是14.04.5, 我到这一步就开启不了了, 后来换成14.04.1了, 总之内核也要小心选择.

运行如下命令, 如果显示如图3个文件夹, 恭喜你.

ls /dev/nvidia*

如果少了或者都找不到, 还有一些操作要做. 用vim创建一个xxx.sh(名字随意), 输入以下内容:

#!/bin/bash

/sbin/modprobe nvidia

if [ "$?" -eq 0 ]; then
  # Count the number of NVIDIA controllers found.
  NVDEVS=`lspci | grep -i NVIDIA`
  N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
  NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

  N=`expr $N3D + $NVGA - 1`
  for i in `seq 0 $N`; do
    mknod -m 666 /dev/nvidia$i c 195 $i
  done

  mknod -m 666 /dev/nvidiactl c 195 255

else
  exit 1
fi

/sbin/modprobe nvidia-uvm

if [ "$?" -eq 0 ]; then
  # Find out the major device number used by the nvidia-uvm driver
  D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

  mknod -m 666 /dev/nvidia-uvm c $D 0
else
  exit 1
fi

运行后就会看到3个文件夹.

sudo chmod +x xxx.sh
sudo ./xxx.sh
ls /dev/nvidia*
/dev/nvidia0  /dev/nvidiactl  /dev/nvidia-uvm

然后写入rc.local中, 如图所示:

sudo vim /etc/rc.local
rc.local

打开环境配置文件

sudo vim /etc/profile

最后写入:

export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

保存退出, 并其生效.

source /etc/profile

然后就能看到了.

运行一些检测命令, 如果和我显示的类似, 恭喜你, 环境配置完成.

cat /proc/driver/nvidia/version
nvcc -V
检测

当然, 你可以编译NVIDIA Samples中的例子, 然后运行. 最常见的就是deviceQuery了. 走两步:

deviceQuery

参考

参考了非常多的文章, 有些把我带坑的, 我就不写了好吧, 原谅你们了(手动无奈). 以下都是非常有用的文章和视频.

https://www.bilibili.com/video/av10436982?p=4
https://zh.wikipedia.org/wiki/英伟达
https://gist.github.com/dangbiao1991/7825db1d17df9231f4101f034ecd5a2b
http://ifenxi.com/archives/1103
https://www.jianshu.com/p/35c7fde85968?from=singlemessage
https://blog.csdn.net/qjk19940101/article/details/78927109
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#abstract


最后

现今并行编程和GPU编程是基础了, 学会搭建CUDA编程环境很重要, 在这个基础上还可以继续构建深度学习, Tensorflow等等.

相关文章

网友评论

    本文标题:GPU编程(一): Ubuntu下的CUDA8.0环境搭建

    本文链接:https://www.haomeiwen.com/subject/dbiqaftx.html