从零预训练一个tiny-llama#Datawhale组队学习Task2

完整的教程请参考:datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe (github.com)

这是Task2的学习任务

目录

Qwen-blog

Tokenizer(分词器)

Embedding(嵌入)

RMS Norm(RMS Layer Normalization)

enumerate函数

Flash Attention介绍

GQA

RoPE(旋转位置编码嵌入)

Tiny-llama

Qwen-blog

因为llama和Qwen的架构类似,所以这里按照Qwen的架构来学习。

Tokenizer(分词器)

Q:什么是Tokenizer?

A:Tokenizer的主要功能是将一段文本分割成更小的有意义的部分,这些部分被称为“tokens”(标记)。

Embedding(嵌入)

Q:什么是Embedding?

A:Embedding是一种将离散的符号(如单词或标记)映射到连续向量空间的技术。这些向量捕捉了词语之间的语义关系,并且可以用来表示词语在向量空间中的位置。

  • Tokenizer 是用来将原始文本转换成分词后的序列,它是文本预处理的一部分。
  • Embedding 则是将分词后的序列进一步转换为数值化的向量表示,以便于机器学习模型理解和处理。

通常先使用Tokenizer对文本进行分词,然后再将得到的tokens通过Embedding转换成向量,最终用于训练模型。

Q:关于Tokenizer好用的库推荐。

A:1)NLTK (Natural Language Toolkit)。NLTK 是一个强大的自然语言处理库,提供了多种分词器和其他NLP工具。2)Transformers (Hugging Face)。Transformers 库提供了多种预训练的Transformer模型,包括分词器。

RMS Norm(RMS Layer Normalization)

Q:什么是RMSNorm?

A:RMS Layer Normalization是对Batch Normalization(BN)和Layer Normalization(LN)的一种改进。RMSNorm针对每一批次中的每一个样本进行归一化处理,计算特征的均方根值,Layer Normalization计算的是每个特征的均值和方差。

enumerate函数

enumerate() 函数是 Python 中的一个内置函数,用于遍历可迭代对象(如列表、元组、字符串等)时同时获取元素及其对应的索引。这对于需要在循环中同时使用元素及其索引的情况非常有用。enumerate() 函数使得在遍历时获取元素的索引变得非常方便,适用于需要索引信息的各种场景。

Flash Attention介绍

Q:什么是Flash Attention?

A:Flash Attention 是一种用于加速Transformer模型中自注意力(self-attention)机制的优化技术。传统自注意力机制的时间复杂度和内存消耗均为 O(N2),其中 N是序列长度。Flash Attention 通过优化注意力计算的方式,能够在保持计算精度的同时显著降低计算成本,特别是内存消耗。

Q:Flash Attention的机制是什么?如何实现这种优化的?

A:Flash Attention 的核心思想在于利用稀疏矩阵运算和近似计算来减少自注意力机制的计算量。Flash Attention 通过稀疏化注意力矩阵,仅保留最重要的注意力权重,从而减少了计算和内存开销。Flash Attention 在计算注意力权重时采用近似方法,允许在一定程度上牺牲精确度以换取更高的计算效率。

Q:对比传统的自注意力机制,Flash Attention的改进体现在哪里?

A:传统的自注意力机制,包括步骤1)查询、键、值计算;2)注意力得分计算;3)Softmax规范化;4)加权求和。laFlash Attention的改进主要体现在第2步:注意力得分计算:不是直接计算所有查询和键之间的点积,而是通过稀疏化和近似计算来估计注意力得分

GQA

Q:什么是GQA?

A:Grouped-query attention(GQA,分组查询注意力)是一种改进的多头注意力机制,旨在提高Transformer模型的效率和效果。这种方法通过减少键和值向量的数量来降低计算复杂度,同时保持模型性能。

Q:计算过程中,对Q,K,V分别进行了transpose操作,解释一下。

A:这里对Q,K,V进行transpose操作是为了转置操作是为了让数据更适合进行多头注意力计算。将输入的query,key,value形状从(B,L,D)(其中 B是批量大小,L是序列长度,D是向量的维度)转换成 (B,H,L,Dh)的格式,计算注意力得分的时候再对key进行transpose,将 key的形状从 (B,H,L,Dh)转换成 (B,H,Dh,L),计算点积。

