トラブルシューティング#

実行時に発生する代表的なエラーと対処方法を、症状ごとにまとめています。 インストールに関する問題は インストール・実行 を、探索がうまく進まない場合のチューニングは モンテカルロ法のチューニング を参照してください。

以下の見出しはエラーメッセージ本文を示しています。 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_pathodatse コマンドを実行したディレクトリ(ルートディレクトリ)からの相対パスで解決されます。 実行ディレクトリとファイルの位置関係を確認してください。

Tmin / Tmax / bmin / bmax に関する ValueError が出ます#

exchangepamc の温度指定に問題があります。代表的なメッセージと原因は次のとおりです。

  • 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 です (minsearchglobal_searchcheckpoint = 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 秒より前)に中断されていないか。

計算結果に関する問題#

最適化が収束しません#

以下を確認してください。

  1. 探索範囲が適切か: min_list / max_list が最適解を含む範囲になっているか確認してください。

  2. 初期値が適切か: minsearch の場合、初期値 (initial_list) が最適解から極端に遠いと収束しにくくなります。

  3. アルゴリズムの選択: 局所解が多い問題に minsearch を使うと局所解に捕まりやすくなります。exchangebayes など大域的な探索が可能なアルゴリズムを試してください。

  4. ステップ数の不足: モンテカルロ法ではステップ数が少ないと十分に探索できません。ステップ数を増やして再実行してください。モンテカルロ法のステップサイズや温度点の調整については モンテカルロ法のチューニング も参照してください。