理乃美

ソフトとハードと論理の覚え書き

いきなりOpenFOAM でつまずく

2024-09-22 21:41:21 | 数理科学
翼の揚力発生の仕組みについてシミュレーションで試してみようということで、下記サイトの内容をなぞれば楽勝と思いきや、やたらつまずいたという記録。

落とし穴は、ざっとこんなところ
・財団版とESI版の非互換
・OpenFOAMのバージョン間で非互換
・wls のデフォルトユーザー
・FreeCADのバグ

最初に悩んだのは翼型のデータ。上記サイトでは細かい説明がないが、このサイト(UIUC Airfoil Data Site) にある .datファイル (例えば clarky.dat)をダウンロードして、そのままFreeCADに読み込ませればよい。

次に引っかかったのは、財団版とESI版の違い。OpenFOAMには OpenFOAM財団版とOpenCFD社のESI版 (DEXCSはこちら)があって細かいところで互換性がない。前記のサイトで使っているXSimは財団版前提のスクリプトを生成するためESI版だとそのままではNG。具体的には、財団版のsurfaceFeaturesがESI版ではsurfaceFeatureExtractに変わっていて、受け渡すデータの形式もちょっと異なるようだ。そのことを知らずに、「OpenFOAMによる熱移動と流れの数値解析 」を参考に用意したDEXCSのバーチャルマシンで実行して、うまくゆかずに悩んだ。素直に財団版に乗り換えることにした。

Windows使いの私はwslに Ubuntu 24.04 LTSを入れ、こちらに財団のOpenFOAM (現在のバージョンはv12) をインストールしたが、これもだめ

XSimはエクスポートのフォーマットとして、OpenFOAM 11 / OpenFOAM 10 / OpenFOAM 9 (非推奨) の選択肢がある。つまり、OpenFOAMのバージョンごとの違いを踏まえて作り分けているということ。そして、OpenFOAM最新版の OpenFOAM 12 はまだサポートしていない。
実際に、XSimでOpenFOAM 11 フォーマットで出力したものをOpenFOAM v12で動かしても、Running foamRun in parallel on ... まで表示が進んでハングする。

簡単に推測できるURLにv11のダウンロードページが残っていて、https://openfoam.org/version/11/ こちらの記載に従えば簡単にOpenFOAM v11がインストールできる。

これで万事解決と思いきや、やはりNG。問題は、wslのユーザーだった。実験に使った環境だとrootユーザーだったのだが、それだと不安全ということでOpenFOAMが自分で止めてしまうようだ。
ターミナルからwslのubuntuに入ると、ubuntuの初回起動時に作ったユーザーとしてログインしているはずなのだが、export/importで作ったせいなのだろうかrootユーザーになってしまう。/etc/wsl.confを編集して別に作った一般ユーザーとしてwslのubuntuに入るようにしたところ、無事にXSimで作ったスクリプトを実行できた。
と言っても結構ドキドキさせられた、./Allrunを走らせるとこのような画面が現れて計算の進捗が表示されるが、この画面で最後までいったあとプロンプトが戻ってくるまでが長くて、ハングしているように見えてしまう。
あとは、paraFoamコマンドでParaViewが開いて計算結果を見ることができる。openFoamと一緒にParaViewがインストールされるので世話無し。


話は前後するが、freeCADでstlデータを作る際にFreeCADの不具合に引っかかった。FreeCAD の現行バージョン( Windows版 0.21.2.33771)で作ったstlファイルをXSimにアップした結果がこちら。風洞部分である直方体のZ軸に伸びる4面の位置がずれている。
しかたないので、FreeCAD 1.0.0 RC2でstlを作りなおしてみたところOK。だが、RC2はGUIが以前とは少し異なるうえ画面表示がだいぶバグっていていまいち。ちなみに、DEXCSのバーチャルマシンにインストールされていたLinux版 FreeCAD 0.20.1 でもこの不具合はなかった。

以上のようにWebにあったチュートリアルを実行するだけで、えらく苦労させられたが、なんとか実行に成功した。やれやれ。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

GPTでジオン公国のワインを講釈してみる