缩放点积注意力的计算公式如下:

Q:这段代码中,为什么要用expand之后再reshape而不能直接用tensor自带的repeat?

A:在PyTorch中,expand()repeat() 都可以用来复制张量中的元素以改变其形状。expand() 方法不会复制内存中的数据,而是创建一个视图(view),这个视图指向原始张量的存储空间。使用 expand() 不会增加内存负担;repeat() 方法则会真正地复制数据。使用 repeat() 会导致内存使用增加。

RoPE(旋转位置编码嵌入)

Q:什么是位置编码?

A:在自然语言处理任务中,模型需要理解文本中单词的顺序。位置编码(Positional Encoding, PE)是一种在序列模型(如Transformer)中加入位置信息的方法。

Q:Transformer 中的位置编码设计方式?

A:在Transformer的原始论文中,位置编码是通过一个确定性的函数来计算的,该函数根据位置和维度来生成位置编码向量。具体来说,位置编码向量是通过正弦和余弦函数生成的。

Q:这种编码方式的局限性?

A:Transformer 原始位置编码的局限性主要体现在:

1)固定长度限制最大长度限制:原始的位置编码是基于一个预定义的最大序列长度计算的,这限制了模型处理更长序列的能力。非灵活长度:当处理不同长度的序列时,原始的位置编码需要根据序列的实际长度进行截断或填充;

2)计算复杂度:额外计算:在实际应用中,需要将位置编码向量加到词嵌入上,这增加了额外的计算量。参数开销:它们仍然占据了额外的内存空间,尤其是当序列长度较长时。

3)绝对位置信息

  • 缺乏相对位置信息:原始的位置编码提供了绝对位置信息,但缺乏相对位置信息。相对位置信息对于捕捉序列中的局部模式非常重要,特别是在长距离依赖关系中。
  • 位置信息稀疏:在长序列中,位置编码可能不足以提供足够的位置信息来区分远距离的标记。

Q:旋转位置编码(RoPE)做了哪些改进?

A:旋转位置编码(RoPE)的改进主要体现在:

1)灵活处理任意长度的序列

  • 动态适应:RoPE 可以动态地适应任意长度的序列,不需要预先设定一个最大长度,因此可以更好地处理不同长度的输入序列。
  • 无需重新计算:即使序列长度发生变化,也不需要重新计算位置编码,因为旋转矩阵是根据实际位置动态生成的。

2)减少计算和内存开销

  • 无额外参数:RoPE 不需要额外的位置编码参数,减少了模型的参数量。
  • 高效计算:旋转操作相对简单,计算速度快,不会显著增加模型的计算负担。

3)增强相对位置信息

  • 相对位置编码:RoPE 通过旋转查询和键向量来模拟相对位置信息,这有助于模型更好地捕捉序列中的局部模式。
  • 增强长距离依赖:RoPE 可以更好地保留长序列中的位置信息,从而增强模型处理长距离依赖关系的能力。

Q:旋转位置编码(RoPE)通过旋转操作巧妙地结合了绝对位置信息和相对位置信息。如何理解?

A:绝对位置信息:每个位置 i通过旋转矩阵 Ri 被编码进向量中。这意味着每个位置 i 都有一个唯一的旋转矩阵,从而赋予了每个位置的向量一个独特的表示。

相对位置信息:假设我们有两个位置 i 和 j,对应的旋转矩阵分别为 Ri 和 Rj。当 i≠j 时,Ri 和 Rj 之间的差异反映了位置 i 和位置 j 之间的相对位置关系。

Q:代码是如何实现的?

A:代码定义了一个用于生成旋转位置编码(RoPE)的类。它通过预先计算 cossin 缓存来加速旋转操作,并且能够在需要时动态更新缓存以支持更长的序列长度。具体步骤如下:

  1. 初始化:设置必要的参数,并计算逆频率。
  2. 生成缓存:生成 cos 和 sin 缓存数据。
  3. 前向传播:返回旋转矩阵,并在必要时更新缓存
