我使用 HuggingFace 的 all-MiniLM-L6-v2 模型计算文本段落的向量嵌入。由于免费端点的响应速度并不总是足够,而且我需要能够扩展,因此我将模型部署到 HuggingFace Inference Endpoints。首先,我选择了最便宜的端点。
令我惊讶的是,计算 35 个嵌入的单个请求花费了 7 秒以上(根据 HuggingFace 的日志)。根据 HuggingFace 支持的建议,我尝试升级到 2 个 CPU,结果变得更慢(说实话,我不确定他们为什么认为单个请求会从另一个 CPU 中受益)。接下来,我尝试了 GPU。现在请求需要 2 秒。我一定错过了一些东西,因为似乎不可能每月支付 400 美元以上的费用来在 2 秒内处理一个请求,而不是每秒处理数千个请求。
我想我一定错过了一些东西,但我不知道它可能是什么。
我使用以下格式的命令提交请求:
curl https://xxxxxxxxxxxxxx.us-east-1.aws.endpoints.huggingface.cloud -X POST -d '{"inputs": ["My paragraphs are of about 200 words on average", "Another paragraph", etc.]}' -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx' -H 'Content-Type: application/json'
我可能会错过什么?附注对于 GPU 来说,预热后确实会好很多,达到 100 毫秒。然而,这个特定模型
from sentence_transformers import SentenceTransformer
import time
sentences = ["This is an example sentence each sentence is converted"] * 10
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2', device='cpu')
for i in range(100):
start_time = time.time()
embeddings = model.encode(sentences)
end = time.time()
print("Time taken: ", end - start_time)
并运行它:
taskset -c 0 python soquestion.py
在这么长时间内运行 10 个句子嵌入:
...
Time taken: 0.035448551177978516
Time taken: 0.035162925720214844
Time taken: 0.03574204444885254
Time taken: 0.035799264907836914
Time taken: 0.03513455390930176
Time taken: 0.03690838813781738
Time taken: 0.035082340240478516
Time taken: 0.035216331481933594
Time taken: 0.0348513126373291
...
但是如果我使用所有核心:
...
Time taken: 0.016519546508789062
Time taken: 0.01624751091003418
Time taken: 0.017212390899658203
Time taken: 0.016582727432250977
Time taken: 0.019397735595703125
Time taken: 0.016611814498901367
Time taken: 0.017941713333129883
Time taken: 0.01743769645690918
...
所以我想说核心数量会影响速度。我使用的是 AMD Ryzen 5 5000,因此可能会或可能不会比 Hugging Face 提供的 Intel Xeon Ice Lake
CPU 慢很多(它们并没有真正告诉您型号,而且性能差异很大......)。但是,我可以说您的实例内存不足,因为定价的
doc 指出:
aws small $0.06 1 2GB Intel Xeon - Ice Lake
aws medium $0.12 2 4GB Intel Xeon - Ice Lake
aws large $0.24 4 8GB Intel Xeon - Ice Lake
aws xlarge $0.48 8 16GB Intel Xeon - Ice Lake
azure small $0.06 1 2GB Intel Xeon
azure medium $0.12 2 4GB Intel Xeon
azure large $0.24 4 8GB Intel Xeon
azure xlarge $0.48 8 16GB Intel Xeon
您提到使用 1 到 2 个 vCPU,配有 2-4 GB RAM。我通过以下方式调查了此过程使用了多少 RAM:
/usr/bin/time -v python soquestion.py |& grep resident
Maximum resident set size (kbytes): 981724
Average resident set size (kbytes): 0
即 1 GB。与 CPU 实例相比,很多。与 GPU 实例相比,非常少。我建议您考虑升级您的实例虽然我遇到过这个问题即使使用 4 GB RAM 也很难解决。