HPC超算系列3——新手指南2

可以参考我的上一篇博客:

https://blog.csdn.net/weixin_62528784/article/details/146122850?sharetype=blogdetail&sharerId=146122850&sharerefer=PC&sharesource=weixin_62528784&spm=1011.2480.3001.8118

这一节主要是对上一节的一些内容的补充:

1,Pi2.0 超算介绍:

我们教学用的队列主要是这个队列

2,作业递交脚本模板

#!/bin/bash
#SBATCH --job-name=xxx #作业名称
#SBATCH --partition=xx #节点类型,即要使用哪个队列
#SBATCH -n xx #作业指定使用总核数,核心core数,有时也称之为进程数
#SBATCH --ntasks-per-node=xx #指定每个节点使用核数
#SBATCH --mail-type=end # 作业结束发送邮件
#SBATCH --mail-user=[your_mail_address] #指定发送邮件的地址
#SBATCH --output=%j.out #指定输出文件
#SBATCH --error=%j.err #指定报错文件

xxx #实际执行的命令

我们需要注意的是1个节点(我们可以理解为超算集群中的1台电脑)是有很多核心core数的,详情见1中的每个队列的展示;

我们此处再举几个例子,来加深一下最基本的slurm脚本理解,主要是其中的一些参数,都是我上课用的教学例子。

编写作业脚本(*.slurm),作业脚本示例:

该作业指定作业名字为 fastqc,指定 cpu 节点,作业使用总核数为 16 个核,每个节点分配 16 个核,作业计算结束给用户发送邮件,有标准的报错文件。

