【五一创作】跑alpaca-lora语言模型的常见问题(心得)

news2024/11/23 22:38:46

训练部署alpaca-lora语言模型常见问题

Alpaca-Lora是一个开源的自然语言处理框架,使用深度学习技术构建了一个端到端的语言模型。在训练和部署alpaca-lora语言模型时,可能会遇到一些常见问题。本文将介绍一些这些问题及其解决方法。

1. bitsandbytes版本冲突导致的AttributeError

如果您在使用Alpaca-LoRa时遇到了以下错误:

AttributeError: /root/miniconda3/envs/alpaca/lib/python3.9/site-packages/bitsandbytes/libbitsandbytes_cpu.so: undefined symbol: cget_col_row_stats

那么这很可能是由于bitsandbytes的版本冲突问题导致的。为了解决这个问题,您可以尝试以下方法:

  1. 进入报错路径对应的目录:
cd /root/miniconda3/envs/alpaca/lib/python3.9/site-packages/bitsandbytes/
  1. 拷贝cuda117版本的文件为使用的文件:
cp libbitsandbytes_cuda117.so libbitsandbytes_cpu.so

这里假设您使用的是cuda117版本,如果不是,请根据您实际使用的版本进行相应的修改。

通过执行上述操作,您应该能够成功解决由bitsandbytes版本冲突引起的AttributeError问题。

2. 模型权重形状不匹配导致的size mismatch错误

如果您在使用Alpaca-LoRa时遇到以下错误:

size mismatch for base_model.model.model.layers.26.self_attn.v_proj.loraA.default.weight: copying a param with shape torch.Size([8,4096]) from checkpoint, the shape in current model is torch.Size([16,4096])

那么这很可能是因为加载的预训练模型的权重与当前模型中某些层的权重形状不匹配导致的。为了解决这个问题,您需要确保当前模型和预训练模型在模型结构上是一致的,或者通过修改当前模型来使其结构匹配预训练模型。

对于本仓库而言,我们提供了一个简单的解决方法:通过修改超参数,将lora_a=16修改为lora_a=8即可。

通过执行上述操作,您应该能够成功解决由模型权重形状不匹配引起的size mismatch错误。

3. 训练和推理过程中遇到CUDA内存不足问题

