世上本无路 只是走的人多了 也就成了路
一、目标
在Kubernetes平台上,运行GPU版本TensorFlow,实现MNIST训练识别。
二、假设前提
你会通过源代码编译TensorFlow,且编译了GPU版本TensorFlow
你会看懂Python版本的TensorFlow程序,且编写了MNIST训练识别程序
你会构建Docker镜像,且有一套Docker环境
你会操作Kubernetes,且有一套Kubernetes环境
注:Kubernetes-Docker集群搭建、GPU版本TensorFlow编译、MNIST测试程序样例等可以参考我之前写的系列文章
三、实现环境
CentOS 7
Python 2.7.5
Docker 1.12.6
Kubernetes v1.5.2
cuda_9.1.85_387.26_linux
cudnn-9.1-linux-x64-v7
NVIDIA GeForce GTX 750
Dockerfile(详见后面)
MNIST测试程序
POD文件(详见后面)
tensorflow-1.5.0-cp27-cp27mu-linux_x86_64.whl
四、构建Docker镜像
4.1 下载CentOS镜像:
4.2 编写Dockerfile
Line 1-3: 基础镜像centos、作者信息、容器当前工作目录
Line 4-6:在镜像中安装wget和pip工具
Line 7-9:在镜像中安装GPU版本TensorFlow和依赖库libgomp
Line 10-11:在镜像中安装mnist测试程序
Line 12-13:设置镜像中环境变量
4.3 构建GPU版本TensorFlow镜像
4.4 查看GPU版本TensorFlow镜像
五、配置Kubernetes
5.1 node节点配置开启GPU支持:
/etc/kubernetes/kubelet中添加:
KUBELET_ARGS=”–experimental-nvidia-gpus 1″
重启kubelet服务:
六、通过POD运行TensorFlow
6.1 查看host上GPU情况:
6.2 查看host上cuda toolkit和driver情况:
6.3 编写pod.yaml:
6.4 运行pod:
6.5 运行nvidia-smi查看GPU使用情况:
6.6 查看MNIST结果:
kubectl logs tf-gpu-pod -f
七、说明:
7.1 GPU映射
Kubernetes 1.5.2版本GPU参数为experimental-nvidia-gpu 1
Kubernetes 1.6.0版本GPU参数为–feature-gates=”Accelerators=true”
开启alpha.kubernetes.io/nvidia-gpu: 1
7.2 驱动映射
宿主机的/usr/local/cuda/和/usr/lib64/包含CUDA驱动,需要手工在POD中映射到容器里,目标目录添加到环境变量LD_LIBRARY_PATH中。
当然,你可以借助nvidia-docker-plugin(nvidia-docker)自动帮你归纳CUDA驱动,放到宿主机/var/lib/nvidia-docker/volumes/nvidia_driver/387.26/目录。