この記事は、AMD 社のウェブサイトで公開されている「Picard BAM Processing: AOCL as a Practical Option for Accelerating Picard Workflows」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
2026 年 5 月 19 日

Anand Kumar
Advanced Micro Devices, Inc.
はじめに
ゲノミクス研究では、数十億におよぶ DNA シーケンス リードを効率的に処理することが重要です。現在のゲノム解析パイプラインでは、大規模なシーケンス データを処理するために、Picard や GATK などのツールが広く利用されています。Picard は、重複リードのマーキング、ソート、品質管理指標の収集など、大規模なシーケンス データの処理に広く使われています。一方、GATK は主にその後の変異検出や遺伝子型判定の工程で使用されます。
一般的なワークフローでは、これらのツールは BAM (Binary Alignment/Map) ファイルを処理します。BAM ファイルは、シーケンス リードを参照ゲノム上の位置に対応付け、その情報を圧縮されたバイナリ形式で保存するファイルです。Picard は入力 BAM ファイルを読み込んで解凍し、リードの位置情報などを含むレコードを解析します。そのうえで、重複リードのマーキングなどの処理を行い、処理済みデータを出力 BAM ファイルとして再度圧縮します。
Picard のワークフローは、正確性と再現性を重視して設計されている一方で、実際には、生物学的な解析処理そのものよりも BAM ファイルの圧縮や解凍に多くの時間がかかっています。
ここで効果を発揮するのが、AMD 最適化 CPU ライブラリ (AOCL) です。AOCL-Compression 5.3 は、標準的な圧縮アルゴリズムを高度に最適化して実装したライブラリです。AMD EPYC™ プロセッサーの機能を活用することで、既存のパイプラインのコードを変更せずに、圧縮処理に関連するボトルネックを軽減できます。
本ブログでは、プロファイリングに基づく分析を通じて、Picard の BAM ワークフローにおいて圧縮処理にどの程度時間がかかっているのかを確認し、実行時間短縮のポイントを探ります。評価には、公開されている NCBI SRA run SRR359032 から派生した代表的な全ゲノム BAM データセット (約 3,470 万件のリード、ペアエンド) を使用し、AMD AOCL-Compression 5.3 によって圧縮処理の負荷を削減し、全体的なパフォーマンスが向上することが確認できました。

図 1: Picard の BAM 処理の概要。入力 BAM ファイルのストリーミング解凍、Picard の主要な処理、出力 BAM ファイルの書き込み時に行われる再圧縮を示しています。
Picard の処理時間はどこで使われているのか
Picard MarkDuplicates のワークフローについて、全ゲノム BAM 処理時の実行時間の内訳を調べました。プロファイリングの結果、通常の Picard 実行時に時間を多く消費する要因が明らかになりました。
perf top を使用した CPU プロファイリングでは、Picard の重複検出ロジックではなく、圧縮関連の処理に実行時間の大部分が費やされていることが分かりました。CPU 使用率が最も高い関数は、BAM ファイルの読み書き時に使用される、ベクトル化された DEFLATE および INFLATE の中核処理に対応しています。この結果から、Picard の BAM 処理では、BAM I/O、特に圧縮と解凍が全体の実行時間に大きく影響していることが分かります。

