当前位置: 首页 > news >正文

Ubuntu 24.04下5分钟搞定Slurm单节点部署:超算资源管理初体验

Ubuntu 24.04下5分钟极速部署Slurm单节点:从零到任务调度的完整指南

为什么选择Slurm?

在当今计算密集型任务日益普及的背景下,高效管理计算资源变得至关重要。Slurm(Simple Linux Utility for Resource Management)作为开源的高性能计算集群资源管理和作业调度系统,已经成为学术界和工业界的首选工具。它不仅能管理成千上万的节点,也能完美适配单机环境,为开发者提供一致的开发体验。

相比其他作业调度系统,Slurm具有以下显著优势:

  • 轻量级:核心组件仅需不到100MB内存
  • 易用性:命令行工具简单直观
  • 灵活性:支持从单节点到超大规模集群
  • 社区支持:拥有活跃的开发者和用户社区

1. 环境准备与依赖安装

在开始Slurm部署前,我们需要确保Ubuntu 24.04系统已经准备就绪。以下步骤将引导您完成基础环境配置:

# 更新系统软件包 sudo apt update && sudo apt upgrade -y # 安装必要依赖 sudo apt install -y wget build-essential libssl-dev libmunge-dev munge

关键点说明

  • munge是Slurm用于节点间认证的服务
  • libssl-dev提供加密支持
  • 建议使用root或具有sudo权限的用户执行上述命令

提示:Ubuntu 24.04默认使用较新的内核版本(6.8+),这为Slurm提供了更好的硬件资源管理能力。

2. Slurm核心组件安装

Slurm的安装过程在Ubuntu 24.04上变得异常简单,得益于其完善的软件仓库支持:

# 安装Slurm核心组件 sudo apt install -y slurm-wlm slurm-wlm-doc # 验证安装 slurmd --version

典型输出应类似于:

slurm-wlm 23.11.4

常见问题排查

  • 如果遇到依赖冲突,可尝试sudo apt --fix-broken install
  • 网络问题可使用阿里云或清华镜像源加速下载

3. 单节点配置实战

单节点配置是理解Slurm工作原理的最佳起点。我们将创建一个最小化的配置文件:

sudo mkdir -p /etc/slurm sudo tee /etc/slurm/slurm.conf << 'EOF' ClusterName=local_cluster ControlMachine=$(hostname) SlurmUser=slurm SlurmctldPort=6817 SlurmdPort=6818 AuthType=auth/munge StateSaveLocation=/var/spool/slurmctld SlurmdSpoolDir=/var/spool/slurmd SwitchType=switch/none MpiDefault=none SlurmctldPidFile=/var/run/slurmctld.pid SlurmdPidFile=/var/run/slurmd.pid ProctrackType=proctrack/linuxproc ReturnToService=1 SchedulerType=sched/backfill SelectType=select/linear NodeName=$(hostname) CPUs=$(nproc) RealMemory=$(free -m | awk '/Mem:/ {print $2}') State=UNKNOWN PartitionName=local Nodes=$(hostname) Default=YES MaxTime=INFINITE State=UP EOF

配置参数详解

参数说明示例值
CPUs可用CPU核心数$(nproc)自动检测
RealMemory可用内存(MB)$(free -m)自动计算
PartitionName计算分区名称自定义如"local"
SchedulerType调度算法backfill为回填调度

4. 服务启动与验证

完成配置后,我们需要启动相关服务并进行功能验证:

# 创建必要目录并设置权限 sudo mkdir -p /var/spool/{slurmctld,slurmd} sudo chown -R slurm:slurm /var/spool/slurm* # 启动服务 sudo systemctl enable --now munge sudo systemctl enable --now slurmd sudo systemctl enable --now slurmctld # 验证节点状态 sinfo

预期输出示例:

PARTITION AVAIL TIMELIMIT NODES STATE NODELIST local* up infinite 1 idle your-hostname

快速测试任务提交

# 提交简单测试任务 srun --partition=local --time=00:01:00 --ntasks=1 hostname # 批量任务示例 cat <<EOF > test.sh #!/bin/bash #SBATCH --job-name=test #SBATCH --output=test_%j.out echo "Running on $(hostname) at $(date)" EOF sbatch test.sh

