作为算法工程师的你是否对如何应用大型语言模型构建智能肿瘤问答系统充满好奇?是否希望深入探索LLaMA(类ChatGPT)模型的微调技术,进一步优化参数和使用不同微调方式?现在笔者会带您领略大模型训练与微调进阶之路,拓展您的技术边界!
通过阅读文章,读者将能够了解LLaMA(类ChatGPT) 微调的相关内容,并理解训练过程中的 Batch_size、数据类型、Zero 等参数设置以及 Lora 方式、Ptuning 方式等微调方式的应用。此外,读者将会了解优化器定义与参数的设定,同时了解和掌握监视器工具 Wandb 的使用。
除此之外,文章还会介绍包括数据准备、ChatGPT 数据生成流程等。对于微调方式,课程将分别以 Lora 方式、Ptuning 方式为例进行演示,并讲解合并 lora 参数与原始参数的方法、Fsdp 与 deepspeed 的全参数微调技巧等内容。最后,针对模型效果的测评,还将对相关指标进行说明和分析,帮助学员掌握有效评估模型性能的方法。
下面主要介绍几部分重点内容供大家参考和学习。
当单GPU单张卡无法支撑大模型的训练效率、无法放下一个大模型,当业务对训练速度有一定要求,需要成倍的提高训练效率的时候,就需要GPU集群的技术来处理。下面介绍几个多卡训练的知识点。
半精度:bf16
单精度:fp32
NVidia's TensorFloat(tf32)
Tensor Float 32是Tensor Core 支持新的数值类型,从 NVIDIA A100 中开始支持。A100 的普通 FP32 的峰值计算速度为 19.5 TOPs,而TF32的峰值计算速度为 156 TOPs,提升了非常多。
注意看一下卡的性能指标、支持的数据类型、当然也要考虑价格因素。
计算卡主要看一下代数、计算能力、显存带宽等等。
下面提供了一个3090(家用)和A100针对resnet50累计100次训练迭代的耗时测试结果如下:
3090
A100
True True
end1 43.1068
False False
end2 46.1883
True True
end1 24.2842
False False
end2 50.8318
数据并行(Data Parallel, DP)
优点:可以不受单张GPU显存限制,训练更大的模型。
缺点:计算/通信效率低。
流水线并行(Pipeline Parallel, PP)
ZeRO(Zero Redundancy Optimizer)
多卡场景-上图
现在的计算流程是,在GPU上面进行前向和后向计算,将梯度传给CPU,进行参数更新,再将更新后的参数传给GPU。为了提高效率,可以将计算和通信并行起来,GPU在反向传播阶段,可以待梯度值填满bucket后,一边计算新的梯度一边将bucket传输给CPU,当反向传播结束,CPU基本上已经有最新的梯度值了,同样的,CPU在参数更新时也同步将已经计算好的参数传给GPU。
Wandb(全称为Weights and Biases)是一个用于跟踪、可视化和协作机器学习项目的工具。它提供了许多功能,包括实时的指标跟踪、超参数调整、模型的可视化等。Wandb能够帮助机器学习工程师更好地管理和监控他们的实验,并从中获得更多的见解和知识。
使用Wandb非常简单,首先需要安装Wandb的Python包,可以通过pip或conda来安装。安装完成后,需要在Python脚本中导入wandb库,登录Wandb,创建一个项目并设置实验。在实验中,可以记录各种指标、超参数、模型权重等,并进行可视化分析。
原始alpaca数据例子如下:
{
"instruction": "Describe the structure of an atom.",
"input": "",
"output": "An atom is made up of a nucleus, which contains protons and neutrons, surrounded by electrons that travel in orbits around the nucleus. The protons and neutrons have a positive charge, while the electrons have a negative charge, resulting in an overall neutral atom. The number of each particle determines the atomic number and the type of atom."
},
prompt_DICT = {
"prompt_input": (
"Below is an instruction that describes a task, paired with an input that provides further context. "
"Write a response that appropriately completes the request. "
"### Instruction: {instruction} ### Input: {input} ### Response:"
),
"prompt_no_input": (
"Below is an instruction that describes a task. "
"Write a response that appropriately completes the request. "
"### Instruction: {instruction} ### Response:"
),
}
翻译解释如下:
prompt_DICT = {
"prompt_input": (
"下面是描述一项任务的指令,与提供进一步背景的输入配对。"
"写一个适当的回应。 "
"### Instruction: {instruction} ### Input: {input} ### Response:"
),
"prompt_no_input": (
"下面是描述一项任务的指令。"
"写一个适当的回应。 "
"### Instruction: {instruction} ### Response:"
),
}
如何利用chatgpt 生成训练集。
LoRA的实现原理:冻结预训练模型权重,并将可训练的秩分解矩阵注入到Transformer层的每个权重中,大大减少了下游任务的可训练参数数量。直白的来说,实际上是增加了右侧的“旁支”,也就是先用一个Linear层A,将数据从 d维降到r,再用第二个Linear层B,将数据从r变回d维。最后再将左右两部分的结果相加融合,得到输出的hidden_state。
l学习如何利用 ChatGPT 模型构建一个大型肿瘤方向问答系统。
l理解LLaMA(类ChatGPT)模型微调的相关内容,包括参数设置、数据类型、Zero 设置等。
l掌握微调方式,包括 Lora 方式和 Ptuning 方式,并学会合并参数、Fsdp 和 deepspeed 的全参数微调技巧。
l学习优化器的定义和参数设置,包括 adam、adamw、lamb、lion 等。
l熟悉监视器工具 Wandb 的使用,以便有效监控模型训练过程。
l深入了解模型代码梳理的过程,包括数据准备和 ChatGPT 数据生成流程。
l了解模型效果的测评指标,并学会有效评估模型性能的方法。
课程大纲详细
第一节 训练微调目标
第二节 训练微调多GPU知识准备
第三节 知识准备-数据类型
第四节 知识准备-数据类型-显卡加速
第五节 知识准备-Zero模式、offload模式
第六节deepspeed zero、 zero offload模式、zero Infinity模式
第七节 知识准备-优化器定义与参数
第八节 知识准备-Wandb在线监视器
第九节 llama代码结构
第十节 训练(微调)- 数据准备
第十一节 数据准备-利用ChatGPT生成数据
第十二节 利用ChatGPT生成数据-代码讲解
第十三节 工具配置-accelerate及使用演示
第十四节 工具配置-deepspeed及使用演示
第十五节 工具配置-fsdp及使用演示
第十六节 全参数微调及代码实现讲解一
第十七节 全参数微调及代码实现讲解二
第十八节lora微调
第十九节lora微调代码实现讲解
第二十节ptuning微调
第二十一节 结果评估&观察
Arthur,首席数据科学家。毕业于浙江大学计算机系。10年企业级软件服务与大型电信增值业务软件研发管理经验,8年机器学习/深度学习研发及管理经验。曾在某知名大型公司担任技术管理人员。出版了2本深度学习著作,申请了多个算法专利授权。
可扫描上面二维码了解更多课程信息。
早鸟价福利
前30名同学可获得价值500元购课优惠券,名额有限。