class Qwen2RotaryEmbedding(nn.Module):def __init__(self, dim, max_position_embeddings=2048, base=10000, device=None):super().__init__()# 定义初始值self.dim = dimself.max_position_embeddings = max_position_embeddingsself.base = base# 定义旋转角inv_freq = 1.0 / (self.base ** (torch.arange(0, self.dim, 2, dtype=torch.int64).float().to(device) / self.dim))self.register_buffer("inv_freq", inv_freq, persistent=False)# Build here to make `torch.jit.trace` work.self._set_cos_sin_cache(seq_len=max_position_embeddings, device=self.inv_freq.device, dtype=torch.get_default_dtype())# 为seq里面的每个token形成独一无二的旋转角嵌入(外积)def _set_cos_sin_cache(self, seq_len, device, dtype):self.max_seq_len_cached = seq_lent = torch.arange(self.max_seq_len_cached, device=device, dtype=torch.int64).type_as(self.inv_freq)freqs = torch.outer(t, self.inv_freq)# 生成角度信息(利用注册机制生成self.cos_cached与sin_cachedemb = torch.cat((freqs, freqs), dim=-1)self.register_buffer("cos_cached", emb.cos().to(dtype), persistent=False)self.register_buffer("sin_cached", emb.sin().to(dtype), persistent=False)def forward(self, x, seq_len=None):# x: [bs, num_attention_heads, seq_len, head_size]if seq_len > self.max_seq_len_cached:self._set_cos_sin_cache(seq_len=seq_len, device=x.device, dtype=x.dtype)return (self.cos_cached[:seq_len].to(dtype=x.dtype),self.sin_cached[:seq_len].to(dtype=x.dtype),)

Tiny-llama

这块的详细教程可以参考:KMnO4-zx/tiny-llm (github.com)。

按照以下步骤,开跑:

  1. 训练Tokenizer: python train_vocab.py --download True --vocab_size 4096
  2. 数据预处理:python preprocess.py
  3. 训练模型:python train.py
  4. 使用模型生成文本:python sample.py --prompt "One day, Lily met a Shoggoth"

贴一张运行中的图

开跑,等结果,预计要一天吧。

最终结果,可以看到损失还是比较大的,可能是初始的学习率过高了,导致loss缓慢上升。

我们测试一下效果吧。prompt "One day, Lily met a Shoggoth",然后我们看看模型的输出效果吧:

Sample 1:
One day, Lily met a Shoggoth leaves. She was so a friends with dark and playedro must and as help. She looked, starteded old way food on hungry. 
F brave scared in running together all moral outside outside.
The be yummy people. "Tom, looked soon want to the too. both can f them red tail fell. He took other played. She looked they laughed played.
Tom and if having others again gardenate toys and that hurt what over thatw.
The pond made ask all he it!" M put the sky happily we friend. They. They and scared and put ask off himself. They into a water againat. You the be then anymorear if too. He didn't this. They more people and proudd feelr some feel dog.
A listen him feel park, Max when you the that of the mommying friends not out and they not go to go look now. He lots to real pictures, with the little smile. The friends knows. They not funb on for clean. Theyed outing can doing lost.
P, be are know and you she food smile. They became be st. Once upon a time, there was broken hat is truck. Tim was surprised and became good friends. The small
--------------------Sample 2:
One day, Lily met a Shoggoth was any strange said, "S bed important overr here looking again and delicious as dad that she only.
The soft bird so two?" Sheers hurt high. "OK, hurt feel scary and what was happy and as know proud that in softar over no. Jack ate know dress your truck after fix and hurt and by for like stay. Once upon a time always at know, them should p because need to play bed and askaes. One day, both nodded and playing upch clean and right.
The big headf got need so then asked others backl they said dog. Tim when my all used his man to explore friends you to it toy, inside. She continued going playing who smiled up hurt from this careful than came yummy.
The tree stopped and flew good. The so and he hard into fun. 
S wanted to think know just open as the dog p car. He found bright if though do out toys or set before.
Tim nodded around or singc we he was go for the happened. She and go to the over run and anything tree work could show room. Do going to understand sound and worry into feel do mom no. The fast magic if its w dog their house?"
A pond grabbed her
--------------------Sample 3:
One day, Lily met a Shoggoth by being rockhil. The foresters was go. He was tired, warm feel put red away by how home. But one day green yummy warm up always?" this grandma thought look sh for their box where.
When something house, two always isly carefulot. Lily anything into it from a eyes. Her it have. She became they still thely and called the small nice. They if things don't sing again games family in the never.
Wheno, they didn't their cat in pictures. F about all around listen to the things and blue. It if hurt idea happily b unexpected as some yard always find what oring p she still.
S until feeling up. He lost his at the story, even toys when and a hat to set look. He is us around they and dad away. That he became ball." He always will comest something thing. Max with youes of best back. He with the park and and toys near going park?"
"Lilyar, moral. Maybe be by her dress. You more tree backit fell with should his sh. Why unexpected for funny he as making highit playinges. He room made toy. The dog idea on my.
Max here running rock people

