生信技巧 | GNU 并行操作

简介

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

数据并行情况

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

处理并行

  • 压缩或解压缩 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

普通情况

我们将使用纽约时报 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

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

使用 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多平台发布

相关推荐
协享科技8 小时前
前端 SSE 流式响应处理实践:从接收、解析到渲染
前端·人工智能·程序人生·go·ai编程·sse
星栈独行11 小时前
10 分钟跑起第一个 Makepad 应用:先把窗口开起来
前端·程序人生·ui·rust·开源·github
luweis1 天前
企智孪生 ETA (6.5 人机协同:定义“协作界面 (Collaboration UI)”)【杭州联保致新科技有限公司 卢伟舜】
网络·人工智能·科技·程序人生·创业创新·学习方法
luweis1 天前
企智孪生 ETA (6.3 数字人格 (Digital Persona) 的构建工程、6.4 交互触点:全场景嵌入策略)【杭州联保致新科技有限公司 卢伟舜】
人工智能·程序人生·机器学习·自然语言处理·职场和发展·知识图谱·学习方法
星栈独行1 天前
Makepad、egui、Dioxus、Tauri:Rust GUI 到底怎么选
开发语言·后端·程序人生·ui·rust
郝学胜-神的一滴1 天前
Qt 高级开发 025:打造优雅界面的艺术与高效重构之道
开发语言·c++·qt·程序人生·重构·软件构建·用户界面
郝学胜-神的一滴1 天前
干货版《算法导论》08:哈希——重构集合数据结构的速度魔法
数据结构·python·程序人生·算法·重构·软件构建·哈希算法
郝学胜-神的一滴2 天前
Qt 高级开发 024:QSplitter分裂器布局精讲
开发语言·c++·qt·程序人生·用户界面
小李云雾2 天前
深入浅出 Vue 3 核心知识点:从基础到实战
前端·javascript·vue.js·程序人生
这个DBA有点耶2 天前
当时间数据不再只是“曲线”:聊聊时序数据库和融合分析
数据库·sql·程序人生·云原生·运维开发·时序数据库·业界资讯