微调大模型:提高其代码修复能力的尝试

目录

一、作品背景:

二、作品目标:

三、作品技术方案:

(1)标记化

(2)量化

(3) LoRA(低秩自适应)配置

(4)训练配置

(6)模型保存

四、作品效果:


一、作品背景:

随着大型模型技术的日益成熟,涌现出CodeLlama、CodeGeex等代码生成能力较强的模型,催生了一批基于大模型的代码辅助工具,逐步改变软件开发模式。随着技术发展最终会带来软件开发领域的变革。

二、作品目标:

本团队作品旨在提高大模型的代码修复能力,我们团队探索了如何进一步优化代码大模型训练方法,提升大模型在软件开发相关场景上的代码生成能力,探索更多的应用场景。本次作品针对三个典型应用场景:代码优化、代码补全、代码问答,针对CodeLlama-7B模型进行代码能力提升,形成相关技术方案,包含代码数据分析、代码数据质量评估、模型优化、优化效果等内容。提供代码源文件、训练数据等完备的项目材料,可进行效果复现。

三、作品技术方案:

微调是采用预训练模型并对其进行调整以执行特定任务或解决特定问题的过程。在这个作品中,我们的制定大模型微调方案涉及以下几个关键步骤:

(1)标记化

我们使用AutoTokenizerHugging Face Transformers 库中的标记来标记基础模型。此步骤通过将文本数据转换为合适的格式,为特定任务的训练准备模型。

(2)量化

使用自定义配置将量化应用于基础模型。此过程可优化模型以实现高效执行,同时最大限度地减少内存使用量。我们采用以下量化参数:

·load_in_4bit:激活 4 位精度以加载基本模型。

·bnb_4bit_use_double_quant:使用双量化实现 4 位精度。

·bnb_4bit_quant_type:指定量化类型为“nf4”(嵌套浮点4位)。

·bnb_4bit_compute_dtype:将计算数据类型设置为torch.bfloat16。

(3) LoRA(低秩自适应)配置

LoRA(低秩自适应)是一种微调深度学习模型的新技术,其工作原理是减少可训练参数的数量。LoRA 的关键参数包括:

·lora_r:LoRA注意力维度设置为8。

·lora_alpha:LoRA 缩放的 Alpha 参数设置为 16。

·lora_dropout:LoRA 层的 Dropout 概率设置为 0.05。

(4)训练配置

我们配置了各种训练参数,包括批量大小、学习率和梯度累积步骤。一些关键的训练参数包括:

·用于训练和评估的每个 GPU 的批次大小

·梯度积累步骤

·最大梯度范数(梯度剪裁)

·初始学习率(AdamW 优化器)

·权重衰减

·优化器类型(例如 paged_adamw_8bit)

·学习率计划(例如余弦)

(5)监督微调(SFT)

我们采用监督微调 (SFT) 方法来训练模型完成特定任务。这涉及提供与 LLM 应该相对应的任务相关的标记数据集。

(6)模型保存

训练完成后,训练效果最好的那个模型会被保存以供将来使用。

目前作品已在码云平台上传,链接如下:https://gitee.com/dyestuff_factory_2300447615/CodeLlama-7b-Instruct-hf

四、作品效果:

目前作品效果是:

(1)通过调用第三方库,可以查看模型训练效果,某次模型训练效果截图如下:

图1 某次模型训练效果

(2)针对python代码的优化和修复,形成应用演示demo,该应用具体为一个网页端服务界面,可调用微调后的模型迅速针对代码进行修复。

图2 作品网页端服务界面

### 解决微调 ChatGLM 3 模型时出现的 `ValueError` 错误 当尝试加载或微调 ChatGLM 3 模型并遇到 `ValueError: too many values to unpack (expected 2)` 的错误提示时,这通常意味着在处理某些函数返回值的过程中存在不匹配的情况。具体来说,在期望两个返回值的地方实际接收到更多数量的数据。 #### 可能的原因分析 此类型的错误可能源于以下几个方面: - 函数定义与调用处对于返回值的数量预期不符[^3]。 - 数据结构的变化未被相应更新的代码所适配,比如迭代器的行为改变或是列表解析式的输出形式发生变动[^1]。 #### 实际案例中的常见问题点 针对特定于 ChatGLM 3 模型的操作环境内发生的此类异常情况,可以考虑以下几种可能性作为排查方向: - **模型版本兼容性**:如果使用的库文件不是最新版或者是不同分支间的混合安装,则可能导致API接口签名差异从而引发上述错误。建议确认所有依赖项均为官方推荐配置下的稳定发行版本[^4]。 - **数据预处理逻辑**:检查输入给定训练集格式是否严格遵循文档说明;特别是涉及到元组拆分操作的位置,确保每次解包都只作用于确切长度的对象之上[^2]。 #### 排查步骤指南 为了有效定位并修复该类错误,可采取下列措施之一来验证假设并实施修正方案: - 审视涉及多值赋值语句附近的源码片段,尤其是那些直接关联到外部资源读取的部分(如从磁盘加载序列化对象)。通过打印调试信息的方式观察实际传递过来的内容形态,进而调整目标端口以接纳正确数目参数。 - 对比当前工作流同官方样例项目之间的异同之处,留意是否存在额外引入第三方扩展模块影响到了原有流程控制路径的情形。必要情况下回滚至基础设置重新测试一遍整个过程看能否规避掉原生缺陷。 ```python # 示例代码用于展示如何安全地执行多值分配前先检验待分解集合大小 items = some_function_that_returns_multiple_values() if isinstance(items, tuple) and len(items) == expected_length: item_one, item_two = items else: raise Exception(f"Unexpected number of returned values {len(items)} instead of {expected_length}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

通信汪的美好生活

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

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

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

打赏作者

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

抵扣说明:

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

余额充值