那么本次笔记就记到这里了,喜欢的小伙伴收藏点赞关注吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435424.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2025】基于Django的鱼类科普网站(源码+文档+调试+答疑)

文章目录 一、基于Django的鱼类科普网站-项目介绍二、基于Django的鱼类科普网站-开发环境三、基于Django的鱼类科普网站-系统展示四、基于Django的鱼类科普网站-代码展示五、基于Django的鱼类科普网站-项目文档展示六、基于Django的鱼类科普网站-项目总结 大家可以帮忙点赞、收…

Codeforces Round 975 (Div. 2) A-C 题解

这次看到 C 题分数 1750 就开始害怕了,用小号打的比赛,一直觉得做不出来,最后才想到 A. Max Plus Size 题意 给你一些整数,选择一些涂成红色,两两不能相邻,你的得分为: [ 红色元素的个数 ] …

什么是 JWT?它是如何工作的?

松哥最近辅导了几个小伙伴秋招,有小伙伴在面小红书时遇到这个问题,这个问题想回答全面还是有些挑战,松哥结合之前的一篇旧文和大伙一起来聊聊。 一 无状态登录 1.1 什么是有状态 有状态服务,即服务端需要记录每次会话的客户端信…

努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂ROM固件-安卓刷机固件网

努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂ROM固件-安卓刷机固件网 统版本:官方软件作者:热心网友rom大小:911MB发布日期:2018-12-23 努比亚z17努比亚NX563j原厂固件卡刷包下载_刷机ROM固件包下载-原厂RO…

JVM相关的命令汇总

一、简介 虽然目前市场上有很多成熟的 JVM 可视化监控分析工具,但是所有的工具其实都依赖于 JDK 的接口和底层相关的命令,了解这些命令的使用对于在紧急情况下排查 JVM 相关的线上故障,会有更加直观的帮助。 下面一起来看看 JVM 常用的命令…

图像处理基础知识点简记

简单记录一下图像处理的基础知识点 一、取样 1、释义 图像的取样就是图像在空间上的离散化处理,即使空间上连续变化的图像离散化, 决定了图像的空间分辨率。 2、过程 简单描述一下图象取样的基本过程,首先用一个网格把待处理的图像覆盖,然后把每一小格上模拟图像的各个…

五、CAN总线

目录 一、基础知识 1、can介绍 2、CAN硬件电路 3、CAN电平标准 4、CAN收发器芯片介绍 5、CAN帧格式 ① CAN帧种类 ② CAN数据帧 ③ CAN遥控帧​编辑 ④ 位填充 ⑤ 波形实例 6、接收方数据采样 ① 接收方数据采样遇到的问题 ② 位时序 ③ 硬同步 ④ 再同步 ⑤ 波…

1.8 软件业务测试

欢迎大家订阅【软件测试】 专栏,开启你的软件测试学习之旅! 文章目录 前言1 概述2 方法3 测试策略4 案例分析 前言 在软件开发生命周期中,业务测试扮演着至关重要的角色。本文详细讲解了业务测试的定义、目的、方法以及测试策略。 本篇文章参…

