[性能]:为什么在基准吞吐量测试中,HF比VLLM更好?

0h4hbjxa  于 3个月前  发布在  其他
关注(0)|答案(4)|浏览(87)

当我在H800上运行基准测试时,结果令人困惑。为什么hf比vllm更好?当我运行脚本时有什么问题吗?

python benchmark_throughput.py --input-len 128 --model /home/jiekong/.cache/modelscope/hub/AI-ModelScope/opt-125 --output-len 128 --max-num-batched-tokens 2048 --trust-remote-code

吞吐量:59.50请求/秒,15231.62令牌/秒

python benchmark_throughput.py --input-len 128 --model /home/jiekong/.cache/modelscope/hub/AI-ModelScope/opt-125 --output-len 128 --backend hf --hf-max-batch-size 256

吞吐量:108.34请求/秒,27736.31令牌/秒

bvk5enib

bvk5enib1#

你好,yuki252111。当我尝试使用更现实的LLM尺寸$x_1m_0n_1x$时,我发现vLLM大约是2倍快。我使用了RTX A6000 GPU。

vLLM:

$x_1a_0b_1x$

HF:

$x_1a_1b_1x$

z31licg0

z31licg02#

我在这里也有同样的问题,你有什么更新吗?

py49o6xq

py49o6xq3#

@AlexBlack2202
我从源代码中分析了这个问题,以下是我的个人推测:

  1. 首先,vllm的两个最著名的特性是:分页注意力和连续批处理
  2. 根据基准脚本,连续批处理的有效性太弱(因为batch_size太大)
    a. vllm实际上将请求添加到队列中,然后每次批处理256个序列
    b. hf更直接,for循环每次批处理256个序列
  3. 分页注意力的优势在于GPU内存的高利用率,可以通过具有相对较大参数的模型来验证这一点
    所以我做了两个实验。

实验1 batch_size=20

这个实验将使连续批处理更加有效
hf Throughput: 12.51 requests/s, 3202.18 tokens/s
vllm Throughput: 29.34 requests/s, 7510.30 tokens/s

实验2 llama-7b-chat-hf batch_size=20

hf Throughput: 2.77 requests/s, 708.53 tokens/s
vllm Throughput: 12.93 requests/s, 3310.62 tokens/s
感谢 @mgoin
这个结果似乎有道理...

sd2nnvve

sd2nnvve4#

@AlexBlack2202 我从源代码中分析了它,以下是我的个人推测:

  1. 首先,vllm的两个最著名的特性是:分页注意力和连续批处理
  2. 根据基准脚本,连续批处理的有效性太弱(因为batch_size太大)
    a. vllm实际上将请求添加到队列中,然后一次批处理256个序列
    b. hf更直接,for循环每次批处理256个序列
  3. 分页注意力的优势是GPU内存的高利用率,可以通过具有相对较大参数的模型来验证
    所以我做了两个实验。

实验1 batch_size=20

这个实验将使连续批处理更有效 hf Throughput: 12.51 requests/s, 3202.18 tokens/svllm Throughput: 29.34 requests/s, 7510.30 tokens/s

实验2 llama-7b-chat-hf batch_size=20

hf Throughput: 2.77 requests/s, 708.53 tokens/svllm Throughput: 12.93 requests/s, 3310.62 tokens/s 感谢 @mgoin
这个结果似乎有道理...
非常感谢

相关问题