提示词工程实践(三)——NOTEBOOK微调训练 #123
Labels
No Label
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: HswOAuth/llm_course#123
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
本次实验主要是针对之前codellama对于数据库相关问题回答不够好的问题,使用与sql数据库相关的数据集来对模型进行微调。本次实验使用的是二机八卡,下面详细写出我在本次试验的步骤。
数据集准备
本次使用的数据集来自sql-create-context。这是一个专门为文本到 SQL 任务设计的数据集,主要用于训练大语言模型(LLMs)。它包含了 78,577 条数据,每条数据包括一个自然语言查询、一条 SQL
CREATE TABLE
语句和相应的 SQL 查询。其设计目的是通过提供CREATE TABLE
语句作为上下文,帮助模型在生成 SQL 查询时避免常见的列名或表名的“幻觉”问题。该数据集结合了 WikiSQL 和 Spider 数据集,利用
SQLGlot
工具推断出列的数据类型,并生成相应的CREATE TABLE
语句。这种方法不仅减少了内存占用,还保护了敏感数据的隐私,是构建文本到 SQL 模型的良好资源。微调训练
首先启动两个notebook:
分别打开两个任务后,使用ifconfig查看其中一台主机的ip地址,然后将其作为master节点。然后在两台主机分别使用命令启动训练。
node1:
NPROC_PER_NODE=4 NNODES=2 PORT=12345 ADDR=10.244.59.115 NODE_RANK=0 xtuner train llama2_7b_chat_qlora_sql_e3_copy.py --work-dir /code/xtuner-workdir --deepspeed deepspeed_zero3_offload
node2:
NPROC_PER_NODE=4 NNODES=2 PORT=12345 ADDR=10.244.59.115 NODE_RANK=1 xtuner train llama2_7b_chat_qlora_sql_e3_copy.py --work-dir /code/xtuner-workdir --deepspeed deepspeed_zero3_offload
分布式训练参数:
这段命令是在使用多节点分布式训练模型。NPROC_PER_NODE指的是每个节点使用4个GPU;NNODES指的是有两个节点参与训练; ADDR指的是主节点的IP地址,用于分布式训练的节点通信;PORT指的是节点之间的通信的端口号;NODE_RANK用于区分分布式系统中的不同节点。
xtuner命令:
llama2_7b_chat_qlora_sql_e3_copy.py
。Zero-3
优化器,并且开启 Offload 功能,将部分模型参数或者优化器状态卸载到 CPU上,以节省 GPU 显存。llama2_7b_chat_qlora_sql_e3_copy.py:
该脚本可以利用xtuner list-cfg来查看,并使用有关copy命令拷贝到当前目录,以方便修改和使用。
该脚本中规定了模型和数据集的位置,此外,还针对模型的训练配置进行了一系列的设置,如数据集加载、优化器、batch_size、学习率、模型和分词器,以及LoRA微调的配置等等。我们在使用中有时候需要根据当前的实际情况来更改其中的配置。
运行过程
如图显示了模型一开始运行的部分,红色区域是训练的迭代轮数。
此时可另开一个终端,利用rocm-smi来观察当前资源利用状况:
运行结束时会出现如下输出:
格式转换
运行完成后,目录下多出了如下文件:
这是储存在训练过程中生成的模型检查点文件。.pth文件是pytorch中模型的格式,其中常包括有:
这些是微调过程中最重要的数据。包括了针对相关数据集所需要的对预训练模型的更改。
随后,将这些数据转换为hugging face格式:
xtuner convert pth_to_hf /code/llama2_7b_chat_qlora_sql_e3_copy.py /code/xtuner-workdir/iter_500.pth/ /code/iter_500_hf/
这个操作主要是为了方便在 Hugging Face 环境中使用 PyTorch 训练好的模型。其中
/code/llama2_7b_chat_qlora_sql_e3_copy.py
是一个关键的配置文件,它定义了模型的架构、微调策略以及相关参数。在模型转换过程中,它的作用包括:简单来说,
/code/llama2_7b_chat_qlora_sql_e3_copy.py
这个文件为模型转换提供了结构和超参数的信息,使得转换后的 Hugging Face 模型能够保持与原始.pth
模型相同的架构和功能。转换后的模型如图:
模型测试
使用python final_test.py命令进行测试:
可以看到对比了微调前后的模型,微调后的模型取得了争取的答案,说明了微调的有效性。