macでインフォマティクス

macでインフォマティクス

HTS (NGS) 関連のインフォマティクス情報についてまとめています。

ナノポアシグナルデータを効率的かつ並列に解析するための SLOW5フォーマットを扱う slow5tools

 

 現在、最もポピュラーなシグナルレベル解析は、ソフトウェアNanopolish/f5cを用いたDNAメチル化プロファイリングである。この使用例をもとに、ハイパフォーマンス・コンピューティング(HPC)システムでのFAST5データ解析について解析した(論文補足説明2)。FAST5 は、ONT が定義した特定のスキーマを持つ階層型データフォーマット 5 (HDF5) ファイルである。HDF5は、1998年に開発された単一のソフトウェアライブラリを用いてのみ読み書き可能な、大規模データ保存用の汎用ファイル形式である。分析の結果、以下のことがわかった。(1) CPUの並列スレッド数を増やすと、典型的なメチル化コールジョブの実行時間が比較的短くなること (論文Extended Data Fig. 1a) 、 (2) これは非効率なデータ処理ではなく、非効率なデータアクセス(ファイル読み込み)によること (論文Extended Data Fig. 1b) 、(3)根本的なボトルネックは、HDF5ファイルを読み込むためのソフトウェアライブラリの制限で、複数のCPUスレッドからの並列入出力(I/O)要求が直列化されてしまい、並列CPUリソースを効率的に使用できないことに原因があった(論文Extended Data Fig.)。

 並列計算は大規模データセットのスケーラブルな解析を可能にし、現代のゲノミクスの中心となっている。しかし残念ながら、FAST5フォーマットには固有の非効率性があり、高度なHPCシステムを利用しても、ナノポアシグナルデータの解析は法外に遅くなるであろう(論文図1b)。例えば、オーストラリアのNational Computing Infrastructure(世界最大級の学術用スーパーコンピュータ、論文補足表2-HPC-Lustre参照)で利用可能な最大リソース割り当てでは、約30×ヒトゲノムデータセットのゲノムワイドDNAメチル化プロファイリングに14日以上かかった。さらに、全体の実行時間の大部分(90%以上)がFAST5ファイルの読み込みに費やされていることを考えると、さらなるソフトウェアの最適化による性能向上は、ファイルの読み込みにかかる時間に比べてわずかであると思われる。

 そこで、FAST5形式固有の制限を克服するために、ナノポアシグナルデータの効率的かつスケーラブルな解析のために設計されたファイル形式、SLOW5を作成した(論文図1b)。SLOW5は、FAST5に含まれるすべての情報をエンコードしているが、FAST5ファイルの読み込みに必要なHDF5ライブラリには依存していない。SLOW5フォーマットの可読バージョンはタブ区切り値(TSV)ファイルで、1行につき1つのナノポアリードのメタデータと時系列信号データをエンコードし、グローバルメタデータはファイルヘッダに格納されている(論文表1および補足説明3)。並列ファイルへのアクセスは、SLOW5ファイル内の各リードの位置(バイト単位)を指定するバイナリインデックスファイルによって容易になる(論文補足注3)。SLOW5は、人間が読めるASCII形式か、配列アラインメントを保存するための代表的なSAM/BAM形式に類似したコンパクトで効率的なバイナリ形式、BLOW5でエンコードすることができる。バイナリ形式は、zlibおよび'vbz' (Z-standard + StreamVByte) アルゴリズムによる圧縮をオプションでサポートしており、並列アクセスを可能にしながらストレージフットプリントを最小化する。

中略

FAST5データアクセスの非効率性は、遅延と費用を生み出し、研究および臨床ゲノミクスの多くのアプリケーションにおけるONTシーケンスの実現可能性を制限している。また、このような摩擦は、ナノポアシグナルデータに直接アクセスするバイオインフォマティクスソフトウェアの開発を阻む要因にもなっている。これは、2009年に開発された、シンプルで効率的なオープンソースのSAM/BAM配列アライメントフォーマットとは対照的である。

 SLOW5フォーマットは、ナノポアシグナルデータを効率的かつ並列に解析するためのフレームワークを提供し、あらゆる用途に対応する。SLOW5の読み書きは、C言語(slow5lib)およびPython(pyslow5)言語用の効率的なソフトウェアアプリケーションプログラミングインターフェース(API)によって管理されている(論文Methods)。これにより、既存のFAST5 APIを置き換えることで、既存のパッケージを含むサードパーティソフトウェアへのSLOW5の統合が容易になる。注目すべきは、サードパーティソフトウェアSigmapがSLOW5を採用するために必要なコードはわずか〜70行であるのに対し、同じツール内のFAST5アクセスに必要なコードは〜2,600行である点であろう。これは、FAST5を読むために必要なHDF5ライブラリに依存しない、完全なオープンソースであるSLOW5 APIのシンプルさを示している。SLOW5形式のシンプルで直感的な構造とともに、ナノポアデータ解析のための活発でオープンなソフトウェア開発をサポートする。

 

Githubより

