docker/nvidia-docker使用整理

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


image.png

使用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的鏡像


image.png
docker image prune

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


image.png

先使用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)行命令:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容