这是用户在 2024-5-7 15:56 为 https://app.immersivetranslate.com/pdf-pro/8124fe7d-e345-46a0-90bf-9550ee51c9fb 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?
2024_05_07_5a6327d0122d3ddd6bc6g


GTZ:针对 FASTQ 文件优化的快速压缩和云传输工具


Yuting Xing , Gen , Zhenguo Wang , Bolun Feng , Zhuo Song and Chengkun Wu


摘自第 16 届国际生物信息学大会(InCoB 2017)

中国,深圳2017 年 9 月 20-22 日

 摘要


背景:DNA 测序技术的飞速发展正在产生真正的大数据,对存储和带宽的需求也越来越大。为了加快数据共享,使数据更快、更便宜地进入计算资源,有必要开发一种压缩工具,以支持测序数据在云存储中的高效压缩和传输。


结果本文介绍了针对 FASTQ 文件优化的压缩和传输工具 GTZ。作为一种无参考无损 FASTQ 压缩器,GTZ 分别处理 FASTQ 的不同行,利用自适应上下文建模来估计它们的特征概率,并用算术编码压缩数据块。GTZ 还可用于一次性压缩多个文件或目录。此外,作为云计算时代的一种工具,它还能将压缩后的数据保存在本地或直接传输到云端。我们在一些不同的 FASTQ 基准上评估了 GTZ 的性能。结果表明,在大多数情况下,它在压缩率、速度和稳定性方面都优于许多其他工具。


结论GTZ 是一种可实现高效无损 FASTQ 数据压缩并同时向云端传输数据的工具。它是在云环境中存储和传输 NGS 数据的有用工具。GTZ 可在以下网址免费在线获取:https://github.com/Genetalks/gtz。

关键词FASTQ、压缩、通用、无损、并行压缩和传输、云计算

 背景介绍


下一代测序(NGS)极大地促进了基因组分析的发展,这对实现精准医疗的目标至关重要。然而,累积测序数据的指数级增长给 NGS 数据的传输和存储带来了严峻挑战。高效的压缩方法为解决这一日益突出的问题提供了可能。

