细嗦Transformer(四):训练测试,使用一个简单的copy任务测试训练代码

关注我:细嗦大模型

我会定期更气LLM算法系列文章,旨在结合代码去理解各知识点。可以观众我的公众号,第一时间收到更新。关注公众号回复”思维导图“还可以获得LLM基础知识预训练微调人类对齐RLHF、DPO推理加速5个部分的思维导图。


在正式开始训练之前,我们先用一个简单的示例跑一跑训练过程。下面的示例是一个复制内容的任务,给定一个词汇表中的随机字符串,目标是生成相同的字符串。

合成数据

下面是一个产生批次数据的函数,传入词表V,批次大小batch_size,批次数量nbatched,然后一个批次一个批次的生成数据,这里建议好好看了一下yield函数,这个函数不会一次返回所有批次的数据,而是一个批次一个批次的返回,只有当模型需要数据的时候,才会返回一个批次数据,这对于大规模预训练中,是必不可少的。

"""
返回一个张量,其中充满在low(包含)和high(不包含)之间均匀生成的随机整数。 张量的形状由参数siz定义。

Parameters

-  **low**: 生成的随机整数的下界. Default: 0.
-  **high**: 生成的随机整数的上界.
-  **size**: 生成的随机整数的张量的形状,可以是一个整数或元组
    
Keyword Arguments
-   **generator**:一个用于采样的伪随机数生成器
-   **out**: 输出的tensor.
-   **dtype** (torch.dtype, optional): 生成的数据类型,如果为None,是 `torch.int64`.
-   **layout**:返回张量的期望布局. Default: `torch.strided`.
-   **device**:返回张量的期望装置。Default:如果为None,则使用当前设备作为默认张量类型。设备将是CPU张量类型的CPU和当前CUDA张量类型的CUDA设备。
-   **requiresgrad**:If autograd should record operations on the returned tensor. Default: False.
    

>>> torch.randint(3, 10, (2, 2))
tensor([[4, 5],
        [6, 7]])

"""
torch.randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requiresgrad=False)[Tensor]

detach的作用

detach()函数在Pytorch中用于从当前计算图中分离张量,分离是创建一个新的张量,原始张量在计算图中依旧存在,并不受影响。但是新张量不参与梯度计算,与原始张量共享数据。因此,对分离后的张量进行的任何操作都不会影响原始张量,也不会在计算图中留下任何痕迹。

由于涉及到计算图,这个会在后续进行补充。

import torch
from utils.batch import Batch

def data_gen(V, batchsize, nbatches):
    "Generate random data for a src-tgt copy task."
    for i in range(nbatches):
        data = torch.randint(1, V, size=(batchsize, 10))
        data[:, 0] = 1
        src = data.requires_grad_(False).<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值