11.28

embedded/2024/11/30 8:54:30/

1.制作数据集,input->text   label->llama_outpus['hidden_states']

这样的好处:在训练时可以直接剔除一整条数据,无需在原文本数据集和llama输出数据集做两次剔除

2.在蒸馏py 设置模型fp16 -> model.half

with autocast看是否能运行 想知道是否会自动生成weight(fp32) gradient(fp32) 的副本?

3 如果出现nan 修改esp值

4.把原来的整段checkpoint分段保存,因为如果一旦文件被损害,所有teacher_output的结果都没了。。。。

5.一维的input_ids可以直接[item[0].squeeze(0) for item in batch],用[]来堆叠;二维的label必须用torch.stack吗

  • 对于 一维张量(如 input_ids),可以直接使用列表 [item["input_ids"].squeeze(0) for item in batch] 来堆叠,因为它们形状一致。squeeze(0),去掉第一个维度(如果存在),以确保它是一个一维张量
  • 对于 二维张量(如 label),你必须使用 torch.stack 来堆叠,确保它们在相同维度下对齐,并且形状正确。

6.mask 每个batch的causal mask是一样的

  • Mask 矩阵需要显式创建和传递,例如通过 attention_mask。LLaMA 和其他类似模型通常会利用传入的 attention_mask 来屏蔽填充部分和生成因果遮蔽。
  • 填充 Mask:对填充(padding)部分进行屏蔽,确保模型不会“看到”填充的部分。填充部分的 attention 权重通常设置为负无穷(或一个非常小的值),这样在计算 attention 时这些位置就不会被关注。
  • 因果 Mask:在自回归模型(如 GPT 或 LLaMA)中,因果 mask 用于保证当前 token 只能依赖于它之前的 token,而不能依赖于后面的 toke

 7.检查tensor

torch.numel() 方法,它返回张量中的元素个数。如果元素个数为零,那么表示该张量为空

  • torch.all(attention_mask):如果 attention_mask 中所有的值都为 True,则返回 True
  • torch.any(attention_mask):如果 attention_mask 中有任何一个值为 True,则返回 True

8.手动填充 vs tokenzier填充 https://zhuanlan.zhihu.com/p/548347360

from torch.nn.utils.rnn import pad_sequence
import torch

def collate_fn(batch):
    # 获取批次中的 input_ids 和 position_ids(假设每个样本是一个字典)
    input_ids = [item["input_ids"].squeeze(0) for item in batch]  # 假设每个 item["input_ids"] 是单个样本
    position_ids = [item["position_ids"].squeeze(0) for item in batch]
    idx = torch.tensor([item["idx"] for item in batch])
    label = [item["label"] for item in batch]

    # 填充 input_ids 和 position_ids
    input_ids_padded = pad_sequence(input_ids, batch_first=True, padding_value=0)
    position_ids_padded = pad_sequence(position_ids, batch_first=True, padding_value=0)

    # 生成 attention_mask:有效部分为 1,填充部分为 0
    attention_mask = (input_ids_padded != 0).long()

    # 生成 global_idx 或其他需要的附加信息
    global_idx = torch.arange(start=idx[0].item(), end=idx[0].item() + len(batch))

    return input_ids_padded, position_ids_padded, global_idx, attention_mask, label

encoding = tokenizer(
    text,
    truncation=True,
    padding=True,  # 自动填充
    max_length=512,
    return_tensors="pt"  # 返回 PyTorch tensor 格式
)

# 输出
print("Input IDs:", encoding["input_ids"])
print("Attention Mask:", encoding["attention_mask"])

  • pad_token_id:填充符号的 ID,默认是 None,如果需要填充,需要手动设置一个 ID。
  • bos_token_id:句子开始符号的 ID,用于表示文本生成的开始。
  • eos_token_id:句子结束符号的 ID,用于表示文本生成的结束。

http://www.ppmy.cn/embedded/141699.html

相关文章

【天地图】HTML页面实现车辆轨迹、起始点标记和轨迹打点的完整功能

目录 一、功能演示 二、完整代码 三、参考文档 一、功能演示 运行以后完整的效果如下: 点击开始,小车会沿着轨迹进行移动,点击轨迹点会显示经纬度和时间: 二、完整代码 废话不多说,直接给完整代码,替换…

flutter in_app_purchase google支付 PG-GEMF-01错误

问题:PG-GEMF-01错误 flutter 使用in_app_purchase插件升降级订阅时报错PG-GEMF-01。 解决方案: 升降级订阅时,确保不调用 MethodCallHandlerImpl.java文件中的 setObfuscatedAccountId()方法、setObfuscatedProfileId()方法 原因&#xf…

qt QLinearGradient详解

1、概述 QLinearGradient是Qt框架中QGradient的一个子类,用于创建线性渐变效果。线性渐变是一种颜色沿着一条直线平滑过渡到另一种颜色的效果。QLinearGradient允许你定义渐变的起点和终点,以及在这些点之间的颜色变化。你可以使用它来为图形、背景、边…

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层:传输设备。原始电信号比特流。数据链路层:代表是交换机。物理地址寻址,交…

【前端开发】小程序无感登录验证

概述 封装的网络请求库,主要用于处理 API 请求并支持自动处理 token 过期 和 token 刷新,适用于需要身份验证的应用场景,特别是在移动端中。 主要功能 自动附加 Token 在每个请求中自动附加 Authorization 头部,使用存储的 acces…

【ChatGPT大模型开发调用】如何获得 OpenAl API Key?

如何获取 OpenAI API Key 获取 OpenAI API Key 主要有以下三种途径: OpenAI 官方平台 (推荐): 开发者用户可以直接在 OpenAI 官方网站 (platform.openai.com) 注册并申请 API Key。 通常,您可以在账户设置或开发者平台的相关页面找到申请入口。 Azure…

什么是JAVA反射??? 常用的API有哪些???怎么获取Class对象.....

目录 引言: 一、获取Class对象的方法 二、使用反射获取构造方法 三、使用反射获成员变量的方法 四、使用反射获成员方法 五.反射的优缺点有哪些? 优点包括: 缺点包括: 总结: 引言: 什么是反射:反射其实我们很早就知晓了…

Linux开发者的CI/CD(11)jenkins变量

文章目录 1. **环境变量 (Environment Variables)**常见的环境变量:示例:2. **构建参数 (Build Parameters)**常见的构建参数类型:示例:3 **在 `stages` 块内定义局部变量**示例:使用 `script` 步骤定义局部变量4 变量引用陷阱在 Jenkins 中,变量是自动化流程中非常重要的…