2024-07-25 01:02:49 | AI
引き続いて、Generative Deep Learning [1] の 9章 Transformers のサンプル (gpt.ipynb)[2]を実行。
これは、種々のワインのレビュー文をGPTモデルで学習して、ワインのレビュー文章を生成してみるというもの。
fitにかかった時間は、GPU (RTX A2000)を使って7分ほどだった。
生成される文章は例えば、「wine review : germany」と与えて、その先を生成させると「wine review : germany : mosel : riesling : smoke and mineral tones lend a savory tone to this intensely fruity riesling . it ' s intensely concentrated with flavors of sweet tangerine and orange , but it ' s a lip - smackingly juicy , full - bodied riesling .」といった文章が生成される。
生成の経緯を見るとwine review : germany : の続きはワインの銘柄が来る場所で単語選びにも germany が重視された結果 mosel が選ばれている。
その先に進んで、smoke and の続きを選ぶ場合は smokeを重視しているが、smoke and mineral の次を選ぶ場合は wine review であることや germany も考慮しての選択となっている。

以前に実行したLong Short Term Modelでは、これまで全体として何を語ってきたのかを示すlong term の情報と今を語りかけているのかを示すshort term の情報を常に同じ重さで扱って単語を綴っている。そのためだろう、生成している文章が長くなってくると次第に文章がおかしくなってゆく。
Transformerでは、位置の情報を組み合わせることで、直前の言葉から流れのままに綴るところとそもそも何を語っているのかに立ち戻って言葉を選ぶところが組み合わせれ、生成する文章が長くなっても破綻しにくいと理解した。

さてサンプルでは、ドイツ産のほかに US産やイタリア産ワインのレビュー文を生成させているが、架空のジオン公国産 についてレビュー文を生成させたらどうなるだろうか。試した結果はこのとおり。産地としては歴史が浅いのだなあ(w)

wine review : zeon : [UNK] : cabernet sauvignon : this is a bold , ripe and full - bodied expression of the variety ' s characteristically cabernet sauvignon . aromas of blackberry , plum and cassis , with a touch of wood smoke and spice , while the wine is still young and needs time to open up . drink from 2018 .

なお、[UNK] は学習データ中にあった未知語. ここはワインの名称が来るとところだが、どの単語も尤度が低すぎた結果として 未知語が選ばれてしまったのだろう。だが、その後に cabernet sauvignonが改めて選ばれて、カベルネ・ソーヴィニヨン を軸にレビュー文が組み立てられたようだ。

