处理量化模型的时候会出现这种错误,无论是PTQ还是QAT

以下是我的报错信息

Traceback (most recent call last):
File "/root/autodl-tmp/Qwen1.5/examples/sft/finetune.py", line 378, in
train()
File "/root/autodl-tmp/Qwen1.5/examples/sft/finetune.py", line 305, in train
model = AutoModelForCausalLM.from_pretrained(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/transformers/models/auto/auto_factory.py", line 563, in from_pretrained
return model_class.from_pretrained(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/transformers/modeling_utils.py", line 3160, in from_pretrained
hf_quantizer = AutoHfQuantizer.from_config(config.quantization_config, pre_quantized=pre_quantized)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/transformers/quantizers/auto.py", line 124, in from_config
return target_cls(quantization_config, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/transformers/quantizers/quantizer_gptq.py", line 47, in init
from optimum.gptq import GPTQQuantizer
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/optimum/gptq/init.py", line 15, in
from .quantizer import GPTQQuantizer, load_quantized_model
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/optimum/gptq/quantizer.py", line 43, in
from auto_gptq import exllama_set_max_input_length
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/auto_gptq/init.py", line 4, in
from .utils.peft_utils import get_gptq_peft_model
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/auto_gptq/utils/peft_utils.py", line 20, in
from ..nn_modules.qlinear.qlinear_exllama import QuantLinear as QuantLinearExllama
File "/root/miniconda3/envs/llama/lib/python3.11/site-packages/auto_gptq/nn_modules/qlinear/qlinear_exllama.py", line 14, in
from exllama_kernels import make_q4, q4_matmul
ImportError: /root/miniconda3/envs/llama/lib/python3.11/site-packages/exllama_kernels.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN3c107WarningC1ENS_7variantIJNS0_11UserWarningENS0_18DeprecationWarningEEEERKNS_14SourceLocationESsb

展开
收起
unqnp5krxt36e 2024-05-13 16:42:51 101 分享 版权
阿里云 AI 助理回答

根据您提供的报错信息,问题的核心是ImportError,具体表现为exllama_kernels模块中存在未定义的符号_ZN3c107WarningC1ENS_7variantIJNS0_11UserWarningENS0_18DeprecationWarningEEEERKNS_14SourceLocationESsb。这通常与动态链接库(如.so文件)的依赖关系或版本不匹配有关。以下是针对该问题的详细分析和解决方案:


问题分析

  1. 错误来源

    • 报错信息表明exllama_kernels.cpython-311-x86_64-linux-gnu.so文件中缺少符号_ZN3c107WarningC1ENS_7variantIJNS0_11UserWarningENS0_18DeprecationWarningEEEERKNS_14SourceLocationESsb
    • 该符号可能属于某个依赖库(如torchc10或其他相关库),但当前环境中未正确加载或版本不匹配。
  2. 可能原因

    • 依赖库版本不兼容exllama_kernels依赖的库(如PyTorchc10)版本与当前环境中的版本不一致。
    • 动态链接库缺失:某些必要的动态链接库未正确安装或路径未配置。
    • 编译问题exllama_kernels模块在编译时未正确链接所需的依赖库。

解决方案

步骤 1:检查依赖库版本

  1. 确认当前环境中PyTorchc10的版本是否与exllama_kernels的要求一致。

    python -c "import torch; print(torch.__version__)"
    

    如果版本不匹配,请升级或降级PyTorch至兼容版本。例如:

    pip install torch==<compatible_version>
    
  2. 检查exllama_kernels的文档或源码,确认其对PyTorchc10的具体版本要求。

步骤 2:验证动态链接库

  1. 使用ldd命令检查exllama_kernels.cpython-311-x86_64-linux-gnu.so的依赖库是否完整:

    ldd /root/miniconda3/envs/llama/lib/python3.11/site-packages/exllama_kernels.cpython-311-x86_64-linux-gnu.so
    

    如果发现某些依赖库未找到(显示not found),请安装缺失的库。例如:

    sudo apt-get install libxxx-dev
    
  2. 确保LD_LIBRARY_PATH环境变量包含所有必要的动态链接库路径。例如:

    export LD_LIBRARY_PATH=/path/to/missing/libs:$LD_LIBRARY_PATH
    

步骤 3:重新编译exllama_kernels

如果上述方法无效,可能是exllama_kernels模块在编译时未正确链接依赖库。尝试重新编译: 1. 克隆exllama_kernels的源码仓库(如果有)。 2. 根据官方文档或README文件,确保安装所有依赖项。 3. 执行编译命令。例如:

python setup.py build_ext --inplace

步骤 4:检查Python环境

  1. 确认当前使用的Python版本与exllama_kernels的要求一致。例如,exllama_kernels可能仅支持特定版本的Python(如3.9或3.10)。
  2. 如果使用了conda环境,请确保环境已正确激活,并且所有依赖项均已安装。

步骤 5:回退到稳定版本

如果问题仍未解决,可以尝试回退到exllama_kernels的稳定版本。例如:

pip install exllama_kernels==<stable_version>

重要提醒

  • 备份环境:在修改依赖库或重新编译之前,建议备份当前环境,以防止进一步破坏。
  • 检查日志:如果问题仍然存在,请仔细检查完整的错误日志,寻找其他潜在的依赖问题。
  • 联系开发者:如果上述方法均无效,建议联系exllama_kernels的开发者或社区,提供详细的错误信息和环境配置。

通过以上步骤,您应该能够定位并解决exllama_kernels模块的undefined symbol问题。如果仍有疑问,请提供更多上下文信息(如完整的环境配置和依赖列表),以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

大数据领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。

还有其他疑问?
咨询AI助理