有效利用资源
概述
学习时间: 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
一些有趣的领域包括:
- 主机名:您的作业在哪里运行?
- MaxRSS:使用的最大内存量是多少?
- Elapsed:这项作业花了多长时间?
- 状态:目前的作业是什么/发生了什么?
- MaxDiskRead:从磁盘读取的数据量。
- MaxDiskWrite:写入磁盘的数据量。
从当前运行的任务中测量系统负载
通常,集群允许用户从头节点直接连接到计算节点。这对于检查正在运行的作业并查看它的运行情况很有用,但通常不是推荐的做法,因为它绕过了资源管理器。为了降低干扰其他用户的风险,一些集群只允许您连接到您正在运行作业的节点。让我们通过看看现在登录节点上正在运行什么来练习。
使用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
最重要领域的概述:
PID
: 每个进程的数字id是多少?USER
: 谁开始了这个进程?RES
: 进程当前使用的内存量是多少(以字节为单位)?%CPU
: 每个进程使用多少CPU? 高于100%的值表示进程正在并行运行。%MEM
: 进程使用的系统内存百分比是多少?TIME+
: 到目前为止,一个进程使用了多少CPU时间? 使用2个CPU的进程以正常速率的两倍累积时间。COMMAND
: 使用什么命令启动进程?
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
这对于识别哪些进程正在做什么很有用。
关键点
您的作业作越小,安排的速度就越快。