大模型面试准备(八):一文详解国产大模型导师 LLaMA v1和v2

news2024/11/28 18:56:09

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。


合集在这里:《大模型面试宝典》(2024版) 正式发布!


ChatGPT (GPT-3.5/GPT-4)固然惊艳,但叫开源人工智能的 OpenAI 并没有将其开源,国内外正干着急之际,关键时刻还得看开源界一哥 Meta。

Meta 半开源的 LLaMA 系列模型,一经推出便冠以“开源版 ChatGPT”之称,一时间推动了LLM的大爆发,特别是国内也陆续推出了数百个“国产自研”大模型,其地位堪称国内大模型的导师,甚至就直接套壳。

所谓半开源即只有 inference 过程没有 train 过程。

LLaMA 除了作为开源届最有影响力的大语言模型外,在其影响下LLM 各种配套库也都是依据其建立,极大的推动了 LLM 的发展和 LLaMA 生态的繁荣,可以说现在所有 LLM 应该都能看到 LLaMA 生态里的代码的身影。

LLaMA 作为相关从业者必学必会的模型,但是原始论文中仅仅介绍了其和标准 Transformer 的差别,并没有一个全局的模型介绍。

因此这篇文章争取让读者不参考任何其他资料把 LLaMA 的模型搞懂。喜欢本文记得收藏、点赞、关注,更多技术和面试要点,文末加入我们讨论群。

LLaMA模型结构

LLaMA V1 和 V2 模型结构基本相同,主要由 Attention 和 MLP 堆叠而成

如下图所示:
图片

LLaMA V1主要特点

  • 前置的 RMSNorm;

  • 在Q、K上使用旋转式位置编码 RoPE;

  • 使用 Causal Mask 保证每个位置只能看到前面的 Tokens;

  • 可以将更早的 K、V 拼接到当前 K、V 前面,可以用 Q 查找更早的信息(为了清晰没在图中画出来);

  • MLP表达式:,其中 down、up、gate 都是线性层 Linear。

LLaMA 各个不同大小的结构设置如下表所示。其中最大的 65B 的 LLaMA 用了 2048 张 80GB 的 A100,batch size 为 4百万,训练一次需要 21 天。

图片

RMSNorm

BERT、GPT 等模型中广泛使用的是 LayerNorm:

RMSNorm(Root Mean Square Layer Normalization)发现 LayerNorm 的中心偏移没什么用(减去均值等操作)。将其去掉之后,效果几乎不变,但是速度提升了40%。RMSNorm 最终公式变为:

注意除了没有减均值、加偏置以外,分母上求的 RMS 而不是方差。

LLaMA 在 Attention Layer 和 MLP 的输入上使用了 RMSNorm,相比在输出上使用,训练会更加稳定。

SwiGLU

LLaMA 没有使用 ReLU,而是使用了 SwiGLU,有时也被称为 SiLU。公式为:

SwiGLU 的效果类似平滑版的 ReLU,如下图所示:图片

RoPE

LLaMA 使用的位置编码是 RoPE(Rotary Position Embedding)。对于 Q 的第 m 个位置向量 q,通过以下方法注入位置编码:图片

其中 是值介于 [1,0) 之间的固定向量。

通过以下代码得到了上式中的第二项 和第四项 :

class LlamaRotaryEmbedding(torch.nn.Module):
    def __init__(self, dim, max_position_embeddings=2048, base=10000):
        super().__init__()
        theta = 1.0 / (base ** (torch.arange(0, dim, 2) / dim))
        t = torch.arange(max_position_mbeddings)
        freqs = torch.einsum("i,j->ij", t, theta)

        emb = torch.cat((freqs, freqs), dim=-1)
        self.register_buffer("cos_cached", emb.cos())
        self.register_buffer("sin_cached", emb.sin())

    def forward(self, seq_len=None):
        return self.cos_cached[:, :, :seq_len, ...], self.sin_cached[:, :, :seq_len, ...]

# 在LlamaAttention通过以下命令调用:
cos, sin = self.rotary_emb(seq_len=kv_seq_len)

再通过以下代码将 q 沿着最后一个维度劈成两半,将后一半乘 -1,然后连接在第一半之前,就得到了上式第三项:

# 在接下来的apply_rotary_pos_emb函数里调用

