SuperAPI AI 工具集

mindspeed-llm-data-prep

数据与分析

查看项目

更新于 10-16 10:51

技能介绍

用途

本 Skill 指导用户为 MindSpeed-LLM 训练准备数据,运行于华为昇腾 NPU 环境,覆盖预训练、指令微调和偏好对齐三种数据格式。

主要能力

数据处理器(Handler)

Handler 输入格式 用途
GeneralPretrainHandler {"text": "..."} 预训练
AlpacaStyleInstructionHandler {"instruction": "...", "output": "..."} 单轮指令微调
SharegptStyleInstructionHandler {"conversations": [...]} 多轮对话微调
AlpacaStylePairwiseHandler {"question": "...", "chosen": "...", "rejected": "..."} DPO 偏好对齐(Alpaca 风格)
SharegptStylePairwiseHandler {"conversations": [...], "chosen": "...", "rejected": "..."} DPO 偏好对齐(ShareGPT 风格)

输入数据格式

Alpaca 格式

{
    "instruction": "描述一下量子计算的基本原理",
    "input": "",
    "output": "量子计算利用量子比特..."
}

支持的字段:instruction(必需)、input(可选)、output(必需)。

ShareGPT 格式

{
    "conversations": [
        {"from": "human", "value": "你好"},
        {"from": "gpt", "value": "你好!有什么可以帮助你的吗?"},
        {"from": "human", "value": "请介绍一下深度学习"},
        {"from": "gpt", "value": "深度学习是机器学习的一个分支..."}
    ]
}

角色标识:human / gpt(或 user / assistant)。

Pairwise 格式(DPO)

{
    "system": "You are a helpful assistant.",
    "question": "解释什么是机器学习",
    "chosen": "机器学习是人工智能的一个子领域...",
    "rejected": "机器学习就是让机器学习。"
}

预训练数据

{"text": "这是一段用于预训练的长文本..."}

支持 .jsonl、.json、.parquet、.csv、.txt、.arrow 输入格式。

使用方式

指令微调数据(Alpaca 格式)

python preprocess_data.py \
    --input ./dataset/alpaca.parquet \
    --tokenizer-name-or-path ./model_from_hf/Qwen2.5-7B-Instruct/ \
    --output-prefix ./finetune_dataset/alpaca \
    --handler-name AlpacaStyleInstructionHandler \
    --tokenizer-type PretrainedFromHF \
    --workers 4 \
    --prompt-type qwen

预训练数据

python preprocess_data.py \
    --input ./dataset/raw_text.parquet \
    --tokenizer-name-or-path ./model_from_hf/Qwen2.5-7B/ \
    --output-prefix ./pretrain_dataset/data \
    --tokenizer-type PretrainedFromHF \
    --handler-name GeneralPretrainHandler \
    --json-keys text \
    --workers 4

关键参数

参数 说明 示例
--input 输入数据文件路径 ./dataset/alpaca.parquet
--output-prefix 输出文件前缀 ./finetune_dataset/alpaca
--tokenizer-name-or-path 分词器路径(HF 模型目录) ./model_from_hf/Qwen2.5-7B-Instruct/
--tokenizer-type 分词器类型 PretrainedFromHF
--handler-name 数据处理器 AlpacaStyleInstructionHandler
--prompt-type 对话模板类型 qwen、llama3、glm4
--json-keys 预训练文本字段名 text(预训练数据必需)
--map-keys 字段映射(非标准数据格式) '{"prompt":"question"}'
--workers 并行处理线程数 4
--seq-length 序列长度(打包时使用) 4096
--log-interval 日志打印间隔 1000

Prompt 模板

模板名 适用模型
qwen Qwen、Qwen2.5
qwen3 Qwen3
llama3 LLaMA 3/3.1
llama2 LLaMA 2
glm4 GLM-4
deepseek3 DeepSeek-V3
deepseek2 DeepSeek-V2
baichuan2 Baichuan2
mistral Mistral
chatml ChatML 通用格式

输出文件结构

指令微调数据输出(预处理生成 packed 格式文件)

<prefix>_packed_input_ids_document.bin / .idx
<prefix>_packed_labels_document.bin / .idx
<prefix>_packed_attention_mask_document.bin / .idx

Pairwise 数据输出(DPO)

<prefix>_packed_chosen_input_ids_document.bin / .idx
<prefix>_packed_chosen_labels_document.bin / .idx
<prefix>_packed_rejected_input_ids_document.bin / .idx
<prefix>_packed_rejected_labels_document.bin / .idx

预训练数据输出

<prefix>_text_document.bin / .idx

注意:预训练 --data-path 需包含 _text_document 后缀(如 ./dataset/data_text_document),微调则使用前缀即可。

数据路径约定

训练时 --data-path 应设为输出前缀(如 ./finetune_dataset/alpaca),不要包含 _packed。数据加载器 get_packed_indexed_dataset() 会自动拼接 packed*_document 后缀。

# 正确
--data-path ./finetune_dataset/alpaca

# 错误
--data-path ./finetune_dataset/alpaca_packed

多文件数据集

支持多个数据文件按权重混合:

--data-path 0.7 ./dataset/pretrain_zh 0.3 ./dataset/pretrain_en

适用场景

  • 为 MindSpeed-LLM 训练准备预训练语料数据
  • 准备 Alpaca/ShareGPT 格式的指令微调数据
  • 准备 Pairwise/DPO 偏好对齐数据
  • 非标准字段数据格式的字段映射处理
  • 多数据文件按权重混合

限制

  • 需配合昇腾 NPU 环境使用。
  • 预处理报错提示 tokenizer 找不到时,需确保 --tokenizer-name-or-path 指向包含 tokenizer.json 或 tokenizer.model 的目录。
  • 处理速度慢时可增加 --workers 参数(建议不超过 CPU 核心数)。
  • ShareGPT 格式的角色标识需使用 human / gpt 或 user / assistant。
  • 数据预处理完成后,权重转换可使用 mindspeed-llm-weight-prep,训练启动可使用 mindspeed-llm-training。