分类 未分类 下的文章

在地学系的 centos 7 CPU 集群上配 slurm
登录节点 192.168.100.10
计算节点 192.168.100.2[1-8]

slurm 依赖 munge

yum update
yum install epel-release
yum install -y munge munge-libs munge-devel

拷贝 munge-key :

scp data:/etc/munge/munge.key /etc/munge/
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key

安装其他依赖:

yum install -y openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad 
yum install -y perl-ExtUtils-MakeMaker
yum install -y mysql
yum install -y perl-PCP-PMDA

从头编译 slurm :

tar -xvjf slurm-18.08.2.tar.bz2
cd slurm-18.08.2/
./configure --prefix=/usr --sysconfdir=/etc/slurm --with-munge=/usr/bin/munge
make -j12
make install 
make install-contrib

拷贝 slurmd 服务 :

cp etc/slurmd.service /etc/systemd/system

登录节点启动服务 slurmctld
计算节点启动服务 slurmd

slurmd log 路径默认为 /var/log/slurmd.log

slurm 配置文件为 /etc/slurm/slurm.conf,需保证所有节点的配置文件相同

配置 /etc/slurm/cgroup.conf 如下:

CgroupAutomount=yes
ConstrainCores=no
ConstrainRAMSpace=no

新建 slurm 用户:

groupadd -g 888 slurm
useradd  -m -c "SLURM workload manager" -d /var/lib/slurm -u 888 -g slurm  -s /bin/bash slurm

使用 slurm 运行 slurmd.service

/etc/systemd/system/slurmd.service 中设置

[Service]
User=slurm

slurm 生成配置:https://slurm.schedmd.com/configurator.html

slurmd -Dvvv # 调试启动
slurmd -C # 查看节点配置
scontrol show node [node] # 查看 node 状态
scontrol update NodeName=[node] State=UNDRAIN # 将 node 状态设为 undrain     sf

slurmdPidFile 默认位于 /var/run/slurmd.pid,路径
/var/run 目录只有 root 有写权限,且 /var/run 是 tmpfs
新建 /var/run/slurm,权限设置为 0770
/etc/tmpfiles.d/slurm.conf 中添加

d /var/run/slurm 0770 root slurm -

开机后自动设置路径
修改 /etc/systemd/system/slurmd.service 中 PIDFile 为 /var/run/slurm/slurmd.pid

然后 systemctl daemon-reload

environment

每个 spack 环境包括两个文件 spack.yaml, spack.lock ,可以用来在其他机器上建立相同环境

Configuration Scopes

2023-12-21T04:06:07.png

spack config blame [scope] 查看一个 scope 的 config 出处

module 路径: $SPACK_ROOT/share/spack/modules
包配置路径 : $SPACK_ROOT/var/spack/repos/builtin/packages

一些开源包

zlib : 无损压缩,DEFLATE算法,结合 LZ77 和 Huffman 编码,使用在 PNG 和 zip 格式中

hwloc :hardware locality,抽象当代处理器的复杂 hierarchy

HDF5 :Hierarchical Data Format version 5,保存大量复杂数据,支持压缩

pkgconf :管理软件编译,向编译器提供必要的编译和链接flag,是 pkg-config 包的代替

ncurses :new curses,创建 text user interface

GCC

编译流程:

Frontend pass :
通过源码生成 Abstract Syntax Tree (AST)

Middle-end pass :
将 AST 转换为 GIMPLE 中间表达(high-level,语言无关)
将 GIMPLE 转换为 SSA (Static Single Assignment) 格式

Backend pass :
将 GIMPLE 转换为 low level, 机器无关的中间表达 RTL (Register Transfer Language)

IPA : Interprocedural Analysis,考虑多个函数或多个文件的优化

使用 -fdump-passes 编译选项输出 GCC 使用的所有 pass
-fdump-tree-all 输出所有 gimple pass
-fdump-rtl-all 输出所有 RTL pass

编译选项:

-m : 机器相关选项

LLVM

llvm IR

因为想搞一个 centos 环境,但手头只有 debian,所以打算用 docker 搞一个 centos 环境

用了 spack/centos7 这个镜像,看起来自带 spack

sudo docker run -it spack/centos7 #运行 docker 
docker ps # 显示当前运行的 docker
sudo docker exec -it e165d3e15452 bash # 在已经运行的 docker 中执行 bash
sudo docker run --net=host --env HTTPS_PROXY="127.0.0.1:10987" --env HTTP_PROXY="127.0.0.1:10987" -it spack/centos7 # docker 设置 localhost 代理
sudo docker commit 94baf9f11069 blender # 保存正在运行 docker 的修改到新的 docker