本站提供正體中文版。切換到正體中文本站提供简体中文版。切换到简体中文This site is available in English.View in English이 사이트는 한국어로도 제공됩니다.한국어로 보기Diese Website ist auch auf Deutsch verfügbar.Auf Deutsch ansehenEste sitio web también está disponible en español.Ver en españolQuesto sito è disponibile anche in italiano.Visualizza in italianoCe site est également disponible en français.Afficher en françaisEste site também está disponível em português.Ver em portuguêsDeze website is ook beschikbaar in het Nederlands.In het Nederlands bekijkenЭтот сайт также доступен на русском языке.Смотреть на русскомयह वेबसाइट हिन्दी में भी उपलब्ध है।हिन्दी में देखेंهذا الموقع متاح أيضًا باللغة العربية.عرض بالعربيةSitus ini juga tersedia dalam bahasa Indonesia.Lihat dalam bahasa IndonesiaBu site Türkçe olarak da mevcut.Türkçe görüntüleTa strona jest dostępna także po polsku.Wyświetl po polskuTrang web này cũng có phiên bản tiếng Việt.Xem bằng tiếng Việtاین وب‌سایت به فارسی هم در دسترس است.مشاهده به فارسی

PixInsight の GPU アクセラレーション:CUDA 設定とパフォーマンス実測

ツールとハードウェア2021.12初期のノート

本記事は 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 だけの場合と比べると、その差は非常に歴然としていました。

初めて RTX 3060 で CUDA による星の除去の加速を有効にできたときの画面

有効化の方法:手動設定からワンクリックインストールまで

かつてのやり方:ファイルを手動で配置する

初期に 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 は使われていないということです。

タスクマネージャーの CUDA サブページで GPU 使用率を確認する GPU 処理フローの模式図 CUDA の基本アーキテクチャの模式図

パフォーマンス実測

ハイエンド 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 シリーズのグラフィックボードを一枚は手に入れることを強くおすすめします。

ハイエンド CPU とミドル〜ローエンド GPU の星の除去時間の比較

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」の組み合わせを参考にすれば、半分の性能をタダで拾えるようなものです。

CUDA ソフト更新前後の星の除去時間の比較 異なる CUDA バージョンでの処理時間の違い

デスクトップ版 vs ノート版のグラフィックボード

ちょうど手元に RTX 3060 12G と RTX 3060 Laptop 6G の 2 枚があったので、同じソフトウェアバージョンでの星の除去時間を比べてみました。

  • RTX 3060 12G:1 分 4 秒;
  • RTX 3060 Laptop 6G:1 分 20 秒。

両者はチップが同じで、違いはメモリ容量とデスクトップ版/ノート版の消費電力設計だけなので、星の除去時間の差は小さいです。コストパフォーマンスで言えば、NVIDIA のグラフィックボードを搭載したゲーミングノート(当時の価格で約 3 万台湾ドルほど)は、かなりお得な選択肢と言えます。

デスクトップ版とノート版 RTX 3060 の星の除去時間の比較

古いマイニングカードでも効果は歴然

自宅にある、4 年ほど前に組んだ古いパソコン(AMD R5-3600)は、もともとのグラフィックボード(R9-270)が寿命の末期に近づいていました。私はネットで 3000 台湾ドル足らずのマイニングカード、NVIDIA GTX 1660s を仕入れ、実機でフルサイズの画像(約 6000 万画素)の星の除去をテストしました。

  • CPU のみ:5 分 40 秒;
  • GPU:51 秒;

で、時間差は約 6.6 倍です。1660s の CUDA 数は 1400 あまりしかありませんが、それでも節約できる時間は依然として大きいものです。星の除去、AI ノイズ低減、AI シャープ化といった操作を繰り返し実行するなら、GPU アクセラレーションは十分に価値のある投資です。

GTX 1660s で 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 を呼び出して演算を加速できます。

各プラットフォームで AI プロセスが GPU アクセラレーションを使えるかどうかのテスト結果

まとめ

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