跳到主要内容
feedback
feedback

部署文本向量化模型 (Embedding)

一、模型原理与结构

文本向量化模型(Text Embedding Model)将文本转换为高维稠密向量,捕捉文本的语义信息。以 Qwen3-Embedding 为代表的现代 Embedding 模型采用:

  • 双塔架构(Dual-Encoder):输入层将文本映射到统一的语义空间
  • 大规模对比学习(Contrastive Learning):通过正负样本对优化相似度空间
  • 多语言与长文本支持:支持中英双语,上下文窗口达 32k tokens
  • 向量维度与质量权衡:Qwen3-Embedding 输出 1024 维向量,兼顾精度与计算效率

Embedding 模型的优势:

  • 支持对任意长度文本编码(分块后进行平均池化)
  • 向量可直接用于相似性搜索、聚类、分类任务
  • 与向量数据库(Milvus、Weaviate、Pinecone)无缝集成
  • 为 RAG(检索增强生成)系统奠定基础

二、应用场景

文本向量化模型可应用于:

  • 语义搜索:用户查询与文档库进行相似度匹配,排序候选结果
  • 检索增强生成(RAG):在生成回答前从知识库检索相关文档
  • 推荐系统:基于用户兴趣向量,推荐相似的内容或商品
  • 文本聚类与分类:无监督或半监督地组织和标注文本
  • 重复检测:识别近似重复的用户提交、新闻稿或学术论文
  • 意图识别:微调向量模型快速识别用户意图(如情绪分析)

三、部署指南与示例

本指南将指导您如何在不同芯片架构的算力实例上部署文本 Embedding 模型。我们将以 Qwen3-Embedding-8B 为示例模型,重点介绍如何部署 Embedding 服务并与向量数据库集成。

框架概览

  • Hugging Face Transformers:基础框架,用于加载和推理 Embedding 模型
  • vLLM:支持 Embedding 模型推理的高性能引擎,提供 OpenAI 兼容的 API 接口
  • FastAPI:轻量级 Web 框架,快速构建自定义 Embedding API 服务
  • Chroma:轻量级向量数据库,开箱即用,适合快速原型开发
  • Milvus / Weaviate:高性能向量数据库,适合生产级别的大规模应用

一、沐曦 (MetaX) 部署指南

本章节适用于 曦云 C500 等沐曦系列算力卡。

1.1 环境准备

  • 算力型号:曦云 C500 (64GB)
  • 版本要求pytorch>=2.4

镜像选择

1.2 基础部署步骤

  1. 进入工作台:启动实例后,点击 JupyterLab 进入容器环境。

    进入容器

  2. 新建脚本:点击 "Notebook" 图标,新建一个 .ipynb 文件。

    新建Notebook

1.3 Embedding 推理示例

使用官方优化的代码,支持指令微调和L2归一化:

!pip install transformers
import torch
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel

#“句向量”绑定在最后一个有效 token上
def last_token_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
if left_padding:
return last_hidden_states[:, -1]
else:
sequence_lengths = attention_mask.sum(dim=1) - 1
batch_size = last_hidden_states.shape[0]
return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]


model_name = "/mnt/moark-models/Qwen3-Embedding-8B"
tokenizer = AutoTokenizer.from_pretrained(model_name, padding_side='left')
model = AutoModel.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="cuda")

texts = ["天空是蓝色的,天气晴朗。", "今天阳光灿烂,非常适合出游。"]

batch_dict = tokenizer(
texts,
padding=True,
truncation=True,
max_length=8192,
return_tensors="pt"
).to("cuda")

batch_dict.to(model.device)
outputs = model(**batch_dict)

embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
print(embeddings)

print(f"编码完成,生成 {len(texts)} 个向量")

二、燧原 (Enflame) 部署指南

本章节适用于 S60 等燧原系列算力卡。由于底层架构差异,需引入适配库。

2.1 环境准备

  • 算力型号:Enflame S60 (48GB)
  • 镜像选择vLLM / 0.11.0 / Python 3.12 / ef 1.7.0.14

镜像选择

2.2 Embedding 推理示例

!pip install transformers
import torch
import torch_gcu
from torch_gcu import transfer_to_gcu # CUDA代码一键迁移
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel

#“句向量”绑定在最后一个有效 token上
def last_token_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
if left_padding:
return last_hidden_states[:, -1]
else:
sequence_lengths = attention_mask.sum(dim=1) - 1
batch_size = last_hidden_states.shape[0]
return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]


model_name = "/mnt/moark-models/Qwen3-Embedding-8B"
tokenizer = AutoTokenizer.from_pretrained(model_name, padding_side='left')
model = AutoModel.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="cuda")

texts = ["天空是蓝色的,天气晴朗。", "今天阳光灿烂,非常适合出游。"]

batch_dict = tokenizer(
texts,
padding=True,
truncation=True,
max_length=8192,
return_tensors="pt"
).to("cuda")

batch_dict.to(model.device)
outputs = model(**batch_dict)

embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
print(embeddings)

print(f"编码完成,生成 {len(texts)} 个向量")

三、vLLM 高性能部署

vLLM 提供了对 Embedding 模型的优化支持,可直接生成 OpenAI 兼容的 API 接口,无需额外开发。

快速启动

# 使用 vLLM 启动 Embedding 服务(内置模型路径)
vllm serve /mnt/moark-models/Qwen3-Embedding-8B \
--port 8188 \
--task embed

vLLM 会自动处理批处理、GPU 优化和 API 兼容性,开箱即用。


五、本地访问与服务验证

请参考【SSH 隧道配置指南】建立安全连接。