図 2: CPU プロファイリングの結果、Picard MarkDuplicates の実行時には、圧縮関連の処理に多くの時間が費やされていることが分かります。割合はデータセットによって異なる場合があります。
デフォルトの圧縮設定でのベースライン パフォーマンス
最初の評価では、公開されている NCBI SRR359032 の実運用規模の全ゲノム BAM ファイルを使用し、Picard MarkDuplicates をデフォルトの圧縮設定 (圧縮レベル 5) で実行しました。
このベースライン測定では、外部の圧縮ライブラリは事前に読み込まず、USE_JDK_DEFLATER と USE_JDK_INFLATER を有効にしました。これにより、すべての BAM I/O は JDK が使用する標準の zlib 経路で処理されます。その他の Picard パラメーターは、すべてデフォルトのままとしました。
このベースライン構成では、BAM ストリームごとに圧縮と解凍がシングル スレッドで実行されます。Picard 自体も、入力ストリームと出力ストリームを通じてレコードを順次処理しており、デフォルトではマルチ スレッド圧縮は有効になっていません。
ベースライン実行は以下のとおりです。
# Run Picard with baseline configuration (compression level 5)
java -Xmx<HEAP_SIZE> -jar picard.jar MarkDuplicates \
USE_JDK_DEFLATER=true \
USE_JDK_INFLATER=true \
INPUT=<input.bam> \
OUTPUT=<output.bam> \
METRICS_FILE=<metrics.txt> \
OPTICAL_DUPLICATE_PIXEL_DISTANCE=2500 \
CREATE_INDEX=true \
TMP_DIR=/tmp
ワークフローは 5.12 分で完了しました。この実行時間には、入力 BAM ファイルの読み込みと解凍、重複リードの検出、出力 BAM ファイルの書き込み、BAM インデックスの作成が含まれます。
AOCL が Picard を高速化する仕組み
AMD AOCL-Compression ライブラリは、BAM ファイルの読み書き時に大きな割合を占める DEFLATE と INFLATE の中核処理を最適化することで、Picard の BAM ワークフローを高速化します。AOCL は、最新の x86 SIMD 命令を使用して、チェックサム計算、ハッシュ処理、データ比較を高速化します。また、圧縮パイプラインで一致箇所を検索する際の不要な処理も削減します。これらの最適化により、BAM I/O 時の CPU 負荷を大幅に軽減し、Picard がデータの圧縮に費やす時間を短縮できます。その結果、Picard は実際のゲノム解析により多くの処理時間を割けるようになります。Picard のコード、設定、出力形式を変更する必要はありません。
これらの基盤となる最適化は、AMD AOCL-Compression のコードベース内にある algos/zlib 実装で提供されています。
Picard で AOCL を使用する方法
AOCL を有効にするために、ライブラリ パスを更新し、AOCL の libz.so/libaocl_compression.so を事前に読み込むことで、実行時に AOCL-Compression ライブラリを利用できるようにしました。これにより、Picard のコードを変更することなく、BAM の圧縮処理に AOCL を使用できます。
圧縮最適化の影響を明確にするため、その他の Picard 設定はベースラインと同じにしました。
# Download and install AOCL-Compression 5.3
# Set environment variables and Run Picard with AOCL acceleration
LD_PRELOAD=/path/to/libaocl_compression.so \
java -Xmx<HEAP_SIZE> -jar picard.jar MarkDuplicates \
USE_JDK_DEFLATER=true \
USE_JDK_INFLATER=true \
INPUT=<input.bam> \
OUTPUT=<output.bam> \
METRICS_FILE=<metrics.txt> \
OPTICAL_DUPLICATE_PIXEL_DISTANCE=2500 \
CREATE_INDEX=true \
TMP_DIR=/tmp
USE_JDK_DEFLATER と USE_JDK_INFLATER は、ベースラインと同様に有効のままにしています。これにより、BAM I/O は引き続き JDK の圧縮経路を通り、事前に読み込まれた AOCL ライブラリが実行時に参照されます。
プロファイリングを実行したところ、AOCL で最適化された以下の処理に多くの時間が費やされていることが確認されました (割合はデータセットによって異なります)。
- inflate_fast_avx512: 約 30 ~ 35%
- deflate_medium: 約 20 ~ 25%
- longest_match_avx2_opt: 約 10 ~ 12%
- compress_block: 約 8%
これらの結果から、入力の読み込み時に行われる BAM の解凍と、出力の書き込み時に行われる BAM の圧縮の両方を、AOCL が実際に処理していることが確認できます。
AOCL による実行時間の改善
公開されている NCBI SRR359032 の全ゲノム BAM ファイルを使用して、AOCL-Compression がパフォーマンスに与える影響を評価しました。デフォルトの圧縮レベル (レベル 5) では、AOCL により全体の実行時間が 5.12 分から 2.85 分に短縮され、同じ入力データで約 44% の時間短縮を実現しました¹。
AOCL を使用すると、出力 BAM ファイルのサイズはベースラインより約 3.5% 小さくなりました (圧縮レベル 5 で 2.68 GiB、ベースラインでは 2.78 GiB)。実行時間だけでなく、圧縮後のファイル サイズも改善されています。

