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

SFT全参微调数据处理

SFT全参微调(Supervised Fine-Tuning)前需要对数据集进行预处理,转化为.bin和.idx格式文件,以满足训练要求。

下载数据

SFT全参微调涉及的数据下载地址:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet

如果在准备数据章节已下载数据集,此处无需重复操作。

SFT全参微调和LoRA微调训练使用的是同一个数据集,数据处理一次即可,训练时可以共用。

数据预处理

使用数据预处理脚本preprocess_data.py脚本重新生成.bin和.idx格式的SFT全参微调数据。preprocess_data.py存放在6.3.904-Ascend/llm_train/AscendSpeed/ModelLink/tools目录中,脚本具体内容如下。

#加载ascendspeed及megatron模型:
export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/AscendSpeed
export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/ModelLink
#进入到ModelLink目录下:
cd /home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/ModelLink/ 
#执行以下命令:
python ./tools/preprocess_data.py \
  --input /home/ma-user/code/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
  --tokenizer-name-or-path $TOKENIZER_PATH \
  --output-prefix $DATA_PATH \
  --workers 8 \
  --log-interval 1000 \
  --tokenizer-type PretrainedFromHF \
  --handler-name GeneralInstructionHandler \
  --seq-length 4096 \
  --append-eod

参数说明:

- input:用于微调的原始数据。

- output-prefix:处理后的数据集保存路径+数据集名称前缀(例如:alpaca-ft)。

- tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase', 'BertWordPieceCase','GPT2BPETokenizer', 'PretrainedFromHF'],设置为PretrainedFromHF。

- tokenizer-name-or-path:tokenizer的存放路径。

- handler-name:生成数据集的用途,这里是生成的指令数据集,用于微调。

- append-eod:参数用于控制是否在每个输入序列的末尾添加一个特殊的标记。这个标记表示输入序列的结束,可以帮助模型更好地理解和处理长序列

- workers 需要使用的卡数

- seq-length:是一个用于计算序列长度的函数。它接收一个序列作为输入,并返回序列的长度,需和训练时参数保持一致。

输出结果

alpaca_ft_packed_attention_mask_document.bin

alpaca_ft_packed_attention_mask_document.idx

alpaca_ft_packed_input_ids_document.bin

alpaca_ft_packed_input_ids_document.idx

alpaca_ft_packed_labels_document.bin

alpaca_ft_packed_labels_document.idx

数据处理具体操作

SFT全参微调数据处理具体操作步骤如下。

  1. 创建处理后的数据存放目录/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/finetune/。
    cd /home/ma-user/ws/  #进入容器工作目录
    mkdir -p processed_for_ma_input/BaiChuan2-13B/data/finetune
  2. 进入代码目录“/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/ModelLink/”,在代码目录中执行preprocess_data.py脚本处理数据。
    此处提供一段实际的数据处理代码示例如下。
    #加载ascendspeed及megatron模型:
    export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/AscendSpeed
    export PYTHONPATH=$PYTHONPATH:/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/ModelLink
    #进入到ModelLink目录下:
    cd /home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/ModelLink/
    #执行以下命令:
    python ./tools/preprocess_data.py \
      --input /home/ma-user/ws/training_data/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
      --tokenizer-name-or-path /home/ma-user/ws/tokenizers/BaiChuan2-13B \
      --output-prefix /home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/finetune/alpaca_ft \
      --workers 8 \
      --log-interval 1000 \
      --tokenizer-type PretrainedFromHF \
      --handler-name GeneralInstructionHandler \
      --seq-length 4096 \
      --append-eod
    

    数据处理完后,在 /home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/finetune/目录下生成转换后的数据文件。

分享:

    相关文档

    相关产品