内核版本:
3.10.0-957.el7.x86_64
docker版本:
17.03.0-ce
gpu版本:
tesla v100s
1、首先下载nvidia驱动NVIDIA-LINUX-x86_64-418.181.07.run
2、该docker版本支持的nvidia-docker版本:1版本
nvidia-docker-1.0.1-1.x86_64.rpm
3、docker测试镜像:docker pull nvidia/cuda:9.0-base
下载好之后保存镜像,以便传到服务器:
docker save nvidia/cuda:9.0-base > nvidia.tar
4、下载安装依赖:
要装的三个依赖分别是,gcc、kernel-devel、dkms,其中需要注意的是,kernel-devel的版本需要与当前内核的版本一致,不然后面会出现找不到文件的情况。rpm文件下载方式:http://rpm.pbone.net/
查看我的内核版本:
uname -r
3.10.0-957.el7.x86_64
查看一下可以安装的版本:
yum list | grep kernel-devel
开始安装:
1、安装rpm包:
yum -y install 下载的依赖包
2、阻止 nouveau 模块的加载
在配置文件中禁用nouveau
vim /lib/modprobe.d/dist-blacklist.conf
在最后加上
blacklist nouveau
options nouveau modeset=0
3、重新建立initramfs image文件
备份原来的 initramfs nouveau image镜像
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
dracut /boot/initramfs-$(uname -r).img $(uname -r)
做完这个步骤 重启reboot, 重启后验证驱动是否被禁用
lsmod | grep nouveau
如果无结果显示则表明成功禁用
4、安装nvidia驱动:
sh ./NVIDIA-LINUX-x86_64-418.181.07.run --kernel-source-path=/usr/src/kernels/3.10.0-957.el7.x86_64
如果出现ERROR:you appear to be running an X server……
点击ok,结束安装
关闭X窗口
service lightdm stop
进入init3:(运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 )
init 3
再次执行:
sh ./NVIDIA-LINUX-x86_64-418.181.07.run --kernel-source-path=/usr/src/kernels/3.10.0-957.el7.x86_64
没有报x server的错误
如果出现:
The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 No 继续。
Nvidia’s 32-bit compatibility libraries? 选择 No 继续。
Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 Yes 继续
此时安装结束,可以测试一下是否安装成功:
nvidia-smi
出现下图则证明安装成功:
5、安装nvidia-docker:
前提是已经安装成功docker17
rpm -ivh nvidia-docker-1.0.1-1.x86_64.rpm
测试:
启动nvidia-docker
systemctl start nvidia-docker
systemctl status nvidia-docker.service
出现日志里有:
active:active(running)since …则证明安装成功
下面测试从docker 是否能够访问宿主机的gpu
把下载好的镜像加载到docker中
docker load < nvidia.tar
nvidia-docker run --rm nvidia/cuda:9.0-base nvidia-smi
安装成功!!!
注意:nvidia-docker1和nvidia-docker2区别
那么两个版本之间有何区别呢?
(1) 虽然nvidia-docker1 和nvidia-docker2 都依赖于docker, 但版本1是一个整体的可行性文件,内部实现连接docker容器与硬件GPU,版本2将整体部分拆分层一个基于docker的薄封装(cat /usr/bin/nvidia-docker 可查看)和一个插件(nvidia-container-runtime , 该插件直接实现一个 hook的功能,连接GPU硬件),在版本2 的nvidia-docker 可发现,实际上还是运行docker ,只是指定了 --runtime 参数,同时指定GPU设备,默认全部GPU设备。
(2)当需要运行一个使用GPU的容器时,版本1 必须用nvidia-docker run/create 启动, 版本2可通过设置 守护进行default-runtime参数可直接通过 docker run/create 直接启动GPU容器
docker service create 启动
执行
docker service create --generic-resource "gpu=1" 镜像名称
若报unknown flag --generic-resource,则按一下步骤执行
编辑daemon.json,若没有,则创建一个
{
"node-generic-resources": [
"NVIDIA-GPU=UUID1"
]
}
UUID1通过nvidia-smi -a获取
重启docker
systemctl daemon-reload
systemctl restart docker
启动
docker service create --generic-resource "gpu=1" 镜像名称