跳转至

在创建任务前拒绝不支持的请求

读取 Backend 的能力声明,再请求本地模拟器尚不支持的 GPU 设备。请先完成任务恢复与资源规划,使用安装好的环境。

先预测:调用应在返回 Job 之前报错。静默改用 CPU 会改变请求的执行条件;应用若提供替代方案,应明确让使用者知道这项选择。

读取声明,再检查具体请求

"""检查 Backend capability 和结构化的 fail-fast 错误。

Local Backend 会明确列出可执行 method。示例主动请求当前不可用的 GPU device,
并在创建 Job 或分配大型状态数组之前捕获拒绝原因,不会自动回退到其他设备。
"""

from __future__ import annotations

import json

from cascaqit import CapabilityError, Circuit, LocalBackend
from cascaqit.simulators import SimulationOptions


def main() -> None:
    """读取 capability,并捕获一个 unsupported-device diagnostic。"""
    backend = LocalBackend(seed=405)
    capability = backend.capability
    error_code = None
    error_stage = None
    error_path = None
    gpu_job = None
    try:
        gpu_job = backend.run(
            Circuit(1, program_id="lesson.platform.capability").h(0),
            shots=8,
            options=SimulationOptions(device="gpu"),
        )
    except CapabilityError as error:
        error_code = error.code
        error_stage = error.stage
        error_path = error.object_path

    payload = {
        "track": "sdk_platform_engineer",
        "level": "expert",
        "lesson": "capability_boundaries",
        "facts": {
            "backend_id": capability.backend_id,
            "methods": list(capability.executable_simulation_methods),
            "scan_supported": capability.unified_scan_supported,
            "noise_supported": capability.noise_supported,
            "gpu_error_code": error_code,
            "gpu_error_stage": error_stage,
            "gpu_error_path": error_path,
            "job_created_for_gpu": gpu_job is not None,
        },
        "boundaries": {
            "hardware_execution": False,
            "cloud_execution": False,
            "network_accessed": False,
            "credentials_loaded": False,
        },
    }
    print(json.dumps(payload, sort_keys=True))


if __name__ == "__main__":
    main()

下载完整脚本

python3 examples/user/tracks/sdk_platform_engineer/05_expert_capability_boundaries_zh.py

能力对象列出支持的模拟方法,并说明是否支持扫描和噪声。这些信息表示有哪些功能,并不保证程序、方法、噪声模型与设备的任意组合都有效。例如,子空间执行需要适用的基;一般 Hybrid 线路不会自动投影到更小的空间。

{
  "boundaries": {
    "cloud_execution": false,
    "credentials_loaded": false,
    "hardware_execution": false,
    "network_accessed": false
  },
  "facts": {
    "backend_id": "local.simulator",
    "gpu_error_code": "SIMULATION_DEVICE_UNAVAILABLE",
    "gpu_error_path": "simulation_options.device",
    "gpu_error_stage": "simulation",
    "job_created_for_gpu": false,
    "methods": [
      "state_vector",
      "subspace",
      "density_matrix",
      "trajectory"
    ],
    "noise_supported": true,
    "scan_supported": true
  },
  "lesson": "capability_boundaries",
  "level": "expert",
  "track": "sdk_platform_engineer"
}

GPU 请求应抛出 CapabilityError,代码为 SIMULATION_DEVICE_UNAVAILABLE,阶段为 simulation,对象路径为 simulation_options.device。job_created_for_gpu 根据调用是否真正返回句柄计算,预期为 false。脚本捕获这个预期错误,是为了打印诊断,不表示 GPU 任务执行成功。

应用可以根据稳定的错误代码决定处理方式,并在有消息和建议时展示给使用者。不要捕获全部异常后统一返回空结果:无效输入、不支持的能力和运行失败需要分别处理。被拒绝的请求没有可导出的测量数据。

区分能力声明与执行证据

已知事实 能说明什么
能力列表中包含某方法 后端为满足条件的任务实现了这种方法。
规划器接受当前请求 程序、选项和估算资源通过了执行前检查。
Job 返回已完成结果 这次提交的任务实际执行了。
结果符合独立预测 在相应假设下,已检查的计算与预测一致。

这些结论需要依次检查,前一项不能替代后一项。类似地,源码哈希或演练用的提交包也不能证明硬件已执行。SDK 的公开 Backend 路径运行本地模拟;Cloud 与 Hanyuan 材料仅涉及文档说明的离线接口、回放或演练。

尝试支持的设备与不适用的方法

  1. 在副本中请求 device='cpu',先检查返回的 Job,再调用 result()。数值工作在哪一步发生?
  2. 对同一个程序请求 method='density_matrix',但不提供噪声模型。为什么方法列在能力表中,这次仍可能不接受?
  3. 能力检查拒绝请求后,将完全相同的请求重试三次有帮助吗?

CPU 请求会返回排队中的 Job,调用 result() 才执行。没有噪声模型时,显式密度矩阵请求不满足条件,会在规划阶段被拒绝。重复提交同一个不支持的请求不会增加能力,应明确调整请求条件或选择兼容的后端。

方法适用条件见本地模拟算法,硬件边界见当前限制。现在可以从输入检查一路追踪到执行、结果保存和恢复,并区分离线产物与真实运行。

English version

SDK 1.0.8a · `8b227bff`