5. 高级配置与优化技巧

对于希望进一步探索Slurm功能的用户,以下高级配置可以显著提升使用体验:

资源限制配置

# 在slurm.conf中添加 JobAcctGatherType=jobacct_gather/linux AccountingStorageType=accounting_storage/none

GPU支持配置(如有NVIDIA显卡):

# 添加至NodeName行 Gres=gpu:1 # 创建/etc/slurm/gres.conf AutoDetect=nvml

实用管理命令

命令功能示例
squeue查看任务队列squeue -l
scancel取消任务scancel <jobid>
scontrol系统管理scontrol show nodes

6. 常见问题解决方案

即使是最简单的部署也可能遇到问题,以下是典型问题及其解决方法:

问题1:节点状态显示为DOWN

# 解决方案 sudo scontrol update NodeName=$(hostname) State=RESUME

问题2:认证失败

# 检查munge服务 sudo systemctl restart munge munge -n | unmunge

问题3:权限错误

# 确保目录权限正确 sudo chown -R slurm:slurm /var/spool/slurm*

7. 从单节点到开发集群的扩展

虽然本文聚焦单节点部署,但了解如何扩展至多节点对开发者很有价值:

  1. 节点准备:确保所有节点:

    • 使用相同版本的Ubuntu
    • 具有相同的用户和组ID
    • 配置SSH免密登录
  2. 共享存储:建议配置NFS共享:

    # 主节点 sudo apt install nfs-kernel-server sudo tee /etc/exports << EOF /shared *(rw,sync,no_subtree_check) EOF # 从节点 sudo apt install nfs-common sudo mount master:/shared /shared
  3. 统一配置:将munge.key和slurm.conf同步到所有节点

8. 实际应用场景示例

Slurm单节点部署虽然简单,但已经可以支持许多实用场景:

持续集成测试

#!/bin/bash #SBATCH --job-name=ci-test #SBATCH --output=ci-%j.out # 运行测试套件 make test

数据分析流水线

#!/bin/bash #SBATCH --array=1-100 #SBATCH --output=process_%A_%a.out python process_data.py ${SLURM_ARRAY_TASK_ID}

机器学习训练

#!/bin/bash #SBATCH --gres=gpu:1 #SBATCH --cpus-per-task=8 python train_model.py

9. 性能监控与优化

合理监控是保证Slurm稳定运行的关键:

基础监控命令

# CPU使用情况 sstat -j <jobid> --format=JobID,NTasks,CPUTime,MaxRSS # 详细资源使用 sacct -j <jobid> --format=JobID,JobName,Elapsed,AllocCPUS,ReqMem,MaxRSS

自定义监控脚本

#!/bin/bash while true; do sinfo -N -l | grep -v idle squeue -o "%.18i %.9P %.8j %.8u %.8T %.10M %.9l %.6D %R" sleep 30 done

10. 安全加固建议

即使是单节点部署,安全配置也不容忽视:

  1. Munge安全

    sudo chmod 700 /etc/munge sudo chmod 400 /etc/munge/munge.key
  2. Slurm用户隔离

    sudo useradd -m -s /bin/bash slurmuser sudo passwd slurmuser
  3. 网络防护

    sudo ufw allow 6817:6818/tcp sudo ufw enable

11. 与容器技术的集成

Slurm可以完美适配容器化工作负载:

Singularity集成示例

#!/bin/bash #SBATCH --job-name=container-job singularity exec docker://ubuntu:24.04 /bin/bash -c "echo Hello from container"

Apptainer配置

# 在slurm.conf中添加 PropagateResourceLimits=ALL

12. 日常维护与管理

长期运行的Slurm系统需要定期维护:

日志轮转配置

