人工智能高性能计算集群建设

计算集群涉及的内容较多,建设过程也较为复杂,但在人工智能盛行的今天又尤为重要。这篇文章将从基础开始搭建计算集群(这里不涉及虚拟化和云计算内容),仅供大家参考,若有不当敬请留言。

目录

1. 服务器规划

1.1. 规划服务器用途

1.2. 查看操作系统类型

1.3. 配置主机名与IP地址映射

1.4. 设置无密码访问

2. 共享存储配置

2.1. 基于NFS

2.1.1 存储节点

2.1.2 存储节点

3. 通用配置

3.1. 创建全局账号

3.2. 换成阿里云镜像

3.3. 安装epel-release

3.4. 配置防火墙

3.5. 设置时间同步 

3.5.1. 服务器端

3.5.2. 客户端

 3.6. 安装数据库

3.6.1. 服务端

3.6.1.1. 安装服务

3.6.1.2. 重启服务设置密码

3.6.1.3. 修改配置

3.6.2. 计算节点

3.7. 计算设备

4. LDAP统一用户认证

4.1. 认证原理介绍

4.2. 服务端配置

4.2.1. 安装OpenLDAP软件和依赖

4.2.2. 修改OpenLDAP默认参数

4.2.3. 配置OpenLDAP数据库

 4.2.4. 设置OpenLDAP管理员密码

4.2.5. 导入OpenLDAP全部schema

 4.2.6. 创建基本管理员和用户信息

4.2.7. 测试域名

4.3. 客户端配置

4.3.1. 安装软件

4.3.2. 修改SSH配置

4.3.3. 修改ldap配置

4.3.4. 可视化配置

4.3.5. 验证配置sssd.conf

​​​​​​​4.3.6. 使用相应的openldap 认证

​​​​​​​4.3.7. 重启和设置服务

​​​​​​​4.3.8. 测试openldap连接

​​​​​​​4.4. 授权用户

4.4.1. 授权脚本

4.4.2. 编辑授权脚本

5. 配置SLURM系统 

5.1. Munge安装与配置

​​​​​​​5.1.1. Munge安装

​​​​​​​5.1.2. 创建munge.key

​​​​​​​5.1.3. 配置与启动Munge

5.2. SLURM安装

5.2.1. 直接安装SLURM依赖

5.2.2. SLURM存储配置

​​​​​​​5.2.3. SLURM安装方式一:包安装

5.3.3. SLURM安装方式二:源码安装

5.3.3.1. 下载源码

5.3.3.2. ​​​​​​​配置(重点注意)

​​​​​​​5.3.3.3. 编译与安装

5.3. SLURM配置与启动

5.3.1. 环境配置

5.3.2. 文件配置

​​​​​​​5.3.2.1. slurmdbd.conf

​​​​​​​5.3.2.2. node.conf

​​​​​​​5.3.2.3. partition.conf

​​​​​​​5.3.2.4. gres.conf

​​​​​​​5.3.2.5. slurm.conf

​​​​​​​5.3.3. 配置与启动服务


1. 服务器规划

“凡事预则立,不预则废”,建设人工智能高性能计算集群之前,需要对现有服务器的数量、类型、架构、操作系统类型、存储等信息有所了解;其次需要规划哪些服务器作为登录节点,哪些服务器用于部署用户统一认证服务、时间服务、授权服务、数据服务、控制服务、计算服务等。

        目前针对3台分布式存储服务器,10台计算服务器,进行建设计算集群。(这里的存储也可以选择任何一台服务器作为共享存储进行设置)

1.1. 规划服务器用途

ostore1 为NFS服务(ParaStor300S01),仅提供存储,不参与计算等服务。

host10 为登录节点

host1 为用户统一认证服务(OpenLDAP)

host1 为时间服务(NTP)

host1 为授权服务(Munge)

host1、host2 为控制服务(slurmctld)

host1 为数据服务和数据库服务(slurmdbd, Maraiadb)

host[1-10] 均为计算服务(slurmd) 

1.2. 查看操作系统类型

cat /etc/redhat-release

 

由于10台计算服务器系统均基于 Red Hat 系统,所有使用上述命令。如果是其他类型的操作系统可以使用下面的命令:

cat /etc/os-release

1.3. 配置主机名与IP地址映射

设置每台服务器的hostname

hostnamectl set-hostname <主机名>, 这里以host1为例:

