Tensorflow-gpu Docker 环境搭建 (二)
构建 Tensorflow 支持 GPU Docker 镜像
资料来源:
https://www.tensorflow.org/install/docker?hl=zh-cn
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/user-guide.html
https://github.com/andreivmaksimov/python_data_science更新
1
220.10.19 初始化
20.10.21 初稿完成
导语
在上文中,我们终于得到了能跑 gpu 加速的 docker image.但是接下来是个更大的坑…
特别参考了 GitHub - andreivmaksimov/python_data_science
需求
容器
- 可以运行常见深度学习工具包,特别是 Sklearn 和 Keras.
- 支持 GPU 加速
- 对 python 环境的改动不需要重新创建容器.
分析
- 在上文得到的 Dockerfile 基础上,可能还需要进行这些工作.
- 处理文件权限,指定 docker 内运行的用户与宿主机相同,避免文件权限问题.
- jupyter 启动应该有坑要处理.
- docker-compose 至今没有 -gpu 选项,启动容器 gpu 支持需要处理.
- 持久化 python 环境等.
处理文件权限
这里的打算是持久化用户目录,以避免每次改动都需要重新 commit 容器.
处理 docker 内外文件权限问题,在 linux笔记—docker入门 | 默 提过.要让 docker 内用户以与宿主机相同的 uid gid 运行,需要在 dockerfile 添加普通用户.
添加普通用户的同时还有以下需要
- 账户密码
- 使用 sudo
- sudo 免密码
Docker 添加普通用户/使用 sudo/免密码
在 dockerfile 中添加如下内容
1 | ENV USERNAME="user" |
注意:
- 在
USER "${USERNAME}"
命令后,docker 构建就是以 user 普通用户运行了.一般要把这一条放在最后. - 上面的内容只在 ubuntu 为基础镜像测试通过.(tf-gpu 也是 ubuntu 为基础的)
指定 uid gid 运行容器
docker 直接命令就不说了.
docker-compose.yml 中添加 user: 1000:1000
即可.(默认宿主机 1000:1000 情况下)
ps: 如果素主机是 1000:1000 情况下,直接启动容器,以普通用户运行也是默认 1000:1000…
jupyter
说实话对 jupyter 还不算熟悉.按照计划,日后会写更详细的定制博客吧,目前配置文件暂时拷贝了 GitHub - andreivmaksimov/python_data_science
OSError: [Errno 99] Cannot assign requested address
原 run_jupyter.sh
文件直接启动,如果是 root 用户没啥问题,换到普通用户后,一直有 OSError: [Errno 99] Cannot assign requested address
错误.
似乎是 docker 网络的一个问题,直接指定 jupyter 启动 ip 为 0.0.0.0
即可.
具体是将启动命令换成 jupyter notebook --ip 0.0.0.0 --no-browser "$@"
docker-compose gpu 支持
如前面所言,docker-compose 没有 gpu 选项,这意味着没法直接从 docker-compose.yml 启动 docker.
相关的讨论 Support for NVIDIA GPUs under Docker Compose.
在讨论中有一个曲线救国的方法:
- 安装 nvidia-container-runtime
- 配置 daemon.json
- 在 docker-compose 配置使用 runtime.
遗憾的是 version 3 以上, runtime 已经移除了…所以配置文件 version 只能小于 3.
配置 gpu 支持
安装 nvidia-container-runtime
1 | sudo apt-get install nvidia-container-runtime |
配置 /etc/docker/daemon.json
1 | { |
docker-compose 中配置 runtime: nvidia
1 | version: '2.3' |
成品
代码在这里 GitHub - Jasper-1024/Dockerfile at deep-learning
还有细节需要调整,不过大体是这样了.
还没传到 dockerhub,最近找时间弄一下.
结语
至此,尚可用.
来活了,机器学习再见!.///…/./././.