赞
踩
本文创作历时7个月,之前只在个人blog上公开,一直处于完善过程。目前该项目已经进入稳定阶段,因此打算向更多读者公开,建议先点赞收藏后食用
对于团队开发而言,资源共享是是提高生产效率的有效手段之一,尤其是在当今国际贸易制裁下,高端服务器资源公用将会成为常态。如何合理、高效地利用服务器资源,是本项目要解决的问题。
在多人共用一台GPU服务器的情况下,为了满足不同用户的使用方式和操作习惯特点,同时避免某些用户运行损害系统的命令导致整个服务器宕机,搭建一个支持多人同时在线、资源良好隔离且自愈性强的服务器平台成为了一个重要需求。
多人在线服务器有多种方案,其中一个较为推荐的解决方案是通过虚拟化容器技术来隔离每个人的操作系统,并通过共享文件夹的形式达到多人共用的数据资源。
该仓库包含了关于super-server-platform的搭建、升级记录和使用建议,服务器搭建和升级过程中涉及到的材料将会被包含到这个仓库中,方便回溯和更新。
针对多人服务器平台通常有以下几种方案:
这种方案简单,只需要开放对应端口即可通过ssh和vnc实现远程操控。然而无法实现资源的隔离,例如无法按需分配GPU资源,无法个性化每个用户的开发环境,另外,某个用户运行损害系统的命令可能会导致整个系统宕机,影响其它用户使用。
该方案可以实现各个用户的开发环境隔离,同时各个用户的系统之间不会相互影响。 虚拟机包含完整的操作系统和应用程序,因此通常需要更多的内存和存储资源。虚拟机的引入会带来性能损耗,且硬件只能独占,不能共享,资源利用率低。
Docker容器提供了一个隔离的开发环境,在不同容器中的用户资源不会受到影响,同时由于容器共享主机操作系统的内核,因此它们更轻量级且占用更少的资源,使用容器几乎不会带来性能损失。虽然是容器化的环境,但Docker是应用级容器,他更偏向于PaaS平台,还是没办法做到让每个用户拥有一个独立的操作系统。
LXC容器属于系统级虚拟化方案(LXD vs Docker),用在单个主机上运行多个隔离的Linux系统容器,例如同时运行Ubuntu和CentOS,各个系统公用一套Linux内核,并且具有完全独立的开发环境。LXC是基于Linux内核的容器技术,与Linux操作系统更加天然集成,提供更好的性能。但LXC也有缺点:如无法有效支持跨主机之间的容器迁移、管理复杂等。而LXD很好地解决了这些问题。
LXD底层也是使用LXC技术,并可以提供更多灵活性和功能。LXD支持Web图形用户界面,使得容器的管理变得更加直观和易用。因此LXD可以视作LXC的升级版。LXD的管理命令和LXC的管理命令大多相同。
基于LXD容器平台的核心是LXC,它允许建立多个系统级别的容器,每个容器即是一个完整的Linux操作系统。一个容器既可以支持多个用户共享,也可以一个用户独享。每个容器通过网络与共享文件夹的方式与宿主机进行通讯,每个容器可以独享一个IP地址。LXD支持Web图形用户界面,且兼容所有LXC的命令操作。通过配置LXC容器,可以实现对不同容器进行硬件资源(例如GPU)分配。宿主机系统和LXC容器系统共享一个Linux内核,相同内核的不同Linux发行版本可以同时运行。
具体服务器配置细节参考文末链接,这里不再详细赘述,以下简要介绍该平台使用方案。
LXD支持多个用户,这里配置了Common-Server作为公共使用的容器平台,可以供所有用户临时使用。
对于需要长期使用的用户,建议创建独立的容器,并且根据自己需要配置个性化的开发环境,具体创建方法请参考。
这里采用了独立IP配置,因此每个容器在局域网下都有具有独立的IP。
(base) user@user-Super-Server:~$ sudo lxc list
+---------------+---------+-----------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+---------------+---------+-----------------------+------+------------+-----------+
| Common-Server | RUNNING | 192.168.31.90 (eth0) | | PERSISTENT | 0 |
+---------------+---------+-----------------------+------+------------+-----------+
| user1-server | RUNNING | 192.168.31.xxx (eth0) | | PERSISTENT | 1 |
+---------------+---------+-----------------------+------+------------+-----------+
| user2-server | RUNNING | 192.168.31.xxx (eth0) | | PERSISTENT | 1 |
+---------------+---------+-----------------------+------+------------+-----------+
| user3-server | RUNNING | 192.168.31.xxx (eth0) | | PERSISTENT | 0 |
+---------------+---------+-----------------------+------+------------+-----------+
如图,在宿主机上可存在4个4090GPU,通过对容器进行配置,可以指定宿主机上的GPU2和GPU3映射到容器系统的GPU0和GPU1上,并且其它的GPU资源对于容器是不可见的,因此可以实现良好的资源隔离。
(base) user@user-Super-Server:~$ nvidia-smi
Mon Jul 8 23:02:38 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.146.02 Driver Version: 535.146.02 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。