Closed white-wolf-tech closed 1 year ago
我也有这个问题,感觉推理速度比chatglm2-6b慢了不少,v100的卡
我 2080ti,看了功耗,qwen是110w,chatgml可以到200w
您好,首先请您注意拉取最新的实现代码进行尝试哈(之前的代码在生成时有一个由于更新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以及优化,请您期待我们后续的更多发布哈。
Hi, @yangapku ,
最新的推理代码,A100跟chatglm v1速度差不太多,但是V100差不多慢了一倍
量化以后不应该更快吗,为什么反而慢了?
量化以后不应该更快吗,为什么反而慢了?
量化是一个时间换空间的过程,是最慢的,不是字面意义的量化,要是字面意义上的量化,性能下降会很多
@Coder-nlper 量化本质上不是使模型参数的精度变小吗,理论上对于显存来说占用变少,对于推理速度来说应该更快才对,这种是字面意义上的量化吗
用的最新的chat,没有使用flash-attn,速度还是17
硬件:A10 软件:pytoch 2.0.1 @yangapku
@Coder-nlper 量化本质上不是使模型参数的精度变小吗,理论上对于显存来说占用变少,对于推理速度来说应该更快才对,这种是字面意义上的量化吗
你可以看看transformers的8bit量化、Qlora相关论文了解下这些技术
@Coder-nlper 量化本质上不是使模型参数的精度变小吗,理论上对于显存来说占用变少,对于推理速度来说应该更快才对,这种是字面意义上的量化吗
你好,目前的较为流行的量化手段(例如我们目前用的bnb)主要目标还是在减少显存占用上,而在量化模型中,一方面相较于原始模型有量化/反量化/多次量化/分组等操作,另一方面底层针对8bit/4bit算子的优化没有对16bit好(有时是高精度数值模拟低精度计算),此外为了保证精度不下降太多,大多数量化方案也不是全参数量化,中间也有精度转换的开销。因此量化后推理速度变慢是目前符合预期的。如果感兴趣的话,可以了解一下huggingface的这篇文章 。
我们目前也在针对推理速度做优化(量化和非量化层面都在优化),预计很快会更新,速度会有大幅提升,感谢关注。
在单张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左右
在单张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了
请教下,V100运行qwen-72B,config.json里面设置的fp16为True时,会报错RuntimeError: FlashAttention only supports Ampere GPUs or newer.
仅在将fp32设置为True时才能正确运行,但是使用fp32推理速度巨慢, 输入输出均在20tokens左右,耗时达到了惊人的20分钟;
请教下,V100运行qwen-72B,config.json里面设置的fp16为True时,会报错
RuntimeError: FlashAttention only supports Ampere GPUs or newer.
仅在将fp32设置为True时才能正确运行,但是使用fp32推理速度巨慢, 输入输出均在20tokens左右,耗时达到了惊人的20分钟;
- 是否可以在V100使用fp16模式,应该如何配置及修改?
- 推理过程中发现仅有第一张卡进行了运算,是否可以使用多卡推理进行加速,需要如何配置及修改?
支持fp16或fp16,如果V100不支持的话,那就得上A100了
是否已有关于该错误的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
备注 | Anything else?
No response