Ubuntu快速玩转机器学习
最近入手了一块Titan V,自然是要玩一玩机器学习的。这块卡不仅CUDA核达到了5120个,还有了640个Tensor计算核,安装TesnsorFlow是首选了。如果在集群中运行,可以使用TensorFlow自带的集群服务,或者通过Kubernetes进行集群的管理,或者通过Spark实现基于分布式内存的深度学习集群。
- 快速运行TensorFlow的6种方式,
我的硬件环境是:CPU-7980XE,内存-海盗船16G*8,显卡-Titan V。
安装的软件栈包括:
- Ubuntu16.04 LTS
- Nvidia Driver 396.42
- Nvidia CUDA 9.1
- Nvidia cuDNN 7.1.3
- Nvidia cuTensor 4.0
- Docker CE 18.03
- Docker-Nvidia 2.0.3
- Tensorflow for Docker 1.8
- Kubernets 1.10.2
- Spark 2.3
硬件、驱动和软件都是最新的版本,中间踩了不少坑。记录下来,供参考。
1、安装 Ubuntu16.04 LTS
准备一个8G以上的U盘,制作一个启动U盘。
- 官网下载,
- 启动U盘烧写。推荐Etcher,
然后就可以插入计算机,修改BIOS为U盘启动,然后安装系统。
2、安装Nvidia图形驱动396
安装最新的图形卡驱动,步骤如下:
sudo add-apt-repository ppa:graphics-drivers/ppasudo apt updatesudo apt install nvidia-396#开发使用sudo apt install nvidia-396-dev
如果遇到问题,参考:
- Ubuntu 16.04安装NVIDIA的显卡驱动396和CUDA9.1,
3、安装CUDA 9.1
安装最新的CUDA Toolkit 9.1,如下:
#获取Cuda9.1安装文件文件和2018.5.5的补丁包:wget -c https://developer.nvidia.com/compute/cuda/9.1/Prod/local_installers/cuda_9.1.85_387.26_linuxwget -c https://developer.nvidia.com/compute/cuda/9.1/Prod/patches/3/cuda_9.1.85.3_linux#然后运行 sudo chmod +x ...,再执行就可以了。
然后,进行CUDA的执行文件和库文件路径设置(必需的,安装程序没有自动设置。修改此设置可以使用不同的CUDA版本)。输入 gedit .profile,将下面内容加入到最后:
CUDAPATH="/usr/local/cuda-9.1/bin"PATH="$CUDAPATH:$PATH"CUDALIB="/usr/local/cuda-9.1/lib64"LD_LIBRARY_PATH="$CUDALIB:$LD_LIBRARY_PATH"
保存后,退出。
然后,立即进行启用(下次登录后会自动启用):
source .profile
也可以放到其它启动时运行文件或者脚本文件中每次运行。
4、安装cuDNN 7.1.3
这个需要一个Nvidia的开发者帐号,到Nvidia官网()注册,然后就可以下载了。下载deb版本的安装程序,然后运行:
sudo dpkg -i libcudnn7_7.1.3.16-1+cuda9.1_amd64.debsudo dpkg -i libcudnn7-dev_7.1.3.16-1+cuda9.1_amd64.deb
- 注意,需要同时下载运行时和开发文件包。开发文件包里面没有包含运行时库,需要先下载、安装运行时库,否则安装开发库时会报错。
5、安装cuTensor 4.0
到Nvidia官网(),使用Nvidia的开发者帐号登录,然后就可以下载了。下载deb版本的安装程序,然后运行:
sudo dpkg -i nv-tensorrt-repo-ubuntu1604-cuda9.0-rc-trt4.0.0.3-20180329_1-1_amd64.deb
6、安装Docker CE 18.03
需要安装Docker CE的18.03版本(为了支持Nvidia的GPU),其他版本不行。
wget get.docker.com -O docker.shsudo chmod +x docker.sh./docker.shsudo apt install docker-ce=18.03.1~ce-0~ubuntu
- 参考:
7、安装Docker-Nvidia
安装NVidia支持的Docker引擎(),就可以在容器中使用GPU了。具体步骤如下:
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containersdocker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -fsudo apt-get purge -y nvidia-docker# Add the package repositoriescurl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ sudo apt-key add -distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.listsudo apt-get update# Install nvidia-docker2 and reload the Docker daemon configurationsudo apt-get install -y nvidia-docker2sudo pkill -SIGHUP dockerd# Test nvidia-smi with the latest official CUDA imagedocker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
注意,现在像上面运行 Docker 可以直接支持GPU了,不用再单独运行Docker-Nvidia命令了,大大增强了与各种容器编排系统的兼容性,Kubernetes目前也已经可以支持Docker容器运行GPU了。
- 参考
8、安装Tensorflow for Docker
Tensorflow已经官方支持Docker的部署了,一行代码就可以搞定:
nvidia-docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu
- 运行Tensorflow的6种方法,
- 更多的安装方法,参考TensorFlow官网:
- Tensorflow在Docker中运行和源码编译,
9、运行Jupyter with Tensorflow
上面安装结束后,会出现关于tensorflow的访问提示,拷贝,输入浏览器即可以访问Jupyter Notebook for Tensorflow了,可以试着运行一下,检查Tensorflow运行是否正常。
通过Kubeflow可以将深度学习引擎与Kubernetes结合起来,方便进行大规模集群节点的管理。
10、部署Kubernetes 1.9.3
参考下面的教程:
- kubeadm安装Kubernetes,
- Ubuntu上安装Kubernetes 1.10.x版 ,
- 安装Kubernetes Dashboard,
- 安装Kubernetes Helm包管理工具,
安装Kubernetes上的GPU支持软件:
- NVidia支持的Docker引擎(GPU支持),
- NVIDIA的Kubernetes 插件,
- Kunernetes调度GPU,
11、使用Spark 2.3
通过Spark使用Kubernetes的集群管理和容器编排能力,进一步调用GPU进行深度学习,已经开发了多种多种技术路线和方案,目前还在发展之中。
可以参考:
- Apache Spark 2.3 运行于Kubernetes,
- 更多Spark的k8s方案,
目前,开源社区和软件公司正在解决Kubernetes支持GPU的Docker、Spark支持GPU的Docker以及原生的Spark DL深度学习支持(参考: ),估计2018年底就会有完整的生产级平台出现。