hostnamectl set-hostname host1

在每台服务器的/etc/hosts文件中添加主机名与IP地址映射,便于系统在进行名称解析时,直接读取该文件中设置的IP地址和主机名的对应记录。

​​vim /etc/hosts

1.4. 设置无密码访问

  • 在host1服务器中生成密钥

输入下面的命令,一路回车。

ssh-keygen -t ed25519

在hosts的 ~/.ssh/ 目录下生成ed25519密钥对: 私钥文件id_ed25519 和 公钥文件id_ed25519.pub

将公钥添加到 ~/.ssh/authorized_keys 文件中,并设置600权限。

touch ~/.ssh/authorized_keys
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

这里需要注意几点:

  • 为什么要使用touch ~/.ssh/authorized_keys 而不是直接cat ~/.ssh/id_ed25519.pub > ~/.ssh/authorized_keys

        主要是为了避免~/.ssh/authorized_keys文件已经存在的情况下,里面的内容遭覆盖。

  • 为什么要设置~/.ssh/authorized_keys权限为600 而 ~/.ssh的权限为700

        这里主要从安全策略最小化原理考虑,~/.ssh/authorized_keys只需root拥有读写权限即可;而~/.ssh是目录,需要有执行权限。

  • 产生~/.ssh/known_hosts

在host1中依次访问其他计算服务器host[2-10], 会提示 ... key fingerprint is ...

Are you sure you want to continue connecting (yes/no)?

输入yes

然后会将其他服务器的 fingerprint 添加到 know_host中

Warning: Permanently added 'host2' (ECDSA) to the list of known hosts.

这样会得到完整的 ~/.ssh/known_hosts

  • 同步到其他服务器

将 ~/.ssh 拷贝到其他计算服务器中,并修改文件权限。

以host2计算节点为例:

scp -r ~/.ssh host2:/root/
ssh host2 "chmod 700 /root/.ssh; chmod 600 /root/.ssh/authorized_keys"

至此,无密码访问设置完成。

2. 共享存储配置

这里只介绍基于NFS的共享存储。

2.1. 基于NFS

NFS(Network File System, 网络文件系统),是FreeBSD支持的文件系统中的一种,允许用户访问远程计算机上的文件和目录,并把那些文件和目录当作本地文件和目录对待,允许网络中的计算机之间通过TCP/IP网络共享资源。它适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能。

2.1.1 存储节点

  • 安装NFS服务

    yum install -y epel-release
    yum install -y nfs-utils rpcbind
  • 配置共享目录

/etc/exports 文件在 Linux 系统中用于配置网络文件系统(NFS)的共享,它定义了哪些文件系统可以被远程系统挂载,以及挂载时的权限和选项。

在存储服务器ostore1上,新建目录 /mnt/GPUshare01/home2作为共享存储。

编辑 /etc/exports

vim /etc/exports

内容如下:

/mnt/GPUshare01/home2 12.12.12.1/24(rw,sync,secure,no_root_squash,no_subtree_check,fsid=2)

参数说明:

  • /mnt/GPUshare01/home2: 要共享的本地文件系统路径,即将本地的该目录共享出去。

  • 12.12.12.1/24: 允许访问共享的客户端的网络地址范围。这里指定的是 12.12.12.112.12.12.255 的 IP 地址范围(因为 /24 表示子网掩码是 255.255.255.0,即前 24 位是网络地址,后 8 位是主机地址),只有这个范围内的客户端才能挂载这个共享。当然如果希望所有的网络地址都可以挂载,这里直接使用*即可(为了安全起见,不建议如此设置)。

  • (rw,sync,secure,no_root_squash,no_subtree_check,fsid=2): 挂载选项,具体含义如下:

    • rw: 表示客户端可以读写共享的文件系统,也可以设置为只读模式ro (read only)。
    • sync: 表示所有操作(包括写操作)都将同步执行,即数据写入磁盘后才认为操作完成。也可以设置为async异步操作
    • secure: 表示 NFS 通信将使用安全模式。在这种模式下,NFS 通信可能会因为不支持加密而无法在某些网络配置下工作。如果需要在不安全的网络上使用,可以设置为 insecure
    • no_root_squash: 通常,NFS 会将远程的 root 用户映射为 nobody,这是一种安全措施。no_root_squash 选项关闭了这个特性,允许远程的 root 用户以 root 身份访问共享。
    • no_subtree_check: 通常,NFS 会检查挂载点下的子目录是否也被共享。这个选项关闭了这个检查,可以提高性能,但可能会带来安全风险。
    • fsid=2: 这是文件系统的唯一标识符。在 NFS 客户端挂载时,可以使用这个标识符来指定挂载的文件系统。
  •  启动NFS服务
