文档中心:每个模块怎么用,报告怎么验

从选择向量包到回传判定,从单算子 / 模型级 / 量化三个套件到报告下载与独立验真, 以及 HIL 设备证明、CI 徽章与全部 API。所有数字与限制均以当前生产版本为准。

文档中心

1. 平台概览与证据链

平台不接触任何厂商 SDK 或工具链,只通过一个 zip 包契约交换数据: 平台下发输入向量与清单,客户在被测芯片、仿真器或软件栈上本地计算, 再原样回传产物;平台用 float64 双精度金标准独立复算并判定。

1.1 四个验证套件

套件suite 参数对象当前规模入口
单算子验证operator18 类算子:GEMM、Attention、归一化、激活、RoPE、KV Cache、MoE、Conv2D 等201 条向量GET /package?suite=operator
模型级验证graphConv-BN-ReLU 组合块、Transformer Block 组合块;也支持上传 ONNX 模型切片20 条向量 + 任意 ONNX 子图POST /graph/package
量化验证quantINT8 PTQ(per-tensor / per-channel)、INT8 QAT(非对称)、FP8 E4M348 条向量GET /package?suite=quant
PIM 算法验证pim客户的 PIM 实现(算法 / 驱动 / 仿真器)在冻结器件参数下的 L1 算法契约36 条向量GET /package?suite=pim

1.2 四层证据链

  1. 一次性挑战码:所有盲测包(单算子、模型级组合块、量化方案、PIM 链路、ONNX 子图) 在下载时绑定账号与有效期(默认 30 分钟), 向量按挑战码现场派生;同一包只能成功提交一次,杜绝录答、转发与离线预计算。
  2. 服务端金标准:盲测包只含 inputs/,期望输出只保存在服务端 sidecar 中; 客户无法通过「把答案抄进 outputs」通过判定。
  3. Ed25519 签名 + 哈希链:报告使用 v2 信封签名,签名覆盖 data_hash / uid / report_id / prev_hash / signed_at / nonce / key_id; 每份报告链接到同一账号的前一份,形成不可静默删改的哈希链。
  4. RFC 3161 时间戳:配置可信 TSA 后,报告时间戳由第三方签名; 未配置时诚实标注为本地时间(timestamp_trusted=false)。

1.3 账号、登录与配额

  • 在官网登录后,验证页面会自动获得短期 Bearer Token;所有下载、提交、报告接口都需要 Authorization: Bearer <token>。
  • 令牌内含账号标识、档位与每日配额,由官网 HMAC 签名,浏览器无法伪造。
  • 默认配额:免费版 5 次/日,完整版 50 次/日;按本地自然日重置。
  • POST /check 与 POST /graph/package 共用同一份配额; ONNX 解析(/graph/inspect)不计配额,但有频率限制。
判定口径、通过率、覆盖率等所有数字均由服务端计算并写入报告; 页面只渲染返回值,不自行重算。

2. 快速开始(单算子,5 步)

以下示例使用 curl 与 Python;任何能读写二进制文件的语言都可以完成同样流程。

步骤 1:确认身份与目录

export DBHOO_API="https://www.dbhoo.com/api/verify-suite"
export DBHOO_TOKEN="<登录官网后获取的令牌>"

curl -s "$DBHOO_API/catalog?task=operator" \
  | python -c "import json,sys; d=json.load(sys.stdin); print(d['total_cases'], 'cases'); print([o['op'] for o in d['operators']])"

步骤 2:下载盲测向量包

curl -s -D headers.txt -o pack.zip \
  -H "Authorization: Bearer $DBHOO_TOKEN" \
  "$DBHOO_API/package?suite=operator&ops=gemm,softmax"

响应头包含本次挑战信息:

响应头含义
X-Challenge-Nonce本次一次性挑战码(manifest 内 challenge.nonce 同值)
X-Challenge-TTL-Seconds挑战码有效期,默认 1800 秒
X-Case-Count包内用例数
X-Suite套件类型(operator / graph / quant)
X-Baseline-Version金标准版本,例如 golden-f64-1.1

