跳转至

在扩大规模前设置资源预算

先用小规模程序检查规划结果,再增加站点数、轨迹数或并发点数。单个状态数组只是内存的一部分;求解器工作区、缓冲区和工作线程副本也会占用空间。

设置 可以控制什么
max_memory_bytes、memory_fraction 规划时的内存预算;不是操作系统级内存隔离
dtype 振幅精度与元素大小;complex64 为 8 字节,complex128 为 16 字节
workers 扫描或轨迹的并发规划;不是内核线程数
trajectories 轨迹估计样本数;与测量 shots不同
返回概率、状态等选项 返回和保存的数据量;不免除演化本身需要的状态

完整态矢量含 2^N 个复数,密度矩阵含 4^N 个。轨迹通常保存一批纯态,并受分块和并发策略约束。不能只用“单态字节数×轨迹数”替代实际峰值规划。

查看六站点的真实规划

"""检查 Hybrid workload 的资源规划和实际执行配置。

Planner 会在分配大型状态数组前比较候选 method。最终 plan 会给出状态表示、Hilbert
维数、内存估算、worker 数、tolerance 和拒绝原因,结果中另有实际采用的配置。
"""

from __future__ import annotations

import json

from cascaqit import (
    AHSProgram,
    AtomRegister,
    Circuit,
    HybridProgram,
    LocalBackend,
    Waveform,
)
from cascaqit.simulators import SimulationOptions


def main() -> None:
    """运行六 site D-A-D workload,并对照规划值与实际应用值。"""
    sites = 6
    analog = AHSProgram(
        AtomRegister.line(count=sites, spacing=7.0),
        program_id="lesson.hybrid.resource.analog",
    ).drive(
        rabi=Waveform.linear(0.1, 0.6, duration=0.1),
        detuning=Waveform.constant(-0.1, duration=0.1),
        phase=0.0,
    )
    program = (
        HybridProgram("lesson.hybrid.resource")
        .digital("prepare", Circuit(sites).h(0).cx(0, 1))
        .analog("evolve", analog)
        .digital("correct", Circuit(sites).rz(0.2, sites - 1))
        .measure_all()
    )
    result = (
        LocalBackend(analog_time_steps=4)
        .run(
            program,
            shots=16,
            seed=105,
            options=SimulationOptions(
                integrator="fixed_step_krylov",
                dtype="complex64",
                max_steps=4,
                workers=2,
            ),
        )
        .result()
    )
    plan = result.metadata["simulation_plan"]
    execution = result.metadata["simulation_execution_config"]

    payload = {
        "track": "hybrid_researcher",
        "level": "expert",
        "lesson": "resource_planning",
        "facts": {
            "logical_sites": plan["logical_sites"],
            "method_selected": plan["method_selected"],
            "candidate_statuses": {
                item["method"]: item["status"] for item in plan["candidates"]
            },
            "hilbert_dimension": plan["hilbert_dimension"],
            "state_bytes": plan["estimate"]["state_bytes"],
            "estimated_peak_bytes": plan["estimate"]["estimated_peak_bytes"],
            "workers_requested": plan["metadata"]["workers_requested"],
            "workers_applied": execution["workers"],
            "estimated_peak_positive": plan["estimate"]["estimated_peak_bytes"] > 0,
            "execution_dtype": execution["dtype"],
            "tolerance_applied": execution["tolerance_applied"],
            "state_bytes_returned": result.metadata["state_bytes_returned"],
        },
        "boundaries": {
            "hardware_execution": False,
            "cloud_execution": False,
            "network_accessed": False,
            "credentials_loaded": False,
        },
    }
    print(json.dumps(payload, sort_keys=True))


if __name__ == "__main__":
    main()

下载完整脚本

python examples/user/tracks/hybrid_researcher/05_expert_resource_planning_zh.py
{
  "boundaries": {
    "cloud_execution": false,
    "credentials_loaded": false,
    "hardware_execution": false,
    "network_accessed": false
  },
  "facts": {
    "candidate_statuses": {
      "density_matrix": "rejected",
      "state_vector": "selected",
      "subspace": "rejected",
      "trajectory": "rejected"
    },
    "estimated_peak_bytes": 20992,
    "estimated_peak_positive": true,
    "execution_dtype": "complex64",
    "hilbert_dimension": 64,
    "logical_sites": 6,
    "method_selected": "state_vector",
    "state_bytes": 512,
    "state_bytes_returned": false,
    "tolerance_applied": false,
    "workers_applied": 1,
    "workers_requested": 2
  },
  "lesson": "resource_planning",
  "level": "expert",
  "track": "hybrid_researcher"
}

六站点 complex64 态矢量占 512 字节,完整密度矩阵占 32768 字节;两者都不是进程峰值。比较 state_bytes 与 estimated_peak_bytes,并读取 workers_requested 和 workers_applied。请求两个工作线程,不保证选定路径会使用两个内核线程。

资源拒绝时,先看候选方法的原因代码和估算。减少站点或并发通常比单纯减少 shots更能缓解状态存储压力。降低 dtype前应做精度对照;切换到阻塞子空间前必须确认物理假设成立。

本例固定步积分的 tolerance_applied 为 false。需要检查误差时,按方法与精度指南调整时间分辨率或适用的自适应容差。保存接受的资源计划和实际执行设置;某台机器的可用内存估计不是所有笔记本的最低配置。

English

SDK 1.0.8a · `6eff6362`