シングルセル解析にどれくらいのマシンが必要か ─ メモリ・GPU・VRAM の決め方

未分類
📚 この記事について
解析が手元のマシンで止まる原因を、メモリ・CPU・GPU の3つに分けて整理します。どの工程で何が足りなくなるのかを先に把握すれば、買うべきかどうか、買うなら何を優先すべきかを自分で判断できます。
🔙 前の記事scRNA-seqの前処理 入門 ─ 全体像と進め方
🔜 次の記事scVIだけじゃない:scvi-tools の全体像
📌 前提:Scanpy で読み込みからクラスタリングまで一度動かしたことがあること

シングルセル解析を進めていると、細胞数が増えた時点で処理が終わらなくなる、あるいはメモリ不足で落ちる場面に出会います。ここで問題になるのは「マシンが遅いこと」ではなく、どの資源が、どの工程で、どれだけ必要かを把握していないことです。本記事では要求を数値で見積もり、購入以外の選択肢も含めて整理します。

1. 足りなくなるのはメモリが先


最初に押さえるべき点は、シングルセル解析で最初に頭打ちになるのはCPU の速さではなくメモリの量だということです。CPU が遅ければ処理は待てば終わりますが、メモリが足りなければ処理は落ちます。待てるものと落ちるものでは、対処の優先度が違います。

発現行列がどれだけメモリを占めるかは、保持のしかたで大きく変わります。まず、その2つの形式を確認します。

💡 密行列と疎行列
密行列は、行列のすべての位置に値の置き場所を用意する形式です。0 であっても場所を取ります。細胞数 × 遺伝子数の分だけ、必ずメモリを消費します。疎行列は、0 でない値だけを「値」と「どの位置か」の組で保持する形式です。0 の場所には何も置きません。scRNA-seq のカウント行列は、1 細胞で検出される遺伝子が全体の 1 割程度にとどまるため、大半が 0 です。疎行列で保持すれば、この 0 の部分を丸ごと省けます。

Scanpy は読み込んだデータを既定で疎行列として扱います(Wolf et al., Genome Biology, 2018)。ただし adata.X.toarray() を呼んだときや、疎行列に対応していない関数へ渡したときには、内部で密行列へ変換されます。

両者のメモリ消費は計算できます。遺伝子 2 万、値を float32(1 個 4 バイト)とすると、密行列は細胞数 × 20,000 × 4 バイトです。疎行列は、1 細胞あたり 2,000 遺伝子が検出されている場合、値と位置で 1 個あたり 8 バイトとして、細胞数 × 2,000 × 8 バイトになります。

図1:細胞数と発現行列のメモリ使用量(疎行列と密行列の比較)
図1:細胞数と発現行列のメモリ使用量(疎行列と密行列の比較)

差は 5 倍です。10 万細胞の場合、疎行列のままなら 1.6 GB で、メモリ 16 GB のノートパソコンでも扱えます。これに対し 密行列に変換すると 8 GB となり、同じマシンでは他の処理と合わせて容量が足りなくなります。この差は、密行列へ変換された瞬間に現れます。扱う細胞数を減らさなくても、疎行列のまま処理を通すだけで回避できる問題です。

⚠️ 実際に必要なメモリは表の数倍
上の数値は行列を 1 つ保持したときの量です。実際の解析では adata.raw への退避、layers への正規化前カウントの保存、関数内部で作られる一時的なコピーが重なります。保持サイズの 3〜5 倍を見込んでおくと、処理の途中で落ちる事態を避けられます。10 万細胞なら 16 GB、50 万細胞なら 64 GB が実務的な下限です。

2. 工程ごとに要求される資源


すべての工程が同じ資源を必要とするわけではありません。重要なのは、GPU が要るかどうかは工程そのものではなく、その工程でどの手法を選ぶかで決まるという点です。

図2:シングルセル解析の各工程が必要とする資源
図2:シングルセル解析の各工程が必要とする資源

読み込みから正規化・次元削減・クラスタリングまでの標準的な流れは、GPU がなくても最後まで完結します。近傍グラフの構築と Leiden 法は CPU の並列処理で動くため、コア数を増やせば時間は短くなりますが、GPU を足しても速くなりません。この範囲では、GPU に予算を割く意味がありません。

同じことは、統合とダブレット検出にも当てはまります。統合をHarmony で行えば CPU で足ります。原論文は、10 万細胞規模の統合を個人のコンピュータで実行できると報告しています(Korsunsky et al., Nature Methods, 2019)。ダブレット検出も、scrublet を選べば GPU は不要です。つまり古典的な手法で揃えれば、前処理から下流解析まで GPU なしで通せます

一方、同じ目的に深層学習を使う手法を選ぶと、GPU が実質的に必要になります。統合のscVI(Lopez et al., Nature Methods, 2018)、ダブレット検出のSOLO(Bernstein et al., Cell Systems, 2020)、細胞型アノテーションのscGPT や Geneformer がこれに当たります。CPU でも動作はしますが、学習に要する時間が現実的でなくなります。