步骤 3:解压并在本地计算

mkdir work && cd work
unzip -q ../pack.zip -d pack
cd pack
ls            # manifest.json  inputs/  (盲测包没有 expected/)

读取 manifest.json 中每个 case 的输入规格,按名称与形状读取 inputs/<case_id>__<tensor>.bin(小端、行优先), 在你的硬件/仿真器上计算,再把结果写入 outputs/。

import json
import numpy as np
from pathlib import Path

m = json.loads(Path("manifest.json").read_text(encoding="utf-8"))
for case in m["cases"]:
    x = np.fromfile(case["input_files"]["x"]["file"], dtype="<f8")
    x = x.reshape(case["input_files"]["x"]["shape"])

    y = your_operator(x)          # ← 被测算法(硬件 / 仿真器)

    out = case["outputs"][0]      # 输出名以 manifest 为准
    y.astype("<f8").tofile(
        "outputs/" + case["case_id"] + "__" + out["name"] + ".bin")
输入文件与参数张量禁止修改; 输出文件名、形状、顺序必须与 manifest 完全一致,否则该用例记 UNTESTED 或 FAIL。

步骤 4:原样回传判定

cd .. && (cd pack && zip -qr ../return.zip .) && cd ..
curl -s -X POST "$DBHOO_API/check" \
  -H "Authorization: Bearer $DBHOO_TOKEN" \
  -H "Content-Type: application/zip" \
  -H "X-Report-Title: GEMM+Softmax%20FPGA%20%E5%9B%9E%E5%BD%92" \
  --data-binary @return.zip

返回 JSON,其中 summary 为汇总,cases 为逐用例明细, report_id 为本次签名报告编号。

步骤 5:下载并验真报告

# HTML / PDF / JSON
curl -o report.html "$DBHOO_API/report/$RID?format=html"
curl -o report.json "$DBHOO_API/report/$RID?format=json"

# 在线复验(需登录)
curl -s -H "Authorization: Bearer $DBHOO_TOKEN" \
  "$DBHOO_API/report/$RID/verify"

离线验真方法见 第 9 节。

3. 单算子验证

适合 IP 核、指令集模拟器、算子库或 NPU 单算子单元的精度验收。一次提交可以覆盖一个或多个算子。

3.1 支持的算子

op说明op说明
gemmFP32 矩阵乘法gemm_int8INT8 量化矩阵乘法
sdpa缩放点积注意力(因果)gqa分组查询注意力
softmaxSoftmax 归一化layernormLayerNorm
rmsnormRMSNormrope / rope_glm旋转位置编码及其 GLM 变体
silu / gelu激活函数silu_gemm / swiglu融合算子
kvcacheKV Cache 追加与读取moe_gateMoE 专家门控(Top-K)
cross_entropy交叉熵损失quant_int8INT8 量化 / 反量化
conv2dConv2D(NCHW)合计 18 类算子 / 201 条向量;rope 与 rope_glm 为同一算子的两种变体

3.2 选择与下载

  • 页面 Step 1 勾选算子(可按「大模型推理 / 大模型训练 / 端侧视觉」筛选), 或直接调用 GET /package?suite=operator&ops=gemm,softmax。
  • 下载必须登录;每个包都绑定一次性挑战码与当前账号。
  • 下载动作本身不消耗配额;成功提交才计入配额。

3.3 回传与判定

  • 保持目录结构原样打包;zip 根目录下应直接是 manifest.json、inputs/、outputs/。
  • 同一个挑战包只能成功消费一次;判定失败(如格式错误)可以修正后用原包重试, 但报告一旦成功落库,挑战码即作废。
  • 可选把同一输入重跑一次的结果写入 outputs_repeat/,平台据此检查确定性。
  • 可选在包根目录提供 performance.json(耗时/周期/功耗), 满足条件时会进入排行榜,详见 第 11 节。 平台不测量时间、不复算 GFLOPS,报告与榜单只原样记录客户自报值。

3.4 反作弊检查

