使用xtuner微调开源大模型作业(基础版) #119

Open
opened 2024-09-23 19:46:40 +08:00 by GANGUAGUA · 5 comments

准备notebook

根据自己训练所需的机器数量准备相应数量的notebook。这里我准备的是4机16卡的训练。

准备微调配置文件

使用命令"xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code"即可将训练配置文件拷贝到本地的/code路径下。

xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code

环境准备

# 在平台上设置网络代理才能连接到互联网

exporthttp_proxy=http://10.10.9.50:3000
exporthttps_proxy=http://10.10.9.50:3000
exportno_proxy=localhost,127.0.0.1

# 设置huggingface的cache目录在共享目录下

exportHF_HOME=/code/huggingface-cache

# 设置huggingface访问站点为国内镜像站点

exportHF_ENDPOINT=https://hf-mirror.com

准备模型

由于打算训练的是 yi_6b_qlora_alpaca_enzh_e3,所以准备相关的模型以及数据。这里我准备的是01-ai/Yi-6B的模型。

huggingface-cli download 01-ai/Yi-6B --revision main --local-dir-use-symlinks False --local-dir /code/01-ai/Yi-6B

准备数据

由于 yi_6b_qlora_alpaca_enzh_e3 里有两个数据集路径,所以需要准备两个数据集。

这里我准备的是notebook里/dataset/datasets底下的两个数据集:silk-road___alpaca-data-gpt4-chinese 与 tatsu-lab___alpaca;可以通过代码来查找是否有这两个数据集

ls /dataset/datasets

如果没有的话也可以从huggingface上下载,这里是下载需要的代码:

huggingface-cli download silk-road___alpaca-data-gpt4-chinese --repo-type dataset --revision main --local-dir-use-symlinks False --local-dir /dataset/datasets/silk-road___alpaca-data-gpt4-chinese
huggingface-cli download tatsu-lab/alpaca --repo-type dataset --revision main --local-dir-use-symlinks False --local-dir /dataset/datasets/tatsu-lab/alpaca

当然,你也可以替换成自己想要的数据。

修改配置文件

由于yi_6b_qlora_alpaca_enzh_e3是xtuner的内置文件,配置基本写好了,所以只需要修改自己关心的训练参数及重要参数就可以了。

修改路径

pretrained_model_name_or_path 代表模型路径,将模型路径修改成刚刚下载到平台code目录下的01-ai/Yi-6B模型的路径。

alpaca_zh_path 与 alpaca_en_path 都代表数据集路径,将数据集路径也修改成本地路径即可。

接下来可以关注其他重要参数,根据自己的需求来更改或保留原本的参数。其他重要参数参考:

其他重要参数
max_length 数据最大长度,越长会越消耗显存
batch_size 指的是在训练算法中每个GPU上每次迭代更新时同时处理的样本数量;batch数据的大小越大越消耗显存
accumulative_counts 梯度累积的次数,total_batch = batch_size*accumulative_counts
max_epochs 整体数据迭代次数
save_steps 训练到多少步时保存一次模型,可根据总步数进行调整
save_total_limit 总共保存的checkpoint数量,太多会导致磁盘满了
evaluation_freq 训练过程中进行到多少步时做一次评估
SYSTEM 评估时需要用的系统提示词,xtuner内置了一些数据集的系统提示词
evaluation_inputs 用户的输入
quantization_config 量化配置,需要查看自己的硬件是否支持量化参数

注意:平台暂时不支持量化训练需要将相关参数请用#注释掉不启用

启动微调

多机多卡训练

设置IB网络

由于我打算使用4台机器,所以我需要在4台机器上都进行IB网络设置:

exportNCCL_DEBUG=INFO
exportNCCL_IB_DISABLE=0
exportNCCL_IB_HCA==mlx5_0:1,mlx5_1:1,mlx5_2:1,mlx5_3:1
exportNCCL_SOCKET_IFNAME=eth0
exportGLOO_SOCKET_IFNAME=eth0
exportHF_HOME=/code/huggingface-cache/
选择Master节点

用 ifconfig 命令来查看机器的通信地址,选择一台作为主节点

ifconfig

分布式训练

在第一台机器上输入:

NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=0 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3

在第二台机器上输入:

NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=1 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3

在第三台机器上输入

NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=2 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3

在第四台机器上输入:

NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=3 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3

看到有训练的step日志出现,表示训练已经开始:

## 准备notebook 根据自己训练所需的机器数量准备相应数量的notebook。这里我准备的是4机16卡的训练。 ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1727091201968-194c0653-71a3-4c37-8923-6578e189ed2d.png) ## 准备微调配置文件 <font style="color:#333333;">使用命令"</font>**<font style="color:#2972f4;">xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code</font>**<font style="color:#333333;">"即可将训练配置文件拷贝到本地的/code路径下。</font> ```plain xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code ``` ## <font style="color:#333333;">环境准备</font> <font style="color:#708090;"># 在平台上设置网络代理才能连接到互联网</font> ```plain exporthttp_proxy=http://10.10.9.50:3000 exporthttps_proxy=http://10.10.9.50:3000 exportno_proxy=localhost,127.0.0.1 ``` <font style="color:#708090;"># 设置huggingface的cache目录在共享目录下</font> ```plain exportHF_HOME=/code/huggingface-cache ``` <font style="color:#708090;"># 设置huggingface访问站点为国内镜像站点</font> ```plain exportHF_ENDPOINT=https://hf-mirror.com ``` #### 准备模型 由于打算训练的是 <font style="color:#2972f4;">yi_6b_qlora_alpaca_enzh_e3</font><font style="color:#000000;">,所以准备相关的模型以及数据。这里我准备的是</font><font style="color:#ED740C;">01-ai/Yi-6B</font><font style="color:#000000;">的模型。</font> ```plain huggingface-cli download 01-ai/Yi-6B --revision main --local-dir-use-symlinks False --local-dir /code/01-ai/Yi-6B ``` #### 准备数据 由于 <font style="color:#2972f4;">yi_6b_qlora_alpaca_enzh_e3 </font><font style="color:#000000;">里有两个数据集路径</font><font style="color:#333333;">,所以需要准备两个数据集。</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1727091102296-52319cf2-e558-498f-a8c5-6d1450c194b0.png) 这里我准备的是notebook里/dataset/datasets底下的两个数据集:<font style="color:#ED740C;">silk-road___alpaca-data-gpt4-chinese </font>与 <font style="color:#ED740C;">tatsu-lab___alpaca</font>;可以通过代码来查找是否有这两个数据集 ```plain ls /dataset/datasets ``` 如果没有的话也可以从huggingface上下载,这里是下载需要的代码: ```plain huggingface-cli download silk-road___alpaca-data-gpt4-chinese --repo-type dataset --revision main --local-dir-use-symlinks False --local-dir /dataset/datasets/silk-road___alpaca-data-gpt4-chinese ``` ```plain huggingface-cli download tatsu-lab/alpaca --repo-type dataset --revision main --local-dir-use-symlinks False --local-dir /dataset/datasets/tatsu-lab/alpaca ``` 当然,你也可以替换成自己想要的数据。 ## 修改配置文件 <font style="color:#000000;">由于</font><font style="color:#117CEE;">yi_6b_qlora_alpaca_enzh_e3</font><font style="color:#000000;">是xtuner的内置文件,配置基本写好了,所以只需要修改自己关心的训练参数及重要参数就可以了。</font> #### 修改路径 pretrained_model_name_or_path 代表模型路径,将模型路径修改成刚刚下载到平台code目录下的<font style="color:#ED740C;">01-ai/Yi-6B</font>模型的路径。 alpaca_zh_path 与 alpaca_en_path 都代表<font style="color:#333333;">数据集路径,将数据集路径也修改成本地路径即可。</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1727088710814-4871f632-d2a5-4d4f-80ba-38d605256c0b.png) 接下来可以关注其他重要参数,根据自己的需求来更改或保留原本的参数。其他重要参数参考: | <font style="color:#333333;">其他重要参数</font> | | | --- | --- | | <font style="color:#333333;">max_length</font> | 数据最大长度,越长会越消耗显存 | | batch_size | <font style="color:rgb(6, 6, 7);">指的是在训练算法中每个GPU上每次迭代更新时同时处理的样本数量;</font><font style="color:#333333;">batch数据的大小越大越消耗显存</font> | | <font style="color:#333333;">accumulative_counts</font> | <font style="color:#333333;">梯度累积的次数,total_batch = batch_size*accumulative_counts</font> | | <font style="color:#333333;">max_epochs</font> | <font style="color:#333333;">整体数据迭代次数</font> | | <font style="color:#333333;">save_steps</font> | <font style="color:#333333;">训练到多少步时保存一次模型,可根据总步数进行调整</font> | | <font style="color:#333333;">save_total_limit</font> | <font style="color:#333333;">总共保存的checkpoint数量,太多会导致磁盘满了</font> | | <font style="color:#333333;">evaluation_freq</font> | <font style="color:#333333;">训练过程中进行到多少步时做一次评估</font> | | <font style="color:#333333;">SYSTEM</font> | <font style="color:#333333;">评估时需要用的系统提示词,xtuner内置了一些数据集的系统提示词</font> | | <font style="color:#333333;">evaluation_inputs</font> | <font style="color:#333333;">用户的输入</font> | | <font style="color:#333333;">quantization_config</font> | <font style="color:#333333;">量化配置,需要查看自己的硬件是否支持量化参数</font> | > 注意:<font style="color:#333333;">平台暂时不支持量化训练需要将相关参数请用#注释掉不启用</font> > ## <font style="color:#000000;">启动微调</font> ### 多机多卡训练 ##### 设置IB网络 由于我打算使用4台机器,所以我需要在4台机器上都进行IB网络设置: ```plain exportNCCL_DEBUG=INFO exportNCCL_IB_DISABLE=0 exportNCCL_IB_HCA==mlx5_0:1,mlx5_1:1,mlx5_2:1,mlx5_3:1 exportNCCL_SOCKET_IFNAME=eth0 exportGLOO_SOCKET_IFNAME=eth0 exportHF_HOME=/code/huggingface-cache/ ``` ##### 选择Master节点 用 ifconfig 命令来查看机器的通信地址,选择一台作为主节点 ```plain ifconfig ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1727091361421-1336f6d0-3dfb-4a49-b9d4-f951cdd4d86d.png) ##### <font style="color:#333333;">分布式训练</font> 在第一台机器上输入: ```plain NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=0 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3 ``` <font style="color:#333333;">在第二台机器上输入:</font> ```plain NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=1 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3 ``` <font style="color:#333333;">在第三台机器上输入</font> ```plain NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=2 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3 ``` <font style="color:#333333;">在第四台机器上输入:</font> ```plain NNODES=4 NPROC_PER_NODE=4 PORT=12345 ADDR=10.244.34.107 NODE_RANK=3 xtuner train /code/yi_6b_qlora_alpaca_enzh_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3 ``` <font style="color:#333333;"></font> <font style="color:#333333;">看到有训练的step日志出现,表示训练已经开始:</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1727090811220-0be19ba3-99bf-4da6-b4cf-2c4dbb6c09ad.png) <font style="color:#000000;"></font>

