StarNet++はディープラーニング技術を用いて、天体写真データから星を消す処理をするプログラムです。
DSOの天体写真を処理する上で、輝度の高い恒星部分と輝度の低い星雲などDSO天体の部分では施す処理が異なるため、処理範囲を恒星部分とそれ以外に分ける手段が様々工夫されています。
その手段の一つであるStarNet++は、操作が簡単で星を消す性能も高いため有用なプログラムなのですが、処理に時間がかかるのが難点の一つです。
その改善手段としてStarNet++の処理をCPUではなくnVIDIA製GPUに任せることで高速化できるとの情報をネット上で見かけ、 実際にやってみたところ大幅な高速化が得られました。
ネット上では設定方法は種々紹介されておりますが、自分の備忘録もかねて設定手順をできるだけ丁寧に記載しておきます。
ここで説明する方法は、StarNet++の実行方法であるコマンドライン、PixInsight経由、FlatAidePro経由のいずれであっても有効です。
【補足】StarNet++のバージョンは1.1を対象に動作確認しました。
【追記:2021/9/13】PixInsightでは、tensorflow.dllをPixInsightのインストールフォルダへ上書きする必要がありましたので、その手順を追記しました。
【追記:2021/9/18】CUDA ToolKitのバージョン11.4.2に対し、動作可能なTensorFlowのライブラリの説明を追記しました。→「4.TensorFlow for Cライブラリーのダウンロード」
最初に私の試した環境での設定前と後の処理速度の違いを示します。
処理に使用したCPUはかなり高速な部類、逆にGPUはかなり廉価な低速の部類になりますが、それでも2倍以上の速度差が得られました。この結果より適用可能なGPU(nVIDIA製のみ)を使用しているのであれば活用は必須ではないかと思います。
STRIDE値 | 設定前(CPU処理) | 設定後(GPU処理) |
---|---|---|
64(標準) | 5分27秒 | 2分5秒 |
32 | 21分41秒 | 8分2秒 |
STRIDE値にかかわらず、2.6〜2.7倍に速度が向上しました。
CPU | AMD Ryzen9 3900XT(12Core 3.8GHz) |
GPU | nVIDIA Geforce GTX1650(MSI GEFORCE GTX1650 AERO ITX 4G OC) |
Memory | 64GB |
設定手順を説明します。
こういった設定に慣れていないと難しいと感じるかもしれません。できるだけ、詳細に説明します。
nVIDIAのビデオカードドライバーはOSインストール時に自動的にインストールされます。それでも問題ないかもしれませんが、ネット上の情報ではnVIDIA謹製のドライバーであった方がよいとの情報を見かけましたので、念のためインストールしました。
nVIDIA謹製のドライバーのインストールはnVIDIAサイトでは「GEFORCER EXPERIENCE」という常駐ソフトをインストールするよう説明されていますが、このソフトは不要(常駐のため多少パフォーマンスが低下するらしい)のため、このソフトはインストールせず手動でドライバーを選択してインストールしました。
nVIDIAのビデオカードのドライバーダウンロードのページにアクセスして下さい。
https://www.nvidia.com/ja-jp/geforce/drivers/
①にビデオカードの情報を入力して下さい。
②をクリックして下さい。
ドライバーの検索結果が表示されます。
最新のドライバーを選択すればいいと思います。ただ、nVIDIAは(Geforceシリーズの場合)、2種類のドライバー(GAME READYとSTUDIO)があります。
写真や動画編集の用途が主であれば、STUDIOを選ぶのがいいと思います(GAME READYでも今回の設定を行う上で問題はありません)。
ダウンロードしたいドライバーをクリックして下さい(私は、③をダウンロードしました)。
既存のドライバーを選択してアンインストールをクリックして下さい。
アプリと機能(スタートボタンを右クリックして選択できます)を開いてください。
既存のnVIDIAグラフィックドライバーをアンインストールして下さい。
(説明の図は、最新ドライバーインストール後にキャプチャしたため、バージョンが最新のものが表示されています。)
ダウンロードしたドライバーを起動(ダブルクリック)して下さい。
解凍先を確認されます。変えてもいいですが、そのままOKで構いません。
④を選択して、インストール対象はグラフィックドライバーのみにします。
⑤をクリックして下さい。
⑥「カスタム」を選択して下さい。
⑦「次へ」をクリックして下さい。
⑧「グラフィックスドライバー」は必ず選択します。
他は、必要に応じて選択して下さい。
「HDオーディオドライバー」はHDMI接続で音を出したい場合、PhysXシステムソフトウエアは、PhysX対応ソフト(3Dゲームなど)を使いたい場合に必要になります。
「NVIDIA GeForce Experience」は私は使いませんので、インストールしません。
⑨「次へ」をクリックして下さい。これでインストールが始まります。
今回の設定に必要なプログラムをnVIDIAからダウンロードするためには開発者プログラムへの登録(無料)が必要です。
登録手順を示します。
以下のサイトにアクセスして下さい。
https://developer.nvidia.com/developer-program
①をクリックします。
②にご自身の(登録に使用する)メールアドレスを記述して下さい。
次に ③「Next」をクリックします。
④に前ページで入力したメールアドレスが記述されていることを確認します。
⑤「Create account」をクリックして下さい。
⑥には前ページで入力したメールアドレスが記述されていることを確認します。
⑦には自分のアカウントの名前(表示名)を半角英数文字で記述して下さい。
⑧には誕生日を入力します。プルダウンで選んで下さい。
⑨には、アカウントのパスワードを設定します。半角英数文字記号で記述して下さい(小文字,大文字,数字,記号から3種類以上使う必要があったと思います)。
⑩にチェックを入れて下さい。人が操作していることの確認の問題が出ますので、それに答えて下さい。
I agree to the NVIDIA Account Terms of Useにもチェックを入れて下さい。
全て入力したら、⑪をクリックして下さい。
この後、メールが届きます。メール文中の「電子メールアドレスの確認」をクリックすると登録完了です。
⑫〜⑱を入力し、⑲にチェックを入れて下さい。
⑰、⑱は何を選んでも構いません。
⑳をクリックします。
nVIDIAよりCUDA ToolkitとcuDNNをダウンロードします。
CUDA ToolkitとcuDNNには適切なバージョンの組み合わせがあります。
最新バージョンの組み合わせで大丈夫だと思います。
私は2021/9/12現在の最新の組み合わせとして以下の2つをダウンロードしました。
・ | CUDA Toolkit: | cuda_11.4.2_471.41_win10.exe |
・ | cuDNN(Neural Network library): | cudnn-11.4-windows-x64-v8.2.4.15.zip |
CUDA Toolkit archiveに接続します。
https://developer.nvidia.com/cuda-toolkit-archive
今回は、最新版の11.4.2をダウンロードしました。
(たいていの場合は最新版で問題ないと思います。
cuDNN archiveに接続します。
https://developer.nvidia.com/rdp/cudnn-archive
CUDA 11.4を使用するため、それ用の「cuDNN v8.2.2 (July 6th, 2021), for CUDA 11.4」をダウンロードしました。
使用するCUDAのバージョンに合うものをダウンロードして下さい。
Windows GPU用のTensorFlow for Cライブラリーをダウンロードします。
私は、「libtensorflow-gpu-windows-x86_64-2.5.0.zip」をダウンロードしました。
以下にダウンロード先を示します(CUDA Toolkit Ver.11.4.2との組合せでの動作可否も記述しておきます)。
libtensorflow-gpu-windows-x86_64-2.6.0.zip(動作可能)
libtensorflow-gpu-windows-x86_64-2.5.0.zip(動作可能)
libtensorflow-gpu-windows-x86_64-2.4.0.zip(11.4.2では動作しない)
libtensorflow-gpu-windows-x86_64-2.3.0.zip(11.4.2では動作しない)
今回、Ver.2.5.0を利用したのは、わずかですが、動作速度が速かったためです。
StarNet++で4392×3105のTiff画像を処理した場合、Ver.2.6.0では2分9秒、Ver.2.5.0では2分5秒でした。
CUDA Toolkitのバージョンとの組合せで動作可能な組合せは以下との情報を見つけました。
CUDA ToolKit Ver. | Tensor Flow Ver. |
---|---|
11.4 or 11.3 (or 11.2) | 2.6 or 2.5 |
11.0 | 2.4 |
10.1 | 2.3 or 2.2 (or 2.1) |
10.0 | 1.15 |
ダウンロードしたCUDA Toolkit「cuda_11.4.2_471.41_win10.exe」をダブルクリックして起動して下さい。
「同意して続行する」をクリックします。
①「カスタム」を選択して下さい。
②「次へ」をクリックして下さい。
③CUDA→Runtimeにある「Libraries」のみを選択して下さい。
④「次へをクリックして下さい。
⑤「次へをクリックして下さい。
これでしばらくするとインストールが完了します。
ダウンロードした「cudnn-11.4-windows-x64-v8.2.4.15.zip」を解凍ソフトを使って解凍して下さい。
解凍後、cudaの中にある「bin」と「lib」の2つのフォルダをCUDA Toolkitをインストールしたフォルダへ上書きコピーして下さい。
StarNet++のインストールフォルダへの上書き
ダウンロードした「libtensorflow-gpu-windows-x86_64-2.5.0.zip」を解凍ソフトを使って解凍して下さい。
「lib」フォルダ内にある「tensorflow.dll」をstarNet++をインストールしたフォルダ内にある同名の「tensorflow.dll」に上書きして下さい。
私の場合は、C:\Program FIles\StarNet_WinにStarNet++をインストールしてあるので、そのフォルダの「tensorflow.dll」に上書きしました。
以上の設定で、StarNet++をコマンドラインから起動する場合、FlatAideProから起動する場合に対応できます。
>PixInsightのインストールフォルダへの上書き(2021/9/13追記)
StarNet++をPixInsightから使う場合は、ここに示す手順も実施して下さい。
上記と同様に、ダウンロードした「libtensorflow-gpu-windows-x86_64-2.5.0.zip」を解凍ソフトを使って解凍して下さい。
「lib」フォルダ内にある「tensorflow.dll」をPixInsightをインストールしたフォルダ直下の「bin」フォルダ内の同名の「tensorflow.dll」に上書きして下さい。
私の場合は、C:\Program Files\PixInsight\binの「tensorflow.dll」に上書きしました。
以上の設定で、StarNet++をPixInsightから起動する場合に対応できます。
システムのプロパティの①「詳細設定」のタブを開いて下さい。
②「環境変数」のボタンをクリックして下さい。
環境変数のウィンドウが開くので、上側の〇〇の環境変数のところにある③「新規」のボタンをクリックして下さい。
「新しいユーザ変数」のウィンドウが開くので、以下のように入力して下さい。
④変数名:TF_FORCE_GPU_ALLOW_GROWTH
⑤変数値:true
入力が終わったら、⑥「OK」ボタンをクリックして下さい。
上記で追加した⑦の環境変数が登録されていることを確認して下さい。
⑧変数名「Path」をクリックして、⑨「編集」ボタンをクリックして下さい。
⑩「新規」ボタンをクリックして、⑪にnVIDIA Toolkitをインストールしたフォルダ内の「bin」までのPathを記入して下さい。
私の環境では、「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\bin」というPathでした。
入力したら、⑫「OK」ボタンをクリックして下さい。
以上で全ての設定が終わりました。
ここからは、StarNet++がGPUのCUDAを使用して処理が行われることを確認します。
タスクバーを右クリックして、「タスクマネージャ」をクリックして開いて下さい。
①「パフォーマンス」のタブをクリックして下さい。
②「GPU 0」をクリックして下さい。
③「3D」をクリックし、プルダウンメニューの中から④「Cuda」をクリックして下さい。
これで、Cudaのパフォーマンスグラフが表示されます。
コマンドラインまたはFlatAideProからStarNet++を実行して下さい。
上記で表示したCudaのパフォーマンスグラフが上昇するのが確認されるはずです。このようになれば、設定が正しく出来ており、StarNet++の動作速度が早くなったことを実感できるはずです。
PixInsightからの起動をされる方は、PixInsightからも同様の動作確認をしてみて下さい。