突然想起自己还有个博客系列
bash脚本见最下


最近在研究docker和Tensoflow等一些前端框架相结合做分布式和统一前端的问题,要在机房具体拿十几台机子先把docker跑起来。机子是四五年前的老机子所以交给我随便折腾,主要配置是i7 3770k+32G ddr3+GTX 670+2T SATA+256G SSD.其实6 series的显卡是可以正常跑CUDA 8.0的,驱动啥的也没问题,但是怎么装驱动就是一个巨坑了。

首先是架构,每台host用ubuntu+NVIDIA driver+docker+CUDA+NVIDIA-docker,NVIDIA-docker的安装wiki,此处的dependencies是有坑的,CUDA 8.0是必装的,不然NVIDIA-docker还是跑不起来的。

从头开始安装的话首先是系统,可能redhat+kickstart对于这种稍微有点规模的部署可能会节约一点时间,但是我看我们老师装centos的时候都是手动装的我想想还是算了吧。第一个问题就是server还是desktop,起初为了优雅我准备直接改一改server的镜像提前装好几个包或者直接把装好的系统打包ISO直接部署类似dism,后来找了半天找个systemback然后只能在GUI下能导出ISO,我想算了算了为了优雅怎么能在生产环境用desktop呢真鸡儿丢人我退群吧就作罢了,老老实实装完跑脚本吧。因为和一个同学一起他盘里有desktop我一边想着丢人丢人一边一人一台机子先搞起来。一开始我的驱动是用ppa:graphics-drivers/ppa源装的,然后就见了鬼了,desktop的机子毫无问题server死活装不上,报的啥错我已经气的记不住了。一会准备再试一次,暂且放着不提。

最终解决方案是用ppa源装的,375 384影响不大,感觉都能work至少nvidia-smi没问题。装完驱动务必立即重启,以及我这里是不需要手动禁用nonveau的,这也是一个巨坑。

然后是CUDA,众you所ren周shuo知官网run file就是个废物然后我直接用的deb,除了1.8G巨大无比又下载缓慢之外没啥大问题,我直接拉到本地分发的,在安装cuda的时候如果之前装的不是375会自动remove掉然后装375,这都无所谓,要是想要384的话装完CUDA重装一遍驱动即可,我是觉得可以直接装CUDA不需要事先安装driver的,但是自己没有尝试,准备一会试一下。由于这里又装了一遍驱动,所以装完重启。

到这里为止大概CUDA能跑起来了,然后装按官网方案装docker即可,装完docker下载NVIDIA-docker的release里面的deb装NVIDIA-docker即可,这里由于现在github的release download会跳转到aws的cdn,大概率被小墙,脸好的话等重连,脸黑直接tcp reset了,我也是本地部署的。

装完之后基本上大功告成,其他麻烦的地方就在于dockerhub巨慢无比配加速器也没啥用私有仓库可能是唯一解决方案,准备一会搭了,然后几个框架也很大所以等下载应该是有点难受的。用的时候用到GPU的时候用NVIDIA-docker即可。

这么一看好像也没啥坑可能是我脸黑加菜吧,不是菜是他们针对我.jpg,用同学的笔记本跑毫无问题我自己就GG,最后原因是uefi的话要关secureboot不然驱动不生效,也算一个小坑吧昨晚搞了一个小时。

按照我已经实现的上述思路来说是三个阶段里面两次重启,我个人感觉第一次驱动是没必要装的一会确认一下,反正按这种装是可以work的,如果不行就检查uefi的secureboot

sudo sh -c "echo 'deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse\ndeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse\ndeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse\ndeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse' > /etc/apt/sources.list"
sudo apt remove docker docker-engine docker.io -y
sudo apt update && sudo apt upgrade -y
sudo apt-get install \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable" -y
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
sudo apt install docker-ce nvidia-384 -y
wget /tmp https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt update && sudo apt install cuda -y && rm /tmp/cuda-*.deb
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://3fdc48ed.m.daocloud.io && sudo systemctl restart docker.service

Todo:
测试能否直接装CUDA
测试server能否直接安装
搭建私有docker repository
在多个docker container中实现例如Tensorflow的前端框架