Ep.2 | LLZO–Li 界面を Quantum ESPRESSO + GPU で幾何最適化する(再現可能な手順・落とし穴つき)

Ep.2|LLZO–Li 界面を Quantum ESPRESSO + GPU で幾何最適化する

シリーズ:固体電解質 LLZO と Li 金属界面の第一原理計算 → データ拡張 → DeePMD 学習 → 大規模MD

TL;DR(本編のゴール)

  • 目的: 界面モデルの 安定構造 をつくる(以降の 電荷再分布・DOS/PDOS(Ep.3)AIMD/DeePMD 学習(Ep.4)の土台)。
  • 完了条件: 幾何最適化(relax / 必要なら vc-relax)で max|F| < 1e-3 Ry/Bohr、残留圧力 < 0.5 kbar を達成。
  • いまの進捗: まず SCF ベースラインを 4×A100 で取得済(42イテレーションで収束、詳細は下の「ベースライン結果」)。この状態から 幾何最適化へ進めます。
  • この記事でできること: ブログの内容をコピペするだけで 同条件で再現できます(擬ポテMD5、k点、KS数、壁時計時間などの 再現性メタデータ付き)。

計算環境(GPU)

QEQuantum ESPRESSO 7.4.1(GPUビルド)
GPU/CPUNVIDIA A100 80GB × 4(単一ノード) / MPI 4 ranks, OpenMP 1 thread
ツールチェインNVHPC 25.7(CUDA 12.9, HPC-X Open MPI 2.22.1)
実行スクリプトrun_qe_4gpu_auto.sh(npool自動、GPU静音化のヒントつき)
作業ディレクトリ~/li_llzo_if_demo/qe/llzo_if

すぐ試せる:コピー&ペースト手順(4GPU)

0) 擬ポテンシャル(短名に統一 / symlink)

mkdir -p ./pseudos_min
ln -sf /home/dl/li_llzo_if_demo/qe/llzo_if/pseudos/Li.pbe-s-van_ak.UPF      ./pseudos_min/Li.UPF
ln -sf /home/dl/li_llzo_if_demo/qe/llzo_if/pseudos/O.pbe-rrkjus.UPF          ./pseudos_min/O.UPF
ln -sf /home/dl/llzo_qe_md_v2/results/llzo_T1000_S1/tmp_1000K_S1/llzo.save/La.pbe-spfn-rrkjus_psl.1.0.0.UPF ./pseudos_min/La.UPF
ln -sf /home/dl/llzo_qe_md_v2/results/llzo_T1000_S1/tmp_1000K_S1/llzo.save/Zr.pbe-spn-rrkjus_psl.1.0.0.UPF  ./pseudos_min/Zr.UPF
ls -l ./pseudos_min/*.UPF  # リンク確認

1) 入力ファイルから SCF を自動生成(必要に応じて)

relax_k222_abs.in を基準に、SCF入力を整えます(Li 置換ミスマッチ時はホストLiを採用)。

./mk_scf_from_abs_auto.sh relax_k222_abs.in scf_ppcg_222.clean.in relax_k222.out '' ppcg

2) SCF(ベースライン)を 4GPU で実行

※ GPUで安定・簡単な ppcg 版か、馴染みのある david 版のどちらかで。

# 推奨(GPU向き):
./run_qe_4gpu_auto.sh scf_ppcg_222.clean.in

# 互換性重視(Davidson):
cp scf_ppcg_222.clean.in scf_david_222.clean.in
sed -i "s/diagonalization='ppcg'/diagonalization='david'/" scf_david_222.clean.in
./run_qe_4gpu_auto.sh scf_david_222.clean.in

3) 幾何最適化(本編)

※ ファイル名は アンダーバーで統一:relax_k222_abs.inpseudo_dir='./pseudos_min' を使用。

./run_qe_4gpu_auto.sh relax_k222_abs.in
# 収束判定: ログの max|F| < 1e-3 Ry/Bohr、圧力 < 0.5 kbar を確認

(任意)実行ログの冗長メッセージを減らす

OpenACC/NVHPC 通知や MPI のバインド表示を抑制します。

sed -i \
  -e 's/^export NVCOMPILER_ACC_NOTIFY=.*/# export NVCOMPILER_ACC_NOTIFY=0/' \
  -e 's/^export NV_ACC_TIME=.*/# export NV_ACC_TIME=0/' \
  -e 's/--report-bindings //' \
  -e 's/ -x NV_ACC_TIME//' run_qe_4gpu_auto.sh

ベースライン結果(SCF, 4×A100, np=4, npool=4)

