技术博客:如何修改PBS运行中作业的Walltime(qalter工具详解)

在HPC集群中,PBS(Portable Batch System)是广泛使用的作业调度系统之一。用户提交作业时通常需要指定最大运行时间(Walltime),但实际运行中常遇到作业预估时间不足、或提前完成任务需释放资源的场景。此时无需重新提交作业,使用PBS内置的qalter工具即可动态修改运行中作业的Walltime,避免资源浪费。本文将详细介绍qalter修改运行中作业Walltime的前提条件、操作步骤、常见问题及最佳实践,帮助用户高效管理PBS作业。

目录#

  1. 什么是PBS作业的Walltime?
  2. 修改运行中作业Walltime的前提条件
  3. qalter工具修改Walltime的详细操作 3.1 基本语法与核心参数 3.2 单作业Walltime修改示例(延长/缩短) 3.3 批量修改运行中作业的Walltime 3.4 管理员修改其他用户的作业Walltime 3.5 验证修改结果
  4. 常见问题与解决方案
  5. 最佳实践
  6. 总结
  7. 参考资料

1. 什么是PBS作业的Walltime?#

Walltime是PBS调度系统为单个作业分配的最大允许运行时长,是HPC集群资源管理的核心参数之一。当作业实际运行时间超过设定的Walltime时,系统会强制终止作业,避免无限制占用集群资源。

  • 提交作业时指定Walltime:用户提交作业时可通过qsub -l walltime=时间格式指定,例如:

    qsub -l walltime=10:00:00 -N my_job run.sh

    该命令提交了名为my_job的作业,最大运行时长为10小时。

  • 支持的时间格式

    • 小时:分钟:秒:HH:MM:SS(如20:00:00表示20小时)
    • 天:小时:分钟:秒:DD:HH:MM:SS(如2:12:00:00表示2天12小时)
    • 简化单位格式(部分PBS版本支持):10h(10小时)、2d(2天)、30m(30分钟)

集群通常会设置默认Walltime(如1小时)和最大Walltime上限(如48小时),具体规则需参考集群用户手册。


2. 修改运行中作业Walltime的前提条件#

修改运行中作业的Walltime需满足以下条件,否则会导致修改失败:

2.1 权限要求#

  • 普通用户:仅能修改自己提交的作业,无法修改其他用户的作业(除非获得管理员授权)。
  • 集群管理员:拥有所有作业的修改权限,可调整任意用户的作业Walltime。

2.2 作业状态要求#

目标作业必须处于运行状态(R,Running)。若作业处于排队(Q)、暂停(S)或完成(C)状态,修改规则会有所不同,本文聚焦于运行中的作业。

2.3 集群配置允许修改#

  • PBS版本支持:主流PBS Pro版本均支持qalter修改Walltime,老旧版本可能存在限制。
  • 管理员开启权限:部分集群为保证调度稳定,会禁止普通用户延长Walltime,或设置修改上下限(如最多延长至集群最大Walltime)。
  • 资源充足性:延长Walltime时,集群需有足够的空闲时间片分配给该作业,否则修改请求会被调度器拒绝。

3. qalter工具修改Walltime的详细操作#

qalter是PBS提供的作业属性修改工具,可动态调整作业的Walltime、内存、节点数等参数。以下是针对运行中作业Walltime修改的具体操作:

3.1 基本语法与核心参数#

修改Walltime的核心语法:

qalter -l walltime=新时长 JOBID

参数说明:

  • -l walltime=新时长:指定作业的新最大运行时间,需符合PBS时间格式。
  • JOBID:目标作业的ID(可通过qstat -u $USER查看自己的作业ID)。

3.2 单作业Walltime修改示例#

3.2.1 延长运行中作业的Walltime#

假设用户有一个运行中的作业ID为12345,原Walltime为10小时,需延长至24小时:

# 查看作业当前Walltime信息
qstat -f 12345 | grep -E "Resource_List.walltime|resources_used.walltime"
 
# 执行修改命令
qalter -l walltime=24:00:00 12345

若修改成功,系统会返回qalter: Job 12345 modified的提示。

3.2.2 缩短运行中作业的Walltime#

