RDK S100P上可以部署Qwen2.5-VL-3B-Instruct吗?模型上板推理时出错。

我想在RDK S100P上测试Qwen2.5-VL-3B-Instruct的视觉推理性能,参考了“https://github.com/AXERA-TECH/Qwen2.5-VL-3B-Instruct.axera/tree/main/model_convert”这个链接中的模型转换方法,将Qwen的视觉部分转为了onnx格式,然后直接通过“hb_compile
–march nash-m
–model ./Qwen2.5-VL-3B-Instruct_vision.onnx
–input-shape hidden_states 1x3x1024x392
”指令得到了视觉模型的hbm格式文件;然后通过llama.cpp的模型转换得到了gguf格式的语言模型文件,参考“https://github.com/zixi01chen/llama.cpp_vlm_bpu”修改了llama.cpp的编译方式,通过“./llama.cpp/build/bin/llama-intern2vl-bpu-cli -m ./llama.cpp/GGUF-BPU-models/Qwen2.5-VL-3B-Instruct-GGUF-BPU/Qwen2.5-VL-3B-q4_k_m.gguf --mmproj ./llama.cpp/GGUF-BPU-models/Qwen2.5-VL-3B-Instruct-GGUF-BPU/Qwen2.5-VL-3B-Instruct_vision.hbm --image ./img/image2.jpg -p “Describe this image” --temp 0.1 --threads 4”指令运行推理,结果报错:

[BPU][[BPU_MONITOR]][281473187122336][INFO]BPULib verison(2, 1, 2)[0d3f195]!
[DNN] HBTL_EXT_DNN log level:6
[DNN]: 3.7.3_(4.2.11 HBRT)
llama_init_from_model: n_seq_max = 1
llama_init_from_model: n_ctx = 6400
llama_init_from_model: n_ctx_per_seq = 6400
llama_init_from_model: n_batch = 2048
llama_init_from_model: n_ubatch = 512
llama_init_from_model: flash_attn = 0
llama_init_from_model: freq_base = 1000000.0
llama_init_from_model: freq_scale = 1
llama_init_from_model: n_ctx_per_seq (6400) < n_ctx_train (128000) – the full capacity of the model will not be utilized
llama_kv_cache_init: kv_size = 6400, offload = 1, type_k = ‘f16’, type_v = ‘f16’, n_layer = 36, can_shift = 1
llama_kv_cache_init: CPU KV buffer size = 225.00 MiB
llama_init_from_model: KV self size = 225.00 MiB, K (f16): 112.50 MiB, V (f16): 112.50 MiB
llama_init_from_model: CPU output buffer size = 0.58 MiB
llama_init_from_model: CPU compute buffer size = 304.75 MiB
llama_init_from_model: graph nodes = 1266
llama_init_from_model: graph splits = 1
Model input shape: [1, 3, 1024, 392]
[E][9393][02-06][16:09:05:755][dnn_task.cpp:304][llama-intern2vl-bpu-cli][DNN] [Task] input index 0 's sys mem size is not enough, required: 5111808, given: 4816896
[E][9393][02-06][16:09:05:755][dnn_task.cpp:248][llama-intern2vl-bpu-cli][DNN] [Task] Validate input[0] failed!
[E][9393][02-06][16:09:05:755][dnn_task.cpp:182][llama-intern2vl-bpu-cli][DNN] [Task] invalid input
[E][9393][02-06][16:09:05:755][hb_ucp.cpp:74][llama-intern2vl-bpu-cli][UCP] taskHandle is null pointer
[E][9393][02-06][16:09:05:755][hb_ucp.cpp:89][llama-intern2vl-bpu-cli][UCP] taskHandle is null pointer
[E][9393][02-06][16:09:05:755][hb_ucp.cpp:120][llama-intern2vl-bpu-cli][UCP] taskHandle is null pointer

想知道可以通过这种方式部署Qwen2.5-VL模型到板子上吗?视觉部分在BPU上推理,语言部分在CPU上?或者有其他的方式可以实现吗?

大模型的内容发布了 https://developer.d-robotics.cc/rdk_doc/rdk_s/Advanced_development/toolchain_development/LLM_Toolchain 工具链

视觉部分在BPU上推理,语言部分在CPU上是可行的

你好,我确实是采用这种方式部署的,目前模型已经转换成功了,视觉部分转为了 hbm 格式,语言部分转为了 gguf 格式,但是在用 llama.cpp 部署推理的时候遇到了上述的问题,想问下这个问题是什么导致的?有什么解决办法吗?

通用的排查思路就是去单独对HBM模型和GGUF进行推理,先确保模块正常运行

看报错是ION内存分配的问题,可以参考手册修改分配更多的内存

[E][9393][02-06][16:09:05:755][dnn_task.cpp:304][llama-intern2vl-bpu-cli][DNN] [Task] input index 0 's sys mem size is not enough, required: 5111808, given: 4816896

很抱歉打扰,看您之前发的链接是语言模型的部署方式,还是想问一下你们有试过将 Qwen 系列的 VLM 视觉语言模型通过这种方式转成 hbm 和 gguf 进行部署推理吗,因为我排查了很多天始终找不到原因,所以真的想确认一下是否可行,谢谢!

观察报错已经提供了原因,应该是内存分配不足的问题,参考手册调整一下ION内存的分配应该就行

之前有过方案释放在手册:https://developer.d-robotics.cc/rdk_doc/Robot_development/boxs/generate/hobot_llamacpp

您好,我想接着咨询一下:我注意到 hobot llama 提供的 vlm 部署方案是 vision 部分放在 bpu,llm 部分放在 cpu;我想尝试 llm 也跑在 bpu, 然后 s100 平台确实提供了 llm 工具链,但仅可部署特定的 vlm 模型,并且只提供 infer 接口,大部分内部细节(依赖 libxlm.so)不可见,导致无法实现定制化的操作,比如 kv cache 、其它处理等。请问从哪里可以看到内部实现,或者说 libxlm 源码是否会释放?

这部分的内容以手册中的内容和LLM工具链为主,对外释放的内容都在这里面了

1 个赞