LXD安装
需求
实验室有两台配置不高,显卡还算可以的服务器,用来作为深度学习的实践和学习。但是实验室人多,隔离环境必不可少,但是服务器cpu和内存并不高,跑虚拟机太重太浪费,跑docker又不合适。于是有了LXD的方案。
需求列表:
- 不同用户之间不能相互影响
- 用户要能方便地访问自己的“虚拟机”
- 用户要有足够大的权限,能自由地安装程序,能自由地访问网络
- 用户不被允许直接操作宿主机
- 用户要能够使用 GPU
- 为满足这些需求,额外的开销应该小得可以忽略
- 管理员应该能轻松地添加新的用户
方案发现
前面说了虚拟机太重,在机器本身配置不高的情况下负担太重,而且显卡是1080&1080ti(两台机器分别为1080*2, 1080ti*2),并不支持显卡虚拟化,也就是说一张卡只能在在同一时间供给一个虚拟机,这显然太浪费了。
考虑过docker,但是docker毕竟是应用级的容器,单进程,文件系统冗余太多,操作久了整个docker文件非常庞大,并不适合将它当虚拟机用。
我们需要的是开销小的虚拟机或者说环境隔离,安全性并不重要,在搜索中发现了docker的前身LXC(Linux Container),一个系统级的容器,非常适合我们的需求,可以当作一个低开销的虚拟机。
至于LXC和Docker的区别,这里就不进行细表了,毕竟我也了解的不多,只能说LXC更符合我的需求。
互联网是强大的,需求明确的话大概率能够找到比较匹配的解决方案,找到一篇博客为实验室建立公用GPU服务器,可以说是和我的需求基本一样,完美符合我的要求,正准备着手开始干,又找到一篇LXD容器的博客可爱的 LXD 系统容器,发现LXD似乎对于新手更加友好,操作封装的更好,而且更新。意外之喜是LXD能够支持前两篇博客并没有提到的 nvidia.runtime,能够和nvidia docker一样很好的支持nvidia显卡,这样就规避了宿主机和容器的nvidia driver和cuda的版本必须一致的大坑(毕竟容器不是自己在用,环境并不可控)。
LXC & LXD 官网
闲话说完,下面开始环境搭建。
LXD环境安装
基础环境:
OS: Ubuntu 18.04 bionic
CPU: Intel Xeon E5-1620 v4 (可能是最垃圾的E5 v4,只有4个物理核心)
Mem: 16GB
GPU: 1080TI * 2
操作时间: 2018年10月31日
1. 换源 & 更新
装完系统后首先就是换源,基本是复制地址,然后粘贴到 /etc/apt/sources.list
覆盖原文件,具体操作请参考相应源网站,比较理想的源有:
学校的源有教育网出口,对于校园网用户是个最佳的选择
等等其他公司的镜像源
换源之后,更新一下,再安装必要的工具
sudo apt update
sudo apt upgrade
sudo apt install vim openssh-server
sudo apt install git gcc g++ make cmake build-essential curl
2. 安装驱动、CUDA和LXD等工具
18.04的apt源里集成了很多16.04里并没有的东西,nvidia驱动和cuda都可以通过apt安装,避开很多坑且操作更加简单,但是这里我们apt安装的驱动最高为390,cuda为9.1,比较尴尬,我们需要cuda9.2。这里,网上很多教程都是单独安装驱动再安装cuda,说是cuda带的驱动有问题,经测试,直接在官网下的cuda安装包直接安装配套的cuda和驱动在我的机器上是没有问题的,所以直接下载安装包安装,安装后重启。
# 卸载可能存在的nvidia驱动
sudo apt-get remove --purge nvidia*
#把 nouveau 驱动加入黑名单并禁用用 nouveau 内核模块
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
# 在文件 blacklist-nouveau.conf 中加入如下内容:
blacklist nouveau
options nouveau modeset=0
# 保存退出,执行
sudo update-initramfs -u
# 安装驱动,地址是官网给的cuda下载地址
wget https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers/cuda_9.2.148_396.37_linux https://developer.nvidia.com/compute/cuda/9.2/Prod2/patches/1/cuda_9.2.148.1_linux
# 下载cuda9.2的base包和patch包后,需要改名(文件不带后缀),并给执行权限
mv cuda_9.2.148.1_linux cuda_9.2.148.1_linux.run
mv cuda_9.2.148_396.37_linux cuda_9.2.148_396.37_linux.run
sudo chmod +x cuda_9.2.148_396.37_linux.run cuda_9.2.148.1_linux.run
# 安装cuda和打patch,一路默认选项,可以忽略提示
sudo ./cuda_9.2.148_396.37_linux.run
sudo ./cuda_9.2.148.1_linux.run
# 安装lxd
sudo apt install lxd lxd-client lxd-tools
# 安装nvidia-runtime-tools
# 添加源
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add -
distribution=