def rotate_half(x):
    x1 = x[..., : x.shape[-1] // 2]
    x2 = x[..., x.shape[-1] // 2 :]
    return torch.cat((-x2, x1), dim=-1)

最后通过以下代码得到结合了位置编码的 Q,K (K和Q使用同样的方式进行位置编码):

def apply_rotary_pos_emb(q, k, cos, sin, position_ids):
    q_embed = (q * cos[position_ids]) + (rotate_half(q) * sin[position_ids])
    k_embed = (k * cos[position_ids]) + (rotate_half(k) * sin[position_ids])
    return q_embed, k_embed

# 在LlamaAttention中通过以下命令调用:
query_states, key_states = apply_rotary_pos_emb(query_states, key_states, cos, sin, position_ids)

使用了这么复杂的位置编码,有什么好处呢?

从上面的公式可以看出,RoPE 形式上是绝对位置编码,即依赖其绝对位置m;但当我们计算 Attention 时,RoPE 却可以变成相对位置编码。

绝对位置编码的优点是计算速度快等,缺点是拓展长度比较麻烦,且绝对位置并没有什么实际意义。

相对位置编码对学习 token 之间的关系很有意义,比如距离的很远的两个 token 之间的关联大概率很小,使用相对位置编码往往能够获得更好的效果。

此外相对位置编码拓展长度也更容易,因为不论 context size 多长,只需关注最长距离以内的输入即可。

相对位置编码的缺点是没有绝对位置编码计算速度快。

那绝对位置编码的 RoPR 在计算 Attention 时是怎么变成相对位置编码的呢?

从上面这个公式可以看出,q 和 k 的 attention 依赖相对距离 m-n。因此 RoPE 为 q、k 注入的绝对位置编码,计算得到的 attention,却变成了相对位置编码。妙的很!

更多关于RoPR的解读可以看我之前的文章

LLaMA V2 相对 V1 的更新

  1. 预训练语料从 1 Trillion tokens -> 2 Trillion tokens;

  2. context window 长度从 2048 -> 4096;

  3. 收集了 100k 人类标注数据进行 SFT;

  4. 收集了 1M 人类偏好数据进行RLHF;

  5. 在 reasoning, coding, proficiency, and knowledge tests 上表现超越 MPT 和 Falcon;

  6. 和 Falcon 模型一样,使用了 Group Query Attention,节省 cache。

Group Query Attention

GQA 出自 Google 的论文 Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints。

当前有如下 3 种主流的 Attention 计算方式:

图片

自回归模型生成回答时,需要前面生成的 KV 缓存起来,来加速计算。

Multi-Head Attention(MHA)就是多个头各自拥有自己的 Q,K,V 来算各自的 Self-Attention,需要的缓存量很大。

Multi-Query Attention (MQA)指出多个头之间可以共享 KV 对,即 Q 依然保持多头,但是 KV 只有一个。

Group Query Attention (GQA)没有像 MQA 一样极端,将 Query 分组,组内共享 KV,效果接近 MHA,速度上与 MQA 可比较。

GQA 技术在 Falcon 已经用上了,当时 Falcon 说自己用的是 Multi Query Attention,因为当 group=1 时,GQA和MQA是等价的。Falcon 支持设置不同的 G。

技术交流群

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

我们建了算法岗技术与面试交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2040。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2040,备注:技术交流

用通俗易懂方式讲解系列

  • 《大模型面试宝典》(2024版) 正式发布!
  • 《大模型实战宝典》(2024版)正式发布!
  • 大模型面试准备(一):LLM主流结构和训练目标、构建流程
  • 大模型面试准备(二):LLM容易被忽略的Tokenizer与Embedding
  • 大模型面试准备(三):聊一聊大模型的幻觉问题
  • 大模型面试准备(四):大模型面试必会的位置编码
  • 大模型面试准备(五):图解 Transformer 最关键模块 MHA
  • 大模型面试准备(六):一文讲透生成式预训练模型 GPT、GPT2、GPT3
  • 大模型面试准备(七):ChatGPT 的内核 InstructGPT 详细解读

相关参考和推荐阅读:

[1] LLaMA: Open and Efficient Foundation Language Models
[2] Llama 2: Open Foundation and Fine-Tuned Chat Models
[3] https://zhuanlan.zhihu.com/p/636784644
[4] https://zhuanlan.zhihu.com/p/649756898
[5] https://zhuanlan.zhihu.com/p/634063775
[6] https://zhuanlan.zhihu.com/p/643894722

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你该选择哪个职业呢?数据科学家、数据分析师和数据工程师

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

AI论文速读 | 【综述】用于轨迹数据管理和挖掘的深度学习:综述与展望

论文标题:Deep Learning for Trajectory Data Management and Mining: A Survey and Beyond 作者:Wei Chen(陈伟), Yuxuan Liang(梁宇轩), Yuanshao Zhu, Yanchuan Chang, Kang Luo, Haomin Wen(温皓珉), Lei Li, Yanwei Yu(于彦伟), Qingsong Wen(文青…

mixly编译esp32程序缺失问题bits/c++config.h

错误信息: 编译中... 使用平台的 ‘esp32’ 开发板,在列出的文件夹中:D:\windowsoftInstalled\mixly\mixly2.0-win32-x64\arduino-cli\Arduino15\packages\esp32\hardware\esp32\2.0.7 使用平台的 ‘esp32’ 代码,在列出的文件夹…

hcip结课考题答案解析 鹏

考试涵盖了BGP的基本状态、路由请求处理、网络层协议、路由聚合、网络连接管理、链路状态维护、路由信息发布、虚拟IP地址处理、路由表建立、AS外部路由学习等多个方面。考试内容涵盖了BGP的初始状态、活跃状态、Established状态、对等体交换、网络层协议、路由请求处理、链路状…

暴雨服务器X7740赋能大模型训练

数字经济浪潮愈演愈烈,大模型训练对服务器的要求也越来越高。在此背景下,暴雨信息发布专门为大规模模型训练而设计的全新旗舰GPU服务器—X7740,以卓越的计算性能、高速网络通信能力以及创新的能效表现,有效赋能大模型训练。 X7740 搭载了暴雨信息最新一代的英特尔至强可扩展处理…

gpt 3d三角形 重心坐标填充 沿x轴炫赵师傅

go import pygame from pygame.locals import * import sys import math# 初始化Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption(3D Triangle Fill with Barycentric Coordinates)…

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成? 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件(Design Files) 4.5. 新建测试平台文件(Testbench Files&…

简单实现企业微信远程打卡教程(永不迟到)

最近玩手游时刚好用到了手机模拟器,就是在电脑上安装一个手机模拟器,然后用电脑来挂机手机游戏 今天我突然有了一个想法,既然这个模拟器就是相当于一个虚拟的手机,那么是不是可以给它装上企业微信,然后让它帮我远程打卡…

mysql进阶知识总结

1.存储引擎 1.1MySQL体系结构 1).连接层 最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证…

【IDEA】使用debug方式去运行java程序

什么是debug工具? 调试工具(debug工具)是一种用于帮助程序员识别和修复程序中的错误的工具。它们提供了一系列的功能,帮助程序员在代码执行的过程中跟踪和检测问题,例如查看变量的值、检查函数的调用栈、设置断点来停…

关于Oracle VM VirtualBox无法查询IP地址的原因

1.如下,输入ifconfig却没有显示我框住的显示IP。 2.原因有可能: (1)主机没连上网络。 (2)虚拟机网络设置不正确。

Linux项目自动化构建工具-make/ makefile及其应用:多文件编写第一个linux程序:进度条(懒人学习必备博文!!!)

目录 1.前言--make/makefile的引入 2.快速上手make/makefile---自动化构建 3.关于依赖关系和依赖方法 4.自动化清理 为什么我们执行编译的时候,make一下就好,清理却要使用make clean? 5. make/makefile是如何知道当前目录下可执行文件是否为最新 6.文件…

【文献分享】通过形态扫描仪阐明自组装肽聚集:蛋白质-肽结构表征的新工具

题目:Elucidating Self‐Assembling Peptide Aggregation via Morphoscanner: A New Tool for Protein‐Peptide Structural Characterization 通过形态扫描仪阐明自组装肽聚集:蛋白质-肽结构表征的新工具 自组装和分子折叠在自然界中无处不在&#xff…

Mistral 7B v0.2 基础模型开源,大模型微调实践来了

Mistral AI在3月24日突然发布并开源了 Mistral 7B v0.2模型,有如下几个特点: 和上一代Mistral v0.1版本相比,上下文窗口长度从8k提升到32k,上下文窗口(context window)是指语言模型在进行预测或生成文本时&…

【ensp实验】GRE和MGRE相关实验

要求: 1、R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址; 2、R1和R5间使用PPP的PAP认证,R5为主认证方 R2与R5之间使用ppp的CHAP认证,R5为主认证方; R3与R5之间使用HDLC封装; 3、R1、R2、R3构建一个MGRE环境&#…

sheng的学习笔记-AI-人脸识别

目录:sheng的学习笔记-AI目录-CSDN博客 需要学习卷机神经网络等知识,见ai目录 目录 基础知识: 人脸验证(face verification) 人脸识别(face recognition) One-Shot学习(One-shot learning&…

脱壳之常用的加固样本特征

梆梆加固样本特征 清单文件入口 android:name“com.SecShell.SecShell.ApplicationWrapper” 特征 免费版 meta-data meta-data总结 assets/secData0.jar lib/armeabi/libSecShell.so lib/armeabi/libSecShell-x86.so 梆梆企业版 assets/classes0.jar lib/armeabi-v7a/libD…

Flutter开发之objectbox

Flutter开发之objectbox 在之前进行iOS开发的时候使用WCDB去进行管理数据库很方便,它支持ORM(Object-Relational Mapping,对象关系映射),用于实现面向对象编程语言里不同类型系统的数据之间的转换。 那么在Flutter开发…

【C++】const限定符|const引用

const的引用 说const引用之前需要说明,这是建立在引用的前提下,如果是普通的拷贝赋值就基本不需要使用到const(有关权限)。 1 权限不能放大(可平移、缩小) 如何解释权限不能放大? 阅读下面的代码 可以看到&#xff1a…

Taskflow:子流任务(Subflow Tasking)

创建Subflow DAG任务中,有一种常见的场景,一个任务可能在执行期间产生新的任务,然后紧接着执行新任务。 之前提到的静态图就没有办法实现这样一个功能了,所以Taskflow提供了另一种流的节点:Subflow,Subflo…