Compare commits

...

16 Commits

Author SHA1 Message Date
carry
0a291e0330 fix(cover): 修改封面字体为方正楷体并加粗
将封面标题的字体从“zhkai”更改为“fzkaiti”,并添加加粗效果,以提升视觉效果和一致性。同时,在main.tex中定义了fzkaiti字体的加粗和斜体设置,确保字体显示正常。
2025-05-02 00:38:59 +08:00
carry
833c6b94b3 refactor(latex): 清理并优化LaTeX文档配置
移除未使用的LaTeX包和注释代码,重新组织hyperref包的位置以提升文档结构清晰度。添加example.tex文件作为示例模板,便于后续使用。
2025-05-01 21:08:53 +08:00
carry
55508a55b9 style(paper): 调整封面图片的缩放比例
将封面图片的缩放比例从0.5调整为1,以改善视觉效果。
2025-05-01 19:39:11 +08:00
carry
fa4b1500de style: 更新LaTeX文档中的超链接设置和URL格式
将main.tex中的hyperref配置更改为隐藏超链接,以改善文档的打印效果。同时,在verification.tex中调整URL的格式,使用\href命令替代\url,以增强可读性和一致性。
2025-04-30 17:10:22 +08:00
carry
278fc67f18 style(cover.tex): 调整封面文本格式和字体大小
修改封面文本的字体大小和格式,统一使用 \zihao{3} 和 \CJKfamily{zhkai},并调整文本框宽度为 8.5cm,以提高文档的一致性和美观性。
2025-04-30 17:01:52 +08:00
carry
2af5316ff2 style(cover.tex): 调整封面章节的字体大小和间距
修改了封面章节的字体大小和间距,使其更加整齐和易读。具体包括将课题名称等字段的字体大小从 `-3` 调整为 `-2`,并调整了部分字段的间距。
2025-04-30 16:32:40 +08:00
carry
af006ebcc7 docs(paper): 重构技术章节并添加LLM里程碑表格
将LLM里程碑表格从技术章节中提取到单独的文件,并更新相关引用。同时,简化模型量化技术的描述,使其更简洁易读。
2025-04-30 16:07:53 +08:00
carry
b61a5f7a75 fix(paper): 更新LaTeX文档格式和内容
- 在main.tex中添加xeCJK包以支持更好的中文排版
- 更新abstract.tex中的标题和专业信息
- 简化acknowledgement.tex中的致谢部分
- 修改cover.tex中的字体和格式以统一风格
2025-04-30 16:07:34 +08:00
carry
39a0ec48b1 refactor(latex): 更新图表生成方式并优化文档结构
将图表生成方式从外部Python脚本迁移到LaTeX内部使用pgfplots绘制,以提升文档的可维护性和一致性。同时,更新了caption包的配置,移除了不再使用的caption2包,并添加了subcaption包以支持子图功能。
2025-04-30 15:21:45 +08:00
carry
9054be273a docs(paper): 添加TensorBoard监控截图及描述
在verification.tex中添加了TensorBoard监控截图,并描述了其用于实时监控训练过程中的损失、梯度、学习率等指标的作用,以便及时发现训练异常并优化模型参数配置。
2025-04-30 14:49:05 +08:00
carry
f2ecbca569 fix(paper): 修正JSON格式校验章节标题大小写
修正了implementation.tex文件中JSON格式校验、反序列化和持久化章节标题的大小写,使其与上下文一致。
2025-04-30 01:55:45 +08:00
carry
d0917e134e fix: 修正数据集生成模型的temperature参数 2025-04-30 01:14:19 +08:00
carry
d35074038e docs(verification): 更新DeepSeek V3的性能表现描述
更新了DeepSeek V3在Codeforces和LiveCodeBench基准测试中的具体表现,以更准确地反映其最新性能数据。
2025-04-30 01:13:48 +08:00
carry
5543150a9a fix: 修正技术章节和摘要中的QLoRA描述
修正技术章节和摘要中关于QLoRA的描述,使其更加准确和一致。具体修改包括统一术语使用和优化表达方式,以提升文档的可读性和专业性。
2025-04-30 01:07:22 +08:00
carry
80f12c66c8 fix: 修正Deepseek ai的大小写错误
修复了文档中Deepseek ai的大小写错误,确保品牌名称的准确性
2025-04-30 01:06:59 +08:00
carry
46e82361d4 fix: 将“大型语言模型”统一修改为“大语言模型”
此次修改将所有章节中的“大型语言模型”统一替换为“大语言模型”,以保持术语的一致性,提升文档的规范性和可读性。
2025-04-30 00:46:04 +08:00
15 changed files with 186 additions and 208 deletions

View File

