herosea / issues

生活、学习的一些记录
Apache License 2.0
0 stars 0 forks source link

学习周报-2020 #1

Open herosea opened 4 years ago

herosea commented 4 years ago

jupyterhub的tensorflow在k8s上使用gpu

基础升级 docker 和 nvidia驱动

先说下原来集群的版本和硬件

镜像中
jupyterhub==1.0.0
notebook=6.0.0
jupyterlab=1.2.1

宿主机
k8s  v1.7.12
docker  1.12.6
gpu  Tesla P40

以前使用tensorflow1.1 来做神经网络的模型训练,nvidia 和 cuda 是通过目录挂载的形式加载到容器里面。这次要用tensorflow2.1.0来训练模型,故而有了升级操作。

要升级的组件如下

宿主机
docker   1.12.6 => 19.03.12
nvidia driver  =>418.152.00

因为较新的 docker 才支持 gpu插件

较新的nvidia driver 才支持 cuda 10.1

k8s处理

k8s不需要特别处理

有一种方案是升级k8s版本,实现gpu调度。 但是会涉及到一系列升级和修改,比较麻烦,我们用的是另外一个方案。

在这个方案中,docker默认启用gpu,k8s不需要知道使用了gpu。

我们在k8s中已经对gpu单独分组了,由用户来选择使用gpu,而k8s像调度cpu机器一样调度gpu机器。

docker默认启用gpu

大部分文章提到了安装 nvidia-container-toolkit,然后使用 --gpus all 来启用gpu。这种方式显式加一个参数,需要k8s调度支持,比较麻烦。

后来找到了nvidia-container-runtime,这是个更底层的docker插件,安装完成后,在 /etc/docker/daemon.json 添加

    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"

然后

sudo systemctl daemon-reload
sudo systemctl restart docker

使用如下命令测试是否成功。其中环境变量是启用gpus必要的条件

docker run --rm  --env NVIDIA_DRIVER_CAPABILITIES="compute,utility"  --env NVIDIA_VISIBLE_DEVICES=all busybox:latest mount | egrep 'nvidia|cuda'

支持的环境变量参考 https://gitlab.com/nvidia/container-images/cuda/-/blob/master/dist/10.1/ubuntu18.04-x86_64/base/Dockerfile

这里有相关原理的分析 https://cloud.tencent.com/developer/article/1496697

镜像添加gpu支持

镜像需要添加 cuda 包。

tensorflow 和 cuda包版本的推荐匹配参见

https://www.tensorflow.org/install/source#linux

具体docker编写参考 https://gitlab.com/nvidia/container-images/cuda/-/blob/master/dist/ubuntu18.04/10.1/base/Dockerfile

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/dockerfiles/dockerfiles/gpu-jupyter.Dockerfile

注意nvidia的镜像的继承关系,需要合并多个docker的内容。 另外主要ubunutu的版本,我就踩了版本的坑,如果16.04 用了 18.04的源,不会报错,但是安装会卡住。

总结

宿主机

  1. 升级nvidia驱动
  2. 升级docker
  3. 安装和配置 nvidia-container-runtime

镜像中

  1. 安装cuda等gpu包
  2. 安装tensorflow
herosea commented 4 years ago

Jupyter Docker Stacks