Centos_cuda

 

在centos7.2环境配置nvidia384.66驱动和cuda8.0

项目整体

在新服务器上安装centos7.2,安装nvidia驱动384.66,安装cuda8.0和其他软件.

其中最复杂 耗时最久的是nvidia驱动,其它均为无脑下一步.

安装细节

安装驱动的细节

安装centos7.2

选择minimal安装,安装完后不要手动更新

安装nvidia驱动

禁用自带驱动

在查阅了一些第三方教程后,发现nvidia官网的文档值得阅读(虽然并不总是覆盖所有情况)

centos安装完成后系统自带一份vga驱动nouveau,安装nvidia驱动需要屏蔽掉它.安装过程将在无显卡驱动的命令行下完成,这也是安装minimal版系统的原因.

屏蔽nouveau的代码如下:

mkdir -p /etc/modprobe.d
tee /etc/modprobe.d/blacklist-nouveau.conf<<EOF
blacklist nouveau
options nouveau modeset=0
EOF
sudo dracut --force

屏蔽完成后进行重启,然后执行以下命令,如果没有输出,则说明屏蔽成功.

lsmod | grep nouveau

下载nvidia驱动

官网选择自己的卡型号,cuda版本,语言后下载对应的驱动.

建议英文.

安装依赖库

安装nvidia驱动需要kernel-header和kernel-devel库,这两个库的版本必须和系统kernel一致.

部分教程建议使用命令

sudo yum install kernel-devel kernel-headers

但这会安装仓库里最新的库,和系统kernel版本不一致.

如果选择更新kernel版本至最新,有可能遇到新kernel和nvidia驱动不兼容的情况(部分内核接口修改)

因此另一部分教程推荐使用命令

sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

由于官方仓库被墙(!!!),系统从国内的华为和清华源下载,这两个库里没有对应版本的kernel-devel和kernel-headers.

最终解决方案:到centos官网下载这两个库该版本的本地安装包.

使用以下命令安装

yum install ./file.rpm

安装驱动

使用以下命令安装驱动

chmod +x driver.run
./driver.run

安装过程中需要手动接受协议.

安装cuda8.0

nvidia官网下载cuda8.0安装包.

我选择了runfile本地包.网速快的话使用在线包会更省时间.

下载完成后给执行权限,执行,一路下一步即可.部分simple示例,如decode需要以下库.

yum install mesa-libGLU-devel mesa-libGL-devel

安装并启动docker

docker官方提供了脚本来安装

curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
sudo systemctl enable docker
sudo systemctl start docker

在修改docker的base size

/usr/lib/systemd/system/docker.service
# ExecStart=/usr/bin/dockerd --storage-opt dm.basesize=200G

安装nvidia-docker2

添加nvidia官方仓库,然后从仓库安装.

官方没有提供任意版本的release包,只有源代码,如果不想自己编译,只能安装最新版.

我的部署包提供商文档里建议关闭selinx,下方最后一部分代码做了这件事.

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | \
  sudo tee /etc/yum.repos.d/nvidia-docker.repo
yum install nvidia-docker2
sudo pkill -SIGHUP dockerd

setenforce 0 #临时
vi /etc/selinux/config #修改SELINUX=permissive

手残更新了一次所有包,新版docker18.09.0和内核3.10.327不兼容,手动安装早版本的docker和nvidia-docker

yum install docker-ce-18.06.0.ce-3.el7 # 旧版本docker
yum --disablerepo="*" --enablerepo="nvidia-docker" --showduplicates list available # yum lisg | grep nvidia-docer不会显示历史版本,需要用这行来显示
# nvidia-docker2.noarch  2.0.3-1.docker18.06.0.ce  nvidia-docker
yum install nvidia-docker2-2.0.3-1.docker18.06.0.ce  # 官方文档只给了ubuntu下安装早期版本的命令,拼centos下的命令拼的想死.

开放防火墙特定端口(如果需要)

安装一个网络服务的时候,关闭防火墙后依然不能工作,测试发现使用特定命令打开特定端口可以工作

iptables -I INPUT 1 -p tcp --dport 8300 -j ACCEPT

清理docker缓存

docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi

测试

测试驱动:

nvidia-smi

测试cuda: 在NVIDIA_CUDA-8.0_Samples目录编译执行