3. VRAM は細胞数に比例しない


GPU を検討するとき、VRAM(GPU に載っているメモリ)の量が焦点になります。ここで誤解しやすいのは、細胞数が増えれば同じだけ VRAM が要る、という考え方です。実際には比例しません。

scVI や SOLO はミニバッチ学習を採用しています。全細胞を一度に GPU へ送るのではなく、数百細胞ずつ小分けにして学習を繰り返す方式です(Lopez et al., Nature Methods, 2018)。そのため VRAM の消費量を決めるのは、細胞の総数ではなく1 回に送る細胞数(batch_size)と潜在変数の次元です。細胞数が 10 倍になっても、VRAM 消費はほとんど変わりません。増えるのは学習時間です。

💡 VRAM が足りないときの対処
学習が VRAM 不足で落ちる場合、batch_size を小さくすれば通ります。1 回に送る細胞数が減るだけで、結果が大きく変わるわけではありません。VRAM は「足りなければ設定で下げられる」資源で、システムメモリのように容量で行き詰まる性質のものではありません。

事情が変わるのが基盤モデルです。scGPT は 3,300 万細胞以上で事前学習されたtransformer モデルで(Cui et al., Nature Methods, 2024)、モデル本体のパラメータを GPU に載せる必要があります。推論だけなら比較的軽く済みますが、自分のデータで追加学習を行う場合は要求が跳ね上がります。この用途を見込むなら、VRAM の大きい構成を選ぶ意味があります。

用途 VRAM の目安 考え方
scVI・SOLO の学習 8 GB でも可 batch_size で調整できる
基盤モデルの推論 12 GB 以上 モデルを載せられる量が要る
基盤モデルの追加学習 24 GB 以上 勾配とオプティマイザの状態が加わる
💡 どちらを選ぶかは資源だけで決めない
GPU を使う手法が常に優れているわけではありません。Harmony と scVI、scrublet と SOLO は、それぞれ前提とする仮定も得意な状況も違います。GPU があるから深層学習側を選ぶ、という決め方ではなく、データの性質と目的で選んだうえで、その手法に必要な資源を用意するのが順序です。
⚠️ GPU の種類の制約
Scanpy 周辺の深層学習ツールは CUDA を前提に実装されているため、NVIDIA 製の GPUが必要になります。Apple Silicon の GPU や AMD 製 GPU では、動作しないか対応が限定的なことがあります。Mac を使っている場合、GPU が要る工程だけ別の環境に投げる形が現実的です。

4. 手元で持つか、外の計算機を使うか


必要な資源が見えたら、それをどこに用意するかを決めます。手元のマシン、所属機関の計算機、クラウドの3つが選択肢で、どれが良いかは解析の内容によって変わります。

GPU を使わない範囲であれば、手元のマシンで十分に完結します。実際、日常的なシングルセル解析の多くは GPU なしで行われています。メモリを十分に積んだデスクトップを1台用意すれば、読み込みから下流解析までを自分の裁量で回せます。共用計算機のように順番待ちがなく、パラメータを変えて何度も試す作業がそのまま速くなるので、試行錯誤が中心の段階ではむしろ手元にあるほうが効率的です。データを外へ送らずに済む点も、扱うデータによっては重要になります。

所属機関の計算機が向くのは、手元では届かない規模の処理です。数百万細胞のアトラスを扱う、メモリを数百 GB 使う、基盤モデルの追加学習に大容量の VRAM が要る、といった場面が該当します。共用サーバーには個人では用意できない構成があるので、そこだけ外に出すという使い分けが現実的です。接続とジョブ投入の手順はClaude Science からラボの計算機を使う ─ SSH でジョブを投げる(近日公開) で扱っています。

クラウドは、GPU が要る工程が年に数回という場合に向きます。使った時間だけ費用が発生するので、常時使わないなら購入より安く済みます。ただしデータの転送量と保管費用が別にかかる点、ヒト由来データを扱う場合は所属機関の規程を確認する必要がある点に注意してください。

解析の設計を見直すことで、必要な資源そのものを下げられる場合もあります。全細胞を一度に処理せず、サブサンプリングで方針を確かめてから本番を回す、中間結果をディスクに書き出して工程を分割する、といった手順が有効です。手元のマシンで足りるかどうかは、構成だけでなく処理の組み立て方でも変わります。

状況 向いている選択
GPU を使わない標準的な解析 手元のマシン
パラメータを変えて何度も試す段階 手元のマシン
scVI や SOLO を日常的に使う 手元のマシン(GPU 搭載)
数百万細胞・メモリ数百 GB 所属機関の計算機
基盤モデルの追加学習 所属機関の計算機、またはクラウド
GPU が要る工程が年に数回 クラウド

