首页 > 编程笔记 > 通用技能 阅读:2

大模型的开发流程(非常详细)

大模型的开发流程如下图所示:


图 1 大模型的开发流程

在大模型开发初期,首先,明确项目目标并构建系统框架。这涉及选择合适的模型架构、算法、数据集等。其次,根据任务的类型,对数据集进行收集和预处理。随着任务类型的多样化,数据集的收集和预处理变得尤为关键,它们直接影响大模型的性能和准确性。

业界提供的丰富的开源模型资源可以大大减轻开发者在模型设计方面的工作负担。开发者可以在模型组合、参数调优、损失函数设计等方面集中更多精力,以进行与项目契合的改进与优化。

模型训练是一个复杂而精细的过程,可分为分词器训练、预训练和微调 3 个步骤。以 BERT 模型为例,在预训练阶段注重让模型学习广泛的基础知识,以便为其后续的任务打下坚实的基础,而在微调阶段则更加专注于提升模型在特定任务上的专项能力。这种“预训练+微调”的模式已经成为大模型开发中经典、有效的范式之一。通过这种方式,我们可以更加高效地利用模型的学习能力,使其在各类任务中展示最佳的性能。

模型部署涉及将预训练的模型应用到相关场景,需要考虑模型提供的推理服务能否满足用户的实际需求。

确定项目目标

对于大模型的开发,确定项目目标至关重要。它不仅是整个开发流程的起点,而且为后续的数据准备、模型设计、模型训练等提供了明确的方向。在开发大模型前,应先明确模型需要解决的具体问题,只有这样,才能选择合适的模型和训练数据,进而设计出高效且符合需求的系统框架。

以金融任务为例,假设项目目标为在有限的硬件资源下构建财务问答系统。由于这项任务主要涉及文字处理与生成,因此可以选用参数规模适中的开源大模型,如 ChatGLM3-6B、LLaMA2-7B、Baichuan2-13B 等。这些模型在保持较高性能的同时,对硬件资源的需求相对较低,更适合目标场景。

在数据准备方面,我们可以使用人工标注的公司年报和金融知识等数据。这些数据与项目目标高度相关,可以提升模型的训练效果。为了进一步提高数据标注的效率,可以将大模型作为数据集构造器,通过让其学习少量标注数据的内容和形式自动扩充数据集,从而为该项目提供更多的训练样本。

在模型训练方面,以 P-tuning v2、QLoRA 等高效微调技术对模型进行训练。这些技术能够在有限的训练数据下实现快速且有效的模型微调。

对上述构思进行归纳与整理,便可以得到完整的财务问答系统的框架,如下图所示:


图 2 财务问答系统的框架

需要说明的是,这里使用了少量标准格式的数据来引导模型的输出格式。这种方式可以确保模型在生成回答时能够遵循一定的结构和规范,从而提升生成内容的可读性和准确性。这也体现了提示工程在大模型开发中的重要作用。

图 2 给出了简单的系统框架,其中涉及的各项技术这里不再展开讲解。以项目目标为核心,设计行之有效、结构合理的系统框架是大模型获得成功的关键。

数据准备

大模型常用的数据类型包括监督数据、指令数据、对话数据、人类反馈数据等:

图 3 北京大学开源的PKU-SafeRLHF数据集

数据处理涵盖数据收集和数据预处理过程。按照训练所需,开发者可以从网络、公开数据集、用户生成数据、公司内部数据等途径获取数据。数据类型涵盖图片、文字、音频等。

数据预处理是提高模型性能和减少可能错误的重要步骤。如下图所示,以文本数据为例,开发者需要对原始数据包含的缺失值、重复值、异常值等进行处理,并使用分词器将文本数据转化为模型可以接收的数据类型。针对图像数据,一般采用图像去噪、图像重采样和图像增强等技术,以提升图像数据质量。


图 4 文本数据预处理流程

模型设计

模型设计是大模型开发的关键步骤,需要结合项目目标、数据特征以选择合适的模型。Transformer 架构是大模型开发的基石。而对于多模态任务,Visual Transformer 是模型开发常用的视觉模块。


图 5 模型设计过程

如上图所示,模型设计过程一般包含 5 个步骤。在充分理解问题后,开发者需要选择合适的模型结构,设置学习率(学习率决定了模型在每次迭代时,根据损失函数的梯度对权重进行更新的幅度)、批次大小和迭代次数等超参数,通过正则化(如 L1/L2 正则化、Dropout 等,正则化用来降低模型的复杂度,防止过拟合)提高模型的泛化能力,并通过优化算法(如 SGD 优化器、Adam 优化器等)调整学习率。

对于模型效果的优劣,可以通过定义合理的评估指标来确定。常用的评估指标包括 Accuracy(精度)、Precision(查准率)、Recall(查全率)、F1分数、均方误差等。

小型开发团队或个人开发者在完成大多数的人工智能业务时已经无须从头构建模型,可以根据任务所需选择开源大模型如 LLaMA、ChatGLM、Alpaca 等。这种方式可以节省大量的模型设计时间,提升开发效率。

模型训练

大模型的训练过程一般包含分词器训练、预训练和微调3个基本步骤。如果需要使模型的输出更加无害,可以借助 RLHF、RLAIF 等技术使模型与人类的价值观对齐。

在进行预训练前,我们通常会选择开源模型作为基座。但大多数性能较强的国外开源大模型对中文的支持较差,相关工作如 Chinese-LLaMA-Alpaca 项目则尝试对在英文任务中表现优秀的 Alpaca 模型用中文语料进行二次预训练,希望实现由英文任务向中文任务的知识迁移。完成这项工作,需要在项目伊始进行分词器的词表扩充,将常见的汉字 Token 手动添加到原分词器中,重新对模型的 Embedding 层和 lm_head 层(预测下一个 Token 的输出层)的维度进行调整,并重新预训练。SentencePiece 是非常优秀的词表扩充工具。基于该工具,开发者可以按照不同的需求自行训练分词器,实现词表扩充。

预训练是指模型在大量的无标签数据上进行训练,以学习数据中的潜在规律和特征。为了方便进行预训练和微调,开发者可以选择 PyTorch 框架。

微调是将大模型应用于下游任务的主流技术。受限于高昂的训练成本,读者可酌情选用监督微调、PEFI 等高效微调技术。

模型部署

模型部署是指将大模型部署到实际应用场景的过程。在模型部署中,一般需要进行模型量化、知识蒸馏、模型剪枝等操作,以实现模型压缩,最大限度地减少模型依赖的硬件资源。

当将模型部署于真实业务场景时,需要考虑模型所提供的推理服务能否满足用户的实际需求,如吞吐量和时延等。

模型应用

模型应用是大模型开发流程中的最后一步。在这一步中,由于将会直接面对用户,因此选择合适的开发框架和前端工具,使人工智能应用具有良好的易用性、美观性十分重要。

Gradio 和 Streamlit 是两款主流的前端可视化工具,它们均可快速构建简洁、美观的 Web 应用,方便用户使用。

相关文章