返回首页
最新
PyTorch 和 ONNX Runtime 可以告诉你输出的结果,但无法告诉你实际执行了什么——哪些操作被执行、执行的顺序以及使用了哪些输入。
模型被打包成一个封闭的 .cnox 容器。在执行任何操作之前,会先验证 SHA-256。在推理过程中,会在一个最小的操作集上执行固定的计划。每次运行都可以生成每个操作的审计日志:操作类型、输出张量哈希、输出样本——这些都与生成它的确切容器和输入通过加密方式相链接。如果在生产中出现问题,你将有一条追踪记录。
当前的标量后端是参考实现,并在硬件加速不可用时作为永久的后备。所有后端的审计和验证是相同的。接下来是 SIMD,然后是 GPU。
下面的输入是合成的(全为1),与真实输入的管道是相同的。
审计示例:
{
"schema": 2,
"run": {
"run_id": "59144ede-5a27-4dff-bc25-94abade5b215",
"started_at_unix_ms": 1776535116721,
"container_path": "/home/shark/cnox/models/output/bert_base_uncased.cnox",
"container_sha256_hex": "184c291595536e3ef69b9a6a324ad5ee4d0cef21cc95188e4cfdedb7f1f82740",
"backend": "scalar"
},
"input": {
"len": 98304,
"sha256_hex": "54ac99d2a36ac55b4619119ee26c36ec2868552933d27d519e0f9fd128b7319f",
"sample_head": [
1.0,
1.0,
1.0,
1.0
]
},
"ops": [
{
"op_index": 0,
"op_type": "Add",
"out_len": 98304,
"out_sample_head": [
0.12242669,
-4.970478,
2.8673656,
5.450008
],
"out_sha256_hex": "19f8aa0a618e5513aed4603a7aae2a333c3287368050e76d4aca0f83fb220e78"
},
{
"op_index": 1,
"op_type": "Add",
"out_len": 98304,
"out_sample_head": [
0.9650015,
0.23414998,
1.539839,
0.30231553
],
"out_sha256_hex": "7ae2f025c8acf67b8232e694dd43caf3b479eb078366787e4fdc16d651450ad4"
},
{
"op_index": 2,
"op_type": "MatMul",
"out_len": 98304,
"out_sample_head": [
1.0307425,
0.19207191,
1.5278282,
0.3000223
],
"out_sha256_hex": "44c28e64441987b8f0516d77f45ad892750b3e5b3916770d3baa5f2289e41bdd"
},
{
"op_index": 3,
"op_type": "Gelu",
"out_len": 393216,
"out_sample_head": [
0.68828076,
-0.0033473556,
1.591219,
-0.16837223
],
"audit_elided": "hash_skipped: len 393216 > max 262144"
}
]
}