从零开始配集群

在去年十月闯祸(这又是一个故事)之后,我们把自己的几台机器从超算搬到了校园网环境下,用 JumpServer 配了跳板机,并重新配置了集群的系统环境。然而一年过去,大家关于集群搭建有了新的想法和技巧。正好招了新队员进队,接下来记录一些和新队员一起重新配集群环境的过程。

系统选择:Debian11

长期以来,超算队都使用 CentOS7 作为主要的技术栈,可以和超算中心的大部分集群共享类似的使用环境。作为 RHEL 的马甲,CentOS 有相近的稳定性,并且可以白嫖来自 Red Hat 的补丁。然而长期使用 CentOS 后也积累了很多不便:

  • CentOS 7(发布于 2009 年)自带源的软件包过少。
    • 引入了三方源之后的 CentOS 还能被称作稳定吗?
  • CentOS 7 自带源中的很多软件版本过低。
    • 例如,默认的 [email protected] 已经不能满足 cuda@11: 对 gcc@6: 的要求了。
  • 作为 CentOS 7 的继任者,CentOS 8 将在 2021-12-31 之后停止维护
    • CentOS 7 反而会支持到 2024-06-30。
  • 作为代替的 CentOS Stream 8 也只支持到 2024-05-31,并且从 RHEL 的下游转移到了 RHEL 的上游。
    • 一个不再那么稳定的 CentOS,还会有我们之前选择它的优势吗?

这使得我们将目光投向其它系统。最终选择 Debian11 作为接下来几年大家公用的系统环境,因为如下的优点:

  • 足够新。
    • 发布在本文时间线的不到一个月之前(2021-08-14),并将持续支持至 2026 年。
    • 使用 Linux 5.10 LTS 作为内核。
    • Debian11 是第一个提供支持 exFAT 文件系统的 Linux 内核的发行版本,且它默认使用该实现挂载 exFAT 文件系统。
  • 足够强。
    • Debian 使用 apt 包管理器,软件足够多,支持多版本安装,并且可以用于安装驱动。
    • CentOS 的 rpm 安装包可以转换为 deb 安装包。
  • 足够快。
    • 最小化安装的 Debian 系统占用小,优于常见 Linux 发行版。
    • Debian 是为数不多的能在轻量应用服务器上流畅运行的系统。
  • 足够轻。
    • Debian11 的联网安装包仅有约 377MB,优于常见 Linux 发行版。
  • 足够稳。
    • Debian stable 同样具有高稳定性,Google、Bytedance 等企业内部均使用 Debian。

环境配置

这个 Dockerfile 给出了在全新 debian:11 上配置一个可用的 spack 的过程。

当前计划是,除驱动和 spack 的依赖均使用系统自带的包管理器 apt 安装,所有的软件使用非管理员账户 scc 通过 spack 源码安装,从而保证整个系统环境的整洁。

给包管理器加上 non-free 软件源(为了 nvidia-driver)。

另一台机器

挂载数据盘并设置开机启动

mkdir -p /mnt/sdb1
mount /dev/sdb1 /mnt/sdb1
echo '/dev/sdb1 /mnt/sdb1 ext4 defaults 0 2' | sudo tee -a /etc/fstab

新用户加组

echo 'ADD_EXTRA_GROUPS=1' | sudo tee -a /etc/adduser.conf
echo 'EXTRA_GROUPS=docker' | sudo tee -a /etc/adduser.conf
echo 'EXTRA_GROUPS=video' | sudo tee -a /etc/adduser.conf # for rocm
echo 'EXTRA_GROUPS=render' | sudo tee -a /etc/adduser.conf # for rocm

创建特权账户

adduser

创建一个账户,用于创建各自的账号。

adduser adduser
# 把下面内容加到最后
# adduser ALL=(ALL) /usr/sbin/adduser
visudo

yum

创建一个账号用于 yum。

adduser yum
# 把下面内容加到最后
# yum ALL=(ALL) /usr/bin/yum
visudo

安装必要软件

amdgpu 驱动

yum install kernel-headers-`uname -r` kernel-devel-`uname -r`
yum install wget
yum install epel-release
yum install centos-release-scl #Only for CentOS 7.9
yum install devtoolset-7
source scl_source enable devtoolset-7
echo '[amdgpu]
name=amdgpu
baseurl=https://repo.radeon.com/amdgpu/latest/rhel/7.9/main/x86_64
enabled=1
gpgcheck=1
gpgkey=https://repo.radeon.com/rocm/rocm.gpg.key' | sudo tee /etc/yum.repos.d/amdgpu.repo
yum clean all
yum install amdgpu-dkms
reboot

docker

yum -y install docker-io

spack 依赖

yum install \
    gcc gcc-c++ python3 \
    make patch patchelf bash \
    tar gzip unzip bzip2 xz \
    file gnupg2 git