服务器只有一台,大家天天用sudo改环境最后炸了?可以采用Docker,在容器里面爱装啥装啥。

目录

深度学习服务器环境配置

安装Ubuntu Server 16.04。这一步骤网上教程很多,简略带过。

连接服务器、配置用户信息、SSH密钥登录、防火墙端口、Ubuntu软件源等。

安装显卡驱动,Docker CE 19.03(已支持GPU,无需再安装Nvidia Docker),并配置用户Docker权限。

Docker容器深度学习环境配置

使用指南

连接服务器与文件传输

容器创建与使用


深度学习服务器环境配置

  • 安装Ubuntu Server 16.04。这一步骤网上教程很多,简略带过。

1.下载Ubuntu16的iso镜像,建议server版。

2.用UltraISO把镜像加载完烧录到U盘里面。

3.插U盘,进BIOS设置优先U盘启动,进入Ubuntu安装环节。

4.完成各项配置并完成安装。

  • 连接服务器、配置用户信息、SSH密钥登录、防火墙端口、Ubuntu软件源等。

1.连接服务器。

推荐使用MobaXterm。新建Session,设置好IP,以及安装系统配置的用户信息,端口默认22。

2.添加需要的用户并配置信息。

adduser $USER

3.登入用户并设置SSH密钥对。

ssh-keygen -t rsa
touch .ssh/authorized_keys
cat .ssh/id_rsa.pub >> .ssh/authorized_keys

4.开启SSH密钥登录,关闭密码登录,并更换SSH端口。

修改SSH的配置文件/etc/ssh/sshd_config

找到

PasswordAuthentication yes

加上#注释或改为no以关闭密码登录。

找到:

Port 22

修改端口。

5.防火墙设置。

使用Ubuntu的ufw设置防火墙,将新端口添加进去,并启动防火墙。后续看使用情况用ufw对端口进行设置。

sudo ufw allow xxxx

6.之后重启SSH服务,重新连接。IP不变,需要修改用户(只需要用户名,不需要密码),端口,以及密钥。

重启SSH服务:

sudo /etc/init.d/ssh restart

7.重新登录后,切换root,修改ubuntu软件源。切换root后直接复制粘贴即可(清华源)。

touch /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main multiverse restricted universe' >> /root/untitled.txt
cp /root/untitled.txt /etc/apt/sources.list
apt-get update
apt-get upgrade
  • 安装显卡驱动,Docker CE 19.03(已支持GPU,无需再安装Nvidia Docker),并配置用户Docker权限。

1.下载对应显卡和系统的Nvidia驱动并进行安装。网上教程较多,不予赘述,本文采用的是最新驱动。

2.安装Docker CE 19.03与NVIDIA Docker,该版本Docker已支持GPU,无需再安装Nvidia Docker 2。教程可参考清华镜像安装(比较快)以及参考官网和Nvidia Docker以及该教程。

# Add the package repositories
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ 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 && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

3.创建Docker用户组并配置用户Docker权限。

groupadd docker
gpasswd -a $USER docker

4.拉取nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04镜像,其他支持cuda的镜像可以在这里找到。

docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04
  • Docker容器深度学习环境配置

配置到这里已经可以让用户自行拉取镜像创建容器,并在容器中自定义环境。为了方便多用户更简易使用,最好对初始镜像进行一定配置,再重新做成镜像给每个用户使用。本文在每个容器中安装anaconda,方便用户在个人的容器内进行自定义。

1.根据拉取的镜像创建容器。Docker命令可查。

docker images
docker run --name lab403 --gpus all -itd nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04

2.下载Anaconda安装包,并使用docker cp命令拷入容器内/root/目录中以便后续安装。拷入后使用docker exec -it lab403 /bin/bash进入容器。

docker cp data/Anaconda3-2019.07-Linux-x86_64.sh lab403:/root/
docker exec -it lab403 /bin/bash

docker exec -it lab403 /bin/bash是常用进入容器的命令。这里有个检查镜像是否调用CUDA的方法,进入镜像后通过nvidia -smi以及 nvcc -V查看GPU驱动和CUDA版本。

3.进入镜像后,修改源并更新软件,同装完系统的更新源操作。

如果该步骤出现了其他源(developer.download.nvidia.com),请删除/etc/apt/sources.list.d/中的对应文件。

touch /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main multiverse restricted universe' >> /root/untitled.txt
echo 'deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main multiverse restricted universe' >> /root/untitled.txt
echo 'deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main multiverse restricted universe' >> /root/untitled.txt
cp /root/untitled.txt /etc/apt/sources.list
apt-get update
apt-get upgrade

4.修改pip源(清华源)。

mkdir /root/.pip
touch /root/.pip/pip.conf
echo '[global]' >> /root/.pip/pip.conf
echo 'index-url = https://pypi.tuna.tsinghua.edu.cn/simple' >> /root/.pip/pip.conf
echo '[install]' >> /root/.pip/pip.conf
echo 'trusted-host=mirrors.aliyun.com' >> /root/.pip/pip.conf

