mathglm代码调试记录

数据集格式:

读取数据集代码:

python 复制代码
def make_loaders(args, create_dataset_function):
    """makes training/val/test
    Args:
        args.train_data, args.valid_data, args.test_data: str. Paths to the dataset.
        args.split: str. format: "8,1,1". how to split train_data.
        args.dataset_type: use to create the right datasets. 
    """
    make_dataset = partial(make_dataset_full, 
                        create_dataset_function=create_dataset_function)

    world_size = torch.distributed.get_world_size(
        group=mpu.get_data_parallel_group())
    batch_size = args.batch_size * world_size
    eval_batch_size = batch_size
    if args.eval_batch_size is not None:
        eval_batch_size = args.eval_batch_size * world_size
    
    split = get_split(args)

    data_set_args = {
        'path': args.train_data,
        'split': split,
    }

    eval_set_args = copy.copy(data_set_args)
    eval_set_args['split'] = [1.]
    
    # make datasets splits and tokenizer
    train = None
    valid = None
    test = None

    if args.train_data is not None:
        train = make_dataset(**data_set_args, args=args, dataset_weights=args.train_data_weights, is_train_data=True)
        if should_split(split):
            train, valid, test = train

    # make training and val dataset if necessary
    if valid is None and args.valid_data is not None:
        eval_set_args['path'] = args.valid_data
        valid = make_dataset(**eval_set_args, args=args, random_mapping=not args.strict_eval)
    if test is None and args.test_data is not None:
        eval_set_args['path'] = args.test_data
        test = make_dataset(**eval_set_args, args=args, random_mapping=not args.strict_eval)

    # wrap datasets with data loader
    if train is not None and args.batch_size > 0:
        train = make_data_loader(train, batch_size, args, split='train')
        args.do_train = True
    else:
        args.do_train = False
    eval_batch_size = eval_batch_size if eval_batch_size != 0 else batch_size
    if valid is not None:
        valid = make_data_loader(valid, eval_batch_size, args, split='val')
        args.do_valid = True
    else:
        args.do_valid = False
    if test is not None:
        test = make_data_loader(test, eval_batch_size, args, split='test')
        args.do_test = True
    else:
        args.do_test = False

    return train, valid, test

数据读取后:

/home/user/zjb/SAT/mathglm/continue_train_mathglm.py

get_batch(data_iterator, args, timers):# 传入参数data_iterator

continue_train_mathglm.py文件中,get_batch函数从data_iterator获取数据,然后将其转换为词向量。这是通过调用get_batch函数中的mpu.broadcast_data函数实现的。

然后,在forward_step函数中,get_batch函数的返回值被传递给模型。模型接收的输入是词向量,而不是原始的字符串。

这种转换是因为模型不能直接处理原始的文本数据。模型需要的是一种数值表示,通常是词向量,这样才能进行数学运算。因此,原始的字符串数据需要被转换为词向量。

create_dataset_function函数中,你可以看到这个转换过程。process_fn函数接收一个字符串row,然后使用tokenizer._encode(value)将其转换为词向量。这个词向量然后被添加到ids列表中,最后返回一个包含词向量的字典。

所以,data_iterator中的数据是字符串,因为这是原始的输入数据。然后,这些数据被转换为词向量,以便可以被模型处理。

其中data_iterator是dataloaderlter如图所示

data如图所示

data_b

mpu.broadcast_data(keys, data, datatype) 是一个函数调用,它来自于 SwissArmyTransformer 库中的 mpu 模块。这个函数的作用是在分布式环境中广播数据。

create_dataset_function函数在continue_train_mathglm.py文件中。这个函数用于创建一个数据集,它接收一个路径和参数,然后返回一个MathDataset对象。在这个函数中,它定义了一个process_fn函数,这个函数用于处理每一行数据,将其转换为词向量。

相关推荐
nancy_princess8 小时前
clip实验
人工智能·深度学习
飞哥数智坊8 小时前
TRAE Friends@济南第4次活动:100+极客集结,2小时极限编程燃爆全场!
人工智能
AI自动化工坊8 小时前
ProofShot实战:给AI编码助手添加可视化验证,提升前端开发效率3倍
人工智能·ai·开源·github
飞哥数智坊8 小时前
一场直播涨粉 2 万的背后!OpenClaw + 飞书,正在重塑软件交付的方式
人工智能
飞哥数智坊8 小时前
养虾记第3期:安装、调教、落地,这场沙龙我们全聊了
人工智能
再不会python就不礼貌了8 小时前
从工具到个人助理——AI Agent的原理、演进与安全风险
人工智能·安全·ai·大模型·transformer·ai编程
AI医影跨模态组学8 小时前
Radiother Oncol 空军军医大学西京医院等团队:基于纵向CT的亚区域放射组学列线图预测食管鳞状细胞癌根治性放化疗后局部无复发生存期
人工智能·深度学习·医学影像·影像组学
A尘埃9 小时前
神经网络的激活函数+损失函数
人工智能·深度学习·神经网络·激活函数
没有不重的名么9 小时前
Pytorch深度学习快速入门教程
人工智能·pytorch·深度学习
有为少年9 小时前
告别“唯语料论”:用合成抽象数据为大模型开智
人工智能·深度学习·神经网络·算法·机器学习·大模型·预训练