LLZO–Li 界面、nat=108, ntyp=4
カットオフecutwfc=50 Ry, ecutrho=400 Ry
k 点2 × 2 × 2(自動)→ 有効 k 点 = 8
KS状態数382
収束42 iteration で収束(Davidson例)
Fermi energy1.2140 eV
全エネルギー-4433.20302581 Ry(smearing項・内部エネルギーはログ参照)
メモリ見積Max動的RAM/プロセス ≳ 14.02 GB(総計 ≳ 53.84 GB)
Wall時間3m45s(ログ例:PWSCF: 3m45.35s WALL
出力./tmp/llzo_if.save/ に密度・波動関数・擬ポテを保存

※ ログ末尾の ieee_* 警告は数値演算の一般的な通知で、計算は正常終了(JOB DONE)。

落とし穴と対処

  • 擬ポテの取り違えpseudo_dir に「ディレクトリ」を渡しただけでファイル名が解決できないと、FIO-F-/formatted read/unit=-13短名 + 明示的パスにする(./pseudos_min/Li.UPF など)。
  • GPU oversubscription 警告Message from routine print_cuda_info: High GPU oversubscription ... が出る場合あり。CVD=1枚/ランクでも表示されることがあり、実害なし
  • NVHPC の通知が多い:上の sed ワンライナーで NVCOMPILER_ACC_NOTIFY / NV_ACC_TIME--report-bindings を無効化し、静かに。
  • OpenMP/LLVM の混在OMP_TARGET_OFFLOAD=DISABLED, LIBOMPTARGET_PLUGIN=NONE を実行環境で明示して干渉を避ける。

この先にやること(Ep.2 → Ep.3/4)

  1. 幾何最適化(本編)relax(必要なら vc-relax)で max|F| < 1e-3 Ry/Bohr、圧力 < 0.5 kbar を満たすまで収束。
  2. 最終構造で SCF:安定な電荷密度を確定。
  3. NSCF + DOS/PDOSdos.x / projwfc.x でギャップと軌道寄与を評価。
  4. 電荷密度差pp.xΔρ = ρ(LLZO|Li) - ρ(LLZO) - ρ(Li) を出力、等値面や断面で可視化(Ep.3)。
  5. AIMD & データ整備:300/500/800 K、欠陥(VO、Li Frenkel)、界面電場、応力±1–2%などをサンプリング → DeePMD データセット化 → 学習 → LAMMPS で拡散・樹枝化の前兆を探索(Ep.4)。

(補助)最終構造から SCF 入力をつくるシェル断片

Relax のログ(または .save)から CELL_PARAMETERS と最終 ATOMIC_POSITIONS を抜き出して SCF 入力を生成:

# 例: relax の出力ログ relax_k222_abs.out から最終構造を抽出(粗い例)
awk '/Begin final coordinates/{flag=1}
     /End final coordinates/{flag=0}
     flag' relax_k222_abs.out > final_coords.txt

# 必要に応じて SCF 雛形(&control/&system/&electrons/ATOMIC_SPECIES/K_POINTS)は手元の clean.in から流用
# CELL_PARAMETERS / ATOMIC_POSITIONS を final_coords.txt で置換して scf_opt_222.in を作成

再現性メタデータ(今回のログより)

擬ポテンシャル(MD5) Li: c85dc41f681efce1cc804fd957bc97e8
La: e3bc141c2ecb461b8d0a035ce9ac970e
Zr: 3d17ee99aa1707c2ccb6b09ed65e51a1
O : fadcf19ee70a498d3030e2e79cf929a4
入力の代表値ibrav=0, occupations='smearing', smearing='mv', degauss=0.02
k点設定K_POINTS automatic 2 2 2 0 0 0
実行条件MPI 4 ranks, npool=4, GPU 1枚/ランク(CUDA_VISIBLE_DEVICES で固定)
出力先./tmp/llzo_if.save/
実行時間の内訳(例)electrons: ~208s, c_bands: ~129s, sum_band: ~40s ほか

この記事での主な変更点(初版→今回)

  • ファイル名の統一: relax_k222_abs.in(下線)。表記ゆれ(relax_k222.abs.in)を解消。
  • コピペ手順を明示: 擬ポテの短名リンク、SCF/relax 実行、GPU静音化(sed ワンライナー)を追加。
  • 再現性メタデータ追加: 擬ポテ MD5、k点、KS数、Wall時間、出力先を明記。
  • 次にやることの具体化: Ep.2 → Ep.3/4 の作業単位(Δρ、DOS/PDOS、AIMD/欠陥/応力/電場)を列挙。

© 2025 Server-Gear Lab. このページ内のコマンドやスクリプトは自己責任で実行してください。計算条件は随時更新されることがあります。