0%

实验室有一台高性能服务器是一种什么样的体验?

Linux 和 Windows 不同,它本来就是可以多用户同时登陆的操作系统。多用户同时通过 SSH 命令登陆服务器已经是司空见惯的事情,但同时登陆自己的桌面,却并不能直接达成。我们给 Ubuntu 配置了可以多用户同时登陆桌面使用而且互不干扰的功能。

介绍一下配置方法和对于实验室服务器使用方式的一点思考。

computers

实验室有一台高性能服务器是一种什么样的体验?

介绍一下 Ubuntu18.04 配置的方法和一点踩过的坑,当然 Windows 好像经过配置也可以多用户同时登陆,具体没有实践。

设备配置

实验室最近新配了一台服务器,配置很强,具体如下:

  • 2 枚至强 10 核处理器
  • 4 条三星 32G 内存
  • 4 块 24G 显存的 3090 显卡
  • 1 块 500G 的固态硬盘
  • 1 块 4T 的数据盘
  • 系统版本是 Ubuntu 18.04.5 Desktop

安装流程

换源

默认源下载的话速度比较慢,更换成清华或者自己学校的镜像源都可,这里以清华源举例

1
$ sudo gedit /etc/apt/sources.list

将原来的文件内容删掉,然后修改为以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

安装 xrdp

安装 xorgxrdp,这个软件支撑远程服务的运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 更新一下软件包的信息
$ sudo apt update
$ sudo apt install xorgxrdp
// 此时可能会遇到报错
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
xorgxrdp : 依赖: xorg-video-abi-23
依赖: xserver-xorg-core (>= 2:1.18.99.901)
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
// 安装 xserver-xorg-core 来更新版本
$ sudo apt install xserver-xorg-core
// 然后安装需要的其他组件
$ sudo apt-get install xorgxrdp xserver-xorg-input-all xorg xrdp dbus-x11 x11-xserver-utils

这个时候可以重启一下服务器(不重启应该也没问题)

修改配置

编辑配置文件 startwm.sh,这里设置远程用户登陆的时候使用的配置,类似于你 ssh 登陆 shell 时的全局配置文件 /etc/profile

1
$ sudo gedit /etc/xrdp/startwm.sh

把最后两行注释之后加入一行 gnome-session,改好之后文件最后几行如下

1
2
3
4
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession

gnome-session

开启端口并且重启服务

1
2
3
4
5
6
// 开启防火墙
$ sudo apt install ufw
$ sudo ufw allow 3389
// 重启服务
$ sudo ufw restart
$ sudo service xrdp restart

至此就完成了服务器在远程桌面的配置

添加用户

配置完成之后需要给同学创建对应用户,打开右上角用户设置,点击用户名,选择账户设置,然后点击解锁,输入密码即可。

unlock

点击添加用户,按需创建账号即可。

create-user

常用软件安装

由于是多人使用,仅仅安装了一下大家常用的软件,PyCharmClionGolandVSCodeChrome。安装完成之后,点击软件列表,每个用户都可以在「全部」中找到

1
2
3
4
5
$ sudo snap install clion --classic
$ sudo snap install goland --classic
$ sudo snap install pycharm-community --classic
$ sudo snap install chrome --classic
$ sudo snap install vscode --classic

连接方法

Windows

键盘按 Win + R 打开命令输入框,输入 mstsc,打开远程桌面,输入局域网内的 ip 地址,然后确认之后输入创建的账号密码即可连接
win-connect

Mac

官网文档 推荐去 App Store 安装,但是国内账号并不能搜索到这个应用,文末放了一个我找的安装包,还可以下载 Mac 远程桌面,微软官方 Beta 版本

安装软件之后,点击添加,输入 ip 地址即可(也可以直接创建自己的账号,以后连接就能不输入账号密码)。

mac-connect

遇到问题

图标缺失

在使用远程桌面的时候,出现了图标丢失和不一致的情况,具体情况如下。
lost-icon

Google 之后参考 xRDP – How to Fix Theme issues in Ubuntu 18.04 remote session 找到了修改主题的解决方法。

1
2
3
4
$ sudo add-apt-repository universe
$ sudo apt install gnome-tweak-tool
// 打开 tweak 设置主题等信息
$ gnome-tweaks

在弹出的界面进行设置图标等信息就行了
gnome-tweak

这样设置只是对当前用户生效,如果需要对所有用户修改,需要把/etc/xrdp/startwm.sh 前面加上一段配置,修改好之后文件前面一段如下

1
2
3
4
5
6
7
8
9
#!/bin/sh
# xrdp X session start script (c) 2015, 2017 mirabilos
# published under The MirOS Licence

# set themes
gnome-shell-extension-tool -e ubuntu-dock@ubuntu.com
gnome-shell-extension-tool -e ubuntu-appindicators@ubuntu.com
gsettings set org.gnome.desktop.interface gtk-theme 'Ambiance'
gsettings set org.gnome.desktop.interface icon-theme 'Humanity'

