官方是否可以出一个算子量化推理加速的适配教程呢

将depth-anything 3 int8 量化后默认使用cpu后端则正常,如果指定硬件后端会段错误:

 /lib/apport/coredump)
[info] onnxruntime 1.24.0+spacemit.a3
[info] available providers: ['SpaceMITExecutionProvider', 'CPUExecutionProvider'                             ]
[info] spacemit_ort loaded: True
[info] model: /home/lzdz/Depth-Anything-3-onnxinfer/models/da3_small.q.onnx  (27                             .1 MB)
[info] session loaded in 14.715s
[info] providers in use: ['SpaceMITExecutionProvider', 'CPUExecutionProvider']
[info] input 'images': model shape=[1, 2, 3, 280, 504] -> run shape=(1, 2, 3, 28                             0, 504)
[info] output 'depth': model shape=[1, 2, 280, 504] type=tensor(float)
[info] output 'depth_conf': model shape=[1, 2, 280, 504] type=tensor(float)
[info] output 'extrinsics': model shape=[1, 2, 3, 4] type=tensor(float)
[info] output 'intrinsics': model shape=[1, 2, 3, 3] type=tensor(float)
[info] fake input: shape=(1, 2, 3, 280, 504) dtype=float32 min=-2.0000 max=2.000                             0 mean=0.0002 nonfinite=0
段错误(核心已转储)
(myenv) lzdz@lzdz-spacemitk1xmusepiproboard:~/Depth-Anything-3-onnxinfer$ gdb -b                             atch \
  -ex "bt 20" \
  -ex "info sharedlibrary" \
  /usr/bin/python3 \
  /var/lib/apport/coredump/core._usr_bin_python3_12.1000.426568dc-8ba0-4501-9d2d                             -1014aec4ddfe.527082.8637948 \
  2>&1 | tee /tmp/gdb.txt