sudo tee /etc/logrotate.d/slurm << 'EOF' /var/log/slurm/*.log { weekly missingok rotate 4 compress delaycompress sharedscripts postrotate systemctl try-reload-or-restart slurmctld >/dev/null || true systemctl try-reload-or-restart slurmd >/dev/null || true endscript } EOF

数据库备份(如果启用记账功能):

mysqldump -u slurm -p slurm_acct_db > slurm_backup_$(date +%F).sql

13. 社区资源与进阶学习

要深入掌握Slurm,以下资源非常宝贵:

  • 官方文档:https://slurm.schedmd.com/documentation.html
  • GitHub仓库:https://github.com/SchedMD/slurm
  • 邮件列表:slurm-users@schedmd.com
  • 书籍推荐:《Slurm Resource Manager for High Performance Computing》

14. 真实用户案例分享

在实际使用中,许多开发者发现单节点Slurm部署可以解决以下痛点:

  • 资源冲突:避免团队成员同时运行大型任务导致系统过载
  • 实验复现:通过标准化任务提交确保结果一致性
  • 开发流程:本地测试与集群生产环境使用相同的任务提交方式

一位机器学习研究员分享道:"在本地工作站部署Slurm后,我的模型训练任务不再因为误操作而相互干扰,通过简单的队列管理,工作效率提升了至少30%。"

15. 未来发展与技术趋势

随着计算需求的演进,Slurm生态系统也在不断发展:

  • 云原生集成:支持Kubernetes和容器化部署
  • 边缘计算:轻量级版本适用于边缘设备
  • AI优化:增强对GPU和TPU等加速器的支持

这些趋势使得Slurm不仅适用于传统HPC领域,也越来越成为AI开发和数据分析的标准基础设施。

http://www.jsqmd.com/news/483221/

相关文章:

  • CYBER-VISION零号协议智能体(Agent)开发入门:构建自动化任务执行系统
  • SecGPT-14B高算力适配:vLLM优化后A10/A100显存占用降低35%
  • 避坑指南:LiveCharts在WPF中的5个常见问题及解决方案(含中文乱码修复)
  • 嵌入式双MCU语音终端设计与硬件协同实践
  • 从数列有界性到收敛子列:Bolzano-Weierstrass定理的5个关键思考点
  • FastGPT 4.8工作流编排实战:5分钟搞定知识库搜索与AI对话集成
  • Vulnhub靶机AI-WEB-1.0渗透测试:SQL注入到蚁剑连接的5个关键步骤
  • GME-Qwen2-VL-2B-Instruct快速上手:Git代码仓库管理与AI Commit信息生成
  • Irony Mod Manager高效管理实用指南:从配置到扩展的全流程解析
  • Vue3+Pinia用户状态管理:如何避免页面刷新导致数据丢失
  • JFR与JMC从入门到精通:30秒搞定JVM性能监控与分析
  • 避坑指南:uniapp自定义环境变量那些容易踩的雷(H5打包实测)
  • Coqui TTS安装包下载与部署实战:从环境配置到生产级优化
  • 实战指南:如何用Python代码检测并防御GPT-4的提示词注入攻击
  • 4大突破:Binwalk固件分析工具的智能解析技术全揭秘
  • 资源争抢频发?Docker 27智能调度器上线后,AI训练任务排队时间缩短83%,你还没升级吗?
  • 蓝牙PCB天线设计避坑指南:从0.4mm到2.4mm板厚的实战经验分享
  • 飞牛NAS+OpenWebUI+Docker三件套:手把手教你打造私人DeepSeek聊天室(附外网访问技巧)
  • 解密微信小程序wxapkg文件:如何通过AppID逆向获取源码?
  • 作品集:Neeshck-Z-lmage_LYX_v2不同LoRA风格出图对比
  • Vue+iframe实战:打造可切换的Grafana监控面板(避坑指南)
  • 汉邦激光接连多项3D打印应用突破:极薄壁+米级无支撑打印!
  • MPICH vs OpenMPI:如何根据你的HPC需求选择最佳MPI实现(2024最新对比)
  • 微软GraphRAG开源实战:如何用知识图谱提升RAG的全面性与多样性
  • 3个痛点解决:用VNote打造高效Markdown笔记系统
  • 基于GD32E230C8T6的DS18B20单总线温度传感器驱动移植与精度解析
  • SSH登录总被拒绝?3分钟搞定服务器密码登录配置(附安全建议)
  • 大模型评测不再靠人工抽样!Dify+私有化Judge模型如何将评估成本降低83%,准确率提升至96.7%?
  • Llama Factory快速部署指南:一键启动Web界面,轻松训练模型
  • 高效管理Signal Properties:批量操作‘Show propagated signals‘的实用技巧