卡登陆界面

刚开始还不太熟悉的时候,出现了好几次循环卡登陆界面的情况,在实体服务器那儿登陆失败。

后来发现是因为远程连接在退出时没有注销登陆,直接关闭窗口可能会出现这样的情况

一点想法

安全问题

安全方面的问题简单提一下,我们在学校申请了固定 ip,我使用自己的域名解析,在校园网内访问十分方便。但是学校不提供公网访问,如果在校外的话需要申请 VPN,同时申请开放我们服务器的端口才能使用,操作相对繁琐

我想了能不能使用 frp 进行内网穿透,但是在 V2ex 上搜索对应的帖子,发现有朋友因为数据库弱密码等问题导致服务器直接被控制,感染勒索病毒等情况,鉴于多人使用服务器的情况,最后打消了这个念头。

效率问题

以前大家都是拿 U 盘拷贝代码和数据在服务器旁边跑实验,对于服务器的利用不够高效,如果有人正在使用,那么其他人需要等到别人跑完了实验才能抢占使用机会,而服务器本身就有 4 块 GPU,可以并行跑不同的任务。由于我对机器学习一窍不通,这里放个大佬们一起跑实验的占用率。
gpu-running

而大多数人都习惯了图形化界面的运行,如果要进行繁多的配置,对于大多数对 Linux 不太熟悉的同学来说成本较高,于是我们折腾了多用户同时使用远程桌面方法。

实验室里面多数人使用的 Windows 的系统,还有一些人使用的是 Mac 的系统,但是大家的学习内容很多时候需要使用 Linux 系统来进行实验,比如学 CPP 的同学在实践网络编程,大多数人没有台式机,使用自己的笔记本电脑,Windows 带的子系统还有一点点的功能缺失,使用虚拟机又会占用较多内存,所以直接在远程桌面上实践操作进行也是一种很不错的选择。

最佳实践

其实按照理想型的方式来说,直接 SSH 远程运行当然更好,更加节省资源。Jetbrain 家的 IDE 和 VSCode 早就支持了 SSH 连接的方式,设置对应的拷贝目录,将源文件拷贝到远程的服务器,然后进行编译运行,同时也可以断点调试,这可能是我所认为的最佳的实践方式。对于 Clion 如何远程编译调试,我之前也配置了一遍,在继续网络编程的学习之后会发新的文章总结。

权限管理

先说说存储管理,由于实验室人数不少,4T 的机械盘挂载在 /data 目录下,在跑机器学习实验的时候如果大家把数据都放到 /home 下,不用多久后面的人就没有办法继续跑实验了,所以得告诉大家,把数据扔到 /data 下面建立自己的文件夹。管理员可以用来查看使用容量较多的同学,在空间不足时提醒删除数据。(其实直接把项目和代码扔 /data/user 就好了)

1
2
3
4
// 查看每个人使用的空间
$ du -sh /home/*
// 查看使用超过 1G 的用户
$ du -sh /home/* | grep G

虽然已经配置成功,但是仔细的同学可能会发现上面我没有提到 Python 的环境。一般来说大家的项目使用的 python 版本和库都不尽相同,为了避免因为公共的 Python 环境改变而对已有的项目管理造成影响,尽管 Anaconda 可以区分不同的环境,但考虑过后还是没有统一安装,推荐大家自行安装 MiniConda 之后,在家目录下自行配置自己的环境。

我们担心有些不太熟悉的同学进行系统级的卸载和安装会弄坏已经有环境。之前出现过在旧服务器上可能是误操作而导致环境崩溃的情况,最后重装了系统。虽然我们已经使用了几周的时间,在权限管理方面现在也没有多少经验,对于大家基本上都需要软件,管理员进行安装,给大部分的同学普通用户的权限,给部分对 Linux 较为熟悉的同学管理员权限,有问题多多交流。

一点展望

​ 在实验室大佬王博士的探索下,完成了多用户远程桌面的配置,我们通过更优雅的方式使用服务器。其实文件在局域网路由器下的传输速度可能比普通的机械硬盘更快,但是很多同学可能不太熟悉 scp 以及 rsync 这样的简单命令。

我发起构建实验室内部的服务器使用文档,但是维护的同学可能会毕业,后续不知道有没有人继续修订。如何继续前行,总是困难很多,我想起了之前本科在点石团队,不过大家在实验室和公司待的时间一般更长。其实有想过可以每个月或者两周组织一次基本使用注意事项的交流培训课,但是也不知道大家的积极性如何,因为很多人可能并没有太大的兴趣,组织者也不一定有很大的动力,这些以后再看吧。

但是有想法不去做,就一定不会成功,就像王博花了一两天的时间搞定了远程桌面,行动起来也就成功了一半吧!

下载链接

下面的安装包是我从互联网上搜集而来,如果侵犯了您的权益,请尽快与我联系,我会将其删除,邮箱:cugxuan@gmail.com

听说好看的人都关注了我的公众号《泫言》