AI 开放平台

提供适配不同硬件平台的AI模型,探索更多端侧场景应用

基于此芯P1部署BGE-Small-ZH-V1.5

此芯: P1

此文档介绍如何使用 CIX P1 NPU SDK 将 BGE-Small-ZH-V1.5 转换为 CIX SOC NPU 上可以运行的模型。

整体来讲有四个步骤:
:::tip
步骤1~3 在 x86 主机 Linux 环境下执行
:::

  1. 下载 NPU SDK 并安装 NOE Compiler
  2. 下载模型文件 (代码和脚本)
  3. 编译模型
  4. 部署模型到 Orion O6

下载 NPU SDK 并安装 NOE Compiler

请参考 安装 NPU SDK 进行 NPU SDK 和 NOE Compiler 的安装.

下载模型文件

在 CIX AI Model Hub 中包含了 BGE-Small-ZH-V1.5 的所需文件, 请用户按照 CIX AI Model Hub 下载

cd ai_model_hub/models/Generative_AI/Text_Image_Search/onnx_bge_small_zh

请确认目录结构是否同下图所示。

├── bge-small-zh-v1.5
│   ├── 1_Pooling
│   │   └── config.json
│   ├── config.json
│   ├── config_sentence_transformers.json
│   ├── modules.json
│   ├── README.md
│   ├── sentence_bert_config.json
│   ├── special_tokens_map.json
│   ├── tokenizer_config.json
│   ├── tokenizer.json
│   └── vocab.txt
├── cfg
│   └── bge_small_zh_build.cfg
├── dataset
│   └── calibd_data.npz
├── model
│   ├── bge-small-zh-sim.onnx
│   └── bge-small-zh.onnx
├── graph.json
├── inference_noe.py
├── inference_onnx.py
├── ReadMe.md
└── script
  ├── 00run_pytorch.py
  ├── 01convert_to_onnx.py
  └── 02gen_calib_data.py

编译模型

:::tip
用户可无需从头编译模型,radxa 提供预编译好的 bge-small-zh_256.cix 模型(可用下面步骤下载),如果使用预编译好的模型,可以跳过“编译模型” 这一步

wget https://modelscope.cn/models/cix/ai_model_hub_24_Q4/resolve/master/models/Generative_AI/Text_Image_Search/onnx_bge_small_zh/bge-small-zh_256.cix

:::

模型部署

NPU 推理

将使用 NOE Compiler 编译好的 .cix 格式的模型复制到 Orion O6 开发板上进行模型验证

python3 inference_noe.py
(.venv) radxa@orion-o6:~/ai_model_hub/models/Generative_AI/Text_Image_Search/onnx_bge_small_zh$ time python3 inference_noe.py
npu: noe_init_context success
npu: noe_load_graph success
Input tensor count is 3.
Output tensor count is 2.
npu: noe_create_job success
0.6624115
0.08777221
0.18105437
0.10344582
0
查询: ['什么是机器学习?']
最相似的文档: 这是一篇关于机器学习的文章。
npu: noe_clean_job success
npu: noe_unload_graph success
npu: noe_deinit_context success

real    0m4.571s
user    0m5.397s
sys     0m0.504s

CPU 推理

使用 CPU 对 onnx 模型进行推理验证正确性,可在 X86 主机上或 Orion O6 上运行

python3 inference_onnx.py

(.venv) radxa@orion-o6:~/ai_model_hub/models/Generative_AI/Text_Image_Search/onnx_bge_small_zh$ time python3 inference_onnx.py
0.8043387
0.55985427
0.36508316
0.43281698
0
查询: ['什么是机器学习?']
最相似的文档: 这是一篇关于机器学习的文章。

real    0m4.810s
user    0m9.719s
sys     0m0.500s

可以看到 NPU 和 CPU 上推理的结果一致,但运行速度大幅缩短

参考文档

论文链接: C-Pack: Packed Resources For General Chinese Embeddings