#!/bin/bash
#SBATCH --job-name=fastqc
#SBATCH --partition=cpu
#SBATCH -n 16
#SBATCH --ntasks-per-node=16
#SBATCH --mail-type=end
#SBATCH --mail-user=[your_mail_address] #请改成自己邮件的地址
#SBATCH --output=%j.out
#SBATCH --error=%j.err
module load fastqc
fastqc -t 40 -o ./ /lustre/share/class/BIO8402/lab/data/SRR5811639.fastq.gz
注:①其他可选参数: (Note: optional parameters)
#SBATCH -n XX #占用节点数(number of nodes)
#SBATCH --exclusive #独占节点 (number of exclusive nodes)
#SBATCH –time=[dd-hh:mm:ss] #指定作业最多运行时间 (max run time)
#SBATCH –nodelist=[nodes] #指定在该节点运行作业(specify a node(s))
#SBATCH --exclude=[nodes] #指定不在该节点运行作业 (specify not run on these nodes)
#SBATCH -o %J.out #输出结果文件 (output file name)
★区分-n 和--ntasks-per-node (Note:-n and --ntasks-per-node is different)
②当任务不支持 MPI 时时,假如要指定 cpu 节点 8 个核,-n 和--ntasks-per- node 要一起使用才能保证 8 个核心都来自同一个节点上。
(If MPI is not required for a task, if you want to assign 8 coresto a cpu node, you
should use options -n and -ntasks-per-node simultaneously to ensure the 8 cores are
from the same node.#SBATCH -n 8
#SBATCH --ntasks-per-node=8

尤其是MPI这一点,要非常关注

因为有很多软件运行的时候是不支持MPI即跨节点运行的,

所以我们在运行的时候需要注意,

如果要保证运行某个程序时所有的核心也就是进程都是来自于同一个节点,也就是用同一台电脑计算运行的,

我们就需要确保我们每个节点设置的核心数和我们指定的任务总核心数是一致的,这样才能确保这些核心都是来自于同一个节点运行,减少不可控因素的影响。

3,常用命令:

这一部分详细可以参考我的上一篇博客:
https://blog.csdn.net/weixin_62528784/article/details/146122850?spm=1001.2014.3001.5501
(1) 提交任务(task submission):sbatch blastn.slurm

(2) 杀掉任务(kill a task):scancel jobid

(3) 查看任务(check the status of a task):squeue

squeue –u “clswcc-wmz” 只展示个人目录下任务情况(only show tasks under an individual directory)

l PARTITION: 节点类型(queue name) ****cpu

l ST: 任务状态——R****:正在运行,PD:排队(task status—R: running, PD: pending)

l NODES: 任务所用节点数目(the number of nodes for a task) ****1

l NODESLIST: 任务所在节点,可通过**ssh**** **登陆该节点,例:ssh node220

(the list of node to run the task. You can use ssh to login to this node. For example, ssh node220. )

(4) 查看节点状态:sinfo (check the status of a node:sinfo)

sinfo –p cpu /gpu/fat: 查看某一类型节点状态(check the status of nodes in a queue)

STATE: drain:节点有问题,alloc:正在全部正在使用,mix:部分可以用,idle:闲置,down:节点不可用

(5) 监控和再修改作业(monitor or revise a task)

scontrol show job JOB_ID 显示该作业的一些信息

scontrol -dd show job JOB_ID 显示该作业的作业脚本

(6) module avail: 显示超算已安装的软件(show the modules installed)

module purge: 清理现有环境

module load :加载某个软件

module unload: 卸载某个软件

module list: 显示自己目录下已加载的软件

6、超算计时方法(the method to measure the computational time)

这个是我们需要掌握并且理解的,考虑到超算的计费标准。

(1)CPU 计时方法(CPU time measuring method)

单个作业所消耗的机时,与其运行时长及使用的CPU 核心数有关,

计算公式为T= t * n

n 为作业使用的CPU 核心数,t 为作业的运行时长(单位:小时,作业排队时间不计入消耗的机时),T 为该作业消耗的机时量(单位:核小时)。

例:一个作业在独占一个16 核的cpu 节点,运行一个小时则消耗机时为16 核小时。Pi2.0 单个cpu 节点上的核数可能有所增加。请注意查看具体情况。

(2)GPU 计时方法(GPU time measuring method)

运行在GPU 队列上的作业,机时使用是按照CPU 耗时折算而来的。一个GPU

节点上配置了96 个CPU 核,包括16 块GPU 加速卡。

GPU 机时的计费单位是“卡小时”(cardhours),卡小时与用于计算CPU 机时费的单位“核小时”(corehours) 换算关系为1 cardhour = 120 corehours(该换算关系比较老了,现在交大的换算关系应该不是这个了)

例:一个作业独占一个GPU 节点运行一个小时则消耗机时为16*120 核小时!

  1. 读写压缩文件的小窍门(压缩状态下分析文件的方法)(tricks using compressed files)

8,除了超算,生科院生信系的小超算:使用系教学集群时参考(任务递交系统为 torque),而非slurm

(1)Environment Module

• 可用Environment Modules 切换多个版本的工具软件

• 查看可用软件及版本:module avail

• 加载工具:module load

• 卸载工具:module unload

• 查看当前加载工具:module list

(2)作业调度系统常用命令

qstat(查看作业状态,作业结束一段时间后不能查看)

(3)作业调度系统脚本示例,脚本模板如下:

请在你自己熟悉的编辑器中按如上模板编辑如下脚本,保存为test.pbs

另外一个例子:
RNA 序列比对——以 blast 为例建库+比对

9,对于我之前测试运行时间的脚本的更正:
参考我的博客:
https://blog.csdn.net/weixin_62528784/article/details/146118720

(1)之前的写法我是slurm中写个循环,也就是在同一个脚本内依次执行 4/8/16/32/64 线程

#!/bin/bash
#SBATCH --job-name=blast
#SBATCH --partition=cpu
#SBATCH -n 64                 # 申请最多 64 核
#SBATCH --ntasks-per-node=64
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --mail-type=end
#SBATCH --mail-user=zht161932@sjtu.edu.cn

module load blast-plus

# 声明一个线程列表
THREADS_LIST=(4 8 16 32 64)

for THREADS in "${THREADS_LIST[@]}"; do
  echo -e "Testing -num_threads=$THREADS starts at $(date).\n"
  start=$(date +%s)

  blastn -query /lustre/share/class/BIO8402/lab/data/SRR5029637.fasta \
    -db /lustre/share/class/BIO8402/lab/test/chr21 \
    -evalue 1e-5 \
    -outfmt 7 \
    -max_target_seqs 1 \
    -num_threads "$THREADS" \
    -out /lustre/home/acct-stu/stu542/hw/test_class3/blast_time_test/n${THREADS}t${THREADS}

  end=$(date +%s)
  time=$(( end - start ))
  echo -e "difftime for -num_threads=$THREADS is $time s\n"
done

(2)第2种方法就是提供shell脚本的$1参数:通过脚本参数 $1 指定线程数

将下方脚本另存为 blast_param.sh,提交作业时通过 sbatch blast_param.sh 8 等方式指定线程参数

#!/bin/bash
#SBATCH --job-name=blast
#SBATCH --partition=cpu
#SBATCH -n 64
#SBATCH --ntasks-per-node=64
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --mail-type=end
#SBATCH --mail-user=zht161932@sjtu.edu.cn

module load blast-plus

if [ -z "$1" ]; then
  echo "Usage: sbatch $0 <threads>"
  exit 1
fi

THREADS=$1

start=$(date +%s)

blastn -query /lustre/share/class/BIO8402/lab/data/SRR5029637.fasta \
  -db /lustre/share/class/BIO8402/lab/test/chr21 \
  -evalue 1e-5 \
  -outfmt 7 \
  -max_target_seqs 1 \
  -num_threads "$THREADS" \
  -out /lustre/home/acct-stu/stu542/hw/test_class3/blast_time_test/n${THREADS}t${THREADS}

end=$(date +%s)
time=$(( end - start ))
echo "Blast job with $THREADS threads took $time s"

(3)在脚本中写一个循环,依次提交多个作业:
此方法会自动为列表中的每个线程数提交一个独立作业:

#!/bin/bash

THREADS_LIST=(4 8 16 32 64)

for THREADS in "${THREADS_LIST[@]}"; do

  sbatch <<EOF
#!/bin/bash
#SBATCH --job-name=blast
#SBATCH --partition=cpu
#SBATCH -n $THREADS                  # 申请 $THREADS 核(如有需要,可改为更大值)
#SBATCH --ntasks-per-node=$THREADS
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --mail-type=end
#SBATCH --mail-user=zht161932@sjtu.edu.cn

module load blast-plus

start=\$(date +%s)

blastn -query /lustre/share/class/BIO8402/lab/data/SRR5029637.fasta \
  -db /lustre/share/class/BIO8402/lab/test/chr21 \
  -evalue 1e-5 \
  -outfmt 7 \
  -max_target_seqs 1 \
  -num_threads $THREADS \
  -out /lustre/home/acct-stu/stu542/hw/test_class3/blast_time_test/n${THREADS}t${THREADS}

end=\$(date +%s)
time=\$(( end - start ))
echo "Blast job with $THREADS threads took \$time s"
EOF

done

————————————————》

一些draft

每个节点(机器)有40个核,每个核有4内存

内存需要20G的话,如果一个节点是4G内存,需要多核至少5核

单个节点最大40G,最高192G内存

时间也要省(时间复杂度+计算资源计算),空间也要省(压缩+压缩形式下读写)

压缩时间忽略不计:
读写在硬盘上,cpu都计算超过硬盘

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

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

相关文章

Ubuntu20.04搭建gerrit code review

一、环境准备 1. 安装 Java 环境‌ Gerrit 依赖 Java 运行环境&#xff08;推荐 JDK 8&#xff09;&#xff1a; sudo apt install openjdk-11-jdk 验证安装&#xff1a; java -version ‌2. 安装 Git sudo apt install git ‌3. 可选依赖 数据库‌&#xff1a;Gerrit …

爬虫案例七Python协程爬取视频

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Python协程爬取视频 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 爬虫案例七协程爬取视频 提示&#xff1a;以下是本篇文章正文…

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249&#xff0c; webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间&#xff0c;下面介绍下如何修改配置这个区间。 从页面上修改这个区间&#xff0c;端口区间尽量设置大…

从连接到交互:SDN 架构下 OpenFlow 协议的流程与报文剖析

在SDN架构中&#xff0c;交换机与控制器之间的通信基于 OpenFlow协议&#xff0c;其设计目的是实现控制平面与数据平面的解耦。以下是 交换机连接控制器 和 数据包进入交换机触发交互 的详细流程及协议报文分析&#xff1a; 一、交换机连接控制器的流程&#xff08;初始化阶段&…

每日一练之反转链表

题目&#xff1a; 画图解答&#xff1a; 方法&#xff1a;三指针 代码解答&#xff08;带解析&#xff09;&#xff1a; //题目给的结构体 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct Lis…

虚拟机总结| 关于虚拟机的一些配置总结

前言 每次安装新的虚拟机都需要重新在网上搜索如何配置网络&#xff0c;我需要写一个自己的部署步骤&#xff0c;增加工作效率&#xff0c;不用每次配置的时候再去网上去翻找。 1.只需要联网功能记录(不固定IP) 1.1 修改ifcfg-ens33 vi etc/sysconfig/network-scripts/ifcfg…

【数据结构初阶】---堆的实现、堆排序以及文件中的TopK问题

1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&…

Autojs无线连接vscode方法

1.获得电脑的IP 在电脑的CMD界面输入 ipconfig 然后找到ipv4的那一行&#xff0c;后面的即是你的电脑IP地址 2.打开vscode的autojs服务 安装autojs插件 在vscode界面按下ctrlshiftp 输入autojs 找到 点击 之后打开手机上的autojs 之后输入刚刚电脑上的地址 可以看到vsc…

【Java开发指南 | 第三十五篇】Maven + Tomcat Web应用程序搭建

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 前言Maven Tomcat Web应用程序搭建1、使用Maven构建新项目2、单击项目&#xff0c;连续按两次shift键&#xff0c;输入"添加"&#xff0c;选择"添加框架支持"3、选择Java Web程序4、点击&…

PyTorch深度学习框架60天进阶学习计划第16天:循环神经网络进阶!

PyTorch深度学习框架60天进阶学习计划 - 第16天&#xff1a;生成对抗网络原理 学习目标 今天我们将深入探讨生成对抗网络(GAN)的基本原理和数学基础&#xff0c;重点解析GAN的minimax博弈公式&#xff0c;推导生成器与判别器的损失函数&#xff0c;分析Wasserstein GAN的改进…

系统架构设计师—系统架构设计篇—微服务架构

文章目录 概述优势挑战 概述 微服务是一种架构风格&#xff0c;将单体应用划分成一组小的服务&#xff0c;服务之间相互协作&#xff0c;实现业务功能&#xff0c;每个服务运营在独立的进程中&#xff0c;服务间采用轻量级的通信机制协作&#xff08;通常是HTTP/JSON&#xff0…

静态时序分析STA——2. 数字单元库-(2)

参考文献 [1]Static Timing Analysis for Nanometer Designs A Practical Approach [2]静态时序分析圣经翻译计划 三.组合逻辑单元的时序模型 对于一个两输入与门的时序弧&#xff0c;两个时序弧均为正单边类型&#xff08;positive_unate&#xff09;。这意味着对于 NLDM 模型…

Mysql的卸载安装配置以及简单使用

MySQL其它问题已经更新在&#xff1a;MySQL完善配置---可视化-CSDN博客 一、卸载 ①控制面板卸载 ②C盘隐藏项目>ProgramData>mysql相关文件夹&#xff0c;还有Program file下的MySQL文件夹 ③开始菜单栏搜索>服务&#xff0c;找到MySQL相关服务删除&#xff0c;如果再…

第五课:Express框架与RESTful API设计:技术实践与探索

在使用Node.js进行企业应用开发&#xff0c;常用的开发框架Express&#xff0c;其中的中间件、路由配置与参数解析、RESTful API核心技术尤为重要&#xff0c;本文将深入探讨它们在应用开发中的具体使用方法&#xff0c;最后通过Postman来对开发的接口进行测试。 一、Express中…

基于Django的协同过滤算法养老新闻推荐系统的设计与实现

基于Django的协同过滤算法养老新闻推荐系统&#xff08;可改成普通新闻推荐系统使用&#xff09; 开发工具和实现技术 Pycharm&#xff0c;Python&#xff0c;Django框架&#xff0c;mysql8&#xff0c;navicat数据库管理工具&#xff0c;vue&#xff0c;spider爬虫&#xff0…

Facebook 的隐私保护数据存储方案研究

Facebook 的隐私保护数据存储方案研究 在这个信息爆炸的时代&#xff0c;数据隐私保护已成为公众关注的热点。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;承载着海量用户数据&#xff0c;其隐私保护措施和数据存储方案对于维护用户隐私至关重要。本文将深…

World of Warcraft [CLASSIC] BigFoot BiaoGe

World of Warcraft [CLASSIC] BigFoot BiaoGe 金团表格插件 设置60秒拍卖装备时间 ALT 鼠标左键&#xff0c;点击装备&#xff0c;弹出对话框&#xff0c;填写 1&#xff09;拍卖时间默认60秒&#xff0c;起拍价&#xff0c; 2&#xff09;点击【开始拍卖】 团队所有安装了…

Docker和DockerCompose基础教程及安装教程

Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…

题解:洛谷 AT_dp_c Vacation

题目https://www.luogu.com.cn/problem/AT_dp_c设 表示对于前 天&#xff0c;以 项目结尾能获得的最大价值。 则&#xff1a; 答案为&#xff1a;。 实现 #include<bits/stdc.h> using namespace std; #define int long long int n,dp[100005][3]; signed main(){i…

通义万相2.1:开启视频生成新时代

文章摘要&#xff1a;通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具&#xff0c;它通过核心技术的升级和创新&#xff0c;为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…