有效利用资源

概述

学习时间: 10 min
练习时间: 30 min
问题
  • 我们如何监控我们的作业?

  • 如何更轻松地安排我的作业?

目标
  • 了解如何查找作业统计信息和个人资料代码。

  • 了解作业规模的影响。

我们已经介绍了与HPC集群交互所需的所有技能:通过SSH登录、加载软件模块、提交并行作业以及查找输出。让我们了解估计资源使用情况以及它为何重要。

使用调度器估计所需资源

尽管我们之前使用π介绍了从调度器请求资源。我们如何知道软件首先需要什么类型的资源,以及对每种资源的需求?一般来说,除非软件文档或用户推荐提供一些想法,否则我们不会知道程序需要多少内存或计算时间。

阅读文档

大多数HPC设施将文档保存为wiki、网站或在您注册帐户时发送的文档。查看这些资源,并搜索您计划使用的软件:有人可能已经编写了充分利用它的指南。

确定作业成功运行所需资源的一种简便方法是提交测试作业,然后使用sacct -u yourUsername向调度器询问其影响。您可以使用这些知识来设置下一个作业,并更准确地估计其在系统上的负载。一个好的一般规则是要求调度器比您预期的作业需要多20%到30%的时间和内存。这可确保运行时间或内存使用的微小波动不会导致您的作业被调度器取消。请记住,如果您要求太多,即使有足够的资源可用,您的作业也可能无法运行,因为调度器将等待其他人的作业完成并释放与您要求的内容匹配所需的资源。

统计数据

由于我们已经提交了pi.py以在集群上运行,我们可以查询调度器以查看我们的作业花费了多长时间以及使用了哪些资源。我们将使用sacct -u yourUsername 来获取有关parallel-pi.sh的统计信息。

[yourUsername@gra-login1 ~]$ sacct -u yourUsername
JobID    JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
1964               bash   standard    default          1  COMPLETED      0:0
1964.extern      extern               default          1  COMPLETED      0:0
1964.0             bash               default          1  COMPLETED      0:0
1965         build-ind+ summer-sc+    default          1  COMPLETED      0:0
1965.batch        batch               default          1  COMPLETED      0:0
1965.extern      extern               default          1  COMPLETED      0:0

这显示了我们最近运行的所有作业(请注意,每个作业有多个条目)。要获取有关特定作业的信息,我们稍微更改命令。

[yourUsername@gra-login1 ~]$ sacct -u yourUsername -l -j 1965

它将显示很多信息,事实上,调度器在您的作业中收集的每条信息。将此信息重定向到less以使其更易于查看可能很有用(使用左右箭头键滚动浏览字段)。

[yourUsername@gra-login1 ~]$ sacct -u yourUsername -l -j 1965 | less

一些有趣的领域包括:

从当前运行的任务中测量系统负载

通常,集群允许用户从头节点直接连接到计算节点。这对于检查正在运行的作业并查看它的运行情况很有用,但通常不是推荐的做法,因为它绕过了资源管理器。为了降低干扰其他用户的风险,一些集群只允许您连接到您正在运行作业的节点。让我们通过看看现在登录节点上正在运行什么来练习。

使用top监控系统进程

检查当前系统统计信息的最可靠方法是使用top。一些示例输出可能如下所示(输入q退出top):

[yourUsername@gra-login1 ~]$ top
top - 21:00:19 up  3:07,  1 user,  load average: 1.06, 1.05, 0.96
Tasks: 311 total,   1 running, 222 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.2 us,  3.2 sy,  0.0 ni, 89.0 id,  0.0 wa,  0.2 hi,  0.2 si,  0.0 st
KiB Mem : 16303428 total,  8454704 free,  3194668 used,  4654056 buff/cache
KiB Swap:  8220668 total,  8220668 free,        0 used. 11628168 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1693 jeff      20   0 4270580 346944 171372 S  29.8  2.1   9:31.89 gnome-shell
 3140 jeff      20   0 3142044 928972 389716 S  27.5  5.7  13:30.29 Web Content
 3057 jeff      20   0 3115900 521368 231288 S  18.9  3.2  10:27.71 firefox
 6007 jeff      20   0  813992 112336  75592 S   4.3  0.7   0:28.25 tilix
 1742 jeff      20   0  975080 164508 130624 S   2.0  1.0   3:29.83 Xwayland
    1 root      20   0  230484  11924   7544 S   0.3  0.1   0:06.08 systemd
   68 root      20   0       0      0      0 I   0.3  0.0   0:01.25 kworker/4:1
 2913 jeff      20   0  965620  47892  37432 S   0.3  0.3   0:11.76 code
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd

最重要领域的概述:

htop使用 curses为top提供了一个覆盖,在您的终端中生成一个组织更好、“更漂亮”的仪表板。不幸的是,它并不总是可用的。如果是这种情况,请让您的系统管理员为您安装它。

[yourUsername@gra-login1 ~]$ htop

ps

要显示当前会话中的所有进程,请键入ps

[yourUsername@gra-login1 ~]$ ps
  PID TTY          TIME CMD
15113 pts/5    00:00:00 bash
15218 pts/5    00:00:00 ps

请注意,这只会显示我们当前会话的进程。 要显示您拥有的所有进程(无论它们是否属于您当前会话的一部分),您可以使用 ps ux

[yourUsername@gra-login1 ~]$ ps ux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
yourUsername  67780  0.0  0.0 149140  1724 pts/81   R+   13:51   0:00 ps ux
yourUsername  73083  0.0  0.0 142392  2136 ?        S    12:50   0:00 sshd: yourUsername@pts/81
yourUsername  73087  0.0  0.0 114636  3312 pts/81   Ss   12:50   0:00 -bash

这对于识别哪些进程正在做什么很有用。

关键点

  • 您的作业作越小,安排的速度就越快。