利用docker安装tensorflow,并远程使用

1.安装 nvidia 驱动
2.安装docker

	1. sudo apt-get remove docker docker-engine docker.io containerd runc
	2. sudo apt-get update
	3. sudo apt-get install \
          apt-transport-https \
          ca-certificates \
          curl \
          gnupg-agent \
          software-properties-common	
        4.curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
	5.sudo add-apt-repository \
          "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
           $(lsb_release -cs) \
           stable"	
        6.sudo apt-get update
	7.sudo apt-get install docker-ce docker-ce-cli containerd.io

 

 
3.安装 nvidia-docker
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

 

4.拉取镜像(docker基本操作在第6部分)
  1. 使用国内安装好的集成环境,包括cuda+cudnn+tensorflow——gpu,示例是集成环境
    1. dockerhub地址
      1. https://hub.docker.com/r/ufoym/deepo#Quick-Start
    2. 选择合适的标签(我们使用的标签为:all-py36-jupyter等价于all-jupyter-py36)
      1. 利用docker安装tensorflow,并远程使用_第1张图片
    3. 执行命令
      1. sudo docker pull ufoym/deepo:all-py36-jupyter
      2. 利用docker安装tensorflow,并远程使用_第2张图片
  2. 使用英伟达提供的docker镜像,这里的镜像只安装了cuda,可能需要自己安装对应版本的python和tensorflow
    1. dockerhub地址
      1. https://hub.docker.com/r/nvidia/cuda
5.创建容器
  1. 测试容器内的cuda是否可以连通显卡驱动
    1. sudo docker run --runtime=nvidia --rm ufoym/deep0:all-py36-jupyter nvidia-smi
    2. 正常
      1. 利用docker安装tensorflow,并远程使用_第3张图片
    3. 报错
      1. 解决方案
        sudo mkdir -p /etc/systemd/system/docker.service.d
        sudo tee /etc/systemd/system/docker.service.d/override.conf <
        [Service]
        ExecStart=
        ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime
        EOF
        sudo systemctl daemon-reload
        sudo systemctl restart docker
        sudo tee /etc/docker/daemon.json <
        {
            "runtimes": {
                "nvidia": {
                    "path": "/usr/bin/nvidia-container-runtime",
                    "runtimeArgs": []
                }
            }
        }
        EOF
        sudo pkill -SIGHUP dockerd
        1. 原来是nvidia-docker 没有注册:docker: Error response from daemon: Unknown runtime specified nvidiawhile running nvidia docke 接着寻找如何注册: docker-engine-setup
        2. 执行以下命令进行注册
        3. 修改配置
        4.  再去开启镜像,done。
  2. 创建一个容器,并进去测试是否支持gpu和查看tensorflow版本
    1. sudo docker run --name py36 --runtime=nvidia -it -v /home/wjg/data:/data  ufoym/deepo:all-py36-jupyter   bash
    2. 利用docker安装tensorflow,并远程使用_第4张图片
    3. 可以看到是支持gpu的。版本为1.8.0
  3. 查看容器内的cuda版本
    1. ls /usr/local/ 可以看到为cuda-9.0
  4. 开启容器的ssh,可以远程连接此docker容器
    1. 以下命令在容器中执行
      1. apt-get update 
      2. apt-get install openssh-server
      3. cd /
      4. . /etc/init.d /ssh stop //停止ssh服务
      5. 修改ssh配置,允许root用户使用密码登录此容器
        1. vim /etc/ssh/sshd_config
        2. 注释掉这行: #PermitRootLogin prohibit-password 改行表示禁止root用户使用密码登录
        3. 添加一条语句: PermitRootLogin yes 表示允许root用户使用密码登录
      6. . /etc/init.d /ssh start //开启ssh
      7. 修改root密码
        1. passwd root
        2. 输入新的密码即可
    2. 在宿主机执行以下命令,将修改后的容器提交为镜像,一定要在容器运行的情况下,在宿主机执行命令
      1. docker commit -m " 描述信息" -a " 作者名" 容器ID 镜像名:标签
      2. 如docker commit -m "tf_gpu_1.8_ssh" -a "wjg"  7be82a146744 tfSSH:1.0
    3. 实例化新提交的镜像,并映射ssh的22号端口
      1. sudo docker run --name py36SS H --runtime=nvidia -it -v /home/wjg/data:/data  -p  42022:22  tfSSH:1.0  bash
    4. 此时就可以用使用宿主机的 ip:42022登录docker容器,也可以pycharm直接调用该容器的python解释器。
  5. ssh开机自启动
     
    1. 在容器的/root/.bashrc下添加如下shell脚本
    2. #========================start ssh==============
      result=`ps -ef | grep ssh | grep -v "grep"`
      pattern="ssh"
      if [ "$result" = "" ];then
          echo "ssh is not running, ssh is starting......."
          if [ -f /etc/init.d/ssh ];then
              cd /etc/init.d
               ./ssh start
          else
              echo "could not find ssh in /etc/init.d/ssh"
          fi
      else
          echo "ssh is running"
      fi

       

6.docker基本操作
  1. 镜像操作
  1. docker search 关键字   去dockerhub搜索相关镜像
  2. docker pull 镜像名:tag   拉取镜像,:tag是可选的,默认latest
  3. docker images 查看本地所有镜像
  4. docker rmi 镜像id 删除本地指定镜像
  5. 容器操作
  1. doker run   --name container-name   -d -it   image-name安装docker镜像形成容器,container-name:为容器起个名称,image-name:安装哪个镜像。
    1. -d 表示后台运行
    2. -p 主机端口:内部端口:主机端口映射到容器内部端口
    3. -i 以交互模式运行容器,通常与-t一起使用
    4. -t 分配一个伪终端
  2. docker ps 查看运行中的容器,加上-a,可以查看所有容器
  3. docker stop/start  container-name/ container-id 启动关闭容器
  4. dicker rm  container-id 删除容器
  5. docker logs  container-name/ container-id 容器日志
  6. docker exec -it  container-name/ container-id /bin/bash 以交互的方式进入一个正在运行的容器
  7. docker attach  container-id 以交互的方式进入一个正在运行的容器
  8. docker commit -m " 描述信息" -a " 作者名" 容器ID 镜像名:标签  使一个容器变成一个镜像(一定要在容器运行的情况下执行)
  9. Ctrl+P+Q 推出容器但不关闭容器
 
 
 

你可能感兴趣的:(机器学习,tensorflow,神经网络,深度学习)