Python-based Electronic Structure

PySCF

Python objectとして分子、SCF、DFT、post-HF計算を組み立て、構造最適化やGPUへ同じworkflowを拡張します。

位置づけ
programmable ab initio・DFT framework
主な入力
Python、座標、basis、method
主な出力
energy、wavefunction object、density、gradient

1. 概要

PySCFは計算手順をPython APIで組み立てられる電子状態計算frameworkです。SCF/DFTに加え、MP2、coupled cluster、CI、MCSCF、periodic calculations等へ拡張できます。

対話的な検討とautomationに向きますが、Python scriptが実行できることと、chemical modelが妥当であることは別です。basis、spin、SCF stability、grid、density fitting、convergenceを明示します。

2. Mole object

gto.Mで原子、座標、単位、basis、電荷、spinを定義します。PySCFのspinNα − Nβ = 2S であり、multiplicityそのものではありません。

Python
from pyscf import gto

mol = gto.M(
    atom="""
    O  0.000000  0.000000  0.117300
    H  0.000000  0.757200 -0.469200
    H  0.000000 -0.757200 -0.469200
    """,
    basis="def2-svp",
    charge=0,
    spin=0,
    unit="Angstrom",
    verbose=4,
)

3. SCF・DFT計算

Python
from pyscf import dft

mf = dft.RKS(mol)
mf.xc = "B3LYP"
mf.grids.level = 4
mf.conv_tol = 1e-10
energy = mf.kernel()

if not mf.converged:
    raise RuntimeError("SCF did not converge")
print(f"E = {energy:.12f} Eh")

閉殻はRHF/RKS、開殻はUHF/UKSまたはROHFを選びます。density_fit()は補助basisによる近似で高速化できますが、通常計算と完全に同一ではないため設定を記録します。

計算objectを連結する

SCF objectからgradient、Hessian、MP2、CCSD等を構築できます。どのobjectのdensity・orbitalを次の処理へ渡したかをscript上で明示できることがPySCFの利点です。

4. 構造最適化

PySCFはgeomeTRIC、PyBerny、qsdopt等とのinterfaceを通じてgeometry optimizationを行います。

Python + geomeTRIC
from pyscf.geomopt.geometric_solver import optimize

mol_eq = optimize(mf, maxsteps=100)
print(mol_eq.tostring())

# optimized geometryでSCFを再構築
mf_eq = dft.RKS(mol_eq)
mf_eq.xc = "B3LYP"
mf_eq.grids.level = 4
mf_eq.kernel()

optimizerが終了しても、最終gradient、SCF convergence、geometry、frequencyを確認します。optimizer packageとPySCFの両versionを保存します。

5. GPU4PySCF

GPU4PySCFはPySCF互換APIで一部のSCF、DFT、gradient、Hessian、solvent等をGPUへ移します。対応methodと機能はversionに依存します。

Python
mf_cpu = dft.RKS(mol).density_fit()
mf_cpu.xc = "B3LYP"

mf_gpu = mf_cpu.to_gpu()
energy_gpu = mf_gpu.kernel()
gradient_gpu = mf_gpu.nuc_grad_method().kernel()

GPU memory、CUDA、CuPy、GPU4PySCF binaryの組合せを確認します。CPUとGPUでenergy・gradient差を小分子で比較し、precisionとgrid条件を揃えます。

6. Google ColabでのGPU計算

ColabではRuntimeでGPUを選択し、実際に割り当てられたGPUとCUDAを確認してから対応packageを導入します。

Colab cells
!nvidia-smi
!pip install pyscf geometric

# CUDA major versionを確認後、公式表に対応する一方を選ぶ
!pip install gpu4pyscf-cuda12x

from pyscf import lib
print(lib.__version__)
Colab環境は固定ではない

割当GPU、CUDA、driver、session時間、diskは変化します。Notebook冒頭にenvironment確認cellを置き、計算途中のcheckpointと結果を永続storageへ退避します。GPUが割り当てられていない場合はCPUへfallbackします。

7. 検証と保存

  • EnvironmentPython、PySCF、GPU4PySCF、CuPy、CUDA、optimizerのversion。
  • Molecule座標単位、basis、ECP、charge、spin、symmetry。
  • NumericsSCF threshold、grid、density fitting、memory、thread数。
  • Artifactsscript、標準出力、最終座標、energy、gradient、checkpoint。

PySCF例をダウンロード

8. 参考文献・公式資料

  1. PySCF, User Guide.
  2. PySCF, Geometry optimization.
  3. PySCF, GPU Acceleration (GPU4PySCF).
  4. Q. Sun et al., “Recent developments in the PySCF program package,” J. Chem. Phys. 2020. DOI

次章: Psi4