1.打開(kāi)nvidia-docker
sudo nvidia-docker run -it -p 7777:8888 tensorflow/tensorflow:latest-gpu
2.docker內(nèi)打開(kāi)jupyter notebook
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
第一次瀏覽器打開(kāi)jupyter notebook
172.28.9.220:7777/tree?token=9Llv9cCqyNv1Vf7g
172.28.9.220是服務(wù)器的ip
7777是開(kāi)docker是映射號(hào)
token是docker開(kāi)jupyter時(shí)顯示的token
之后直接使用開(kāi)啟即可
172.28.9.220:7777
3.查看已安裝docker
sudo docker images
查看正在運(yùn)行的容器
sudo docker ps
容器做完修改必須保存
sudo dcoker commit 容器id 容器名
sudo docker commit f55f8ba11f95 tensorflow/tensorflow:latest-gpu
停止某容器
sudo docker stop 容器id
4.docker配置jupyter notebook
- 創(chuàng)建存放jupyter notebook的文件夾
mkdir [存放notebook的文件夾]
mkdir jupyter
此時(shí)相當(dāng)于在主機(jī)的/home/下創(chuàng)建了jupyter文件夾
3.2 如果容器內(nèi)沒(méi)有jupyter notebook,需要安裝一下
pip install jupyter notebook
3.3 配置jupyter notebook
jupyter notebook --generate-config
vim ~/.jupyter/jupyter-notebook-config.py
1
2
修改如下內(nèi)容
# 允許root啟動(dòng)
c.NotebookApp.allow_root = True
# 允許遠(yuǎn)程訪問(wèn)
c.NotebookApp.ip = '0.0.0.0'
# 設(shè)置notebook文件夾
c.NotebookApp.notebook_dir = '/jupyter'
# 設(shè)置靜態(tài)token,這樣就不用每次換token了,另一種方法是設(shè)置密碼password
c.NotebookApp.token = '[自定義token]'
3.4 開(kāi)啟notebook
jupyter notebook &
按Ctrl+P+Q退出容器但不關(guān)閉
5 docker運(yùn)行腳本出現(xiàn)錯(cuò)誤
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
啟動(dòng)docker時(shí)候加上參數(shù)--ipc=host
6 向容器里傳文件
sudo docker cp /home/user/zhaobing/docker/tensorflow-mnist/mnist_tfserving_model bafaaaa573b4:/
7 在多個(gè)shell中啟動(dòng)同一個(gè)docker
啟動(dòng)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 跑代碼發(fā)生錯(cuò)誤
掛載卷:前后為本地路徑與docker內(nèi)路徑,要注意需要哪一級(jí)掛到哪一級(jí),防止掛到子目錄無(wú)法使用上級(jí)目錄的情況。
9 docker 鏡像的導(dǎo)出與導(dǎo)入
1.鏡像保存
先使用docker images查詢(xún)docker id

使用docker save命令保存為.tar文件
docker save 8ca8d > retinaface.tar
docker save無(wú)空間時(shí),解決方法
cd /mnt/md0 && docker save -o yuan_qwen.tar yuan:qwen
2.鏡像導(dǎo)入
docker load < retinaface.tar
導(dǎo)入后使用下述命令給images 命名
docker tag 8ca8dfe44635 retinaface
10.鏡像與容器的刪除
查詢(xún)鏡像
docker ps
刪除鏡像
docker rmi
查詢(xún)?nèi)萜?/p>
docker images
刪除容器
docker rm
理論上要先刪除容器,才能刪除鏡像。
11. 容器開(kāi)啟無(wú)gpu
使用docker run命令開(kāi)啟docker 使用nvidai-smi 發(fā)現(xiàn)無(wú)GPU信息,可以做如下調(diào)整。
sudo docker run -it --gpus all -p 7777:8888 pytorch-zhao
加上--gpus all
12鏡像刪除
刪除docker image 中的鏡像
sudo docker image rm 'REPOSITORY:TAG'
#鏡像名:tagm 默認(rèn)為latest
13docker重命名
docker tag IMAGEID(鏡像id) REPOSITORY:TAG
#新的image名和tag
14刪除鏡像名或者tag為none的鏡像
對(duì)于REPOSITORY和TAG均為none的鏡像

docker image prune
對(duì)于tag為none的鏡像

先使用docker tag命令改名,將tag重命名為latest,再用docker image rm刪除
15.docker啟動(dòng)掛載路徑
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啟動(dòng)時(shí)規(guī)定內(nèi)存
使用mmdetection等大型項(xiàng)目時(shí)可能出現(xiàn)報(bào)錯(cuò)內(nèi)存過(guò)小無(wú)法訓(xùn)練的情況,可以指定--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最推薦打開(kāi)方式
1.啟動(dòng)docker時(shí)命名
docker run -it --gpus all -p 7772:8888 --shm-size 8G --name ISdebug2 -v /home/inspur/zhaobing:/workspace nvcr.io/nvidia/tensorflow:21.07-tf1-py3
這樣即使關(guān)閉,
可以使用docker start ISdebug 開(kāi)啟docker(記住命名就不用每次都docker run了)
在用docker exec -it ISdebug bash進(jìn)入
docker run用于最開(kāi)始開(kāi)啟一個(gè)鏡像,開(kāi)啟后不要關(guān)閉
通過(guò)docker attach 可以同步進(jìn)入docker run開(kāi)啟的鏡像界面,缺點(diǎn)是多人開(kāi)啟時(shí)均為同步界面,造成混亂,同時(shí)關(guān)閉該鏡像,docker run開(kāi)啟的鏡像也會(huì)被關(guān)閉
推薦通過(guò)docker exec命令進(jìn)入鏡像,沒(méi)有docker attach的缺點(diǎn)
docker exec -it wizardly_chaplygin bash
-it后為docker ps 查看的開(kāi)啟的docker name
18 Nvidia釋放顯存方法
當(dāng)出現(xiàn)爆顯存,CUDA_ERROR_OUT_OF_MEMORY
sudo kill -9 PID
可殺死相應(yīng)進(jìn)程,同時(shí)在計(jì)算過(guò)程給腳本規(guī)定使用的GPU可降低tensorflow出現(xiàn)浪費(fèi)GPU現(xiàn)存問(wèn)題
CUDA_VISIBLE_DEVICES=x
19. ps u pid
查看某個(gè)pid啟動(dòng)時(shí)運(yùn)行命令: