武汉超级计算机中心,武汉大学超算中心

用户使用 scancel 命令取消自己的作业。命令格式如下:

scancel jobid

jobid 可通过 squeue获得。对于排队作业,取消作业将简单地把作业标记为 CANCELLED 状态而结束作业。对于运行中或挂起的作业,取消作业将终止作业的所有作业步,包括批处理作业脚本,将作业标记为 CANCELLED 状态,并回收分配给作业的结点。一般地,批处理作业将会马上终止;交互作业的 srun 进程将会感知到任务的退出而终止;抢占结点资源的 salloc 进程不会自动退出,除非作业所执行的用户命令因作业或任务的结束而终止。但是在作业被取消时,控制进程都会发送通知消息给分配资源的 srun 或 salloc 进程。用户可以选择通过 salloc 的 "–kill-command" 选项设置在收到通知时向所执行的命令发送信号将其终止。

6. 作业提交示例

通过对简单示例HelloWorld程序的提交,大家可以了解作业提交的基本步骤,体会使用 srun 和 sbatch 命令提交作业的区别。

在命令提示符下输入:vim HelloWorld.c

[simon@n0255 ~]$vim HelloWorld.c

说明:

vim 为Linux下常用的编辑器,HelloWorld.c为文件名,如果当前目录下不存在该文件,则新建并编辑,如果存在,打开并编辑。

按下 i 键进入插入模式:

6e8e72062c9f2859e61663de5456dc8a.png

输入以下内容:#include

int main()

{

printf("Hello world!\n");

return(0);

}

输入完成后按下 Esc 键 退出插入模式,然后输入 :wq 写入并退出。此时,输入ls,应该能看到刚刚建立的文件:[simon@n0255 ~]$ ls

data HelloWorld.c

接下来,我们要调用系统的编译器来将我们刚才建立的HelloWorld.c源程序编译成可执行文件:[simon@n0255 ~]$ gcc HelloWorld.c

[simon@n0255 ~]$ ls

a.out data HelloWorld.c

说明:

gcc 即为系统的C编译器(也可以使用Intel的 icc编译器),后面接你的源程序。

使用 ls 列出当前目录内容 可以看到生成了名为a.out的程序。接下来,我们执行 a.out 查看下结果:[simon@n0255 ~]$ ./a.out

Hello world!

[simon@n0255 ~]$

说明:

./a.out 中. 代表当前目录。Hello world! 即为程序的输出了。

注意:目前你运行的这个程序是在你当前登录的这个节点,也就是n0255上运行的,这个节点也就一个普通的服务器,拥有16个CPU核,如果是运行很多个像我们这样的HelloWorld的程序还是没有啥问题的,但是如果你的一个程序运行需要很长的运行时间,那么16核的CPU就不够用了。特别是这个登录节点同时还有其他用户登录同时使用的,所以登录节点是禁止运行大量的、长时间占用CPU时间的程序的。此时我们就需要使用调度系统(SLURM),将我们的程序投放到其它的节点上来运行。[simon@n0255 ~]$ srun -p hpxg ./a.out

Hello world!

[simon@n0255 ~]$

srun为我们提交程序,用于把我们程序提交到整个集群系统的节点上去运行的。-p 用于指定分区,hpxg为分区名,我们的集群根据底层网络连接类型分成了hpxg(万兆网络互连,目前已经升级为Infiniband网络互连)、hpib(Infiniband网络互连)、debug(调试用途分区)分区。使用sinfo命令,我们查看各个分区的情况:

7f9812ffde500e7ef6f85003e06037fd.png

我从之前运行的情况来看,输出 Hello World!好像直接在n0255登录节点输出没啥两样,现在我们将程序稍微修改下,就可以看出运行的不同了:

[simon@n0255 ~]$vim HelloWorld.c

按 i 进入插入模式,输入:

#include

#include

int main()

{

char hostname[1024];

gethostname(hostname,1024);

printf("%s:",hostname);

printf("Hello world!\n");

return(0);

}

说明:上述程序改动的作用就是在输出Hello World!之前获取主机名并输出。按 Esc 退出插入模式,然后按 :wq 保存并退出。

[simon@n0255 ~]$ gcc HelloWorld.c

[simon@n0255 ~]$ ./a.out

n0255:Hello world!

可以看出,直接运行的程序前面有了 n0255 的主机名了。接下来,我们使用 srun来进行提交看看:

[simon@n0255 ~]$ srun -p hpxg ./a.out

n0242:Hello world!

[simon@n0255 ~]$

由此可以看出,我们这个Hello World!应该是在节点n0242上运行了。

接下来,我们继续修改一下源程序,用来模拟长一点时间(100s)的程序:

#include

#include

int main()

{

char hostname[1024];

sleep(100);

gethostname(hostname,1024);

printf("%s:",hostname);

printf("Hello world!\n");

return(0);

}

上面程序先sleep了100s,然后才有输出。vim HelloWorld.c,然后 gcc 编译,重新生成 a.out,并运行:

292344d2c30eeed66b17c6cb080d7bc3.png

可以看出,程序运行没有返回到命令行,处于等待输入或输出的状态。所以以 srun 提交的程序处于处于交互模式下。

一般只有在程序运行后需要用户人工判断进行输入时才使用交互模式。处于交互模式下运行的程序被人工退出(如Ctrl+c、终端关闭等)或因登录节点故障退出时,程序运行节点的程序也会退出。

当我们进程不需要人工干预时,我们可以使用sbatch命令来进行任务的提交,这样无论是终端退出或登录节点故障都不会影响到我们实际运行的程序。

要使用sbatch提交程序,我们只需要写一个很简单的脚本:[simon@n0255 ~]$ vim a.sbatch

新建一个a.sbatch(名字或后缀可以随便取)输入以下内容:

#!/bin/bash

./a.out

保存退出,然后给这个脚本加上可执行的权限:[simon@n0255 ~]$ chmod +x a.sbatch

接着使用 sbatch 提交:[simon@n0255 ~]$ sbatch -p hpxg a.sbatch

Submitted batch job 2653283

[simon@n0255 ~]$

可以看到,提交会返回了一个job的ID(2653283),之后便又回到了命令提示符的状态。接下来,我们便可以使用 squeue 来查看我们已经提交了的作业的信息:

b0969fbcc2e5f0a2690186d31cb24ab9.png

squeue的输出我们可以看出我们提交的任务的ID(JOBID),运行所在的分区(PARTITION),任务的名称(NAME),运行的用户(USER),任务状态(ST,R表示正在运行),运行了的时间(TIME),使用了多个节点(NODES)以及使用了的节点的列表(NODELIST)。

任务运行完之后,如果需要查看我们程序的输出情况,默认会在提交任务的目录产生 slurm-jobid.out的文件,所有任务运行的错误已经标准输出会重定向至此文件中。

squeue 只能查看正在运行的任务。如果想查看已经结束的任务历史,可以使用 sacct命令:

65259fdf2cf841be863159c99dfaa39a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值