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

准备数据

本教程使用到的训练数据集是Alpaca数据集。您也可以自行准备数据集。

数据集下载

本教程使用Alpaca数据集,数据集的介绍及下载链接如下。

Alpaca数据集是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。

自定义数据

  • 预训练数据:用户也可以自行准备预训练数据。数据要求如下:

    使用标准的.json格式的数据,通过设置--json-key来指定需要参与训练的列。请注意huggingface中的数据集具有如下this格式。可以使用–json-key标志更改数据集文本字段的名称,默认为text。在维基百科数据集中,它有四列,分别是id、url、title和text。可以指定–json-key标志来选择用于训练的列。

    {
        'id': '1',
        'url': 'https://simple.wikipedia.org/wiki/April',
        'title': 'April',
        'text': 'April is the fourth month...'
    }                     
  • Alpaca 指令微调数据:如上述提供的 alpaca_gpt4_data.json 数据集,数据集包含有以下字段:
    • instruction:描述模型应执行的任务。指令中的每一条都是唯一的。
    • input:任务的可选上下文或输入。instruction 对应的内容会与 input 对应的内容拼接后作为指令,即指令为 instruction\ninput。
    • output:生成的指令的答案。
    [
     {
         "instruction": "指令(必填)",
         "input": "输入(选填)",
         "output": "模型回答(必填)",
     } 
    ]
  • MOSS 指令微调数:本案例中还支持 MOSS 格式数据,标准的.json格式的数据,内容包括可以多轮对话、指令问答。例如以下样例:
    {
      "conversation_id": 1,
      "meta_instruction": "",
      "num_turns": 3,
      "chat": {
        "turn_1": {
          "Human": "<|Human|>: 如何保障工作中遵循正确的安全准则?<eoh>\n",
          "Inner Thoughts": "<|Inner Thoughts|>: None<eot>\n",
          "Commands": "<|Commands|>: None<eoc>\n",
          "Tool Responses": "<|Results|>: None<eor>\n",
          "MOSS": "<|MOSS|>: 为了保障工作中遵循正确的安全准则,以下是一些建议:\n\n1.了解相关安全规定和标准:了解相关的安全规定和标准,并遵守它们。这可以包括公司和政府的安全标准,以及行业标准和最佳实践。\n\n2.培训和教育:确保您和您的同事接受了必要的培训和教育,以了解正确的安全准则和行为。\n\n3.使用正确的工具和设备:确保您使用正确的工具和设备,并且它们得到了正确的维护和保养。\n\n4.个人防护装备:确保您和您的同事穿戴正确的个人防护装备,如安全鞋、透明眼镜或面罩、手套等。\n\n5.创建一个安全文化:鼓励个人对安全的责任感和意识,并创建一个安全文化,使人们始终关注自己和他人的安全。\n\n6.持续监测和改进:持续监测和改进安全准则和程序,以确保它们保持最新,并适应变化的情况。\n\n这些措施可以帮助您和您的同事在工作中保障正确的安全准则,确保您的工作场所是一个安全的环境。<eom>\n"
        },
        "turn_2": { ... },
        "turn_3": { ... },
      "category": "Brainstorming"
    }

    如果用户希望将 MOSS 数据集的 Excel 格式转换为,json 格式。可使用代码中提供的 scripts/tools/ExcelToJson.py 工具,其转换的要求为:

    • 本脚本可以处理的格式有:.xls .xlsx .csv .xlsb .xlsm .xlst
    • MOSS 数据集的 Excel 中需要有三个列名称:conversation_id, Human, assistant
      • conversation_id: 指定的对话id, 如果相同, 转换后就放在同一conversation_id的不同turn_X下。如果为空,则放在新的conversation_id下。
      • Human: 数据集中每条数据的输入。
      • assistant: 数据集中每条数据的输出。
    • 运行命令示例:
      1. python ExcelToJson.py --user_id=001 --excel_addr=xxx.xlsx(.csv) --dataset_name=example --test_count=3
      2. python ExcelToJson.py --user_id=001 --excel_addr=xxx.xlsx(.csv) --dataset_name=example --proportion=2
      (随机选择十分之二的总数据量作为测试集,小数时则四舍五入)
      3. python ExcelToJson.py --user_id=001 --excel_addr=xxx.xlsx(.csv) --dataset_name=example --proportion=2 --test_count=3
      (随机选择 3个数据作为测试集)
      • user_id: 用户的唯一不重复的ID值,必选。
      • excel_addr: 待处理的excel文件的地址,必选。
      • dataset_name: 处理后的数据集名称,必选。
      • proportion: 测试集所占份数,范围[1,9],可选。
      • test_count: 测试集的个数,范围[1,处理后数据集总长度 - 1],可选。(用户在输入test_count时,要小于 Excel文件中指定的不同conversation_id的个数 + conversation_id为空的个数)
      • proportion 和 test_count 二选一即可,如果同时输入,则优先使用 test_count,如果都未输入,则返回处理失败 False。
  • LLama-Factory Alpaca 指令微调数据:数据集包含有以下字段:
    • instruction:描述模型应执行的任务。指令中的每一条都是唯一的。
    • input:任务的可选上下文或输入。instruction 对应的内容会与 input 对应的内容拼接后作为指令,即指令为 instruction\ninput。
    • output:生成的指令的答案。
    • system:系统提示词,用来为整个对话设定场景或提供指导原则。
    • history: 一个列表,包含之前轮次的对话记录,每一对都是用户消息和模型回复。这有助于保持对话的一致性和连贯性。
    [
        {
            "instruction": "人类指令(必填)",
            "input": "人类输入(选填)",
            "output": "模型回答(必填)",
            "system": "系统提示词(选填)",
            "history": [
                ["第一轮指令(选填)", "第一轮回答(选填)"],
                ["第二轮指令(选填)", "第二轮回答(选填)"]
            ]
        }
    ]
  • LLama-Factory ShareGPT 指令微调数据:ShareGPT 格式来源于通过记录 ChatGPT 与用户对话的数据集,主要用于对话系统的训练。它更侧重于多轮对话数据的收集和组织,模拟用户与 AI 之间的交互。数据集包含有以下字段:
    • conversations:包含一系列对话对象,每个对象都由发言者(from)和发言内容(value)组成。
    • from:表示对话的角色,可以是"human"(人类)或"gpt"(机器),表示是谁说的这句话。
    • value:具体的对话内容。
    • system:系统提示词,用来为整个对话设定场景或提供指导原则。
    • tools:描述可用的外部工具或功能的信息,这些工具可能被模型用来执行某些任务或获取更多信息。
    [
        {
            "conversations": [
                {
                    "from": "human",
                    "value": "人类指令"
                },
                {
                    "from": "function_call",
                    "value": "工具参数"
                },
                {
                    "from": "observation",
                    "value": "工具结果"
                },
                {
                    "from": "gpt",
                    "value": "模型回答"
                }
                ],
            "system": "系统提示词(选填)",
            "tools": "工具描述(选填)"
        }
    ]

上传数据集至SFS Turbo

准备数据集,例如根据Alpaca数据部分给出的预训练数据集、SFT全参微调训练、LoRA微调训练数据集下载链接下载数据集。可通过两种方式,将数据集上传至SFS Turbo中。

方式一:将下载的原始数据通过SSH直接上传至SFS Turbo中。具体步骤如下:

  1. 进入到/mnt/sfs_turbo/目录下。创建目录“training_data”,将原始数据存放在/mnt/sfs_turbo/training_data目录下。
  2. 通过拖拽文件的方式,上传文件。使用CloudShell或者其它SSH远程工具。数据存放参考目录:
    /mnt/sfs_turbo/training_data
           |── train-00000-of-00001-a09b74b3ef9c3b56.parquet  # 训练原始数据集
           |── alpaca_gpt4_data.json                          # 微调数据文件

方式二:通过OBS Browser+将数据上传至OBS,最后在ECS中使用obsutil工具将OBS数据下载至SFS Turbo中。具体步骤如下:

  1. 创建OBS桶创建的桶下创建文件夹用以存放数据,例如在桶standard-llama2-13b中创建文件夹training_data。
  2. 利用OBS Browser+工具将下载的数据集上传至创建的文件夹目录下。得到OBS下数据集结构:
    obs://<bucket_name>/training_data
           |── train-00000-of-00001-a09b74b3ef9c3b56.parquet  # 训练原始数据集
           |── alpaca_gpt4_data.json                          # 微调数据文件
  3. 在ECS服务器中安装obsutil工具,具体命令可参考obsutil工具快速使用,将OBS桶中的数据下载至SFS Turbo中。注意:需要使用用户账号中的AK和SK进行签名验证,确保通过授权的账号才能访问指定的OBS资源。

相关文档