检查行为
挑战码缺失、过期、不属于当前账号或已被消费 → 400,不签发报告
答案回抄expected/、inputs/ 中的文件不会被当作客户产物;上传包内若出现 expected/ 成员,在线接口直接拒收
退化输出全零、常量、结构上不可能的产物判 FAIL 并在报告中说明
批量复制不同金标准的用例回传了完全相同的输出 → FAIL(复制粘贴特征)
归档自报在线接口拒绝 mode=archive 包(客户自报不构成独立证据)

4. 模型级验证(ONNX 子图)

上传一个 ONNX 模型,平台在 float64 环境中执行指定子图,生成输入与金标准, 客户只需在硬件上跑同一段子图并回传输出。

4.1 流程

  1. 解析模型:POST /graph/inspect?nodes=a,b,请求体为 .onnx 原始字节。 返回节点、算子类型、输入/输出形状、initializer 列表,以及是否全部受支持。
  2. 生成子图包:POST /graph/package?nodes=a,b&name=my_model,同样上传 ONNX。 服务端执行子图生成金标准 sidecar,返回 zip(含一次性挑战码与 graph_id)。 该接口消耗一次配额。
  3. 本地计算:按 manifest 在硬件上执行同一段子图。
  4. 回传:与单算子相同,POST /check;manifest 中 suite=graph, 挑战码自动绑定。

4.2 模型限制

项目限制
文件大小≤ 64 MB
opset7 – 21(ai.onnx 默认域)
节点数≤ 512
声明张量元素总数≤ 32,000,000(输入 + initializer)
执行墙钟预算默认 20 秒(DBHOO_ONNX_MAX_SECONDS)
频率限制inspect 30 次/分钟;package 10 次/分钟;同一账号同时只能有一个任务

4.3 支持的算子

Gemm、MatMul、Add、Sub、Mul、Div、Neg、Abs、Relu、Sigmoid、Tanh、Erf、Exp、Log、Sqrt、Pow、 Softmax、LogSoftmax、Cast、Identity、Constant、Concat、Reshape、Transpose、Flatten、Squeeze、Unsqueeze、 ReduceMean、ReduceSum、LayerNormalization、BatchNormalization、Conv、Gather、Shape、Slice、Where、Clip

不在列表中的算子会被明确拒绝(supported=false / unsupported), 平台不会跳过节点给出「看似通过」的结果。

4.4 组合块套件(不下发 ONNX)

也可以直接用 GET /package?suite=graph 下载内置的 Conv-BN-ReLU 与 Transformer Block 组合块,用法与单算子一致: 包同样按一次性挑战码派生,提交时需回传原包。

5. 量化验证

量化套件验证的是 量化方案本身:缩放因子、零点、per-channel 处理与累加位宽, 而不是只看反量化后的浮点结果。

5.1 四个方案

op方案关键语义
quant_gemm_ptqINT8 PTQ,per-tensorINT32 累加后统一反量化
quant_gemm_pcINT8 PTQ,per-channel每个输出通道独立 scale,INT32 累加
quant_gemm_qatINT8 QAT,非对称 per-channel反量化前先减 zero_point
quant_gemm_fp8FP8 E4M3,per-tensorE4M3 表示范围与舍入

5.2 使用方法

curl -s -o quant.zip -H "Authorization: Bearer $DBHOO_TOKEN" \
  "$DBHOO_API/package?suite=quant&ops=quant_gemm_ptq,quant_gemm_pc"

包内输入通常包含 a_q、b_q(INT8 量化张量)以及 scale_a、scale_b、必要时 zero_point_b。 输出名与形状以 manifest 为准。提交同样走 POST /check。

量化套件与算子套件一样按次派生:每包绑定一次性挑战码, 向量与量化参数随 nonce 重新生成,同一个包只能成功消费一次。 此前下载的无挑战码量化固定包已停用,请重新从平台下载。

5.3 判定重点

  • 余弦相似度对幅度不敏感,因此量化套件同时校验 相对 L2 误差; 漏乘 scale 这类 1000 倍幅度错误会被识别。
  • INT8 用例的 dtype 门限更宽(见 第 7 节),但累加通路必须是 INT32, 用 float 累加会在边界用例上暴露。