図 3: AOCL とデフォルト圧縮のパフォーマンス比較
テスト環境
本検証のすべてのベンチマークは、AMD EPYC プロセッサーを搭載したシステム上で、条件を揃えたテスト環境を使用して実行しました。
ハードウェアおよびシステム構成
- プロセッサー: AMD EPYC™ 9755 プロセッサー (128 コア)
- ソケットあたりのコア数: 128
- 同時マルチ スレッディング (SMT): 無効
- CPU 周波数: 最大 4.0 GHz (ブースト有効)
- オペレーティング システム: Ubuntu 24.04 LTS
- CPU ガバナー: パフォーマンス
ソフトウェアおよびベンチマーク構成
- Picard: バージョン 3.4.0 (picard.jar)
- Java ランタイム: OpenJDK 21.0.10 (64 ビット)
- データセット: NCBI SRA、アクセッション SRR359032
- BAM 圧縮レベル: 5 (デフォルト)
すべてのベンチマーク実行で同じハードウェア、オペレーティング システム、Picard のバージョン、および入力データセットを使用し、比較条件を揃えました。
実践的なポイント
プロファイリングとベンチマークの結果から、AMD AOCL-Compression 5.3 を使用すると、デフォルトの圧縮レベルのままでも Picard の BAM 処理を高速化できることが分かりました。Picard の設定、処理の流れ、出力形式を変更する必要がないため、既存のパイプラインにも無理なく導入できます。
BAM ファイルの読み書きでは、圧縮と解凍が処理時間の大部分を占めています。AOCL で圧縮層を最適化することで、解析結果を変えずにワークフロー全体のパフォーマンスを安定して向上させることができます。
その結果、圧縮層の最適化は、MarkDuplicates だけでなく、BAM I/O に大きく依存する Picard ベースのワークフローや、関連するゲノミクス前処理ワークフローなど幅広いワークフローで効果を発揮します。
参考文献
- Picard Tools
- SAM/BAM Format Specification
- AOCL Compression Library
- GATK (Genome Analysis Toolkit)
- AOCL Developer Portal
脚注
巻末注
¹ パフォーマンスに関する注記
パフォーマンス結果は 2026 年 5 月時点のテストに基づくものであり、現在公開中のすべてのアップデートが適用されているとは限りません。システム構成およびテスト方法の詳細については、「テスト環境」セクションを参照してください。
ベンチマーク概要
- ベースライン: 5.12 分
- AOCL 最適化時 (AOCL-Compression 5.3): 2.85 分
- パフォーマンス向上: 経過時間を 44% 短縮
- テスト データセット: NCBI SRA アクセッション番号 SRR359032 (約 3,470 万件のリード、ペアエンド)
- 圧縮レベル: 5 (デフォルト)。AOCL による最適化により、圧縮率に 1% 未満の変動が生じる場合があります。
- テスト プラットフォーム: AMD EPYC™ 9755 プロセッサー、Ubuntu 24.04 LTS、Picard 3.4.0、OpenJDK 21.0.10
結果は、システム構成、ワークロードの特性、データセットのサイズ、ソフトウェア バージョンによって異なる場合があります。
著作権および商標について
©2026 Advanced Micro Devices, Inc. All Rights Reserved.
AMD、AMD Arrow ロゴ、EPYC、AOCL、およびその組み合わせは、Advanced Micro Devices, Inc. の商標です。
Picard および GATK は Broad Institute によって開発されており、それぞれのライセンスが適用されます。
OpenJDK および Java は、Oracle Corporation およびその関連会社の商標または登録商標です。
Ubuntu は Canonical Ltd. の登録商標です。
本記事に記載されているその他の製品名は識別のみを目的としたものであり、各社の商標である可能性があります。
一部の AMD テクノロジは、第三者による有効化やアクティベーションが必要になる場合があります。サポートされる機能はオペレーティング システムによって異なる場合があります。具体的な機能については、ご利用のシステムの製造元にご確認ください。
AMD Zen Software Studio サポート サービス
エクセルソフトは AMD と提携し、HPC クラスター システムやデータ センター向けに AMD EPYC™ CPU ベースのサーバー上で動作するアプリケーションのパフォーマンスを最適化するためのソフトウェア開発ツール スイート 「AMD Zen Software Studio」 のサポート サービスを提供しています。サポート サービス導入前のご質問やご購入前の見積依頼などございましたら、エクセルソフトまでお気軽にお問合せください。


