PixInsight の GPU アクセラレーション:CUDA 設定とパフォーマンス実測
本記事は 2021 年から 2024 年にかけてのメモをまとめたものです。一部のツールや CUDA のバージョン、設定手順はすでに更新されており(特に後期の PixInsight ではワンクリック設定に対応しています)、お読みの際は時代背景にご留意ください。
星の除去、AI ノイズ低減、AI シャープ化といったニューラルネットワーク系のプロセスが次々と PixInsight のワークフローに入ってきてからというもの、「画像処理用のパソコンにグラフィックボードを一枚足すべきかどうか」は非常に現実的な問題になりました。本記事では、ここ数年の GPU アクセラレーションに関する実測と設定の経験を、なぜ GPU を使うのか、どうやって有効にするのか、どれくらい時間を節約できるのか、そして各プラットフォームの違いも含めてまとめます。
なぜ GPU アクセラレーションが必要なのか
現在の PixInsight で GPU アクセラレーションに対応しているプロセスは、主にニューラルネットワーク演算を多用するもの、すなわち StarNet++、StarNet 2、StarXTerminator(SXT)、NoiseXTerminator(NXT)、BlurXTerminator(BXT)です。これらのプロセスを CPU だけで走らせると、特に画像サイズが大きくなるにつれて、待ち時間が非常に長くなります。
とても実感できる例が、バッチでの星の除去です。新しい方法で彗星を処理する際には、リニアの状態で、まだインテグレーションしていない彗星の画像を一枚ずつ星を除去していく必要があります。たとえば 200 枚あまりの 900 万画素の画像を RTX 3060 Laptop 版で加速すると、一枚あたり 20 秒ほどで済みますが、CPU だけに頼ると、その合計時間は人生を疑いたくなるほどです。
一度 GPU アクセラレーションを使ってしまうと、おそらくもう元には戻れません。
初めて CUDA を有効にできたとき
2021 年の暮れ、NVIDIA CUDA、cuDNN、TensorFlow のさまざまなバージョンを何時間もかけてテストした末に、ようやく GPU(NVIDIA RTX 3060)を使って星の除去を手伝わせることに成功しました。
- StarXTerminator はわずか約 15 秒;
- StarNet++ は 10 秒足らず;
で、一枚の星の除去が完了しました。CPU だけの場合と比べると、その差は非常に歴然としていました。

有効化の方法:手動設定からワンクリックインストールまで
かつてのやり方:ファイルを手動で配置する
初期に GPU アクセラレーションを有効にするには、対応するバージョンの CUDA、cuDNN、TensorFlow などのファイルを自分でダウンロードし、正しい場所に配置する必要がありました。この手順の敷居は低くなく、しかもWindows で、かつ PixInsight がインストールされ、CUDA コアを備えた NVIDIA グラフィックボードを搭載したパソコンのユーザーにしか適用できません。AMD のグラフィックボード(内蔵グラフィックスを含む)のユーザーはそのまま読み飛ばしてください。Linux ユーザーは自分で対応するものを照らし合わせる必要があります。設定が完了すれば、StarNet、StarNet++、SXT、NXT、BXT の実行速度を大幅に向上させられます。
厄介なのは、PixInsight を更新するたびに、こうしたファイルを再配置しなければならないことが多く、忘れやすいという点です。
現在のやり方:PI 内蔵のワンクリック設定
2024 年の初めになると、状況は大きく改善しました。今では PixInsight に更新リポジトリ(repository)を追加するだけで、追加のインストールや設定なしに、そのまま GPU アクセラレーションが使えます。これは XTerminator シリーズの作者 RC(Russell Croman)が PixInsight フォーラムで提供しているやり方です。当時この機能は Windows のみ対応で、Linux 版はまだ開発中でした。macOS については、そもそもこの種の設定は必要ありません。
GPU が本当に演算しているかを確認する方法
星の除去やノイズ低減のときに GPU がちゃんと働いているか知りたい場合、Windows 10/11 では、タスクマネージャーを開き、「GPU」ページに切り替え、「CUDA」のサブページを選びます。CUDA コアに使用率が表示されていれば GPU が使われている証拠です(たとえば SXT を走らせると CUDA コアが 87% の使用率まで跳ね上がるのが見えます)。CUDA コアがまったく動いていなければ、GPU は使われていないということです。

パフォーマンス実測
ハイエンド CPU vs ミドル〜ローエンド GPU
CPU が十分に強ければグラフィックボードは要らないのでは、とよく聞かれます。私はコンシューマー向けハイエンド CPU(AMD R9-7950X)と、コンシューマー向けミドル〜ローエンドのグラフィックボード(RTX 3060 12G)を対決させてみました。ソフトは PI 1.8.9-1、SXT 2.05 AI 11 lite です。
- 1 組目の画像 M1(14.75MP):CPU での星の除去は 1 分 45 秒、GPU での星の除去は 10.2 秒。
- 2 組目の画像 Webb NGC 3372(123MP):CPU での星の除去は 12 分 31 秒、GPU での星の除去は 1 分 05 秒。
ここから 2 つの法則が見えてきます。画像サイズが大きいほど GPU アクセラレーションの効果は顕著になること。そして、ハイエンド CPU をミドル〜ローエンド GPU にぶつけても、CPU は同じ作業を終えるのに GPU の少なくとも 10 倍以上の時間がかかること。もしあなたの CPU がハイエンドモデルでなければ、その差はさらに広がるだけです。したがって、ワークフローの中で AI プロセスを繰り返し使う必要があるなら、少なくともミドル〜ローエンドの RTX 30 シリーズのグラフィックボードを一枚は手に入れることを強くおすすめします。