6. 向量包与回传契约

6.1 目录结构

<package>.zip
├── manifest.json
├── inputs/<case_id>__<tensor>.bin      小端、行优先,形状见 manifest
├── expected/<case_id>__<tensor>.bin    金标准(盲测包中没有此目录)
├── outputs/<case_id>__<tensor>.bin     客户产物,支持 .bin/.npy/.npz/.csv/.json
├── outputs_repeat/...                   可选:确定性复测
├── performance.json                     可选:耗时/周期/功耗
└── device_attestation.json              可选:设备证明(HIL 自动生成)

6.2 manifest 关键字段

字段说明
format固定 dbhoo-golden/1.0
suiteoperator / graph / quant
baseline_version金标准版本,必须与报告中的一致
byte_order / array_orderlittle / row-major
blind / expected_withheld盲测包为 true
cases[].case_id用例唯一 ID,输出文件必须以此开头
cases[].inputs逻辑张量名 → 规格(形状、dtype)
cases[].input_files逻辑张量名 → 文件路径、sha256、shape、dtype
cases[].outputs输出张量名、形状、dtype、顺序
cases[].tags分布、场景等标签,仅用于展示
challenge.nonce一次性挑战码(算子包 / ONNX 子图包)
graph_id金标准 sidecar 键,提交时用于定位期望输出

6.3 输出文件命名

统一为 outputs/<case_id>__<输出名>.<扩展名>。例如 outputs/gemm_fp32_small_0001__output.bin。也允许直接放在 zip 根目录 (不带 outputs/),但推荐保持目录结构。

6.4 资源与体积限制

项目上限
HTTP 请求体64 MB
zip 成员数4096
单成员解压后128 MB
解压总量256 MB(压缩比 ≤ 100)
单张量元素数8,000,000
单用例元素数32,000,000
单次提交元素总数128,000,000
用例数1024

7. 判定口径与门限

每个用例输出四项指标:余弦相似度、相对 L2 误差、PSNR 与 最大绝对偏差。判定以余弦相似度(方向一致性)与相对 L2 误差(幅度相对偏差)为准, 启用 PSNR 门限时 PSNR 亦需达标;全部达标才算 PASS。最大绝对偏差用于定位离群点,不单独作为判定条件。

dtypecos ≥ PASScos ≥ WARNrel-L2 ≤ PASSrel-L2 ≤ WARN
fp320.99990.99950.010.05
fp160.99950.9990.030.10
bf160.9990.9950.050.15
fp80.99850.9950.040.12
int80.9990.9950.080.20
int40.9950.990.150.30
不是逐位比对:金标准以 float64 复算,判定走上表的 cos / rel-L2 双门限,任何 bit-exact 说法都与实现不符。 规模边界:算子 / 量化用例单例最大 16,384 元素(PIM 用例最大 65,536 元素), 覆盖算子契约、量化方案与 PIM 器件链路一致性; 不覆盖大 shape / 长序列 / 大 batch 的稳定性,也不测量性能。 硬件证据:普通上传不核验运行板卡,由提交方自证;只有走 第 10 节 的 HIL 设备证明(板卡私钥对挑战码与输出哈希签名) 才把结果绑定到具体硬件。

7.1 四种状态

  • PASS 两项指标均达到 PASS 门限。
  • WARN 至少一项落在 WARN 区间,且没有 FAIL。
  • FAIL 任一项低于 FAIL 门限,或触发反作弊规则。
  • UNTESTED 未找到该用例的合法产物;不计入通过率分母,也绝不判通过。

7.2 汇总字段

字段定义
testedPASS + WARN + FAIL 的用例数
pass_ratePASS / tested(UNTESTED 不进分母)
coveragetested / total_cases
load_error产物存在但无法解析的用例数
覆盖率低但通过率 100% 不等于验证通过; 报告会同时呈现覆盖率与 UNTESTED 数量,避免「只提交最简单用例」的误导。

8. 报告中心

