前提条件
- 大模型学习机预装了Llama 2-7b-chat模型与stable-diffuison-base-v2.1模型, 以及配套的开源服务框架text-generation-webui与stable-diffuison-webui,使您不需单独进行下载模型与配置环境。
- 云主机开通与如何登录网页页面参见部署文档。
- 您也可以参考视频教程(访问码:qf8m),帮助您快速学习大模型学习机的使用。
1. 模型微调简介
由于基础大模型参数量极多, 训练需要的资源量极大, 因此基于基础大模型进行微调的小模型应运而生。学习机内框架自带的LoRA技术便是其中最主流的一种。
LoRA小模型无法独立使用, 需要在加载完基础大模型后再进行加载, 对基础大模型的能力进行扩展。
已有LoRA模型如何加载可参考文本生成模型使用最佳实践
2. 准备训练数据
模型训练支持多种输入格式,主要分为格式化数据(Formatted Dataset)与原始文本数据(Raw text file)。
2.1 格式化数据(Formated Dataset)
格式化数据一般用于对话领域,以json形式进行组织, 可以在/root/text-generation-webui/training/formats目录下找到各类格式的配置文件.。以alpaca-chatbot-format为例,,
每条数据包括instruction, output或instruction, input, output三个部分. 参考示例数据如下:
[
{
"instruction":
"我想基于天翼云云主机通过镜像部署大模型学习机,你能告诉我具体怎么操作吗?",
"output":
"当然可以。首先,您需要登录云主机控制台,并选择创建云主机资源池,然后点击“创建云主机”按钮。"
},
{
"instruction": "好的,我已经点击了“创建云主机”按钮,接下来应该怎么做?",
"output":
"在当前可用选项中,您可以在重庆-重庆2或宁夏-中卫5购买GPU计算加速型云主机的Pi7规格;或者在重庆-重庆2购买GPU计算加速型云主机的Pi2规格。"
}
]
您需要将私有数据组织成上述格式, 并保存为[文件名].json文件. 例如xuexiji_chatdata.json
参考/root/text-generation-webui/training/formats/alpaca-chatbot-format.json文件内容, 格式化输入数据将被组织成 User: %instruction%\nAssistant: %output%
输入模型, 此处的 User
和 Assistant
务必与Parameter页面的Chat标签下的Character和User的Name保持一致.。对话时的角色标签对大模型来说是一个很强的特征。
需要参考下图将Parameter页Chat标签下默认的Name 修改为Character’s Name: Assistant; User Name: User . 否则在进行chat 对话时小模型几乎完全无效 。
2.2 原始文本数据(Raw text file)
原始文本数据直接将文章或对话的原文作为输入, 没有格式转化的过程, 框架自动进行切分和训练。
例如我们直接截取大模型学习机部署文档作为输入:
本文基于天翼云云主机,为您介绍通过镜像部署大模型学习机的具体操作。
购买云主机
登录云主机控制台,选择创建云主机资源池,点击“创建云主机”按钮。
当前您可在重庆-重庆2、宁夏-中卫5购买GPU计算加速型云主机的Pi7规格;也可在重庆-重庆2购买GPU计算加速型云主机的Pi2规格。
您需要将私有数据以utf8编码格式写入到文件中, 并保存为[文件名].txt文件. 例如xuexiji_docdata.txt
3. 数据上传到云主机
windows系统使用命令提示符, macos/linux系统使用终端, 执行scp命令将数据文件上传到云主机的/root/text-generation-webui/training/datasets目录下。
scp [本机文件路径] root@[ip]:/root/text-generation-webui/training/datasets
如果您擅长使用linux系统, 也可采用例如ftp,lrzsz等其他方式将数据从本地上传到云主机内。
4. 启动训练
4.1 加载基础大模型
由于小模型需要在基础大模型的基础上才能使用, 因此在训练前也要先保证在Model页完成了基础大模型的加载。
- Llama 2-7b模型在训练时, 默认的fp16精度大约要消耗18G显存, 入门款T4显卡机型无法支持. 需要在加载基础模型时选择load-in-8bit以降低内存占用。
- 如果刚才进行过训练, 则已加载进显存/内存的基础大模型也已经受到了训练的影响, 需要先进行模型reload恢复初始状态。
4.2 训练参数配置
在Trainning页面进行参数配置。
- Name: 必填参数, 输出模型将以此命名写入到/root/text-generation-webui/loras文件夹下。
- LoRA rank: 小模型的维度, 取值越大学习能力越强(但模型也越大). 可以直接采用默认值32, 如果发现模型效果不佳, 可以逐步增加到128进行尝试。
- LoRA Alpha: 推荐保持为LoRA rank的两倍。
- Batch Size: 每一批参与训练的数据条数. 采用默认值128即可. 如果您的训练数据条数过少, 则也可修改为64或32。
- Epochs: 数据训练的重复次数. 一般保持1-3即可。如果您的训练数据特别少(例如不足1000条), 则可以适当增大epoch以重复使用训练数据。例如本示例只用了30条训练数据, 可以使用epochs=50或100以加强训练效果(实际使用时不推荐过大的epoch, 本示例仅为了保证能够训练出明显效果, 已达到过拟合的状态)。
其他参数的设定需要有足够的背景知识, 这里不做详细介绍, 您可自行学习模型训练时的基本参数。
4.3 加载样本配置
在Trainning页面进行样本配置. 您可以选择以下的其中一种数据进行训练。
4.3.1 加载格式化数据(Formatted Dataset)
选择Formatted Dataset, 设置Data Format和Dataset为刚才准备好的数据文件。如果无法查看到文件, 尝试点击右侧的刷新按钮重新加载, 以及检查文件名后缀是否为.json
4.3.2 加载原始文本数据(Raw text file)
选择Raw text file, 设置Text file为刚才准备好的数据文件. 如果无法查看到文件, 尝试点击右侧的刷新按钮重新加载, 以及检查文件名后缀是否为.txt
4.4 启动训练
在启动前保证Model页已经Load过基础模型。
点击页面右下方 Start LoRA Training按钮, 下方将会出现提示文字, 等待模型完成训练与保存。
说明1. 在此阶段您可能会遇到各类问题导致训练失败, 建议参考服务启停最佳实践文档[文档链接]中关于打印服务日志的内容. 常见例如: 中文不是utf8编码, 显存不足等。
2. 在打印的日志中可以查看到模型训练时的loss指标. 一般loss下降到0.02以下即为基本训练达标。
3. 由于huggingface.io网站访问受限, 学习机在启动服务时需要检查是否在启动脚本run.sh里写入了export HF_HUB_OFFLINE=1, 否则在训练启动和结束时都会自动访问huggingface网站导致超时失败。
4.5 加载微调过的模型
完成训练后, LoRA小模型会被保存到/root/text-generation-webui/loras目录下。
注意训练完成后已加载进显存/内存的基础大模型也已经受到了训练的影响, 需要先进行模型reload恢复初始状态, 再进行其他任何操作。
回到Model页, 右侧LoRA标签下选择刚才训练出的模型并点击Apply LoRAs按钮, 在基础大模型之上加载LoRA小模型(如果看不到小模型, 尝试点击Apply LoRAs按钮左侧的刷新按钮)。
4.6 使用模型示例
在不加载LoRA小模型前, 生成效果以英文为主, 且内容不贴合训练数据。
4.6.1 对话(chat)模式
参见本文2.1节的”注意”部分, 先确保已将Parameter页Chat标签下默认的Name修改为Character’s Name: Assistant; User Name: User. 否则在进行chat对话时小模型几乎完全无效。
加载基于alpaca-chatbot-format格式数据训练的LoRA小模型后, 回答内容贴合训练数据。
注意大模型生成存在随机性, 不一定完全符合预期, 您可参考”大模型学习机文本生成最佳实践”文档, 调整参数降低模型随机性。 如果始终无法符合预期, 则可能是训练epoch不足, 可以继续加大epoch测试。
说明对话(chat)模式的本质是先将输入数据组织成[role属性] Assistant: [文本] User: [文本] Assistant: [文本]的格式, 然后再作为prompt输入模型。
4.6.2 默认(default)模式
加载基于raw text file数据训练的LoRA小模型后, 生成内容贴合训练数据。
注意大模型生成存在随机性, 不一定完全符合预期, 您可参考”大模型学习机文本生成最佳实践”文档, 调整参数降低模型随机性。如果始终无法符合预期, 则可能是训练epoch不足, 可以继续加大epoch测试。