基于PBS向超算服务器队列提交任务的脚本模板与常用命令

  本文介绍在Linux服务器中,通过PBS(Portable Batch System)作业管理系统脚本的方式,提交任务到服务器队列,并执行任务的方法。

  最近,需要在学校公用的超算中执行代码任务;而和多数超算设备一样,其也是需要通过作业队列的方式,来提交、管理、排序不同用户的任务,从而使得不同用户都可以较为公平地使用超算设备的资源。由于学校的这个超算是基于PBS来提交任务的,所以这里就介绍一下撰写PBS脚本,从而将自己的代码执行需求提交给服务器(也就是提交任务)的方法。

  其中,PBS(Portable Batch System)是一个用于管理、调度计算任务的开源软件;其是一个常用的作业调度系统,用于在大规模计算集群或超级计算机上管理并分配计算资源。在使用时,我们需要首先提交作业到计算集群,PBS将会根据资源可用性、作业优先级等因素进行作业调度和分配。其基本工作流程如下:

  • 用户编写PBS脚本,描述任务的资源需求、执行命令和其他相关信息。
  • 用户使用PBS命令,将上述编写好的脚本提交到PBS系统。
  • PBS系统根据脚本中作业的资源需求和集群的可用资源情况,将作业放入作业队列中等待执行。
  • 当有可用的计算资源时,PBS系统会选择一个作业并将其分配给相应的计算节点。
  • 作业在计算节点上执行,直到完成,或达到预设的运行时间限制,或任务执行时出错等。

  那么接下来,就介绍一下撰写PBS脚本,并基于其提交自己的任务到服务器中的方法。

  首先明确一下本文的需求。已知当前在服务器的某个路径下,我们有一个.exe格式的可执行文件(或者是有1Python代码文件);我们希望后续在超算中,对这个可执行文件(或者Python代码文件)加以运行。

  明确了需求,接下来就可以开始操作。首先,如果有需要,我们可以cd进入自己的工作目录。我这里就直接进入存放有.exe格式的可执行文件的目录中;具体代码如下。

cd Data_Reflectance_Rec

  随后,基于如下代码查看一下当前路径中的文件。ls用于列出目录中的文件和子目录。

ls

  接下来,基于如下代码创建PBS脚本,我在这里将其命名为py_task.pbs;其中,.pbs就是PBS脚本文件的固定拓展名。后续我们向PBS系统提交任务时所用的脚本,就是这个文件。

touch py_task.pbs

  其中,touch是一个常用的命令,用于创建空白文件或更新已存在文件的访问和修改时间戳。创建完毕后,可以基于如下代码再次看一下当前路径下的文件。

ls

  执行上述代码,如下图所示。可以看到,py_task.pbs这个PBS脚本文件已经创建完毕了。

  创建脚本文件完毕后,我们即可开始编辑这个文件。在这里,我选择基于Vim来编辑,所以执行如下的代码即可。

vim py_task.pbs

  其中,Vim是一个强大的文本编辑器,广泛用于命令行环境下代码的编写和文本的编辑。执行上述代码,如下图所示。可以看到,py_task.pbs这个PBS脚本文件已经被Vim打开了。

  接下来,按下i键,进入文本编辑状态;如下图所示。

  随后,即可在Vim中编辑PBS脚本文件。在这里,我们给出2PBS脚本文件的模板;其中,第1个模板如下所示。

#!/bin/bash
#PBS -N py_task
#PBS -q rtlab1_4
#PBS -l nodes=1:ppn=4
#PBS -l walltime=00:30:00
#PBS -o /data1/home/LiliAircas/Data_Reflectance_Rec/task/py_task.out
#PBS -e /data1/home/LiliAircas/Data_Reflectance_Rec/task/py_task.err
hostname
date "+%Y/%m/%d %H:%M:%S"
python /data1/home/LiliAircas/Data_Reflectance_Rec/code/Alignment.py
date "+%Y/%m/%d %H:%M:%S"
最后注意记得留一个空行

  其中,第1行是一个shebang(也称为hashbang)行,指定了用于解释该脚本的解释器。在这里,/bin/bash表示该脚本将由Bash解释器执行。

  接下来,从第2行开始的这些#开头的语句,不是注释,而是PBS作业调度系统的作业指令。这些指令以#PBS开头,指定了不同的选项:-N py_task表示作业的名称为py_task-q rtlab1_4表示将作业提交到rtlab1_4队列中;-l nodes=1:ppn=4表示指定使用1个节点(node)和4个处理器(processor)来运行作业;-l walltime=00:30:00表示作业的最长运行时间为30分钟。随后的2行代码,分别指定了作业的标准输出错误输出所在的文件。

  紧接着,随后的2行分别输出当前执行脚本的主机名和当前的日期时间;随后,就开始调用Python解释器执行Alignment.py这个Python代码文件了。最后,再次输出当前的日期时间,从而使得我们可以基于其大概了解到任务的执行时长。

  最后的空行,有的教程说是为了符合脚本文件的规范,提供可读性和结构上的清晰性;也有教程说,有些版本的服务器上如果不加这个空行,会导致无法识别脚本命令。所以为了确保万一,我就加上了1行空行。

  上述脚本文件编辑完毕后,如下图所示。这里需要注意:以下截图中有些错误,例如hostname写成了Hostname,且最后一行没有空行。所以对于图片,大家仅仅参考就好;主要还是按照前述文字版代码中的格式,来修改自己的PBS脚本文件。

  此外,我们再给出1PBS脚本执行.exe格式的可执行文件的模板,具体如下。

