更新时间:2024-05-08 GMT+08:00
分享

预训练数据处理

训练前需要对数据集进行预处理,转化为.bin和.idx格式文件,以满足训练要求。

Alpaca数据处理

数据预处理脚本preprocess_data.py存放在代码包的“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/GLM3-6B \
 --output-prefix {work_dir}/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca \
 --workers 4 \
 --tokenizer-type PretrainedFromHF \
 --append-eod \
 --seq-length 8192 \
 --tokenizer-not-use-fast 

参数说明:

  • ${work_dir}的路径指容器工作路径:如/home/ma-user/ws/ 。
  • - input:原始数据集的存放路径
  • - output-prefix:处理后的数据集保存路径+数据集名称前缀(例如: alpaca),该目录路径需提前创建
  • - tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。
  • - tokenizer-name-or-path:tokenizer的存放路径
  • -workers:设置数据处理使用执行卡数量
  • -append-eod:参数用于控制是否在每个输入序列的末尾添加一个特殊的标记。这个标记表示输入序列的结束,可以帮助模型更好地理解和处理长序列。
  • seq-length:是一个用于计算序列长度的函数。它接收一个序列作为输入,并返回序列的长度,需和训练时参数保持一致。

数据预处理后输出的训练数据如下:

  • alpaca_text_document.bin
  • alpaca_text_document.idx

训练的时指定的数据路径为${path}/alpaca/GLM3-6B/alpaca_text_document, 不加文件类型后缀。

具体操作步骤如下:

  1. 创建数据处理后的输出目录/home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/。
    cd /home/ma-user/ws/  #进入容器工作目录
    mkdir -p processed_for_ma_input/GLM3-6B/data/pretrain
  2. 将获取到的Alpaca预训练数据集传到上一步创建的目录中。如还未下载数据集,请参考准备数据获取。
  3. 进入“/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ModelLink/”目录,在代码目录中执行preprocess_data.py脚本处理数据。
    此处提供一段实际的数据处理代码示例如下。
    #加载ascendspeed及megatron模型,xxx-Ascend请根据实际目录替换
    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/GLM3-6B \
     --output-prefix /home/ma-user/ws/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca \
     --workers 4 \
     --tokenizer-type PretrainedFromHF \
     --append-eod \
     --seq-length 8192 \
     --tokenizer-not-use-fast
  4. 数据处理完后,在/home/ma-user/ws/processed_for_ma_input/GLM3-6B/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模型,xxx-Ascend请根据实际目录替换
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/GLM3-6B \
 --output-prefix {work_dir}/processed_for_ma_input/GLM3-6B/data/pretrain/alpaca \
 --workers 4 \
 --tokenizer-type PretrainedFromHF \
 --append-eod \
 --seq-length 4096 \
 --tokenizer-not-use-fast 
#3.执行完成后在 datasets文件夹中可以得到 data_text_document.idx 与data_text_document.bin 两个文件
分享:

    相关文档

    相关产品