信息安全数学基础(22)素数模的同余式

前言 信息安全数学基础中的素数模的同余式是数论中的一个重要概念,它涉及到了素数、模运算以及同余关系等多个方面。 一、基本概念 素数:素数是指只能被1和它本身整除的大于1的自然数。素数在密码学中有着广泛的应用,如RSA加密算法就依赖于大…

订餐点餐|订餐系统基于java的订餐点餐系统小程序设计与实现(源码+数据库+文档)

订餐点餐系统小程序 目录 基于java的订餐点餐系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布…

9.29 LeetCode 3304、3300、3301

思路: ⭐进行无限次操作,但是 k 的取值小于 500 ,所以当 word 的长度大于 500 时就可以停止操作进行取值了 如果字符为 ‘z’ ,单独处理使其变为 ‘a’ 得到得到操作后的新字符串,和原字符串拼接 class Solution { …

[CSP-J 2022] 解密

题目来源:洛谷题库 [CSP-J 2022] 解密 题目描述 给定一个正整数 k k k,有 k k k 次询问,每次给定三个正整数 n i , e i , d i n_i, e_i, d_i ni​,ei​,di​,求两个正整数 p i , q i p_i, q_i pi​,qi​,使 n …

verilog实现FIR滤波系数生成(阶数,FIR滤波器类型及窗函数可调)

在以往采用 FPGA 实现的 FIR 滤波功能,滤波器系数是通过 matlab 计算生成,然后作为固定参数导入到 verilog 程序中,这尽管简单,但灵活性不足。在某些需求下(例如捕获任意给定台站信号)需要随时修改滤波器的…

创建游戏暂停菜单

创建用户控件 设置样式 , 加一层 背景模糊 提升UI菜单界面质感 , 按钮用 灰色调 编写菜单逻辑 转到第三人称蓝图 推荐用 Set Input Mode Game And UI , 只用仅UI的话 增强输入响应不了 让游戏暂停的话也可以用 Set Game Paused , 打勾就是暂停 , 不打勾就是继续游戏 , 然后…

Yolov8分类检测记录

1.先到github上下载,ultralytics源代码 2.pycharm新建一个项目 3.准备训练数据 数据的结构如下 不需要.yaml文件,代码会自动识别要分的类 4.创建一个训练文件 import torch import random import cv2 import numpy as np import os from ultralytics…

大模型训练:K8s 环境中数千节点存储最佳实践

今天这篇博客来自全栈工程师朱唯唯,她在前不久举办的 KubeCon 中国大会上进行了该主题分享。 Kubernetes 已经成为事实的应用编排标准,越来越多的应用在不断的向云原生靠拢。与此同时,人工智能技术的迅速发展,尤其是大型语言模型&…

ROS学习笔记(四):使用 `ros2 run usb_cam usb_cam_node_exe` 启动 USB 摄像头

文章目录 前言1 安装 usb_cam 包2 启动 USB 摄像头3 订阅相机发布的节点信息并进行可视化3.1 使用 rqt_image_view3.2 使用 image_view3.3 使用 rviz 4 常见问题与解决方案4.1 摄像头未被识别4.2 相机显示异常4.3 如何指定不同的相机4.4 摄像头参数调整 5. 调试信息 5. 结论 前…

复刻谷歌爆火的AI生成播客应用:高效方案分享

随着Google Illuminate等产品的推出,将复杂文档转换为音频播客的需求日益增长。MIT最近开源的PDF2Audio项目为此提供了一个开放且高效的解决方案。本文将详细介绍如何复刻这一功能,并分享一个适用于AI代理和播客创业者的高效方案。 一、背景 近年来,将文本内容转换为音频播…

平安养老险肇庆中心支公司开展“2024年金融教育宣传月”活动

为加强消费者金融教育宣传,切实提升社会公众金融素养,有效防范化解金融风险,营造和谐健康金融环境,在肇庆金融监管分局指导下,平安养老险肇庆中心支公司开展金融教育宣传月暨反洗钱宣传月系列活动。 9月11日&#xff…

基于php的民宿预订管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…