Kneron AI-KL730
您好:
我在kl730模型开发的时候遇到了问题,就是我的.onnx转.nef模型的时候,工具链v.30.0版本是modelconfig增加了一个可选参数 input_fmt用于指定模型输入格式,但我填入参数的 input_fmt="4W4C8B"的时候去进行转换,转换代码伪代码km = ktc.ModelConfig(211, "0001", "730", onnx_model=m, input_fmt="4W4C8B")。
总是有如下报错。
[common][error][exceptions.cc:41][KneronException] HardwareNotSupport: Unsupported ReFormat fmt [4W4C8B]
[common][info][utils.cc:271][DumpBacktrace] dump backtrace
Stack trace (most recent call last):
#10 Object "", at 0xffffffffffffffff, in
#9 Object "/workspace/libs_V2/compiler/batch_compile", at 0x5fecd2a925bd, in _start
BFD: DWARF error: section .debug_info is larger than its filesize! (0x93f189 vs 0x530e70)
#8 Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x70cc17576082, in __libc_start_main
#7 Source "/projects_src/kneron-piano_v2/compiler/bin/batch_compile/batch_compile.cc", line 375, in main [0x5fecd2a8da4f]
#6 | Source "/projects_src/kneron-piano_v2/compiler/bin/batch_compile/batch_compile.cc", line 174, in BatchCompile
| Source "/projects_src/kneron-piano_v2/compiler/bin/batch_compile/batch_compile.cc", line 149, in RunCompile
Source "/projects_src/kneron-piano_v2/compiler/lib/common/public/compile_impl.h", line 62, in Compile(char const*, char const*, Json::Value const&, FirmInfo*) [0x5fecd2a93197]
#5 Source "/projects_src/kneron-piano_v2/compiler/lib/wagner/backend/compile.cc", line 313, in CompileImpl [0x70cc167b079c]
#4 Source "/projects_src/kneron-piano_v2/compiler/lib/common/backend/compile_utils.cc", line 606, in GraphCompiler::OptimizeGraph() [0x70cc1685ca0b]
#3 Source "/projects_src/kneron-piano_v2/compiler/lib/wagner/frontend/tgt_graph_gen.cc", line 79, in GraphOptBE(Graph&, ShapeInferencer&) [0x70cc1681917e]
#2 | Source "/projects_src/kneron-piano_v2/compiler/lib/wagner/frontend/tgt_post_process.cc", line 163, in WagnerPostProcess(Graph&)
| Source "/projects_src/kneron-piano_v2/compiler/lib/wagner/frontend/tgt_post_process.cc", line 138, in PostCheck
| Source "/projects_src/kneron-piano_v2/compiler/lib/wagner/frontend/tgt_post_process.cc", line 87, in CheckReFormatFmt
Source "/projects_src/kneron-piano_v2/piano/lib/piano/common/exceptions.h", line 50, in HardwareNotSupport::HardwareNotSupport(std::string const&) [0x70cc166bb825]
#1 Source "/projects_src/kneron-piano_v2/piano/lib/piano/common/exceptions.cc", line 44, in KneronException::KneronException(ErrorCode, std::string const&) [0x70cc17c9fd76]
#0 Source "/projects_src/kneron-piano_v2/piano/lib/piano/common/utils.cc", line 273, in DumpBacktrace() [0x70cc17cb79e8]
BFD: DWARF error: section .debug_info is larger than its filesize! (0x93f189 vs 0x530e70)
[tool][error][batch_compile.cc:175][BatchCompile] Failed to compile input.onnx
Traceback (most recent call last):
File "/docker_mount/test_data/25_8_8.py", line 60, in <module>
main()
File "/docker_mount/test_data/25_8_8.py", line 56, in main
nef_model_path = ktc.compile([km])
File "/workspace/miniconda/envs/onnx1.13/lib/python3.9/site-packages/ktc/toolchain.py", line 519, in compile
return encrypt_compile(
File "/workspace/miniconda/envs/onnx1.13/lib/python3.9/site-packages/ktc/toolchain.py", line 661, in encrypt_compile
subprocess.run(commands, check=True)
File "/workspace/miniconda/envs/onnx1.13/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/workspace/libs_V2/compiler/batch_compile', '-T', '730', '/data1/kneron_flow/batch_compile_bconfig.json', '-t', 'kneron/toolchain:v0.30.0\n', '-o']' returned non-zero exit status 4.
Comments
Hello,
KL730 如果要指定 input 是 4W4C8B,格式上需要滿足 conv 是 first layer, 且 input channel <=4 && column stride <= 2 && column dilation == 1
onnx conv stride/dilation 定義可以參考 https://github.com/onnx/onnx/blob/rel-1.15.0/docs/Operators.md#conv
若轉換4W4C8B會失敗且模型無法修改的話,可以再試試看下面兩種format
https://doc.kneron.com/docs/#toolchain/manual_3_onnx/#32-ip-evaluation
這兩種在FW上有特別處理,理論上也可以配合KL730的硬體使用
如果我转换4W4C8B输入类型成功,是否都能适配plus接口和FW上的处理,无需做过多的修改,就能进行模型替换推理?
要比較models_730.nef與pth,請先在toolchain上透過ktc.kneron_inference()分別對ONNX與NEF模型推論,並確認兩者使用完全相同的流程(preprocess, postprocess. etc..),僅有模型的差異,來比較兩者答案是否都有符合您的預期
在因為PLUS上容易因為前後處理與原本有差異而導致結果不同,在toolchain上透過ktc.kneron_inference()能夠針對確認模型效果,使用方法請參考下面toolchain文件
https://doc.kneron.com/docs/#toolchain/manual_1_overview/#12-workflow-overview
另外,要使用kp_customized_inference_send來進行推論的話,必須事先透過SDK在FW中加入您的模型資訊與流程(model_id, job_id, preprocess, postprocess function, etc..),4W4C8B只是確保您的模型與KL730前處理IP的格式相符,對應的周邊流程還是要由您這邊自行開發
相關使用方法可以參考文件
https://doc.kneron.com/docs/#plus_c/feature_guide/customized_api/create_kl730_single_model_example/
感谢您的回答,我大致明白了