预训练数据处理
训练前需要对数据集进行预处理,转化为.bin和.idx格式文件,以满足训练要求。
这里以Qwen-14B为例,对于Qwen-7B和Qwen-72B,操作过程与Qwen-14B相同,只需修改对应参数即可。
Alpaca数据处理说明
数据预处理脚本preprocess_data.py存放在代码包的“llm_train/AscendSpeed/ModelLink/tools/”目录中,脚本具体内容如下。
cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink #数据预处理 export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink python ./tools/preprocess_data.py \ --input {work_dir}/training_data/pretrain/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path {work_dir}/tokenizers/Qwen-14B \ --output-prefix {work_dir}/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca \ --workers 8 \ --log-interval 1000 \ --tokenizer-type PretrainedFromHF \ --seq-length 4096
参数说明:
- ${work_dir}的路径指容器工作路径:如/home/ma-user/ws/ 。
- - input:原始数据集的存放路径。
- - output-prefix:处理后的数据集保存路径+数据集名称前缀(例如: alpaca),替换为实际模型的路径。
- - tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。
- - tokenizer-name-or-path:tokenizer的存放路径,替换为实际模型的路径。
- -workers:设置数据处理使用执行卡数量。
- -log-interval:是一个用于设置日志输出间隔的参数,表示输出日志的频率。在训练大规模模型时,可以通过设置这个参数来控制日志的输出。
- -seq-length : 是一个用于设置序列长度的参数,表示模型处理的序列长度。在训练大规模模型时,可以通过设置这个参数来优化模型的训练速度和效果。
数据预处理后输出的训练数据如下:
- alpaca_text_document.bin
- alpaca_text_document.idx
训练的时指定的数据路径为${path}/alpaca/qwen-14b/alpaca_text_document, 不加文件类型后缀。
Alpaca数据处理操作步骤
Alpaca数据处理具体操作步骤如下:
- 创建数据处理后的输出目录/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/。
cd /home/ma-user/ws/ #进入容器工作目录 mkdir -p processed_for_ma_input/Qwen-14B/data/pretrain
- 将获取到的Alpaca预训练数据集传到上一步创建的目录中。如还未下载数据集,请参考准备数据获取。
- 进入“/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/”目录,在代码目录中执行preprocess_data.py脚本处理数据。
此处提供一段实际的数据处理代码示例如下。
#加载ascendspeed及megatron模型 export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink #进入到ModelLink目录下 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/ #执行以下命令 python ./tools/preprocess_data.py \ --input /home/ma-user/ws/training_data/pretrain/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path /home/ma-user/ws/tokenizers/Qwen-14B \ --output-prefix /home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca \ --workers 8 \ --log-interval 1000 \ --tokenizer-type PretrainedFromHF \ --seq-length 4096
- 数据处理完后,在/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/目录下生成alpaca_text_document.bin和alpaca_text_document.idx文件。
图1 处理后的数据
自定义数据
如果是用户自己准备的数据集,可以使用Ascendspeed代码仓中的转换工具将json格式数据集转换为训练中使用的.idx + .bin格式。
#示例 #1.将准备好的json格式数据集存放于/home/ma-user/ws/training_data/pretrain目录下: 如data.json #2.运行转换脚本 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/ 加载ascendspeed及megatron模型 export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/AscendSpeed export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink #运行以下命令 python ./tools/preprocess_data.py \ --input {work_dir}/training_data/pretrain/data.json \ --tokenizer-name-or-path {work_dir}/tokenizers/Qwen-14B \ --output-prefix {work_dir}/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca \ --workers 8 \ --log-interval 1000 \ --tokenizer-type PretrainedFromHF \ --seq-length 4096 #3.执行完成后在 datasets文件夹中可以得到 data_text_document.idx 与data_text_document.bin 两个文件