5.安装Anaconda。本文时间关系没有更换Anaconda源并进行其他配置,详细可以参考这里的Anaconda教程。

安装Anaconda,一路yes,装完exit,重新使用docker exec -it lab403 /bin/bash命令进入容器的bash

chmod +x /root/Anaconda3-2019.07-Linux-x86_64.sh && /root/Anaconda3-2019.07-Linux-x86_64.sh

6.使用Anaconda创建新的虚拟环境。

conda create -n py3 python=3.7
conda activate py3

7.安装常用深度学习环境包。这里主要用pip安装,笔者对anaconda不熟悉,也可以用anaconda直接进行包安装,可以参考上面的anaconda教程,进行源配置与包安装。

pip install numpy tensorflow-gpu keras torch torchvision scikit-learn Scipy Pydot Matplotlib Pandas XGBoost LightGBM CatBoost Eli5 NLTK SpaCy Gensim Scrapy pydicom opencv-python scikit-image SimpleITK graphviz

这里也可以加上--no-cache-dir 的参数,后续不需要再清理缓存。若网络条件不好,建议用上述命令。安装完分别对tensorflow,pytorch测试是否正常调用GPU,参考该教程以及该教程。

tf2.0的GPU测试如下

import tensorflow as tf
version = tf.__version__
gpu_ok = tf.test.is_gpu_available()
print("tf version:",version,"\nuse GPU",gpu_ok)

tf测试GPU成功的话应该是显示

tf version: 2.0.0
use GPU True

pytorch测试为

import torch
flag = torch.cuda.is_available()
print(flag)ngpu= 1
# Decide which device we want to run on
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print(device)
print(torch.cuda.get_device_name(0))
print(torch.rand(3,3).cuda())

成功的结果为

True
cuda:0
GeForce GTX 1070
tensor([[0.0100, 0.9075, 0.7111],[0.6928, 0.5959, 0.4963],[0.1099, 0.2922, 0.8152]], device='cuda:0')

8.整理完所有需要的包,可以将容器重新打包成镜像了。

如果服务器磁盘资源有限,可以对无用的包和文件进行清理,减小镜像体积。