当在训练或推理过程中遇到 CUDA out of memory 错误时,这通常表示尝试分配CUDA内存时出现了内存不足的情况。

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 44.00 MiB (GPU 0; 14.62 GiB total capacity; 13.33 GiB already allocated; 29.38 MiB free; 13.89 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

解决这个问题的方法取决于特定情况,下面介绍一些可能的解决方案。

3.1 清理GPU缓存

在训练或推理过程中,可能会发现GPU内存的使用量逐渐增加,即使不再需要先前使用的中间结果,也会导致内存不足。这时可以尝试在训练之前或推理之前使用 torch.cuda.empty_cache() 函数清理缓存,从而释放不再使用的内存。

3.2 设置适当的GPU数量

如果使用多个GPU训练模型,则可能需要设置适当的GPU数量以使内存消耗更均匀。如果某个GPU的内存使用量过高,可以考虑将其分配给另一个GPU,从而平衡内存使用量。

总之,当出现CUDA内存不足的情况时,可以尝试上述方法来解决问题。如果上述方法都无法解决问题,可能需要考虑使用更多内存的GPU或分布式训练来处理更大的模型和数据集。

3.3 减少模型大小或批处理大小 ⭐

一种减少内存消耗的方法是减小模型的大小或减少批次大小。在训练过程中,可以尝试减少 batch_sizemicro_batch_size 参数的值,这将减少每个批次的数据量,从而减少内存使用量。在推理过程中,可以尝试减小模型的大小,例如通过选择更小的模型、减少模型的层数或减少每层的通道数等。

附加参数说明

在进行微调时,需要注意以下参数:

micro_batch_sizebatch_size:用来控制训练时的批次大小。

batch_size 是指每个 GPU 或 CPU 每次能够处理的最大样本数。在训练过程中,输入数据会被分成一个个 batch,然后送入模型进行训练。batch_size 的设置直接影响训练速度和 GPU 内存的占用。一般来说,batch_size 越大,训练速度越快,但同时也需要更多的内存。

micro_batch_size 则是指每个 batch 内部再进行拆分的大小,通常用于在一个 batch 内部进行更细粒度的梯度累积,以减少 GPU 内存的占用。在某些情况下,模型的输入数据比较大,导致一个 batch 无法完整地存入 GPU 内存中,这时可以通过设置 micro_batch_size,将一个 batch 拆分成多个更小的子 batch 进行训练,最后再将子 batch 的梯度进行累加。这样可以避免 GPU 内存不足的问题,同时还能够更充分地利用 GPU 进行计算,加快训练速度。

需要注意的是,micro_batch_sizebatch_size 的乘积应该等于总的训练样本数。同时,在使用 micro_batch_size 时,需要额外设置 gradient_accumulation_steps 参数,表示多少个子 batch 进行一次梯度累加。例如,micro_batch_size=4batch_size=32gradient_accumulation_steps=8,表示每个 batch 会被拆分成 8 个子 batch,每 4 个子 batch 进行一次梯度累加。

注意:alpaca-lora 仓库已经写好了 gradient_accumulation_step 的设置,就是 batch_size // micro_batch_size

4. 网页端输出代码格式符号

总会出现一些end符号,初步估计是转义没转好。
在这里插入图片描述

可能的解决方案:

  • 可以尝试修改template中预设的alpaca模板(prompt)
  • 后续为程序做接口的时候额外做字符串处理。
  • 换更成熟的模型吧。除了羊驼还有骆驼、Chinese-Vicuna。
    在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/477376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉毕业后找不到工作怎么办?怒刷leetcode,还是另寻他路?

文章目录 一、计算机视觉毕业后找不到工作怎么办?二、大环境:前两年的泡沫太大三、还是要把自己的基本功搞扎实,真正的人才什么时候都紧缺四、转换思路,另投他坑五、要有毅力,心态放平六、最后的建议 一、计算机视觉毕…

Python毕业设计之django社区报修维修预约上门服务系统

开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 目 录 摘 要 I Pick to II 1绪论 1 1.1项目研究的背景 1 1.2开发意义 1 1.3项…

「数据架构」介绍下一代主数据管理(MDM)

主数据管理是旨在创建和维护权威、可靠、可持续、准确、及时和安全的环境的过程和技术框架。这个环境代表了一个单一版本的事实,作为跨不同的系统、业务单元和用户社区的可接受的记录系统。 尽管MDM不是新的,但是最近人们对开发MDM解决方案的兴趣大增。这…

正则表达式 Regular Expression

情景引入改代码查找文件词法分析器网站注册密码信息爬取 简介在线测试工具RegulexRegExr 语法普通字符非打印字符特殊字符限定符定位符修饰符元字符 实例匹配邮箱 情景引入 改代码 修改代码格式问题,或者重命名代码里的某个变量等,都可以使用 VS Code …

Mysql 管理

目录 0 课程视频 1 系统数据库 -> 安装完mysql ->自带四个数据库 2 常用工具 -> 写脚本用 2.1 mysql 客户端工具 2.2 mysqladmin 2.3 mysqlbinlog -> 二进制日志 -> 运维讲解 2.4 mysqlshow 2.5 mysqldump 备份用 ->导出 2.6 mysqlimport/source -…

一篇带你了解大厂都在用的DDD领域驱动设计

一、DDD到底是什么 DDD全称Domain Driven Design,领域驱动设计。 为了解决快速变化、复杂系统的设计问题的 领域驱动设计是Eric Evans在2004年发表的Domain Driven Design(领域驱动设计,DDD)著作中提出的一种从系统分析到软件建模的一套方…

K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时

文章目录 一、部署K8S集群方式二、kubeadm工具搭建K8s集群2.1 资源配置2.2 服务器规划2.3 搭建流程2.3.1 操作系统初始化2.3.2 使用docker容器引擎2.3.3 安装cri-dockerd2.3.4 安装kubeadm,kubelet和kubectl2.3.5 master节点初始化2.3.6 加入node节点2.3.7 部署容器…

redhat 7.9 安装oracle 11g-11.2.0.4

redhat 7.9 安装oracle 11g-11.2.0.4 1、数据库下载和安装文档1.1、查看oracle 11g 适合安装的linux版本1.2、安装文档1.3、license种类解释( XE版 标准本 个人版 企业版)1.4、在安装完oracle后再创建数据库1.5、DBA的文档1.6、Automatic Storage Manage…

2.4 等比数列

学习步骤: 如果我要学习等比数列,我会按照以下步骤进行学习: 定义和性质:首先了解等比数列的定义和性质,包括公比、首项、通项公式、求和公式等。 例题练习:通过练习一些简单的例题来理解等比数列的概念和…

BMS的菊花链技术和AFE

文章目录 菊花链在BMS中的位置菊花链拓扑菊花链通信AFE(Analog Front End)AFE均衡电路菊花链应用示例MC33665AMC33665A SPI通信 MC33775AMC33775A 硬件资源 文章参考 菊花链在BMS中的位置 如下图,AFE在从板中,用来采集电池电压和…

ChatGPT在语音识别技术领域的应用

第一章:引言 近年来,随着深度学习技术的飞速发展,语音识别技术已经成为了人工智能领域中备受关注的重要领域之一。在语音识别技术的应用中,ChatGPT作为一款先进的语言模型,可以发挥其强大的文本生成和自然语言处理能力…

#详细介绍!!! 文件系统的一点相关知识

本文主要是介绍了一些计算机文件相关的基础知识,帮助读者更好的认识文件 目录 1.内存和外存 内存 特性1:读写速度快 特性2:内存中的数据不能永久存储 特性3:容量小,价格贵 外存 内存和外存对比总结 2.认识文件 …

Linux Ansible导入剧本、任务滚动执行、任务并行执行

目录 任务滚动更新 配置并行 包含和导入剧本 任务滚动更新 实现在多台被管理节点执行任务时,第一台的整个playbook执行完成后再在下一台主机执行任务;通过serial元素来实现 serial:1 表示一台一台执行playbook(serial也可以指定…

【白嫖系列】教育邮箱申请最新专业绘图软件OriginPro(官方渠道)

🥑 Welcome to Aedream同学 s blog! 🥑 文章目录 预备简单介绍有效期与申请条件申请链接查看邮箱切换中文 预备 以edu结尾的邮箱,毕业也可使用校友邮箱等。 简单介绍 Origin是一款数据分析和绘图的软件,具备统计、峰值分析和曲线…

[oeasy]python0144_try的完全体_否则_else_最终_finally

try的完全体 回忆上次内容 上次细化了主控程序(main.py) 导入(get_fruits.py)处理(process.py)输出(output.py) 使用了 try 结构 tryexcept发现异常就报错 输入部分的错误 应该在 输入部分来报 具体怎么报呢?🤔 完善输入 输入的时候 应该包括 对于输…

新写了的 AOP 日志切面,方便以后直接使用。

前言 最近项目进入联调阶段,服务层的接口需要和协议层进行交互,协议层需要将入参[json字符串]组装成服务层所需的json字符串,组装的过程中很容易出错。入参出错导致接口调试失败问题在联调中出现很多次,因此就想写一个请求日志切…

AI 时代,知识工作者的生存指南

最近,大家可能已经见识过 AI 的威力了吧,以 ChatGPT 为代表的 人工智能(AI)展现出接近人一样的回答水准。 来自 Craft AI Assitant AI 就在那里,是房间里的大象,大家不能总装做对自己没有影响。要知道&…

Python使用CV2库捕获、播放和保存摄像头视频

Python使用CV2库捕获、播放和保存摄像头视频 特别提示:CV2指的是OpenCV2(Open Source Computer Vision Library),安装的时候是 opencv_python,但在导入的时候采用 import cv2。 若想使用cv2库必须先安装,P…

2023年最新5A景区有多少个?Python可视化告诉你

2023年最新5A景区有多少个?Python可视化告诉你 五一小长假来了,很多人想抓住小长假的机会去旅游。 5A景区是大多数人的首选,全国最新有多少个5A景区呢,应该还有很多人不知道。本文用Python进行可视化,告诉你答案。 …

【五一创作】【Mycat】Mycat2 Bugs 及修改建议(V1.22_2022-10-13)

Bug 1 : wrapper.conf 数字类型参数配置有误,多了末尾的单位 M https://wrapper.tanukisoftware.com/doc/english/prop-java-initmemory.html wrapper.log 产生警告: WARN | wrapper | 2023/04/20 22:42:00 | Encountered an invalid numerical val…