搭建Tensorflow-gpu時與Docker和Dockerfile 的鬥爭
一、環境準備
1.安裝CUDA、cudnn
首先確定顯示卡是否能GPU加速,檢視顯示卡版本下載對應的驅動 CUDA和cudnn必須在宿主機中安裝而不是在映象中 之後下載CUDA、與cudnn 具體下載方式網上很多
安裝時一定要先確定你要安裝的tensorflow-gpu版本
例:我安裝的是tensorflow-gpu 1.8.0 所以對應-CUDA 9.0 與cudnn 7.0
之前因為安裝了9.1又安回9.0的時候出了很多問題 所以最好一次到位
cuda 版本 cat /usr/local/cuda/version.txt
cudnn 版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
2.docker安裝
1.docker版本用的是docker-ce_18.06.0_ce_3-0 有時候docker對版本還是挺敏感的 2.就是我猜的大坑 nvidia-docker 當時就覺得docker和nvidia-docker是一個東西所以就只按了docker
只有安裝了nvidia-docker 才能把宿主機的cuda和cudnn對映到docker映象中
當時報的錯是在映象中x86_64-linux-gnu中少了很多cuda相關共享庫
3.Tensorflow-gpu-1.8.0
1.docker pull tensorflow/tensorflow:tag(tag就是你要的版本) https://hub.docker.com/r/tensorflow/tensorflow/tags/
4.Dockerfile的使用
因為映象沒辦法像本地那樣直接在命令列中就pip install 或者apt-get install之類而我們tensorflow映象中只有一些簡單的庫,所以要引入Dockerfile
例: FROM tensorflowcv:gpu1.8-py3
RUN apt-get update RUN apt-get install -y python-dev RUN pip install opencv-python COPY NVIDIA-Linux-x86_64-390.67.run ./
這是我Dockerfile中一小部分 FROM 後面是初始映象 RUN 後面可以執行一些常用命令 COPY 是把本地檔案拷到映象中 具體的操作可以去搜一下 最後在這個目錄下 執行 docker build -t 新起的映象名稱 . 然後我開發是在pycharm用的這個映象當環境 2017版在project Interpreter add remote中新增映象環境 2018版在add中選docker新增映象環境 而且專案中路徑必須用相對路徑
在容器中執行可以用絕對路徑 就這些東西具體去了解一下docker 映象 容器 才能理解我說的這些 等到真正執行專案的時候就明白了
安裝load別人搭建好pytorch
本以為環境都好了 load一下別人的版本就可以 但是載入之後失敗,在2天的不斷的嘗試 才知道是docker版本 的問題(天知道我這兩天干了什麼)
最後附上一些常用docker 操作
容器:
docker stop 容器ID 停止執行容器 docker start 容器ID 執行容器 docker ps -a 檢視所有容口 docker rm 容器ID 刪除指定容器 docker logs 容器ID 檢視容器日誌 docker exec -it 容器ID /bin/sh 進入到執行中的容器,cat /etc/resolv.conf 檢視檔案
ctrl+p+q 退出並保持執行容器
docker export 容器ID > docker_tensorflow.tar 匯出容器 cat docker_tensorflow.tar | docker import - [image name]:[tag] 匯入容器
映象:
docker images 檢視所有映象 docker rmi -f 映象ID 刪除指定映象
docker run -d 映象ID 建立容器ID docker run -p 8080:8080 -t mxnet/env 建立並執行一個容器 docker run -dti --name tensortest tensorflow/tensorflow /bin/sh ==>建立一個容器不進入
docker save 映象ID > 映象.tar ==》儲存映象 docker save 4431ddcz7e4a > /home/docker_tensorflow.tar
docker load < 映象.tar ==》載入映象 docker load < /home/docker_tensorflow.tar
docker tag 映象ID 映象名稱 ==》起映象別名 docker tag 77146ca185 tensorflow:gpu 重新命名
docker pull 映象名
docker build -t tensorflow/tensorflow . ==>生成映象 folder(jar包和dockerfile)
【docker volume】 sudo docker volume create --name vol_simple
– sudo docker run -d -v /root/data: /root/data tensorflow/bin/bash