每次成功判定都会生成一份带签名的报告,保存在账号历史中,可下载 HTML 与 JSON(引擎生成 PDF 时另提供 PDF)。

8.1 历史与下载

接口说明
GET /history当前账号的报告列表(标题、时间、PASS/WARN/FAIL、通过率、数据来源)
GET /report/<id>?format=html可打印的 HTML 报告(默认格式)
GET /report/<id>?format=pdfPDF 报告;后端无 PDF 引擎时返回 404
GET /report/<id>?format=json完整 JSON,包含 integrity 签名块

报告 ID 形如 20261021_203015_001, 与账号绑定:使用其他账号的令牌读取会得到 404。

8.2 报告里的证据字段

字段含义
integrity.sign_version签名信封版本,当前为 2
integrity.data_hash报告内容(去掉易变字段后)的规范化 SHA-256
integrity.signed_envelope被签名的信封:data_hash / uid / report_id / prev_hash / signed_at / nonce / key_id
integrity.signatureEd25519 签名(base64)
integrity.prev_hash同一账号上一份报告的链锚点;首份为 64 个 0
integrity.chain_hashSHA256(prev_hash + ":" + data_hash)
integrity.timestamp_trusted时间戳是否由可信 TSA 签发并通过证书链校验
客户自报(archive)与自检结果不签发 integrity, 因此也无法通过验真——这是设计上的 fail-closed,而不是缺陷。

9. 报告如何验证

验真分两种场景:报告持有方可用账号令牌调用在线复验; 不持有账号的第三方用公开公钥与离线 CLI 验签,无需登录、也不接触平台内部数据。 注意:在线复验按账号隔离,未登录调用会返回 401。

9.1 在线复验(推荐给报告接收方)

curl -s -H "Authorization: Bearer $DBHOO_TOKEN" \
  "$DBHOO_API/report/20261021_203015_001/verify"

返回字段:

字段含义
hash_valid报告内容与 data_hash 是否一致
signature_validEd25519 签名是否有效,且密钥在平台钥匙串中
chain_validchain_hash 是否由 prev_hash + data_hash 正确推导
chain_link_valid是否链接到该账号真实存在的上一份报告(防删改历史)
valid以上全部通过才为 true
legacy_signature旧版 v1 报告为 true(仅签 data_hash),仍可验真
official_key_id平台当前官方密钥 ID,可用于核对公钥
errors失败原因列表;通过时为空

9.2 离线 CLI 验真

平台提供独立工具 dbhoo-verify,只需 Python 与报告文件:

# 安装(在发布包内)
pip install ./tools/dbhoo-verify

# 验证 JSON / HTML / PDF
dbhoo-verify report.json --public-key official_public.key
dbhoo-verify report.html --public-key official_public.key
dbhoo-verify report.pdf  --public-key official_public.key --json

# 只提取完整性信息,不验签
dbhoo-verify report.json --extracting

退出码:0 = 通过,1 = 失败。 公钥可从 GET $DBHOO_API/trust/public-key 获取, 或直接使用平台发布的 official_public.key。

请务必使用从平台官方渠道获取的公钥。 报告内嵌公钥只能证明「自洽」,不能证明「由平台签发」。

9.3 手工复核(不依赖本平台工具)

  1. 从报告中取出除 integrity、badge_url、 badge_markdown、has_pdf 之外的全部字段;
  2. 按 键名排序、UTF-8、紧凑分隔符 序列化为 JSON,计算 SHA-256, 应与 integrity.data_hash 相同;
  3. 按同一规则序列化 integrity.signed_envelope, 用平台公钥验证 integrity.signature(Ed25519);
  4. 核对 signed_envelope 中的 uid、report_id、prev_hash、nonce 与报告其余字段一致;
  5. 计算 SHA256(prev_hash + ":" + data_hash), 应与 chain_hash 相同;
  6. 如需核对时间,使用 integrity.timestamp 对应的 RFC 3161 token 与平台公布的 TSA 根证书验证。

9.4 常见失败原因

