【電磁界シミュレーション】FDTDってPyTorchでGPUで動かせるのね。。CUDAとPyTorch【はまる】

Flaport/FDTD

FDTDという電磁界シミュレーションでOpen Sourceのやつは、いつもOpenEMSを使っていますが、もっと早く計算できるのないかな?ってググっていたら、下記のものが、PyTorchを使ってCUDA(GPU)で動くということを知り。。やってみました。

flaport/fdtd: A 3D electromagnetic FDTD simulator written in Python with optional GPU support (github.com)

PyTorchなくても動くので、Exampleをひとつ動かしてみると。。

https://github.com/flaport/fdtd/blob/master/examples/04-performance-profiling.ipynb

100×100×100のメッシュで、

8.9秒で。。計算できて、下記のような波の状態などが見れるようになります。

Numpyをバックエンドとして計算しています。Torchで行うこともできて、こういう選び方ができるみたいです。

しかし。。このtorch.cudaが選べなくて。。 困りました(笑)

PyTorchでGPU使うのにはまる。

昔、StableDiffusionを入れた時には、簡単に入ったんですが。。たまたまだったようですね(笑)

>>import torch
>>torch.cuda.is_available()
>>False

って出てきちゃうんですよね。。 いろいろググったり。。ChatGPTに聞いたり。。

>conda install pytorch torchvision torchaudio cudatoolkit=11.8.0 -c pytorch

ってあったので、何度も。。これと。。

>conda remove pytorch torchvision torchaudio

で環境を調べるのに。。

>python -m torch.utils.collect_env

のコマンドを行ったり来たり。。

PyTorchのローカルインストールを見ると。。

https://pytorch.org/get-started/locally/

現在CUDAは12.5ですが。。11.8が良いようで。。 上記のコマンドを入れれば動くようです。

で。。

から11.8のツールキットをインストール。 そしてCUDNNは ここからダウンロードして、古いバージョンもいれます。そして、Windowsの環境変数 PathにCuda toolkitとCuDNNのbinとlibを追加します。

これしかし。。CUDAがまた12.5に勝手に更新しないようにしておかないと駄目ですね(笑)

それから。。Pytorchをインストールしなおす と。。

>conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

うまく行きました。

さっきのプログラムを動かすと。。

さっきが、8.9秒だから、0.5秒だと、約18倍くらい早くなっていますね。。

それで、少し大きので試そうと思ったら。。

OutOfMemoryError: CUDA out of memory. Tried to allocate 22.35 GiB. GPU 

どうもGPUのメモリーが足りないみたいです(笑) がっくし。。

でもGPUのメモリーが22.35GBあれば。。100010001000のメッシュで動くことわかったので、そういう大きなGPUがついていれば。。。計算はできることがわかりました。

KiCADなどのプリントのパターンは。。

モデル化がこういうやつでは、大変なんですが。。この方が作ってくれているPCB_extensionsで、KiCADのSVG出力を読み込むことができました。

https://github.com/0xDBFB7/fdtd_PCB_extensions/tree/master/fdtd_PCB_extensions/fdtd_PCB_extensions

一応、GPUでFDTDで動いたので。。まぁ、また何かするときの参考に。。

 

投稿者 tom2rd

コメントを残していただけるとありがたいです

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください