用dockers搭建深度学习服务器环境(ubuntu:18.04)

深度学习GPU服务器

文章目录

  • 深度学习GPU服务器
    • 0. 预备
    • 1. 安装docker
        • 2.安装深度学习虚拟docker环境
        • 3. jupyter镜像使用
        • 3.后续使用
        • 4.容器备份

说明:学校的高性能服务器,需要连接进行深度学习的实验,由于正常的要安装cuda和cudann,这两个装起来特别复杂,会有各种各样的问题,所以我们使用docker来安装现成的深度学习服务器

0. 预备

  • 查看服务器内核版本
    • uname -r
    • uname -a
  • 查看Linux版本
    • lsb_release -a

1. 安装docker

  1. apt换源,可以换成阿里的源

    • 讲原来的乌班图源换成阿里云的源,这样下载速度会更快一些
    • 参照博客
      • 其实就是修改了source.list
      • 本人已经在/etc/apt/下设置了备份文件为sources.list.bak
  2. 安装必要的一些系统工具

    sudo apt-get update

    sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

  3. 安装GPG证书

    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

  4. 写入软件源信息

    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

  5. 更新并安装docker

    sudo apt-get -y update

    sudo apt-get -y install docker-ce

2.安装深度学习虚拟docker环境

  1. 在我们安装好docker后,总是要在前面加上sudo,太难受

    • 建立docker组
      sudo groupadd docker
      将当前用户加入docker组
      sudo usermod -aG docker node

      将node用户添加到附件组docker中,也就是node不用脱离原来的组,添加到附件组中。同时-a和-G通常是一起用的,如果是-g就是换了主要用户组

  2. 配置国内镜像加速,这里选用中科大的源,在/etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)这里在下载普通镜像的时候会用到

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

  }
  1. 重新启动服务

    1. sudo systemctl daemon-reload
      sudo systemctl restart docker
  2. 安装nvidia docker2,这里是主要的步骤

    参考

    # If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
    ocker 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
    #一般如果之前没有装过nvidia-docker的话,可以直接从下面开始
    # Add the package repositories
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
    curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
    # Install nvidia-docker2 and reload the Docker daemon configuration
    sudo apt-get update && sudo apt-get install -y nvidia-docker2
    sudo pkill -SIGHUP dockerd
    # Test nvidia-smi with the latest official CUDA image
    docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi1234567891011121314
    
    

5.安装深度学习docker环境deepo

参考深度学习环境的安装

1. 当安装好以上的nVidia docker2后,运行

  `docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi`
  出现以下的界面的时候,默认安装成功了nuidia-docker

用dockers搭建深度学习服务器环境(ubuntu:18.04)_第1张图片
2. 安装深度学习环境

  我这里使用镜像是**deepo**一款咱们中国人做出来的深度学习镜像,包含了现在多数流行的深度学习框架,而且版本也很新,所以我这个小白第一次就选择了这个。 链接:[https://hub.docker.com/r/ufoym/deepo](https://hub.docker.com/r/ufoym/deepo) 只有安装好了前面的docker和nvidia-docker,这里就很方便了。 直接通过命令`docker pull ufoym/deepo`就可以把各种框架都下载下来。但是这样比较大,费时较长,所以教程里面也提供了值安装某一种框架的方式:

  > 如果你想要具体的某个版本的环境,直接在后面加上tag即可,在官网中有很详尽的对tag的描述。
  >> [deepo官网,来自dockerhub](https://hub.docker.com/r/ufoym/deepo)
  > > [github deepo](https://github.com/ufoym/deepo)
  > >
  > > [码云 deepo](https://gitee.com/mirrors/Deepo)

用dockers搭建深度学习服务器环境(ubuntu:18.04)_第2张图片

  执行以下命令可以拉取一个包含jupyter notebook的镜像

sudo docker pull ufoym/deepo:all-jupyter-py36-cu100

这个过程可能会笔记漫长,如果比较长,可以先终止,再重新运行

3. jupyter镜像使用

  1. docker images可以看到镜像已经创建完成

  2. 创建远程访问的容器

    1. sudo nvidia-docker run -it -p 7777:8888 --ipc=host -v /home/node/deepLearningNotebook:/data --name deepLearningNotebook  container-id
      

其中: - -it为直接进入交互式 - -p 7777:8888是把主机的7777端口映射到容器的8888端口 - -ipc=host可以让容器与主机共享内存 - 还可以加一个--name xxxxx给容器定义一个个性化名字 - -v /home/deepLearning/:/data可以讲主机上的/home/deepLearning地址挂载到容器里,并命名为/data文件夹,这样这个文件夹的内容可以在容器和主机之间共享了。因为容器一旦关闭,容器中的所有改动都会清除,所以这样挂载一个地址可以吧容器内的数据保存到本地。 - 90be7604e476则是你安装的jupyter镜像的id,可以在刚刚docker images命令后面查看,当然你也可以直接写全名ufoym/deepo:all-py36-jupyter

  1. 启动jupyter notebook

    jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token= --notebook-dir='/data'
    

我更偏向于写成一个脚本

#!/bin/bash
jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token=abc --notebook-dir='/data'

有时候我们想让jupyter服务后台一直运行

#!/bin/bash
nohup jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token=abc --notebook-dir='/data' > jupyter.log 2>&1 &                                                                                                                         

3.后续使用

  • 让jupyter 服务器一直在后台运行

    • 后台运行csdn博客

      nohup jupyter notebook --allow-root > jupyter.log 2>&1 &

  • 终止进程

    • ps -a可以显示这个进程的pid
    • kill -9 pid 终止进程
    • 另外,ps -aux | grep jupyter可以查看筛选
  • docker容器使用的主要命令

    • docker服务的停止和重启
      • docker stop container-id
      • docker restart container-id
    • 创建某个镜像的容器,it是为了马上进入交互模式
      • docker run -it some-image
    • 列出当前运行的容器
      • docker ps
    • 列出所有的容器,包括在运行的和不在运行的
      • docker ps -a
    • 删除某个容器
      • docker rm container-id(或者是名字)
    • 启动某个容器
      • docker start -i container-id(或者是名字,i是为了进入交互模式)
      • 或者docker attach container-id
    • 进入交互模式后推出交互模式
      • ctrl+p+q

4.容器备份

参考自csdn博客

之前好不容易配置好的环境,突然被学校服务器要重装!?怎么办? 你想到的一定是:能不能把配置好的环境备份一份,后面直接重新加载进来?

方法也很简单: 一般情况下,我们想备份的是容器,因为我们具体的配置都是在容器中进行的,而镜像一般都是直接在网上下载的,我们不做什么改动。

先通过docker ps或者docker ps -a来查看你想备份的容器的id, 然后通过:

docker commit -p [your-container-id] [your-backup-name]

来将id为your-container-id的容器创建成一个镜像快照。

接着,你通过docker images就可以查看到刚刚创建好的镜像快照了。 然后,通过:

docker save -o [path-you-want-to-save/your-backup-name.tar]] [your-backup-name]

把那个镜像打包成tar文件,保存到服务器上。 后面就可以把服务器上打包好的tar文件,下载到本地了。

恢复: docker load -i your-backup-name.tar docker run -d -p 80:80 your-backup-name

本文参考
https://zhuanlan.zhihu.com/p/64493662?utm_source=wechat_timeline
https://blog.csdn.net/zhangjiahao14/article/details/80554616

你可能感兴趣的:(深度学习入门,docker,深度学习)