!173 优化模型训练文档,补充pt文档

Merge pull request !173 from 白超/dev
This commit is contained in:
白超
2025-01-14 06:44:13 +00:00
committed by i-robot
parent 891f4aa2bd
commit c7946c6ff9
18 changed files with 667 additions and 562 deletions

View File

@ -58,38 +58,98 @@
}
},
{
"id": "finetune",
"id": "train",
"label": {
"zh": "模型微调",
"en": "Model Finetuning"
"zh": "模型训练",
"en": ""
},
"children": [
{
"id": "overview",
"label": {
"zh": "概述",
"en": "Overview"
}
},
{
"id": "finetune_pt",
"label": {
"zh": "PyTorch模型微调",
"en": "PyTorch Model Finetuning"
}
},
{
"id": "data_process",
"label": {
"zh": "PyTorch模型微调-数据处理",
"en": ""
}
},
{
"id": "finetune_ms",
"id": "pretrain",
"label": {
"zh": "MindSpore模型微调",
"en": "MindSpore Model Finetuning"
"zh": "模型预训练",
"en": ""
}
},
{
"id": "posttrain",
"label": {
"zh": "模型后训练",
"en": ""
},
"children": [
{
"id": "finetune",
"label": {
"zh": "模型微调",
"en": ""
},
"children": [
{
"id": "finetune_pt",
"label": {
"zh": "PyTorch模型微调",
"en": ""
}
},
{
"id": "finetune_ms",
"label": {
"zh": "MindSpore模型微调",
"en": ""
}
}
]
}
]
},
{
"id": "datasets",
"label": {
"zh": "数据集配置",
"en": ""
}
},
{
"id": "train_params",
"label": {
"zh": "训练参数",
"en": ""
}
},
{
"id": "distribute",
"label": {
"zh": "分布式训练",
"en": ""
}
},
{
"id": "lora_and_merge",
"label": {
"zh": "模型量化与合并",
"en": ""
}
},
{
"id": "fused_norm",
"label": {
"zh": "融合算子加速",
"en": ""
}
},
{
"id": "swanlab",
"label": {
"zh": "训练监控",
"en": ""
}
}
]

View File

@ -953,7 +953,7 @@ chmod -R 750 path/to/model_weights
同时`openmind-cli train`继承了[transformers库](https://github.com/huggingface/transformers)的`Seq2SeqTrainingArguments`类。用户可参考[官方文档](https://huggingface.co/docs/transformers/en/main_classes/trainer#transformers.Seq2SeqTrainingArguments),了解更多训练参数配置。
更多使用细节可参考[微调文档](../../basic_tutorial/finetune/finetune_pt.md)。
更多使用细节可参考[训练参数](../../basic_tutorial/train/train_params.md)。
## openmind-cli export接口
@ -975,4 +975,4 @@ chmod -R 750 path/to/model_weights
| per_shard_size | 合并过程中单个分片的大小1代表单个模型文件最大为1GB如果不设置默认为5GB。 | int | None | 可选 |
| token | 私仓权重token。 | str | None | 可选 |
更多使用细节可参考[微调文档](../../basic_tutorial/finetune/finetune_pt.md)。
更多使用细节可参考[模型量化与合并](../../basic_tutorial/train/lora_and_merge.md)。

View File

@ -44,9 +44,9 @@ openMind Library命令行接口内置于openMind Library中安装openMind Lib
`openmind-cli list`的全量参数可以参考[openmind-cli list接口](../api_reference/apis/cli_api.md#openmind-cli-list接口)。
## 模型微调
## 模型训练
`openmind-cli train`用于在shell环境下启动训练流程集成了PyTorch框架下主流第三方工具的功能提供了一键式的模型微调解决方案,涵盖了从数据处理、多站点权重加载,到低参数微调、量化适配,以及微调和训练跟踪的全流程功能。同时openMind Library还提供了昇腾NPU亲和算子优化等加速手段显著提升模型训练效率。(*注此接口目前仅支持PyTorch框架*)
`openmind-cli train`用于在shell环境下启动训练流程集成了PyTorch框架下主流第三方工具的功能提供了一键式的模型训练解决方案,涵盖了从数据处理、多站点权重加载,到低参数训练、量化适配,训练跟踪的全流程功能。同时openMind Library还提供了昇腾NPU亲和算子优化等加速手段显著提升模型训练效率。(*注此接口目前仅支持PyTorch框架*)
接口调用示例如下:
@ -54,8 +54,6 @@ openMind Library命令行接口内置于openMind Library中安装openMind Lib
openmind-cli train demo.yaml
```
`openmind-cli train`详细使用方法参见[openMind Library模型微调文档](../basic_tutorial/finetune/finetune_pt.md#模型微调示例)
## 模型合并
`openmind-cli export`用于完成LoRA微调后的权重合并经过LoRA微调训练后保存的权重并非完整模型的权重而是适配器的权重文件。这种权重文件仅包含LoRA层相关的参数因此需要与预训练的基础模型权重一起加载才能使用。(*注此接口目前仅支持PyTorch框架*)
@ -66,7 +64,7 @@ openmind-cli train demo.yaml
openmind-cli export demo.yaml
```
`openmind-cli export`详细使用方法参见[openMind Library模型微调文档](../basic_tutorial/finetune/finetune_pt.md#lora权重合并)
`openmind-cli export`详细使用方法参见[openMind Library模型微调文档](../basic_tutorial/train/lora_and_merge.md#lora权重合并)
## 本地模型删除

View File

@ -1,488 +0,0 @@
# PyTorch模型微调
openMind Library基于[transformers库](https://github.com/huggingface/transformers)集成了PyTorch框架下主流第三方工具的功能提供了一键式的模型微调解决方案涵盖了从数据处理、多站点权重加载到低参数微调、量化适配以及微调和训练跟踪的全流程功能。同时openMind Library还提供了昇腾NPU亲和算子优化等加速手段显著提升模型训练效率。
openMind Library当前支持微调特性如下
- 微调阶段SFT
- 高效参数微调算法FullLoRAQLoRA
- 加速优化npu_fusion_attentionnpu_rms_norm
- 训练监控SwanLab
- 分布式训练:单机多卡-DDP单机多卡-DeepSpeed
- 导出LoRA权重合并
openMind Library提供命令行接口command-line interface, CLI支持用户在shell环境下交互式实现训练流程。用户只需要通过`openmind-cli train demo.yaml`命令就可以动态解析yaml文件里的配置参数并自动完成训练全流程。
openMind Library命令行接口内置于openMind Library中安装openMind Library即可使用详细步骤参考[openMind Library安装指南](../../install.md)。
## 模型微调示例
openMind Library通过解析yaml文件的方式拉起微调训练。用户需要配置一个微调相关的yaml文件然后通过`openmind-cli train`命令行方式运行openMind Library会自动完成参数解析和微调流程配置运行。以下为一个简单可运行的示例`demo.yaml`
```yaml
# model
model_id: Qwen2-7B
# method
stage: sft
do_train: true
finetuning_type: full
logging_steps: 1
max_steps: 10
# dataset
dataset: alpaca_zh_51k, alpaca
# train
output_dir: saves/Qwen2-7B/sft/lora/
overwrite_output_dir: true
```
运行命令为:
```shell
openmind-cli train demo.yaml
```
yaml文件内的配置包括微调算法参数模型参数数据集参数和训练参数。用户可根据实际微调训练需要参考下文指导进行更详细的配置。
同时我们也为您提供了[openMind微调教程](https://modelers.cn/spaces/openmind/openmind_finetune)您可以结合体验空间内的notebook示例进一步学习理解微调。
## 微调算法及参数配置
用户可设置`stage`参数选择模型训练过程。目前仅支持`sft`微调。
```yaml
stage: sft
```
### 全参微调
`openmind-cli train`支持用户选择全参训练或者低参微调训练,目前可通过`finetuning_type`进行配置。全参训练可按以下配置:
```yaml
finetuning_type: full
```
### LoRA微调
如果用户需要进行LoRA微调可以参考以下内容进行配置。
在脚本中配置`finetuning_type`来启动LoRA微调:
```yaml
finetuning_type: lora
```
如果需要调整LoRA微调配置可以新增以下参数
```yaml
finetuning_type: lora
lora_alpha: 16
lora_dropout: 0
lora_rank: 8
lora_target_modules: q_proj
```
其中`lora_alpha``lora_dropout``lora_rank`参数解析已提供默认值,如无必要用户可不配置。`lora_dropout`默认为0`lora_rank`默认为8`lora_alpha`默认为`lora_rank * 2`
`lora_target_modules`参数配置存在如下选择:
- 如果该参数不设置,则会通过模型`config.json`中的`model_type`自动选取合适的适配层,例如`Qwen2`系列模型自动识别为`q_proj,k_proj`
- 该参数设置为all则该模型所有可适配层都会参与低参微调。
- 该参数设置为特定层,如`q_proj, k_proj`,则会自动判别该层是否支持低参训练,如果支持则参与训练。
### QLoRA微调
QLoRA微调通过量化和LoRA微调的结合降低了计算资源需求和显存使用。`openmind-cli train`支持基于`bitsandbytes`的QLoRA微调目前已支持`NF4`下的`4bit`量化。用户可通过`load_in_4bit`参数进行开启,具体使用方式如下。
**步骤1 Ascend NPU下安装`bitsandbytes`,可参考文档[`bitsandbytes`](https://huggingface.co/docs/bitsandbytes/main/en/installation?backend=Ascend+NPU&platform=Linux),也可以参考以下流程:**
**前置条件**:安装`bitsandbytes`前请确保环境中已安装好cann包和torch_npu`source /xxx/your_folder/cann/ascend-toolkit/set_env.sh`,若未安装,请参照参考[openMind Library安装指南](../../install.md#可选步骤二cann包安装)安装cmake版本不低于3.22.1g++版本不低于12.x若未安装可通过如下命令安装编译环境
```shell
apt-get install -y build-essential cmake # 注此为Debian系列操作系统安装命令openEuler、CentOS等请替换为相应的命令安装。
```
在安装`bitsandbytes`之前,可通过如下示例判断安装环境是否配置完成:
```python
# source /xxx/your_folder/cann/ascend-toolkit/set_env.sh # 请在终端先执行本条命令,将路径替换为实际安装路径
import torch
import torch_npu
x = torch.randn(2, 2).npu()
y = torch.randn(2, 2).npu()
z = x.mm(y)
print(z)
# 如果环境可用,这段代码输出如下:
# tensor([[-0.9307, 2.9402],
# [-0.4377, -1.5141]], device='npu:0')
```
准备好安装环境后,可通过以下步骤编译安装`bitsandbytes`
```shell
1. git clone -b multi-backend-refactor https://github.com/bitsandbytes-foundation/bitsandbytes.git
2. cd bitsandbytes/
3. cmake -DCOMPUTE_BACKEND=npu -S .
4. make
5. pip install -e . # 安装前请确保进入了相应的Python环境-e 表示“可编辑”安装如果不是开发bnb请去掉该选项
```
如果在编译过程中出现异常请在bitsandbytes目录下运行`git clean -dfx`清除所有编译产生的中间文件然后检查编译环境确认无误后重新运行上述3~5命令。
**步骤2 启动QLoRA微调在微调配置文件中加入如下内容**
```yaml
load_in_4bit: True
finetuning_type: lora
bf16: True
```
需要注意的是,开启`load_in_4bit: True`时需要同时开启`finetuning_type: lora``bf16: True`
### 微调参数说明
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|-----------------------|-----------------------|--------|---------|---------|
| stage | 训练阶段目前仅支持sft。 | str | sft | 可选 |
| finetuning_type | 微调方式。可选: full, lora。 | str | full | 可选 |
| lora_target_modules | 采取LoRA方法的目标模块。 | str | None | 可选 |
| lora_alpha | Lora微调的缩放因子。 | int | None | 可选 |
| lora_dropout | LoRA微调的丢弃率取值范围为[0, 1)。 | float | 0.0 | 可选 |
| lora_rank | Lora微调的秩。 | int | 8 | 可选 |
| load_in_4bit | 支持QLoRA微调时使用4bit精度。 | bool | False | 可选 |
## 模型配置
### 模型下载
微调训练中需要指定模型进行下载和加载,配置参数为`model_id`和`model_name_or_path`。需要注意的是在同一yaml脚本中二者仅支持任选其一不允许同时配置。
方法一:通过`model_id`参数可选取内置的模型,根据`model_id`匹配魔乐社区中的模型仓库名,便于模型的快速下载。配置方式如下:
```yaml
model_id: Qwen2-7B
```
当前内置模型可查看下表,将会持续更新:
| **模型系列** | **model_id** |
|----------|-----------------|
| Qwen2 | Qwen2-7B |
| Qwen2.5 | Qwen2.5-7B |
方法二:用户可通过`model_name_or_path`参数,指定魔乐社区模型仓库名或者本地模型路径。
- 当使用本地模型时,可传入模型的绝对路径:
```yaml
model_name_or_path: /local/path/
```
- 可指定[魔乐社区](https://modelers.cn/models)模型仓库名,如[AI-Research/Qwen2-7B](https://modelers.cn/models/AI-Research/Qwen2-7B)模型:
```yaml
model_name_or_path: AI-Research/Qwen2-7B
```
### 模型下载缓存
使用`model_id`或`model_name_or_path`时,可通过`cache_dir`参数设置权重缓存位置:
```yaml
cache_dir: /home/cache_model
```
权重会被保存到`/home/cache_dir`路径如果不设置则保存在默认路径。需要注意的是当设置cache_dir路径时用户需要同步设置`HUB_WHITE_LIST_PATHS`环境变量:
```bash
export HUB_WHITE_LIST_PATHS=/home/cache_model
```
### 模型配置参数说明
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|----------------------|-------------------------|--------|---------|------|
| model_id | 模型ID。 | str | - | 可选 |
| model_name_or_path | 模型本地路径或者hub的repo_id。 | str | - | 可选 |
| trust_remote_code | 是否信任从远程下载的配置文件。 | bool | False | 可选 |
| cache_dir | 模型下载的缓存路径。 | str | None | 可选 |
| token | 私仓权重token。 | str | None | 可选 |
| model_revision | 指定模型版本。 | str | main | 可选 |
| use_fast_tokenizer | 是否使用fast tokenizer。 | bool | False | 可选 |
| split_special_tokens | 是否拆分特殊token。 | bool | False | 可选 |
| new_special_tokens | 要添加到tokenzier中的特殊token。 | str | None | 可选 |
| resize_vocab | 是否调整tokenizer词汇表的大小。 | bool | False | 可选 |
| use_gradient_checkpointing | 是否使用gradient checkpointing。 | bool | True | 可选 |
## 数据集配置
### 内置数据集
用户可通过`dataset`参数配置数据集openMind Library会自动检索内置的数据集链接并实现数据集下载。如设置`alpaca_zh_51k`后,会通过魔乐社区下载对应数据集`AI-Research/alpaca_zh_51k`
```yaml
dataset: alpaca_zh_51k
```
当前内置数据集列表如下,将会持续更新:
| **dataset** | **魔乐社区数据仓** |**数据类型**|
|---------------------|-----------------------------------------------------------------------------------------------|------|
| alpaca_zh_51k | [AI-Research/alpaca_zh_51k](https://modelers.cn/datasets/AI-Research/alpaca_zh_51k) |alpaca|
| alpaca | [AI_Connect/alpaca](https://modelers.cn/datasets/AI_Connect/alpaca) |alpaca|
| alpaca-gpt4-data | [AI_Connect/alpaca-gpt4-data](https://modelers.cn/datasets/AI_Connect/alpaca-gpt4-data) |alpaca|
| alpaca-gpt4-data-zh | [AI_Connect/alpaca-gpt4-data-zh](https://modelers.cn/datasets/AI_Connect/alpaca-gpt4-data-zh) |alpaca|
| sharegpt_gpt4 | [AI-Research/sharegpt_gpt4](https://modelers.cn/datasets/AI-Research/sharegpt_gpt4) |sharegpt|
### 非内置数据集
用户可选择使用非内置数据集并进行数据集自定义,可以参考[PyTorch模型微调-数据处理](./data_process.md)章节。
### 数据集截断和填充
依托于`cutoff_len`和`max_length`参数openMind Library支持对传入的数据集进行填充和截断操作。`cutoff_len`默认设置为1024`max_length`默认为None。
```yaml
cutoff_len: 1024
```
数据集截断示例例如处理数据集A时数据集A包含100个sample每个sample经过分词器处理后最大的长度为800当`cutoff_len`设置为1024时则数据集A最终截断长度为800。 如果数据集A经过分词器处理后最大的长度为1500当`cutoff_len`被设置为1024时数据集A最终的截断长度为1024。
如果用户需要对传入的数据集做填充,则可以设置`max_length`,每批次数据都会被处理到固定长度:
```yaml
max_length: 1024
```
需要注意的是,如果`cutoff_len`和`max_length`同时设置,`max_length`必须大于等于`cutoff_len`。
### 数据集配置参数说明
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|---------------------------|------------------------------|--------|---------|------|
| dataset | 数据集名称,支持传入多个不同的数据集,以","进行分割。 | str | None | 必选 |
| custom_dataset_info | 传入的外置数据集配置文件的绝对路径。 | str | None | 可选 |
| split | 数据集基于split筛选子数据集。 | str | Train | 可选 |
| subset_name | 数据集的子数据集名称。 | str | None | 可选 |
| preprocessing_num_workers | 用于数据处理的进程数。 | int | None | 可选 |
| preprocessing_batch_size | 数据处理的批大小。 | int | 1000 | 可选 |
| cutoff_len | 数据集经过encode编码后的截止长度。 | int | 1024 | 可选 |
| max_length | 数据集经过encode编码后padding最大长度。 | int | None | 可选 |
| reserved_label_len | 要将检查点保存到的输出目录。 | int | 1 | 可选 |
| ignore_pad_token_for_loss | 检查点保存的迭代间隔。 | bool | True | 可选 |
## 训练参数配置
`openmind-cli train`训练参数继承于[transformers库](https://github.com/huggingface/transformers)的`Seq2SeqTrainingArguments`类。以下参数为微调训练常用参数,如有需要,用户可参考[官方文档](https://huggingface.co/docs/transformers/en/main_classes/trainer#transformers.Seq2SeqTrainingArguments),了解更多训练参数配置。
### 基础配置
以下为训练过程中常用的参数:
```yaml
max_steps: 100 # 最大训练步数,若设置为正数,将覆盖 `num_train_epochs`。
#num_train_epochs: 2 # 训练的总 epoch 数,即完整数据集遍历的次数
per_device_train_batch_size: 2 # 每个设备的训练批大小
gradient_accumulation_steps: 2 # 梯度累积的步数
learning_rate: 1.0e-5 # 学习率,用于优化模型的参数
lr_scheduler_type: cosine # 学习率调度器类型(如 linear、cosine 等)
warmup_steps: 0 # 学习率预热的步数
weight_decay: 0.0 # 权重衰减系数,用于正则化模型
```
### 混合精度设置
混合精度训练能够有效提高训练速度,降低显存占用,在微调较大参数的模型,或设备显存有限的情况下建议开启,用户可通过配置如下训练参数开启混合精度训练:
```yaml
bf16: True # 是否开启bf16混合精度
```
### 模型保存
训练后的模型需要保存模型权重,可参考以下配置:
```yaml
output_dir: saves # 检查点和模型保存的目录
ovewrite_output_dir: True # 输出是否覆盖
```
- 如果用户设置`ovewrite_output_dir: False`且保存路径下存在`checkpoint`,会加载最后一个`checkpoint`继续训练。
- 如果用户设置了`ovewrite_output_dir: True`,会覆盖原有`checkpoint`,重新开始训练。
### checkpoint保存
可以设置`save_steps`参数进行checkpoint保存便于恢复中断的训练过程或者查看训练中间效果该参数表示每隔多少步保存一个checkpoint
```yaml
save_steps: 1000 # 每隔多少步保存一个checkpoint
```
## 融合算子加速
openMind Library支持昇腾NPU融合算子优化加速用户可参考[融合算子使能章节](../fused_ops.md)查看具体支持的算子和使用方式。
## 分布式训练
`openmind-cli train`支持单机单卡和单机多卡微调训练,用户可通过配置`ASCEND_RT_VISIBLE_DEVICES`环境变量控制分布式训练。
### 单机单卡
用户可设置使用特定卡,来实现单机单卡训练。
```shell
export ASCEND_RT_VISIBLE_DEVICES=0
openmind-cli train examples/features/train_sft_lora.yaml
```
### 单机多卡 - DDP
用户可传入多卡编号,来实现单机多卡训练。
```shell
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
openmind-cli train examples/features/train_sft_lora.yaml
```
### 自动识别多卡环境 - DDP
在不设置`ASCEND_RT_VISIBLE_DEVICES`环境变量时,`openmind-cli train`命令会自动识别底层环境中的计算卡数,并全量使用拉起加载。用户如果已经设置了该环境变量,可通过以下命令解除限制:
```shell
unset ASCEND_RT_VISIBLE_DEVICES
```
可通过以下命令查看`unset`是否生效,正确设置情况下该命令返回值为空。
```shell
echo $ASCEND_RT_VISIBLE_DEVICES
```
### DeepSpeed
DeepSpeed是一个专为PyTorch设计的加速库它在分布式训练时能够显著提升显存使用效率和加快训练速度。目前openMind Library支持zero0, zero1, zero2特性。配置示例如下
```yaml
deepspeed: ./ds2_config.json
```
用户需要传入DeepSpeed配置文件路径DeepSpeed配置文件可参考[DeepSpeed说明](https://modelers.cn/docs/zh/best-practices/third_party/deepspeed.html)。
## 训练监控
`openMind Library`当前支持SwanLab实验跟踪。SwanLab提供了友好的API和易用的界面结合了超参数跟踪、指标记录、在线协作、实验链接分享等功能。
![SwanLab](../figures/swanlab.png)
### 安装SwanLab
```bash
pip install swanlab
```
### 配置SwanLab
在yaml文件中配置以下参数
```yaml
report_to: swanlab
logging_dir: ./log
```
- `report_to`设置为`swanlab`表示使用SwanLab进行实验跟踪。
- `logging_dir`是可选参数可指定SwanLab日志文件的保存位置默认保存在当前路径`swanlablog`文件夹下)。
### 开启SwanLab看板
通过以下命令开启SwanLab看板`./log`表示SwanLab日志文件的保存位置和上述`logging_dir`一致:
```bash
swanlab watch ./log
```
以上命令将返回一个URL链接默认为[http://127.0.0.1:5092](http://127.0.0.1:5092/))。
点击该链接即可访问SwanLab看板。
更多SwanLab使用说明请查看[SwanLab官方指导文档](https://docs.swanlab.cn/guide_cloud/general/what-is-swanlab.html)。
## LoRA权重合并
经过LoRA微调训练后保存的权重并非完整模型的权重而是适配器的权重文件。此类权重文件仅包含 LoRA 层相关的参数,需要与基础模型权重一起加载才能使用。
LoRA微调后保存的文件通常包括以下内容
```plaintext
output_dir/
├── adapter_config.json # LoRA 的配置文件
├── adapter_model.safetensors # LoRA 层的权重文件
```
基础模型的权重文件通常包含以下内容:
```plaintext
base_model_dir/
├── config.json # 模型的配置文件
├── model.safetensors # 基础模型的权重文件
```
openMind Library提供了`openmind-cli export`参数帮助用户进行LoRA微调后的权重合并。该命令与`openmind-cli train`命令相似基于yaml文件完成对应的合并操作。
### 单个适配器权重合并
常用的yaml文件内容如下该文件可命名为`merge.yaml`,一般包含以下参数:
- `model_id`或`model_name_or_path`:基础模型的权重名或路径,可参考`openmind-cli train`命令中的该参数。
- `adapter_models`:微调后的适配器权重路径。
- `output_dir`:合并权重后的保存路径。
```yaml
#base model args
model_id: Qwen2-7B
#model_name_or_path: AI_Connect/Qwen2_7B or /home/base_mode/Qwen2_7B
#adapter model args
adapter_models: lora_checkpoint_path
#ouput args
output_dir: ./saves_merge
```
可通过以下命令完成合并操作:
```shell
openmind-cli export merge.yaml
```
### 多个适配器权重合并
`openmind-cli export`支持对多个适配器进行权重合并yaml文件内容示例如下
```yaml
adapter_models: lora_checkpoint_path_1, lora_checkpoint_path_2
```
### 合并功能参数说明
以下为相关参数,用户可根据需要选择使用。
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|--------------------|--------------------------------------------------------|--------|---------|----|
| model_id | 模型ID。如果用户训练时使用了该参数合并时请使用此参数保证基础模型的一致。 | str | - | 可选 |
| model_name_or_path | 模型本地路径或者hub的repo_id。如果用户训练时使用了该参数合并时请使用此参数保证基础模型的一致。 | str | - | 可选 |
| adapter_models | 训练后的适配器权重路径,可设置单个路径,也可以设置`,`分隔的多个适配器权重路径。 | str | - | 必选 |
| output_dir | 合并后权重保存路径。 | str | - | 必选 |
| trust_remote_code | 是否信任transformers未集成的基础模型文件。 | bool | False | 可选 |
| cache_dir | 基础模型下载的缓存路径。 | str | None | 可选 |
| model_revision | 指定基础模型版本。 | str | main | 可选 |
| per_shard_size | 合并过程中单个分片的大小1代表单个模型文件最大为1GB如果不设置默认为5GB。 | int | None | 可选 |
| token | 私仓权重token。 | str | None | 可选 |

View File

@ -238,7 +238,7 @@ silicondiff_npu和PyTorch的对应版本如下
不同推理任务的默认`framework`,`backend`和模型见[pipeline当前支持的推理任务及其默认参数](#pipeline当前支持的推理任务及其默认参数)。
在使用`pipeline`方式时,可以通过[openMind模型库](https://modelers.cn/)查找适合自己需求的模型。如果找不到合适的模型,开发者可以进行模型训练或[模型微调](./finetune/overview.md)。我们鼓励将训练/微调后的模型上传至openMind模型库分享给更多开发者使用上传方式可参考[模型分享](push_to_hub.md)。
在使用`pipeline`方式时,可以通过[openMind模型库](https://modelers.cn/)查找适合自己需求的模型。如果找不到合适的模型,开发者可以进行[模型训练](./train/overview.md)。我们鼓励将训练/微调后的模型上传至openMind模型库分享给更多开发者使用上传方式可参考[模型分享](push_to_hub.md)。
<!-- omit in toc -->
## pipeline参数

View File

@ -1,28 +1,32 @@
# 数据处理
# 数据集配置
openMind内置dataset_info.json配置文件含有[魔乐社区](https://modelers.cn/datasets)在线数据集。在线数据集配置格式为:
## 内置数据集
```json
"dataset": {
"hub_url": "repo_id"
}
用户可通过`dataset`参数配置数据集openMind Library会自动检索内置的数据集链接并实现数据集下载。如设置`alpaca_zh_51k`后,会通过魔乐社区下载对应数据集`AI-Research/alpaca_zh_51k`
```yaml
dataset: alpaca_zh_51k
```
中:
当前内置数据集列表如下,持续更新中:
* `dataset`: 数据集名称。
* `repo_id`: [魔乐社区](https://modelers.cn/datasets)数据集的仓库地址。
| **dataset** | **魔乐社区数据仓** |**数据类型**|
|---------------------|-----------------------------------------------------------------------------------------------|------|
| alpaca_zh_51k | [AI-Research/alpaca_zh_51k](https://modelers.cn/datasets/AI-Research/alpaca_zh_51k) |alpaca|
| alpaca | [AI_Connect/alpaca](https://modelers.cn/datasets/AI_Connect/alpaca) |alpaca|
| alpaca-gpt4-data | [AI_Connect/alpaca-gpt4-data](https://modelers.cn/datasets/AI_Connect/alpaca-gpt4-data) |alpaca|
| alpaca-gpt4-data-zh | [AI_Connect/alpaca-gpt4-data-zh](https://modelers.cn/datasets/AI_Connect/alpaca-gpt4-data-zh) |alpaca|
| sharegpt_gpt4 | [AI-Research/sharegpt_gpt4](https://modelers.cn/datasets/AI-Research/sharegpt_gpt4) |sharegpt|
openMind目前仅支持Alpaca和ShareGpt两种数据格式默认数据集格式为Alpaca如果是ShareGPT格式需要在配置文件中指定`formatting`字段。示例如下:
## 非内置数据集
```json
"dataset": {
"hub_url": "repo_id",
"formatting": "sharegpt"
}
```
用户可选择使用非内置数据集并进行数据集自定义。
## Alpaca数据集
### 数据处理
openMind目前仅支持Alpaca和ShareGpt两种数据格式自定义数据集需要转换为这两种格式之一。
#### Alpaca数据集
Alpaca数据集格式要求如下:
@ -51,7 +55,7 @@ Alpaca数据集格式要求如下:
下面提供Alpaca单轮对话和多轮对话的示例。
### 单轮对话:
**单轮对话**
```json
[
@ -64,7 +68,7 @@ Alpaca数据集格式要求如下:
]
```
### 多轮对话:
**多轮对话**
```json
[
@ -90,7 +94,7 @@ Alpaca数据集格式要求如下:
]
```
## ShareGPT数据集
#### ShareGPT数据集
ShareGPT数据集格式要求如下:
@ -153,11 +157,11 @@ ShareGPT数据集格式要求如下:
}
```
## 自定义数据集
### 数据集配置文件
当用户需要使用本地数据集或者自定义的数据集时用户可以在微调yaml脚本中指定custom_dataset_info参数传入自定义数据集配置文件custom_dataset_info.json的绝对路径,该文件名用户可自定义
在数据集符合Alpaca或ShareGPT格式之后需要本地创建`custom_dataset_info.json`文件配置数据集相关信息
### Alpaca数据集配置模板
#### Alpaca数据集配置模板
对于Alpaca数据集在配置文件中的描述应为
@ -186,7 +190,7 @@ ShareGPT数据集格式要求如下:
* `split`: 要使用的数据集拆分名称,支持"train"和"test"配置。
* `num_samples`: 数据集的长度限制int类型。
### ShareGPT数据集配置模板
#### ShareGPT数据集配置模板
对于ShareGPT数据集在配置文件中的描述应为
@ -210,3 +214,12 @@ ShareGPT数据集格式要求如下:
> **备注**
>
> <font size=3>对于shareGPT数据集必须含有formatting字段。</font>
### yaml文件配置
当用户需要使用本地数据集或者自定义的数据集时用户可以在yaml脚本中指定`custom_dataset_info`参数,传入自定义数据集配置文件`custom_dataset_info.json`的绝对路径,该文件名用户可自定义。
```yaml
dataset: dataset
custom_dataset_info: custom_dataset_info.json
```

View File

@ -0,0 +1,45 @@
# 分布式训练
`openmind-cli train`支持单机单卡和单机多卡训练,用户可通过配置`ASCEND_RT_VISIBLE_DEVICES`环境变量控制分布式训练。
## 单机单卡
用户可设置使用特定卡,来实现单机单卡训练。
```shell
export ASCEND_RT_VISIBLE_DEVICES=0
openmind-cli train demo.yaml
```
## 单机多卡 - DDP
用户可传入多卡编号,来实现单机多卡训练。
```shell
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
openmind-cli train demo.yaml
```
## 自动识别多卡环境 - DDP
在不设置`ASCEND_RT_VISIBLE_DEVICES`环境变量时,`openmind-cli train`命令会自动识别底层环境中的计算卡数,并全量使用拉起加载。用户如果已经设置了该环境变量,可通过以下命令解除限制:
```shell
unset ASCEND_RT_VISIBLE_DEVICES
```
可通过以下命令查看`unset`是否生效,正确设置情况下该命令返回值为空。
```shell
echo $ASCEND_RT_VISIBLE_DEVICES
```
## DeepSpeed
DeepSpeed是一个专为PyTorch设计的加速库它在分布式训练时能够显著提升显存使用效率和加快训练速度。目前openMind Library支持zero0, zero1, zero2特性。配置示例如下
```yaml
deepspeed: ./ds2_config.json
```
用户需要传入DeepSpeed配置文件路径DeepSpeed配置文件可参考[DeepSpeed说明](https://modelers.cn/docs/zh/best-practices/third_party/deepspeed.html)。

View File

@ -0,0 +1,3 @@
# 融合算子加速
openMind Library支持昇腾NPU融合算子优化加速用户可参考[融合算子使能章节](../fused_ops.md)查看具体支持的算子和使用方式。

View File

@ -0,0 +1,158 @@
# LoRA与QLoRA
## LoRA
如果用户需要使用LoRA可以参考以下内容进行配置。
在脚本中配置`finetuning_type`来启动LoRA训练:
```yaml
finetuning_type: lora
```
如果需要调整LoRA训练配置可以新增以下参数
```yaml
finetuning_type: lora
lora_alpha: 16
lora_dropout: 0
lora_rank: 8
lora_target_modules: q_proj
```
其中`lora_alpha``lora_dropout``lora_rank`参数解析已提供默认值,如无必要用户可不配置。`lora_dropout`默认为0`lora_rank`默认为8`lora_alpha`默认为`lora_rank * 2`
`lora_target_modules`参数配置存在如下选择:
- 如果该参数不设置,则会通过模型`config.json`中的`model_type`自动选取合适的适配层,例如`Qwen2`系列模型自动识别为`q_proj,k_proj`
- 该参数设置为all则该模型所有可适配层都会参与低参训练。
- 该参数设置为特定层,如`q_proj, k_proj`,则会自动判别该层是否支持低参训练,如果支持则参与训练。
## QLoRA
QLoRA通过量化和LoRA的结合降低了计算资源需求和显存使用。`openmind-cli train`支持基于`bitsandbytes`的QLoRA训练目前已支持`NF4`下的`4bit`量化。用户可通过`load_in_4bit`参数进行开启,具体使用方式如下。
**步骤1 Ascend NPU下安装`bitsandbytes`,可参考文档[`bitsandbytes`](https://huggingface.co/docs/bitsandbytes/main/en/installation?backend=Ascend+NPU&platform=Linux),也可以参考以下流程:**
**前置条件**:安装`bitsandbytes`前请确保环境中已安装好cann包和torch_npu`source /xxx/your_folder/cann/ascend-toolkit/set_env.sh`,若未安装,请参照参考[openMind Library安装指南](../../install.md#可选步骤二cann包安装)安装cmake版本不低于3.22.1g++版本不低于12.x若未安装可通过如下命令安装编译环境
```shell
apt-get install -y build-essential cmake # 注此为Debian系列操作系统安装命令openEuler、CentOS等请替换为相应的命令安装。
```
在安装`bitsandbytes`之前,可通过如下示例判断安装环境是否配置完成:
```python
# source /xxx/your_folder/cann/ascend-toolkit/set_env.sh # 请在终端先执行本条命令,将路径替换为实际安装路径
import torch
import torch_npu
x = torch.randn(2, 2).npu()
y = torch.randn(2, 2).npu()
z = x.mm(y)
print(z)
# 如果环境可用,这段代码输出如下:
# tensor([[-0.9307, 2.9402],
# [-0.4377, -1.5141]], device='npu:0')
```
准备好安装环境后,可通过以下步骤编译安装`bitsandbytes`
```shell
1. git clone -b multi-backend-refactor https://github.com/bitsandbytes-foundation/bitsandbytes.git
2. cd bitsandbytes/
3. cmake -DCOMPUTE_BACKEND=npu -S .
4. make
5. pip install -e . # 安装前请确保进入了相应的Python环境-e 表示“可编辑”安装如果不是开发bnb请去掉该选项
```
如果在编译过程中出现异常请在bitsandbytes目录下运行`git clean -dfx`清除所有编译产生的中间文件然后检查编译环境确认无误后重新运行上述3~5命令。
**步骤2 启动QLoRA训练在配置文件中加入如下内容**
```yaml
load_in_4bit: True
finetuning_type: lora
bf16: True
```
需要注意的是,开启`load_in_4bit: True`时需要同时开启`finetuning_type: lora``bf16: True`
# LoRA权重合并
经过LoRA训练训练后保存的权重并非完整模型的权重而是适配器的权重文件。此类权重文件仅包含 LoRA层相关的参数需要与基础模型权重一起加载才能使用。
LoRA训练后保存的文件通常包括以下内容
```plaintext
output_dir/
├── adapter_config.json # LoRA 的配置文件
├── adapter_model.safetensors # LoRA层的权重文件
```
基础模型的权重文件通常包含以下内容:
```plaintext
base_model_dir/
├── config.json # 模型的配置文件
├── model.safetensors # 基础模型的权重文件
```
openMind Library提供了`openmind-cli export`参数帮助用户进行LoRA训练后的权重合并。该命令与`openmind-cli train`命令相似基于yaml文件完成对应的合并操作。
## 单个适配器权重合并
常用的yaml文件内容如下该文件可命名为`merge.yaml`,一般包含以下参数:
- `model_id``model_name_or_path`:基础模型的权重名或路径,可参考`openmind-cli train`命令中的该参数。
- `adapter_models`:训练后的适配器权重路径。
- `output_dir`:合并权重后的保存路径。
```yaml
#base model args
model_id: Qwen2-7B
#model_name_or_path: AI_Connect/Qwen2_7B or /home/base_mode/Qwen2_7B
#adapter model args
adapter_models: lora_checkpoint_path
#ouput args
output_dir: ./saves_merge
```
可通过以下命令完成合并操作:
```shell
openmind-cli export merge.yaml
```
## 多个适配器权重合并
`openmind-cli export`支持对多个适配器进行权重合并yaml文件内容示例如下
```yaml
adapter_models: lora_checkpoint_path_1, lora_checkpoint_path_2
```
## 合并功能参数说明
以下为相关参数,用户可根据需要选择使用。
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|--------------------|--------------------------------------------------------|--------|---------|----|
| model_id | 模型ID。如果用户训练时使用了该参数合并时请使用此参数保证基础模型的一致。 | str | - | 可选 |
| model_name_or_path | 模型本地路径或者hub的repo_id。如果用户训练时使用了该参数合并时请使用此参数保证基础模型的一致。 | str | - | 可选 |
| adapter_models | 训练后的适配器权重路径,可设置单个路径,也可以设置`,`分隔的多个适配器权重路径。 | str | - | 必选 |
| output_dir | 合并后权重保存路径。 | str | - | 必选 |
| trust_remote_code | 是否信任transformers未集成的基础模型文件。 | bool | False | 可选 |
| cache_dir | 基础模型下载的缓存路径。 | str | None | 可选 |
| model_revision | 指定基础模型版本。 | str | main | 可选 |
| per_shard_size | 合并过程中单个分片的大小1代表单个模型文件最大为1GB如果不设置默认为5GB。 | int | None | 可选 |
| token | 私仓权重token。 | str | None | 可选 |

View File

@ -1,23 +1,20 @@
# 模型微调
# 模型训练
Finetune微调是指将预训练模型在特定任务的数据集上进行训练使得训练完成的新模型可以在保持原有通用能力的基础上强化其在训练数据集上的能力。这项技术让用户在使用最先进的模型的过程中无需从头开始训练模型从而降低计算资源的使用成本。在这个章节我们将介绍如何使用openMind Library进行模型微调。
## PyTorch模型训练
## PyTorch模型微调
[transformers库](https://github.com/huggingface/transformers)是PyTorch模型开发的主流套件。以此为基础结合PyTorch侧主流生态库openMind Library为用户提供了一键式训练启动命令帮助用户快速实现从数据处理、多站点权重加载到低参数微调、量化适配以及微调和训练跟踪的全流程功能。
[transformers库](https://github.com/huggingface/transformers)是PyTorch模型开发的主流套件。以此为基础结合PyTorch侧主流生态库openMind Library为用户提供了一键式训练启动命令帮助用户快速实现从数据处理、多站点权重加载到低参数使能、量化适配、训练和跟踪的全流程功能。同时openMind Library还提供了昇腾NPU亲和算子优化等加速手段显著提升模型训练效率。
当前支持特性如下:
| 方法 | 全参数训练 | LoRA | QLoRA | 融合算子 | 训练监控 | 分布式训练 |
| ----- | ------------ | ---- | -------- | ------- | -------- | --------- |
| 预训练 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| 指令监督微调 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
- 微调算法SFT
- 高效参数微调算法FullLoRAQLoRA
- 加速优化npu_fusion_attentionnpu_rms_norm
- 训练监控SwanLab
- 分布式训练单机单卡单机多卡DeepSpeed
- 导出LoRA权重合并
openMind Library提供命令行接口command-line interface, CLI支持用户在shell环境下交互式实现训练流程。用户只需要通过`openmind-cli train demo.yaml`命令就可以动态解析yaml文件里的配置参数并自动完成训练全流程。
## MindSpore模型微调
## MindSpore模型训练
[mindformers库](https://gitee.com/mindspore/mindformers)是MindSpore模型开发的主流套件为了方便用户进行模型微调openMind Library对Auto Classes、Trainer和TrainingArguments接口统一进行了封装。
[mindformers库](https://gitee.com/mindspore/mindformers)是MindSpore模型开发的主流套件。当前openMind Library仅支持MindSpore模型微调为了方便用户进行模型微调openMind Library对Auto Classes、Trainer和TrainingArguments接口统一进行了封装。
- openMind Library封装的Auto Classes接口如下表所示。其余的Auto Classes接口openmind Library保留原生使用方式如需使用用户可自行从[mindformers库](https://gitee.com/mindspore/mindformers)中导入。
@ -35,5 +32,3 @@ Finetune微调是指将预训练模型在特定任务的数据集上进行
上述Auto Classes接口的具体参数说明可参考openMind Library提供的Auto Classes[接口说明文档](../../api_reference/apis/autoclass_api.md)。
- 针对MindSpore框架MindSpore框架用户可以保持原有的[mindformers库](https://gitee.com/mindspore/mindformers)的使用习惯使用openMind Library提供的Trainer和TrainingArguments进行微调。具体参数支持列表参考openMind Library提供的Trainer和TrainingArguments的[接口说明文档](../../api_reference/apis/trainer_api.md)。
接下来我们将在各个子章节分别介绍如何使用openMind对PyTorch和MindSpore模型进行微调。

View File

@ -0,0 +1,49 @@
# PyTorch模型微调
## 环境准备
openMind Library命令行接口内置于openMind Library中安装openMind Library即可使用详细步骤参考[openMind Library安装指南](../../../../install.md)。
## 模型微调示例
openMind Library通过解析yaml文件的方式拉起微调训练。用户需要配置一个微调相关的yaml文件然后通过`openmind-cli train`命令行方式运行openMind Library会自动完成参数解析和微调流程配置运行。以下为一个可运行的示例`demo.yaml`
```yaml
# model
model_id: Qwen2-7B
# method
stage: sft
do_train: true
finetuning_type: full
# dataset
dataset: alpaca_zh_51k
cutoff_len: 1024
# output
output_dir: saves/qwen2_7b_full
logging_steps: 1
save_steps: 20000
overwrite_output_dir: true
# train
per_device_train_batch_size: 2
gradient_accumulation_steps: 2
learning_rate: 1.0e-5
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
max_steps: 5000
seed: 1234
```
运行命令为:
```shell
openmind-cli train demo.yaml
```
yaml文件内的配置包括微调算法参数模型参数数据集参数和训练参数。详细参数请见[训练参数](../../train_params.md)。
同时我们也为您提供了[openMind微调教程](https://modelers.cn/spaces/openmind/openmind_finetune)您可以结合体验空间内的notebook示例进一步学习理解微调。

View File

@ -0,0 +1,47 @@
# PyTorch模型预训练
## 环境准备
openMind Library命令行接口内置于openMind Library中安装openMind Library即可使用详细步骤参考[openMind Library安装指南](../../install.md)。
## 模型预训练示例
openMind Library通过解析yaml文件的方式拉起预训练。用户需要配置一个预训练相关的yaml文件然后通过`openmind-cli train`命令行方式运行openMind Library会自动完成参数解析和预训练流程配置运行。以下为一个可运行的示例`demo.yaml`
```yaml
# model
model_id: Qwen2.5-7B
# method
stage: pt
do_train: true
finetuning_type: full
# dataset
dataset: text_zh_data
cutoff_len: 1024
# output
output_dir: saves/qwen2.5_7b_full
logging_steps: 1
save_steps: 20000
overwrite_output_dir: true
# train
per_device_train_batch_size: 2
gradient_accumulation_steps: 2
learning_rate: 1.0e-5
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
max_steps: 5000
seed: 1234
```
运行命令为:
```shell
openmind-cli train demo.yaml
```
yaml文件内的配置包括微调算法参数模型参数数据集参数和训练参数详细参数请见[训练参数](./train_params.md)。

View File

@ -0,0 +1,36 @@
# 训练监控
`openMind Library`当前支持SwanLab实验跟踪。SwanLab提供了友好的API和易用的界面结合了超参数跟踪、指标记录、在线协作、实验链接分享等功能。
![SwanLab](../figures/swanlab.png)
## 安装SwanLab
```bash
pip install swanlab
```
## 配置SwanLab
在yaml文件中配置以下参数
```yaml
report_to: swanlab
logging_dir: ./log
```
- `report_to`设置为`swanlab`表示使用SwanLab进行实验跟踪。
- `logging_dir`是可选参数可指定SwanLab日志文件的保存位置默认保存在当前路径`swanlablog`文件夹下)。
## 开启SwanLab看板
通过以下命令开启SwanLab看板`./log`表示SwanLab日志文件的保存位置和上述`logging_dir`一致:
```bash
swanlab watch ./log
```
以上命令将返回一个URL链接默认为[http://127.0.0.1:5092](http://127.0.0.1:5092/))。
点击该链接即可访问SwanLab看板。
更多SwanLab使用说明请查看[SwanLab官方指导文档](https://docs.swanlab.cn/guide_cloud/general/what-is-swanlab.html)。

View File

@ -0,0 +1,160 @@
# 训练参数
## 模型配置
### 模型下载
训练中需要指定模型进行下载和加载,配置参数为`model_id``model_name_or_path`。需要注意的是在同一yaml脚本中**二者仅支持任选其一**,不允许同时配置。
方法一:通过`model_id`参数可选取内置的模型,根据`model_id`匹配魔乐社区中的模型仓库名,便于模型的快速下载。配置方式如下:
```yaml
model_id: Qwen2-7B
```
当前内置模型可查看下表,将会持续更新:
| **模型系列** | **model_id** |
|----------|-----------------|
| Qwen2 | Qwen2-7B |
| Qwen2.5 | Qwen2.5-7B |
方法二:用户可通过`model_name_or_path`参数,指定魔乐社区模型仓库名或者本地模型路径。
- 当使用本地模型时,可传入模型的绝对路径:
```yaml
model_name_or_path: /local/path/
```
- 可指定[魔乐社区](https://modelers.cn/models)模型仓库名,如[AI-Research/Qwen2-7B](https://modelers.cn/models/AI-Research/Qwen2-7B)模型:
```yaml
model_name_or_path: AI-Research/Qwen2-7B
```
### 模型下载缓存
使用`model_id`或`model_name_or_path`时,可通过`cache_dir`参数设置权重缓存位置:
```yaml
cache_dir: /home/cache_model
```
权重会被保存到`/home/cache_dir`路径如果不设置则保存在默认路径。需要注意的是当设置cache_dir路径时用户需要同步设置`HUB_WHITE_LIST_PATHS`环境变量:
```bash
export HUB_WHITE_LIST_PATHS=/home/cache_model
```
### 模型配置参数说明
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|----------------------|-------------------------|--------|---------|------|
| model_id | 模型ID。 | str | - | 可选 |
| model_name_or_path | 模型本地路径或者hub的repo_id。 | str | - | 可选 |
| trust_remote_code | 是否信任从远程下载的配置文件。 | bool | False | 可选 |
| cache_dir | 模型下载的缓存路径。 | str | None | 可选 |
| token | 私仓权重token。 | str | None | 可选 |
| model_revision | 指定模型版本。 | str | main | 可选 |
| use_fast_tokenizer | 是否使用fast tokenizer。 | bool | False | 可选 |
| split_special_tokens | 是否拆分特殊token。 | bool | False | 可选 |
| new_special_tokens | 要添加到tokenzier中的特殊token。 | str | None | 可选 |
| resize_vocab | 是否调整tokenizer词汇表的大小。 | bool | False | 可选 |
| use_gradient_checkpointing | 是否使用gradient checkpointing。 | bool | True | 可选 |
## 训练方法
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|-----------------------|-----------------------|--------|---------|---------|
| stage | 训练阶段目前支持pt和sft。 | str | sft | 可选 |
| finetuning_type | 训练方式。可选: full, lora。 | str | full | 可选 |
| lora_target_modules | 采取LoRA方法的目标模块。 | str | None | 可选 |
| lora_alpha | Lora训练的缩放因子。 | int | None | 可选 |
| lora_dropout | LoRA训练的丢弃率取值范围为[0, 1)。 | float | 0.0 | 可选 |
| lora_rank | Lora训练的秩。 | int | 8 | 可选 |
| load_in_4bit | 支持QLoRA训练时使用4bit精度。 | bool | False | 可选 |
LoRA与QLoRA的详细用法请参考[模型量化与导出](./lora_and_merge.md)。
## 数据集
### 数据集截断和填充
依托于`cutoff_len`和`max_length`参数openMind Library支持对传入的数据集进行填充和截断操作。`cutoff_len`默认设置为1024`max_length`默认为None。
```yaml
cutoff_len: 1024
```
数据集截断示例例如处理数据集A时数据集A包含100个sample每个sample经过分词器处理后最大的长度为800当`cutoff_len`设置为1024时则数据集A最终截断长度为800。 如果数据集A经过分词器处理后最大的长度为1500当`cutoff_len`被设置为1024时数据集A最终的截断长度为1024。
如果用户需要对传入的数据集做填充,则可以设置`max_length`,每批次数据都会被处理到固定长度:
```yaml
max_length: 1024
```
需要注意的是,如果`cutoff_len`和`max_length`同时设置,`max_length`必须大于等于`cutoff_len`。
### 数据集配置参数说明
| **参数名** | **描述** | **类型** | **默认值** | 是否可选 |
|---------------------------|------------------------------|--------|---------|------|
| dataset | 数据集名称,支持传入多个不同的数据集,以","进行分割。 | str | None | 必选 |
| custom_dataset_info | 传入的外置数据集配置文件的绝对路径。 | str | None | 可选 |
| split | 数据集基于split筛选子数据集。 | str | Train | 可选 |
| subset_name | 数据集的子数据集名称。 | str | None | 可选 |
| preprocessing_num_workers | 用于数据处理的进程数。 | int | None | 可选 |
| preprocessing_batch_size | 数据处理的批大小。 | int | 1000 | 可选 |
| cutoff_len | 数据集经过encode编码后的截止长度。 | int | 1024 | 可选 |
| max_length | 数据集经过encode编码后padding最大长度。 | int | None | 可选 |
| reserved_label_len | 要将检查点保存到的输出目录。 | int | 1 | 可选 |
| ignore_pad_token_for_loss | 检查点保存的迭代间隔。 | bool | True | 可选 |
## 训练参数配置
`openmind-cli train`训练参数继承于[transformers库](https://github.com/huggingface/transformers)的`Seq2SeqTrainingArguments`类。以下参数为训练常用参数,如有需要,用户可参考[官方文档](https://huggingface.co/docs/transformers/en/main_classes/trainer#transformers.Seq2SeqTrainingArguments),了解更多训练参数配置。
### 基础配置
以下为训练过程中常用的参数:
```yaml
max_steps: 100 # 最大训练步数,若设置为正数,将覆盖 `num_train_epochs`。
#num_train_epochs: 2 # 训练的总 epoch 数,即完整数据集遍历的次数
per_device_train_batch_size: 2 # 每个设备的训练批大小
gradient_accumulation_steps: 2 # 梯度累积的步数
learning_rate: 1.0e-5 # 学习率,用于优化模型的参数
lr_scheduler_type: cosine # 学习率调度器类型(如 linear、cosine 等)
warmup_steps: 0 # 学习率预热的步数
weight_decay: 0.0 # 权重衰减系数,用于正则化模型
```
### 混合精度设置
混合精度训练能够有效提高训练速度,降低显存占用,在训练较大参数的模型,或设备显存有限的情况下建议开启,用户可通过配置如下训练参数开启混合精度训练:
```yaml
bf16: True # 是否开启bf16混合精度
```
### 模型保存
训练后的模型需要保存模型权重,可参考以下配置:
```yaml
output_dir: saves # 检查点和模型保存的目录
ovewrite_output_dir: True # 输出是否覆盖
```
- 如果用户设置`ovewrite_output_dir: False`且保存路径下存在`checkpoint`,会加载最后一个`checkpoint`继续训练。
- 如果用户设置了`ovewrite_output_dir: True`,会覆盖原有`checkpoint`,重新开始训练。
### checkpoint保存
可以设置`save_steps`参数进行checkpoint保存便于恢复中断的训练过程或者查看训练中间效果该参数表示每隔多少步保存一个checkpoint
```yaml
save_steps: 1000 # 每隔多少步保存一个checkpoint
```

View File

@ -6,9 +6,9 @@ openMind Library是一个深度学习开发套件通过简单易用的API支
+ 为了应对大模型分布式训练的挑战openMind Library提供了预训练接口支持MindSpeed、Accelerate等加速库帮助开发者顺畅快速地训练大模型具体可参考[模型预训练](basic_tutorial/pretrainer.md)章节。
+ openMind Library基于[transformers库](https://github.com/huggingface/transformers)集成了PyTorch框架下主流第三方工具的功能提供了一键式的封装的微调命令行接口解决方案涵盖了从数据处理、权重加载到低参数微调、量化适配,以及微调和训练跟踪的全流程功能,更多细节可查看[PyTorch模型微调](basic_tutorial/finetune/finetune_pt.md)。
+ openMind Library基于[transformers库](https://github.com/huggingface/transformers)集成了PyTorch框架下主流第三方工具的功能提供了一键式的封装的微调命令行接口解决方案涵盖了从数据处理、权重加载到低参数训练、量化适配,训练跟踪的全流程功能,更多细节可查看[模型训练](basic_tutorial/train/overview.md)。
+ openMind Library对Transformers和MindFormers的AutoClass、Pipeline、Trainer等接口进行封装并增强了其功能提供了对应的SDK。还提供了从魔乐社区自动下载和加载模型的能力同时扩展新增了昇腾NPU亲和的特性有效提升在昇腾NPU上进行模型训练推理的性能具体可参考[模型微调](basic_tutorial/finetune/overview.md)和[模型推理](basic_tutorial/pipeline.md)章节。
+ openMind Library对Transformers和MindFormers的AutoClass、Pipeline、Trainer等接口进行封装并增强了其功能提供了对应的SDK。还提供了从魔乐社区自动下载和加载模型的能力同时扩展新增了昇腾NPU亲和的特性有效提升在昇腾NPU上进行模型训练推理的性能具体可参考[模型训练](basic_tutorial/train/overview.md)和[模型推理](basic_tutorial/pipeline.md)章节。
+ openMind Library针对本地快速运行大模型的场景提供了简明易用的命令行接口低代码迅速执行模型上传下载、推理和对话具体可参考[命令行接口](basic_tutorial/cli.md)章节。

View File

@ -29,7 +29,7 @@ openmind-cli train train_sft.yaml
openmind-cli export merge.yaml
```
以上功能具体说明可查看[PyTorch 微调文档](./basic_tutorial/finetune/finetune_pt.md)。
以上功能具体说明可查看[模型训练](./basic_tutorial/train/overview.md)。
##### 模型部署
@ -67,8 +67,8 @@ image.save("mindone.png")
#### 新增接口
- openmind-cli新增train接口运行微调全流程支持SFT流程的FullLoRA和QLoRA微调具体使用说明请参考[PyTorch模型微调](./basic_tutorial/finetune/finetune_pt.md)。
- openmind-cli新增export接口实现LoRA适配器权重与基础权重的合并具体使用请参考[权重合并](./basic_tutorial/finetune/finetune_pt.md#lora权重合并)。
- openmind-cli新增train接口运行微调全流程支持SFT流程的FullLoRA和QLoRA微调具体使用说明请参考[模型训练](./basic_tutorial/train/overview.md)。
- openmind-cli新增export接口实现LoRA适配器权重与基础权重的合并具体使用请参考[权重合并](./basic_tutorial/train/lora_and_merge.md#lora权重合并)。
- openmind-cli新增deploy接口提供了模型部署的方法支持用户基于LMDeploy或MindIE快速方便地在本地部署推理服务具体请见[模型部署](./basic_tutorial/cli.md#模型部署)。
#### 文档更新
@ -78,8 +78,8 @@ image.save("mindone.png")
- [openMind Library 安装](install.md)
- [openMind Library 基础教程-命令行接口](./basic_tutorial/cli.md)
- [openMind Library API参考-接口-CLI接口](./api_reference/apis/cli_api.md)
- [openMind Library 基础教程-模型微调-PyTorch模型微调](./basic_tutorial/finetune/finetune_pt.md)
- [openMind Library 基础教程-模型微调-数据处理](./basic_tutorial/finetune/data_process.md)
- [openMind Library 基础教程-模型训练-模型后训练-微调-PyTorch模型微调](./basic_tutorial/train/posttrain/finetune/finetune_pt.md)
- [openMind Library 基础教程-模型训练-数据处理](./basic_tutorial/train/datasets.md)
### 特性修改

View File

@ -0,0 +1,29 @@
# model
model_id: Qwen2.5-7B
# method
stage: pt
do_train: true
finetuning_type: full
deepspeed: examples/deepspeed/ds_z2_config.json
# dataset
dataset: text_zh_data
cutoff_len: 1024
packing: true
# output
output_dir: saves/qwen2.5_7b_full
logging_steps: 1
save_steps: 20000
overwrite_output_dir: true
# train
per_device_train_batch_size: 2
gradient_accumulation_steps: 2
learning_rate: 1.0e-5
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
max_steps: 5000
seed: 1234