[New LWP 527118]
[New LWP 527082]
[New LWP 527084]
[New LWP 527119]
[New LWP 527104]
[New LWP 527088]
[New LWP 527085]
[New LWP 527103]
[New LWP 527121]
[New LWP 527089]
[New LWP 527086]
[New LWP 527120]
[New LWP 527090]
[New LWP 527087]
[New LWP 527105]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/riscv64-linux-gnu/libthread_db.so.1".
Core was generated by `python test.py'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000003f6dd67e70 in onnxruntime::spacemit::OnnxTensorData::GetBufferRaw()                              () from /home/lzdz/spacemit-demo-main/spacemit_ort_2.0.5/spacemit_ort/libspacemi                             t_ep.so.2.0.5
[Current thread is 1 (Thread 0x3f66f83180 (LWP 527118))]
#0  0x0000003f6dd67e70 in onnxruntime::spacemit::OnnxTensorData::GetBufferRaw()                              () from /home/lzdz/spacemit-demo-main/spacemit_ort_2.0.5/spacemit_ort/libspacemi                             t_ep.so.2.0.5
#1  0x0000003f6ddaed44 in onnxruntime::spacemit::SpineUnaryOperator::Compile(onn                             xruntime::spacemit::SpineGraphExecutor&) () from /home/lzdz/spacemit-demo-main/s                             pacemit_ort_2.0.5/spacemit_ort/libspacemit_ep.so.2.0.5
#2  0x0000003f6ddaf8fa in ?? () from /home/lzdz/spacemit-demo-main/spacemit_ort_                             2.0.5/spacemit_ort/libspacemit_ep.so.2.0.5
#3  0x0000003f6dd7f4d4 in onnxruntime::spacemit::SpineOperatorManager::CreateOpe                             rator(onnxruntime::spacemit::SpineGraphExecutor&, onnxruntime::spacemit::SpineNo                             de&) () from /home/lzdz/spacemit-demo-main/spacemit_ort_2.0.5/spacemit_ort/libsp                             acemit_ep.so.2.0.5
#4  0x0000003f6deae29a in onnxruntime::spacemit::SpineGraphExecutor::AddKernels(                             ) () from /home/lzdz/spacemit-demo-main/spacemit_ort_2.0.5/spacemit_ort/libspace                             mit_ep.so.2.0.5
#5  0x0000003f6dec5908 in ?? () from /home/lzdz/spacemit-demo-main/spacemit_ort_                             2.0.5/spacemit_ort/libspacemit_ep.so.2.0.5
#6  0x0000003f834d13fc in ?? () from /lib/riscv64-linux-gnu/libstdc++.so.6
#7  0x0000003f853ce19c in start_thread (arg=<optimized out>) at ./nptl/pthread_c                             reate.c:447
#8  0x0000003f854202ac in __thread_start_clone3 () at ../sysdeps/unix/sysv/linux                             /riscv/clone3.S:71
From                To                  Syms Read   Shared Object Library
0x0000003f85529540  0x0000003f85566c10  Yes         /lib/riscv64-linux-gnu/libm.                             so.6
0x0000003f85504490  0x0000003f855123c2  Yes (*)     /lib/riscv64-linux-gnu/libz.                             so.1
0x0000003f854df610  0x0000003f854f41a0  Yes (*)     /lib/riscv64-linux-gnu/libex                             pat.so.1
0x0000003f853852b0  0x0000003f85465388  Yes         /lib/riscv64-linux-gnu/libc.                             so.6
0x0000003f855bdce0  0x0000003f855d3d4e  Yes         /lib/ld-linux-riscv64-lp64d.                             so.1
0x0000003f84227b00  0x0000003f844b84e0  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/_core/_multiarray_umath.cpython-312-riscv64-linux-gnu.so
0x0000003f838974f0  0x0000003f83f15af2  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/_core/../../numpy.libs/libopenblas_x60p-r0-8c1e1649.3.32                             .so
0x0000003f834a12a0  0x0000003f83590572  Yes (*)     /lib/riscv64-linux-gnu/libst                             dc++.so.6
0x0000003f852c35e0  0x0000003f852d68a0  Yes (*)     /lib/riscv64-linux-gnu/libgc                             c_s.so.1
0x0000003f840b9a50  0x0000003f841b2dfa  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/_core/../../numpy.libs/libgfortran-a4c28458.so.5.0.0
0x0000003f855ab670  0x0000003f855ab768  Yes         /usr/lib/python3.12/lib-dynl                             oad/_contextvars.cpython-312-riscv64-linux-gnu.so
0x0000003f845e68a0  0x0000003f845f34fe  Yes         /usr/lib/python3.12/lib-dynl                             oad/_ctypes.cpython-312-riscv64-linux-gnu.so
0x0000003f855a38d0  0x0000003f855a724c  Yes (*)     /lib/riscv64-linux-gnu/libff                             i.so.8
0x0000003f84073940  0x0000003f84092b1e  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/linalg/_umath_linalg.cpython-312-riscv64-linux-gnu.so
0x0000003f6e736ea0  0x0000003f6f455ce4  Yes (*)     /usr/lib/python3.12/dist-pac                             kages/onnxruntime/capi/libonnxruntime.so.1.24.0+spacemit.a3
0x0000003f8559f4a0  0x0000003f8559f57c  Yes (*)     /usr/lib/python3.12/dist-pac                             kages/onnxruntime/capi/libonnxruntime_providers_shared.so
0x0000003f6f8c6920  0x0000003f6f9a3bd6  Yes (*)     /usr/lib/python3.12/dist-pac                             kages/onnxruntime/capi/onnxruntime_pybind11_state.so
0x0000003f6dd164e0  0x0000003f6e09ec14  Yes (*)     /home/lzdz/spacemit-demo-mai                             n/spacemit_ort_2.0.5/spacemit_ort/libspacemit_ep.so.2.0.5
0x0000003f85285d00  0x0000003f85287e14  Yes (*)     /lib/riscv64-linux-gnu/libat                             omic.so.1
0x0000003f845d79c0  0x0000003f845da546  Yes (*)     /lib/libspine_tcm.so
0x0000003f852f57e0  0x0000003f852f6b3e  Yes         /usr/lib/python3.12/lib-dynl                             oad/_bz2.cpython-312-riscv64-linux-gnu.so
0x0000003f852e4310  0x0000003f852efb78  Yes (*)     /lib/riscv64-linux-gnu/libbz                             2.so.1.0
0x0000003f836f84d0  0x0000003f836fb16a  Yes         /usr/lib/python3.12/lib-dynl                             oad/_lzma.cpython-312-riscv64-linux-gnu.so
0x0000003f836b3120  0x0000003f836ca060  Yes (*)     /lib/riscv64-linux-gnu/liblz                             ma.so.5
0x0000003f8367d1f0  0x0000003f836a47ce  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/_bounded_integers.cpython-312-riscv64-linux-gnu.s                             o
0x0000003f83650810  0x0000003f83668b4c  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/bit_generator.cpython-312-riscv64-linux-gnu.so
0x0000003f85295340  0x0000003f852b706e  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/_common.cpython-312-riscv64-linux-gnu.so
0x0000003f836ebf20  0x0000003f836ef82a  Yes         /usr/lib/python3.12/lib-dynl                             oad/_hashlib.cpython-312-riscv64-linux-gnu.so
0x0000003f67cb2d00  0x0000003f67e4f632  Yes (*)     /lib/riscv64-linux-gnu/libcr                             ypto.so.3
0x0000003f6e263c90  0x0000003f6e2b3506  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/_generator.cpython-312-riscv64-linux-gnu.so
0x0000003f6f893630  0x0000003f6f8a1336  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/_pcg64.cpython-312-riscv64-linux-gnu.so
0x0000003f6f8780d0  0x0000003f6f88507a  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/_mt19937.cpython-312-riscv64-linux-gnu.so
0x0000003f6f85f280  0x0000003f6f86bbec  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/_philox.cpython-312-riscv64-linux-gnu.so
0x0000003f6e24bbf0  0x0000003f6e252f3c  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/_sfc64.cpython-312-riscv64-linux-gnu.so
0x0000003f6c27e210  0x0000003f6c2b6ea2  Yes (*)     /home/lzdz/myenv/lib/python3                             .12/site-packages/numpy/random/mtrand.cpython-312-riscv64-linux-gnu.so
(*): Shared library is missing debugging information.

···

段错误我们刚在本机(同款 K1 MUSE Pi Pro,同版本 onnxruntime 1.24.0+spacemit.a3)最小复现并定位了——先说结论:大概率不是你的量化模型有问题,是 EP 版本的已知 TCM 分配 bug,升级 EP 即解决。

1. 最小复现

构造了一个 27MB 不到的最小模型(输入维度随意,甚至 [6,48] 的纯 MatMul 都能触发):

import spacemit_ort          # 2.0.3 时代要求先 import 它
import onnxruntime as ort
sess = ort.InferenceSession("tiny.onnx",
    providers=["SpaceMITExecutionProvider", "CPUExecutionProvider"])   # <- 这里就崩

表面是段错误(SIGSEGV,核心已转储),真实错误抓出来是:

terminate called after throwing 'std::runtime_error'
  what(): tcm buffer acquire failed for core id 1.

这是 SpaceMIT EP 向 TCM(AI 核的紧耦合内存)申请缓冲区失败的已知 bug,论坛里 t/1496(int8 yolo 同款报错)、t/1459 都是它。2.0.3 体系里 TCM 分配失败不会优雅回退,直接把进程砸掉——你看到的就是这个。DA3 模型更大、编译期需要的 TCM 缓冲更多,所以必崩。

2. 验证过的解法:升级 EP 到 2.0.5+

从 SpacemiT 私有 PyPI 拉(国内直连,不需要 GitHub):

pip3 download spacemit-ort==2.0.7 --no-deps \
  --index-url https://git.spacemit.com/api/v4/projects/33/packages/pypi/simple
mkdir ep207 && cd ep207 && unzip ../spacemit_ort-2.0.7-*.whl
# 2.0.7 的 EP 需要配套 libspert.so.1(spine-runtime),2.0.5 不需要,稳妥可先用 2.0.5:
pip3 download spacemit-ort==2.0.5 --no-deps \
  --index-url https://git.spacemit.com/api/v4/projects/33/packages/pypi/simple

本机实测(EP 2.0.5):六个此前必崩的最小模型(含 rank-5 输入、rank-5 Transpose)全部通过,不再段错误;EP 编译失败时会打警告并优雅回退 CPU(旧版 2.0.3 是直接崩)。

注意一个版本差异的坑:2.0.5+ 的 import 顺序和 2.0.3 相反,必须先 import onnxruntime 再 import spacemit_ort,否则 libspacemit_ep.so 符号解析失败直接报 OSError。

另外参考 t/1696:GitHub Release 已有 onnxruntime v2.0.8 配 xslim 2.1.2(修了 rank-5 Transpose 类算错),私有 PyPI 目前最新是 2.0.7,不急可以等 2.0.8 进源。

抛砖引玉,多交流