#!/bin/bash
#PBS -N py_task
#PBS -q rtlab1_4
#PBS -l nodes=1:ppn=1
#PBS -l walltime=12:00:00
#PBS -o /data1/home/LiliAircas/Data_Reflectance_Rec/code/py_task.out
#PBS -e /data1/home/LiliAircas/Data_Reflectance_Rec/code/py_task.err
hostname
date "+%Y/%m/%d %H:%M:%S"
cd /data1/home/LiliAircas/Data_Reflectance_Rec/code
./Alignment_Server.exe
date "+%Y/%m/%d %H:%M:%S"

  其中,脚本文件的含义前面已经介绍过,这里我们就不再逐一介绍了。

  在Vim中编辑完毕自己的脚本文件后,即可保存并退出Vim。首先,我们需要按下Esc键,退出编辑模式;随后,依次输入:wq3个按键,即可保存并退出VIm

  随后,我们即可提交自己的PBS脚本文件到系统中;通过如下的代码即可实现这一功能。

qsub py_task.pbs

  上述代码会将我们前述编辑好的PBS脚本文件py_task.pbs提交到PBS作业调度系统中,并开始等待系统分配资源,从而执行作业。执行上述代码,如下图所示。

  如果没有问题的话,会出如上图所示的一个编号;这个就是我们刚刚提交的任务的ID

  当然,有的时候执行上述代码,会出现如下图所示的错误,即qsub: submit error (Unauthorized Request...)字样的报错。

  这种多数是因为将作业提交到了没有权限的队列中导致的;这种情况,需要和服务器的管理人员联系,从而获取权限。

  接下来,再介绍几个PBS系统的常用命令。

  首先,我们可以通过如下代码,获取当前超算的所有节点的情况。

pbsnodes

  执行上述代码,如下图所示;可以看到,不同节点的信息都列出来了。

  还可以在上述命令的后面,加上具体节点的名称,从而只获取指定节点的信息;如以下代码。

pbsnodes cu02

  执行上述代码,如下图所示;其中,和上图一样,每一个当前正在该节点上运行的任务的ID,都会被显示出来,例如下图中紫色框内就是某个任务的ID

  其次,我们可以通过如下代码,获取当前队列中所有任务的情况。

qstat

  执行上述代码,如下图所示;可以看到有一个任务,这个任务是我自己提交的。在我这里,执行上述代码后只能看到自己提交的任务,而看不到队列中同时存在的、其他人提交的任务——感觉这个可能是我们学校服务器管理人员自行设置的,使得每一个用户仅仅只能看到自己账户中提交的任务。

  再次,还可以通过如下的代码,查看队列中任务的详细信息。

qstat -f

  执行上述代码,如下图所示。

  此外,可以通过qdel命令加上任务的ID,删除队列中的指定任务;例如以下代码。

qdel 1250752

  执行上述代码,并在执行前后通过qstat命令查看队列中的任务,可以看到指定的任务已经被删除了——但是有延迟:执行完qdel后立刻执行qstat的话,可以看到1250752这个任务还是在的;稍后再执行qstat,才可以看到1250752任务消失。

  任务执行完毕后,我们就可以依次执行下面的2句代码,打开并查看作业的标准输出、错误输出文件。cat是一个常用的命令,用于连接指定的文件,并打印它们的内容。

cat py_task.out
cat py_task.err

  执行上述代码,如下图所示。当然,我这里因为待执行的任务存有一些权限上的错误,所以在py_task.err文件中,给出了任务执行过程中的报错内容。

  如果没有错误的话,那么大家就可以结合自己任务的实际情况,查看任务执行的结果文件了。

  至此,大功告成。

欢迎关注:疯狂学习GIS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446956.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于美洲狮优化算法(Puma Optimizar Algorithm ,POA)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行…

第十五届蓝桥杯模拟考试III_物联网设计与开发

编程题 一、基本要求 使用大赛组委会提供的四梯/国信长天物联网省赛套装(基于STM32L071KBU微控制器设计),完成本试题的程序设计与调试。程序编写、调试完成后,选手需提交两个LoRa终端对应的hex文件,LoRa终端A对应的文…

【Week Y1】调用官方权重进行检测