5. 買うと決めたときの優先順位


購入する場合、限られた予算をどこに配分するかが問題になります。シングルセル解析では次の順序が合理的です。

  • 1. メモリ容量:足りないと処理が落ちる。最初に決める。10 万細胞規模なら 64 GB、より大きい規模や空間トランスクリプトームを見込むなら 128 GB。
  • 2. GPU:深層学習を使う工程があるなら。使わないなら不要。
  • 3. ストレージ:FASTQ や中間ファイルは容量を消費する。NVMe SSD の 2 TB 以上を確保しておくと、読み書きの待ち時間も減る。
  • 4. CPU コア数:近傍グラフ構築とクラスタリングが速くなる。ただし落ちるか落ちないかを分ける要素ではないので、優先度は最後。
⚠️ メモリの拡張性を先に確認する
購入時に全額をメモリに充てられなくても、後から増設できる構成を選んでおけば対応できます。確認すべきは、メモリスロットの数、空きスロットが残るか、マザーボードが対応する最大容量の3点です。スロットが全て埋まった状態で届くと、増設時に既存のメモリが無駄になります。

GPU を積むかどうかは、使う手法が決まってから判断すれば足ります。古典的な手法で揃える予定なら、その予算をメモリに回すほうが効果があります。下流解析の多くも CPU とメモリで完結します。後から GPU を足せる構成にしておけば、必要になった時点で対応できます。

6. 注意点


  • メモリは容量を優先する:速度の等級より、搭載できる総量を優先します。足りない状態は設定で回避できません。
  • VRAM 不足は設定で回避できるbatch_size を下げれば通ります。システムメモリとは性質が違います。
  • CUDA が使えるかを確認する:深層学習を使う予定があるなら NVIDIA 製 GPU が必要です。
  • 手元で足りる範囲を見極める:GPU を使わない標準的な解析なら、メモリを積んだ手元のマシンで完結します。手元では届かない規模の処理だけ、所属機関の計算機やクラウドに出す形が現実的です。
  • 疎行列のまま処理する:不用意に密行列へ変換すると、図1 の右側の量が一度に必要になります。

まとめ


  • 最初に足りなくなるのは CPU の速さではなくメモリの量。落ちるか落ちないかを分ける。
  • 発現行列の必要量は計算できる。疎行列と密行列で 5 倍の差がつく。
  • 実務では保持サイズの 3〜5 倍を見込む。10 万細胞で 16 GB、50 万細胞で 64 GB が下限。
  • GPU が要るかどうかは工程ではなく、その工程でどの手法を選ぶかで決まる。Harmony・scrublet など古典的な手法で揃えれば、前処理から下流解析まで GPU なしで通せる。
  • VRAM は細胞数に比例しない。ミニバッチ学習なので batch_size で調整できる。
  • GPU を使わない範囲なら手元のマシンで十分完結する。手元では届かない規模だけ所属機関の計算機やクラウドに出す。
  • 購入するときの優先順位はメモリ、GPU、ストレージ、CPU の順。

関連記事


参考文献


  • Wolf, F. A., Angerer, P., & Theis, F. J. (2018). SCANPY: large-scale single-cell gene expression data analysis. Genome Biology, 19(1), 15. doi:10.1186/s13059-017-1382-0
  • Lopez, R., Regier, J., Cole, M. B., Jordan, M. I., & Yosef, N. (2018). Deep generative modeling for single-cell transcriptomics. Nature Methods, 15(12), 1053–1058. doi:10.1038/s41592-018-0229-2
  • Korsunsky, I., Millard, N., Fan, J., Slowikowski, K., Zhang, F., Wei, K., Baglaenko, Y., Brenner, M., Loh, P.-R., & Raychaudhuri, S. (2019). Fast, sensitive and accurate integration of single-cell data with Harmony. Nature Methods, 16(12), 1289–1296. doi:10.1038/s41592-019-0619-0
  • Bernstein, N. J., Fong, N. L., Lam, I., Roy, M. A., Hendrickson, D. G., & Kelley, D. R. (2020). Solo: Doublet identification in single-cell RNA-seq via semi-supervised deep learning. Cell Systems, 11(1), 95–101.e5. doi:10.1016/j.cels.2020.05.010
  • Gayoso, A., Lopez, R., Xing, G., Boyeau, P., … & Yosef, N. (2022). A Python library for probabilistic analysis of single-cell omics data. Nature Biotechnology, 40(2), 163–166. doi:10.1038/s41587-021-01206-w
  • Cui, H., Wang, C., Maan, H., Pang, K., Luo, F., Duan, N., & Wang, B. (2024). scGPT: toward building a foundation model for single-cell multi-omics using generative AI. Nature Methods, 21(8), 1470–1480. doi:10.1038/s41592-024-02201-0

コメント

タイトルとURLをコピーしました