单机双卡部署qwen-7b执行web_demo.py的时候,一提问就提示错误

环境是Ubuntu20.04
双卡 4090

https://github.com/QwenLM/Qwen-7B.git
拉的代码,安装了依赖后,下载的qwen-7b-chat和qwen-14b-chat后,运行web_demo.py也成功,只要一输入就提示报错

probability tensor contains either `inf`, `nan` or element < 0

微信图片_20240402144458.png

展开
收起
xsg5886779-25307 2024-04-02 14:46:32 422 分享 版权
阿里云 AI 助理回答

根据您提供的信息,您在运行 web_demo.py 时遇到报错,提示 probability tensor contains either 'inf', 'nan' or element 0。这通常与模型推理过程中出现数值不稳定或输入数据异常有关。以下是针对该问题的详细分析和解决步骤:


1. 报错原因分析

  • 数值不稳定
    模型在推理过程中生成的概率分布中出现了 inf(无穷大)、nan(非数字)或零值。这可能是由于以下原因:

    • 输入数据格式不正确。
    • 模型权重加载错误或损坏。
    • 硬件环境(如 GPU 驱动、CUDA 版本)配置不当导致计算异常。
  • 硬件相关问题
    您使用的是双卡 4090,可能存在多 GPU 环境下的设备分配问题。如果未正确设置 GPU 的可见性或资源分配,可能导致计算结果异常。

  • 依赖版本冲突
    如果安装的依赖库(如 PyTorch、Transformers 等)版本与代码要求不匹配,也可能引发此类问题。


2. 解决步骤

2.1 检查输入数据

  • 确保输入到模型的数据是有效的文本字符串,且未包含特殊字符或空值。
  • 在代码中添加调试日志,打印输入数据和预处理后的张量,确保数据格式正确。
print("Input text:", input_text)
print("Tokenized input:", tokenizer(input_text, return_tensors="pt"))

2.2 验证模型权重

  • 确保下载的 qwen-7b-chatqwen-14b-chat 模型权重完整且未损坏。
  • 删除现有模型文件并重新下载,确保下载过程未中断或出错。
rm -rf qwen-7b-chat qwen-14b-chat
git clone https://github.com/QwenLM/Qwen-7B.git

2.3 检查硬件环境

  • GPU 驱动和 CUDA 配置
    确保您的系统已正确安装 NVIDIA 驱动和 CUDA 工具包,并与 PyTorch 版本兼容。可以通过以下命令检查:

    nvidia-smi
    python -c "import torch; print(torch.cuda.is_available())"
    

    如果 torch.cuda.is_available() 返回 False,说明 CUDA 配置有问题,请参考知识库文档中的步骤重新安装驱动和 CUDA。

  • 多 GPU 设置
    如果使用双卡 4090,建议明确指定使用的 GPU 设备。例如,在运行脚本前设置环境变量:

    export CUDA_VISIBLE_DEVICES=0,1
    

    或者在代码中通过 torch.cuda.set_device() 明确指定设备。

2.4 检查依赖版本

  • 确保安装的依赖库版本与项目要求一致。可以参考项目的 requirements.txt 文件重新安装依赖:

    pip install -r requirements.txt
    
  • 如果未提供 requirements.txt,请确保以下关键库的版本兼容:

    • PyTorch >= 1.12
    • Transformers >= 4.26
    • CUDA Toolkit >= 11.8

2.5 调整推理参数

  • 在推理过程中,尝试调整生成参数以避免数值不稳定。例如,降低 temperature 或增加 top_p 值:

    outputs = model.generate(
      input_ids,
      max_length=50,
      temperature=0.7,  # 降低温度值
      top_p=0.9,        # 增加 top-p 值
      do_sample=True
    )
    

2.6 启用混合精度训练

  • 如果硬件支持,启用混合精度(FP16)可以提高计算效率并减少数值溢出的风险。参考知识库文档中的配置方法,设置 fp16 参数:

    from torch.cuda.amp import autocast
    
    with autocast():
      outputs = model.generate(input_ids)
    

3. 其他注意事项

  • 日志调试
    在代码中添加详细的日志输出,定位具体报错位置。例如,打印模型输出的 logits 和概率分布:

    print("Logits:", outputs.logits)
    print("Probabilities:", torch.softmax(outputs.logits, dim=-1))
    
  • 单卡测试
    如果问题仍未解决,建议先在单卡环境下运行,排除多 GPU 配置问题。


4. 总结

通过上述步骤,您可以逐步排查并解决 probability tensor contains either 'inf', 'nan' or element 0 的问题。如果问题仍然存在,请提供更多上下文信息(如完整的报错日志、代码片段等),以便进一步分析。

希望以上内容对您有所帮助!您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

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

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352

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