embeddinggemma-300m 是 Google DeepMind 开发的 300M 参数文本嵌入模型,基于 Gemma3 架构,支持句子嵌入和语义相似度计算。
/data/ysws/agentsp/5-15/embeddinggemma-300m-ascend/
├── inference.py # 推理测试脚本
├── log.txt # 测试日志
├── README.md # 本文档
├── test_embeddings.pt # 测试嵌入结果
├── test_samples.pt # 测试样本
├── test_samples.json # 测试样本JSON
└── precision_results.json # 精度测试结果docker exec -it test-modelagent bashsource /usr/local/Ascend/ascend-toolkit/set_env.sh模型文件应放在 /data/ysws/agentsp/5-15/embeddinggemma-300m/ 目录下:
cd /data/ysws/agentsp/5-15/embeddinggemma-300m-ascend/
python3 inference.py
python3 inference.py --texts "hello world" "test sentence"
python3 inference.py --device npu:0推理日志见log.txt
cd /data/ysws/agentsp/5-15/embeddinggemma-300m-ascend/
python3 inference.py --precision_test
python3 inference.py --precision_test --num_tests 5| 参数 | 说明 | 默认值 |
|---|---|---|
--model_path | 模型文件路径 | /data/ysws/agentsp/5-15/embeddinggemma-300m |
--output_dir | 输出目录 | /data/ysws/agentsp/5-15/embeddinggemma-300m-ascend |
--device | 运行设备 | npu:0 |
--precision_test | 运行精度测试模式 | False |
--num_tests | 精度测试的文本数量 | 5 |
--max_length | 最大序列长度 | 128 |
--texts | 自定义输入文本 | 默认测试文本 |
| 指标 | 实测值 | 阈值 | 状态 |
|---|---|---|---|
| Mean relative error | 0.0024% | < 1% | PASS |
| Max absolute error | 2.12e-05 | - | - |
| Cosine similarity | 1.0000 | ~1.0 | PASS |
| 操作 | 耗时 |
|---|---|
| 模型加载 | 3.79s |
| CPU 推理 (5 texts) | 0.785s |
| NPU 推理 (5 texts) | 0.745s |
完整测试日志保存在 log.txt
import torch
from transformers import AutoModel, AutoTokenizer
model_path = "/data/ysws/agentsp/5-15/embeddinggemma-300m"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True)
device = torch.device("npu:0")
model = model.to(device).eval()
texts = ["hello world", "test sentence"]
inputs = tokenizer(texts, padding=True, truncation=True, max_length=128, return_tensors='pt')
inputs = {k: v.to(device) for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
emb = outputs.last_hidden_state.mean(dim=1)
print(f"Embeddings shape: {emb.shape}")
print(f"First embedding: {emb[0][:5].tolist()}")from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
emb1 = embeddings[0].cpu().numpy()
emb2 = embeddings[1].cpu().numpy()
similarity = cosine_similarity([emb1], [emb2])[0][0]
print(f"Cosine similarity: {similarity}")| 组件 | 说明 |
|---|---|
| embedding | 词嵌入层 (262144 vocab) |
| layers | 24 层 Transformer 编码器 |
| norm | RMSNorm 归一化 |
| output | 768 维句子嵌入 (mean pooling) |
模型输出 BaseModelOutputWithPast,包含:
last_hidden_state: [batch_size, seq_len, hidden_size]past_key_values: (可选) 缓存的 KV 值最终嵌入通过 mean pooling 得到: [batch_size, 768]
A: 由于 CPU/NPU 数值精度差异,极少量近零值可能导致较大相对误差。99% 的值误差 < 0.02%,cosine similarity = 1.0,结果实际可用。
A: 首次加载需要解析 safetensors 权重,约 1.2GB,后续使用会更快。
A: 使用 NPU 加速,batch 处理多个文本。
本项目遵循 Google Gemma License.