生信技巧 | GNU 并行操作

妙玉
• 阅读 989

简介

有些分析需要很长时间,因为它在单个处理器上运行并且有大量数据需要处理。如果数据可以分成块并单独处理,那么问题就被认为是可并行化的。

数据并行情况

  • 当文件的每一行都可以单独处理时
  • 基因组的每条染色体都可以单独处理
  • 组件的每个脚手架都可以单独处理

处理并行

  • 压缩或解压缩 10 到 100 个文件
  • 计算大文件中的行数
  • 将许多样本的原始测序数据文件与基因组进行比对

不能并行的情况

基因组组装并不是简单的可并行化,因为第一步需要将每个读数与其他读数进行对齐,以便找到哪些读数相似并且应该连接(组装)。获取读取的子集会导致低质量的组装结果。

GNU 并行

我们用来并行化生物信息学问题的程序是 GNU 并行。它是“一种使用一个或多个计算节点并行执行作业的 shell 工具”。 GNU 并行可帮助您运行原本要按顺序一项一项或循环运行的作业。您可以查看 GNU Parallel 网站,以确定如何在集群上安装 Parallel 和/或了解如何使用它。

  • ubuntu安装
sudo apt update  # 更新包列表
sudo apt install parallel

# 版本查看
parallel --version
  • 集群,我们加载模块并查看版本
# 集群load 模块
module load parallel  

# 版本查看
parallel --version

生信技巧 | GNU 并行操作

普通情况

我们将使用纽约时报 github 存储库整理的 COVID-19 数据

mkdir GNU-parallel
cd GNU-parallel
wget https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv

这是一个逗号分隔的文件,所以让我们将其转换为制表符分隔的文件

more us-counties.csv  | tr ',' '\t' > us-counties.tab

如您所见,此数据包含各县和州有关疫情随时间变化的信息。

head us-counties.tab

生信技巧 | GNU 并行操作

让我们按县/州分开这些数据,而不是一个大文件

使用 sort 和 awk,我们可以首先按县/州对文件进行排序,然后使用 awk 将每一行 ($0) 打印到名为 County-state.tab 的文件中。

sort -k 2,3 us-counties.tab | awk '{print $0 > $2"-"$3".tab"}'

这将生成 2578 个文件 + 我们下载的原始 2 个文件

ls | wc

2580    2580   50550  # 输出结果

GNU示例

  • Gzip 压缩 2580 个文本文件

让我们复制数据并比较使用 for 循环与使用并行运行 gzip 需要多长时间

mkdir -p gzip/parallel
mkdir -p gzip/forloop
cp *.tab gzip/parallel
cp *.tab gzip/forloop
  • GNU 并行/gzip/forloop
cd gzip/forloop
time for f in *.tab; do gzip $f; done
real    0m15.801s
user    0m1.414s
sys     0m5.045s

然而,我们可以通过使用 GNU 并行来更好地利用所有可用的 CPU。该函数的使用方法是:

  • 并行命令
  • -j10 用于处理的作业或 cpu 数量。这里我们使用 10 个 cpu。
  • 在本例中,“command”为 gzip {},其中 {} 是占位符,用于替换分隔符后定义的文件列表
  • ':::' 分隔符
  • .tab 文件列表,对以 tab 结尾的任何文件使用 运算符
parallel -j10 "gunzip {}" ::: *.tab.gz

real    0m5.519s
user    0m0.376s
sys     0m1.367s

正如您所看到的,这将 gziping 命令的速度提高了 2.3 倍。这可能会有所不同,具体取决于您拥有的 CPU 数量及其速度。

本文由mdnice多平台发布