若作业已完成核心任务,需提前终止以释放资源,将作业12345的Walltime从24小时缩短至5小时:

qalter -l walltime=5:00:00 12345

修改完成后,作业会在运行满5小时时被系统自动终止。

3.3 批量修改运行中作业的Walltime#

若需批量修改自己所有运行中的作业Walltime,可结合qstatawkxargs实现:

# 批量将自己所有运行中作业的Walltime设置为15小时
qstat -u $USER -s R | awk 'NR>2 {print $1}' | xargs qalter -l walltime=15:00:00

命令解释:

  • qstat -u $USER -s R:列出当前用户所有运行中的作业。
  • awk 'NR>2 {print $1}':跳过qstat表头,提取作业ID。
  • xargs qalter -l walltime=15:00:00:批量执行修改命令。

3.4 管理员修改其他用户的作业Walltime#

集群管理员可修改任意用户的作业Walltime,例如修改用户zhangsan的作业67890至48小时:

# 方法1:直接指定作业ID
qalter -l walltime=48:00:00 67890
 
# 方法2:结合用户参数(可选)
qalter -u zhangsan -l walltime=48:00:00 67890

3.5 验证修改结果#

修改完成后,通过以下命令验证Walltime是否更新成功:

qstat -f JOBID | grep -E "Resource_List.walltime|resources_used.walltime"

示例输出:

Resource_List.walltime = 24:00:00
resources_used.walltime = 02:45:30

其中:

  • Resource_List.walltime:修改后的最大允许运行时长。
  • resources_used.walltime:作业已运行的时长。

4. 常见问题与解决方案#

4.1 错误:qalter: Unauthorized Request#

原因:普通用户尝试修改其他用户的作业,或集群禁止普通用户修改Walltime。 解决方案

  • 仅修改自己的作业,若需修改其他用户的作业,联系管理员。
  • 提交工单申请管理员开启Walltime修改权限(若集群禁止)。

4.2 错误:qalter: Job is not in a modifiable state#

原因:作业状态不允许修改(如已完成、被取消)。 解决方案

  • 通过qstat JOBID确认作业状态,仅对运行中(R)的作业执行修改。
  • 若作业处于暂停状态,先执行qrun JOBID恢复作业再修改。

4.3 修改成功后作业仍被提前终止#

原因

  • 修改的时间超过集群最大Walltime上限,系统未实际应用。
  • 延长Walltime时集群无足够空闲资源支持。
  • 作业因其他错误(如内存不足)终止。 解决方案
  • 确认集群最大Walltime上限,修改为符合要求的时间。
  • 联系管理员查询集群资源情况,申请额外配额。
  • 查看作业错误日志(如JOBID.e文件)排查异常。

4.4 时间格式错误导致修改失败#

原因:使用了PBS不支持的格式(如10小时文本描述)。 解决方案

  • 使用标准格式HH:MM:SSDD:HH:MM:SS,优先避免简化格式以保证兼容性。

5. 最佳实践#

  1. 提前精准预估时长:提交作业前通过小规模测试预估运行时间,减少频繁修改需求,提升调度效率。
  2. 遵守集群规则:不请求超过集群最大Walltime上限的时长,长作业建议拆分为小任务分批提交。
  3. 仅修改必要作业:避免批量修改所有作业,减少对调度器的负担。
  4. 及时验证结果:修改后通过qstat确认Walltime更新成功,防止作业因未生效而超时终止。
  5. 缩短Walltime释放资源:作业完成核心任务后,及时缩短Walltime释放节点资源。
  6. 管理员合理配置:允许普通用户适当延长Walltime并设置上限,对长期作业开启审批流程。

6. 总结#

qalter是PBS运行中作业Walltime调整的便捷工具,无需重新提交即可灵活调整运行时长,有效避免资源浪费。使用时需注意权限、集群配置和作业状态等前提条件,遵循最佳实践确保操作顺利。若遇到复杂问题,可参考集群文档或联系管理员获取支持。


7. 参考资料#

  1. PBS Pro官方文档:PBS Pro 20.2 Reference Guide
  2. 清华大学HPC集群用户手册:Tsinghua HPC PBS使用指南
  3. 北京超级云计算中心用户手册:BSCC PBS作业调度系统