docker基礎教程:https://legacy.gitbook.com/book/yeasy/docker_practice/details,經過這個教程能夠了解docker基本概念html
docker安裝:參見個人另外一篇博客:http://www.cnblogs.com/deepllz/p/8933073.html git
爲何使用docker?docker
緣由是:經過docker運行tensorflow-gpu容器能夠避免複雜的環境的配置,好比cuda。具體環境配置有多複雜參考:本機安裝gpu版本的tf安裝參見個人另外一篇博客:http://www.cnblogs.com/deepllz/p/8920420.html.json
而在ubuntu上運行docker tensorflow-gpu鏡像,僅僅須要安裝nvidia驅動便可,幸運的是通常經過軟件更新器(software & updates→ Additional Drivers)便可順利安裝顯卡驅動,用Linux命令也能夠順利安裝.ubuntu
1.下載鏡像bash
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源碼。執行:spa
docker pull tensorflow/tensorflow:1.8.0-devel-gpu-py3
下載成功後執行:htm
docker images
能夠查看下載的鏡像,以下圖所示:blog
能夠看到有一個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從新鏈接進容器