快轉到主要內容

本機架設自己的 embedding 服務

HuggingFace 上有很多 Transformer / Encoder 類的 embedding model, 至少有三種方法可以下載到本機做運算

  1. SentenceTransformer
  2. Ollama
  3. llama.cpp

假設模型有在 HuggingFace 上,而且有 gguf 格式,這邊以 https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1 為例

SentenceTransformer #

SentenceTransformer 是一個 python 函式庫,嚴格來說要搭配像 fastapi + uvicorn 才是真正的服務。

SentenceTransformer 安裝跟使用很簡單

# 安裝
$ pip install sentence-transformers

在 python 裡使用

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("mixedbread-ai/mxbai-embed-large-v1")

# sentences 可以是字串的 list 或單一個字串
sentences = [
    "Represent this sentence for searching relevant passages: What is AI?",
    "Apples and cookies are my favorite."
]

return model.encode(sentences).tolist()

Ollama #

我之前介紹過 用 Ollama 跑 LLM 語言模型,包括怎麼安裝等等

Ollama 也可以跑 embedding model – 可利用 https://ollama.com/search?c=embedding 看官方或是開發者有沒有放上去

如果有的話,以 mxbai-embed-large 為例,架設 API 服務只要

$ ollama pull mxbai-embed-large

# 不需要加模型名字
$ ollama serve

在 python 裡使用(要先 pip install ollama

import ollama

model_name = "mxbai-embed-large"
sentence = "AI is artificial intelligence"

# 只能一個字串
return ollama.embeddings(model=model_name, prompt=sentence)["embedding"]

也可以直接用 HTTP API,不需用 python 函式庫

預測的 throughput, 在我的 Mac 上 Ollama 比 SentenceTransformer 快

llama.cpp #

llama.cpp 是用 C/C++ 寫的 transformer 模型的預測函式庫

而 Ollama 其實是把 llama.cpp 包一層起來,速度上在某些情況下差不多,不過如果想要直接用 llama.cpp 的話:

安裝 - 直接從 github clone 原始碼下來,然後在本機編譯 https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md

模型下載 - 可以去 HuggingFace 把模型的 gguf 下載下來,例如這裡

編譯完後,原目錄會有很多可執行檔,用來架設服務:

$ ./llama-server -m /path/to/gguf/mxbai-embed-large-v1-f16.gguf --embedding

就可以用 HTTP API 獲得 embedding,例如在 python 用 requests 函式庫

import requests

sentence = "AI is artificial intelligence"

# 也是只能一個字串
r = requests.post("http://localhost:8080/embedding",
                  json={"content": sentence})
try:
    return r.json()["embedding"]

若您覺得有趣, 請 追蹤我的Facebook 或  Linkedin, 讓你獲得更多資訊!