1. 程式人生 > >搭建Tensorflow-gpu時與Docker和Dockerfile 的鬥爭

搭建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

cuda 版本 cat /usr/local/cuda/version.txt cudnn 版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 cudnn 版本

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/

我現在去這個網站一看連1.8都沒有了 可以根據現有的格式去推一下之前的版本 2.docker的好處就是環境打包,當你搭好一套環境的時候去別的電腦把cuda、cudnn安好之後把映象直接導過來就能用

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