Slow5toolsは、SLOW5形式のデータの変換(FAST5 <-> SLOW5)、圧縮、閲覧、索引付け、操作のためのシンプルなツールキットです。
SLOW5は、オックスフォード・ナノポア・テクノロジーズ(ONT)社のデバイスからのシグナルデータを保存するための新しいファイルフォーマットです。SLOW5は、効率的でスケーラブルな解析を妨げ、開発者にとって多くの頭痛の種となっている標準的なFAST5シグナルデータフォーマットの固有の制限を克服するために開発されました。SLOW5は、人が読めるASCIIフォーマット、またはよりコンパクトで効率的なバイナリフォーマット(BLOW5)でエンコードすることができます - これはDNA配列アラインメントを保存するための代表的なSAM/BAMフォーマットに類似しています。BLOW5バイナリ形式は、zlib(DEFLATE)圧縮やその他の圧縮方法をサポートし、効率的な並列アクセスを可能にしながらも、データの保存領域を最小化することができます。詳細なベンチマーク実験により、SLOW5形式はFAST5形式と比較して1桁以上速く、サイズも大幅に小さいことを示しています。

 

 

slow5tools - Full documentation

https://hasindu2008.github.io/slow5tools/getting_started.html

SLOW5 Specification(v0.2)

SLOW5 Specification | slow5specs

 

インストール

ubuntu18でテストした。

Github

#conda (bioconda)
mamba install -c bioconda slow5tools -y

#binary(VERSION=v0.3.0)
wget "https://github.com/hasindu2008/slow5tools/releases/download/$VERSION/slow5tools-$VERSION-x86_64-linux-binaries.tar.gz" && tar xvf slow5tools-$VERSION-x86_64-linux-binaries.tar.gz && cd slow5tools-$VERSION/
./slow5tools

> slow5tools -h

Usage: slow5tools [OPTIONS] [COMMAND] [ARG]

Tools for using slow5 files.

 

OPTIONS:

    -h, --help       Display this message and exit.

    -v, --verbose    Verbosity level.

    -V, --version    Output version information and exit.

 

COMMANDS:

    f2s or fast5toslow5   convert fast5 file(s) to SLOW5/BLOW5

    s2f or slow5tofast5   convert SLOW5/BLOW5 file(s) to fast5

    merge                 merge SLOW5/BLOW5 files

    split                 split SLOW5/BLOW5 files

    index                 create a SLOW5/BLOW5 index file

    get                   display the read entry for each specified read id

    view                  view the contents of a SLOW5/BLOW5 file or convert between different SLOW5/BLOW5 formats and compressions

    stats                 prints statistics of a SLOW5/BLOW5 file to the stdout

    cat                   quickly concatenate SLOW5/BLOW5 files of same type [experimental]

    quickcheck            quickly checks if a SLOW5/BLOW5 file is intact

 

ARGS:    Try 'slow5tools [COMMAND] --help' for more information.

レポジトリでは自分の計算機環境でビルドする手順(必要なライブラリの導入方法や対応linuxなども)も説明されています。

 

 

実行方法  (manualの通り)

fast5ディレクトリをBLOW5ファイルに変換する

slow5tools f2s fast5_dir -d blow5_dir

出力例

input

f:id:kazumaxneo:20220107141529p:plain

output

f:id:kazumaxneo:20220107141546p:plain

非常に高速に動作する。テストデータ(80MB fast5 => BLOW5変換では0.5秒かからなかった)

 

1 つの fast5 ファイルを SLOW5 ASCII に変換する

slow5tools f2s file.fast5 -o file.slow5

 

fast5ファイルのディレクトリをBLOW5ファイルに変換する

slow5tools f2s fast5_dir -d blow5_dir -c zstd -s svb-zd

 

ディレクトリ内の全てのBLOW5ファイルを1つのBLOW5ファイルにマージする

slow5tools merge blow5_dir -o file.blow5

 

BLOW5 ファイルを SLOW5 ASCII に変換して標準出力

slow5tools view file.blow5

 

 BLOW5ファイルをSLOW5 ASCIIに変換

slow5tools view file.blow5 -o file.slow5

 

SLOW5 ファイルを BLOW5 に変換

slow5tools view file.slow5 -o file.blow5

 

 Blow5 ファイルのディレクトリを fast5 に変換

slow5tools s2f blow5_dir -d fast5

出力例(上の画像と同じデータ)

f:id:kazumaxneo:20220107141640p:plain

 

slow5/blow5 ファイルをインデックス化する

slow5tools index file.blow5

 

コメント

論文中では、FAST5から圧縮BLOW5に切り替えることで小さなデータでも読み込みが数十倍高速化された事、GPUと組み合わせると30×ヒトゲノムのメチル化プロファイリングが数十倍高速化された事、Amazon AWSやポータブルコンピューティング用の小型デバイスなどどのようなシステムでも改善が見られたこと、PromethION内蔵コンピューティングシステムに導入してシークエンシング中にリアルタイムにFAST5=>SLOW5変換できたこと(つまり待ち時間ゼロ)などが書かれています。

引用
Fast nanopore sequencing data analysis with SLOW5
Hasindu Gamaarachchi, Hiruna Samarakoon, Sasha P. Jenner, James M. Ferguson, Timothy G. Amos, Jillian M. Hammond, Hassaan Saadat, Martin A. Smith, Sri Parameswaran & Ira W. Deveson

nature  nature biotechnology  brief communications, Published: 03 January 2022

 

本当かどうかわかりませんが、SRAもこのフォーマットになるという話も出ています。