点赞
收藏
评论区
推荐文章
Stella981 Stella981
4年前
GeoJson数据合并
本文主要是基于geojsonmerge,实现多个geojson文件合并为一个geojson文件,以便实现基于该文件进行数据分析展示geojson合并概述当前在datav的geoatlas中,可以下载单个地市或区县的数据,例如福建省下面每个地市都可以单独下载一个geojson文件,现在需要将所有地市的geojson合并为
Wesley13 Wesley13
4年前
Java并发(三):重排序
在执行程序时为了提高性能,提高并行度,编译器和处理器常常会对指令做重排序。重排序分三种类型:1.编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。2.指令级并行的重排序。现代处理器采用了指令级并行技术(InstructionLevelParallelism,ILP)来将多条指令重叠执行。如果不存在数据依
Wesley13 Wesley13
4年前
Java并发和多线程那些事儿
我记得我接触电脑的时候是在小学三年级的时候,那是1995年,那年发布了windows95,但是我学习的时候还是只是dos系统,简单对于文件的一些命令操作还有五笔在过去的那个年代,电脑都是单CPU,也就是单任务处理;多任务处理到后来才慢慢发展起来,多任务代表电脑在同一时刻内可以处理很多并行操作,这样CPU被利用率高了,多个任务都可以共享。多任务处理的出现对
Stella981 Stella981
4年前
MapReduce的工作原理
MapReduce简介MapReduce是一种并行可扩展计算模型,并且有较好的容错性,主要解决海量离线数据的批处理。实现下面目标★易于编程★良好的扩展性★高容错性MapReduce有哪些角色?各自的作用是什么?MapRedu
Wesley13 Wesley13
4年前
Go 并发
Go并发并发指的是同时处理多个任务的能力。并行指的是并行处理多个任务的能力。并行不一定加快运行速度,因为并行组件之间可能需要互相通信。Go中使用协程,信道来处理并发。协程Go中主要通过协程实现并发。协程是与其他函数或方法一起并发运行的函数或方法,协程可以看作是轻量级线程,但是创建成本更小,我们经常
Wesley13 Wesley13
4年前
Go 中的并发和并行
并行是指同一时间做多件事情,并发是指同一时间具有做多件事情的能力。在很多情况下,并发的效果比并行好,因为操作系统的硬件资源和总资源是很少而且固定的,不能无限去扩张。Go语言设计的时候应该也是推崇这种使用较少资源做更多事情的哲学。并发执行Go语言中可以使用系统功能设置可以使用的物理处理器(核),如果设置为1的话,所有的协程会在一个核上
Stella981 Stella981
4年前
Hadoop技术原理总结
Hadoop技术原理总结1、Hadoop运行原理Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,其最核心的设计包括:MapReduce和HDFS。基于Hadoop,你可以轻松地编写可处理海量数据的分布式并行程序,并将其运行于由成百上千个结点组成的大规模计算机集群上。基于MapReduce计算模型编写分布式并行程序相对简单,
Wesley13 Wesley13
4年前
go——并发(二)
通常程序会被编写为一个顺序执行并完成一个独立任务的代码。如果没有特别的需求,最好总是这样写代码,因为这种类型的程序通常很容易写,也容易维护。不过也有一些情况下,并行执行多个任务会有更大的好处。一个例子是,Web服务需要在各自独立的套接字上同时接收多个数据请求。每个套接字请求都是独立的,可以完全独立于其它套接字进行处理。具有并行执行多个请求
Stella981 Stella981
4年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event
聊一聊Java中的Steam流 | 京东物流技术团队
在我们的日常编程任务中,对于集合的制造和处理是必不可少的。当我们需要对于集合进行分组或查找的操作时,需要用迭代器对于集合进行操作,而当我们需要处理的数据量很大的时候,为了提高性能,就需要使用到并行处理,这样的处理方式是很复杂的。流可以帮助开发者节约宝贵的时间,让以上的事情变得轻松。
HPC的基本概念
HPC(HighPerformanceComputing)是一种高性能计算技术,它利用大规模并行处理器集群或超级计算机等高性能计算设备,以及高速网络互联技术,实现对大规模数据和复杂计算任务的高效处理和分析。