目录
前言
前段时间进了一台四路Titan_x的工作站,这么好的丹炉好想要霸占它鸭,显然这是不存在的= - \ ,所以本着共产主义精神,要把它配成一台服务器,让大家能够共享强大的计算资源(づ。◕‿‿◕。)づ,当然还要互不干扰;不过作为这方面的小白,一脸蒙蔽呀。
所以这是一条弱鸡摸索之路,只是勉强满足了一下需求,仅供参考。
好像Docker才是目前实现GPU服务器的主流技术?(也有说LXC比Docker好的,Docker更适合部署,可能本小白对LXC食用方法还没那么深入= - =)为啥不用Docker实现呢,因为之前没找到详细的别人实现的贴子呀o(▼皿▼メ;)o,对没做好paper review就开始瞎j8搞,然后搞完发现别人有个更好的说的就是我这种。
写这篇帖子的时候才发现有用Docker实现GPU服务器的帖子,给大家开个传送门,可以去参考这位大佬的博客了。(仔细看了一眼大佬的发帖时间,emmmmmmmm我搞完才发的贴子啊。。。难怪没搜到(没错我就是一个重度拖延症患者o( ̄ヘ ̄o#))),之后有空也打算照着下面这个帖子重新搞一下,毕竟我没实现图形界面的说。。。好像写到这里就可以结束了呢。。。○| ̄|_
https://blog.youkuaiyun.com/qq_36396104/article/details/88769461
作为一只有尊严的弱鸡,还是要把该写的写完。。。
需求
作为一个多人公用的GPU服务器,主要有以下几个需求:
- 对显卡有良好的支持
- 可以自由配置环境,且不同环境间互不影响
- 可以支持多人同时使用
- 不直接登录服务器
- 能够自由的访问网络
为啥用LXC
首先LXC是啥?LXC全称为Linux Container即Linux的容器,是一种内核虚拟化的技术,是一种轻量级的虚拟化技术。可以理解为与C++中的namespaces相似;看到虚拟化第一个想到虚拟机,直接用虚拟机不就好了= - =,然而趟过坑的选手表示,虚拟机真的不好用鸭,传统的虚拟机主要存在的致命问题是:
- 显卡直通上支持并不是很好,配置过程中会有各种奇奇怪怪的问题;
- 显卡直通的坑趟完之后会发现,尼玛鸭这个虚拟机就霸占着这个显卡啦,那还搞啥服务器显卡拆下来一人拿一个回去好了(╯‵□′)╯︵┴─┴
LXC没有上述的问题,配置灵活,对显卡支持好,效率高看着很棒的样子。
LXC的宿主机配置
LXC被称为linux的容器,那么宿主机必然需要一个linux系统,我用的是ubuntu的16.04作为宿主机的系统,这里和windows没有半毛钱关系,充满了对windows的歧视。
安装
sudo apt install zfs
sudo apt -t -xenial-backports install lxd
sudo apt install bridge-utils
- 第一行安装的ZFS是一个用于管理物理硬盘,支持一些LXD的高级功能,可以去冗余存储的功能,但不是必选项;
- 第二行是安装LXD就是基于LXC的虚拟容器
- 第三行是用于搭建网桥的(虽然装了但是我后来没用,主要是可以实现不通过宿主机实现上网,如果有需要的话可以参考这篇博客实现一下https://blog.youkuaiyun.com/wangke0809/article/details/80235989,关于网桥这块后面就跳过了)
除此之外还需要安装一下显卡驱动,因为需要把nvidia-uvm挂载到容器上去(如果不挂载nvidia-uvm会导致在容器中使用nvidia-smi查看gpu是可以获得gpu信息的,但是调用pytorch中的torch.c