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のspinは Nα − Nβ = 2S であり、multiplicityそのものではありません。
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計算
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による近似で高速化できますが、通常計算と完全に同一ではないため設定を記録します。
SCF objectからgradient、Hessian、MP2、CCSD等を構築できます。どのobjectのdensity・orbitalを次の処理へ渡したかをscript上で明示できることがPySCFの利点です。
4. 構造最適化
PySCFはgeomeTRIC、PyBerny、qsdopt等とのinterfaceを通じてgeometry optimizationを行います。
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に依存します。
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を導入します。
!nvidia-smi
!pip install pyscf geometric
# CUDA major versionを確認後、公式表に対応する一方を選ぶ
!pip install gpu4pyscf-cuda12x
from pyscf import lib
print(lib.__version__)割当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。
8. 参考文献・公式資料
- PySCF, User Guide.
- PySCF, Geometry optimization.
- PySCF, GPU Acceleration (GPU4PySCF).
- Q. Sun et al., “Recent developments in the PySCF program package,” J. Chem. Phys. 2020. DOI