从零开始配集群

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

系统选择:Debian11

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

  • CentOS 7(发布于 2009 年)自带源的软件包过少。
    • 引入了三方源之后的 CentOS 还能被称作稳定吗?
  • CentOS 7 自带源中的很多软件版本过低。
    • 例如,默认的 gcc@4.8.5 已经不能满足 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。

环境配置

施工中

当前计划是,除驱动和 spack 的依赖使用 apt 安装,所有的软件使用非管理员账户 scc 通过 spack 或源码安装,并提供 module 等环境管理系统,从而保证整个系统环境的轻量。

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

echo 'deb http://deb.debian.org/debian bullseye contrib non-free' | sudo tee -a /etc/apt/sources.list.d/debian.extend.list
echo 'deb http://deb.debian.org/debian bullseye-updates contrib non-free' | sudo tee -a /etc/apt/sources.list.d/debian.extend.list
echo 'deb http://security.debian.org/debian-security bullseye-security contrib non-free' | sudo tee -a /etc/apt/sources.list.d/debian.extend.list
echo 'deb http://ftp.debian.org/debian bullseye-backports contrib non-free' | sudo tee -a /etc/apt/sources.list.d/debian.extend.list
sudo apt update -y
sudo apt upgrade -y

sudo apt install -y docker.io

# 显卡驱动,通过apt安装
sudo apt install -y nvidia-driver

# spack 依赖
# python3-dev 包含 python 头文件,以便源码构建 clingo 依赖
# 使用 clang-9 作为系统编译器,减少与spack的冲突
# 使用 curl 代替 wget
sudo apt install -y \
    python3 python3-dev \
    clang-9 \
    make patch patchelf bash \
    tar gzip unzip bzip2 xz-utils \
    file gnupg2 git curl