微调大模型:提高其代码修复能力的尝试_技术方案

一、作品背景:

随着大型模型技术的日益成熟,涌现出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)

我们采用监督微调

(6)模型保存

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

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

四、作品效果:

目前作品效果是:

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

微调大模型:提高其代码修复能力的尝试_软件开发_02

图1 某次模型训练效果


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

微调大模型:提高其代码修复能力的尝试_软件开发_03

图2 作品网页端服务界面