docker基礎教程:https://legacy.gitbook.com/book/yeasy/docker_practice/details,通過這個教程可以了解docker基本概念
docker安裝:參見我的另一篇博客:http://www.cnblogs.com/deepllz/p/8933073.html
為什么使用docker?
原因是:通過docker運行tensorflow-gpu容器可以避免復雜的環境的配置,比如cuda。具體環境配置有多復雜參考:本機安裝gpu版本的tf安裝參見我的另一篇博客:http://www.cnblogs.com/deepllz/p/8920420.html.
而在ubuntu上運行docker tensorflow-gpu鏡像,僅僅需要安裝nvidia驅動即可,幸運的是一般通過軟件更新器(software & updates→ Additional Drivers)即可順利安裝顯卡驅動,用Linux命令也可以順利安裝.
1.下載鏡像
docker tensorflow的鏡像官網為https://hub.docker.com/r/tensorflow/tensorflow/,首先按照官方教程安裝nvidia-docker2,之后的tensorflow-gpu鏡像都需要nvidia-docker來啟動,或者docker run --runtime=nvidia,當然這樣就足夠用了,如果你想用docker取代nvidia-docker可以修改/etc/docker/daemon.json為如下所示,即在第一行加入"default-runtime": "nvidia",這樣就可以直接用docker取代nvidia-docker了。
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
安裝配置成功之后選擇Tags標簽可以看到不同tag的tensorflow鏡像,官方實例代碼選擇的tag為latest-gpu的鏡像,可以根據自己的需要下載鏡像,博主選擇的是1.8.0-devel-gpu-py3的鏡像,這個鏡像包含tensorflow-gpu=1.8.0版本,並且包含bazel等開發環境可以編譯tensorflow的源代碼。即此鏡像既可以用於訓練模型,又可以用來學習tensorflow源碼。執行:
docker pull tensorflow/tensorflow:1.8.0-devel-gpu-py3
下載成功后執行:
docker images
可以查看下載的鏡像,如下圖所示:

可以看到有一個TAG名為1.8.0-devel-gpu-py3的鏡像,證明下載成功。
2.啟動容器
如果在前面配置了"default-runtime": "nvidia",那么執行:
docker run --rm -it -v /home/zzh/:/root/tensorflow --name zzh tensorflow/tensorflow:1.8.0-devel-gpu-py3
沒有配置則可以執行:
nvidia-docker run --rm -it -v /home/zzh/:/root/tensorflow --name zzh tensorflow/tensorflow:1.8.0-devel-gpu-py3
或者執行:
docker run --runtime=nvidia --rm -it -v /home/zzh/:/root/tensorflow --name zzh tensorflow/tensorflow:1.8.0-devel-gpu-py3
其中docker run的參數含義如下:
(1)--rm 退出容器清除數據
(2)-it 啟動交互式終端
(3)-v 掛在目錄
(4)--name 容器名稱
具體細節參考官方文檔:https://docs.docker.com/engine/reference/run/
3.在容器中訓練cifar10
cifar10教程:https://www.tensorflow.org/tutorials/deep_cnn
在本機某一路徑下創建好項目,執行腳本后可以看到訓練的速度,如下圖所示:

可以看到,step 0到200的時間是13.52秒。
將這個目錄掛在到容器中,在容器中訓練,速度如下圖所示:

可以看到,step 0到200的時間是12.39秒(快了的原因是容器中的是tensorflow1.8,而本機由於cuda版本的原因安裝的是tensorflow1.4)
4.其他docker常用命令
(1)通過[docker commit CONTAINER_ID newImageName]保存對鏡像的修改,CONTAINER_ID可以通過docker ps查看
(2)通過[docker save -o 文件名 鏡像名] 將鏡像存儲至磁盤,例如docker save -o tensorflow.tar tensorflow/tensorflow:1.8.0-devel-gpu-py3
(3)通過[docker load --input 文件名] 從磁盤導入鏡像,例如docker load --input tensorflow.tar
(4)容器一旦退出里面的信息就都會被清除,若不想保存修改又不想丟失信息,那么可以CTRL+P+Q讓容器在后台運行,然后通過docker attach CONTAINER_ID重新連接進容器
