トラブルシューティング#
実行時に発生する代表的なエラーと対処方法を、症状ごとにまとめています。 インストールに関する問題は インストール・実行 を、探索がうまく進まない場合のチューニングは モンテカルロ法のチューニング を参照してください。
以下の見出しはエラーメッセージ本文を示しています。
ODAT-SE が入力の不備などとして送出するエラー (odatse.exception.Error 系) は、
odatse コマンドが先頭に ERROR: を付けて標準エラー出力に表示します
(MPI 並列実行時、特定のランクで発生したエラーではさらに [rank N] が前置されます)。
それ以外の例外 (ModuleNotFoundError, ValueError, RuntimeError など) は
Python のトレースバックとしてそのまま表示されます。
起動時のエラー#
ModuleNotFoundError: No module named 'scipy' などが出ます#
一部のアルゴリズムは Optional なパッケージに依存しており、未インストールの場合は実行時に ModuleNotFoundError が発生します。
scipy:minsearch(Nelder-Mead法などの局所最適化) およびglobal_search(大域最適化) で必要physbo:bayes(ベイズ最適化) で必要mpi4py:mpiexecによる MPI 並列実行で必要
エラーメッセージに表示されたパッケージを個別にインストールするか、Optional なパッケージを一括でインストールしてください。
$ python3 -m pip install 'ODAT-SE[all]'
詳細は インストール の必要パッケージの項を参照してください。
failed to load 'input.toml' on rank 0: ... と表示されます#
入力ファイルが見つからないか、TOML の構文エラーがあります。
エラーメッセージの後半に原因(ファイルが存在しない、構文エラーの行番号など)が表示されるので、それに従って修正してください。
入力ファイルのパスは odatse コマンドを実行したディレクトリからの相対パスで解釈されます。
section [...] does not appear in input と表示されます#
入力ファイルに必須セクションがありません。
[base], [solver], [algorithm] の各セクションが定義されているか確認してください。
入力ファイルの仕様は 入力ファイル を参照してください。
Unknown solver / unknown algorithm と表示されます#
[solver] または [algorithm] セクションの name に、定義されていない名前が指定されています。
綴りを確認してください。指定可能なアルゴリズム名は [algorithm] セクション の name の項を参照してください。
なお、グリッド探索のアルゴリズム名は mapper です( mapper_mpi ではありません)。
mesh_path not found: ... と表示されます#
グリッド探索系のアルゴリズムで、メッシュ定義ファイル( [algorithm.param] の mesh_path )が見つかりません。
mesh_path は odatse コマンドを実行したディレクトリ(ルートディレクトリ)からの相対パスで解決されます。
実行ディレクトリとファイルの位置関係を確認してください。
Tmin / Tmax / bmin / bmax に関する ValueError が出ます#
exchange や pamc の温度指定に問題があります。代表的なメッセージと原因は次のとおりです。
both Tmin/Tmax and bmin/bmax are defined: 温度 (Tmin/Tmax) と逆温度 (bmin/bmax) の両方が指定されています。どちらか一方にしてください。neither Tmin/Tmax nor bmin/bmax are defined: 温度範囲が指定されていません。bmin must be greater than 0.0 when Tlogspace is True: 対数スケール(Tlogspace = true)ではbmin = 0を指定できません。正の値にするか、Tlogspace = falseにしてください。
各パラメータの意味は レプリカ交換モンテカルロ法 exchange および ポピュレーションアニーリングモンテカルロ法 pamc を参照してください。
実行中のエラー#
ソルバーで RuntimeError が出ます#
一部のパラメータ領域でソルバーがエラーを起こす場合、[runner] セクションで ignore_error = true を設定すると、エラーが出たパラメータに対して NaN を返して計算を続行できます。
[runner]
ignore_error = true
ただし、これはあくまで応急処置です。エラーの原因を調べ、探索範囲や制約条件([runner.limitation])で問題のある領域を除外する方が望ましいです。
mpiexec が "not enough slots" エラーになります#
MPI プロセス数が CPU コア数を超えている場合、Open MPI では
"There are not enough slots available in the system" というエラーになります。
コア数以上のプロセスを起動するには --oversubscribe オプションを付けてください。
$ mpiexec -np 10 --oversubscribe odatse input.toml
再開時のエラー#
チェックポイントから再開するには?#
長時間の計算が中断された場合、チェックポイント機能を使って途中から再開できます。
チェックポイント機能に対応しているのは exchange, pamc, mapper,
random_search, bayes, ttopt です
(minsearch と global_search は checkpoint = true を指定しても出力しません)。
まず、チェックポイントを有効にして実行します。
[algorithm]
checkpoint = true
checkpoint_steps = 1000
checkpoint_interval = 3600 # 1時間ごと
計算が中断された場合、同じ入力ファイルに --resume オプションを付けて再度実行すると、最後のチェックポイントから再開されます。
$ odatse --resume input.toml
オプションを指定しない場合は最初から実行されます(デフォルトの --init と同じ)。終了済みの計算をさらに継続する場合は --cont を使用します。
--cont に対応しているのは exchange, pamc, bayes, ttopt, random_search です。
mapper は探索点が格子で決まるため --resume のみ対応しており、--cont を指定するとエラーになります。
コマンドラインオプションの詳細は odatse コマンド を参照してください。
checkpoint file ... does not exist と表示されます#
--resume で再開しようとしましたが、チェックポイントファイルが見つかりません。以下を確認してください。
元の計算を
checkpoint = trueで実行したか。また、そのアルゴリズムがチェックポイント機能に対応しているか。元の計算と同じディレクトリ・同じ入力ファイル(同じ
output_dir)で実行しているか。元の計算と同じ MPI プロセス構成(
--nalg/--nsolveを含む)で実行しているか。チェックポイントが保存される前(最初の
checkpoint_stepsステップまたはcheckpoint_interval秒より前)に中断されていないか。
計算結果に関する問題#
最適化が収束しません#
以下を確認してください。
探索範囲が適切か:
min_list/max_listが最適解を含む範囲になっているか確認してください。初期値が適切か:
minsearchの場合、初期値 (initial_list) が最適解から極端に遠いと収束しにくくなります。アルゴリズムの選択: 局所解が多い問題に
minsearchを使うと局所解に捕まりやすくなります。exchangeやbayesなど大域的な探索が可能なアルゴリズムを試してください。ステップ数の不足: モンテカルロ法ではステップ数が少ないと十分に探索できません。ステップ数を増やして再実行してください。モンテカルロ法のステップサイズや温度点の調整については モンテカルロ法のチューニング も参照してください。