YOLO白皮书之调用官方权重进行检测 一、下载yolo-v5s源码,并配置编译环境二、输入本地图片查看检测结果三、输入本地视频查看检测结果 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项…

C++学习随笔(2)——引用与函数

经过上章对C有了一个初步认识后,本章我们来学习一下C的一些与C语言不同的新玩样引用,还有C的函数规则。 目录 1. 引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 (1) 做参数 (2) 做返回值…

基于YOLOv8深度学习的路面坑洞检测与分割系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

计算机设计大赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …

服务器-->网站制作-->接口开发,一篇文章一条龙服务(2)

作者:q: 1416279170v: lyj_txd前述:本人非专业,兴趣爱好自学自研,很多没有说清楚的地方见谅,欢迎一起讨论的小伙伴~ 上期回顾,了解 服务器,网站制作,接口开发之见的关系&#xff0c…

【C#语言入门】17. 事件详解(上)

【C#语言入门】17. 事件详解(上) 一、初步了解事件 定义:单词Event,译为“事件” 通顺的解释就是**“能够发生的什么事情”**,例如,“苹果”不能发生,但是“公司上市”这件事能发生。在C#中事…

Android Gradle 开发与应用 (五) : 基于Gradle 8.2,创建Gradle插件

1. 前言 本文介绍在Android中,如何基于Gradle 8.2,创建Gradle插件。 1.1 本文环境 Android Studio 版本 : Android Studio Hedgehog | 2023.1.1Gralde版本 : gradle 8.2 使用 Android Gradle 插件升级助理 Android Gradle 插件版本说明 1.2 为什么要写…

机器学习(五) -- 监督学习(1) -- 线性回归

系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 机器学习(四) -- 模型评估…

批量提取PDF指定区域内容到 Excel 以及根据PDF里面第一页的标题来批量重命名-附思路和代码实现

首先说明下,PDF需要是电子版本的,不能是图片或者无法选中的那种。 需求1:假如我有一批数量比较多的同样格式的PDF电子文档,需要把特定多个区域的数字或者文字提取出来 需求2:我有一批PDF文档,但是文件的名…

使用VBA快速梳理多层级族谱(组织架构)

实例需求:族谱(或者公司组织架构等)都是典型的带有层级关系数据,例如下图中左侧表格所示。 A列为层级(准确的讲是B列成员的层级),从一开始递增B列和C列为成员直接的父(/母&#xff…

美术馆预约小程序|基于微信小程序的美术馆预约平台设计与实现(源码+数据库+文档)

美术馆预约小程序目录 目录 基于微信小程序的美术馆预约平台设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、展品信息管理 3、美术馆信息管理 4、论坛信息管理 四、数据库设计 五、核心代码 七、最新计算机毕设选题推荐 八、源码获取&am…

谷歌BigQuery推出新玩意儿,向量搜索登场啦!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

AIGC: 2 语音转换新纪元-Whisper技术在全球客服领域的创新运用

背景 现实世界,人跟人的沟通相当一部分是语音沟通,比如打电话,聊天中发送语音消息。 而在程序的世界,大部分以处理字符串为主。 所以,把语音转换成文字就成为了编程世界非常普遍的需求。 Whisper 是由 OpenAI 开发…

【神经网络与深度学习】深度神经网络(DNN)

概述 深度神经网络(Deep Neural Networks,DNN)是一种由多个隐藏层组成的神经网络模型。每个隐藏层由多个神经元组成,这些神经元通过权重和激活函数进行信息传递和计算。 深度神经网络通过多层的非线性变换,可以学习到…

vue中实现3d词云效果(已封装组件)

<!--* Description: 词云组件 页面* Date: 2024/3/10 23:39 --> <template><div:style"{display: flex,justifyContent: center,border: 1px solid red,}"><svg:width"width":height"height"mousemove"listener($even…

Linux动态追踪——ftrace

目录 摘要 1 初识 1.1 tracefs 1.2 文件描述 2 函数跟踪 2.1 函数的调用栈 2.2 函数调用栈 2.3 函数的子调用 3 事件跟踪 4 简化命令行工具 5 总结 摘要 Linux下有多种动态追踪的机制&#xff0c;常用的有 ftrace、perf、eBPF 等&#xff0c;每种机制适应于不同的场…

ES分页查询的最佳实践:三种方案

Elasticsearch&#xff08;ES&#xff09;中进行分页查询时&#xff0c;最佳实践取决于具体的使用场景和需求。 以下是对每种分页方法的简要分析以及它们适用的情况&#xff1a; 1. From Size 最常见且直观的方法&#xff0c;通过from参数指定跳过多少条记录&#xff0c;si…

Autosar Crypto Driver学习笔记(一)

文章目录 Crypto DriverPre-ConfigurationCryptographic capabilities加密能力Available Keys可用密钥 General BehaviorNormal OperationFunctional RequirementsSynchronous Job ProcessingAsynchronous Job Processing Design NotesPriority-dependent Job Queue基于优先级的…