QwenLM / Qwen

The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud.
Apache License 2.0
13.27k stars 1.08k forks source link

[BUG] <title>与chatglm2-6b推理速度对比 #175

Closed white-wolf-tech closed 1 year ago

white-wolf-tech commented 1 year ago

是否已有关于该错误的issue或讨论? | Is there an existing issue / discussion for this?

该问题是否在FAQ中有解答? | Is there an existing answer for this in FAQ?

当前行为 | Current Behavior

硬件环境:A10 软件: torch 2.0.1
transformers 4.31.0

chatglm2-6B的推理速度大约 32tokens/s qwen7B的仅仅只有 17tokens/s

对比之前的baichuan-7B,它的推理速度有25tokens/s

按道理qwen 7B启用了flashattn,【chatglm2-6B也用了原生torch实现的flashattn】,qwen-7b的推理速度应该要超过baichuan-7B的吧,为什么实验下来,速度这么低呢?是哪里有问题?

期望行为 | Expected Behavior

No response

复现方法 | Steps To Reproduce

No response

运行环境 | Environment

- OS:ubuntu20.04
- Python:3.9
- Transformers:4.31.0
- PyTorch:2.0.1
- CUDA (`python -c 'import torch; print(torch.version.cuda)'`):11.8

备注 | Anything else?

No response

bh4ffu commented 1 year ago

我也有这个问题,感觉推理速度比chatglm2-6b慢了不少,v100的卡

dogvane commented 1 year ago

我 2080ti,看了功耗,qwen是110w,chatgml可以到200w

yangapku commented 1 year ago

您好,首先请您注意拉取最新的实现代码进行尝试哈(之前的代码在生成时有一个由于更新rotary emb cache的操作过于频繁,影响生成效率的bug,现已修复)。

我们参照chatglm2-6b在readme中给出的测速setting(生成长度2048——context长度为1,测试硬件为 A100-SXM4-80G,软件环境为 PyTorch 2.0.1,cuda版本11.8,计算生成这2k序列的平均速度),也大概进行了一下测试,结果如下哈(测试脚本

量化等级 推理速度 (字符/秒)
BF16(无量化) 30.06
INT8(bnb) 7.94
NF4(bnb) 21.43
量化等级 推理速度 (字符/秒)
BF16(无量化) 27.55
INT8(bnb) 7.86
NF4(bnb) 20.37

(目前的bnb量化对速度影响较大,我们也在接入更多的量化方案中)

由于我们目前的模型仍然使用基本的Multi-Head Attention而非Multi-Query Attention(更快的速度和更小的显存占用,但是一定程度影响模型效果),所以在速度上确实不占优势,尤其在显存较紧张(24G以下)的情况下(无法allocate更多gpu memory作为cache)。另外,我们的模型略大于chatglm2-6b,这也是一个影响因素。

我们也在尽快对千问模型进行速度profile以及优化,请您期待我们后续的更多发布哈。

Nipi64310 commented 1 year ago

Hi, @yangapku ,

最新的推理代码,A100跟chatglm v1速度差不太多,但是V100差不多慢了一倍

Lufffya commented 1 year ago

量化以后不应该更快吗,为什么反而慢了?

white-wolf-tech commented 1 year ago

量化以后不应该更快吗,为什么反而慢了?

量化是一个时间换空间的过程,是最慢的,不是字面意义的量化,要是字面意义上的量化,性能下降会很多

Lufffya commented 1 year ago

@Coder-nlper 量化本质上不是使模型参数的精度变小吗,理论上对于显存来说占用变少,对于推理速度来说应该更快才对,这种是字面意义上的量化吗

white-wolf-tech commented 1 year ago

用的最新的chat,没有使用flash-attn,速度还是17

image

硬件:A10 软件:pytoch 2.0.1 @yangapku

white-wolf-tech commented 1 year ago

@Coder-nlper 量化本质上不是使模型参数的精度变小吗,理论上对于显存来说占用变少,对于推理速度来说应该更快才对,这种是字面意义上的量化吗

你可以看看transformers的8bit量化、Qlora相关论文了解下这些技术

geekinglcq commented 1 year ago

@Coder-nlper 量化本质上不是使模型参数的精度变小吗,理论上对于显存来说占用变少,对于推理速度来说应该更快才对,这种是字面意义上的量化吗

你好,目前的较为流行的量化手段(例如我们目前用的bnb)主要目标还是在减少显存占用上,而在量化模型中,一方面相较于原始模型有量化/反量化/多次量化/分组等操作,另一方面底层针对8bit/4bit算子的优化没有对16bit好(有时是高精度数值模拟低精度计算),此外为了保证精度不下降太多,大多数量化方案也不是全参数量化,中间也有精度转换的开销。因此量化后推理速度变慢是目前符合预期的。如果感兴趣的话,可以了解一下huggingface的这篇文章

我们目前也在针对推理速度做优化(量化和非量化层面都在优化),预计很快会更新,速度会有大幅提升,感谢关注。

goog commented 1 year ago

cott.md inference sloww on 2 * 3090

lissettecarlr commented 12 months ago

在单张4090-24G下qwen的结果: Average generate speed (tokens/s): 33.90051420545464 GPU Memory cost: 22.402989864349365GB Experiment setting: seed = 1024 max_experiment_times = 1 context_length_per_experiment = 1 generate_length_per_experiment = 8192 use_flash_attn = True quant_type = bf16

比chatglm2-6b慢了10左右

white-wolf-tech commented 11 months ago

在单张4090-24G下qwen的结果: Average generate speed (tokens/s): 33.90051420545464 GPU Memory cost: 22.402989864349365GB Experiment setting: seed = 1024 max_experiment_times = 1 context_length_per_experiment = 1 generate_length_per_experiment = 8192 use_flash_attn = True quant_type = bf16

比chatglm2-6b慢了10左右

用vllm吧,感觉速度提升很多,A10双卡,张量并行=2,46~50tokens/s,毕竟千问模型,参数接近8B了

Jaren1907 commented 9 months ago

请教下,V100运行qwen-72B,config.json里面设置的fp16为True时,会报错RuntimeError: FlashAttention only supports Ampere GPUs or newer. 仅在将fp32设置为True时才能正确运行,但是使用fp32推理速度巨慢, 输入输出均在20tokens左右,耗时达到了惊人的20分钟;

  1. 是否可以在V100使用fp16模式,应该如何配置及修改?
  2. 推理过程中发现仅有第一张卡进行了运算,是否可以使用多卡推理进行加速,需要如何配置及修改?
haiduo commented 8 months ago

请教下,V100运行qwen-72B,config.json里面设置的fp16为True时,会报错RuntimeError: FlashAttention only supports Ampere GPUs or newer. 仅在将fp32设置为True时才能正确运行,但是使用fp32推理速度巨慢, 输入输出均在20tokens左右,耗时达到了惊人的20分钟;

  1. 是否可以在V100使用fp16模式,应该如何配置及修改?
  2. 推理过程中发现仅有第一张卡进行了运算,是否可以使用多卡推理进行加速,需要如何配置及修改?

支持fp16或fp16,如果V100不支持的话,那就得上A100了