30-observables 问答笔记¶
Q1:组 1 是不是总的来说围绕能量、或 BFGS 时的力来输出?¶
原文:"组 1:结构与能量(vc-relax / scf 直接输出)"
基本准确,但更精细地看——组 1 的所有物性都可以统一归入"基态能量及其对几何参数的导数"这一类。
组 1 的所有物理量——一个统一视角¶
| 物理量 | 数学关系 | 阶数 |
|---|---|---|
| 总能量 \(E\) | 基态 \(E[\rho_0]\) | 0 阶 |
| 力 \(\vec{F}_I\) | \(-\partial E / \partial \vec{R}_I\) | 一阶导 |
| 应力 \(\sigma_{ij}\) | \(-\partial E / \partial \epsilon_{ij} / V\) | 一阶导(对应变) |
| 弛豫结构 | 让 \(F=0\) 且 \(\sigma=0\) 的几何 | 能量极小点 |
| 形成能 | \(E_{\text{化合物}} - \sum E_{\text{单质}}\) | 能量差 |
| 体模量 \(B\) | \(V \partial^2 E / \partial V^2\) | 二阶导(对体积) |
| 弹性常数 \(C_{ij}\) | \(\partial \sigma / \partial \epsilon\) | 二阶导 |
所以你说的"能量+力"是对的——但要扩展: - 能量本身(0 阶) - 能量对原子位置的导数 = 力 - 能量对晶格应变的导数 = 应力 - 能量对这些参数的二阶导 = 弹性/体模量
为什么组 1 最准¶
- HK 定理严格保证基态能量——这是 DFT 的理论基石
- Hellmann-Feynman 定理:力和应力可以从 SCF 收敛后的 \(\rho\) 直接算出,不需要额外近似
- 误差系统性:PBE 高估晶格 ~1%、PBEsol 更准——偏差方向和量级可预测
与其他组对比¶
| 组 | 和"基态"的关系 | DFT 精度 |
|---|---|---|
| 组 1 结构能量 | 基态及其几何导数 | ✅ meV/atom ~ 0.5% 级 |
| 组 2 电子结构 | 基态 ρ 的本征值分布 | ⚠️ 带隙系统低估 30–50% |
| 组 3 磁性 | 基态 ρ 但需自旋极化 | ✅ 好+ 要小心初值 |
| 组 4 声子 | 基态对原子运动的二阶响应 | ✅ 好 |
| 组 5 光学 | 涉及激发态(DFT 原则不适用) | ⚠️ 定性 |
组 1 因为是"直接基态量",所以最准——你的观察抓住了组 1 的本质。
具体对应 benchmark¶
TritonDFT 的评分字段(COMPARISON_RULES)全在组 1 里:
- a, b, c, α, β, γ ← 组 1.3 弛豫晶格
- space_group, point_group, crystal_system ← 对组 1.3 的对称性分析
这个选择不是偶然——只评最准的物性,才能让 benchmark 的"错了"真的是 LLM 推断错了,而不是 DFT 本身精度不够。
Q2:组 2 实际计算是交给 QE?作为 LLM 需要输入什么?¶
原文:"组 2:电子结构(scf / nscf / bands / dos)"
对,所有数值计算都交给 QE——LLM 的任务是生成正确的输入文件和工作流。组 2 比组 1 复杂,因为需要多步计算,每步有自己的参数。
电子结构任务的标准工作流¶
以带隙计算为例(band_gap.json task):
步骤 1: vc-relax → 弛豫结构得到基态几何
步骤 2: scf → 在弛豫结构上跑 SCF,得到自洽 ρ
步骤 3: nscf → 用已收敛 ρ,在更密 k 网格下解 KS
步骤 4: bands.x → 沿 BZ 高对称路径画能带
DOS 任务(dos.json)则是:
LLM 需要为每一步生成一个完整的输入文件——4 个文件串联,参数要协调一致。
LLM 必须决定的参数¶
所有步骤共享的参数:
- ibrav、celldm、CELL_PARAMETERS(结构)
- ATOMIC_POSITIONS(原子位置)
- ATOMIC_SPECIES + pseudo_dir(赝势选择)
- ecutwfc、ecutrho(平面波截断)
- nspin、starting_magnetization(磁性)
步骤 1 vc-relax 特有:
- calculation = 'vc-relax'
- ion_dynamics、cell_dynamics、forc_conv_thr、press_conv_thr
- k 网格(中等密度,如 6×6×6)
步骤 2 scf 特有:
- calculation = 'scf'
- conv_thr(电子收敛阈值)
- k 网格(同 vc-relax 或略密)
步骤 3 nscf 特有:
- calculation = 'nscf'
- 更密的 k 网格(如 16×16×16,比 scf 大 2-3 倍)
- 加空带的 nbnd(比 scf 多 10-20 条,否则看不到导带)
步骤 4 bands 特有(band_gap 任务):
- calculation = 'bands'
- K_POINTS crystal_b:BZ 高对称路径(如 Γ → X → W → L → Γ → K)
- 每段路径的采样点数
步骤 4 dos.x 特有(dos 任务):
- Emin, Emax, DeltaE:能量窗口和分辨率
- smearing 参数(如 0.01 eV)
- 读取 nscf 的输出文件
LLM 的"元能力"要求¶
对组 2 任务,LLM 必须:
- 知道工作流:不能只给一个输入文件,要理解多步串联
- 知道每步特殊性:nscf 的 k 网格要密,bands 要写路径,dos 要选合适的展宽
- 知道识别材料类型:半导体用 fixed 占据,金属用 smearing,磁性要 nspin=2
- 知道参数的"数量级":
- nbnd = 价电子/2 × 1.5(绝缘体)或 × 2(金属)
- nscf k 网格 ≈ scf k 网格 × 1.5–2 倍
- DOS 的 DeltaE ~ 0.01 eV(默认够)
benchmark 中这部分的 LLM 失败模式¶
实际测试中 LLM 常见错误:
- 忘了 nbnd buffer:nscf 只设
nbnd = 价电子/2→ 看不到导带 → 带隙算不出 - nscf k 点太稀:用 scf 的 k 网格 → DOS/带隙抖动
- bands 路径错:用随机 k 点而非高对称路径 → 能带图没物理意义
- 忘了 smearing:金属跑 bands → SCF 不收敛
- 多步不协调:vc-relax 用 PBE,scf 用 LDA → 泛函不一致
所以 LLM 的任务不只是"写一份 QE 输入"——而是"理解完整的 DFT 工作流 + 每步参数选择"。这正是 benchmark 要考查的能力。
和 ML 的类比¶
| ML 场景 | DFT 对应 |
|---|---|
| 训练 NN 需要多阶段(预训练 → 微调 → 评估) | DFT 电子结构需要多步(vc-relax → scf → nscf → bands) |
| 每阶段有不同超参(lr、batch size) | 每步有不同参数(k 网格、nbnd、阈值) |
| 用错阶段的超参会全盘皆输 | 用错一步的参数会全盘皆错 |
LLM 作为 "DFT agent" 的核心能力:理解多步工作流 + 参数协调。
Q3:磁性初值敏感是因为 BFGS 算法本身初值敏感吗?¶
原文:"基态磁构型常不唯一,初值敏感"
方向对,但层次搞混了——磁性的初值敏感不是 BFGS 的问题,而是 SCF 的问题。BFGS(化简 12)和 SCF(化简 11)是两个独立的"初值敏感"。
澄清两种初值敏感¶
| 问题 | 哪个算法? | 初值是什么? | 失败表现 |
|---|---|---|---|
| 几何陷入局部极小 | BFGS(化简 12) | 原子位置、晶格 | 弛豫到错误相(如 β-Si 而非 α-Si) |
| 磁构型初值敏感 | SCF(化简 11) | 电子密度 \(\rho\) 的初猜 | 塌到非磁解;或收敛到错误磁序 |
两者都是"非凸优化陷入局部极小",但问题的层次完全不同: - BFGS 调"核位置" - SCF 调"电子密度"
磁性的初值问题来自哪¶
SCF 是电子 ρ 的迭代:
如果初值 \(\rho_0\) 不带磁性(\(\rho_\uparrow = \rho_\downarrow\),无破缺): - 对称性保护 SCF 每一步都保持 \(\rho_\uparrow = \rho_\downarrow\) - 最终收敛到非磁解(即使真实基态是磁性) - 这不是 BFGS 的问题——BFGS 还没开始!
QE 的解决:starting_magnetization 显式给每种原子一个初始磁矩值:
&SYSTEM
nspin = 2
starting_magnetization(1) = 0.5 ! Fe 初始磁矩 +0.5
starting_magnetization(2) = -0.5 ! 反铁磁配对的 Fe 初始 -0.5
/
这样 SCF 从一个有破缺的初始密度开始,才能收敛到正确的磁性解。
为什么 BFGS 不是磁性初值问题的来源¶
BFGS 在磁性计算中确实有作用(优化原子位置),但磁构型不是 BFGS 调的:
- BFGS 在外层——每次改变原子位置
- 每次都调用内层 SCF得到电子基态(包括磁矩)
- 内层 SCF 自动继承上一次的磁构型作为初猜(所以 BFGS 中间不会"忘了磁性")
- 但最开始的那次 SCF 的初猜还是靠 starting_magnetization
所以"磁性初值敏感"本质是化简 11 SCF 的非凸性,不是 BFGS 的问题。
一个更深的观察¶
化简 11 和化简 12 都是固定点迭代 / 非凸优化,都有初值敏感性:
| SCF | BFGS | |
|---|---|---|
| 变量 | ρ(r) 在每个点的值 | 原子位置 |
| 目标 | 自洽:\(V_{eff}(\rho) = \rho\) 的固定点 | 能量极小:\(\nabla E = 0\) |
| 初值来源 | 原子密度叠加 / 上次 ρ | 用户给的初始结构 |
| 典型陷阱 | 磁性坍缩(→ 非磁解) | 陷入亚稳相 |
| 解决 | starting_magnetization 破缺对称 |
给合理初始结构(来自文献/MP) |
你的猜测"初值敏感" 对 ——但是对 SCF 说的。BFGS 也有初值敏感,只是在几何层面。
类比 ML¶
- SCF 初值敏感 ≈ 梯度下降找 loss landscape 最小值,陷入局部极小
- BFGS 初值敏感 ≈ 超参搜索,从不同起点出发到不同局部最优
- 两者互不替代
记忆要点:见到"磁性初值敏感" → 想到 SCF + starting_magnetization;见到"结构初值敏感" → 想到 BFGS + 初始晶格/原子位置。
Q4:当前 DFTBench 的 materials 和 questions 是什么类型?¶
原文:"task 有、评分无——这是 DFTBench 设计不完整处"
完整清单如下——这是你制作自制 bench 时的参考起点。
Materials:100 种 = 10 类 × 10 材料¶
详见 benchmark/materials/*.json:
| 类别 | 材料 |
|---|---|
| metal | Li, Na, K, Al, Cu, Ag, Au, Fe, W, Mo |
| semiconductor | Si, Ge, C(diamond), GaAs, InP, ZnS, ZnSe, CdTe, AlP, BN(hex) |
| insulator | NaCl, KCl, MgO, CaO, LiF, NaF, AlN, SiO₂, BeO, MgF₂ |
| ferroelectric | BaTiO₃, PbTiO₃, KNbO₃, NaNbO₃, LiNbO₃, LiTaO₃, GeTe, SnTe, BiFeO₃, HfO₂ |
| piezoelectric | ZnO, AlN, GaN, BN(wz), BeO, CdS, CdSe, LiNbO₃, LiTaO₃, SiO₂ |
| magnetic | Fe, Co, Ni, Cr, Mn, NiO, MnO, FeO, Fe₃O₄, Cr₂O₃ |
| superconductor | Pb, Al, Sn, Nb, V, MgB₂, NbSe₂, TaS₂, FeSe, LaH₁₀ |
| topological | Bi, Sb, Bi₂Se₃, Bi₂Te₃, Sb₂Te₃, HgTe, SnTe, PbTe, Cd₃As₂, Na₃Bi |
| thermoelectric | Bi₂Te₃, Sb₂Te₃, PbTe, SnTe, GeTe, Mg₂Si, Mg₂Ge, SiGe, CoSb₃, SnSe |
| optical | Si, Ge, GaAs, ZnO, Al₂O₃, MgF₂, CaF₂, LiF, LiNbO₃, BaF₂ |
每条材料有 4 个字段:
(parameters, ground_truth, metadata 目前都空,详见 report_ground_truth.md)
Questions:9 种 task 模板¶
详见 benchmark/questions/*.json:
| Task name | 主要操作 | 精度要求 |
|---|---|---|
vc_relax |
vc-relax 弛豫结构 | 默认 |
vc_relax_low_acc |
同上 | 20 meV/atom |
vc_relax_medium_acc |
同上 | 10 meV/atom |
vc_relax_high_acc |
同上 | 1 meV/atom |
vc_relax_scf |
vc-relax 后再单点 SCF | 1e-8 Ry |
scf_energy |
仅单点 SCF | 默认 |
band_gap |
vc-relax + scf + nscf + bands | 默认 |
dos |
vc-relax + scf + nscf + bands + dos | 默认 |
dos_1mev |
同上 | 1 meV 分辨率 |
生成 prompt 的方式:笛卡尔积(每个 task × 每个材料),实际 10 类 × 10 材料 × 9 task = 最多 900 个独立 prompt(不是全部都用)。
评分(src/evaluate/compare.py)¶
COMPARISON_RULES = {
"a": "relative", # 晶格常数
"b": "relative",
"c": "relative",
"alpha": "relative",
"beta": "relative",
"gamma": "relative",
"space_group": "exact", # 空间群
"space_group_number": "exact",
"point_group": "exact",
"crystal_system": "exact",
}
Task × 评分字段对应表¶
| Task | 应该评什么 | compare.py 实际评什么 | 覆盖度 |
|---|---|---|---|
vc_relax |
晶格 + 对称性 | 晶格 + 对称性 | ✅ 完整 |
vc_relax_*_acc |
同上 + 能量精度 | 只有晶格 + 对称性 | ⚠️ 部分 |
scf_energy |
总能量 | 无(缺 total_energy_ev_per_fu) |
❌ 无评分 |
vc_relax_scf |
晶格 + 能量 | 只有晶格 | ⚠️ 部分 |
band_gap |
带隙 | 无(缺 band_gap) |
❌ 无评分 |
dos |
DOS 分布 | 无 | ❌ 无评分 |
dos_1mev |
同上高精度 | 无 | ❌ 无评分 |
当前 benchmark 实际考查范围¶
实际有意义的评分项: - 晶格常数(a, b, c, α, β, γ)相对误差 - 空间群 / 点群 / 晶系精确匹配
即便这些也有问题:因为 ground_truth 字段全空(见 doc/reports/report_ground_truth.md),实际评分结果 max_rel_error=inf, all_exact_match=False——所有评分都是 trivial。
对自制 bench 的启发¶
如果要做一个能实际评分的类 DFTBench,你需要:
- 修 compare.py:加入
total_energy_ev_per_fu,band_gap,dos等字段 - 填 ground_truth:用高精度参数跑出真实数值
- 控制 task 难度梯度:
- 简单档:只评晶格(组 1.3)——Si、Al 这些经典材料
- 中档:加能量(组 1.1)——需要 1 meV/atom 精度
- 困难档:加带隙(组 2.1)——要接受 DFT 低估
- 超难档:加磁矩(组 3)——考查
nspin+starting_magnetization - 平衡 DFT 适用性:避开 DFT 本身失败的体系(如强关联铜氧化物、激发态主导的光学)
对应的源文件¶
- Materials:
TritonDFT/tritonDFT-src/benchmark/materials/*.json - Questions:
TritonDFT/tritonDFT-src/benchmark/questions/*.json - 评分:
TritonDFT/tritonDFT-src/src/evaluate/compare.py - 详细分析:
todo/diy-bench.md
本轮 4 个问题速览¶
| # | 主题 | 核心 |
|---|---|---|
| Q1 | 组 1 是围绕能量/力? | ✅ 对——统一视角:基态能量及其对几何参数的 0/1/2 阶导数(E, F/σ, B/C);因为是"直接基态量"所以 DFT 最准 |
| Q2 | 组 2 LLM 需要输入什么 | 多步工作流(vc-relax → scf → nscf → bands/dos),每步有特殊参数:nbnd buffer、nscf k 网格、bands 路径、DOS 展宽;LLM 必须理解整个工作流不只是单个输入文件 |
| Q3 | 磁性初值敏感 = BFGS 敏感? | ❌ 不是——磁性是 SCF(化简 11)的问题,由 starting_magnetization 破缺对称;BFGS 的初值敏感是几何层面(原子位置),两者层次不同 |
| Q4 | DFTBench 的 materials 和 questions 类型 | 100 材料(10 类 × 10 种)× 9 task(vc-relax 三精度档、scf_energy、band_gap、dos 等);实际评分只覆盖晶格+对称性;能量/带隙/DOS 的 task 存在但评分未实现;ground_truth 全空导致评分全部平凡 |