[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Denoising Diffusion Modelsはスケジュールの良し悪しが胆!?

2024-07-02 00:19:41 | AI
引き続いて、Generative Deep Learning [1] の 8章 Diffusion Models のサンプル (ddm.ipynb)[2]を実行。

このような画像を学習するのに、fitにかかった時間は、RTX A2000 (6GB) をGPUに使って1時間38分ほどかかった。
最初はこんなところだが、
Epoch 8になるとこの様になんとなくそれっぽい画像を生成し、
Epoch 19では、ここまでの画像を生成するようになった。
Epoch 50の学習終了で、最終的にはこのようなリアルな画像が生成できるようになった。

Denoisingで画像が改善されてゆく過程の例がこちら。
また、内挿で連続的に変化する画像を生成した例がこちら。

と、ここまではサンプルをそのまま実行しただけ。
この章では、ノイズを載せるプロセスで、linear, cosine, offset cosine の三つのスケジュールが紹介されていて、前記はoffset cosine での結果。
サンプルコードには、linearやcosineのコードもあるようなので、試してみた。
まずは、linear を試してみた。最初 (Epoch 2)がこんななのは当然として、

それが、最後のEpoch 50でもこんな感じのまま。
TensorBoardでみたepoch_n_loss がこのようなので、まったく学習が働いていないわけではないはずなのだが。
次に、cosine を試してみる。
cosineの場合、Epoch 8になるとこのように何らかの画像らしきもを生成するようになるが、
そこから先は、Epoch 50になっても大して向上していない。
最終的に生成できるようになった画像がこちら


linear や cosineのスケジュールでも結果を出すにはどうすればよいだろうか。このサンプルでは64ステップだが、ステップ数を増やして細かく学習させたらどうだろうか。ということで、BATCH_SIZEを 128にして cosineで試してみたのがこちら。学習に6時間14分を費やして、最終的に生成するようになった画像だが、あまり改善した印象はない。
さてここで、n_lossの視点で比較整理してみるとこうなる。生成する画像では実感できないものの、ステップ数を増やすことでn_lossは確実に改善される。128からもっと増やせばlinearやcosineでもよい結果を出せるのだろうが.. 6GBしかメモリを積んでいないRTX A2000 ではここが限界。CPUのみの方で実行すればもっと増やせるだろうが、実行時間がねぇ...
なお、この図でX軸 (epoch数)は対数表示であることに注意。この感じからすると、10 epochもやれば結果は見えたようなもの、かな。


実際にやってみて思ったのだが、筋のよいアイディアを思いついたとしても、そこから先、実際に良い結果を出せるところまでがまた長いなと。一つすごい成果が出た後にわらわらと後追いが出てくるが、これは、実際にできたのが居るのだから私だってできるはずと頑張った、という事なのかもしれない。

[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

RealNVP を試す

2024-05-05 01:34:48 | AI
引き続いて、Generative Deep Learning [1] の 6章 Normalizing Flow Models のサンプル (realnvp.ipynb)[2]を実行。

6GBしか載っていないRTX A2000でも実行できて、fitに掛かった時間は1分55秒。
得られた変換と逆変換がこちら。


RealNVPは、データ空間のうち興味のある部分は拡大し興味の無い部分は縮小する可逆な変換を学習することで、latent空間の任意の点を選ぶことが興味のある部分の中の任意の点を選ぶことになるような手段を得ることだと理解した。
Variational autocodersのところでKL divergenceを使ってlatent空間がスカスカにならないよう工夫したが、それに近いところがあるのだろうか。だが私には今のところ使い所がピンと来ない。

[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

LSTMを使った文書生成や画像生成を試す

2024-05-01 23:38:41 | AI
引き続いて、Generative Deep Learning [1] の 5章 Autoregressive Modelsのサンプル (lstm.ipynb,pixelcnn.ipynb, pixelcnn_md.ipynb)[2]を実行。

まずは、long short-term memoryを使った文章生成(lstm.ipynb)。
実行自体は簡単。6GBしか載っていないRTX A2000でも実行できた。
fitに掛かった時間は10分。
もともとのサンプルでは"recipe for roasted vegetables | chop 1 /" の次の1単語を生成させていたが、それもつまらないので4単語先まで生成させてみた。
temperature = 0.2での生成例
recipe for roasted vegetables | chop 1 / 4 cup of the
recipe for roasted vegetables | chop 1 / 2 cup of the
temperature = 1.0での生成例
recipe for roasted vegetables | chop 1 / 4 cup of chard
recipe for roasted vegetables | chop 1 / 2 cup tometoes and


tempertureが 0.2でも1.0でも、chop 1 / の次は 2 か 4 が来るのが同じくらいにもっともらしく、その次には cup が来るのが最もありそうというところまでは変わらない。
で、temperature が低いと cup の先が高い確度のもと of the と続く一方で、temperatureが高いと cup の先に続く単語がばらけてくる。

なお、上記の例では4単語先まで生成させているが、さらに長く生成させることもできる。だが、長い文章を生成させるとだんだんと可笑しくなってしまう。
また、temperatureは低ければ元のレシピ文章のなぞりに近くなるはずだが、temperatureが高いほうが同じパターンを繰り返すような場合もあった。このサンプルでは学習に使ったレシピの数が25と少ないので、その影響かなと推測する。つまり、temperatureが高いことで出現頻度の低い単語が一度選ばれてしまうとその単語に続く文言がワンパターンしか学習していないので他のパターンを選びようがない、という事が起きたのではなかろうか。


次にPixelCNNによる画像生成
このようなトレーニング画像をPixelCNNで学習するサンプル。


これも、6GBしか載っていないRTX A2000でも実行できたが、fitに 48分31秒も掛かった。
temperature=1.0で生成した画像がこちら。まあ、なんとなく微妙だなぁ。


じゃあ、temperatureを下げたらどうなるかと試したのがこちら。0.5にするとまともな画像にならないのはなぜだろう。

PixelCNNは左上から順に画像を作る。学習するどの画像も中央に画像があって周囲は白。という事は「上や右が白ならこのpixelも白」と強く学習されていると思われる。temperatureが低いとその学習にひっぱられていつまでも白以外のpixelが現れず仕舞いとなったのだろう。


最後に、Tensorflow distributionsを使ったPixelCNNのサンプル. (pixelcnn_md.ipynb)
6GBしか載っていないRTX A2000で実行し、fitに20分11秒掛かった。
で生成した画像の例がこちら。生成に1分49秒も掛かっているところからワッパが悪いなと感じる。


[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする