大模型训练时,使用bitsandbytes报错的解决方法

前言

在对大语言模型(LLaMa、Chat-GLM等)进行微调时,考虑到减少显存占用,会使用如下方式加载模型。

from transformers import AutoModel

model = AutoModel.from_pretrained(
	model_path,
    trust_remote_code=True,
    load_in_8bit=True,
    torch_dtype=torch.float16,
    device_map='auto',
)

为了使用上述功能,需要安装bitsandbytes库,但在使用时,会提示UserWarning: The installed version of bitsandbytes was compiled without GPU support.
进而,在模型加载时会报有关"libsbitsandbytes_cpu.so"的编译错误。

原因分析

在bitsandbytes源码中,有如下一段代码bitsandbytes代码

  • 这段代码会在引入bitsandbytes时执行,主要功能是找到cuda_lib的路径。
  • 若该方法返回路径为空,则在后续会产生上述警告。
  • 而通过注释不难看出,其搜索方式有三种: conda环境变量、LD_LIBRARY_PATH、其他环境变量。
  • 因此,解决bitsandbytes找不到GPU的问题,只需配置好相应的环境变量即可。

解决方案

可通过如下方式解决上述问题:
1. 使用pip install bitsandbytes正常安装库
2. 切换到bitsandbytes所在lib目录,例如: xxx/venv/lib/python3.9/site-packages/bitsandbytes/cuda_setup
3. 使用vim指令或其他方式编辑main.py文件
4. 定位到if not torch.cuda.is_available(): return 'libsbitsandbytes_cpu.so', None, None, None, None,将其替换为if torch.cuda.is_available(): return 'libbitsandbytes_cuda116.so', None, None, None, None 。(并非一定要使用cuda116,只需大于等于自身显卡cuda版本即可)
5. 定位到self.lib = ct.cdll.LoadLibrary(binary_path),会找到两处,把两处都替换为self.lib = ct.cdll.LoadLibrary(str(binary_path))

  1. 正确安装cuda、cuda-tookit
  2. 配置LD_LIBRARY_PATH
  3. 重新加载环境后,使用之前的模型加载代码则不会报错了

之前的解决方案并未从根本解决问题,因此已划掉,建议使用配置环境变量的方式。

参考资料:
https://github.com/oobabooga/text-generation-webui/issues/147#issuecomment-1456040134
cuda安装&配置

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
### 回答1: 如果你在训练YOLOv5出现了内存不足的报错,你可以尝试一些方法解决它。以下是一些可能的解决方法: 1. 减少批次大小(batch size):减少批次大小可以减少训练所需的内存,但这可能会影响模型训练效果。 2. 减少输入图像的分辨率:减少输入图像的分辨率可以减少所需的内存,但这也会影响模型训练效果。 3. 使用更小的模型使用更小的YOLOv5模型可以减少所需的内存,但这也会影响模型的检测精度。 4. 使用更多的GPU:如果你有多个GPU,可以尝试在多个GPU上并行训练YOLOv5以减少单个GPU上的内存使用量。 5. 升级GPU:如果你的GPU内存不足,可以考虑升级GPU以获得更多的内存。 需要注意的是,如果你减少批次大小或输入图像分辨率,可能需要对训练参数进行调整以获得最佳的检测结果。 ### 回答2: 当在使用YOLOv5进行训练,如果出现内存不足的错误提示,可能会影响训练的进行。但是,是否可以继续训练取决于具体的情况和系统资源。 首先,我们需要了解出现内存不足错误的原因。通常情况下,这可能是由于模型的复杂性、输入图像大小或批量大小过大等因素导致的。如果这些因素超出了系统和显卡的内存容量限制,那么继续训练可能会导致程序崩溃或运行效率极低。 如果内存不足的错误提示只是一次性的,可能可以通过减小训练批次的大小、缩小图像尺寸或降低模型复杂度等方法解决。这样可以有效降低所需内存的占用,让训练能够顺利进行。 然而,如果内存不足的错误持续出现,即使进行了资源优化,也可能无法继续训练。此,可能需要考虑增加系统内存、更换显卡或改用更高性能的计算设备等措施来解决问题。这样可以提供足够的资源来支持训练过程,保证模型训练效果和训练速度。 总而言之,能否继续训练取决于内存不足的具体情况和可用资源。在内存不足的情况下,可以尝试进行资源优化来解决问题。如果优化无效或不可行,可能需要增加系统资源以确保训练的顺利进行。 ### 回答3: 在训练Yolov5,如果遇到内存不足报错,可以尝试一些方法解决该问题,但是否可以继续训练取决于具体情况。 首先,我们可以尝试减小模型的输入大小。减小输入大小可能会降低模型的准确度,但可以减少内存占用。需要根据具体情况权衡模型性能和内存消耗的平衡。 其次,可以采用batch大小的调整。通过减小batch大小,可以降低模型在每个批次中的内存需求。这也可能导致训练性能的下降,但可以是一个权衡选择。 另外,可以尝试使用更小型的模型,如Yolov5s代替Yolov5l或Yolov5x。更小的模型通常占用更少的内存,但可能会牺牲一些准确度。 若以上方法仍无法解决内存不足的问题,可能需要考虑增加计算资源,如使用更高配置的GPU或者增加内存容量。这些都可以提供更多的内存供模型训练使用。 总的来说,若能通过适当的调整来降低内存消耗,那么可以继续训练,并根据实际情况观察模型的性能表现。但如果内存问题无法解决,并且没有更大的计算资源可用,那可能需要考虑使用其他方法或技术来处理该问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anycall201

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值