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
- 创建存放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启动时运行命令
网友评论