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

预训练数据处理

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

Alpaca数据处理

数据预处理脚本preprocess_data.py存放在代码包的“llm_train\AscendSpeed\ModelLink\”目录中,脚本具体说明如下。

python 6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/tools/preprocess_data.py
    --input ${MA_JOB_DIR}/6.3.902-Ascend/datasets/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
    --output-prefix ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca/llama2-13B/alpaca
    --tokenizer-type PretrainedFromHF
    --tokenizer-name-or-path ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf
    --tokenizer-not-use-fast
    --json-keys text

参数说明:

  • - input:数据集的存放路径,本案例中${path}的路径为${MA_JOB_DIR}/6.3.902-Ascend/datasets 。
  • - output-prefix:处理后的数据集保存路径+数据集名称前缀(例如: alpaca)
  • - tokenizer-type:tokenizer的类型,可选项有['BertWordPieceLowerCase','BertWordPieceCase','GPT2BPETokenizer','PretrainedFromHF'],一般为PretrainedFromHF。
  • - tokenizer-name-or-path:tokenizer的存放路径。
  • - json-keys: space separate listed of keys to extract from json,默认使用text,不需要修改。

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

  • alpaca_text_document.bin
  • alpaca_text_document.idx

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

创建预训练数据处理任务

  1. 通过VS Code新建任务。

    图1 新建任务

  2. 设置作业名称、描述、作业模式,选择准备镜像中训练镜像并根据需求选择资源规格和节点数。

    图2 设置训练作业基本信息

    在数据处理场景,通常选择:1节点,CPU规格即可。图中因无CPU资源故选择NPU规格。

  3. 设置权重、数据集的挂载文件夹。

    单击权重文件存储目录“6.3.902-Ascend/tokenizers/llama2-13b-hf”右侧的挂载按钮。

    图3 设置挂载文件夹

    选择步骤2.3中存储权重的桶中文件夹,例如:obs://standard-llama2-13b / llama-2-13b-chat-hf,单击确定,完成挂载。

    图4 选择OBS桶中文件夹

    以相同步骤,完成数据集的挂载,例如将obs://standard-llama2-13b/alpaca/挂载到6.3.902-Ascend/datasets/data目录,结果如下:

    图5 完成权重和数据集挂载

  4. 设置输出挂载路径。

    鼠标移动至输出目录,单击右侧出现的“设为输出”完成输出路径的挂载。

    图6 设置输出挂载路径

  5. 设置执行命令,并提交作业。

    在命令窗口输出执行预训练数据处理,此处提供一段实际的数据处理代码示例如下。
    python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/tools/preprocess_data.py
        --input ${MA_JOB_DIR}/6.3.902-Ascend/datasets/data/llama2-13B/train-00000-of-00001-a09b74b3ef9c3b56.parquet
        --output-prefix ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca
        --tokenizer-type PretrainedFromHF
        --tokenizer-name-or-path ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf
        --tokenizer-not-use-fast
        --json-keys text
    单击提交作业。
    图7 提交作业

  6. 待作业执行完成后,就可以在OBS中挂载输出路径的目录下找到输出结果。

    图8 作业执行完成

    图9 输出文件

    也可以在插件页面下载结果至本地

    图10 下载结果至本地

自定义数据

如果是用户自己准备的数据集,可以使用Ascendspeed代码仓中的转换工具将json格式数据集转换为训练中使用的.idx + .bin格式。

#示例:
#1.将准备好的json格式数据集存放于6.3.902-Ascend/datasets/data目录下: data.json
#2.修改转换脚本
python ${MA_JOB_DIR}/6.3.902-Ascend/llm_train/AscendSpeed/ModelLink/tools/preprocess_data.py \
    --input ${MA_JOB_DIR}/6.3.902-Ascend/datasets/data/data.json \ #需要转换的数据集路径
    --output-prefix ${MA_JOB_DIR}/6.3.902-Ascend/datasets/alpaca/llama2-13B/alpaca \  #转换后存放的数据集路径
    --tokenizer-type PretrainedFromHF \
    --tokenizer-name-or-path ${MA_JOB_DIR}/6.3.902-Ascend/tokenizers/llama2-13b-hf \
    --tokenizer-not-use-fast \
    --json-keys text
#3.执行完成后在 datasets文件夹中可以得到 data_text_document.idx 与data_text_document.bin 两个文件
分享:

    相关文档

    相关产品