SQD:H₂、甘氨酸与嵌入

依次运行这些示例,检查几何输入、积分输入和固定电荷嵌入。基于采样的量子对角化(SQD) 说明安装限制、参考等级和结果解释。

前提条件

在 Linux x86_64 源码仓库中使用 Python 3.11 或更新版本运行。生产监督执行器使用 /proc 和 fork,其校准资源模型不覆盖其他平台。已发布基准配置使用 Python 3.12。安装锁定版本的 SQD 和开发环境:

uv sync --frozen --extra sqd --extra dev
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
export NUMEXPR_NUM_THREADS=1 JAX_PLATFORMS=cpu

在 Python 启动前设置线程变量。SQD 使用 CPU,不需要 Catalyst 或 GPU。以下命令使用 512 次采样,以便快速演示。examples/sqd/README.md 中的实测基准使用 100,000 次采样。

备注

每条命令在 data/output/examples/ 下新建目录并打印路径。需要可预期的位置时,使用 --output NEW_PATH。该路径必须尚不存在。

1. 建立 H₂ 约定

从最小完整活性空间开始:

uv run --no-sync python -m examples.sqd.h2_ground_state --shots 512

脚本调用 q2m3.sqd.run_sqd,计算 H₂/STO-3G,使用 CAS(2e,2o)、四个系统量子比特、两次 LUCJ 重复和种子 31。采样得到的四个行列式覆盖完整固定粒子数空间。预期 T0 exact_casci 参考计算完成,且 SQD 在接近数值精度的范围内与其一致。

该结果验证张量约定、能量常数、采样转换和结果序列化。恢复全空间不能证明采样优势。

2. 运行稀疏甘氨酸 SQD

演示使用最小甘氨酸活性空间:

uv run --no-sync python -m examples.sqd.glycine_ground_state \
  --active-space 6 --shots 512

甘氨酸可选 CAS(6e,6o)、CAS(8e,8o) 和 CAS(10e,10o),分别使用 12、16 和 20 个系统量子比特。完整闭壳层行列式空间分别包含 400、4,900 和 63,504 个 alpha/beta 对。每种选择构建不同的哈密顿量和参考计算,因此跨行总能量不能衡量 SQD 收敛性。

3. 测量种子离散程度

对 CAS(6e,6o) 运行五个连续种子:

uv run --no-sync python -m examples.sqd.glycine_active_space_scan \
  --active-spaces 6 --shots 512

扫描对每个点启动新解释器,并串行运行。它立即保存每个成功点,记录失败;只要请求的任一点失败,就以非零状态退出。不带 --active-spaces 的默认命令运行全部三个活性空间,共 15 次计算。

使用 statistics.json 查看已执行 T0 行的均值、样本标准差和范围。这些是五个确定种子选择的描述性统计,不是置信区间。缺失或降级点不会进入精确参考曲线。

4. 验证积分适配器

底层入口仅在同时提供经过认证的轨道框架和种子时,才接受已组装的哈密顿量:

uv run --no-sync python -m examples.sqd.glycine_from_integrals \
  --active-space 6 --shots 512

示例通过 build_integrals 创建 IntegralData,再通过 build_ccsd_seed 创建同轨道框架的 CCSDSeed。它将 h1、chemist 顺序的 h2、e_core、IntegralContext 和种子传给 run_sqd_from_integrals。脚本还运行几何入口,并比较六个报告能量字段。数值必须在绝对容差 1e-8 Ha 内一致。仅当两个结果都报告 None 时,字段才可以为 None。轨道框架、哈密顿量和活性轨道索引标识必须完全一致。

两个入口共用同一 SQD 求解器。一致结果验证适配器和组装的一致性,不构成独立数值判据。不要转置 h2 或再次添加 e_core。裸 t1 和 t2 数组不能替代 CCSDSeed。

积分和 CCSD 预处理发生在底层引擎调用前,因此不计入该调用的 timings_s["total"] 和内嵌峰值 RSS。需要覆盖此边界时,使用完整进程监测器:

uv run --no-sync python - <<'PY'
import sys
from pathlib import Path

from q2m3.profiling import measure_command

record = measure_command(
    [
        sys.executable,
        "-m",
        "examples.sqd.glycine_from_integrals",
        "--active-space",
        "6",
        "--shots",
        "512",
    ],
    Path("data/output/examples/tutorial-monitor"),
)
print(record)
if not (record["exit_code"] == 0 and record["reason"] is None):
    raise RuntimeError(f"Command failed: {record}")
PY

从仓库根目录运行该示例,以便 Python 导入 examples。包 API 本身不要求源码仓库。每次运行选择新的监测路径。只检查监测器而不做科学计算时,将命令列表替换为 [sys.executable, "-c", "print('monitor check')"]。

