下载模型#
text
pip install -U huggingface_hub
以这个 bge-m3 为例: save_dir 就是保存的绝对路径,根据需要修改
text
from huggingface_hub import snapshot_download
import os
# 1. 设置下载目录 (和你 docker-compose 里的挂载一致)
save_dir = "/root/tei/data/bge-m3"
# 2. 确保目录存在
os.makedirs(save_dir, exist_ok=True)
print(f"🚀 开始下载 BAAI/bge-m3 到 {save_dir} ...")
# 3. 开始下载 (相当于命令行的 download)
snapshot_download(
repo_id="BAAI/bge-m3",
local_dir=save_dir,
local_dir_use_symlinks=False, # 关键:下载真实文件,不要软链接
resume_download=True # 支持断点续传
)
print("✅ 下载完成!")
tei 部署#
text
version: "3.8"
services:
tei:
container_name: tei-embedding
image: ghcr.io/huggingface/text-embeddings-inference:cpu-1.5
restart: always
ports:
- "8080:80"
volumes:
# 👇 【修改1】把宿主机下载好的具体模型目录,挂载到容器的 /data/bge-m3
- ./data/bge-m3:/data/bge-m3
shm_size: 1g
environment:
# 保持这些清空操作,防止网络环境干扰
- http_proxy=
- https_proxy=
- HTTP_PROXY=
- HTTPS_PROXY=
- no_proxy=*
command:
# 👇 【修改2】这里改成容器内的路径,TEI 看到路径就会启动“离线模式”
- --model-id
- /data/bge-m3
- --pooling
- cls
- --max-client-batch-size
- "32"
- --dtype
- float32
测试#
部署测试#
text
curl 127.0.0.1:8080/embed \
-X POST \
-d '{"inputs": "机器真不错"}' \
-H 'Content-Type: application/json'
你会看到屏幕上瞬间刷出一屏密密麻麻的浮点数:[[0.0123, -0.0456, ...]]。
- 只要看到这一屏数字,说明 TEI 活了,模型加载成功,推理功能正常。
- 如果报错
Connection refused,说明容器没起来或者端口没对上。
相似度测试#
text
pip install numpy
text
import requests
import numpy as np
# TEI 地址
API_URL = "http://127.0.0.1:8080/embed"
def get_embeddings(texts):
"""从 TEI 获取向量"""
response = requests.post(API_URL, json={"inputs": texts})
return np.array(response.json())
def cosine_similarity(v1, v2):
"""计算两个向量的余弦相似度"""
# 公式:(A . B) / (|A| * |B|)
dot_product = np.dot(v1, v2)
norm_v1 = np.linalg.norm(v1)
norm_v2 = np.linalg.norm(v2)
return dot_product / (norm_v1 * norm_v2)
def run_test():
# 准备测试数据:两句意思相近,一句完全无关
sentences = [
"那个男人正在吃苹果", # 句子 A
"有个男的在吃水果", # 句子 B (应该和 A 很像)
"今天天气真不错", # 句子 C (完全不搭边)
]
print("🤖 正在让模型理解句意...")
vectors = get_embeddings(sentences)
vec_a = vectors[0]
vec_b = vectors[1]
vec_c = vectors[2]
# 计算相似度
score_ab = cosine_similarity(vec_a, vec_b)
score_ac = cosine_similarity(vec_a, vec_c)
print("\n--------- 测试结果 ---------")
print(f"句子 A: {sentences[0]}")
print(f"句子 B: {sentences[1]}")
print(f"句子 C: {sentences[2]}")
print("---------------------------")
print(f"✅ A 和 B 的相似度 (男人吃苹果 vs 吃水果): {score_ab:.4f}")
print(f"❌ A 和 C 的相似度 (男人吃苹果 vs 天气): {score_ac:.4f}")
if score_ab > score_ac:
print("\n🎉 成功!模型通过了语义测试!")
else:
print("\n⚠️ 失败!模型好像分不清语义。")
if __name__ == "__main__":
run_test()
运行结果:
text
🤖 正在让模型理解句意...
--------- 测试结果 ---------
句子 A: 那个男人正在吃苹果
句子 B: 有个男的在吃水果
句子 C: 今天天气真不错
---------------------------
✅ A 和 B 的相似度 (男人吃苹果 vs 吃水果): 0.8675
❌ A 和 C 的相似度 (男人吃苹果 vs 天气): 0.4570
🎉 成功!模型通过了语义测试!
评论
还没有评论,来发第一个吧