Slurm集群节点‘体检报告’一键生成:GPT辅助下的Bash脚本编写实战 Slurm集群节点‘体检报告’一键生成GPT辅助下的Bash脚本编写实战在HPC高性能计算集群的日常运维中快速掌握节点状态是管理员和用户都迫切需要的功能。传统的sinfo和squeue命令虽然提供了基础信息但输出格式往往不够直观难以一目了然地把握全局状况。本文将带你体验如何借助AI工具如GPT与开发者知识相结合高效编写一个能生成美观集群状态报告的Bash脚本。1. 从需求到AI提示词明确目标编写一个实用的集群状态报告脚本首先需要明确我们希望看到哪些信息。一个好的集群体检报告应该包含节点基本信息主机名、所属分区资源状态CPU数量、当前负载、总内存、可用内存特殊资源GPU等加速器信息作业情况当前节点上运行的所有作业将这些需求转化为AI提示词时需要注意几点具体明确避免模糊描述如好看的报告而应说明表格形式不同状态用颜色区分技术细节明确指出需要使用哪些Slurm命令sinfo,squeue格式要求说明希望如何格式化输出列宽、颜色等提示给AI的提示词可以这样组织我需要一个Bash脚本使用sinfo和squeue命令生成Slurm集群状态报告。报告应以表格形式显示每个节点的主机名、分区、状态、CPU数量、CPU负载、总内存、可用内存、GRES资源和作业列表。空闲节点显示为绿色其他状态显示为红色。使用printf格式化输出确保各列对齐。2. AI生成代码的解析与优化AI工具生成的初始代码通常需要人工检查和调整。以下是一个典型的需要关注的方面#!/bin/bash # 颜色定义 RED\033[0;31m GREEN\033[0;32m NC\033[0m # No Color # 打印表头 printf ${GREEN}%-15s %-12s %-11s %-15s %-8s %-12s %-12s %-15s %-s${NC}\n \ Hostname Partition Node/State Num_CPU CPUload Memsize(MB) Freemem(MB) GRES/Node Joblist # 获取节点信息并处理 sinfo -o %N %P %T %C %O %m %e %G -h | while read node; do # 字段解析... done需要特别注意的几个技术点字段截取安全性AI生成的awk {print $n}在字段包含空格时会出错更安全的做法是指定分隔符hostname$(echo $node | awk -F {print $1})性能优化避免在循环中多次调用squeue可以预先获取所有作业信息# 获取所有作业信息 all_jobs$(squeue -h -o %i %u %b %N)错误处理添加对命令执行失败的检查nodes$(sinfo -o %N %P %T %C %O %m %e %G -h) || { echo Error: Failed to get node info from sinfo 2 exit 1 }3. 手动编写与AI辅助的对比分析下表对比了传统手动编写和AI辅助开发的主要区别对比维度纯手动编写AI辅助开发开发时间2-3小时30分钟学习曲线需要精通awk/sed了解基础即可调试难度完全自行排查可让AI解释错误代码质量依赖个人水平基础结构更规范可维护性个人风格强烈标准结构更易读虽然AI能大幅提升效率但开发者仍需具备基础命令知识理解sinfo、squeue的参数含义Shell编程能力能读懂并修改生成的代码调试技巧当AI代码不工作时能找出问题4. 进阶功能增强脚本实用性基础功能实现后可以考虑添加一些实用增强功能定期自动刷新使用watch命令或循环实现自动更新# 每30秒刷新一次 watch -n 30 ./cluster_report.sh条件过滤添加参数支持只显示特定分区的节点# 添加分区过滤参数 if [ $1 ]; then nodes$(sinfo -o %N %P %T %C %O %m %e %G -h -p $1) else nodes$(sinfo -o %N %P %T %C %O %m %e %G -h) fi历史趋势记录快照并比较资源使用变化# 记录当前状态到日志文件 ./cluster_report.sh /var/log/cluster_status.log告警功能当关键指标超过阈值时突出显示# CPU负载超过90%显示特别警告 if (( $(echo $cpuload 90 | bc -l) )); then cpuload${RED}${cpuload}%${NC} fi5. 部署与分享让脚本真正产生价值开发完成后可以通过以下方式让脚本发挥更大作用全局可用将脚本放入/usr/local/bin并设置适当权限登录显示在/etc/profile.d/中添加脚本调用Web界面用cgi-bin或Python Flask创建简单Web界面邮件报告设置cron任务定期发送集群状态邮件对于多用户环境需要注意权限控制确保普通用户只能查看必要信息性能影响避免频繁执行影响管理节点性能格式兼容确保在不同终端下显示正常在实际部署后可以收集用户反馈持续改进。例如添加更多指标磁盘空间、网络状态或支持更灵活的过滤条件。