lihongjie
update
c18b793
---
license: mit
language:
- en
- zh
base_model:
- Qwen/Qwen3-VL-2B-Instruct
- Qwen/Qwen3-VL-4B-Instruct
pipeline_tag: image-text-to-text
library_name: transformers
tags:
- Qwen3-VL
- Qwen3-VL-2B-Instruct
- Qwen3-VL-4B-Instruct
- Int8
- VLM
---
# Qwen3-VL
This version of Qwen3-VL-2B-Instruct and Qwen3-VL-4B-Instruct have been converted to run on the Axera NPU using **w8a16** quantization.
Compatible with Pulsar2 version: 5.0
## Convert tools links:
For those who are interested in model conversion, you can try to export axmodel through the original repo :
- https://huggingface.co/Qwen/Qwen3-VL-2B-Instruct
- https://huggingface.co/Qwen/Qwen3-VL-4B-Instruct
[Pulsar2 Link, How to Convert LLM from Huggingface to axmodel](https://pulsar2-docs.readthedocs.io/en/latest/appendix/build_llm.html)
[AXera NPU HOST LLM Runtime](https://github.com/AXERA-TECH/Qwen3-VL.AXERA)
## Support Platform
- AX650
- AX650N DEMO Board
- [M4N-Dock(爱芯派Pro)](https://wiki.sipeed.com/hardware/zh/maixIV/m4ndock/m4ndock.html)
- [M.2 Accelerator card](https://axcl-docs.readthedocs.io/zh-cn/latest/doc_guide_hardware.html)
**Image Process**
|Chips| input size | image num | image encoder | ttft(168 tokens) | w8a16 | CMM | Flash |
|--|--|--|--|--|--|--|--|
|AX650| 384*384 | 1 | 236 ms | 907 ms | 4.3 tokens/sec| 7.3GiB | 7.9GiB |
**Video Process**
|Chips| input size | image num | image encoder |ttft(600 tokens) | w8a16 | CMM | Flash |
|--|--|--|--|--|--|--|--|
|AX650| 384*384 | 8 | 778 ms | 2442 ms | 4.3 tokens/sec| 7.3GiB | 7.9GiB |
The DDR capacity refers to the CMM memory that needs to be consumed. Ensure that the CMM memory allocation on the development board is greater than this value.
## How to use
Download all files from this repository to the device
**If you using AX650 Board**
### Prepare tokenizer server
#### Install transformer
```
pip install -r requirements.txt
```
### Demo Run
#### Image understand demo
##### start tokenizer server for image understand demo
```
python3 qwen3_tokenizer.py --port 8080
```
##### run image understand demo
- input text
```
描述这张图片
```
- input image
![](./images/recoAll_attractions_1.jpg)
```
root@ax650 ~/Qwen3-VL-4B-Instruct # bash run_image_ax650.sh
[I][ Init][ 156]: LLM init start
[I][ Init][ 158]: Total CMM:7884 MB
[I][ Init][ 34]: connect http://127.0.0.1:8080 ok
bos_id: -1, eos_id: 151645
img_start_token: 151652
img_context_token: 151655
2% | █ | 1 / 39 [0.01s<0.58s, 66.67 count/s] tokenizer init ok[I][ Init][ 26]: LLaMaEmbedSelector use mmap
5% | ██ | 2 / 39 [0.02s<0.43s, 90.91 count/s] embed_selector init ok[I][ Init][ 201]: attr.axmodel_num:36
102% | █████████████████████████████████ | 40 / 39 [75.14s<73.27s, 0.53 count/s] init vpm axmodel ok,remain_cmm(369 MB)[I][ Init][ 266]: IMAGE_CONTEXT_TOKEN: 151655, IMAGE_START_TOKEN: 151652
[I][ Init][ 309]: image encoder output float32
[I][ Init][ 339]: max_token_len : 2047
[I][ Init][ 344]: kv_cache_size : 1024, kv_cache_num: 2047
[I][ Init][ 352]: prefill_token_num : 128
[I][ Init][ 356]: grp: 1, prefill_max_token_num : 1
[I][ Init][ 356]: grp: 2, prefill_max_token_num : 128
[I][ Init][ 356]: grp: 3, prefill_max_token_num : 256
[I][ Init][ 356]: grp: 4, prefill_max_token_num : 384
[I][ Init][ 356]: grp: 5, prefill_max_token_num : 512
[I][ Init][ 356]: grp: 6, prefill_max_token_num : 640
[I][ Init][ 356]: grp: 7, prefill_max_token_num : 768
[I][ Init][ 356]: grp: 8, prefill_max_token_num : 896
[I][ Init][ 356]: grp: 9, prefill_max_token_num : 1024
[I][ Init][ 356]: grp: 10, prefill_max_token_num : 1152
[I][ Init][ 360]: prefill_max_token_num : 1152
[I][ Init][ 372]: LLM init ok
[I][ Init][ 374]: Left CMM:369 MB
Type "q" to exit, Ctrl+c to stop current running
prompt >> 描述这张图片
image >> images/recoAll_attractions_1.jpg
[I][ EncodeImage][ 440]: pixel_values size 1
[I][ EncodeImage][ 441]: grid_h 24 grid_w 24
[I][ EncodeImage][ 489]: image encode time : 236.550995 ms, size : 1
[I][ Encode][ 532]: input_ids size:168
[I][ Encode][ 540]: offset 15
[I][ Encode][ 569]: img_embed.size:1, 368640
[I][ Encode][ 583]: out_embed size:430080
[I][ Encode][ 584]: input_ids size 168
[I][ Encode][ 586]: position_ids size:168
[I][ Run][ 607]: input token num : 168, prefill_split_num : 2
[I][ Run][ 641]: input_num_token:128
[I][ Run][ 641]: input_num_token:40
[I][ Run][ 865]: ttft: 907.21 ms
这张图片展示了埃及吉萨金字塔群的壮丽景象,背景是清澈的蓝天,前景是广袤的沙漠。
画面中,最引人注目的是三座宏伟的金字塔,它们是古埃及文明的象征。其中,位于中央的是一座巨大的金字塔,其石块结构清晰可见,显示出古代工匠的精湛技艺。在它的左侧,是一座较小的金字塔,可能是为法老或贵族建造的。在右侧,还有一座金字塔,虽然部分被遮挡,但依然能感受到其雄伟的气势。
金字塔的周围是平坦的沙地,阳光照射下,金字塔的轮廓在蓝天的映衬下显得格外清晰。整个场景充满了历史的厚重感和神秘的氛围,让人不禁感叹古埃及文明的辉煌成就。
这张图片不仅展现了金字塔的建筑之美,也体现了古埃及人对宇宙和永恒的追求。它是一幅令人震撼的自然与人文景观的完美结合。
[N][ Run][ 992]: hit eos,avg 4.29 token/s
```
#### Video understand demo
##### start tokenizer server for image understand demo
```
python qwen3_tokenizer.py --port 8080
```
##### run video understand demo
- input text
```
描述这个视频
```
- input video
./video
```
root@ax650 ~/Qwen3-VL-4B-Instruct # bash run_video_ax650.sh
[I][ Init][ 156]: LLM init start
[I][ Init][ 158]: Total CMM:7884 MB
[I][ Init][ 34]: connect http://127.0.0.1:8080 ok
bos_id: -1, eos_id: 151645
img_start_token: 151652
img_context_token: 151656
2% | █ | 1 / 39 [0.01s<0.43s, 90.91 count/s] tokenizer init ok[I][ Init][ 26]: LLaMaEmbedSelector use mmap
5% | ██ | 2 / 39 [0.01s<0.29s, 133.33 count/s] embed_selector init ok[I][ Init][ 201]: attr.axmodel_num:36
102% | █████████████████████████████████ | 40 / 39 [73.00s<71.17s, 0.55 count/s] init vpm axmodel ok,remain_cmm(369 MB)[I][ Init][ 266]: IMAGE_CONTEXT_TOKEN: 151656, IMAGE_START_TOKEN: 151652
[I][ Init][ 309]: image encoder output float32
[I][ Init][ 339]: max_token_len : 2047
[I][ Init][ 344]: kv_cache_size : 1024, kv_cache_num: 2047
[I][ Init][ 352]: prefill_token_num : 128
[I][ Init][ 356]: grp: 1, prefill_max_token_num : 1
[I][ Init][ 356]: grp: 2, prefill_max_token_num : 128
[I][ Init][ 356]: grp: 3, prefill_max_token_num : 256
[I][ Init][ 356]: grp: 4, prefill_max_token_num : 384
[I][ Init][ 356]: grp: 5, prefill_max_token_num : 512
[I][ Init][ 356]: grp: 6, prefill_max_token_num : 640
[I][ Init][ 356]: grp: 7, prefill_max_token_num : 768
[I][ Init][ 356]: grp: 8, prefill_max_token_num : 896
[I][ Init][ 356]: grp: 9, prefill_max_token_num : 1024
[I][ Init][ 356]: grp: 10, prefill_max_token_num : 1152
[I][ Init][ 360]: prefill_max_token_num : 1152
[I][ Init][ 372]: LLM init ok
[I][ Init][ 374]: Left CMM:369 MB
Type "q" to exit, Ctrl+c to stop current running
prompt >> 描述这个视频
video >> video
video/frame_0000.jpg
video/frame_0008.jpg
video/frame_0016.jpg
video/frame_0024.jpg
video/frame_0032.jpg
video/frame_0040.jpg
video/frame_0048.jpg
video/frame_0056.jpg
[I][ EncodeImage][ 440]: pixel_values size 4
[I][ EncodeImage][ 441]: grid_h 24 grid_w 24
[I][ EncodeImage][ 489]: image encode time : 778.210022 ms, size : 4
[I][ Encode][ 532]: input_ids size:600
[I][ Encode][ 540]: offset 15
[I][ Encode][ 569]: img_embed.size:4, 368640
[I][ Encode][ 574]: offset:159
[I][ Encode][ 574]: offset:303
[I][ Encode][ 574]: offset:447
[I][ Encode][ 583]: out_embed size:1536000
[I][ Encode][ 584]: input_ids size 600
[I][ Encode][ 586]: position_ids size:600
[I][ Run][ 607]: input token num : 600, prefill_split_num : 5
[I][ Run][ 641]: input_num_token:128
[I][ Run][ 641]: input_num_token:128
[I][ Run][ 641]: input_num_token:128
[I][ Run][ 641]: input_num_token:128
[I][ Run][ 641]: input_num_token:88
[I][ Run][ 865]: ttft: 2441.51 ms
这个视频展示了一群**土拨鼠**(或称旱獭)在山地环境中嬉戏打闹的生动场景。
**画面内容:**
- **主体动物**:画面中有多只土拨鼠,它们毛色以灰、棕、白相间,体型圆润,四肢短小,尾巴蓬松。它们正互相追逐、扑打、推搡,动作非常活跃,看起来像是在玩耍或争斗。
- **动作细节**:土拨鼠们用前爪互相拍打、推搡,有的甚至用后腿蹬地,姿态充满动感。其中一只土拨鼠的前爪高高举起,似乎在“击打”另一只,画面充满动感和趣味。
- **背景环境**:背景是连绵起伏的山峦,山坡上覆盖着绿色植被,远处可见裸露的岩石和一条蜿蜒的山路。天空湛蓝,阳光明媚,整个场景充满自然野趣。
- **构图与视觉效果**:画面采用近景特写,聚焦于土拨鼠的互动,背景则略显模糊,突出了主体。画面中还出现了轻微的“多重曝光”或“动态模糊”效果,增强了动作的动感和趣味性。
**整体氛围:**
视频充满活力和趣味,展现了野生动物在自然环境中的自然行为,尤其是它们之间充满“斗殴”趣味的互动,让人忍俊不禁。这种“打斗”在动物界中常是社交、领地争夺或玩耍行为,但在这里被拍摄得极具戏剧性和趣味性。
**总结:**
这是一段充满动感和趣味的野生动物视频,展现了土拨鼠在山地环境中活泼好动、互相嬉戏的可爱瞬间,背景壮丽,画面生动,令人印象深刻。
[N][ Run][ 992]: hit eos,avg 4.30 token/s
```