rm /root/Anaconda3-2019.07-Linux-x86_64.sh
conda clean -p      # 删除没有用的包 --packages
conda clean -t      # 删除tar打包 --tarballs
conda clean -y -all # 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包)
rm -rf ~/.cache/pip/* #删除pip缓存

之后需要先关闭容器,可以exit后,使用docker stop lab403关闭容器的后台运行。之后使用docker ps -a查看容器的Container ID。并使用docker commit对其进行发布。-m为消息,-a为作者,后接容器ID与镜像名称。

docker commit -m="deep learning environment has been successfully built" -a="root" b43837545aa1 lab403

至此环境配置全部完成,后续可以分发密钥让每个用户从新的镜像进行容器创建并使用。

使用指南

docker的使用指南有很多,基本概念需要进行简单的学习与了解。容器可以简单理解为一个新的linux系统,在容器内的任意操作都不会影响到外部环境。每个用户可以按自己的需求定制容器。

连接服务器与文件传输

用户获得密钥后,按前文所述SSH连接教程连接至服务器。

使用MobaXterm可以通过sftp实现与本地的文件传输,还能在命令行中光标拖选后左键点击完成复制,右键直接粘贴等。MobaXterm提供了很多便捷的方法和工具,建议进行学习使用,能提高很多工作效率。

容器创建与使用

切记环境配置不易,不要再动机器的默认环境了,所有操作自行去容器内操作。

登录完成后,通过docker images查看现有镜像。

使用docker run来创建容器,这里建议多学习docker使用手册,上文中也有链接。其中-p为指定端口映射(有需要使用的话记得服务器防火墙也要打开对应端口),-v为指定目录共享(支持多目录映射)。

docker run --name test --gpus all -p 1088:80 -v /home/gaoqiang/data:/data -itd lab403:latest

之后日常使用方式建议采用screen + docker exec的方式进行方便的后台管理。访问docker前可以先开启screen,在screen内使用docker exec命令开启一个bash,第一次打开bash后需要记得使用conda activate切换anaconda的环境。

screen -R test
docker exec -it test /bin/bash
conda activate py3

注意环境已经配置在py3中,所以碰到问题第一时间检查环境是否正确。

后续进行操作,需要退出可以exit直接关闭screen。更多时候需要后台挂起bash,在screen内快速按顺序同时按下Ctrl A D三个键即可。这样就能将screen挂起在后台,其中打开容器的bash也仍在后台运行。

再重新打开只需再次使用screen -R test即可。使用screen -ls可以查看已开启哪些screen。

screen也是非常便捷的多终端管理工具,可以跨终端进行后台程序管理,也强烈建议学习。


教程主要内容介绍完毕,更多的使用如容器开放web端口使用,anaconda配置环境等笔者也在学习,总之用户也需要不断的学习这些工具的教程与使用。希望读者能有所收获。

Ubuntu16+Docker19.03+CUDA10+Tensorflow2.0+Pyorch 多用户深度学习服务器环境配置与使用指南相关推荐

  1. tesla p100 linux,Ubuntu16.04深度学习开发环境配置(TeslaP100+cuda9.0+tensorflow)

    Ubuntu16.04深度学习开发环境配置(TeslaP100+cuda9.0+tensorflow) 1. 显卡驱动安装 选择对应显卡型号的驱动下载 https://www.nvidia.com/D ...

  2. 深度学习主机环境配置: Ubuntu16.04+GeForce GTX 1080+TensorFlow

    http://f.dataguru.cn/thread-660774-1-1.html 发表于 2016-7-20 09:04 | 只看该作者 |倒序浏览 |阅读模式 深度学习主机环境配置: Ubun ...

  3. Ubuntu 18.04 server配置多用户深度学习服务器

    Ubuntu 18.04 server配置多用户深度学习服务器 1 重装系统 2 安装图形界面 2.1 更改Ubuntu 镜像源 2.2 安装图形界面 2.3安装gcc , make等库 3 安装Nv ...

  4. 【物体检测快速入门系列 | 03】Windows部署Docker GPU深度学习开发环境

    这是机器未来的第3篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/124815912 1. 概述 在<物体检测快速入门 ...

  5. Ubuntu18.04+CUDA10.2 深度学习开发环境配置指南

    深度学习 Author:louwill Machine Learning Lab 搞深度学习环境永远是第一步.笔者之前也写过配置的两篇文章,但时间久远,目前来看版本已经过旧了.之前两篇参考: 深度学习 ...

  6. 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080/980ti+CUDA8.0

    8月份的时候折腾tensorflow,在ubuntu上安装nvdia显卡驱动一直有问题,没有折腾好,今天看到这篇文章,起到了一定的帮助,记录一下. bing上搜索关键字,一定要搜索 ubuntu 16 ...

  7. gtx1080 matlab,深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0

    这个系列写了好几篇文章,这是相关文章的索引,仅供参考: 接上文<深度学习主机攒机小记>,这台GTX1080主机准备好之后,就是配置深度学习环境了,这里选择了比较熟悉Ubuntu系统,不过是 ...

  8. 完整的Ubuntu18.04深度学习GPU环境配置,英伟达显卡驱动安装、cuda9.0安装、cudnn的安装、anaconda安装

    文章目录 1.英伟达显卡驱动安装 2.cuda9.0安装 3.cudnn的安装 4.anaconda安装 5.安装TensorFlow和Keras 安装 参考:https://blog.csdn.ne ...

  9. 深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080i+CUDA8.0+CUDDN6

    一 硬件配置 配置 型号 数量 主板 华硕Z10PE-D8 WS*1 内存 三星 2400 ECC-R 16G* 4 CPU 2673 V3 (2.4主频 12核24线程)* 2 风扇 金钱豹10热管 ...

最新文章

  1. NVIDIA Jetson Xavier NX使用SD镜像刷机流程
  2. ajax框架dwr开发
  3. Amazon上最畅销的「操作系统书」有哪些?
  4. java定义private_java9开始——接口中可以定义private私有方法
  5. 用C#编写一个抓网页的应用程序
  6. java integer 不变模式_《JAVA与模式》之不变模式
  7. 让孩子见世面,到底有多重要
  8. BAD packet signature 18245
  9. JavaScript中的(内置)方式来检查字符串是否为有效数字
  10. java 多线程下载_使用java实现http多线程下载
  11. 覆写和重载 虚方法与抽象方法 (转)
  12. 【自动化__持续集成】___java___猜数字
  13. 红米note7android10,红米Note7 Pro 安卓10.0原生刷机包(最新固件升级包lineage17.1)
  14. STM8S003F3 内部flash调试
  15. SOLIDWORKS启动时出现脚本错误问题
  16. 【解决方案】如何通过国标GB28181协议视频平台EasyGBS搭建安监局危化品可视化监控平台?
  17. HDU 1885 Key Task 国家压缩+搜索
  18. 价值链-商业模式名词解释11
  19. PCIe转PXI 套件 PXI远程控制器
  20. Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包

热门文章

  1. Matlab编程技巧:打开模型时加载数据字典
  2. 深度学习之30分钟快速入门PyTorch(附学习资源推荐)
  3. Matlab学生账号申请
  4. 全程pwm调光_OLED全程DC调光相比LCD全程高频PWM哪个对眼睛伤害小些?
  5. 微信小程序 - 实现验证码组件
  6. 教你用inskeep成为ins存图高手~
  7. 双十二电容笔啥牌子好?十大电容笔知名品牌
  8. 七年磨一剑!苹果王炸产品Vision Pro诞生,未来已来
  9. *******系统监控技术选型
  10. Vue3 -- PDF展示、添加签名(带笔锋)、导出