
# 构建增量预训练数据集
#### 获取源数据
金融领域增量预训练所需要的数据主要包含通用预训练数据和金融行业预训练数据。本案例推荐的开源数据集如下：
- **通用中文预训练数据** **（CCI 3.0-HQ** **）：**
  基于CCI 3.0语料库，BAAI进一步进行加工，通过两阶段混合过滤管道开发，显著提升了数据质量，最终加工出500GB的高质量中文文本数据。为了评估有效性，在各种数据集上从头开始训练了一个0.5B参数模型，使用100B个token，在零样本设置下，在10个基准测试中取得了比CCI3.0、SkyPile和WanjuanV1更优越的性能。
  数据集下载链接为：<https://huggingface.co/datasets/BAAI/CCI3-HQ/tree/main>。用户可直接根据文件名进行下载，如[图1]。
  图1CCI 3.0-HQ数据集下载界面   
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002542765435.png) 
- **通用英文预训练数据（FineWeb Edu）：**
  FineWeb Edu由HuggingFace团队推出，这是FineWeb的一个子集，通过Llama-3-70B-Instruct模型生成的合成注释进行分类和过滤，最终形成了一个1.3万亿token的教育类数据集，表现优于所有公开可访问的网络数据集。总大小约1.3T token，同时提供了10B/100B/350B token量级的数据集来快捷使用。
  数据集下载链接为：<https://huggingface.co/datasets/HuggingFaceFW/fineweb-edu/tree/main>。用户可直接根据文件名进行下载。如[图2]
  图2FineWeb Edu数据集下载界面   
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002511165466.png) 
- **金融行业预训练数据（** **IndustryCorpus2** **）：**
  IndustryCorpus2在IndustryCorpus的基础上进一步升级和迭代，基于原有数据，引入了更多高质量的数据源，如pile、bigcode、open-web-math等数学和代码数据。为了更好地适应行业分类体系，结合国家统计局制定的国民经济行业分类体系（20个类别）和世界知识体系重新设计了行业类别，设置了31个行业类别，基本覆盖了当前主流行业。并采用了规则过滤+模型过滤方案，极大地提高了整体数据质量。
  数据集下载链接为：<https://www.modelscope.cn/datasets/BAAI/IndustryCorpus2/files>。用户可根据目录名和文件名进行下载。如[图3]
  图3IndustryCorpus2数据集下载界面   
  ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002542645423.png) 
 
