• 生信技巧 | GNU 并行操作


    简介

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

    数据并行情况

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

    处理并行

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

    不能并行的情况

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

    GNU 并行

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

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

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

    # 版本查看
    parallel --version
    • 1
    alt

    普通情况

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

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

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

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

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

    head us-counties.tab
    • 1
    alt

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

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

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

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

    ls | wc

    2580    2580   50550  # 输出结果
    • 1

    GNU示例

    • Gzip 压缩 2580 个文本文件

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

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

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

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

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

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

    本文由 mdnice 多平台发布

  • 相关阅读:
    数据结构 3:链表
    【SLAM论文笔记】PL-EVIO笔记(中)
    【2023C卷题限时免费】20天拿下华为OD笔试之 【不定滑窗】2023C-最长的指定瑕疵度的元音子串【欧弟算法】全网注释最详细分类最全的华为OD真题题解
    【SpringBoot】mockito+junit 单元测试
    2022-11-21 mysql列存储引擎-缓存心血积累
    ChinaSkills全国职业院校技能大赛Debian样题一||本专栏基于此试题,订阅前必读!!!
    外包干了3个月,技术退步明显。。。。。
    面试题:在 Java 中 new 一个对象的流程是怎样的?彻底被问懵了。。
    百战RHCE(第四十六战:运维工程师必会技-Ansible学习1-基础知识讲解)
    java游戏制作-飞翔的鸟游戏
  • 原文地址:https://blog.csdn.net/swindler_ice/article/details/133051409