目次

5. プログラムの実行法

5.1 プログラムのインストール

ファイル(dlfsp.zip) をダウンロードして、 適当なフォルダに展開してください。ファイル構成は以下の通りです。

  1. dl/ : 深層学習プログラム(Python)
  2. mom/ : モーメント法プログラム(C)

図5-1にシステム構成図を示します。
モーメント法計算、深層学習、図形出力の3つから成ります。

図5-1 システム構成図

5.2 モーメント法プログラムのデータ入力

ファイルMain.cを編集して計算条件を設定してください。

リスト5-1 モーメント法プログラムのデータ入力(Main.cの一部)


	const int    Ndata  = 1000;       // データ数
	const int    Rect[] = {4, 2, 8};  // 長方形パラメーター(数,最小,最大)
	const int    Ny     = 20;         // Y方向セル数
	const int    Nz     = 20;         // Z方向セル数
	const double Ly     = 0.20;       // Y方向長さ
	const double Lz     = 0.20;       // Z方向長さ
	const double Rad    = 0.002;      // 導線半径
	const double Freq   = 3e9;        // 周波数
	const double Thinc  = 90;         // 入射方向θ[度]
	const double Phinc  = 0;          // 入射方向φ[度]
	const int    Pol    = 1;          // 偏波(1/2=V/H)
	const int    The[]  = {40, 180};  // θ方向分割数,角度(0...180度)
	const int    Phi[]  = {40, 180};  // φ方向分割数,角度(-90...+90度)
	const int    Nch    = 4;          // 遠方界成分数(2/4, 通常4)
	const int    Ncr    = 1;          // 電流分布成分数(1/4, 通常1)

5.3 モーメント法プログラムのビルド法

モーメント法プログラムをビルドするには、 ターミナル(コマンドプロンプト)で以下のコマンドを実行してください。

表5-1 モーメント法プログラムのビルド法
ビルドコマンドOSコンパイラー実行プログラム
$ nmake.exe -f Makefile_clWindows cl.exemom.exe
$ make -f Makefile_gcc LinuxまたはWSL2gcc mom

5.4 モーメント法プログラムの実行法

モーメント法プログラムはデータに関して独立した計算なので、 OpenMP(共有メモリー環境、スレッド並列)を用いて並列計算することができます。 計算時間はスレッド数分の1になります。
それぞれの環境で以下のコマンドのいずれかを実行してください。

Windows

$ mom.exe			1スレッド, mom1.bin, mom2.bin出力
$ mom.exe 8			8スレッド, mom1.bin, mom2.bin出力
$ mom.exe 8 foo1.bin foo2.bin	8スレッド, foo1.bin, foo2.bin出力

LinuxまたはWSL2

$ ./mom				1スレッド, mom1.bin, mom2.bin出力
$ ./mom 8			8スレッド, mom1.bin, mom2.bin出力
$ ./mom 8 foo1.bin foo2.bin	8スレッド, foo1.bin, foo2.bin出力

(注1)
デバッグを行って図形出力するときは、 OpenMOM等に付属している2次元図形表示プログラムev2d.exeを用いて以下のコマンドを実行してください。

$ ev2d.exe fig1.ev2
$ ev2d.exe fig2.ev2
$ ev2d.exe fig3.ev2

(注2)
両方動くWSL2でテストした結果、gccはcl.exeより約1.5倍速くなります。

5.5 深層学習プログラムのデータ入力

ファイルdlfsp.pyを編集して計算条件を設定してください。

リスト5-3 深層学習プログラムのデータ入力(dlfsp.pyの一部)


    # 計算パラメーター
    load_model = 0     # 通常0, 前回保存したmodelfileからrestartするとき1
    save_model = 1     # 通常1, 計算終了時にmodelfileを保存しないとき0
    ndata = -1         # データ数, -1のときはすべてのデータ
    batch_size = 60    # バッチサイズ(通常50-100程度)
    num_epochs = 30    # エポック数
    train_ratio = 0.8  # 訓練データの割合(通常0.8程度)

5.6 深層学習プログラムの実行法

深層学習プログラムはPythonで記述されているのでビルド作業は不要です。
実行する前に、python, pip, numpy, matplotlib, torch, torchvision をインストールしてください。

深層学習を行うには下記のコマンドのいずれかを実行してください。

$ python dlfsp.py (ソースコード内でImode=1とし、datafileとmodelfileを指定する)
$ python dlfsp.py 1 datafile(ソースコード内でmodelfileを指定する)
$ python dlfsp.py 1 datafile modelfile

計算結果を図形出力するには下記のコマンドのいずれかを実行してください。

$ python post.py  (mom1.binを使用したときはImodel=1、mom2.binを使用したときはImodel=2とする)
$ python post.py 1 (mom1.bin(label1)を使用したとき)
$ python post.py 2 (mom2.bin(label2)を使用したとき)

(注3)
コマンドpythonは環境によってはpython.exeまたはpython3となります。

5.7 計算時間

5.7.1 モーメント法の計算時間

モーメント法の計算時間は以下のように評価されます。

モーメント法の計算時間 ∝ (Nx, Ny, Nθ, Nφ に依存) * データ数 / スレッド数

計算時間の1例として以下のようになります。
・計算条件:Ny=Nz=20, Nθ=Nφ=40, データ数=100,000
・ハードウェア: AMD Ryzen 7 7840HS, 8コア16スレッド
・計算時間: 197秒

5.7.2 深層学習の計算時間

深層学習の計算時間は以下のように評価されます。

深層学習の計算時間 ∝ エポック数 * データ数 * パラメータ数

計算時間の1例として以下のようになります。
・計算条件:エポック数=60, データ数=100,000, ResNet18, パラメーター数=11,384,848
・ハードウェア: NVIDIA GeForce RTX 4060 Laptop, 3072コア
・計算時間: 1143秒