核心内容摘要
Fish-Speech-1.5医疗场景应用:智能病历语音录入系统
当您的研发团队拥有数百个计算节点却因为缺乏合理的资源分配导致任务排队混乱、高优先级作业被阻塞甚至因为节点过载导致系统宕机——这不仅是硬件资源的浪费更是科研进度的停滞。
OpenPBS作为业界领先的开源调度器正是为了解决这一矛盾而生。
本文将带您深度解析如何从零构建一套生产级OpenPBS调度环境让您的算力资源“如臂使指”。
PBS调度系统PBSPortable Batch System作为开源调度器的元老级选手源于NASA在超算中心、能源勘探、生物医药等领域已稳定运行20余年。
其
核心价值远超基础功能资源利用率最大化解决“旱涝不均”问题通过策略实现多用户的高效并发。
作业优先级管理确保核心业务、紧急任务能够优先获得算力支持。
复杂拓扑感知能够识别CPU核心、内存、GPU如A100/H100等硬件特性实现精准调度。
故障自愈能力实时监控计算节点健康状态自动剔除故障节点保障任务连续性。
实战指南第一阶段环境预检与依赖安装OS环境推荐CentOS/Rocky Linux/Ubuntu LTS。
先决条件主机名解析/etc/hosts、各节点时钟同步NTP/Chrony、各节点无密码SSH互信。
依赖包gcc,make,libtool,openssl-devel等编译环境准备。
# 安装依赖 yum install -y gcc make rpm-build libtool hwloc-devel \ libX11-devel libXt-devel libedit-devel libical-devel \ ncurses-devel perl postgresql-devel postgresql-contrib python3-devel tcl-devel \ tk-devel swig expat-devel openssl-devel libXext libXft \ autoconf automake gcc-c若找不到libedit-devel包启用PowerTools再安装或直接去https://rhel.pkgs.org/下载# 启用 PowerTools 安装libedit-devel dnf -y install dnf-plugins-core dnf config-manager --set-enabled PowerTools dnf -y install libedit-devel第二阶段OpenPBS 编译与安装
源码获取从GitHub(https://github.com/openpbs/openpbs/releases )或官网(https://www.openpbs.org/)下载稳定版。
配置编译先运行autogen.sh再使用./configure --prefix/opt/pbs指定路径。
配置完成使用make -j$(nproc)编译
安装执行make install。
初始化运行sudo /opt/pbs/libexec/pbs_postinstall。
编辑配置文件/etc/pbs.conf# nano /etc/pbs.conf PBS_SERVERXXX #请将XXX自行修改成主机名在这里我的主机就是主节点。
PBS_START_SERVER1 #本机是否充当PBS主机是的话改1子节点改0 PBS_START_SCHED1 #本机是否充当PBS任务调度器通常只在主机上用子节点成0 PBS_START_COMM1 #本机是否充当PBS任务交流器通常只在主机上用子节点改成0 PBS_START_MOM0 #本机是否充当PBS计算节点根据情况来定一般主节点配置低不需要计算直接改0 计算节点
修改文件权限sudo chmod 4755 /opt/pbs/sbin/pbs_iff /opt/pbs/sbin/pbs_rcp
启动PBSsudo /etc/init.d/pbs start若提示PBS Data Service user postgres does not exist.安装postgresql-server再重新启动。
添加pbs命令到全局环境变量vim /etc/profile # 最后添加 export PATH/opt/pbs/bin:/opt/pbs/sbin:$PATH export LD_LIBRARY_PATH/opt/pbs/lib:$LD_LIBRARY_PATH # 保存 source /etc/profile验证 qstat 命令qstat -B配置开机启动systemctl enable pbs systemctl start pbs
启动异常问题如下启动输出Starting PBS PBS Home directory /var/spool/pbs needs updating. Running /opt/pbs/libexec/pbs_habitat to update it. *** *** Setting default queue and resource limits. *** qmgr objworkq svrdefault: Invalid credential qmgr: Error (
returned from server cp: cannot stat/usr/bin/pg_resetxlog: No such file or directory *** End of /opt/pbs/libexec/pbs_habitat Home directory /var/spool/pbs updated. PBS comm /opt/pbs/sbin/pbs_comm ready (pid
, Proxy Name:rhel-openpbs:17001, Threads:4 PBS sched Connecting to PBS dataservice...connected to PBS dataservice
192.
168.
30 PBS server解决方案# 确认你系统里的 pg_resetwal 路径通常在 /usr/bin/ 或 /usr/pgsql-x/bin/ which pg_resetwal # 创建软链接伪装成旧版命令 sudo ln -s $(which pg_resetwal) /usr/bin/pg_resetxlog # 修复管理员凭证和初始化 # 尝试以 root 身份直接修改如果 pbs_server 已启动 sudo /opt/pbs/bin/qmgr -c set server managers root$(hostname) sudo /opt/pbs/bin/qmgr -c set server managers rootlocalhost # 重新执行环境适配脚本 sudo /opt/pbs/libexec/pbs_habitat sudo /etc/init.d/pbs restart
子节点配置/etc/pbs.confPBS_SERVER主节点名字 PBS_START_SERVER0 #本机是否充当PBS主机是的话改1子节点改0 PBS_START_SCHED0 #本机是否充当PBS任务调度器通常只在主机上用子节点改成0 PBS_START_COMM0 #本机是否充当PBS任务交流器通常只在主机上用子节点改成0 PBS_START_MOM1 #本机是否充当PBS计算节点主从机均可若不当计算节点请改成0初始化并启动pbs# 初始化 sudo /opt/pbs/libexec/pbs_postinstall # 设置文件权限 sudo chmod 4755 /opt/pbs/sbin/pbs_iff /opt/pbs/sbin/pbs_rcp # 启动pbs sudo /etc/init.d/pbs start第三阶段队列管理及节点创建
添加队列sudo /opt/pbs/bin/qmgr create queue hpc #创建名为hpc的队列 set queue hpc queue_type Execution #将hpc设置成执行队列如有其他特殊需求请自行修改另外一种是Route路由队列不参与计算 set queue hpc enabled True #启用hpc队列 set queue hpc started True #启动hpc队列 set server default_queue hpc #将hpc队列配置成默认队列 set server flatuidTrue #不检查用户UID是否一致 set server schedulingTrue #启用PBS任务调度器 set server job_history_enableTrue #启用历史记录 exit # 退出
手动添加节点sudo /opt/pbs/bin/qmgr -c create node node01 sudo /opt/pbs/bin/qmgr -c create node node02 ...
删除节点sudo /opt/pbs/bin/qmgr -c delete node node
查看节点pbsnodes -a输出内容说明节点名称每个节点的唯一标识符通常是主机名。
状态state表示节点的当前状态例如free节点空闲可以分配作业busy节点正在运行作业offline节点被手动设置为离线状态down节点不可用例如硬件故障job-exclusive节点被某个作业独占。
资源resources_available节点可用的资源例如ncpus可用的CPU数量mem可用的内存大小gpus可用的GPU数量如果支持GPU分配的资源resources_assigned当前被作业占用的资源例如ncpus已分配的CPU数量mem已分配的内存大小gpus已分配的GPU数量如果支持GPU第四阶段测试任务提交
编写测试脚本#!/bin/bash #PBS -N MyFirstHPCJob #PBS -l nodes1:ppn1 #PBS -q hpc #PBS -j oe #PBS -o /home/hpcuser/pbs_test.log echo---------------------------------------- echo作业启动时间: $(date) echo运行节点名称: $(hostname) echo运行用户身份: $(whoami) echo当前工作目录: $(pwd) echo---------------------------------------- # 模拟计算任务 sleep 20 echo作业完成时间: $(date) EOF参数说明#PBS -N MyFirstHPCJob含义作业名称 (Name)。
作用在qstat查看任务列表时显示的名称。
#PBS -l nodes1:ppn1含义资源列表 (Resource List)nodes1申请1个计算节点ppn1每个节点申请1个处理器核心 (Processors Per Node)进阶在OpenPBS的新版本中也常用select1:ncpus1这种写法。
重要性这是最核心的配置直接决定了调度器从哪分资源。
如果申请nodes2:ppn16调度器就会寻找两个空闲的、且各有16核的节点。
#PBS -q workq含义目标队列 (Queue)。
作用指定将任务提交到哪一个“池子”里。
建议 如果集群配置了多个队列如debug,gpu,bigmem用户必须在这里指明否则会进入默认队列。
#PBS -j oeo代表 Standard Output (标准输出即程序执行中print/echo的内容)。
e代表 Standard Error (标准错误即报错信息)。
含义 合并输出 (Join)。
作用oe表示将这两个流合并为一个文件。
好处 方便用户查看不需要在两个文件.o 和 .e之间切换。
#PBS -o /home/hpcuser/pbs_test.log含义 输出路径 (Output Path)。
作用 指定运行结果保存的文件名和存放位置。
实施提示 必须确保计算节点能访问这个路径。
在没有 NFS 共享存储的环境下这个文件默认会先保存在计算节点的临时目录任务结束后再拷贝回主节点但这经常因为 SSH 权限问题失败所以在 HPC 实施中强力建议配合 NFS 使用。
提交作业qsub pbs-test.sh
查看队列及任务状态# qstat -q # 输出 server: rhel-op Queue Memory CPU Time Walltime Node Run Que Lm State ---------------- ------ -------- -------- ---- ----- ----- ---- ----- workq -- -- -- -- 0 0 -- E R hpc -- -- -- -- 1 0 -- E R ----- ----- 1 0 # qstat -an # 输出 rhel-openpbs: Reqd Reqd Elap Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time --------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
rhel-openpbs efadmin hpc MyFirstHP* 80169 1 1 -- -- E 00:00 rhel-compute/0第五阶段精细化策略调试节点属性定义为节点打标签如gputrue,memhigh。
在 Server 层面注册自定义资源# nano /var/spool/pbs/server_priv/resourcedef gpu_type TYPEstring FLAGSh mem_high TYPEboolean FLAGSh为具体节点赋值sudo qmgr -c set node rhel-compute resources_available.gpu_type A100 sudo qmgr -c set node rhel-compute resources_available.mem_high True调用标签# 脚本里指定需要带 A100 显卡的节点 #PBS -l select1:ncpus8:gpu_typeA100调度策略Sched Config设置回填Backfilling策略提升碎片资源利用率。
开启调度器的时间预估功能# 设置默认 walltime 为 24 小时方便调度器计算回填窗口 sudo qmgr -c set queue hpc default_chunk.walltime 24:00:00配置调度器策略文件OpenPBS的调度策略通常在sched_config文件中定义通常位于/var/spool/pbs/sched_priv/sched_config。
找到以下参数并确保其开启
. backfill: True开启回填
. backfill_depth: 20回填扫描的深度即检查队首后面多少个作业
. strict_fifo: False如果设为 True 则无法回填必须关闭
结语HPC的实施从来不只是代码的堆砌而是一场关于平衡的艺术——在有限的硬件资源与无限的计算需求之间寻找最优解。
通过规范化的OpenPBS部署我们不仅搭建了一个运行作业的平台更构建了一套有序、透明、可扩展的科研生产管理体系。
作为HPC实施工程师我们的目标始终如一让每一颗核心都满载运行让每一次创新都无需等待。
如果您的集群正面临效率瓶颈或许答案就在这一套科学的调度方案之中。