以前,一般压缩工具,如 gzip ( http://www.gzip.org/)、bzip2 ( http://www.bzip.org/) 和 ( www.7-zip.org) 都被用来压缩 NGS 数据。这些工具没有利用

基因组数据的特点,如字母表小、序列片段重复等,为性能优化留下了空间。最近,针对 NGS 数据开发了一些专门的压缩工具。这些工具有的是基于参考的,有的是无参考的。主要区别在于是否使用额外的基因组序列作为参考。基于参考的算法会对目标序列和参考序列之间的差异进行编码,并消耗更多内存以提高压缩性能。GenCompress [1] 和 SimGene [2] 使用各种熵编码器,如算术编码器、Golomb 编码器和 Huffman 编码器来压缩整数值。这些值显示读数的属性,如起始位置、读数长度等。一种名为 GReEn [3] 的统计压缩方法使用自适应模型,根据字符的频率估算概率。然后用算术编码器对概率进行压缩。

QUIP [4] 在 FASTQ 数据的所有三个部分中利用了与阶-3 和高阶马尔可夫链模型相关的算术编码。LW-FQZip [5] 利用增量和运行长度限制编码方案分别压缩元数据和质量分数。通过轻量级映射模型对读数进行预处理,然后通过通用工具(如 LZMA)将三个部分组合起来进行压缩。Fqzcomp [6] 通过阶k上下文建模估计字符概率,并借助算术编码器压缩 FASTQ 格式的 NGS 数据。

然而,如果目标序列和参考序列之间的相似度较低,基于参考的算法就会效率低下。因此,无参照方法也被提出来解决这一问题。Biocompress 是一种专门针对基因组序列的压缩方法。其主要思想基于经典的基于字典的压缩方法--Ziv 和 Lempel[8]压缩算法。重复序列和回文序列使用其最早出现的长度和位置进行编码。作为生物压缩[7]的扩展,生物压缩-2[9]利用了相同的方案,并在不存在明显重复的情况下使用阶次为 2 的算术编码。DSRC 算法[10]将序列分割成块,并使用 LZ77[8] 和 Huffman[11] 编码对其进行独立压缩。该算法在压缩和解压缩速度上都比 QUIP 快,但在压缩比上不如 QUIP。DSRC2 [12] 是 DSRC [10] 的多线程版本,它将输入分成三个流进行预处理。预处理后,元数据、读取和质量分数在 DRSC 中分别进行压缩。SCALCE [13] 是一种提升算法,可对读取数据进行重新组织,在大多数数据集上,其压缩率和压缩速度都优于其他算法。

如今,云计算在基因组分析中的重要性与日俱增。然而,上述工具都是为本地使用而开发的。在开始将数据传输到云端之前,必须在本地完成压缩。

文献[14]中提出的 AdOC 是一种通用工具,可在分布式计算环境中实现压缩与通信的重叠。它提出了一种具有动态压缩级别适应性的传输级压缩模型,可用于资源可用性和带宽变化不可预测的环境。

一般来说,通用压缩算法(如 AdOC)对 NGS 数据集的压缩效果并不理想。

在本文中,我们介绍了一种工具 GTZ,它是一种无损、高效的压缩工具,可与云计算结合使用,用于大规模基因组数据分析:

  1. GTZ 利用上下文模型技术,结合多种预测建模方案。它采用并行处理技术来提高压缩速度。

  2. GTZ 可以将目录或文件夹压缩成一个单一的归档文件,这就是所谓的多流文件系统。这种一体化方案可以满足传输、验证和存储的目的。

  3. GTZ 支持对文件或档案的随机访问。GTZ 采用块存储,因此用户可以从 FASTQ 文件或文件夹中的某些文件中提取基因组序列的某些部分,而无需对压缩归档文件进行完全解压缩。

  4. GTZ 可以在压缩过程中将压缩块传输到云存储中,与其他压缩工具相比,这是一项新功能。该功能可大大缩短数据传输时间,减少压缩和数据传输到云所需的总时间。例如,它可以在 14 分钟内将 200GB 的 FASTQ 文件压缩并传输到 AWS 和阿里巴巴云存储等云存储设备。

  5. GTZ 提供了 Python API,用户可通过该 API 将 GTZ 灵活地集成到自己的应用程序中。

在本文的其余部分,我们将介绍 GTZ 的工作原理,并使用 AWS 服务评估其在几个基准数据集上的性能。

 方法


GTZ 支持高效的并行压缩、并行传输和随机获取。图 1 展示了 GTZ 处理的工作流程。

GTZ 涉及客户和云端的程序。

客户采取以下步骤

(1) 读入大型数据文件流。

(2) 对输入数据进行预处理,将数据流分为三个子流:元数据、基本序列和质量分数。

(3) 在本地存储器中缓冲子数据流,并将其组合成不同类型、大小固定的数据块。

(4) 对组装好的数据块及其描述进行压缩,然后将输出块传输到云存储中。

在云上执行以下步骤

(1) 创建三种面向对象的容器(如图 2 所示),它们定义了一个树形结构。

(2) 循环并等待接收客户端发送的输出块。

图 1 德国技术合作署的工作流程

(3) 将接收到的输出块按类型保存到块容器中。

(4) 如果不再收到输出块,则停止。

下面我们将进一步详细解释处理 FASTQ 文件的所有步骤:


客户端读取大型数据文件流


原始 NGS 数据文件通常以 FASTQ 格式存储,以便于压缩。典型的 FASTQ 文件每个序列包含四行:第 1 行以字符 " "开头,后跟序列标识符;第 2 行保存由 A、C、 和 G 组成的原始序列;第 3 行以字符 "+"开头,后跟相同的序列标识符(和任何描述);第 4 行保存第 2 行中序列字符的 ASCII 字符对应质量分数。表 1 给出了一个读取示例。
 数据预处理

在第二步中,数据流被分成元数据子流、基本序列子流和质量子流。


数据容器的层次结构

表 1 FASTQ 文件的格式
@ERR194147.1.HSQ1004:134:C0D8DACXX:1:1104:3874:86,238/1
2 GGTTCCTACTTNAGGGTCATTAAATAGCCCACACGTC
3 +
4

得分子流。(由于无信息的注释行通常不会提供任何有用的压缩信息,因此在预处理过程中会省略注释流)。三种日期预处理控制器分别对子数据流进行缓冲,并以固定大小保存在数据块中。之后,带有注释(关于块的数量、块的大小和流的类型)的数据块被发送到相应的压缩单元。图 3 演示了如何借助预处理控制器和压缩单元对数据文件进行预处理。

 压缩数据


GTZ 是一种通用压缩工具,使用统计建模 ( http://marknelson.us/1991/02/01/ arithmetic-coding-statistical-modeling-data-compression/) 和算术编码。

统计建模可分为两类:静态统计建模和自适应统计建模。传统的方法通常是静态的,即从头到尾扫描序列后计算概率。静态建模保留了一个记录字符频率计数的静态表。虽然这种方法能得出相对准确的结果,但缺点也是显而易见的:

  1. 在压缩前将所有序列读入主存储器非常耗时。

  2. 如果输入流与之前累积的序列不匹配,压缩率就会降低,甚至输出流会比输入流大。

在 GTZ 中,我们采用了一种基于上下文建模的自适应统计数据压缩技术。自适应建模无需在编码前扫描整个序列并生成概率。相反,自适应预测技术提供即时读取和压缩,即根据已读入内存的字符计算概率。概率会随着扫描字符的增加而改变。最初,由于缺乏读取,自适应统计建模的性能可能较差。不过,随着处理的序列增多,预测往往会更加准确。

压缩器每编码一个字符,就会更新预测表中的计数器。当出现一个新字符 时(假设 之前的序列是 ),GTZ 将遍历预测表,找出 之前出现过的每个字符,并比较它们的出现频率。例如,如果 ABCDX 都出现了 10 次,而 只出现了一次。那么 GTZ 将赋予 更高的概率。

自适应模型的工作流程如图 4 所示。更新模型 "框表示将低阶模型转换为高阶模型(低阶和高阶的含义将在下一小节讨论)。

自适应预测建模可有效缩短压缩时间。它无需在同一时间读取所有序列,并引入了扫描和压缩的重叠。

GTZ 对不同类型的数据块使用特定的压缩单元:基因序列使用低阶编码器,质量分数使用多阶编码器,元数据使用混合编码器。最后,该程序的输出是固定大小的数据块。

算术编码的主要思想是根据字符的预测概率,将读数转换为范围从 0 到 1 的浮点数(精确地说是大于等于 0 小于 1)。如果统计建模能为压缩器准确估算出每个字符,我们就能获得很高的压缩性能。相反,如果预测不准确,可能会导致原始序列扩大,而不是压缩。因此,压缩器的性能很大程度上取决于统计建模能否输出接近最优的预测概率。


用于读数的低阶编码器


自适应建模最简单的实现方式是零阶。确切地说,它不考虑任何上下文

图 3 使用预处理控制器和压缩单元对数据文件进行预处理

图 4 典型统计建模的工作流程

因此,这种短视建模只能看到当前字符,并做出与之前序列无关的预测。同样,阶 1 编码器也是根据前面的一个字符进行预测。因此,低阶建模对压缩器性能的贡献很小。它的主要优点是非常节省内存。因此,对于没有空间位置性的质量分数流,低阶建模足以满足中等压缩率的要求。

图 5 展示了我们为读取量身定制的低阶编码器。第一步是使用 BWT 算法转换序列。BWT(Burrows-Wheeler 变换)将读数重新排列成相似字符的序列。第二步,使用零阶和一阶预测模型计算每个字符的出现概率。由于概率精度不高会导致不理想的编码结果,我们在对加权平均概率进行量化后增加了插值,以减少预测误差并提高压缩率。在最后一个程序中,位算术编码算法产生从 0 到 1 的小数作为输出来表示序列。


质量分数多阶编码器


统计建模需要运算算法的非均匀概率分布。通过高阶建模,可以对经常出现的字符采用高概率,而对不经常出现的字符采用低概率。因此,与低阶编码器相比,高阶编码器可以增强自适应建模能力。

高阶建模会考虑当前位置之前的几个字符。它可以获得更好的压缩性能,但会占用更多内存。由于内存容量有限,高阶建模的使用较少,但这已不再是问题。

在不进行转换的情况下,质量分数的多阶编码器(见图 6)包括两个程序:

首先,为生成字符概率,输入流流经扩展字符概率预测模型,该模型由一阶、二阶、四阶、六阶预测模型和匹配模型组成。与低阶编码器一样,字符概率经过加权平均、量化和插值后得到最终结果。其次,我们采用比特算术编码算法进行压缩。


元数据混合方案


对于元数据子流,德国技术合作公司首先使用分隔符(标点符号)将其分割成不同的段,然后根据不同的字段使用不同的方法处理元数据:

对于按升序或降序排列的数字,我们采用增量编码来表示一个元数据与前面相邻元数据的变化。例如,"3458644 "将压缩为 3,1,1,3,-2,-2,0。对于连续的相同字符,我们利用运行长度限制编码来显示它们的值和数量。

图 5 低阶编码器方案

图 6 多阶编码器方案

重复。对于各种精度的随机数,我们通过 UTF-8 编码转换其格式,不添加任何分隔符,然后使用低阶编码器进行压缩。否则,使用低阶编码器压缩元数据。

总之,在这一过程中,子数据流被送入动态概率预测模型和算术编码器,并被转换成固定大小的压缩块。

 数据传输


主要目标是将输出数据块传输到某个云存储平台,并标注数据块的类型、大小和数量。

需要注意的是,不同类型的编码器可能会导致压缩速度不一致,从而导致数据管道堵塞。因此,在我们的系统中,管道过滤模式的设计使输入和输出速度同步,例如,当输入流的速度快于输出流的速度时,输入流将被堵塞;当没有输入流时,管道也将被堵塞。


云端存储--创建面向对象的嵌套容器系统


GTZ 将容器创建为存储隔间,为管理实例和存储文件目录提供了一种方法。它们以树形结构组织。容器可以嵌套来表示实例的位置:根容器表示完整的压缩文件;块容器包括不同类型的子流容器,其中存储了特定的实例。嵌套结构如图 2 所示。

根容器代表一个 FASTQ 文件,它容纳 个块容器,每个块容器包括元数据子容器、基序列子容器和质量分数子容器。元数据子容器嵌套重复数据块、随机数据块、增量数据块等。基序子容器和质量分数子容器嵌套 0 实例块到 实例块。以基序为例,0 至 (N-1) 个输出块存储在第 0 个块容器中, 至 ( ) 个输出块存储在第 1 个块容器中,以此类推。

表 2 用于性能评估的 8 个 FASTQ 数据集说明
Dataset Species  参考基因组大小 Encoding
数据文件中的质量分数数量
ERR233152  绿脓杆菌 556 Sanger 32
SRR935126 A. thaliana 9755 Sanger 39
SRR489793 C. elegans 12,807 Illumina 1.8+ 38
SRR801793 L. pneumophila 2756 Sanger 38
SRR125858 H. sapiens 50,744 Sanger 39
SRR5419422
RNA seq(H. sapiens)
15,095 Illumina 1.8+ 6
ERR1137269 metagenomes 56,543 Illumina 1.8+ 7
 NA12878 (读 2) H. sapiens 202,631 Sanger 38

表 3 不同工具在 8 个 FASTQ 数据集上的压缩率
Dataset  压缩比 (%)
GTZ DSRC2 QUIP LW-FQZip Fqzcomp LFQC pigz
ERR233152 15.9 16.7 19 19 16.8 26.4
SRR935126 18.6 19.6 17.7 20.5 17.8 30.2
SRR489793 22.8 22.7 22.6 25.5 22.5 34.4
SRR801793 21.4 21.9 21.1 21.2 20.8 34.1
SRR125858 19.4 19.5 18.9 23.1 28.9 31
SRR5419422 12.8 13.9 10.9 12.5 12 ERROR 22
ERR1137269 12.2 13.4 12.8 14.3 11.9 ERROR 21.9
 NA12878 (读 2) 19.8 24 20.4 TLE 19.9 TLE 24.7
avg 17.86 18.96 17.93 19.44 18.83 28.09
SD 3.87 3.97 4.07 4.64 5.60 3.62 5.05
CV 0.22 0.21 0.23 0.24 0.30 0.30

所有工具的最佳结果均以粗体标出

这种层次结构允许用户维护一个目录结构来管理压缩文件,从而方便对特定序列的随机访问。在此,我们将展示如何从压缩包中解压和提取目标文件:在解压模式下,系统将索引起始行号 (由用户通过命令行给出),然后从相应的块容器中获取特定序列,并压缩序列中的某些行(也由用户指定)。


接收数据 - 接收并存储输出块


云存储平台接收输出块和描述信息,如数据块的数量、数据块的大小,最重要的是数据块中每个基本序列的行号。有了这些描述信息,我们就能直接索引某些带有行号的序列,并解码其附属块,而不是提取整个文件。输出块存储在相应类型的容器中。

值得注意的是,非 FASTQ 文件也可以通过 GTZ 进行压缩和传输。此外,GTZ 使用面向对象编程,它不受限制。

图 7 不同工具与特定类型云存储平台交互的压缩率 CV,但适用于大多数现有云存储平台,如亚马逊网络服务和阿里巴巴云。

 结果和讨论


在本节中,我们在内存容量为 的 32 核 AWS R4.8xlarge 实例上进行了实验,以评估 GTZ 在压缩比和压缩速度方面的性能。在实验过程中,需要注意以下几点:

(1)考虑到我们的方法是无损耗的,我们排除了允许损耗的对应方法。

(2) NGS 数据可以 FASTQ 或 SAM/ BAM 格式存储,我们只考虑针对 FASTQ 格式文件的工具。

(3) 在不对输入序列重新排序的算法之间进行比较。

我们在 8 个可公开访问的 FASTQ 数据集上进行了测试,这些数据集是从 NCBI 发起的序列读取档案(SRA)和 GCTA 竞赛网站(https://tianchi.aliyun.com/mini/challenge.htm#training-profile)上下载的。为了确保评估的全面性,我们选择了不同类型的数据集:数据集的大小从 到 202 , ;选择了不同物种和不同类型的数据,包括 DNA 读数、一个智人的 RNA-seq 数据集、一个元基因组数据集和 NA12878 的读数 2(GCTA 竞赛数据集)。选择不同的质量分数编码方法,如 Sanger 和 Illumina ,以涵盖数据集中不同数量的质量分数。质量分数与错误概率呈对数关系,导致字母表比元数据和读数大,因此质量分数数量少的编码通常有助于提高压缩性能。描述

表 4 不同工具在 8 个 FASTQ 数据集上的压缩时间
Dataset
Size
(MB)
 压缩时间(秒)
DSRC2 QUIP LW-FQZip Fqzcomp LFQC pigz
ERR233152 556.1 19 13 10 284 13 297 3
SRR935126 9754.6 49 40 195 3966 191 3610 129