看论坛在结合上课内容,容易理解

看论坛在结合上课内容,容易理解

yi_6b_qlora_alpaca_enzh_e3_copy.py 这个可以从哪里下载吗,我的CODE 目录下没有。
还有,微调配置文件,老师好像没进行操作,啥时需要自己进行配置?

yi_6b_qlora_alpaca_enzh_e3_copy.py 这个可以从哪里下载吗,我的CODE 目录下没有。 还有,微调配置文件,老师好像没进行操作,啥时需要自己进行配置?
  xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code/yi_6b_qlora_alpaca_enzh_e3
xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code/yi_6b_qlora_alpaca_enzh_e3
Author

yi_6b_qlora_alpaca_enzh_e3_copy.py 这个可以从哪里下载吗,我的CODE 目录下没有。
还有,微调配置文件,老师好像没进行操作,啥时需要自己进行配置?

在这个文档中准备微调配置文件那里有一行代码:xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code

这个代码表示在xtuner自带的配置文件里copy这个yi_6b_qlora_alpaca_enzh_e3文件到/code目录下。

运行完这行代码后,你可以通过ls /code来查看是否存在yi_6b_qlora_alpaca_enzh_e3_copy.py这个文件。

这里有xtuner常见命令可以参考一下:
xtuner list-cfg : 列出内置模型微调配置文件
xtuner copy-cfg:复制内置模型微调配置文件
xtuner train :训练
xtuner convert : 模型转换

> yi_6b_qlora_alpaca_enzh_e3_copy.py 这个可以从哪里下载吗,我的CODE 目录下没有。 > 还有,微调配置文件,老师好像没进行操作,啥时需要自己进行配置? 在这个文档中准备微调配置文件那里有一行代码:xtuner copy-cfg yi_6b_qlora_alpaca_enzh_e3 /code 这个代码表示在xtuner自带的配置文件里copy这个yi_6b_qlora_alpaca_enzh_e3文件到/code目录下。 运行完这行代码后,你可以通过ls /code来查看是否存在yi_6b_qlora_alpaca_enzh_e3_copy.py这个文件。 这里有xtuner常见命令可以参考一下: xtuner list-cfg : 列出内置模型微调配置文件 xtuner copy-cfg:复制内置模型微调配置文件 xtuner train :训练 xtuner convert : 模型转换

👍

👍
Sign in to join this conversation.
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: HswOAuth/llm_course#119
No description provided.