昨天開始學(xué)習(xí)使用dockers,為了用上服務(wù)器上的GPU,但是很麻煩,麻煩在哪里呢:
非常不方便修改和查看代碼,每次需要本地修改了傳到服務(wù)器上,再拷貝到容器里!超級麻煩。
所以,需要新建一個容器,一步到位:共享與服務(wù)器的文件目錄,本地通過jupyter可以修改代碼。
這個關(guān)鍵點就在于docker run!
sudo docker run -it -d -p 8888:8888 --ipc=host --name pytorch1.3 -v /home/xx/:/workspace pytorch/pytorch:1.3-cuda10.1-cudnn7-devel /bin/bash
如果要使用GPU,主機(jī)環(huán)境是nvidia驅(qū)動加cuda,就需要將docker run換成nvidia-docker run,這樣新啟動的容器就有驅(qū)動了。
參數(shù)解析:? ??
? ? -it:終端交互式操作?
? ? -d:后臺運(yùn)行容器,并返回容器id
? ? -p:指定端口映射
? ? 8888:8888:前一個8888是主機(jī)(這里是服務(wù)器)端口,后一個是容器端口
? ? --ipc=host:讓容器共享主機(jī)ipc命名空間
? ? --name pytorch1.3:給這個容器命名為pytorch1.3
? ? -v /home/xx/:/workspace:共享目錄,/home.xx/是主機(jī)文件目錄,/workspace是容器文件目錄
? ? pytorch/pytorch:是鏡像名稱
? ? 1.3-cuda10.1-cudnn7-devel是鏡像版本
? ? /bin/bash:終端交互
docker?exec?-u 0 -it ContainerName /bin/bash:?以root身份進(jìn)入容器
如需升級pytorch:? pip install --upgrade torch==1.8.1 -i?https://pypi.tuna.tsinghua.edu.cn/simple/
接著就是pip自己需要的包了,pip intsall jupyter -i 國內(nèi)源
有時候國內(nèi)源一個不穩(wěn)定會出現(xiàn)網(wǎng)絡(luò)錯誤,可以換著來!
國內(nèi)源:
https://pypi.tuna.tsinghua.edu.cn/simple/ # 清華大學(xué)
https://mirrors.aliyun.com/pypi/simple/ # 阿里云
https://pypi.douban.com/simple/ # 豆瓣
https://pypi.mirrors.ustc.edu.cn/simple/ # 中國科學(xué)技術(shù)大學(xué)
https://pypi.hustunique.com/ # 華中科技大學(xué)
安裝vim
apt-get install vim
如果出錯:E: Unable to locate package vim
那么:
cp /etc/apt/sources.list /etc/apt/sources.list.bak 先備份原來的文件,再執(zhí)行:
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
上面這些換源操作因為源的公鑰問題已經(jīng)作廢,直接更新apt-get就行。
apt-get update 更新源
再執(zhí)行apt-get install vim。
配置jupyter notebook可遠(yuǎn)程訪問
(1)jupyter-notebook --generate-config
(2)設(shè)置jupyter的密碼:jupyter-notebook password
(3)去復(fù)制生成的sha1碼:vim /root/.jupyter/jupyter_notebook_config.json
linux vim編輯命令:
????ins鍵:是進(jìn)入編輯模式;
? ? Esc鍵是進(jìn)入命令模式,此時輸入:q是直接退出,:wq是寫完保存退出
? ? 這里復(fù)制密碼只需要在命令模式下選中ctrl+c就行,然后:q退出
(4)在jupyter_notebook_config.py 文件填入配置:vim /root/.jupyter/jupyter_notebook_config.py
? ? 進(jìn)入編輯模式,填寫下面信息
????# 允許通過任意綁定服務(wù)器的ip訪問
????c.NotebookApp.ip = '*'
????# 用于訪問的端口
????c.NotebookApp.port = 8888?
? ? #注意,這里的8888是與上面啟動的容器開放端口一致
????# 不自動打開瀏覽器
????c.NotebookApp.open_browser = False
????# 設(shè)置登錄密碼
????c.NotebookApp.password = u'sha1:xxxxxxxxxxxxxxxx' # 上面復(fù)制的sha1碼
? ? 進(jìn)入命令模式,:wq退出
(5)容器內(nèi)啟動jupyter:jupyter notebook --allow-root
如果想讓jupyter在窗口關(guān)閉后在后臺運(yùn)行:nohup jupyter notebook --allow-root > jupyter.log 2>&1 &,日志會寫到.log中。
(6)本地瀏覽器啟動遠(yuǎn)程docker 的jupyter:http://服務(wù)器Ip:8888,這里的8888是與上面啟動的服務(wù)器開放端口一致。
就可以輸入自己設(shè)置的密碼,就可以進(jìn)入jupyter啦!
將.ipynb 文件轉(zhuǎn)成.py
執(zhí)行jupyter nbconvert --to script xxx.ipynb
可以直接編輯容器里面的代碼真的太好了!