HuggingFace 推理端点性能极慢

问题描述 投票:0回答:1

我使用 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 毫秒。然而,这个特定模型

在 A100 上每秒实现 14,200 次嵌入。当然,我运行的不是 A100,但每秒 350 次嵌入仍然太慢了。

huggingface-transformers word-embedding huggingface
1个回答
0
投票
测试我使用的单CPU核心效率:

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 也很难解决。

© www.soinside.com 2019 - 2024. All rights reserved.