需要基础知识
docker基础
ssh基础
CUDA基础
TensorFlow安装基础
TensorFlow GPU docker 安装
访问TensorFlow官网,查找需要安装的TensorFlow版本
https://tensorflow.google.cn/install/docker?hl=zh_cn
此日期的说明 Last updated 2021-01-29 UTC
GPU 支持
Docker 是在 GPU 上运行 TensorFlow 的最简单方法,因为主机只需安装 NVIDIA® 驱动程序,而不必安装 NVIDIA® CUDA® 工具包
安装 Nvidia 容器工具包以向 Docker 添加 NVIDIA® GPU 支持。nvidia-container-runtime 仅适用于 Linux。有关详情,请参阅 nvidia-container-runtime
Nvidia 容器工具包
https://github.com/NVIDIA/nvidia-docker/blob/master/README.md#quickstart
结构图
在docker官网中查找需要下载的image,并下载到本地
https://hub.docker.com/r/tensorflow/tensorflow/tags?page=1&ordering=last_updated
此次安装的是 tensorflow/tensorflow 1.14.0-gpu 481cb7ea8826 23 months ago 3.51GB
列出镜像 docker images
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
php 5.6 f40e9e0f10c8 9 days ago 444.8 MB
nginx latest 6f8d099c3adc 12 days ago 182.7 MB
mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB
ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB
hello-world latest 690ed74de00f 6 months ago 960 B
training/webapp latest 6fae60ef3446 11 months ago 348.8 MB
tensorflow/tensorflow 1.14.0-gpu 481cb7ea8826 23 months ago 3.51GB
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
创建容器
docker run --gpus all -it tensorflow/tensorflow:1.14.0-gpu bash #启动基本container
#在启动container可以加入很多参数,实现端口映射,指定显卡GPU,自启动等诸多功能
docker run --gpus "device=2" -it -p 8001:22 -p 8002:6000 -p 8003:6006 --name tensorflow gpu -v /data/mount_docker:/data tensorflow/tensorflow:1.14.0-gpu-ssh /usr/sbin/sshd -D
--gpus "device=2" #指定container使用的GPU,GPU编号用nvidia-smi查看
-p 8001:22 #端口映射,container 22映射到本机 8001,需要注意顺序,可以同时写多个映射
--name tensorflow gpu #为这个container命名
-v /data/mount_docker:/data #将container /data目录挂载到本机 /data/mount_docker,需要注意顺序
#注意! 挂载后,在container目录中修改会影响本机此目录下内容,两个目录是同步关系
tensorflow/tensorflow:1.14.0-gpu-ssh /usr/sbin/sshd -D #开启ssh服务并设置自启动
docker exec -it a6cb143e753a #进入相应container
#会出现以下画面
________ _______________
___ __/__________________________________ ____/__ /________ __
__ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / /
_ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ /
/_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/
WARNING: You are running this container as root, which can cause new files in
mounted volumes to be created as the root user on your host machine.
To avoid this, run the container by specifying your user's userid:
$ docker run -u $(id -u):$(id -g) args...
root@a6cb143e753a:/#
用python测试GPU是否可用
import tensorflow as tf
tf.test.is_gpu_available()
进入container
docker exec -it b2de9de8396f /bin/bash
安装vim和yum
#在container中缺少一些插件需要自己安装
#container为Ubuntu所以用apt-get
apt-get update
apt-get install vim
apt-get install yum
apt install iputils-ping
ssh连接container
在container中安装ssh插件
安装完成后进入 vi /etc/ssh/sshd_config ,修改为可以远程ssh登录
vi /etc/ssh/sshd_config
#配置为
#PermitRootLogin prohibit-password
PermitRootLogin yes
#配置完成后需要激活
/etc/init.d/ssh restart
修改container密码,此密码同为ssh远程密码
root@a6cb143e753a:/# passwd
Enter new UNIX password:
Retype new UNIX password:
#连接container
#输入密码
ssh -p 8001 root@172.16.77.107
问题
如果无法登录,考虑防火墙是否开启ssh端口,container默认是端口22,映射到了本机8001,则需要开放本机8001端口
参考上面设置 -p 8001:22
firewall-cmd --permanent --add-port=8001/tcp
firewall-cmd --reload
在docker重启后有时会无法ssh,需要进入container运行 /etc/init.d/ssh restart
可以在创建container时加入自启动,就无须上述步骤
#加入创建container参数中
tensorflow/tensorflow:1.14.0-gpu-ssh /usr/sbin/sshd -D
补充
netstat -tunlp 查看所有使用中的端口
-a 显示所有连线中的Socket
-A 列出网络类型连线中的相关地址
-c 持续列出网络状态
-C 显示路由器配置的快取信息
-e 显示网络其他相关信息
-g 显示多重群组名单
-l 显示监控中的服务器的socket
-n 直接使用ip 地址,不通过域名服务器
-N 显示网络硬件外围设备的符号链接名称
-p 显示正在使用Socket 的程序识别码和程序名称
-t 显示TCP 传输协议的连线状况
-u 显示UDP 传输协议的连线状况
-x --unix
#pip升级
python -m pip install -U pip
dockerfile参考
reference
https://www.jianshu.com/p/658911a8cff3