文章目录
关注我:细嗦大模型
我会定期更气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).<

最低0.47元/天 解锁文章
1062

被折叠的 条评论
为什么被折叠?



