准备数据
本教程使用到的训练数据集是Alpaca数据集。您也可以自行准备数据集。
Alpaca数据集
本教程使用Alpaca数据集,数据集的介绍及下载链接如下。
Alpaca数据集是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。
- 预训练使用的Alpaca数据集下载:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet,数据大小:24M左右。
- SFT和LoRA微调使用的Alpaca数据集下载:https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/blob/main/alpacaGPT4/alpaca_gpt4_data.json,数据大小:43.6 MB。
自定义数据
- 预训练数据:用户也可以自行准备预训练数据。数据要求如下:
使用标准的.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。
上传数据到指定目录
将下载的原始数据存放在/home/ma-user/ws/training_data目录下。具体步骤如下:
- 进入到/home/ma-user/ws/目录下。
- 创建目录“training_data”,并将原始数据放置在此处。
mkdir training_data
数据存放参考目录结构如下:
${workdir}(例如/home/ma-user/ws ) |── training_data |── train-00000-of-00001-a09b74b3ef9c3b56.parquet # 训练原始数据集 |── alpaca_gpt4_data.json # 微调数据文件
多机情况下,只有在rank_0节点进行数据预处理,转换权重等工作,所以原始数据集和原始权重,包括保存结果路径,都应该在共享目录下。