搭建Tensorflow-gpu时与Docker和Dockerfile 的斗争

吃可爱长大的小学妹 提交于 2019-12-04 08:32:16

一、环境准备

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!