systemctl start nfs-server.service
systemctl enable nfs-server.service
systemctl enable rpcbind
  • 显示共享存储
showmount -e ParaStor300S01

能够看到本地共享的目录,这里的 ParaStor300S01 也就是 ostore1 。

2.1.2 存储节点

在 /etc/hosts 添加: (见 1.3节 )

12.12.12.101  ParaStor300S01

  • 安装客户端
yum install -y epel-release
yum install -y nfs-utils
  • 查看存储目录
showmount -e ParaStor300S01
  • 启动NFS服务
systemctl start nfs-server.service
systemctl enable nfs-server.service

挂载存储并查看

mount -t nfs ParaStor300S01:/mnt/GPUshare01/home2 /home
df -h

  • 将挂载命令添加到 /etc/rc.local 让系统启动的时候实现自动挂载
mount -t nfs ParaStor300S01:/mnt/GPUshare01/home2 /home

这里需要注意的是 /etc/rc.local 是/etc/rc.d/rc.local的一个软连接,需要有执行权限。

ln -s /etc/rc.d/rc.local /etc/rc.local

chmod +x /etc/rc.local

至此完成了共享存储设置。

3. 通用配置

这里主要涉及全局账号,防火墙,时间同步,数据库软件服务配置。

  • 3.1. 创建全局账号

  • 选择 MUNGEUSER组编号 2001

    选择 SLURMUSER 组编号 2002

    在管理节点和计算节点,分别执行以下命令:

    export MUNGEUSER=2001
    groupadd -g $MUNGEUSER munge
    useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge
    
    export SLURMUSER=2002
    groupadd -g $SLURMUSER slurm
    useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm

    这里的组编号依个人习惯设置,但是为了保证每个计算服务器的账号统一,需要设置相同的组编号。

  • 3.2. 换成阿里云镜像

  • mv  /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.bak
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

    3.3. 安装epel-release

  • yum install -y epel-release

    ‌‌epel-release是一个软件仓库,为企业级Linux发行版(如‌CentOS、‌RHEL)提供额外的软件包。‌ EPEL(Extra Packages for Enterprise Linux)由‌Fedora社区维护,旨在为RHEL及其衍生发行版提供高质量的软件包。‌EPEL仓库包含了许多由社区维护的软件包,这些软件包通常不包含在官方仓库中。通过安装epel-release,用户可以访问到许多常用的开源软件和工具,扩展操作系统的功能和应用领域。这些软件包经过严格的审查和测试,确保其质量和稳定性。安装epel-release后,用户可以使用‌yum或‌dnf命令来安装和更新这些额外的软件包。这解决了官方仓库中软件包不足的问题,特别是对于那些在默认源中找不到的软件包。

3.4. 配置防火墙

  • 为了允许其他设备通过网络访问你的 NTP 时间服务器,你需要在防火墙中打开 UDP 端口 123:

    sudo firewall-cmd --permanent --add-service=ntp
    sudo firewall-cmd --reload

    或关闭防火墙

    systemctl stop firewalld
    systemctl status firewalld
    systemctl disable firewalld

3.5. 设置时间同步 

  • 配置CST时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 同步NTP服务器(以centos 7.6为例)
yum install ntp -y

3.5.1. 服务器端

1)编辑 NTP 的配置文件 /etc/ntp.conf 来设置你的 NTP 服务器

vim /etc/ntp.conf
  • 确保时间服务器能够从其他可靠的 NTP 服务器获取时间,这样可以提高时间的准确度:

server pool.ntp.org iburst

(注意:这行保留了与外部 NTP 服务器的同步)

  • 设置本地时钟为首选时间源:

server 127.127.1.0 prefer

fudge 127.127.1.0 stratum 10

  • 如果你希望其他客户端能够通过广播方式从时间服务器获取时间,可以开启广播功能:

broadcast 12.12.12.255

broadcastclient

  • 限制其他主机对时间服务器的操作权限,同时允许特定子网内的主机进行时间同步:

restrict default nomodify notrap nopeer noquery

restrict 12.12.12.0 mask 255.255.255.0 nomodify notrap

  • 存储日志

driftfile /var/lib/ntp/drift

logfile /var/log/ntp.log

  • 即 /etc/ntp.conf内容为(其中允许12.12.12.*其他服务器查询和同步时间):
server pool.ntp.org iburst

server 127.127.1.0 prefer
fudge 127.127.1.0 stratum 10

broadcast 12.12.12.255
broadcastclient

restrict default nomodify notrap nopeer noquery
restrict 12.12.12.0 mask 255.255.255.0 nomodify notrap

driftfile /var/lib/ntp/drift
logfile /var/log/ntp.log

2)启动 NTP 服务并设置开机启动

systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd

3.5.2. 客户端

  • 客户端设置

在每台需要与时间服务器同步时间的客户端上安装 NTP 客户端:

yum install ntp -y

编辑客户端的 NTP 配置文件 /etc/ntp.conf,添加指向时间服务器的记录:

vim /etc/ntp.conf

在配置文件中添加以下行(其中12.12.12.240为NTP服务端):

server 12.12.12.240 iburst
  • 启动 NTP 客户端服务

    重启 NTP 客户端服务以应用更改:

systemctl restart ntpd
systemctl enable ntpd
systemctl status ntpd
  • 检查同步情况

在每个客户端上运行以下命令来确认是否成功同步:

ntpq -p

这将显示客户端与时间服务器的同步信息:

remote 列显示的是时间服务器的 IP 地址或主机名,

refid 列显示为 LOCAL 或者时间服务器所同步的上级 NTP 服务器的地址。

整体操作:

systemctl restart ntpd
systemctl enable ntpd
systemctl status ntpd
ntpq -p

 3.6. 安装数据库

这里选择Mariadb

3.6.1. 服务端

3.6.1.1. 安装服务
yum install -y mariadb mariadb-server MySQL-python
yum install -y mysql-devel

3.6.1.2. 重启服务设置密码
systemctl restart mariadb
systemctl enable mariadb.service
systemctl stop mariadb
mysql_install_db --datadir="/var/lib/mysql" --user="mysql"
systemctl start mariadb.service
mysql_secure_installation

设置root密码 ...... (这里设置您的root密码)

3.6.1.3. 修改配置
  • 停止服务
systemctl stop mariadb
  • 修改配置

修改配置文件/etc/my.cnf,添加innodb_buffer_pool_size和innodb_lock_wait_timeout的大小

[mysqld]
innodb_buffer_pool_size=4096M
innodb_log_file_size=64M
innodb_lock_wait_timeout=900
max_allowed_packet=16M
  • 移除日志

移除日志文件:

cd /var/lib/mysql/
rm -rf ib_logfile*
rm -rf aria_log*
  • 重启服务

重启服务,并进入数据库中查看innodb_buffer_pool_size参数。

systemctl start mariadb.service
systemctl status mariadb.service

mysql -uroot -p
MariaDB[(none)]> show variables like 'innodb_buffer_pool_size';

显示:1073741824

这里设置innodb_buffer_pool_size和innodb_lock_wait_timeout的目的,是为了避免slurmdbd出现的错误:

error: Database settings not recommended values: innodb_buffer_pool_size innodb_log_file_size innodb_lock_wait_timeout max_allowed_packet

3.6.2. 计算节点

yum install -y mariadb MySQL-python

截至目前数据库安装成功。

3.7. 计算设备

这里根据计算资源情况,这里可以忽略,(主要对后期的虚拟化集群的建设有意义)

常用加速卡相关命令
加速卡类型 查看插在服务器中加速卡的的PCI标识号 系统管理工具
英伟达 lspci -nnD | grep -i nvidia | grep VGA nvidia-smi
海光

区分不同型号:

lspci -nnD | grep -i disp

lspci -nnD | grep -i dcu

rocm-smi
华为 lspci -nnD | grep -i accelerators npu-smi info
百度昆仑 lspci -nnD | grep -i accelerators xpu_smi
寒武纪 lspci -nnD | grep -i accelerators cnmon
...

4. LDAP统一用户认证

轻型目录访问协议(LDAP ,Lightweight Directory Access Protocol )是一个开放的,中立的工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。它的常用用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值