当前位置: 首页 > news >正文

Megatron - LM 重要文件解析 - /tools/preprocess_data.py

 preprocess_data.py 的主要功能。这是 Megatron-LM 的数据预处理脚本,主要用于将原始文本数据转换为模型训练所需的格式。

核心功能:

1. 数据预处理流程:

  • 输入:原始文本文件(JSON格式)
  • 处理:分句 -> 分词 -> 转换为token IDs
  • 输出:二进制格式(.bin和.idx文件)

2. 主要组件

class Encoder:

    # 负责文本编码的核心类

    def split(self, json_line):

        # 将文本分割成句子

    def encode(self, json_line):

        # 将文本转换为token IDs

3. 关键参数:

--input              # 输入文件路径

--output-prefix      # 输出文件前缀

--vocab-file         # 词表文件

--tokenizer-type     # 分词器类型

--split-sentences    # 是否分句

--workers            # 并行处理的工作进程数

--partitions         # 文件分区数

4. 特殊功能:

  • 支持多进程并行处理
  • 支持大文件分区处理
  • 支持句子分割(使用NLTK)
  • 支持多种tokenizer(GPT2、BERT等)
  • 支持压缩文件(.gz)

5. 输出格式:

  • .bin文件:包含token IDs的二进制数据
  • .idx文件:索引文件,用于快速访问数据

6. 使用示例:

python tools/preprocess_data.py \--input your_text.json \--output-prefix output_name \--vocab-file vocab.json \--tokenizer-type GPT2BPETokenizer \--workers 4

7. 这个脚本的主要目的是:

  1. 将原始文本转换为模型可以直接使用的格式
  2. 提高数据加载效率(二进制格式)
  3. 支持大规模数据处理(并行和分区)

8.  输入json文件内容格式要求

输入的 JSON 文件格式有特定要求。让我详细解释:

基本格式要求:

  • 每行必须是一个独立的 JSON 对象(jsonl 格式)
  • 默认情况下,JSON 对象中需要有 text 字段(可以通过 --json-keys 参数修改)

示例格式:

{"text": "这是第一行文本"}
{"text": "这是第二行文本"}

 支持多字段

{"text": "主要文本", "title": "标题", "summary": "摘要"}

如果要处理多个字段,需要在命令中指定 --json-keys 参数,例如:

--json-keys text title summary

小节8 信息主要被来源于对源码以下部分的解读(如有错误欢迎纠正):

 JSON格式要求来自 Encoder 类的处理逻辑:

def encode(self, json_line):data = json.loads(json_line)  # 每行必须是合法的JSONids = {}lens = {}for key in self.args.json_keys:  # 默认 json_keys=['text']text = data[key]  # 从JSON中获取指定key的文本

默认的 text 字段来自参数解析部分

def get_args():parser = argparse.ArgumentParser()group.add_argument('--json-keys', nargs='+', default=['text'],help='space separate listed of keys to extract from json')

每行一个JSON对象的要求来自文件处理逻辑:

def process_json_file(self, file_name):fin = open(input_file_name, 'r', encoding='utf-8')encoded_docs = pool.imap(encoder.encode, fin, 32)  # 逐行处理

多字段支持的功能来自参数定义和处理逻辑:

group.add_argument('--json-keys', nargs='+', default=['text'],help='space separate listed of keys to extract from json')

相关文章:

  • 极狐GitLab 中如何自定义角色?
  • windows使用openssl生成IIS自签证书全流程
  • ProxySQL 性能调优实战案例
  • 车载软件架构 --- 驾驶员不感知的控制器软件运行
  • Oracle--PL/SQL编程
  • Pytorch实用教程(一):torch.compile计算提速
  • crontab 定时备份 mysql 数据库
  • PowerBi中REMOVEFILTERS怎么使用?
  • 开源状态机引擎,在实战中可以放心使用
  • SAP 采购订单如何防止开票数量 大于 收货数量呢
  • 面向组织的网络安全措施
  • java并发编程-高性能内存队列
  • OpenVINO教程(二):图片目标检测推理应用
  • MySQL VS SQL Server:优缺点全解析
  • Unity3D 编辑器扩展开发指南
  • 基于大模型的贲门失弛缓症手术全流程风险预测与治疗方案研究
  • docker 国内源和常用命令
  • 【Ultralytics 使用yolo12 读取tiff 数据异常解决】
  • 实践项目开发-hbmV4V20250407-跨平台开发框架深度解析与VSCode一站式开发实践
  • 双向流-热-固耦合分析
  • 中国围棋协会将不组队参加今年的LG杯世界棋王赛
  • “80后”师虎已任陕西旬邑县委书记
  • 扫描类软件成泄密“推手”,网盘账号密码遭暴力破解
  • 又有多地推进产科整合
  • 解除近70家煤电厂有毒物质排放限制,特朗普能重振煤炭吗?
  • 马上评|机器人马拉松,也是具身智能产业的加速跑