监测器每 10 ms 轮询 Linux /proc。它测量命令进程及每次轮询可见的后代,覆盖导入、序列化和绘图。测量不包括观察者进程。轮询可能漏掉短暂峰值。

监测器复制调用者环境,将 OMP、MKL、OpenBLAS 和 NumExpr 线程数设为 1,并设置 JAX_PLATFORMS=cpu。显式 env 映射按键覆盖这些默认值。默认 cwd 是调用者工作目录。默认预算为 900 秒和 8192 十进制 MB。

返回值和 resources.json 恰好包含以下十个键:

键

含义

command

命令参数列表

exit_code

子进程退出码

reason

监测器终止原因,或 None

wall_s

观测到的实际经过时间,单位秒

peak_tree_rss_mb

采样到的最大进程树 RSS,单位十进制 MB

poll_s

轮询间隔,单位秒:0.01

rss_budget_mb

RSS 预算,单位十进制 MB

wall_budget_s

实际时间预算,单位秒

scope

观测的进程范围

limitation

采样限制

新目录还包含将 stderr 合并到 stdout 的 stdout.log,以及记录 [elapsed_seconds, rss_bytes] 样本的 rss.jsonl。仅当退出码和原因均表示成功时,才接受科学输出。

5. 比较固定分子轨道嵌入模式

水分子验证使用两个非对称人工点电荷,比较对角嵌入和完整单电子嵌入:

uv run --no-sync python -m examples.qmmm.h2o_sqd_validation --shots 512

甘氨酸示例在同一个真空分子轨道框架内比较真空、对角和完整单电子处理:

uv run --no-sync python -m examples.qmmm.glycine_sqd_embedding \
  --active-space 6 --shots 512

嵌入运行中,坐标单位为 Å,点电荷单位为元电荷,能量单位为 Hartree。两种模式均保持真空分子轨道框架和双电子张量不变。diagonal 仅添加活性空间 Delta h_pp;full_oneelectron 保留完整 Delta h_pq 扰动。e_core 已包含 MM 引起的核能和冻结核心校正。

分别解读两种效应:

  • baseline_energy(mode) - baseline_energy(vacuum) 为固定哈密顿量参考能量平移,其质量取决于各参考计算。

  • delta_mHa(mode) - delta_mHa(vacuum) 为 SQD 求解器残差的变化。

这些电荷是固定测试环境。示例不包含轨道弛豫、MM 极化、溶剂采样、相关 RDM 反馈、SQD-MC 循环或溶剂化自由能。

读取产物

H₂、甘氨酸、积分和甘氨酸嵌入运行写入 input.json、完整结果 JSON、summary.json、summary.csv,以及 PNG 和 SVG 能量 / 成本图。H₂O 验证则写入 report.json、各模式结果和下游包装器 JSON、汇总及比较图。扫描为每个点添加子目录和日志,并生成 statistics.json。积分示例还添加 assembly.json 和 consistency.json。失败时保留已完成产物,并写入 failure.json。

关键结果字段如下:

字段

解释

status

completed 或显式请求的 reference_only 模式

sqd_energy

采样子空间能量,单位 Hartree(仅参考运行时缺失)

baseline_tier、baseline_method

实际参考路径。只有 T0 在活性空间内精确

delta_mHa

1000 * (E_SQD - E_baseline)。正值表示 SQD 更高

subspace_dim、full_ci_dim

采样笛卡尔积行列式空间和完整固定粒子数空间

reference_attempts

有序求解器选择 / 执行审计

provenance

配置、轨道框架、哈密顿量、种子及输入来源

timings_s

各阶段计时,并明确说明未运行阶段的原因

diagnostics.resources

轮询的引擎进程 RSS 范围、上限和计时边界

null_reasons、warnings

缺失值或降级值的必要说明

保留完整 SQDResult 或其序列化 sqd.result.v1 对象。没有方法、层级、活性空间、轨道框架、哈密顿量、单位和不确定性含义的能量,不能作为可审计结果。

资源失败与仅参考运行

ReferenceConfig 设置统一的实际时间截止点和十进制 MB RSS 预算。执行器取用户预算、当前主机可用内存及 8192 MB 组件硬上限中的最低值。预测值达到上限时,会在分配前拒绝。观测进程树 RSS 达到上限时,监督执行器终止运行。allow_large=True 只能跨越软策略边界,不能绕过校准域、主机可用量或硬上限。

需要有意仅计算基准而不采样时,传入 mode="reference_only"。结果记录缺失采样字段及原因。失败的完整运行不会静默变成仅参考运行,也不会用 HF 替代 SQD。

全部 40 个结果字段见 SQD 结果字段。实测结果和研究状态见 SQD 实测结果。