vllm [Bug]:squeezeLLM与稀疏矩阵一起使用时无法正常工作,

owfi6suc  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(22)

描述

使用squeezeLLM 4bit量化我的模型。似乎有一个bug。我遵循squeezeLLM步骤:

python chunk_models.py --model [MODEL_PATH] --output [MODEL_CHUNKS_PATH] --model_type llama
python chunk_models.py --model [GRADIENT_PATH] --output [GRADIENT_CHUNKS_PATH] --model_type llama
python generate_outlier_config.py --model [MODEL_CHUNKS_PATH] --range [RANGE] --output [OUTLIERS_CONFIG_PATH]
python nuq.py --bit 4 --model_type llama --model [MODEL_CHUNKS_PATH] --gradient [GRADIENT_CHUNKS_PATH] --output [LUT_PATH]
python pack.py --model [MODEL_PATH] --wbits 4 --folder [LUT_PATH] --save [PACKED_CKPT_PATH] --include_sparse --balance

然后,我更改了llama.py中的代码,以便在加载权重时跳过某些键。但是,我仍然遇到了错误。

解决方案

根据错误信息,问题出在llama.py文件的第407行。在这里,param = params_dict[name]引发了一个KeyError,因为字典中找不到键'model.layers.0.self_attn.qkv_proj.rows'。为了解决这个问题,你可以尝试以下方法:

  1. 确保你的模型文件中包含'model.layers.0.self_attn.qkv_proj.rows'这个键。如果没有,你需要检查模型文件并添加相应的键值对。

  2. 如果你确定模型文件中包含这个键,那么可能是在加载模型时出现了问题。你可以尝试使用try-except语句来捕获KeyError,并在出现错误时跳过该键。例如:

for name in params_dict:
    try:
        param = params_dict[name]
        # 处理param的代码
    except KeyError:
        print(f"KeyError: '{name}' not found in params_dict")
        continue

这样,当遇到不存在的键时,程序将打印一条错误消息并继续处理下一个键,而不是抛出异常并终止运行。
[rank0]: 索引错误:维度超出范围(预期在[-1, 0]范围内,但得到的是1)

6xfqseft

6xfqseft1#

Hi @RyanWMHI,

squeezeLLM在vLLM中不是一个常用的量化后端,我们目前通常推荐使用GPTQ或AWQ。我的假设是我们不会支持任何高级配置,例如稀疏存储。

相关问题