现象原因处理
数据哈希不匹配报告 JSON 被编辑过(哪怕只改一个数字)以平台下载的原始文件为准
数字签名无效公钥不对,或签名被替换使用官方渠道公钥 / 在线复验
哈希链校验失败prev_hash 或 chain_hash 被改重新从平台下载
与前一份报告未链接账号历史被删除或替换视为证据链断裂,联系平台核查
timestamp_trusted=false该报告签发时未配置可信 TSA,仅本地时间仅影响时间证明,不影响内容与签名
报告中无 integrity自检 / 自报结果,本就不签发证据不能作为第三方证明使用

10. 设备证明与 HIL 自动化

tools/dbhoo_hil.py 把「下载 → 板卡执行 → 回传」固化为一命令, 适合硬件在环回归与 CI。设备证明协议用于把输出哈希与本次挑战码绑定到设备私钥。

10.1 基本用法

python tools/dbhoo_hil.py run \
  --api https://www.dbhoo.com/api/verify-suite \
  --suite operator --ops gemm --runner fpga-lab-01 \
  --cmd "python hw_runner.py {package} {outputs}"

--cmd 可用占位符:{package}(解压后的包目录)、 {outputs}(package/outputs)、{workdir}。 命令需返回 0,结果写入 {outputs}/<case_id>__<name>.bin。

10.2 模型级 HIL

python tools/dbhoo_hil.py run \
  --api https://www.dbhoo.com/api/verify-suite \
  --suite graph --onnx model.onnx --nodes gemm0,relu0 \
  --runner fpga-lab-01 --cmd "python hw_runner.py {package} {outputs}"

10.3 设备证明

板卡需对平台约定的 canonical message 签名:

dbhoo-device-attestation-v1\n
<nonce>\n
<output_hashes 的紧凑、键名排序 JSON>

HIL 会把原始 message 写入 {workdir}/device_attestation.message, 签名命令应读取该文件并输出:

{"device_id": "board-01", "algorithm": "Ed25519", "signature_b64": "..."}
python tools/dbhoo_hil.py run ... \
  --attest-cmd "python board_sign.py --in {message_file}" \
  --attest-pubkey "<设备根公钥 base64>"
  • --attest-pubkey 会在回传前本地自检;签错对象会立即失败,而不是到服务端才被拒。
  • 服务端配置设备根公钥后,会校验 nonce 绑定、重算输出哈希、验证签名; 任一不符则 verified=false,报告中保留失败原因。
  • --attest-unsigned 只生成占位文件,用于联调,不构成设备证明。

10.4 退出码

0 全部通过;2 存在 FAIL 用例;1 运行、网络或解析错误。

11. CI、徽章与排行榜

11.1 把结果写入公开 CI 历史

仅持有共享密钥的自动化 Runner 可以写入公开历史。提交时需同时带:

请求头要求
X-CI-Run1 / true / yes / on
X-CI-Token与服务端 DBHOO_CI_TOKEN 完全一致
X-CI-RunnerRunner 名称(服务端会净化后入库)

dbhoo_hil.py 会自动携带上述头。普通手动提交即使伪造 X-CI-Run 也不会进入公开历史。

11.2 查询历史

curl -s "$DBHOO_API/ci/history?suite=operator&limit=20"
python tools/dbhoo_hil.py history --api "$DBHOO_API" --suite quant --limit 20

11.3 徽章

成功判定返回 badge_url 与 badge_markdown, 可嵌入 README 或官网。徽章查询参数带服务端签名, 手工改写 status/rate 会得到 403。

