finish 6.1.1
This commit is contained in:
23
docs/chapter6/6.1 模型预训练.md
Normal file
23
docs/chapter6/6.1 模型预训练.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# 6.1 模型预训练
|
||||
|
||||
在上一章,我们逐步拆解了 LLM 的模型结构及训练过程,从零手写实现了 LLaMA 模型结构及 Pretrain、SFT 全流程,更深入地理解了 LLM 的模型原理及训练细节。但是,在实际应用中,手写实现的 LLM 训练存在以下问题:
|
||||
|
||||
- 手写实现 LLM 结构工作量大,难以实时跟进最新模型的结构创新;
|
||||
- 从零实现的 LLM 训练无法较好地实现多卡分布式训练,训练效率较低;
|
||||
- 和现有预训练 LLM 不兼容,无法使用预训练好的模型参数
|
||||
|
||||
因此,在本章中,我们将介绍目前 LLM 领域的主流训练框架 transformers,并结合分布式框架 deepspeed、高效微调框架 peft 等主流框架,实践使用 transformers 进行模型 Pretrain、SFT 全流程,更好地对接业界的主流 LLM 技术方案。
|
||||
|
||||
## 6.1.1 框架介绍
|
||||
|
||||
transformers 是由 Hugging Face 开发的 NLP 框架,通过模块化设计实现了对 BERT、GPT、LLaMA、T5、ViT 等上百种主流模型架构的统一支持。通过使用 transformers,开发者无需重复实现基础网络结构,通过 AutoModel 类即可一键加载任意预训练。
|
||||
|
||||

|
||||
|
||||
同时,框架内置的 Trainer 类封装了分布式训练的核心逻辑,支持 PyTorch 原生 DDP、DeepSpeed、Megatron-LM 等多种分布式训练策略。通过简单配置训练参数,即可实现数据并行、模型并行、流水线并行的混合并行训练,在 8 卡 A100 集群上可轻松支持百亿参数模型的高效训练。配合SavingPolicy和LoggingCallback等组件,实现了训练过程的自动化管理。其还支持与 Deepspeed、peft、wandb 等框架进行集成,直接通过参数设置即可无缝对接,从而快速、高效实现 LLM 训练。
|
||||
|
||||
对 LLM 时代的 NLP 研究者更为重要的是,HuggingFace 基于 transformers 框架搭建了其庞大的 AI 社区,开放了数亿个预训练模型参数、25万+不同类型数据集,通过 transformers、dataset、evaluate 等多个框架实现对预训练模型、数据集及评估函数的集成,从而帮助开发者可以便捷地使用任一预训练模型,在开源模型及数据集的基础上便捷地实现个人模型的开发与应用。
|
||||
|
||||