@ -1,21 +1,21 @@
% 摘要
\begin{center}
{\zihao{3}\textbf{毕业论文系统设计}}\par
{\zihao{-4}\songti \major \quad 专业 \quad \classname \quad \studentname \par
{\zihao{3}\textbf{\thesistitle}}\par
{\zihao{-4}\songti \quad \classname \quad \studentname \par
指导教师:\adviser}
\end{center}
% 中文摘要
\begin{onecolabstract}
\noindent{}\makebox[5em][l]{{\zihao{4}\textbf{摘要}}}{\songti \zihao{-4}语言模型LLMs在通用代码生成任务中表现出色但在处理包含专有知识的企业私有代码库时其性能往往受限。针对此问题本文提出并实现了一个基于文档驱动的自适应编码大模型微调框架。该框架的核心创新在于首先通过深度解析技术文档Markdown格式自动抽取信息并结合预设模板生成高质量的指令微调SFT训练语料其次利用参数高效微调技术如QLoRA对预训练的编码大模型以qwen2.5为例)进行针对性优化,使其精准适配私有库的特定语法、结构和编程范式最后整合了包括数据持久化SQLite+TinyDB、训练监控TensorBoard和交互式前端Gradio在内的完整工作流。实验结果表明该框架能够有效提升大模型在私有库代码生成任务上的准确性和实用性为实现企业级软件开发的智能化和高效化提供了一套自动化、可扩展的解决方案。
\noindent{}\makebox[5em][l]{{\zihao{4}\textbf{摘要}}}{\songti \zihao{-4}大语言模型LLMs在通用代码生成任务中表现出色但在处理包含专有知识的企业私有代码库时其性能往往受限。针对此问题本文提出并实现了一个基于文档驱动的自适应编码大模型微调框架。该框架的核心创新在于首先通过深度解析技术文档Markdown格式自动抽取信息并结合预设模板生成高质量的指令微调SFT训练语料其次利用参数高效微调技术如Quantized Low-Rank AdaptationQLoRA对预训练的编码大模型以qwen2.5为例)进行针对性优化,使其精准适配私有库特有的语法结构与编程范式最后整合了包括数据持久化SQLite+TinyDB、训练监控TensorBoard和交互式前端Gradio在内的完整工作流。实验结果表明该框架能够有效提升大模型在私有库代码生成任务上的准确性和实用性为实现企业级软件开发的智能化和高效化提供了一套自动化、可扩展的解决方案。
}\par
\noindent{}\makebox[5em][l]{{\zihao{4}\textbf{关键词}}}{\zihao{-4}\songti语言模型; 代码生成; 模型微调; 参数高效微调; QLoRA; 文档驱动; 自动化; 私有库; 自然语言处理; Gradio
\noindent{}\makebox[5em][l]{{\zihao{4}\textbf{关键词}}}{\zihao{-4}\songti 大语言模型; 代码生成; 模型微调; 参数高效微调; QLoRA; 文档驱动; 自动化; 私有库; 自然语言处理; Gradio
}\par
\end{onecolabstract}
% 英文摘要
\begin{onecolabstract}
\noindent{}\makebox[10em][l]{{\zihao{4} \textbf{ABSTRACT}}}{\zihao{-4}Large Language Models (LLMs) excel in general code generation tasks, but their performance is often limited when handling enterprise private code repositories containing proprietary knowledge. To address this issue, this paper proposes and implements a document-driven adaptive fine-tuning framework for large code models. The core innovations of this framework are: first, by deeply parsing technical documentation (Markdown format), it automatically extracts information and combines it with preset templates to generate high-quality instruction fine-tuning (SFT) training data; second, it utilizes parameter-efficient fine-tuning techniques (such as QLoRA) to specifically optimize a pre-trained large code model (taking qwen2.5 as an example), enabling it to accurately adapt to the specific syntax, structure, and programming paradigms of the private library; finally, it integrates a complete workflow including data persistence (SQLite+TinyDB), training monitoring (TensorBoard), and an interactive frontend (Gradio). Experimental results demonstrate that this framework can effectively improve the accuracy and practicality of large models in private library code generation tasks, and provide an automated, scalable solution for intelligent and efficient enterprise software development.
\noindent{}\makebox[10em][l]{{\zihao{4} \textbf{ABSTRACT}}}{\zihao{-4}Large Language Models (LLMs) excel in general code generation tasks, but their performance is often limited when handling enterprise private code repositories containing proprietary knowledge. To address this issue, this paper proposes and implements a document-driven adaptive fine-tuning framework for large code models. The core innovations of this framework are: first, by deeply parsing technical documentation (Markdown format), it automatically extracts information and combines it with preset templates to generate high-quality instruction fine-tuning (SFT) training data; second, it utilizes parameter-efficient fine-tuning techniques (such as Quantized Low-Rank Adaptation (QLoRA)) to specifically optimize a pre-trained large code model (taking qwen2.5 as an example), enabling it to accurately adapt to the specific syntax, structure, and programming paradigms of the private library; finally, it integrates a complete workflow including data persistence (SQLite+TinyDB), training monitoring (TensorBoard), and an interactive frontend (Gradio). Experimental results demonstrate that this framework can effectively improve the accuracy and practicality of large models in private library code generation tasks, and provide an automated, scalable solution for intelligent and efficient enterprise software development.
}\par
\noindent{}\makebox[10em][l]{{\zihao{4}\textbf{KEYWORDS}}}{\zihao{-4}Large Language Models; Code Generation; Model Fine-tuning; Parameter-Efficient Fine-tuning; QLoRA; Document-Driven; Automation; Private Library; Natural Language Processing; Gradio
}\par

View File

@ -15,9 +15,4 @@
致谢是终点亦是起点,愿所有给予我温暖的人,都能在各自的星辰大海中闪闪发光。
如果需要调整情感基调或补充特定场景的表达,欢迎随时告诉我,我可以进一步优化内容。
\par
\vspace{5ex}
\rightline{\zihao{3}{张三\quad\qquad}}
\rightline{二〇二五年五月十九日于广州}
如果需要调整情感基调或补充特定场景的表达,欢迎随时告诉我,我可以进一步优化内容。

View File

@ -7,7 +7,7 @@
\subsection{
研究工作总结}\label{ux7814ux7a76ux5de5ux4f5cux603bux7ed3}}
本研究围绕基于大语言模型的自动化微调框架展开,旨在解决企业级软件开发中私有代码库智能辅助编码的挑战。通过系统化的设计与实现,本研究取得了以下主要成果:
本研究围绕基于大语言模型的自动化微调框架展开,旨在解决企业级软件开发中私有代码库智能辅助编码的挑战。通过系统化的设计与实现,本研究取得了以下主要成果:
\hypertarget{ux521bux65b0ux6027ux67b6ux6784ux8bbeux8ba1}{%
\subsubsection{

View File

@ -2,35 +2,35 @@
\begin{titlepage}
\begin{figure}[H]
\centering
\includegraphics[scale=0.5]{pic//logo.jpg}
\includegraphics[scale=1]{pic//logo.jpg}
\end{figure}
\vspace{0.2cm}
\centering
{\zihao{1}\songti{本科毕业论文(设计)}}
{\zihao{1}\CJKfamily{fzkaiti}\bfseries 本~科~毕~业~论~文(设~计)}
\vspace{2.5cm}
\begin{flushleft}
{{\songti \zihao{-3} \qquad\qquad\qquad 课题名称}\quad{\zihao{-4}\dlmu[7.5cm]{基于文档驱动的自适应编码大模型微调框架}}\par}
{{\CJKfamily{zhkai} \zihao{-2} \hspace{4.2em}课题名称}\quad{\dlmu[8.5cm]{ \scalebox{0.8}[1.0]{ \zihao{3}\CJKfamily{zhkai}\thesistitle} }}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad\qquad}\quad\dlmu[7.5cm]{\department}\par}
{{\CJKfamily{zhkai}\zihao{-2} \hspace{4.2em}\qquad}\quad\dlmu[8.5cm]{\zihao{3}\CJKfamily{zhkai}\department}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad\qquad}\quad\dlmu[7.5cm]{\major}\par}
{{\CJKfamily{zhkai}\zihao{-2} \hspace{4.2em}\qquad}\quad\dlmu[8.5cm]{\zihao{3}\CJKfamily{zhkai}\major}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 班级名称}\quad\dlmu[7.5cm]{\classname}\par}
{{\CJKfamily{zhkai}\zihao{-2} \hspace{4.2em}班级名称}\quad\dlmu[8.5cm]{\zihao{3}\CJKfamily{zhkai}\classname}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 学生姓名}\quad\dlmu[7.5cm]{\studentname}\par}
{{\CJKfamily{zhkai}\zihao{-2} \hspace{4.2em}学生姓名}\quad\dlmu[8.5cm]{\zihao{3}\CJKfamily{zhkai}\studentname}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad\qquad}\quad\dlmu[7.5cm]{\studentid}\par}
{{\CJKfamily{zhkai}\zihao{-2} \hspace{4.2em}\qquad}\quad\dlmu[8.5cm]{\zihao{3}\CJKfamily{zhkai}\studentid}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 指导老师}\quad\dlmu[7.5cm]{\adviser}\par}
{{\CJKfamily{zhkai}\zihao{-2} \hspace{4.2em}指导老师}\quad\dlmu[8.5cm]{\zihao{3}\CJKfamily{zhkai}\adviser}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 完成日期}\quad\dlmu[7.5cm]{\number\year\number\month\number\day}\par}
{{\CJKfamily{zhkai}\zihao{-2} \hspace{4.2em}完成日期}\quad\dlmu[8.5cm]{\zihao{3}\CJKfamily{zhkai}\number\year\number\month\number\day}\par}
\end{flushleft}
\vspace{4cm}
{\songti \zihao{3} 教务处}
{\CJKfamily{zhkai} \zihao{3}\hspace{0.5em}\hspace{0.5em}\hspace{0.5em}}
\end{titlepage}

View File

