docker

docker/nvidia-docker使用整理

2019-06-05  本文已影响0人  赵小闹闹

1.打开nvidia-docker

sudo nvidia-docker run -it -p 7777:8888 tensorflow/tensorflow:latest-gpu

2.docker内打开jupyter notebook


jupyter notebook --ip 0.0.0.0 --no-browser --allow-root

第一次浏览器打开jupyter notebook

172.28.9.220:7777/tree?token=9Llv9cCqyNv1Vf7g

172.28.9.220是服务器的ip
7777是开docker是映射号
token是docker开jupyter时显示的token
之后直接使用开启即可

172.28.9.220:7777

3.查看已安装docker

sudo docker images

查看正在运行的容器

sudo docker ps

容器做完修改必须保存

sudo dcoker commit 容器id 容器名
sudo docker commit f55f8ba11f95 tensorflow/tensorflow:latest-gpu

停止某容器

sudo docker stop 容器id

4.docker配置jupyter notebook

mkdir [存放notebook的文件夹]
mkdir jupyter

此时相当于在主机的/home/下创建了jupyter文件夹

3.2 如果容器内没有jupyter notebook,需要安装一下

pip install jupyter notebook

3.3 配置jupyter notebook

jupyter notebook --generate-config
vim ~/.jupyter/jupyter-notebook-config.py
1
2
修改如下内容

# 允许root启动
c.NotebookApp.allow_root = True
# 允许远程访问
c.NotebookApp.ip = '0.0.0.0'
# 设置notebook文件夹
c.NotebookApp.notebook_dir = '/jupyter'
# 设置静态token,这样就不用每次换token了,另一种方法是设置密码password
c.NotebookApp.token = '[自定义token]'

3.4 开启notebook

jupyter notebook &
按Ctrl+P+Q退出容器但不关闭

5 docker运行脚本出现错误

ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm). 

解决方案

sudo nvidia-docker run --ipc=host -it -p 7790:8888 liu

启动docker时候加上参数--ipc=host

6 向容器里传文件

sudo docker cp /home/user/zhaobing/docker/tensorflow-mnist/mnist_tfserving_model   bafaaaa573b4:/

7 在多个shell中启动同一个docker

启动docker后,在新的窗口:

docker exec -it <container_id> bash

8 docker 挂载卷

 nvidia-docker run -it -v /home/user/workspace/liu/remote_workspace:/workspace/liu/remote_workspace retinaface

使用nvidia-docker run 而不是docker run
使用docker run 跑代码发生错误
挂载卷:前后为本地路径与docker内路径,要注意需要哪一级挂到哪一级,防止挂到子目录无法使用上级目录的情况。

9 docker 镜像的导出与导入

1.镜像保存
先使用docker images查询docker id


image.png

使用docker save命令保存为.tar文件

docker save 8ca8d > retinaface.tar

2.镜像导入

docker load < retinaface.tar

导入后使用下述命令给images 命名

docker tag 8ca8dfe44635 retinaface

10.镜像与容器的删除

查询镜像

docker ps

删除镜像

docker rmi

查询容器

docker images

删除容器

docker rm

理论上要先删除容器,才能删除镜像。

11. 容器开启无gpu

使用docker run命令开启docker 使用nvidai-smi 发现无GPU信息,可以做如下调整。

sudo docker run -it --gpus all -p 7777:8888 pytorch-zhao

加上--gpus all

12镜像删除

删除docker image 中的镜像

sudo docker image rm 'REPOSITORY:TAG'
#镜像名:tagm 默认为latest

13docker重命名

docker tag IMAGEID(镜像id) REPOSITORY:TAG
#新的image名和tag

14删除镜像名或者tag为none的镜像

对于REPOSITORY和TAG均为none的镜像


image.png
docker image prune

对于tag为none的镜像


image.png

先使用docker tag命令改名,将tag重命名为latest,再用docker image rm删除

15.docker启动挂载路径

sudo docker run -it   -v /data/docker/lib:/workspace pytorch:latest
sudo docker run -it --gpus all -p 7777:8888   -v /data/docker/lib:/workspace pytorch:latest

15.5docker启动时规定内存

使用mmdetection等大型项目时可能出现报错内存过小无法训练的情况,可以指定--shm-size 8G

sudo docker run -it --gpus all -p 7775:8888 --shm-size 8G -v /home/zhaobing:/workspace mmdetection:latest

16. pytorch py2版本镜像地址

https://hub.docker.com/r/vanessa/pytorch-dev/tags/?page=1&ordering=last_updated

17 docker最推荐打开方式

docker run用于最开始开启一个镜像,开启后不要关闭
通过docker attach 可以同步进入docker run开启的镜像界面,缺点是多人开启时均为同步界面,造成混乱,同时关闭该镜像,docker run开启的镜像也会被关闭
推荐通过docker exec命令进入镜像,没有docker attach的缺点

docker exec -it  wizardly_chaplygin bash

-it后为docker ps 查看的开启的docker name

18 Nvidia释放显存方法

当出现爆显存,CUDA_ERROR_OUT_OF_MEMORY

sudo kill -9 PID

可杀死相应进程,同时在计算过程给脚本规定使用的GPU可降低tensorflow出现浪费GPU现存问题

CUDA_VISIBLE_DEVICES=x

19. ps u pid

查看某个pid启动时运行命令

上一篇 下一篇

猜你喜欢

热点阅读