CUDA ソフトを更新するだけで、さらに倍近く速くなる
もう一つ驚くべき発見があります。一年ちょっと前に、私は初めて RTX 3060 Laptop のノートパソコンで CUDA アクセラレーションを有効にしましたが、それから一年あまり後、演算ハードウェアを一切交換していない(そもそもノートパソコンは交換できません)状態で、関連ソフトだけを更新して同じ画像で再測定したところ、速度が倍近くまで上がっていたのです。
1 億 2000 万画素の画像の星の除去を例にとると(PI 1.8.9-1、SXT 2.05 AI 11 lite、RTX 3060 Laptop 6GB):
- CUDA 設定 1(CUDA 11.2.2、TensorFlow 2.6、cuDNN 8.2.1):約 2 分半。
- CUDA 設定 2(CUDA 11.8、TensorFlow 2.9、cuDNN 8.7、ZLib DLL x64 1.2.3):わずか 1 分 20 秒。
ですから、早い時期に CUDA をインストールしてそれきり更新していない方は、CUDA ソフトを更新するのを忘れないでください。上の「設定 2」の組み合わせを参考にすれば、半分の性能をタダで拾えるようなものです。

デスクトップ版 vs ノート版のグラフィックボード
ちょうど手元に RTX 3060 12G と RTX 3060 Laptop 6G の 2 枚があったので、同じソフトウェアバージョンでの星の除去時間を比べてみました。
- RTX 3060 12G:1 分 4 秒;
- RTX 3060 Laptop 6G:1 分 20 秒。
両者はチップが同じで、違いはメモリ容量とデスクトップ版/ノート版の消費電力設計だけなので、星の除去時間の差は小さいです。コストパフォーマンスで言えば、NVIDIA のグラフィックボードを搭載したゲーミングノート(当時の価格で約 3 万台湾ドルほど)は、かなりお得な選択肢と言えます。

古いマイニングカードでも効果は歴然
自宅にある、4 年ほど前に組んだ古いパソコン(AMD R5-3600)は、もともとのグラフィックボード(R9-270)が寿命の末期に近づいていました。私はネットで 3000 台湾ドル足らずのマイニングカード、NVIDIA GTX 1660s を仕入れ、実機でフルサイズの画像(約 6000 万画素)の星の除去をテストしました。
- CPU のみ:5 分 40 秒;
- GPU:51 秒;
で、時間差は約 6.6 倍です。1660s の CUDA 数は 1400 あまりしかありませんが、それでも節約できる時間は依然として大きいものです。星の除去、AI ノイズ低減、AI シャープ化といった操作を繰り返し実行するなら、GPU アクセラレーションは十分に価値のある投資です。

各プラットフォームの違い
オペレーティングシステムやハードウェアによって、AI プロセスが GPU アクセラレーションを使えるかどうかのサポート状況は一様ではありません。私は Windows、Mac、Linux の 3 つのプラットフォームの状況をまとめました(一部の Mac のテスト結果は、あるお仲間が提供してくれたものです)。
- Windows + NVIDIA:設定さえ済ませれば、CUDA を呼び出して SXT、BXT、NXT、StarNet のすべてを GPU アクセラレーションできます。
- Apple Silicon の Mac(M1/M1 Ultra など):BXT と NXT は何の設定もなしに自動的に Metal を呼び出して GPU アクセラレーションします。SXT は実行時に CPU リソースの一部しか使わず、GPU は使いません。StarNet 2 については、公式サイトにある実験版(コマンドライン CLI モードのみ)に切り替えないと、GPU アクセラレーションをうまく使えません。
- Intel 版の Mac:StarNet は CPU しか使えません。SXT、BXT、NXT は GPU アクセラレーションが使え、AMD の GPU であっても同じように動作します。
Apple Silicon プラットフォームでは、SXT のようなプロセスがネイティブで GPU アクセラレーションに対応しているため、その性能は「Windows + NVIDIA CUDA アクセラレーション」とおおむね互角です。PC 上の Linux システムについても、同じように GPU を呼び出して演算を加速できます。

まとめ
ここ数年の変化を振り返ってみると、GPU アクセラレーションは「CUDA のバージョンを揃えるのに何時間もかける」というハードコアな設定から、「PI が内蔵機能でワンクリックで片付ける」ところまで来ました。加速できるプロセスはどんどん増え、安価な古いマイニングカードでも数倍の高速化をもたらせます。もしワークフローが AI プロセスに大きく依存しているなら、ミドル〜ローエンドの NVIDIA グラフィックボード(あるいは Apple Silicon の Mac)はほぼ必携です。