|
||||
|
||||
在 LLM 时代,模型结构的调整和重新预训练越来越少,开发者更多的业务应用在于使用预训练好的 LLM 进行 Post Train 和 SFT,来支持自己的下游业务应用。且由于预训练模型体量大,便捷集成 deepspeed 等分布式训练框架逐渐成为 LLM 时代 NLP 模型训练的必备技能。因此,transformers 已逐步成为学界、业界 NLP 技术的主流框架,不管是企业业务开发还是科研研究,都逐渐首选 transformers 进行模型实现。同时,新发布的开源 LLM 如 DeepSeek、Qwen 也都会第一时间在 transformers 社区开放其预训练权重与模型调用 Demo。通过使用 transformers 框架,可以高效、便捷地完成 LLM 训练及开发,实现工业级的产出交付。接下来,我们就会以 transformers 框架为基础,介绍如何通过 transformers 框架实现 LLM 的 Pretrain 及 SFT。
|
||||
@@ -1,42 +0,0 @@
|
||||
[
|
||||
{"question":"什么是神经网络?", "chosen":"神经网络是一种模拟人脑神经结构的计算模型,通常用于处理复杂的模式识别和分类任务。","rejected":"神经网络用于处理数据。"},
|
||||
{"question":"如何选择合适的机器学习模型?", "chosen":"选择合适的机器学习模型可以通过考虑问题的特性、数据量和模型的复杂性来实现。","rejected":"选择合适的模型是很重要的。"},
|
||||
{"question":"什么是特征工程?", "chosen":"特征工程是机器学习中准备数据的一步,包括选择、提取和转换输入特征。","rejected":"特征工程是机器学习的一部分。"},
|
||||
{"question":"Python适合初学者吗?", "chosen":"Python非常适合初学者,因为其代码简洁易读,并且拥有广泛的社区支持。","rejected":"Python适合初学者。"},
|
||||
{"question":"什么是监督学习?", "chosen":"监督学习是一种机器学习方法,其中模型通过已知的输入输出对进行训练,以预测未知数据的结果。","rejected":"监督学习是机器学习的一种方法。"},
|
||||
{"question":"如何实现数据可视化?", "chosen":"数据可视化可以通过使用Matplotlib、Seaborn或其他可视化库来生成图表和图形。","rejected":"数据可以用图形展示。"},
|
||||
{"question":"Python有哪些常用的库?", "chosen":"Python常用的库包括NumPy用于数值计算,Pandas用于数据处理,以及Matplotlib用于可视化。","rejected":"Python有很多库。"},
|
||||
{"question":"什么是无监督学习?", "chosen":"无监督学习是一种机器学习方法,通过分析数据的内在结构进行模式识别和聚类,而无需已标记的数据。","rejected":"无监督学习不需要标签。"},
|
||||
{"question":"如何处理数据的缺失值?", "chosen":"处理缺失值的方法包括删除含有缺失值的记录、用均值填充缺失值或使用预测模型进行插补。","rejected":"缺失值需要被处理。"},
|
||||
{"question":"什么是支持向量机?", "chosen":"支持向量机是一种用于分类和回归分析的监督学习算法,通过在高维空间中寻找最佳分隔超平面实现。","rejected":"支持向量机是一种算法。"},
|
||||
{"question":"深度学习中的反向传播是什么?", "chosen":"反向传播是一种用于训练神经网络的算法,通过计算损失函数的梯度调整权重。","rejected":"反向传播用于训练网络。"},
|
||||
{"question":"如何评价机器学习模型的性能?", "chosen":"模型的性能可以通过准确率、精确率、召回率和F1分数等指标进行评价。","rejected":"模型性能需要被评估。"},
|
||||
{"question":"Python如何管理包和依赖?", "chosen":"Python使用工具如pip或conda来管理包和依赖,方便安装和更新。","rejected":"Python用pip管理包。"},
|
||||
{"question":"如何提升深度学习模型的性能?", "chosen":"提升深度学习模型的性能可以通过架构调整、数据扩增和优化算法调整等实现。","rejected":"模型性能可以被提高。"},
|
||||
{"question":"什么是数据标准化?", "chosen":"数据标准化是调整数据尺度的方法,将特征调整到同一范围以提高模型训练效果。","rejected":"标准化用于调整数据。"},
|
||||
{"question":"机器学习中的过拟合是什么?", "chosen":"过拟合是指模型在训练集上表现良好,但在未见数据上效果不佳,通常由于模型过于复杂。","rejected":"过拟合影响模型性能。"},
|
||||
{"question":"什么是逻辑回归?", "chosen":"逻辑回归是一种用于分类问题的回归分析方法,通过逻辑函数将输入映射到一个概率。","rejected":"逻辑回归用于分类。"},
|
||||
{"question":"如何处理数据中的异常值?", "chosen":"处理异常值的方法包括删除异常值、替换或对其进行数据转换。","rejected":"异常值需要被处理。"},
|
||||
{"question":"Python的面向对象编程特性怎么样?", "chosen":"Python支持面向对象编程,允许定义类和对象并支持继承和多态。","rejected":"Python支持OOP。"},
|
||||
{"question":"有什么方法可以提高机器学习模型的泛化能力?", "chosen":"可以通过降低模型复杂度、使用正则化、以及增加训练数据等方法来提高模型的泛化能力。","rejected":"泛化能力需要被提高。"},
|
||||
{"question":"什么是卷积神经网络(CNN)?", "chosen":"卷积神经网络是一种专门用于处理具有网格数据的深度学习算法,广泛应用于图像和视频识别。","rejected":"卷积神经网络用于图像处理。"},
|
||||
{"question":"如何评估回归模型的性能?", "chosen":"回归模型的性能可以通过均方误差(MSE)、均方根误差(RMSE)和R^2分数等指标进行评估。","rejected":"回归模型需要性能评估。"},
|
||||
{"question":"什么是特征选择?", "chosen":"特征选择是在训练模型之前选择最具信息量的特征,以提高模型的性能并减少复杂度。","rejected":"特征选择能提升性能。"},
|
||||
{"question":"如何使用Python进行文本分析?", "chosen":"可以使用Python的NLTK或spaCy库进行文本分析,处理自然语言数据。","rejected":"Python用于文本分析。"},
|
||||
{"question":"机器学习中的泛化是什么?", "chosen":"泛化是指模型在处理未见数据时的表现,是评价模型性能的重要标准。","rejected":"泛化影响模型性能。"},
|
||||
{"question":"什么是随机森林?", "chosen":"随机森林是一种集成学习方法,通过构建多棵决策树来提高分类或回归性能。","rejected":"随机森林是集成方法。"},
|
||||
{"question":"如何处理数据中的类别变量?", "chosen":"处理类别变量可以采用编码方法如独热编码或标签编码,将类别转换为数值形式。","rejected":"类别变量需要编码。"},
|
||||
{"question":"什么是梯度下降算法?", "chosen":"梯度下降是一种优化算法,用于通过不断调整参数以最小化损失函数。","rejected":"梯度下降用于优化。"},
|
||||
{"question":"为什么使用正则化技术?", "chosen":"正则化用于减少模型的过拟合,通过在损失函数中增加惩罚项限制权重的大小。","rejected":"正则化减少过拟合。"},
|
||||
{"question":"如何处理时间序列数据?", "chosen":"处理时间序列数据时,通常需要考虑时间依赖性,可能使用平滑、差分等技术来提高分析效果。","rejected":"时间序列需要特殊处理。"},
|
||||
{"question":"什么是集成学习?", "chosen":"集成学习是一种将多个学习器结合以提高整体预测性能的机器学习方法。","rejected":"集成学习结合多模型。"},
|
||||
{"question":"如何通过Python实现自动化测试?", "chosen":"可以使用Python的unittest或pytest库实现自动化测试,以保证代码质量。","rejected":"Python可以测试代码。"},
|
||||
{"question":"什么是主成分分析(PCA)?", "chosen":"主成分分析是一种降维技术,通过对数据进行线性变换来提取主要特征。","rejected":"PCA用于降维。"},
|
||||
{"question":"如何提升算法的计算效率?", "chosen":"可以通过优化算法实现、利用并行计算、以及高效的数据结构来提升计算效率。","rejected":"计算效率需要提升。"},
|
||||
{"question":"什么是生物信息学?", "chosen":"生物信息学是结合生物学和信息技术来处理生物数据的学科,涉及基因组、蛋白质组等领域的研究。","rejected":"生物信息学处理生物数据。"},
|
||||
{"question":"如何实现数据采样?", "chosen":"数据采样可以通过随机采样、分层采样等方法来从数据集中选择部分样本进行分析。","rejected":"数据采样用于选择样本。"},
|
||||
{"question":"金融科技的关键技术有哪些?", "chosen":"金融科技的关键技术包括区块链、人工智能、大数据分析和云计算。","rejected":"金融科技涉及技术。"},
|
||||
{"question":"Python的垃圾回收机制是什么?", "chosen":"Python的垃圾回收机制通过引用计数和垃圾回收器(GC)来管理内存释放。","rejected":"Python自动管理内存。"},
|
||||
{"question":"如何使用随机搜索调优超参数?", "chosen":"随机搜索通过在参数空间中随机选择一组参数组合来找到较优的模型配置。","rejected":"随机搜索优化参数。"},
|
||||
{"question":"什么是过采样和下采样?", "chosen":"过采样和下采样是处理不平衡数据集的方法,通过增加少数类样本或减少多数类样本来平衡类别分布。","rejected":"采样处理不平衡数据。"}
|
||||
]
|
||||
BIN
docs/chapter6/images/1-1.png
Normal file
BIN
docs/chapter6/images/1-1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 345 KiB |
BIN
docs/chapter6/images/1-2.png
Normal file
BIN
docs/chapter6/images/1-2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 638 KiB |
Reference in New Issue
Block a user