# 大模型训练
## MindFormers
MindSpore Transformers套件的目标是构建一个大模型训练、微调、评估、推理、部署的全流程开发套件: 提供业内主流的Transformer类预训练模型和SOTA下游任务应用,涵盖丰富的并行特性。期望帮助用户轻松的实现大模型训练和创新研发。
MindSpore Transformers套件基于MindSpore内置的并行技术和组件化设计,具备如下特点:
一行代码实现从单卡到大规模集群训练的无缝切换;
* 提供灵活易用的个性化并行配置;
* 能够自动进行拓扑感知,高效地融合数据并行和模型并行策略;
* 一键启动任意任务的单卡/多卡训练、微调、评估、推理流程;
* 支持用户进行组件化配置任意模块,如优化器、学习策略、网络组装等;
* 提供Trainer、pipeline、AutoClass等高阶易用性接口;
* 提供预置SOTA权重自动下载及加载功能;
* 支持人工智能计算中心无缝迁移部署;
当前支持的[模型列表查询](https://gitee.com/mindspore/mindformers),每个模型均有单独的使用说明。
[支持模型列表](https://gitee.com/mindspore/mindformers/tree/r1.3.0/#%E6%94%AF%E6%8C%81%E6%A8%A1%E5%9E%8B)
### 1.基础准备
* 建议使用最新tag的镜像:[镜像获取](http://39.171.244.84:30011/image.txt)
* 版本匹配关系:[MindFormers r1.2.0](https://gitee.com/mindspore/mindformers/tree/r1.2.0/#%E7%89%88%E6%9C%AC%E5%8C%B9%E9%85%8D%E5%85%B3%E7%B3%BB)
* 模型:Qwen1.5-7B:[Base权重](https://huggingface.co/Qwen/Qwen1.5-7B/tree/main)(建议训练、微调使用) / [Chat权重](https://huggingface.co/Qwen/Qwen1.5-7B-Chat/tree/main)(建议推理使用)
* 数据集获取:预训练-[Wikitext-103](https://dagshub.com/DagsHub/WIkiText-103/raw/4d6345fe26a2fe22da78c46de68be83e2bf9b3b7/dataset/tokens/wiki.train.tokens) / 微调-[alpaca](https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json)
### 2.套件安装
* [安装脚本获取](http://39.171.244.84:30011/package_dependencies/script/mindformers.sh)
* `chmod +x mindformers.sh`使脚本可执行
* `bash mindformers.sh `一键安装
### 3.单机多卡
#### 3.1 数据预处理
**1.1 Wikitext-103 数据预处理**
执行如下命令,生成Mindrecord格式数据集
```shell
python research/qwen1_5/qwen1_5_preprocess.py \
--dataset_type 'wiki' \
--input_glob /{数据集路径}/wiki.train.tokens \
--vocab_file /{权重文件路径}/Qwen1.5-7B/vocab.json \
--merges_file /{权重文件路径}/Qwen1.5-7B/merges.txt \
--seq_length 32768 \
--output_file /{预处理后数据集输出路径}/wiki.mindrecord
```
* `dataset_type`: 预处理数据类型
* `input_glob`: 输入下载后wiki.train.tokens的文件路径
* `vocab_file`: vocab.json文件路径(huggingface权重文件中)
* `merges_file`: merges.txt文件路径(huggingface权重文件中)
* `seq_length`: 输出数据的序列长度
* `output_file`: 输出文件的保存路径
**1.2 alpaca 数据预处理**
首先执行如下命令,将原始数据集转换为指定格式
```shell
python research/qwen1_5/alpaca_converter.py \
--data_path /{数据集路径}/alpaca_data.json \
--output_path /{转换格式后数据集输出路径}/alpaca-data-messages.json
```
* `data_path`:输入下载的文件路径
* `output_path`:输出文件的保存路径
得到转换格式的数据集后执行如下命令,进行数据预处理和Mindrecord数据生成
```shell
python research/qwen1_5/qwen1_5_preprocess.py \
--dataset_type 'qa' \
--input_glob /{转换格式后数据集输出路径}/alpaca-data-messages.json \
--vocab_file /{权重文件路径}/Qwen1.5-7B/vocab.json \
--merges_file /{权重文件路径}/Qwen1.5-7B/merges.txt \
--seq_length 4096 \
--output_file /{预处理后数据集输出路径}/alpaca-messages.mindrecord
```
#### 3.2 权重转换
**注**: 请安装`convert_weight.py`依赖包。
```shell
pip install torch transformers>=4.37.2 transformers_stream_generator einops accelerate
```
##### 3.2.1 torch权重转mindspore权重
将huggingface的权重转换为完整的ckpt权重。
```shell
python research/qwen1_5/convert_weight.py \
--torch_ckpt_dir /{权重文件路径}/Qwen1.5-7B \
--mindspore_ckpt_path /{权重转换输出路径}/qwen1.5_7b.ckpt
```
* `torch_ckpt_dir`:预训练权重文件所在的目录, 此参数必须
* `mindspore_ckpt_path`:转换后的输出文件存放路径
> 如遇报错:`ImportError: {报错文件路径}: cannot allocate memory in static TLS block`,使用LD_PRELOAD环境变量指定对报错的单个或多个库文件进行优先加载:执行`Export LD_PRELOAD=$LD_PRELOAD:{报错文件路径}`
[报错详情参考](https://blog.csdn.net/qq_52169118/article/details/139521009)
##### 3.2.2 mindspore权重转torch权重
在生成mindspore权重之后如需使用torch运行,可根据如下命令转换:
```shell
python research/qwen1_5/convert_reversed.py \
--mindspore_ckpt_path /{mindspore权重路径}/qwen1.5_7b.ckpt \
--torch_ckpt_path /{权重转换输出路径}/your.bin
```
* `mindspore_ckpt_path`:待转换的mindspore权重路径
* `torch_ckpt_path`:转换后的输出文件存放路径
#### 3.3 预训练
**以`qwen1_5-7b`单机8卡预训练任务为例,执行分布式启动脚本**
requirements.txt以外额外需要安装的依赖库
```shell
pip install decorator attrs sympy
pip install mindspore==2.3.0
```
启动预训练
```shell
bash scripts/msrun_launcher.sh "run_mindformer.py \
--config research/qwen1_5/pretrain_qwen1_5_7b.yaml \
--load_checkpoint /{mindspore权重路径}/qwen1.5_7b.ckpt \
--train_dataset_dir /{预处理后数据集输出路径}/wiki.mindrecord \
--run_mode train" 8
```
#### 3.4 全参微调
设置如下环境变量:
```shell
export MS_ASCEND_CHECK_OVERFLOW_MODE=INFNAN_MODE
# 如出现OOM需要配置:
export ENABLE_CELL_RESUSE=1 # 打开内存复用
export MS_GE_ATOMIC_CLEAN_POLICY=1 # 打开内存优化
```
启动微调任务
```shell
bash scripts/msrun_launcher.sh "research/qwen1_5/run_qwen1_5.py \
--config research/qwen1_5/finetune_qwen1_5_7b.yaml \
--load_checkpoint /{mindspore权重路径}/qwen1.5_7b.ckpt \ 用的是上面torch转mindspore的权重
--auto_trans_ckpt True \ 是否开启自动在线权重切分或转换
--train_dataset /path/alpaca.mindrecord \
--run_mode finetune" 8
```
[参数详细说明](https://gitee.com/mindspore/mindformers/tree/r1.2.0/configs#%E8%AF%A6%E7%BB%86%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E)
### 多机多卡分布式训练
先把代码目录、预处理数据、ckpt权重转换文件上传到obs桶里
**obs桶操作如下:**
./obsutil config -i=*ak* -k=*sk* -e=*endpoint*使用永久AK、SK进行初始化配置
./obsutil/obsutil cp 桶里被复制文件路径 目标文件夹路径 -r -f 复制桶里的文件到目标路径,如果是复制文件夹,后面加-r -f,此命令可以通过对调目录把在notebook里的文件夹上传到obs
**modelArts上创建多机训练作业**

**参数说明**
```
config: 配置文件路径
run_mode: 运行模式, 预训练时设置为train
train_data: 训练数据集文件夹路径
merges_file: 词表文件merges.txt路径
vocab_file: 词表文件vocab.json路径
```
auto_trans_ckpt设成true会根据当前pp/mp/dp自动切分,生成strategy和transformed_checkpoint两个文件夹,将这两个文件夹重新保存到其他目录。
#### 参考文档链接
[MindFormers](https://gitee.com/mindspore/mindformers/tree/r1.2.0/#%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0mindspore-transformersmindformers)
[模型权重切分与合并](https://gitee.com/mindspore/mindformers/blob/r1.2.0/docs/feature_cards/Transform_Ckpt.md)
[Issues](https://gitee.com/mindspore/mindformers/issues?q=is%3Aclosed)
## MindSpeed-LLM
### 1.MindSpeed-LLM简介
MindSpeed-LLM,原仓名ModelLink,作为昇腾大模型训练框架,旨在为华为 [昇腾芯片](https://www.hiascend.com/) 提供端到端的大语言模型训练方案, 包含分布式预训练、分布式指令微调、分布式偏好对齐以及对应的开发工具链。
***注 : 原包名 modellink 更改为 mindspeed_llm ***
**[MindSpeed-LLM简介官方链接](#https://gitee.com/ascend/MindSpeed-LLM/blob/master/README.md#)**
### 2.镜像准备
从下面网址里获取最新镜像链接并且注册:
[镜像地址](http://39.171.244.84:30011/image.txt)
镜像注册指导:[镜像注册]()
### 3.套件安装
##### 安装mindspeedllm:
从下面网址里获取最新安装脚本:
[脚本地址](http://39.171.244.84:30011/package_dependencies/script/modellink.sh)
进入镜像,执行安装脚本:```bash modellink.sh```
##### debug参考:
[debug参考](https://gitee.com/ascend/MindSpeed-LLM/issues?q=is%3Aclosed)
### 4.准备数据集
[下载数据集](https://gitee.com/csw-assdasd8sa8d7as78/aicc-mind-speed-llm-document/raw/master/Alpaca_data_gpt4_zh.jsonl)
[数据集准备示例](https://gitee.com/csw-assdasd8sa8d7as78/aicc-mind-speed-llm-document/blob/master/README.md#-3%E5%87%86%E5%A4%87%E6%95%B0%E6%8D%AE%E9%9B%86)
#### **转换数据集**
```cmd
cd /home/ma-user/work/MindSpeed-LLM
python preprocess_data.py \
--input /home/ma-user/work/MindSpeed-LLM/dataset/Alpaca_train.json \
--tokenizer-name-or-path /home/ma-user/work/Qwen2.5-14B/ \
--output-prefix ./dataset/alpaca/ \
--handler-name GeneralInstructionHandler \
--tokenizer-type PretrainedFromHF \
--workers 4 \
--log-interval 1000 \
```
### 5.将权重从 huggingface 格式转化为 megatron 格式
```cmd
cd /home/ma-user/work/MindSpeed-LLM
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader llama2_hf \
--saver megatron \
--target-tensor-parallel-size 2 \
--target-pipeline-parallel-size 2 \
--make-vocab-size-divisible-by 16 \
--load-dir /home/ma-user/work/Qwen2.5-14B/ \
--save-dir ./model_weights/Qwen2.5-14B-tp2-pp2/ \
--tokenizer-model /home/ma-user/work/Qwen2.5-14B/tokenizer.json \
--add-qkv-bias \
--params-dtype bf16
```
### 6.开启训练(8卡)
#### 修改训练脚本/home/ma-user/work/MindSpeed-LLM/examples/qwen15/pretrain_qwen15_14b_ptd.sh:
```cmd
export MEMORY_FRAGMENTATION=1;export MULTI_STREAM_ME=1;export PYTORCH_NPU_ALLOC_CONF="expandable_segments:False,max_split_size_mb:21";
CKPT_LOAD_DIR="/home/ma-user/work/MindSpeed-LLM/model_weights/Qwen2.5-14B-v0.1-tp2-pp2"
CKPT_SAVE_DIR="/home/ma-user/work/MindSpeed-LLM/model_weights/qwen_trained_ckpts"
DATA_PATH="/home/ma-user/work/MindSpeed-LLM/finetune_dataset/alpaca/"
TOKENIZER_PATH="/home/ma-user/work/Qwen2.5-14B"
GPT_ARGS="
--tensor-model-parallel-size ${TP} \
--pipeline-model-parallel-size ${PP} \
--sequence-parallel \
--ffn-hidden-size 13824 \
--group-query-attention \
--num-query-groups 8 \
--rotary-base 1000000 \
--norm-epsilon 1e-5 \
--num-layers 48 \
--hidden-size 5120 \
--transformer-impl local \
--num-attention-heads 40 \
--load ${CKPT_LOAD_DIR} \
--tokenizer-type PretrainedFromHF \
--tokenizer-name-or-path ${TOKENIZER_PATH} \
--seq-length 1024 \
--max-position-embeddings 131072 \
--micro-batch-size 1 \
--global-batch-size 32 \
--make-vocab-size-divisible-by 1 \
--padded-vocab-size 152064 \
--rotary-base 1000000 \
--lr 1.25e-6 \
--train-iters 5000 \
--lr-decay-style cosine \
--untie-embeddings-and-output-weights \
--disable-bias-linear \
--attention-dropout 0.0 \
--init-method-std 0.01 \
--hidden-dropout 0.0 \
--position-embedding-type rope \
--normalization RMSNorm \
--swiglu \
--use-flash-attn \
--use-fused-rmsnorm \
--use-fused-rotary-pos-emb \
--use-rotary-position-embeddings \
--use-fused-swiglu \
--use-mc2 \
--no-masked-softmax-fusion \
--attention-softmax-in-fp32 \
--min-lr 1.25e-7 \
--weight-decay 1e-1 \
--lr-warmup-fraction 0.01 \
--clip-grad 1.0 \
--adam-beta1 0.9 \
--adam-beta2 0.95 \
--add-qkv-bias \
--initial-loss-scale 4096 \
--no-gradient-accumulation-fusion \
--no-load-optim \
--no-load-rng \
--seed 42 \
--bf16 \
--load ${CKPT_LOAD_DIR} \
--finetune \
--is-instruction-dataset \
--tokenizer-not-use-fast \
--use-distributed-optimizer
"
```
#### 参数解释
- **`--load ${CKPT_LOAD_DIR}`**
- **解释**: 从指定的目录 (`${CKPT_LOAD_DIR}`) 加载预训练模型或检查点 (checkpoint)。
- **用途**: 通常用于在训练或推理过程中加载已经训练好的模型权重,以便继续训练或进行推理。
- **`--finetune`**
- **解释**: 启用微调 (fine-tuning) 模式。
- **用途**: 在微调模式下,模型会基于预训练的权重进行进一步的训练,通常用于特定任务的适应性调整。
- **`--is-instruction-dataset`**
- **解释**: 指示数据集是基于指令的 (instruction-based)。
- **用途**: 用于指定数据集的类型,通常在处理需要遵循特定指令的任务时使用,例如自然语言理解或生成任务。
- **`--tokenizer-not-use-fast`**
- **解释**: 禁用快速分词器 (fast tokenizer)。
- **用途**: 默认情况下,许多模型使用快速分词器以提高效率,但在某些情况下可能需要使用原始的分词器实现。
- **`--use-distributed-optimizer`**
- **解释**: 启用分布式优化器。
- **用途**: 在分布式训练环境中使用,优化器会在多个设备或节点之间协同工作,以提高训练效率和性能。
额外的,添加显存优化相关环境变量:
#### 环境变量和配置解释
- **`export MEMORY_FRAGMENTATION=1`**
- **解释**: 启用内存碎片化检测或优化。
- **用途**: 该变量可能用于调试或优化内存分配,特别是在需要检测或减少内存碎片化的情况下。值为 `1` 表示启用相关功能。
- **`export MULTI_STREAM_ME=1`**
- **解释**: 启用多流内存分配或管理。
- **用途**: 该变量可能用于支持多流处理或并行计算的内存管理。值为 `1` 表示启用多流内存分配功能。
- **`export PYTORCH_NPU_ALLOC_CONF="expandable_segments:False,max_split_size_mb:21"`**
- **解释**: 配置 PyTorch NPU 内存分配策略。
- **用途**:
- `expandable_segments:False`: 不允许内存段动态扩展。
- `max_split_size_mb:21`: 设置内存分配时的最大分割大小为 21 MB,用于控制内存分配的粒度。
- **场景**: 这些配置通常用于优化 PyTorch 在 NPU(如华为 Ascend NPU)上的内存分配策略,以提高性能或避免内存不足的问题。
#### 训练命令:
```cmd
bash /home/ma-user/work/MindSpeed-LLM/examples/qwen15/train_qwen25_14b.sh
```
### 7.转回HF权重(8卡)
#### 转回HF权重
必须输出在原HF的路径下
```python
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader megatron \
--saver megatron \
--save-model-type save_huggingface_llama \
--load-dir /home/ma-user/work/MindSpeed-LLM/model_weights/Qwen2.5-14B-v0.1-tp2-pp2/qwen_trained_ckpts \
--target-tensor-parallel-size 1 \
--target-pipeline-parallel-size 1 \
--add-qkv-bias \
--save-dir /home/ma-user/work/Qwen2.5-14B/ ## <-- 需要填入原始HF模型路径,新权重会存于./model_from_hf/qwen15-4b-hf/mg2hg/
```
**参考链接**:
- [Qwen-1.5-14B微调 官方文档](https://gitee.com/ascend/MindSpeed-LLM/blob/1.0.RC2/examples/qwen15/README.md#qwen15-14b)
- [MindSpeed-LLM 官方文档](https://gitee.com/ascend/MindSpeed-LLM/blob/master/examples/mcore/qwen25/pretrain_qwen25_14b_32K_ptd.sh)
**多机流程**:
- [多机训练使用AscendSpeed封装好的shell脚本启动,已经配置好优化环境变量/通信端口等设置,点我跳转](https://gitee.com/csw-assdasd8sa8d7as78/aicc-mind-speed-llm-document/blob/master/%E5%A4%9A%E6%9C%BA%E8%AE%AD%E7%BB%83%E4%BD%9C%E4%B8%9A%E6%B5%81%E7%A8%8B/README.md)
## MindSpeedLLM多机流程
---
### 1️.获取镜像

#### 镜像地址:
```bash
swr.cn-east-292.mygaoxinai.com/qwenj/pytorch2_1-cann8_rc3-py39:base
```

---
### 2️.创建 Notebook

---
### 3️.数据获取
- **单机获取文件:**
使用 `Ctrl+C` 复制后,粘贴到本地桌面 (`Ctrl+V`)。
- **Linux命令工具 Obsutil:**
Obsutil 是用于与云存储服务交互的命令行工具。
点击下面链接下载:
[obsutil下载](https://gitee.com/csw-assdasd8sa8d7as78/aicc-mind-speed-llm-document/blob/master/%E5%A4%9A%E6%9C%BA%E8%AE%AD%E7%BB%83%E4%BD%9C%E4%B8%9A%E6%B5%81%E7%A8%8B/obsutil)
#### 配置登录:
```bash
./obsutil config -i=${OBSAK} -k=${OBSSK} -e=obs.cn-east-292.mygaoxinai.com
```
#### 数据获取命令:
```bash
## 下载单个文件
./obsutil cp source_file target_file
## 同步文件夹
./obsutil sync source_folder target_folder
## 获取代码库
./obsutil sync obs://modellink-cloud/AscendSpeed/ ./AscendSpeed
```
- **获取模型原始权重:**
可通过 [ModelScope](https://modelscope.cn/) 或 [HF-Mirror](https://huggingface.co/mirror) 等网站。
---
### 4️.数据上传 ⬆
#### 创建桶:

#### 上传命令:
```bash
## 假设桶名为 work,代码路径为 ~/work/AscendSpeed,模型路径为 ~/work/models
./obsutil sync ~/work/AscendSpeed obs://work/AscendSpeed
./obsutil sync ~/work/models obs://work/models
```
---
### 5️.保存镜像


---
### 6️.创建训练作业

#### 启动命令:
```bash
cd /home/ma-user/modelarts/user-job-dir/AscendSpeed
sh ./scripts/install.sh
sh ./scripts/obs_pipeline2.sh
```

#### 输入变量名:
```bash
ORIGINAL_TRAIN_DATA_PATH=
ORIGINAL_HF_WEIGHT=
```
#### 输出变量名:
```bash
OUTPUT_SAVE_DIR=
HF_SAVE_DIR=
```

---
#### 模型命名规则:
- 微调 **千问14B**, 则模型名为:
```bash
qwen-14b
```
- 微调 **千问2.5 14B**, 则模型名为:
```bash
qwen2-14b
```
---
#### 训练配置参数示例:

#### Megatron训练参数解释
以下是常用的 Megatron-LM 训练参数及其含义解析:
---
#### **参数说明**
| 参数名 | 含义 | 示例值 |
|------------------|--------------------------------------------------------------------------------------------------|-------------|
| `CP` | **检查点 (Checkpoint) 数**: 指训练过程中保存的模型分片数量。 | `1` |
| `DATA_TYPE` | **数据处理类型**: 指定输入数据的处理逻辑或预处理模块。 | `GeneralInstructionHandler` |
| `EPOCH` | **训练轮次 (Epoch)**: 数据集被完整遍历的次数。 | `1` |
| `GBS` | **全局批量大小 (Global Batch Size)**: 多机总的 batch size(所有设备上累加)。 | `64` |
| `LR` | **初始学习率 (Learning Rate)**: 优化器的学习率初始值。 | `1.25e-6` |
| `MAX_PE` | **最大位置编码 (Max Position Encoding)**: 序列的最大长度,通常等于 `SEQ_LEN`。 | `4096` |
| `MBS` | **微批量大小 (Micro Batch Size)**: 每张卡上的局部 batch size,`GBS = MBS × 卡数 × 梯度累积步数`。 | `1` |
| `MIN_LR` | **最小学习率 (Minimum Learning Rate)**: 学习率的下限值,用于学习率调度器。 | `1.25e-7` |
| `MODEL_NAME` | **模型名称**: 训练生成的模型名称,用于保存或管理模型文件。 | `yi-34b` |
| `MOUNT` | **挂载类型 (Mount Type)**: 数据存储类型,通常是对象存储(如 `OBS` 或其他存储服务)。 | `OBS` |
| `TRAIN_ITERS` | **训练迭代次数**: 总的训练步数,等于 `EPOCH × 数据集大小 / GBS`。 | `1400` |
| `RUN_TYPE` | **运行模式**: 例如 `sft` 表示微调,`pretrain` 表示预训练。 | `sft` |
| `SAVE_INTERVAL` | **保存间隔 (Save Interval)**: 每隔多少步保存一次模型权重。 | `1400` |
| `SEED` | **随机种子 (Seed)**: 用于随机数生成器的初始化,确保训练的可重复性。 | `1234` |
| `SEQ_LEN` | **序列长度 (Sequence Length)**: 训练数据的最大 token 长度。 | `4096` |
| `SN` | **模型隐藏层维度 (Hidden Size)**: 通常表示 Transformer 模型的隐层维度(如 `SN=5120` 表示 5120 维)。 | `5120` |
| `TP` | **张量并行度 (Tensor Parallelism)**: 模型张量分解的并行数,通常用于跨设备分解计算。 | `8` |
| `PP` | **流水线并行度 (Pipeline Parallelism)**: 模型分层的并行数量,用于流水线并行。 | `2` |
---
#### **公式与关系**
1. **全局批量大小 (GBS) 公式**:
$$
\[
GBS = MBS \times \text{卡数} \times \text{梯度累积步数}
\]
$$
2. **并行设置规则**:
$$
\[
TP \times DP \times CP = \text{总卡数}
\]
$$
其中:
- `TP`: 张量并行 (Tensor Parallelism)
- `DP`: 数据并行 (Data Parallelism)
- `CP`: 检查点并行 (Checkpoint Parallelism)
3. **总训练步数计算**:
$$
\[
\text{训练迭代数 (Train Iters)} = \frac{\text{数据集大小}}{\text{GBS}} \times \text{EPOCH}
\]
$$
---
#### **优化器与调度器相关参数**
- `LR` 和 `MIN_LR` 一起决定了学习率的范围。
- 学习率通常通过预设调度器(如 `cosine decay`)逐步衰减到 `MIN_LR`。
---
#### **示例配置**
以下为实际的训练参数示例:
```bash
CP=1
DATA_TYPE=GeneralInstructionHandler
EPOCH=1
GBS=64
LR=1.25e-6
MAX_PE=4096
MBS=1
MIN_LR=1.25e-7
MODEL_NAME=yi-34b
MOUNT=OBS
TRAIN_ITERS=1400
RUN_TYPE=sft
SAVE_INTERVAL=1400
SEED=1234
SEQ_LEN=4096
SN=5120
TP=8
PP=2
```
#### 并行设置规则:

```bash
TP * DP * CP = 总卡数
```
#### 训练日志:

---
```