1 使用 Docker 部署 TensorFlow 环境
提示
本部分面向没有 Docker 经验的读者。对于已熟悉 Docker 的读者,可直接参考 TensorFlow 官方文档 进行部署。
Docker 是轻量级的容器(Container)环境,通过将程序放在虚拟的 “容器” 或者说 “保护层” 中运行,既避免了配置各种库、依赖和环境变量的麻烦,又克服了虚拟机资源占用多、启动慢的缺点。使用 Docker 部署 TensorFlow 的步骤如下:
wget -qO- https://get.docker.com/ | sh
如果当前的用户非 root 用户,可以执行 sudo usermod -aG docker your-user
命令将当前用户加入 docker
用户组。重新登录后即可直接运行 Docker。
Linux 下通过以下命令启动 Docker 服务:
sudo service docker start
-
拉取 TensorFlow 映像。Docker 将应用程序及其依赖打包在映像文件中,通过映像文件生成容器。使用
docker image pull
命令拉取适合自己需求的 TensorFlow 映像,例如:
docker image pull tensorflow/tensorflow:latest-py3 # 最新稳定版本TensorFlow(Python 3.5,CPU版) docker image pull tensorflow/tensorflow:latest-gpu-py3 # 最新稳定版本TensorFlow(Python 3.5,GPU版)
更多映像版本可参考 TensorFlow 官方文档 。
小技巧
在国内,推荐使用 DaoCloud 的 Docker 映像镜像 ,将显著提高下载速度。
-
基于拉取的映像文件,创建并启动 TensorFlow 容器。使用
docker container run
命令创建一个新的 TensorFlow 容器并启动。
CPU 版本的 TensorFlow:
docker container run -it tensorflow/tensorflow:latest-py3 bash
提示
docker container run
命令的部分选项如下:
-
-it
让 docker 运行的容器能够在终端进行交互,具体而言:-
-i
(--interactive
):允许与容器内的标准输入 (STDIN) 进行交互。 -
-t
(--tty
):在新容器中指定一个伪终端。
-
-
--rm
:当容器中的进程运行完毕后自动删除容器。 -
tensorflow/tensorflow:latest-py3
:新容器基于的映像。如果本地不存在指定的映像,会自动从公有仓库下载。 -
bash
在容器中运行的命令(进程)。Bash 是大多数 Linux 系统的默认 Shell。
GPU 版本的 TensorFlow:
若需在 TensorFlow Docker 容器中开启 GPU 支持,需要具有一块 NVIDIA 显卡并已正确安装驱动程序(详见 “TensorFlow 安装” 一章 )。同时需要安装 nvidia-docker 。依照官方文档中的 quickstart 部分逐行输入命令即可。
警告
当前 nvidia-docker 仅支持 Linux。
安装完毕后,在 docker container run
命令中添加 --runtime=nvidia
选项,并基于具有 GPU 支持的 TensorFlow Docker 映像启动容器即可,即:
docker container run -it --runtime=nvidia tensorflow/tensorflow:latest-gpu-py3 bash
Docker 常用命令
映像(image)相关操作:
docker image pull [image_name] # 从仓库中拉取映像[image_name]到本机 docker image ls # 列出所有本地映像 docker image rm [image_name] # 删除名为[image_name]的本地映像
容器(container)相关操作:
docker container run [image_name] [command] # 基于[image_name]映像建立并启动容器,并运行[command] docker container ls # 列出本机正在运行的容器 # (加入--all参数列出所有容器,包括已停止运行的容器) docker container rm [container_id] # 删除ID为[container_id]的容器
2 dial unix /var/run/docker.sock: connect: permission denied
1、普通用户启动docker时遇到如下错误:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/build?
buildargs=%7B%7D&buildbinds=null&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7
D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=192.168.1.202%2Flibrary%2Ficp-service-interface%3Av2&ulimits=null:dial unix /var/run/docker.sock: connect:
permission denied
2、解决办法
2.1、添加docker用户组
groupadd docker
2.2、把当前用户加入docker用户组
gpasswd -a ${USER} docker
3、查看是否添加成功:
cat /etc/group | grep ^docker
4、重启docker
serivce docker restart
5、更新用户组
newgrp docker
6、测试docker命令是否可以使用sudo正常使用
docker ps