QwenLM / Qwen

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

[BUG] <title>72b_int8模型加载问题 #1020

Closed bimver closed 6 months ago

bimver commented 8 months ago

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

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

当前行为 | Current Behavior

下载了千问72B_int8量化模型,在使用AutoModelForCausallM.from_pretrained读取模型的时候就卡住了,也不报错,我自己往代码里一步一步调发现是停留在modeling_utils.py文件的3125行,model.apply(mode._initialize_weights),看起来是模型参数初始化的步骤,但是这个地方等接近半个小时也不见动,请问这是什么问题?

期望行为 | Expected Behavior

正确加载模型文件

复现方法 | Steps To Reproduce

No response

运行环境 | Environment

- OS:Ubuntu 22.04
- Python:3.8
- Transformers:4.31.0
- PyTorch:2.0.0
- CUDA (`python -c 'import torch; print(torch.version.cuda)'`):11.7

备注 | Anything else?

n/a

jklj077 commented 8 months ago

Transformers:4.31.0

至少4.32.0

bimver commented 8 months ago

Transformers:4.31.0

至少4.32.0

谢谢,已经安上后解决了。还有个问题请教一下,我现在两张a100 40G的显卡,读取72b_int8模型后显示显存不够,我的device_map设置的auto,但是我发现它好像只调用了一张卡,显示我卡1的显存不足了。这个是没调用到两张卡还是说两张A100 40G的跑步起来72B_int8模型呢?

brisker commented 7 months ago

@jklj077 请问文档里说的的qwen的int8的性能,指的是只量化权重的int8性能,还是说权重和激活值全都量化成int8的性能?

jklj077 commented 6 months ago

transformers多卡auto加载(基于accelerate)可能遇到实际分配不均衡的问题,这是符合预期的,一般不会相差太大。特别是auto-gptq的量化方案可能导致accelerate估算不准确,建议考虑手动分配(参考https://github.com/QwenLM/Qwen/blob/aa862758f322a9b6d9d79b252360e4b2a313313e/utils.py#L6)。如果手动分配后仍遇到显存不足问题,则可确认。transformers多卡推理基于model parallel技术,实际效率很低;有推理部署需求的建议使用vllm配合tensor parallel。

jklj077 commented 6 months ago

Qwen(1.0)公开的预量化模型采用GPTQ方案。对于int8模型,kernel实现应为w8a16 (8bit weights, fp16 scale, fp16 activation)。