@ -45,7 +45,7 @@
\subsubsection{OpenAI API的协程并发语料生成}
本系统的OpenAI API协程并发语料生成模块采用异步IO架构实现高并发处理其核心逻辑体现在 \texttt{reasoning.py} 中的 \texttt{call\_openai\_api} 方法。该方法通过实例化 \texttt{openai.AsyncOpenAI} 异步客户端支持多轮次rounds参数连续对话请求自动解析JSON格式响应并记录完整的调用元数据。在并发控制方面基于Python原生\texttt{asyncio}事件循环实现非阻塞式请求处理通过await关键字异步等待API响应这种设计理论上可扩展为使用\texttt{asyncio.gather}实现并行请求批处理。数据流设计采用 \texttt{dataset\_generation.py} 中定义的 \texttt{LLMRequest} 请求对象封装输入参数,生成 \texttt{LLMResponse} 响应列表。错误处理机制采用全异常捕获策略在发生API超时或格式错误时保留错误上下文和\texttt{response\_id}追踪链同时维护包含耗时统计精确到毫秒、prompt/completion tokens使用量及总资源消耗的性能监控体系。该模块通过 \texttt{dataset\_generate\_page.py} 集成到前端生成流程实现文档切片处理、可配置并发参数当前UI隐藏和实时进度反馈的完整工作流。
\subsubsection{json格式校验、反序列化和持久化}
\subsubsection{JSON格式校验、反序列化和持久化}
本系统采用三层架构实现JSON数据处理全流程管理在数据输入层通过动态Schema绑定技术结合大语言模型的格式约束参数构建双向校验机制确保原始数据符合预定义结构规范在数据处理层设计基于异常传播模型的三级解析体系通过语法验证、语义补全和类型强转实现安全反序列化采用领域驱动设计模式将原始JSON映射为业务对象在数据存储层运用分层持久化策略通过内存序列化缓存、文档数据库中间存储和文件系统冷备份三级存储机制实现数据生命周期管理。系统通过管道过滤器模式串联各处理模块建立数据校验→结构转换→持久存储的完整处理链路各组件间通过标准接口解耦形成高内聚低耦合的可扩展架构有效提升复杂JSON数据处理的可靠性和可维护性。
@ -69,7 +69,7 @@ Datasets库构建高效数据管道。将原始Python列表转换为内存映射
模型训练的效果很大程度上取决于训练参数的合理设置。在本项目中通过配置一系列关键参数来控制训练过程的行为这些参数包括但不限于学习率learning\allowbreak\_rate它决定了模型在每次参数更新时的步长每个设备的训练批次大小per\allowbreak\_device\allowbreak\_train\allowbreak\_batch\allowbreak\_size影响显存占用和梯度更新的稳定性梯度累积步数gradient\allowbreak\_accumulation\allowbreak\_steps通过累积多个小批次的梯度来模拟使用更大的批次进行训练训练的总步数或总轮数max\_steps / epoch定义了整个训练过程的长度学习率调度器类型lr\allowbreak\_scheduler\allowbreak\_type控制学习率随训练进程的变化策略权重衰减weight\allowbreak\_decay作为一种正则化手段有助于防止模型过拟合以及随机种子seed用于确保训练结果的可复现性。对这些参数的细致调整是获得高性能模型的关键环节。
训练大语言模型对计算资源要求极高因此采用了多种优化技术来提升训练效率并降低资源消耗。首先是混合精度训练mixed precision training利用半精度浮点数如fp16或bf16进行计算和存储相比于传统的全精度FP32可以显著减少显存占用并加速计算同时通过配合少数全精度参数可以保证训练的稳定性和模型的精度本项目会根据硬件支持情况自动选择合适的半精度类型。其次在优化器选择上采用了诸如adamw\_8bit的8位量化版本这种优化器能够大幅度减少优化器状态所需的显存使得在相同硬件条件下可以训练更大的模型或使用更大的批次大小。此外还采用了梯度检查点use\_gradient\_checkpointing技术这项技术通过在反向传播时重新计算前向传播中的一些中间激活值来显著降低显存峰值占用尤其在使用优化实现时能更高效地平衡计算量和显存消耗。
训练大语言模型对计算资源要求极高因此采用了多种优化技术来提升训练效率并降低资源消耗。首先是混合精度训练mixed precision training利用半精度浮点数如fp16或bf16进行计算和存储相比于传统的全精度FP32可以显著减少显存占用并加速计算同时通过配合少数全精度参数可以保证训练的稳定性和模型的精度本项目会根据硬件支持情况自动选择合适的半精度类型。其次在优化器选择上采用了诸如adamw\_8bit的8位量化版本这种优化器能够大幅度减少优化器状态所需的显存使得在相同硬件条件下可以训练更大的模型或使用更大的批次大小。此外还采用了梯度检查点use\_gradient\_checkpointing技术这项技术通过在反向传播时重新计算前向传播中的一些中间激活值来显著降低显存峰值占用尤其在使用优化实现时能更高效地平衡计算量和显存消耗。
在将准备好的训练数据输入模型之前需要一个数据整理器Data Collator来处理一个批次内的样本。特别是在处理变长序列时数据整理器的作用至关重要。本项目使用了针对序列设计的整理器负责将批次内长度不一的文本序列进行填充padding使其达到批次内的最大长度或预设的最大长度从而能够被模型以张量的形式统一处理。同时数据整理器还会生成相应的注意力掩码attention mask告知模型哪些部分是真实的序列内容确保模型不会在填充位置进行不必要的计算或注意力分配。对于监督式微调任务它还需要协助处理标签的准备配合生成适当的损失掩码loss mask确保损失计算仅发生在目标响应的token上忽略输入提示部分的损失。
@ -178,7 +178,7 @@ Gradio
\subsubsection{流式响应与实时反馈}
在实现前端聊天系统的交互时,为了提供更佳的用户体验,特别是与大语言模型进行对话时,采用传统的``一次性等待全部生成再显示''的方式会让用户感受到明显的延迟。因此,流式响应和实时反馈技术变得至关重要。这项技术的目的是让用户能够像看到对方正在``打字''一样,文字内容可以随着模型的生成进度逐步显示在聊天界面上,而不是等到模型完全生成完毕才一次性出现。
在实现前端聊天系统的交互时,为了提供更佳的用户体验,特别是与大语言模型进行对话时,采用传统的``一次性等待全部生成再显示''的方式会让用户感受到明显的延迟。因此,流式响应和实时反馈技术变得至关重要。这项技术的目的是让用户能够像看到对方正在``打字''一样,文字内容可以随着模型的生成进度逐步显示在聊天界面上,而不是等到模型完全生成完毕才一次性出现。
实现流式响应的核心在于后端如何将语言模型的输出分批、分步地发送给前端,以及前端如何接收并逐步更新显示。具体来说,当用户发送消息后,后端不再等待语言模型生成完整的回复文本,而是配置模型以``流''的形式进行输出。这意味着模型在生成过程中,会不断地吐出部分文本片段(通常是词或字),并通过一个特定的通道(比如一个流式生成器对象)进行传输。

View File

@ -40,13 +40,13 @@ AI辅助编码的研究和应用在中国尚处于起步阶段。虽然一些大
\subsection{本文结构安排}
本文围绕基于大语言模型的自动化微调框架展开研究与实现,全文共分为六章,具体结构安排如下:
本文围绕基于大语言模型的自动化微调框架展开研究与实现,全文共分为六章,具体结构安排如下:
第一章 前言:本章首先介绍了研究的背景与意义,阐述了大语言模型微调自动化的重要性和必要性。随后,对国内外相关的研究现状进行了回顾与分析,指出了现有方法的优势与不足。最后,概述了本文的主要研究内容,并介绍了论文的整体结构安排。
第一章 前言:本章首先介绍了研究的背景与意义,阐述了大语言模型微调自动化的重要性和必要性。随后,对国内外相关的研究现状进行了回顾与分析,指出了现有方法的优势与不足。最后,概述了本文的主要研究内容,并介绍了论文的整体结构安排。
第二章 相关技术介绍:本章详细介绍了本文研究所涉及的关键技术。包括大语言模型LLM的发展、应用及在辅助编码方面的潜力提示工程技术在引导LLM生成高质量文本中的作用模型量化技术及其在降低模型部署成本方面的意义LoRALow-Rank Adaptation等参数高效微调方法特别是QLoRA的原理与优势优化微调效率的unsloth算子以及用于构建交互式界面的Gradio框架。
第二章 相关技术介绍本章详细介绍了本文研究所涉及的关键技术。包括大语言模型LLM的发展、应用及在辅助编码方面的潜力提示工程技术在引导LLM生成高质量文本中的作用模型量化技术及其在降低模型部署成本方面的意义LoRALow-Rank Adaptation等参数高效微调方法特别是QLoRA的原理与优势优化微调效率的unsloth算子以及用于构建交互式界面的Gradio框架。
第三章 需求分析:本章从项目整体出发,对基于大语言模型的自动化微调框架进行了需求分析。首先介绍了项目的整体目标和应用场景。然后,详细分析了系统的功能需求,包括训练语料生成、模型微调、自动化整合以及前端展示等核心功能。最后,阐述了系统的非功能需求,如性能要求和扩展性要求。
第三章 需求分析:本章从项目整体出发,对基于大语言模型的自动化微调框架进行了需求分析。首先介绍了项目的整体目标和应用场景。然后,详细分析了系统的功能需求,包括训练语料生成、模型微调、自动化整合以及前端展示等核心功能。最后,阐述了系统的非功能需求,如性能要求和扩展性要求。
第四章 关键技术实现本章详细阐述了系统的具体实现过程。首先介绍了系统的整体架构设计、模块划分与交互流程。接着描述了双数据库架构SQLite+TinyDB的设计与实现方案以及数据模型定义和数据库管理。详细介绍了语料生成与处理技术包括Markdown文档解析、Prompt模板应用、API协程并发调用以及数据校验与持久化。重点阐述了语言模型训练技术的实现涵盖监督式微调SFT流程、训练数据准备、LoRA微调方法应用、训练配置、监控与结果保存。随后介绍了基于Gradio框架的前端交互系统设计与实现包括全局状态管理、前后端数据流、流式响应与实时反馈以及异常处理。最后探讨了系统的扩展性实现方案。
@ -55,4 +55,4 @@ AI辅助编码的研究和应用在中国尚处于起步阶段。虽然一些大
第六章 总结与展望:本章对本文的研究工作进行了全面的总结,回顾了所取得的主要成果。同时,分析了当前研究存在的不足与局限性。最后,对未来的研究方向和可能的技术发展进行了展望。
\subsection{小结}
本章作为全文的引言部分,首先阐明了在当前大语言模型蓬勃发展的背景下构建自动化微调框架的研究背景和重要的现实意义。通过对国内外相关研究现状的梳理我们认识到自动化、高效化微调工具的缺失是当前LLM应用落地的瓶颈之一这进一步凸显了本研究的价值。本章还概述了本文的主要研究内容旨在通过整合先进的语料生成、模型微调和前端交互技术构建一个用户友好、高效灵活的LLM自动化微调框架。最后详细介绍了本文的章节结构安排为读者清晰地勾勒出后续内容的逻辑脉络为深入理解本文的研究工作奠定了基础。
本章作为全文的引言部分首先阐明了在当前大语言模型蓬勃发展的背景下构建自动化微调框架的研究背景和重要的现实意义。通过对国内外相关研究现状的梳理我们认识到自动化、高效化微调工具的缺失是当前LLM应用落地的瓶颈之一这进一步凸显了本研究的价值。本章还概述了本文的主要研究内容旨在通过整合先进的语料生成、模型微调和前端交互技术构建一个用户友好、高效灵活的LLM自动化微调框架。最后详细介绍了本文的章节结构安排为读者清晰地勾勒出后续内容的逻辑脉络为深入理解本文的研究工作奠定了基础。