#### 数据预处理
与[预处理数据](https://support.huaweicloud.com/bestpractice-pangulm/pangulm_04_0110.html)中一致，将文本处理为JSONL格式即可，其中的每一行文本为一个JSON字符串，且每个JSON字符串只包含 "text" 字段，该字段的值表示您的文本数据。
样例如下：
```
{"text":"在交易世界中,如何了解交易大众? 华严经初发心功德品说:观察众生如幻梦,以业力故常流转.透过这一句话来了解交易大众应是非常贴切的.众生如幻,业力常转,这是佛教的观点,但也是一种较为深入的人生观.何以说,众生如幻?原因是一切生命都是短暂的,都是不断变化的,不是幻解的是交易的主体和客体.交易主体是什么?就是交易大众,包括芸芸众生和交易大师们.交易实体是什么?就是交易标的,包括股票,期货,衍生品,国债等五花八门.因为交易客体相当复杂,一般人只能选1-2种来操作,全方位操作的人并不多,时间上也不允许你这么做.因此对交易客体的了每只个股买了20%的仓位,隔一段时间一看,并非五支全涨,而是互有涨跌,为什么有人推荐的个股上涨了?有人推荐的个股回调了?最基本的原因是每人的业力不一样,观察的结果就会不一样.业力类似于精神上的地心引力,牵引众生去做不同的事业,这是佛教的核心思想之一,问题是如何种束缚,而是一种解放."}
```
#### 导入数据到ModelArts Studio平台
用户可以通过OBS或本地上传文件的方式来导入数据到ModelArts Studio平台。由于预训练数据的量级较大，一般使用OBS的方式进行导入，导入步骤如下：
1. 登录ModelArts Studio平台，进入所需空间。
2. 在左侧导航栏中选择"数据工程 \> 数据获取 \> 导入任务"，单击界面右上角"创建导入任务"。
3. 在"创建导入任务"页面，选择"数据集类型"、"文件格式"和"导入来源"，其中导入来源选择"OBS"。

4. 填写"数据集名称"和"描述"，可选择填写"扩展信息"。
   扩展信息包括"数据集属性"与"数据集版权"：
   - 数据集属性。可以给数据集添加行业、语言和自定义信息。
   
   - 数据集版权。训练模型的数据集除用户自行构建外，也可能会使用开源的数据集。数据集版权功能主要用于记录和管理数据集的版权信息，确保数据的使用合法合规，并清晰地了解数据集的来源和相关的版权授权。通过填写这些信息，可以追溯数据的来源，明确数据使用的限制和许可，从而保护数据版权并避免版权纠纷。
     
5. 单击页面右下角"立即创建"，回退至"导入任务"页面，在该页面可以查看数据集的任务状态，若状态为"运行成功"，则数据导入成功。
![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
详细的数据导入步骤请见[导入数据](https://support.huaweicloud.com/bestpractice-pangulm/pangulm_04_0111.html)。
#### 加工数据集
将数据导入至平台后，需要对数据进行加工，保证预训练数据内容质量高。
创建数据加工任务的步骤如下：
1. 登录ModelArts Studio平台，进入所需空间。
2. 在左侧导航栏中选择"数据工程 \> 数据加工 \> 加工任务"，单击界面右上角"创建加工任务"。
3. 在选择需要加工的数据集后，单击界面右下角"下一步"，即可进入"加工算子选择界面"。
   1. 在左侧"添加算子"分页勾选所需算子。针对本案例的预训练数据集，按顺序选择了"符号标准化"、"异常字符过滤"、"个人数据脱敏"、"敏感词过滤"、"问答对去重"加工算子。
   
   2. 在右侧"加工步骤编排"页面配置各算子参数，可拖动右侧"![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002542645389.png)"以调整算子执行顺序。之后单击界面右下角"下一步"。
   
   3. 在编排过程中，可单击右上角"保存为新模板"将当前编排流程保存为模板。后续创建新的数据加工任务时，可直接单击"选择加工模板"进行使用。 若选择使用加工模板，将删除当前已编排的加工步骤。
      图4选择加工模板   
      ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002542765427.png) 
   
   
   图5选择数据加工算子
   ![](https://support.huaweicloud.com/bestpractice-pangulm/zh-cn_image_0000002542645409.png)
   ![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
   如需自定义加工算子，可以在"加工任务"页面单击右上角"管理加工算子"进入管理加工算子页面，之后单击右上角"创建自定义算子"来进行创建。具体创建流程详见[自定义数据集加工算子](https://support.huaweicloud.com/usermanual-pangulm/pangulm_04_0291.html)。创建成功的自定义算子可在"加工算子选择界面"进行选择调用。
   
4. 填写"资源配置"，"数据集名称"和"描述"，以及"扩展信息"。
5. 单击页面右下角"启动加工"，回退至"加工任务"页面，在该页面可以查看数据集加工任务的状态，若状态为"数据集生成成功"，则数据加工成功。
![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
ModelArts Studio平台支持的数据加工算子以及详细功能介绍请见[文本类加工算子介绍](https://support.huaweicloud.com/usermanual-pangulm/pangulm_04_0029.html)。
 #### 配比数据集
由于行业数据通常较为难以获取，所以进行数据配比时可以行业数据为基准进行配置。
本案例中使用的开源行业数据集IndustryCorpus2中，共有40GB中文金融行业数据，可以同步配置40GB英文金融行业数据，共计80GB金融行业数据。在此基础上，可按照1:6的比例，配置480GB通用预训练数据，其中英文（FineWeb Edu）和中文（CCI 3.0-HQ）数据各一半。
**在ModelArts Studio平台上使用数据集配比功能时：**
1. 登录ModelArts Studio平台，进入所需空间。
2. 在左侧导航栏中选择"数据工程 \> 数据加工 \> 配比任务"，单击界面右上角"创建配比任务"。

3. 文本类型选择"预训练文本"，之后选择需要配比的数据集，单击"下一步"。
4. 输入每个数据集配置的条数比例，单击"下一步"。
5. 填写"资源配置"、"数据集名称"和"描述"，以及"扩展信息"。
6. 单击页面右下角"确定"，回退至"配比任务"页面，在该页面可以查看数据集配比任务的状态，若状态为"数据集生成成功"，则数据配比成功。
为了将数据用于后续模型训练等操作，需要将数据集进行发布。
#### 发布数据集
**创建文本类数据集发布任务步骤如下：**
1. 登录ModelArts Studio平台，进入所需空间。
2. 在左侧导航栏中选择"数据工程 \> 数据发布 \> 发布任务"，单击界面右上角"创建发布任务"。
3. 在"创建发布任务"页面，选择数据集模态"文本 \> 预训练文本"类型的数据集，选择数据集，单击"下一步"。
4. 在"基本配置"中选择数据用途、数据集可见性、使用场景和格式配置。
   ![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
   - 由于数据工程需要支持对接盘古大模型或三方大模型，为了使这些数据集能够被这些大模型正常训练，平台支持发布不同格式的数据集。
   
   - 在本案例中，因为需要使用该数据集训练盘古大模型，所以需选择格式配置为**盘古格式**。
     
5. 填写参数配置、数据集名称、描述，设置扩展信息后，单击"确定"。
   表1参数配置 
   | 参数名称           | 参数说明                                                                                                                                                                                                                                                                     |
   |:---|:---|
   | numExecutors   | Executor的数量，默认值2。Executor是运行在工作节点上的进程，它负责执行具体的task任务，并将计算结果返回给Driver。每个Executor每个核同时能跑一个task任务，所以增加了Executor的个数相当于增大了任务的并发度。在资源充足的情况下，可以相应增加Executor的个数，以提高运行效率。 numExecutors \* executorMemory最小值为4，最大值为16。 |
   | executorCores  | 每个Executor进程使用的CPU内核数量，默认值2。每个Executor多个核同时能跑多个task任务，相当于增大了任务的并发度。但是由于所有核共用Executor的内存，所以要在内存和核数之间做好平衡。 numExecutors \* executorMemory最小值为4，最大值为16。executorCores和executorMemory的比例需要在1:2\~1:4之间。           |
   | executorMemory | 每个Executor进程使用的内存数量，默认值4。Executor的内存主要用于任务执行、通信等。当一个任务很大的时候，可能需要较多资源，因而内存也可以做相应的增加；当一个任务较小运行较快时，就可以增大并发度减少内存。 executorCores和executorMemory的比例需要在1:2\~1:4之间。                                                 |
   | driverCores    | 驱动程序进程使用的CPU内核数量，默认值2。Driver负责任务的调度，和Executor之间的消息通信。 driverCores和driverMemory的比例需要在1:2\~1:4之间。                                                                                                             |
   | driverMemory   | 驱动程序进程使用的内存数量，默认值4。Driver负责任务的调度，和Executor之间的消息通信。当任务数变多，任务平行度增大时，Driver内存都需要相应增大。 driverCores和driverMemory的比例需要在1:2\~1:4之间。                                                                                 |
      
   
6. 当任务状态显示为"运行成功"时，说明数据发布任务执行成功，生成的"发布数据集"可在"数据工程 \> 数据管理 \> 数据集 \> 发布数据集"中查看。
![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
详细的数据导入步骤请见[配比并发布数据集](https://support.huaweicloud.com/bestpractice-pangulm/pangulm_04_0114.html)。