![DBHOO verified](https://www.dbhoo.com/api/verify-suite/badge.svg?status=pass&rate=100.00&cases=201&sig=...)

11.4 排行榜

  • 完全自愿:提交包中需包含 submitter 与 performance.json, 且至少有 5 个已测用例。
  • 只接受引擎验证结果;自报 / 自检结果没有资格。
  • 排名顺序:通过率 → 自报 GFLOPS → 已测用例数;公开数据不含账号 ID。 性能值来自客户 performance.json,平台不测量、不复算。

12. API 参考

除公开接口外,均需 Authorization: Bearer <token>。 请求/响应均为 JSON,上传接口使用原始字节体。

12.1 端点

方法路径认证说明
GET/catalog?task=operator|graph|quant|pim公开算子目录、用例数、门限、场景
GET/package?suite=&ops=需要下载盲测包(四个套件均绑定一次性挑战码)
POST/check需要提交 zip 产物,返回判定结果与 report_id
POST/graph/inspect?nodes=需要解析 ONNX,返回子图与形状元数据,不执行
POST/graph/package?nodes=&name=需要切子图、执行并生成金标准 sidecar,返回 zip(消耗配额)
GET/quota需要今日剩余次数、限额、档位
GET/history需要当前账号报告列表
GET/report/<id>?format=html|pdf|json需要下载报告
GET/report/<id>/verify需要在线复验签名、哈希与链
GET/trust/public-key公开平台官方公钥与 key_id
GET/leaderboard?suite=&limit=公开排行榜,按套件分组(operator / graph / quant / pim),默认 all
GET/badge.svg?status=&rate=&cases=&sig=公开签名徽章
GET/ci/history?suite=&limit=公开CI 公开回归历史
GET/health公开引擎根路径健康检查(不在 /api/verify-suite 前缀下;公网由 Nginx 单独响应)

12.2 请求头

请求头用于说明
X-Report-Title/check报告标题;非 ASCII 需 percent-encode
X-CI-Run / X-CI-Token / X-CI-Runner/checkCI 记录,见第 11 节
Content-Type: application/zip/check原始 zip 体
Content-Type: application/octet-stream/graph/*原始 ONNX 体

12.3 状态码

状态码含义
200成功
400参数/包契约错误、挑战码无效、归档模式被拒
401未登录或令牌无效
403今日配额已用完;徽章签名不符
404报告不存在或不属于当前账号
413请求体超过上限
429同一账号已有任务在处理,或频率超限
500服务端判定或持久化失败(本次不计配额)
503验证引擎未加载

13. 错误码与常见问题

13.1 常见错误

提示原因与处理
「该向量包缺少一次性挑战码」使用了旧包或固定盲包;重新从平台下载当前挑战包
「挑战码已被使用」同一包已成功提交过;重新下载新包
「挑战码无效: 已过期」下载超过 30 分钟;重新下载
「产物不符合契约: 元素数 ... 不符」输出形状/元素数与 manifest 不一致;按 manifest 形状重塑
「无法解析的 zip 产物」文件损坏或被二次压缩;在包目录内重新打包
「产物超过 64MB 上限」减少用例或改用 .bin 紧凑格式
「您已有一个验证任务在处理中」同一账号并发提交;等待上一次完成
「今日验证配额已用完」次日重置或升级完整版
「在线验证不接受 archive 自报模式」归档模式只用于离线 CLI;在线请提交盲测包的 outputs

13.2 为什么盲测包没有 expected/?

期望输出是判定依据。下发答案等于允许「把答案抄进 outputs」, 硬件完全不在环。金标准只保存在服务端,判定时现场计算。

13.3 一份报告能证明什么、不能证明什么?

  • 能:在报告生成时刻,提交的产物由该账号上传;平台用对应版本的金标准独立计算, 给出的指标与结论未被篡改;报告属于该账号的证据链。
  • 不能:不能证明产物一定来自声称的硬件(除非同时有已验签的设备证明), 也不能证明未提交的用例也正确(看覆盖率)。

13.4 如何复现一次历史判定?

下载该报告的 JSON 与对应版本的向量包(baseline_version 必须一致), 按 manifest 重新计算并比对用例指标;报告的 data_hash 同时锁定了当时的内容。

13.5 报告时间戳为什么显示本地时间?

平台只在配置了可信 TSA 时才请求第三方时间戳;未配置或 TSA 不可达时会诚实降级为本地时间, 并在 timestamp_trusted 标记为 false。这不会影响签名与哈希链的有效性。

文档中的接口、上限与门限以当前生产版本为准;平台升级后如有变化,以 验证平台 返回的 /catalog 与 /trust/public-key 实时数据为准。

14. PIM 算法验证(L1 契约)

PIM 套件验证的是客户的 PIM 实现(算法模型、驱动或仿真器)在冻结器件参数下的 数值一致性,不是芯片实测。期望值由服务端在 float64 中按同一契约复算,器件参数 锁死在服务端金标准内,客户端修改 manifest 不生效。首期只做 L1 算法级契约; PRO 闭源特性(INT4 GPTQ / LLM 专用算子)不在 L1 范围内。

14.1 冻结器件基准

参数取值
阵列规模256 × 256
ADC6-bit,满量程 32,LSB = range / 2^bits = 0.5,严格 mid-tread
饱和钳位先 clip 到 ±16,再按对称码值 clamp 到 ±31
噪声高斯 σ = 0.008;样本 z 随包下发,客户不复现 RNG
温度 / 输入精度45 ℃ / float32

14.2 三条链路

op链路定位的问题
pim_gemm_fp32理想 FP32 GEMM计算单元本身
pim_gemm_adc6GEMM + 6-bit ADC量化口径 / LSB / 饱和钳位
pim_gemm_noiseGEMM + 高斯噪声噪声注入时机与幅度

默认全选 36 条:3 条链路 × 4 种形状(64³ / 128³ / 128×256×64 非方阵 / 256³) × 3 种激励分布(int8uniform 覆盖满量程与 ADC 截断边界、 normal σ = 0.5、int8sparse 约 3 成零,覆盖稀疏累加与零跳过)。 在页面上按链路筛选下载时,包内用例按选中的链路线性递减(每条链路 12 条)。 形状从「ADC 基本不饱和」到「K 撑满阵列、深度饱和」,非方阵用例同时覆盖 M/N/K 不对称与分块边界。 输入张量为 a、b,噪声用例额外带 noise_z, 全部 float32;输出名固定为 output。

同一形状、同一分布的三条链路共用同一组 a / b,但 noise_z 按形状 + 分布各自派生:36 条用例对应 12 组独立 GEMM 激励和 12 组独立噪声样本, 差异全部来自链路本身,便于把问题定位到 ADC 还是噪声环节。回传时仍须 按用例逐条计算——跨用例复用同一份产物会被输出重复检测判 FAIL。

14.3 契约公式

C0 = A · B                    # fp32,行主序,alpha=1 / beta=0
q  = clamp(round_half_away(C0 / LSB), ±(2^(b-1)-1))   # 严格 mid-tread
C  = q · LSB                  # 仅 pim_gemm_adc6
C  = C0 + σ · z               # 仅 pim_gemm_noise,z 来自 inputs/<case>__noise_z.bin

14.4 判定:精度门限 + 器件契约检查

除通用 cos / rel-L2 门限(见 第 7 节)外,平台对 PIM 用例追加 结构性二值检查;它们不会被宽松的 rel-L2 门限掩盖(σ = 0.008 时漏加噪声的 rel-L2 仅约 1e-3,仍可能落在门限内):

  • adc_lsb_grid:输出必须落在 LSB = 0.5 的量化网格上(码值偏差 ≤ 1e-3); 使用 range/(2^bits−1) 这类错误 LSB 会被直接判 FAIL。
  • adc_code_range:输出峰值不得超过 15.5(对称码值上限 31 × LSB), 缺少饱和钳位会被识别。
  • noise_residual:‖(C − A·B) − σ·z‖ / ‖σ·z‖ ≤ 0.05; 漏加、时机错误或幅度错误都会被识别。

14.5 下载与提交

curl -s -o pim.zip -H "Authorization: Bearer $DBHOO_TOKEN" \
  "$DBHOO_API/package?suite=pim&ops=pim_gemm_adc6,pim_gemm_noise"

与其他套件一致:按次派生(a / b / noise_z 随 一次性挑战码重新生成)、盲测包不含 expected/、提交同样走 POST /check。报告会额外渲染只读的器件参数卡片与逐用例器件契约检查结果。