冬
gcw_IDzXRVNw/mxbai-edge-colbert-v0-32m-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

mxbai-edge-colbert-v0-32M Ascend NPU 部署指南

项目简介

mxbai-edge-colbert-v0-32M 是 mixedbread-ai 的 32M 参数 ColBERT 风格句子嵌入模型,可将句子映射到 384 维稠密向量空间,适用于语义搜索、聚类和相似度计算等任务。该模型基于 ModernBERT 架构,针对高效边缘部署进行了优化。

特性

  • 支持 Ascend NPU 推理加速
  • CPU 与 NPU 精度对比测试(余弦相似度≈1.0,误差<1%)
  • 高效句子嵌入提取
  • 384 维向量输出
  • 兼容 HuggingFace transformers

环境要求

  • 硬件:华为 Ascend 910 系列 NPU
  • CANN:8.0.RC1 或更高版本
  • PyTorch:2.0+ 并带 torch_npu
  • Docker:容器名称 test-modelagent
  • transformers:4.57+

目录结构

mxbai-edge-colbert-v0-32m-ascend/
├── inference.py          # 推理测试脚本
├── log.txt               # 测试日志
├── README.md             # 本文档
├── test_sample.txt       # 测试样本
├── inference_result.json # 推理结果
└── precision_result.json # 精度测试结果

部署步骤

1. 进入容器

docker exec -it test-modelagent bash

2. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

3. 准备模型文件

模型文件位于 /data/ysws/agentsp/5-18-2/mxbai-edge-colbert-v0-32m/mixedbread-ai/mxbai-edge-colbert-v0-32m/ 目录下:

  • model.safetensors - 模型权重 (~128MB)
  • config.json - 模型配置
  • tokenizer.json / tokenizer_config.json - 分词器文件
  • modules.json - 模块配置

4. 安装依赖

pip install transformers torch_npu

Usage

Method 1: Normal Inference Mode

cd /data/ysws/agentsp/5-18-2/mxbai-edge-colbert-v0-32m-ascend/
python3 inference.py

方式二:精度测试模式 (CPU vs NPU)

cd /data/ysws/agentsp/5-18-2/mxbai-edge-colbert-v0-32m-ascend/
python3 inference.py precision_test

测试验证

精度测试结果

指标实测值阈值状态
Cosine 相似度1.000000≈ 1.0PASS
最大相对误差0.0191%< 1%PASS
NPU 加速比3.69x> 3xPASS

性能数据

操作耗时
CPU 推理时间0.053s
NPU 推理时间0.014s
加速比3.69x

嵌入结果示例

输入句子嵌入维度首 5 维值
"Hello, how are you today?"384[0.0047, -0.0162, 0.0935, 0.0047, 0.0041]

结果: CPU 和 NPU 输出的 cosine 相似度为 1.000000,几乎完全一致

测试日志

完整测试日志如下:

============================================================
mxbai-edge-colbert-v0-32M NPU Test
Output: /data/ysws/agentsp/5-18-2/mxbai-edge-colbert-v0-32m-ascend
============================================================

============================================================
mxbai-edge-colbert-v0-32M Inference Test (NPU)
============================================================
Device: npu:0
Model: /data/ysws/agentsp/5-18-2/mxbai-edge-colbert-v0-32m/mixedbread-ai/mxbai-edge-colbert-v0-32m

Loading tokenizer...
Loading model...
Loading weights: 100%|██████████| 62/62 [00:00<00:00, 7313.31it/s]

Input text: ['Hello, how are you today?']
Input shape: torch.Size([1, 9])
Embedding shape: torch.Size([1, 384])
Embedding sample (first 5): [0.004708211403340101, -0.016210922971367836, 0.09353338181972504, 0.004691631533205509, 0.00407747644931078]
Inference time: 0.300s

============================================================
Precision Test (CPU vs NPU)
============================================================

Loading model on CPU...
Loading weights: 100%|██████████| 62/62 [00:00<00:00, 4594.87it/s]
Running inference on CPU...

Loading model on NPU...
Loading weights: 100%|██████████| 62/62 [00:00<00:00, 5485.29it/s]
Running inference on NPU...

CPU inference time: 0.053s
NPU inference time: 0.014s
Speedup: 3.69x
Cosine similarity: 1.000000
Max absolute error: 9.805104e-05
Max relative error: 1.911812e-04 (0.0191%)
Status: PASS

============================================================
Creating Test Sample
============================================================
Saved test sample
  1. Hello, how are you today?
  2. The weather is nice today.
  3. I am very happy to see you.

============================================================
Test Complete!

Python API 使用示例

基本推理

import torch
from transformers import AutoTokenizer, AutoModel

MODEL_DIR = "/data/ysws/agentsp/5-18-2/mxbai-edge-colbert-v0-32m/mixedbread-ai/mxbai-edge-colbert-v0-32m"

tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)
model = AutoModel.from_pretrained(MODEL_DIR)
model = model.to("npu:0")
model.eval()

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output.last_hidden_state
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

sentences = ["Hello, how are you today?"]
inputs = tokenizer(sentences, return_tensors="pt", padding=True, truncation=True, max_length=128)
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    outputs = model(**inputs)
    embeddings = mean_pooling(outputs, inputs['attention_mask'])
    embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1)

print(f"Embeddings shape: {embeddings.shape}")  # torch.Size([1, 384])

语义相似度计算

from sklearn.metrics.pairwise import cosine_similarity

# 计算两个句子的相似度
emb1 = embeddings[0].cpu().numpy()
# ... (compute second embedding)
similarity = cosine_similarity([emb1], [emb2])[0][0]
print(f"Cosine similarity: {similarity:.4f}")

批量处理

sentences = [
    "First sentence for embedding",
    "Second sentence for comparison",
    "Third sentence in the batch"
]

inputs = tokenizer(sentences, padding=True, truncation=True, max_length=128)
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    outputs = model(**inputs)
    embeddings = mean_pooling(outputs, inputs['attention_mask'])
    embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1)

print(f"Batch embeddings shape: {embeddings.shape}")  # torch.Size([3, 384])

模型结构

  • 架构类型: ModernBERT(ColBERT 风格)
  • 编码器: 10 层 Transformer
  • 隐藏层维度: 384
  • 注意力头数: 6
  • 参数量: ~32M
  • 池化方式: 均值池化 + L2 归一化
组件说明
embeddingsModernBERT 词嵌入(vocab_size=50370)
encoder10 层 Transformer 编码器
pooling对 token 嵌入进行均值池化

推理参数配置

从 config.json 提取的关键参数:

{
  "hidden_size": 384,
  "intermediate_size": 576,
  "num_attention_heads": 6,
  "num_hidden_layers": 10,
  "vocab_size": 50370,
  "model_type": "modernbert",
  "classifier_pooling": "mean"
}

常见问题

Q: 精度测试失败?

A: 检查 NPU 驱动是否正确安装,确保 CANN 环境变量已 source。

Q: 如何提高推理速度?

A: 使用批处理可以显著提高吞吐量。另外,首次推理会有编译开销,后续推理会更快。

Q: 模型输出的向量有什么用?

A: 可用于:

  • 语义搜索: 计算向量相似度
  • 聚类: 将相似句子聚在一起
  • 重排序: 对候选结果进行相似度排序

参考链接

  • 原始模型: https://huggingface.co/mixedbread-ai/mxbai-edge-colbert-v0-32m
  • ModernBERT: https://huggingface.co/docs/transformers/main_classes/models
  • HuggingFace Transformers: https://huggingface.co/transformers

许可证

本项目遵循 Apache-2.0 许可证