托管版PowerSaving Slurm集群为队列预注册虚拟节点,作业提交时自动创建ECS实例,作业完成后自动释放,空闲期不产生计算费用。
业务场景
HPC作业负载呈明显的波峰波谷特征——批量提交时需要大量算力,间歇期几乎无资源消耗。静态集群的常驻节点在空闲期持续产生费用。PowerSaving模式将计算资源与作业生命周期绑定:调度器预注册一组虚拟节点,作业提交时自动创建ECS实例,空闲超时后自动释放,计算费用仅在作业运行期间产生。
PowerSaving工作机制
Slurm调度器为队列预注册一批虚拟节点(idle~状态),这些节点在调度器中可见但不占用ECS资源。作业提交后,调度器创建ECS实例(alloc#状态),实例就绪后执行作业(alloc状态)。作业完成后节点进入空闲计时,超过阈值(默认1分钟)后释放实例,节点回到idle~状态。
节点状态标识与转换流程:
|
符号 |
状态 |
含义 |
|
~ |
POWERED_DOWN |
节点处于断电状态,无实际ECS资源,可接受作业调度 |
|
# |
POWERING_UP |
正在创建ECS实例,等待实例就绪 |
|
(无后缀) |
POWER_UP |
ECS实例已就绪,节点正常运行中 |
|
! |
POWER_DOWN |
节点收到断电信号,即将进入释放流程,此状态持续时间极短 |
|
% |
POWERING_DOWN |
正在释放ECS实例 |
|
典型转换路径:idle~ → alloc# → alloc → idle → idle! → idle% → idle~ |
||
更多细节参见Slurm Power Saving官方文档。
创建托管版Slurm集群
集群创建约需10~15分钟,未提及的参数按需填写。
-
创建标准版集群,使用以下配置。
配置项
示例值
系列
托管版
部署模式
公共云集群
集群类型
SLURM
集群最大节点数
1000(根据业务峰值规模设置)
队列节点数
创建集群时跳过,集群就绪后单独配置PowerSaving队列
共享文件存储
默认挂载
/home和/opt为共享存储目录登录节点
实例规格ecs.c7.large(2 vCPU / 4 GiB),镜像CentOS 7.6 64位,按需开启EIP
进入集群详情页面。
登录弹性高性能计算控制台。
在顶部菜单栏左上角处,选择地域。
在左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称。
在左侧导航栏,单击用户管理。
-
作业需以非root用户提交。在用户管理页面,单击新增用户。
-
在弹出的对话框中配置用户信息,以usertest为例。
-
用户名:usertest。
-
用户权限:选择普通权限组,适用于提交和调试作业的用户。
-
密码、确认密码:设置登录密码。
-
配置PowerSaving队列
集群就绪后,配置PowerSaving队列定义弹性伸缩行为。
-
在集群列表页面,单击目标集群名称。
-
在左侧导航栏,选择。
-
单击创建队列,参照以下配置填写参数。
基础设置
|
配置项 |
示例值与说明 |
|
队列名称 |
testq |
|
队列自动伸缩 |
开启。开启后队列根据作业负载自动创建和释放节点。 |
|
队列节点数 |
0 - 20。系统预注册20个虚拟节点并分配主机名和IP,弹性伸缩从此节点池中选取。 |
节点配置
|
配置项 |
示例值与说明 |
|
节点间互联 |
VPC网络 |
|
虚拟交换机 |
选择队列所在的交换机(如vsw-bp*******************),系统据此确定可用区并预创建节点 |
|
实例规格组 |
通用型g7 / ecs.g7.large / CentOS 7.6 64位 / 40G ESSD PL0系统盘。多个规格须保持同构,仅第一个生效。根据可用区库存选择可用规格。 |
自动伸缩
|
配置项 |
示例值与说明 |
|
伸缩策略 |
供应优先策略。按可用区顺序优先供应,尽可能满足规模要求。 |
|
主机名前缀 |
testq,系统根据此前缀自动生成节点序号(如testq001、testq002) |
提交作业与自动扩缩容验证
队列配置完成后,提交一个CPU压测作业验证自动扩缩容流程。
连接集群并确认节点状态
-
在集群列表页面,单击目标集群名称。
-
在右上角选项栏,选择远程连接。
-
进入Workbench页面后,运行
sinfo命令,确认节点testq[001-020]处于idle~状态。
安装测试工具并提交作业
-
安装stress压测工具到
/opt共享目录,确保所有计算节点可访问。
cd /tmp
wget https://fossies.org/linux/privat/stress-1.0.7.tar.gz
tar -xzf stress-1.0.7.tar.gz
cd stress-1.0.7/
./configure --prefix=/opt/stress
make && make install
-
确认安装成功。
/opt/stress/bin/stress --version
-
切换到usertest用户并进入主目录。
su usertest
cd ~
-
编写作业脚本
cpu_stress.slurm,申请testq队列的1个节点、2个CPU核心,运行10分钟压测。
cat > cpu_stress.slurm << EOF
#!/bin/bash
#SBATCH --job-name=cpu_stress_test
#SBATCH --partition=testq
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=2
#SBATCH --time=00:10:00
#SBATCH --output=cpu_stress_%j.out
#SBATCH --error=cpu_stress_%j.err
echo "=== CPU Stress Test ==="
echo "Job ID: \$SLURM_JOB_ID"
echo "Node: \$(hostname)"
echo "Requested CPUs: \$SLURM_CPUS_PER_TASK"
echo "Start time: \$(date)"
NUM_CPUS=\${SLURM_CPUS_PER_TASK:-\$(nproc)}
if command -v /opt/stress/bin/stress >/dev/null 2>&1; then
/opt/stress/bin/stress --cpu \$NUM_CPUS --timeout \${SLURM_TIME_LIMIT:-600}
else
echo "ERROR: stress is not installed"
exit 1
fi
echo "End time: \$(date)"
echo "=== CPU Stress Test Completed ==="
EOF
-
提交作业到testq队列。
sbatch -p testq cpu_stress.slurm
观察自动扩容与缩容
作业提交后,运行sinfo和squeue观察节点状态变化:
-
扩容阶段:
sinfo显示节点处于alloc#状态,表示ECS实例正在创建。控制台中对应的testq001节点显示为初始化状态。 -
运行阶段:节点转为alloc状态,
squeue显示作业处于R(Running)状态。控制台中testq001节点CPU处于高负载。 -
缩容阶段:作业完成后,节点空闲超过1分钟自动回收。作业输出保存在
cpu_stress_<job_id>.out中。=== CPU Stress Test === Job ID: 1 Node: testq001 Requested CPUs: 2 Start time: Tue Feb 10 19:30:24 CST 2026 Using stress (fallback) stress: info: [14051] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd节点完成回收后,testq001重新变为idle~状态,ECS实例已释放。
限制项
-
地域限制:仅支持杭州、北京、河源、上海。
-
单集群节点上限为1000。
-
队列仅支持单可用区、单规格、同构实例规格。
-
队列不支持例外节点、不支持修改主机前缀、不支持超线程(HT)和eRDMA。
-
每队列节点数上限为500。
-
不支持手动扩容和缩容。
-
不支持srun及MPI作业,仅支持sbatch批处理作业。