View File

@ -4,7 +4,7 @@
\subsection{项目整体介绍}
本项目旨在构建一个基于文档驱动的自适应编码大模型微调框架。在现代软件开发领域,虽然大语言模型显著提升了代码生成效率,但在处理企业内部高度专业化的私有代码库时,其局限性日益凸显。这主要是由于通用大模型缺乏对特定企业或项目中私有库内专有函数、类及其交互细节的深度理解和应用适应性。相较于广泛采用的公开编码模型,针对私有库设计的专有模型显得尤为必要,因为公开模型难以精准引用私有库中的元素,可能引入安全风险并增加人工调整工作量 。企业间的私有库差异巨大,要求自动化工具具备高度的灵活性和可定制性 。本研究的核心在于深度解析私有库的文档资源,精准提取关键信息,并以此为基础对大语言模型进行针对性的微调与优化 。通过提升模型对私有库特定功能和用法的理解能力,本项目旨在极大提升生成代码的准确性和实用性,使生成的代码片段能够无缝集成于企业的私有库生态中,最终实现企业级软件开发的智能化与高效化,满足企业对高质量、高安全性代码的迫切需求 。本研究具有重要的理论意义,扩展了大语言模型在代码生成领域的应用场景,推动了代码生成技术的发展;同时也具有实际应用价值,能够提升企业开发效率、降低开发成本、提高代码质量和安全性,从而增强企业竞争力 。
本项目旨在构建一个基于文档驱动的自适应编码大模型微调框架。在现代软件开发领域,虽然大语言模型显著提升了代码生成效率,但在处理企业内部高度专业化的私有代码库时,其局限性日益凸显。这主要是由于通用大模型缺乏对特定企业或项目中私有库内专有函数、类及其交互细节的深度理解和应用适应性。相较于广泛采用的公开编码模型,针对私有库设计的专有模型显得尤为必要,因为公开模型难以精准引用私有库中的元素,可能引入安全风险并增加人工调整工作量 。企业间的私有库差异巨大,要求自动化工具具备高度的灵活性和可定制性 。本研究的核心在于深度解析私有库的文档资源,精准提取关键信息,并以此为基础对大语言模型进行针对性的微调与优化 。通过提升模型对私有库特定功能和用法的理解能力,本项目旨在极大提升生成代码的准确性和实用性,使生成的代码片段能够无缝集成于企业的私有库生态中,最终实现企业级软件开发的智能化与高效化,满足企业对高质量、高安全性代码的迫切需求 。本研究具有重要的理论意义,扩展了大语言模型在代码生成领域的应用场景,推动了代码生成技术的发展;同时也具有实际应用价值,能够提升企业开发效率、降低开发成本、提高代码质量和安全性,从而增强企业竞争力 。
\subsection{功能需求分析}
本框架的功能设计主要围绕自动化处理流程展开,包括训练语料的生成、编码大模型的微调、各模块的自动化整合以及最终结果的前端展示。
@ -30,7 +30,7 @@
\subsubsection{性能要求}
性能是衡量本框架可用性的重要指标。首先,训练语料的生成效率需要足够高,以便快速响应技术文档的更新。其次,模型微调过程应尽可能高效,缩短训练周期,尽管大语言模型的训练对计算资源要求较高,但通过选择合适的模型和优化方法(如 QLoRA以及利用高性能计算资源需努力克服显存不足和运算速度缓慢的问题。最后前端界面的响应速度要快用户操作流畅保证良好的用户体验。
性能是衡量本框架可用性的重要指标。首先,训练语料的生成效率需要足够高,以便快速响应技术文档的更新。其次,模型微调过程应尽可能高效,缩短训练周期,尽管大语言模型的训练对计算资源要求较高,但通过选择合适的模型和优化方法(如 QLoRA以及利用高性能计算资源需努力克服显存不足和运算速度缓慢的问题。最后前端界面的响应速度要快用户操作流畅保证良好的用户体验。
\subsubsection{扩展性要求}

View File

@ -2,11 +2,12 @@
\section{相关技术介绍}
\subsection{大型语言模型 (LLM)}
\counterwithin{table}{section}
\subsection{大语言模型 (LLM)}
\subsubsection{LLM 的起源、发展历程和关键里程碑事件}
语言模型LLM是一种能够理解、生成并与人类语言交互的人工智能技术。这些模型通过在海量数据集上训练能够应对科学、技术、艺术和文化等广泛领域的问题成为信息检索、内容创作和自然语言理解的关键工具。LLM 主要基于 Transformer 架构,通过处理大规模文本数据来捕捉语言的复杂模式、语法规则和语义关系。
大语言模型LLM是一种能够理解、生成并与人类语言交互的人工智能技术。这些模型通过在海量数据集上训练能够应对科学、技术、艺术和文化等广泛领域的问题成为信息检索、内容创作和自然语言理解的关键工具。LLM 主要基于 Transformer 架构,通过处理大规模文本数据来捕捉语言的复杂模式、语法规则和语义关系。
自然语言处理NLP的发展为 LLM 奠定了基础。1966 年,约瑟夫·魏泽鲍姆创建的 ELIZA 被认为是第一个使用 NLP 的程序,它能根据用户输入的关键词给出预设响应。随着计算机性能的提升,特别是在 20 世纪 90 年代NLP 技术得到了显著发展。
@ -19,43 +20,10 @@
LLM 发展的显著趋势是参数规模的扩大和能力的演变。参数规模从最初的几百万发展到目前的数千亿甚至万亿,训练数据也从数十亿词语增长到数万亿 tokens这一趋势被称为"新的摩尔定律"。随着模型发展LLM 从最初的文本生成和补全,逐渐展现出复杂推理、解决数学问题、翻译语言和编写代码等高级能力。近年来,多模态 LLM 的出现扩展了应用范围,使其能够处理和生成文本、图像、音频等多种类型数据。 \textbf{\ref{tab:llm_milestones}} 总结了 LLM 发展中的关键里程碑事件。
\begin{table}[!ht]
\centering
\caption{LLM 发展中的关键里程碑事件}
\label{tab:llm_milestones}
\begin{tabular}{>{\centering\arraybackslash}p{1.5cm}>{\centering\arraybackslash}p{2.8cm}p{10cm}}
\toprule
\rowcolor[gray]{0.9} \textbf{年份} & \textbf{里程碑} & \textbf{重要性} \\
\midrule
1966 & ELIZA & 第一个使用 NLP 的聊天机器人,基于关键词模拟对话。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2017 & Transformer 架构 & 引入自注意力机制和平行处理,使得模型更加高效和上下文感知。 \\
\addlinespace[0.5ex]
2018 & BERT & 第一个突破性的 LLM在自然语言理解方面取得了显著进展。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2018 & GPT-1 & 第一个使用 Transformer 架构进行生成文本的概念验证。 \\
\addlinespace[0.5ex]
2019 & GPT-2 & 展示了生成令人信服的文本的能力,引发了关于潜在滥用的担忧。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2020 & GPT-3 & 参数规模显著增大1750 亿),展示了前所未有的语言理解和生成能力,成为 ChatGPT 的基础。 \\
\addlinespace[0.5ex]
2022 & ChatGPT & 面向消费者的应用程序,凭借其对话能力使 LLM 引起了主流关注。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2023 & GPT-4 & 多模态模型,具有更高的准确性和推理能力。 \\
\addlinespace[0.5ex]
2023 & LLaMA & 流行的开源 LLM推动了 AI 的普及。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2025 & DeepSeek-R1 & 在美国境外开发的高性能开源推理模型,凸显了 LLM 开发领域日益激烈的全球竞争。 \\
\addlinespace[0.5ex]
2025 & Claude 3 & GPT 模型的竞争者,强调乐于助人、诚实和无害,具有强大的推理和多模态能力。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2025 & Gemini & 一系列多模态 AI 模型,旨在跨不同设备运行并涵盖广泛的用途,包括推理。 \\
\bottomrule
\end{tabular}
\end{table}
\input{./figures/llm_milestones.tex}
\subsubsection{LLM 辅助编码}
语言模型在辅助软件开发和编码方面展现出巨大的潜力。它们通过理解和生成代码可以显著提高开发效率并改善代码质量。LLM 在代码生成、代码补全、错误检测与修复等多个方面都有具体的应用。
大语言模型在辅助软件开发和编码方面展现出巨大的潜力。它们通过理解和生成代码可以显著提高开发效率并改善代码质量。LLM 在代码生成、代码补全、错误检测与修复等多个方面都有具体的应用。
在代码生成方面LLM 能够根据自然语言描述生成代码片段甚至完整的函数。开发者可以使用自然语言描述所需功能LLM 即可生成相应的代码从而加速开发过程。例如开发者只需描述一个排序算法LLM 就能生成相应的代码实现。一些知名的 LLM如 OpenAI 的 Codex、Meta 的 Code Llama 和 Google 的 PaLM 2都经过专门优化用于代码生成。此外LLM 还可以生成代码文档和注释,提高代码可读性和可维护性。
@ -63,90 +31,38 @@ LLM 发展的显著趋势是参数规模的扩大和能力的演变。参数规
在错误检测与修复方面LLM 也展现出强大能力。LLM 可以分析代码,识别潜在的错误模式或问题,帮助开发者快速找到并修复 bug。它们能够理解代码的语法、编码风格和编程实践从而识别出代码中的错误和潜在漏洞。一些研究表明LLM 甚至能够根据错误信息和上下文生成修复代码的建议。然而需要注意的是LLM 生成的代码可能并非总是完美,仍需要开发者进行审查和验证。
综上所述,大语言模型正日益成为软件开发过程中不可或缺的辅助工具。它们通过代码生成、代码补全和错误检测与修复等功能,极大地提升了开发效率和代码质量。随着 LLM 技术的不断发展,其在软件开发领域的应用前景将更加广阔。
综上所述,大语言模型正日益成为软件开发过程中不可或缺的辅助工具。它们通过代码生成、代码补全和错误检测与修复等功能,极大地提升了开发效率和代码质量。随着 LLM 技术的不断发展,其在软件开发领域的应用前景将更加广阔。
\subsection{提示工程技术}
提示工程Prompt Engineering是设计和优化输入提示prompts的系统方法旨在精确引导大语言模型LLMs生成符合预期的输出。随着生成式人工智能技术的发展提示工程已成为充分发挥模型能力的关键环节。通过精心构建提示的格式、结构、语言和上下文提示工程能够显著提升模型理解用户意图的准确性并引导其生成更加精确、相关且高质量的回应。专业的提示工程师通过设计最优化的输入指令使其与生成式 AI 系统的内部机制高效协同,从而获取更为精准和有用的输出结果。
提示工程Prompt Engineering是设计和优化输入提示prompts的系统方法旨在精确引导大语言模型LLMs生成符合预期的输出。随着生成式人工智能技术的发展提示工程已成为充分发挥模型能力的关键环节。通过精心构建提示的格式、结构、语言和上下文提示工程能够显著提升模型理解用户意图的准确性并引导其生成更加精确、相关且高质量的回应。专业的提示工程师通过设计最优化的输入指令使其与生成式 AI 系统的内部机制高效协同,从而获取更为精准和有用的输出结果。
提示工程的重要性主要体现在三个方面:首先,它能够显著提升模型性能,使 LLM 更准确地把握用户意图并生成高质量回复;其次,通过提供结构化指令和丰富上下文,提示工程能够引导模型避开其训练数据中潜在的偏见和局限性;最后,精心设计的提示能够优化用户与 AI 系统的交互体验,提高沟通效率和满意度。在实际应用中,提示工程已成为连接用户需求与 AI 能力的关键桥梁,对于充分发挥大语言模型的潜力至关重要。
提示工程的重要性主要体现在三个方面:首先,它能够显著提升模型性能,使 LLM 更准确地把握用户意图并生成高质量回复;其次,通过提供结构化指令和丰富上下文,提示工程能够引导模型避开其训练数据中潜在的偏见和局限性;最后,精心设计的提示能够优化用户与 AI 系统的交互体验,提高沟通效率和满意度。在实际应用中,提示工程已成为连接用户需求与 AI 能力的关键桥梁,对于充分发挥大语言模型的潜力至关重要。
提示工程实践涉及多项核心原则和技术策略。首要原则是清晰性和精确性即提示应当明确界定任务边界、避免模糊表述并提供充分的背景信息和具体的输出要求包括格式、长度、风格和语气等。其次上下文管理是提示工程的关键技术通过提供相关事实、参考资料和关键概念定义可以显著提高模型输出的相关性和准确性。第三少样本学习few-shot learning技术通过在提示中嵌入示例性的输入-输出对,为模型提供直观的任务示范,有效引导其生成符合预期的回应。第四,迭代优化是提示工程的核心方法论,通过系统性地测试不同表述方式和结构,并基于模型反馈持续调整,可以逐步提升提示效果。第五,任务分解策略将复杂问题拆分为一系列相互关联的子任务,通过连贯的提示序列引导模型逐步解决问题,有效提升处理复杂任务的能力。此外,角色定义技术通过为模型赋予特定身份或专业背景,能够引导其从特定视角生成更加专业和一致的回应。
\subsection{模型量化技术}
模型量化Model Quantization是大语言模型LLMs中使用的一种技术旨在将高精度数据通常是 32 位浮点数 (FP32) 或 16 位浮点数 (FP16))的权重和激活值转换为低精度数据类型,如 8 位整数 (INT8) 或 4 位整数 (INT4)。模型量化的主要目的是减少模型的内存占用、提高推理速度并降低能耗,使其更易于部署在资源受限的设备上,如移动设备或边缘服务器。
模型量化Model Quantization是大语言模型LLMs中使用的一种技术旨在将高精度数据通常是 32 位浮点数 (FP32) 或 16 位浮点数 (FP16))的权重和激活值转换为低精度数据类型,如 8 位整数 (INT8) 或 4 位整数 (INT4)。模型量化的主要目的是减少模型的内存占用、提高推理速度并降低能耗,使其更易于部署在资源受限的设备上,如移动设备或边缘服务器。
模型量化通过减少表示模型参数所需的比特数来实现这些目标。从数学角度看,量化过程可以表示为将浮点值映射到整数值的过程。对于线性量化,这一过程可以用以下公式表示
该技术的数学本质是通过线性映射将浮点值域$[r_{\text{min}}, r_{\text{max}}]$映射到整数空间,其量化与反量化过程可表示为
\begin{equation}
q = \text{round}\left(\frac{r - r_{\text{min}}}{s}\right)
\begin{aligned}
q &= \text{round}\left(\frac{r - r_{\text{min}}}{s}\right) \\
\hat{r} &= s \cdot q + r_{\text{min}}
\end{aligned}
\end{equation}
其中,$q$ 是量化后的整数值,$r$ 是原始浮点值,$r_{\text{min}}$ 是浮点值的最小值,$s$ 是量化比例因子scale factor。反量化过程则可以表示为
\begin{equation}
\hat{r} = s \cdot q + r_{\text{min}}
\end{equation}
其中,$\hat{r}$ 是反量化后的浮点值,通常与原始值 $r$ 存在一定的量化误差 $\epsilon = r - \hat{r}$
其中$s=(r_{\text{max}}-r_{\text{min}})/(2^n-1)$为量化步长,$n$为量化位数,$\epsilon=r-\hat{r}$为量化误差。
这种转换显著降低了存储模型所需的内存空间,并且由于低精度运算通常比高精度运算更快,因此可以提高模型的推理速度。此外,更快的计算和减少的内存访问通常会降低功耗,这对于电池供电的设备尤其重要。
模型量化有多种不同的技术,主要可分为以下几类:
\textbf{训练后量化 (Post-Training Quantization, PTQ)}:这种方法在模型完成训练后应用量化,将模型权重从浮点表示转换为低精度定点整数,无需重新训练。对于权重 $W$ 的线性量化可表示为:
\begin{equation}
W_q = \text{round}\left(\frac{W - W_{\text{min}}}{s_W}\right), \quad s_W = \frac{W_{\text{max}} - W_{\text{min}}}{2^n - 1}
\end{equation}
其中,$W_q$ 是量化后的权重,$n$ 是量化位数(如 INT8 中的 8$s_W$ 是量化比例因子。PTQ 实现简单快捷但可能导致一定性能下降。PTQ 可进一步分为静态量化和动态量化。静态量化在量化时使用校准数据确定激活值范围并适当缩放。动态量化仅量化权重,而激活在推理期间保持较高精度,并根据运行时观察到的范围动态量化。
\textbf{量化感知训练 (Quantization-Aware Training, QAT)}这种方法在模型预训练或微调期间引入权重转换允许模型在训练过程中适应低精度表示。在前向传播过程中QAT 使用量化操作的可微分近似:
\begin{equation}
\tilde{W} = W + \text{stop\_gradient}(\text{fake\_quant}(W) - W)
\end{equation}
其中,$\text{fake\_quant}$ 是量化-反量化操作,$\text{stop\_gradient}$ 确保梯度不通过量化操作传播。QAT 通常比 PTQ 产生更高性能,但需要大量计算资源和代表性训练数据。
\textbf{权重共享 (Weight Sharing)}:涉及对相似权重进行聚类并共享相同的量化值,减少唯一权重数量,进一步压缩模型。对于 $k$ 个聚类中心 $C = \{c_1, c_2, \ldots, c_k\}$,权重 $W$ 被映射到最近的聚类中心:
\begin{equation}
W_q = \arg\min_{c \in C} ||W - c||^2
\end{equation}
\textbf{混合精度量化 (Mixed Precision Quantization)}:在训练或推理过程中使用不同数值精度的组合(例如 FP16 和 FP32以在性能和精度之间取得平衡。
\textbf{二值化和三值化 (Binary and Ternary Quantization)}:将权重分别量化为两个值(+1 和 -1或三个值+1、0 和 -1是极端的量化形式。二值化可表示为
\begin{equation}
W_b = \text{sign}(W) = \begin{cases}
+1, & \text{if } W \geq 0 \\
-1, & \text{if } W < 0
\end{cases}
\end{equation}
这些极端量化形式显著减小模型尺寸和计算复杂度的同时,精度下降也更明显。
不同的量化级别(如 INT8 和 INT4对模型性能和资源消耗影响不同。一般来说更低的量化级别例如从 INT8 到 INT4可以进一步减少模型大小并提高推理速度但通常会导致更大精度损失。量化误差可以通过以下方式进行分析
\begin{equation}
\epsilon = W - \hat{W} = W - (s_W \cdot W_q + W_{\text{min}})
\end{equation}
其中,$\epsilon$ 是量化误差,$W$ 是原始权重,$\hat{W}$ 是反量化后的权重。对于均匀分布的权重,量化误差的方差可以近似为:
\begin{equation}
\text{Var}(\epsilon) \approx \frac{s_W^2}{12}
\end{equation}
这表明量化比例因子 $s_W$ 越大,量化误差也越大。对于 $n$ 位量化,内存占用和原始 32 位浮点表示相比可以减少:
\begin{equation}
\text{内存减少比例} = \frac{32 - n}{32} \times 100\%
\end{equation}
例如8 位量化可以减少 75\% 的内存占用,而 4 位量化可以减少 87.5\% 的内存占用。
不同的量化级别(如 INT8 和 INT4对模型性能和资源消耗影响不同。一般来说更低的量化级别例如从 INT8 到 INT4可以进一步减少模型大小并提高推理速度但通常会导致更大精度损失。量化误差分析表明当权重服从均匀分布时误差方差$\text{Var}(\epsilon)\approx s_W^2/12$,与量化步长平方成正比。内存优化效果可通过压缩比$(32-n)/32$量化,例如:
\begin{itemize}
\item INT875\% 内存压缩
\item INT487.5\% 内存压缩
\end{itemize}
INT8 量化通常被认为是性能和精度之间的良好折衷方案可在保持较高模型准确性的同时显著降低内存占用和提高推理速度。INT4 量化更为激进,可实现更高压缩率和更快速度,但通常伴随更明显精度下降,更适用于对资源限制非常严格但对精度要求相对较低的场景。选择合适的量化技术和级别需要在模型大小、推理速度和精度之间进行权衡,通常取决于具体应用场景和硬件条件。
@ -162,7 +78,7 @@ SFT的``监督''特性体现在其训练数据的形式上。与预训练阶段
采用SFT的主要目的在于提升模型在特定领域的性能表现和任务遵循能力。预训练模型虽然知识广博但在特定专业领域或具体任务上的表现可能不够精确或不符合特定规范。通过在相关的高质量标注数据上进行微调可以有效地向模型注入领域知识提升其回答的准确性和相关性。同时SFT也是引导模型学习遵循特定指令、模仿某种对话风格或角色的重要手段使其行为更加符合人类预期从而更好地服务于实际应用需求。因此SFT是连接通用预训练模型与特定应用场景的关键桥梁是使大模型``落地''不可或缺的技术步骤。在本研究中我们采用SFT技术来定制化训练语言模型以满足特定交互任务的需求。
\subsection{QLoRA 微调方法}
QLoRAQuantization-aware Low-Rank Adaptation是一种高效微调大语言模型LLMs的方法它结合了量化和低秩自适应技术旨在在资源受限的情况下实现与全精度微调相当的性能。QLoRA 的主要原理是在微调过程中冻结预训练 LLM 的权重并将其量化为 4 位精度然后引入少量可训练的低秩适配器Low-Rank Adapters, LoRA。微调期间梯度通过冻结的 4 位量化预训练语言模型反向传播到这些低秩适配器中。
QLoRA是一种高效微调大语言模型LLMs的方法它结合了量化和低秩自适应技术旨在在资源受限的情况下实现与全精度微调相当的性能。QLoRA 的主要原理是在微调过程中冻结预训练 LLM 的权重并将其量化为 4 位精度然后引入少量可训练的低秩适配器Low-Rank Adapters, LoRA。微调期间梯度通过冻结的 4 位量化预训练语言模型反向传播到这些低秩适配器中。
QLoRA 引入了多项创新技术以在节省内存的同时不牺牲性能。首先是 4 位 NormalFloat (NF4) 数据类型,这是一种专为正态分布权重设计的新数据类型,在信息论上最优,并在实证研究中优于 4 位整数和 4 位浮点数。NF4 基于分位数化,确保每个量化区间分配相等数量的输入张量值,从而有效利用内存。其次是双重量化 (Double Quantization),通过对第一步量化的量化常数再次进行量化,进一步减少平均内存占用,在不显著损失性能的情况下节省额外内存。最后是分页优化器 (Paged Optimizers),利用 NVIDIA 统一内存特性管理训练期间的内存峰值,特别是在处理长序列的小批量数据时,从而避免内存不足错误。
@ -176,11 +92,11 @@ QLoRA 的主要优势在于其能够在资源受限情况下实现高效微调
其中,$W_0 \in \mathbb{R}^{d \times k}$ 是预训练模型中的原始权重矩阵,$\Delta W = BA$ 是低秩更新,$B \in \mathbb{R}^{d \times r}$$A \in \mathbb{R}^{r \times k}$,且秩 $r \ll \min(d, k)$。通过这种方式,原本需要训练 $d \times k$ 个参数,现在只需要训练 $r \times (d + k)$ 个参数。例如,当 $d = k = 1000$$r = 8$ 时,可训练参数数量从 $10^6$ 减少到约 $1.6 \times 10^4$,减少了约 98.4\%
微调过程中仅更新这些低秩矩阵的参数原始模型的权重保持不变。这大大减少了需要训练的参数数量从而降低了计算成本和内存需求。LoRA 的线性设计也确保与完全微调的模型相比,不会引入额外推理延迟。在推理阶段,可以将低秩更新与原始权重合并:$W = W_0 + BA$从而不增加模型的推理延迟。QLoRA 通过结合量化和 LoRA为在资源受限环境中高效微调大语言模型提供了有力方法,使得研究人员和从业人员能够更容易利用和定制最先进的 LLM推动 NLP 领域进一步发展。
微调过程中仅更新这些低秩矩阵的参数原始模型的权重保持不变。这大大减少了需要训练的参数数量从而降低了计算成本和内存需求。LoRA 的线性设计也确保与完全微调的模型相比,不会引入额外推理延迟。在推理阶段,可以将低秩更新与原始权重合并:$W = W_0 + BA$从而不增加模型的推理延迟。QLoRA 通过结合量化和 LoRA为在资源受限环境中高效微调大语言模型提供了有力方法使得研究人员和从业人员能够更容易利用和定制最先进的 LLM推动 NLP 领域进一步发展。
\subsection{Unsloth 算子}
Unsloth 是一个开源软件,旨在简化大语言模型LLMs的微调过程。它提供用户友好的界面和强大功能可帮助 AI 开发初学者和专家轻松管理资源、优化性能并集成各种 AI 工具以提高模型准确性。Unsloth 的核心优势在于其能够显著加速 LLM 的训练和推理过程,同时降低内存使用。
Unsloth 是一个开源软件旨在简化大语言模型LLMs的微调过程。它提供用户友好的界面和强大功能可帮助 AI 开发初学者和专家轻松管理资源、优化性能并集成各种 AI 工具以提高模型准确性。Unsloth 的核心优势在于其能够显著加速 LLM 的训练和推理过程,同时降低内存使用。
Unsloth 通过手动推导所有计算密集型数学步骤并编写自定义 GPU 内核来实现加速,而无需更改硬件。它支持 NVIDIA 自 2018 年以来的各种 GPU包括 Tesla T4 到 H100并可移植到 AMD 和英特尔 GPU。Unsloth 还与 Hugging Face 的 Transformers 库无缝集成,并支持其 TRL、Trainer 和 Seq2SeqTrainer 类。

View File

@ -55,19 +55,19 @@
本实验采用DeepSeek V3作为数据集生成模型该模型是深度求索公司开发的新一代大语言模型具有以下特点
\begin{itemize}
\item 性能表现:在MT-Bench等基准测试中达到开源模型领先水平推理速度优于同规模模型30\%以上
\item 上下文窗口:在理论上支持 128K tokens 的上下文长度。不过在实际应用中,部分服务商可能会出于硬件或性能优化等考虑,将其限制在 64K tokens
\item 性能表现:在 Codeforces 基准测试中DeepSeek V3 取得了 51.6 分的成绩,刷新了该领域的 SOTA 水平。在 LiveCodeBenchPass@1 - COT测试中得分为 40.5,在 LiveCodeBenchPass@1测试中成绩为 37.6,均表现出色
\item 上下文窗口:在理论上支持 128K tokens 的上下文长度。不过在实际应用中,部分服务商可能会出于硬件或性能优化等考虑,将其限制在 64K tokens
\item 开源许可采用MIT许可协议允许学术研究。
\end{itemize}
数据集生成模型通过deepseek ai官方API调用具体的生成参数如下
数据集生成模型通过Deepseek ai官方API调用具体的生成参数如下
\begin{itemize}
\item temperature0.9
\item temperature1.0
\item max\_length4096
\end{itemize}
\subsubsection{仓库文档选择}
本实验使用unsloth官方仓库文档(\url{https://docs.unsloth.ai/})进行微调。在训练前,大模型并不了解该项目,如图\ref{fig:before_train}所示。
本实验使用unsloth官方仓库文档\href{https://docs.unsloth.ai/}{https://docs.unsloth.ai/}进行微调。在训练前,大模型并不了解该项目,如图\ref{fig:before_train}所示。
\begin{figure}[htbp]
\centering
@ -107,22 +107,94 @@
\end{figure}
\subsubsection{训练指标变化}
图~\ref{fig:tensorboard} 展示了使用TensorBoard对训练过程中的损失、梯度、学习率等指标进行实时监控有助于及时发现训练异常并优化模型参数配置。
微调过程中,主要训练指标的变化趋势如图\ref{fig:training_metrics}所示。从图中可以观察到以下几个关键特征:
% TensorBoard 监控截图
\begin{figure}[htbp]
\centering
\includegraphics[width=0.8\textwidth]{pic/training_metrics.png}
\includegraphics[width=0.8\textwidth]{pic/tensorboard.png}
\caption{使用TensorBoard实时监控训练指标变化}
\label{fig:tensorboard}
\end{figure}
微调过程中,主要训练指标的变化趋势如图\ref{fig:training_metrics}所示,包括损失值(图\ref{fig:loss_metrics})、梯度范数(图\ref{fig:grad_norm_metrics})和学习率(图\ref{fig:learning_rate_metrics})三个关键指标。从这些图表中可以观察到以下几个关键特征:
\pgfplotsset{compat=1.18}
\begin{figure}[htbp]
\centering
\begin{subfigure}[b]{0.8\textwidth}
\centering
\begin{tikzpicture}
\begin{axis}[
width=\textwidth,
height=5cm,
xlabel={训练步数 (Step)},
ylabel={损失值 (Loss)},
xmin=0, xmax=7029,
ymin=0, ymax=2.5,
ymajorgrids=true,
grid style=dashed,
]
\addplot[smooth, thick, blue] table[x=Step, y=loss, col sep=comma] {./figures/training_data.csv};
\end{axis}
\end{tikzpicture}
\caption{损失值变化趋势}
\label{fig:loss_metrics}
\end{subfigure}
\begin{subfigure}[b]{0.8\textwidth}
\centering
\begin{tikzpicture}
\begin{axis}[
width=\textwidth,
height=5cm,
xlabel={训练步数 (Step)},
ylabel={梯度范数 (Grad Norm)},
xmin=0, xmax=7029,
ymin=0, ymax=1.8,
ymajorgrids=true,
grid style=dashed,
]
\addplot[smooth, thick, red] table[x=Step, y=grad_norm, col sep=comma] {./figures/training_data.csv};
\end{axis}
\end{tikzpicture}
\caption{梯度范数变化趋势}
\label{fig:grad_norm_metrics}
\end{subfigure}
\begin{subfigure}[b]{0.8\textwidth}
\centering
\begin{tikzpicture}
\begin{axis}[
width=\textwidth,
height=5cm,
xlabel={训练步数 (Step)},
ylabel={学习率 (Learning Rate)},
xmin=0, xmax=7029,
ymin=0, ymax=0.0002,
ymajorgrids=true,
grid style=dashed,
]
\addplot[smooth, thick, green!60!black] table[x=Step, y=learning_rate, col sep=comma] {./figures/training_data.csv};
\end{axis}
\end{tikzpicture}
\caption{学习率变化趋势}
\label{fig:learning_rate_metrics}
\end{subfigure}
\caption{模型微调过程中的训练指标变化趋势}
\label{fig:training_metrics}
\end{figure}
\begin{itemize}
\item \textbf{梯度范数Gradient Norm}训练初期梯度范数在0.5到1.5之间波动表明参数更新幅度较大。随着训练步数的增加梯度范数逐渐减小并在约4000步后稳定在0.1到0.5之间,这与损失函数的下降趋势一致,表明模型正在趋于收敛,参数更新的步伐减缓。
\item \textbf{损失函数Loss}:如图\ref{fig:loss_metrics}所示训练初期损失值从约2.4迅速下降。在约1000步时降至0.5以下随后继续缓慢下降。在大约5000步后损失值稳定在接近于零的水平表明模型在训练集上已经取得了很好的性能基本收敛
\item \textbf{损失函数Loss}训练初期损失值从约2.4迅速下降。在约1000步时降至0.5以下随后继续缓慢下降。在大约5000步后损失值稳定在接近于零的水平表明模型在训练集上已经取得了很好的性能基本收敛。
\item \textbf{梯度范数Gradient Norm}:如图\ref{fig:grad_norm_metrics}所示训练初期梯度范数在0.5到1.5之间波动表明参数更新幅度较大。随着训练步数的增加梯度范数逐渐减小并在约4000步后稳定在0.1到0.5之间,这与损失函数的下降趋势一致,表明模型正在趋于收敛,参数更新的步伐减缓
\item \textbf{学习率Learning Rate}学习率采用线性衰减策略从初始值约0.0002或2e-4随着训练步数的增加而稳定地线性降低直至训练结束时接近于零。这种策略有助于在训练初期快速探索解空间并在后期精细调整参数以促进模型稳定收敛。
\item \textbf{学习率Learning Rate}如图\ref{fig:learning_rate_metrics}所示,学习率采用线性衰减策略从初始值约0.0002或2e-4随着训练步数的增加而稳定地线性降低直至训练结束时接近于零。这种策略有助于在训练初期快速探索解空间并在后期精细调整参数以促进模型稳定收敛。
\item \textbf{训练效率}整个微调过程耗时约5.5小时平均每步训练时间约3秒展现了本框架在资源受限环境下的高效性。特别是在训练后期尽管学习率降低模型仍能持续优化损失值稳步下降表明LoRA微调方法的有效性。
\end{itemize}

View File

@ -0,0 +1,34 @@
\begin{table}[!ht]
\centering
\caption{LLM 发展中的关键里程碑事件}
\label{tab:llm_milestones}
\begin{tabular}{>{\centering\arraybackslash}p{1.5cm}>{\centering\arraybackslash}p{2.8cm}p{10cm}}
\toprule
\rowcolor[gray]{0.9} \textbf{年份} & \textbf{里程碑} & \textbf{重要性} \\
\midrule
1966 & ELIZA & 第一个使用 NLP 的聊天机器人,基于关键词模拟对话。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2017 & Transformer 架构 & 引入自注意力机制和平行处理,使得模型更加高效和上下文感知。 \\
\addlinespace[0.5ex]
2018 & BERT & 第一个突破性的 LLM在自然语言理解方面取得了显著进展。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2018 & GPT-1 & 第一个使用 Transformer 架构进行生成文本的概念验证。 \\
\addlinespace[0.5ex]
2019 & GPT-2 & 展示了生成令人信服的文本的能力,引发了关于潜在滥用的担忧。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2020 & GPT-3 & 参数规模显著增大1750 亿),展示了前所未有的语言理解和生成能力,成为 ChatGPT 的基础。 \\
\addlinespace[0.5ex]
2022 & ChatGPT & 面向消费者的应用程序,凭借其对话能力使 LLM 引起了主流关注。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2023 & GPT-4 & 多模态模型,具有更高的准确性和推理能力。 \\
\addlinespace[0.5ex]
2023 & LLaMA & 流行的开源 LLM推动了 AI 的普及。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2025 & DeepSeek-R1 & 在美国境外开发的高性能开源推理模型,凸显了 LLM 开发领域日益激烈的全球竞争。 \\
\addlinespace[0.5ex]
2025 & Claude 3 & GPT 模型的竞争者,强调乐于助人、诚实和无害,具有强大的推理和多模态能力。 \\
\addlinespace[0.5ex]
\rowcolor[gray]{0.95} 2025 & Gemini & 一系列多模态 AI 模型,旨在跨不同设备运行并涵盖广泛的用途,包括推理。 \\
\bottomrule
\end{tabular}
\end{table}

View File

@ -3,12 +3,12 @@
\usepackage{graphicx}
\usepackage{ctex}
\usepackage{indentfirst}
\usepackage{subcaption}
%\graphicspath{{chapter/}{figures/}}
\usepackage{CJK}
\usepackage{amsmath}%数学
\usepackage{amssymb}%数学符号
%\usepackage[colorlinks,linkcolor=red]{hyperref}%超链接
\usepackage{pgfplots}
\usepackage{fancyhdr} %使用fancyhdr包自定义页眉页脚
%\pagestyle{empty}
\pagestyle{fancy}
@ -17,12 +17,12 @@
\usepackage{titlesec}%设置章节标题与正文间距为2行
\titlespacing{\section}{0pt}{0pt}{2em}
\usepackage{enumerate}%项目编号
%\usepackage{enumerate}%项目编号
\renewcommand{\figurename}{}%将figure改为图
\usepackage[]{caption2}%去掉图片编号后的":"
\renewcommand{\captionlabeldelim}{}
\usepackage{caption}%去掉图片编号后的":"
\captionsetup{labelformat=simple, labelsep=space}
\renewcommand {\thefigure} {\thesection{}.\arabic{figure}}%图片索引该为按照章节
@ -45,7 +45,7 @@
\usepackage{multirow}%跨行表格
\usepackage{abstract}%摘要
\usepackage{setspace} %行间距的宏包
%\usepackage{setspace} %行间距的宏包
\usepackage{makecell}%表格竖线连续
@ -61,12 +61,6 @@
\makeatother
\usepackage{float}%可以用于禁止浮动体浮动
%目录超链接
\usepackage[colorlinks,linkcolor=black,anchorcolor=blue,citecolor=black]{hyperref}
\usepackage{listings}%可以插入代码
\usepackage[table]{xcolor}%语法高亮支持
@ -74,7 +68,14 @@
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\usepackage{fontspec}
\setCJKfamilyfont{fzkaiti}[
AutoFakeBold = 1.2, % 加粗强度
ItalicFont = 方正楷体_GBK.TTF % 防止斜体切换异常(非必须)
]{方正楷体_GBK.TTF}
\setmonofont{Consolas}
\lstset{ %
numbers=left,
@ -107,6 +108,10 @@
% 设置页面格式
\usepackage[left=3.0cm, right=2.6cm, top=2.54cm, bottom=2.54cm]{geometry}
%目录超链接
\usepackage[hidelinks,linkcolor=black,citecolor=black]{hyperref}
\begin{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View File

@ -1,44 +0,0 @@
import pandas as pd
import matplotlib.pyplot as plt
# 设置全局字体大小
plt.rcParams.update({
'font.size': 16, # 全局字体大小
'axes.titlesize': 20, # 标题字体大小
'axes.labelsize': 16, # 坐标轴标签字体大小
'xtick.labelsize': 14, # x轴刻度标签字体大小
'ytick.labelsize': 14, # y轴刻度标签字体大小
'legend.fontsize': 14, # 图例字体大小
})
# 读取CSV文件
data = pd.read_csv('training_data.csv')
# 创建图表
plt.figure(figsize=(12, 12))
# 绘制梯度范数变化曲线
plt.subplot(3, 1, 1) # 修改为 3行1列的第1个
plt.plot(data['Step'], data['grad_norm'], label='Gradient Norm')
plt.xlabel('Step')
plt.ylabel('Gradient Norm')
plt.legend()
# 绘制损失值变化曲线
plt.subplot(3, 1, 2) # 修改为 3行1列的第2个
plt.plot(data['Step'], data['loss'], label='Loss', color='orange')
plt.xlabel('Step')
plt.ylabel('Loss')
plt.legend()
# 绘制学习率变化曲线
plt.subplot(3, 1, 3) # 修改为 3行1列的第3个
plt.plot(data['Step'], data['learning_rate'], label='Learning Rate', color='green')
plt.xlabel('Step')
plt.ylabel('Learning Rate')
plt.legend()
# 调整布局并保存图片
plt.tight_layout()
plt.savefig('training_metrics.png')
plt.show()