LLAMA模型解析:快速掌握大模型LLM推理入门技巧

news2024/9/20 0:30:31

本文借助llama这个模型快速入门LLM的推理过程,技术细节很多都是通用的,也适合其他的LLM。本篇也可以作为CV快速入门NLP简易指南。

本文借助llama这个模型快速入门LLM的推理过程,很多技术细节都是通用的,也适合其他的LLM。这篇文章之前发过一次,现在整理下内容重新发下。

这篇也算是总结的性质,仅需要的知识点都列出来,简单介绍一番。可能说的不够详细,想看具体细节的小伙伴可参考文中引用的相关详细文章。

本篇也可以作为CV快速入门NLP简易指南(当然也是老潘的个人笔记)。当然只是推理哈,不涉及到训练,仅是从部署的角度考虑这个模型,个人也不是NLP专家,如对文中内容有疑问,欢迎讨论。

什么是LLM

llama是LLM(LLM指大语言模型)模型的一种结构,llama这种模型的任务就是在阅读前n个单词后预测句子中下一个单词,输出取决于过去和现在输入,与未来无关。

过程大概是这样,每次输入模型会带上上一次输出的结果(不同于CV模型,CV模型输入只需要一次即可,一次推理即可得到结果):

在这里插入图片描述

LLM-生成

一般来说,LLM模型主要由两个块组成:

  • 编码器(左侧):编码器接收输入并构建其表示形式(特征)。这意味着该模型被优化为从输入中获取理解(比如输入文本判断这段话是高兴还是难受)。
  • 解码器(右侧):解码器使用编码器的表示形式(特征)以及其他输入来生成目标序列。这意味着该模型被优化用于生成输出。

在这里插入图片描述

编码器和解码器

这些部分都可以根据任务独立使用:

  • Encoder-only models:适用于需要理解输入的任务,例如句子分类和命名实体识别。
  • Decoder-only models:适用于生成性任务,如文本生成
  • Encoder-decoder models or sequence-to-sequence models:适用于需要输入的生成性任务,例如翻译或摘要。

LLAMA属于Decoder-only models,只有decoder层。

llama相关的知识点

llama的decoder部分的结构取自transformer,关于transformer的介绍知乎上太多,这里不赘述了,想详细理解transformer的建议看知乎上的其他优秀文章以及b站沐神的讲解

transformer的结构如下:

在这里插入图片描述

transformer

对于llama来说,只用了decoder部分,重点关注这几个概念:

  • Tokenization 分词器
  • Embedding 嵌入层
  • Positional Encoding 位置编码
  • Self-attention 自注意力机制
  • Multi-head attention 多头注意力与采用掩码机制的多头注意力
  • Batch Norm & Layer Norm 批标准化/层标准化 llama用的是RMSNorm
  • ResNet 残差网络

具体的可以查阅相关的博文,这里同样不进行赘述,只会简单描述下过程。拿到llama模型后,主要关注:

  • 模型的结构,包含哪些算子哪些op,模型复杂度
  • 模型的前后处理,前后处理实现细节,模型的执行方式
  • 模型各种参数配置以及其他一些细节

llama的整个执行过程分了好多步,涉及到很多前后处理,前后处理又涉及到很多细节的步骤,之后也会介绍。

先过一下知识点。

分词器、token、embeding

主要是分词、编码、Tokenizer(tokenization)、embed(embedding)的过程。

在这里插入图片描述

分词过程

图片来自 https://zhuanlan.zhihu.com/p/631463712 详细可以参考这篇

什么是分词?也就是Tokenizer的作用。

分词器可将原始文本转换为由token组成的文本的初始数值表征。

分词器之所以是模型的重要构成部分之一,是因为模型可借此妥善应对人类语言的复杂性。例如,分词器可将凝集性语言中的词分解为更易管理的组成部分、处理原始语料库中不存在的新词或外来词/特殊字符,并确保模型生成紧凑(尽可能精简)的文本表征。

每种语言都有可选用的数量众多且各不相同的分词器。大部分基于 Transformer 的架构均使用经过训练的分词器,这些分词器旨在充分缩短典型序列的长度。WordPiece(应用于 BERT)、SentencePiece(应用于 T5 或 RoBerta)等分词器同样具有多个变体,这是因为众多的语言和不同的专业领域(如医疗健康语料库)采用了这些分词器,且这些分词器在训练方式上也有所不同(选用不同的最大标记数,或以不同的方式处理大小写)。

然后看回代码。

首先看tokenizer,运行llama的时候我们会调用tokenizer = AutoTokenizer.from_pretrained(args.model, use_fast=False)

如果我们模型传入的是llama的某个模型(llama-7b)那么返回的就是LlamaTokenizer:

class LlamaTokenizer(PreTrainedTokenizer):  
    """  
    Construct a Llama tokenizer. Based on byte-level Byte-Pair-Encoding.  
...  

这个类是LLAMA模型的分词器(tokenizer)的实现,基于字节级的字节对编码(Byte-Pair Encoding)。这个分词器的主要功能是将文本字符串转换为模型可以理解的数字序列,反之亦然。这里假设输入为 ‘“this is a python code:”’ 。

具体我们看干了些啥,创建好tokenizer之后我们执行:input_ids = tokenizer.encode(args.text, return_tensors="pt").to(dev),这里又分两步:

  • 第一步是 Converts a string in a sequence of tokens (string), using the tokenizer. Split in words for word-based vocabulary or sub-words for sub-word-based vocabularies (BPE/SentencePieces/WordPieces). 这里调用 self.sp_model.encode(text, out_type=str),sp_model就是sentencepiece中的一个函数,执行完出来变为 [‘▁"’, ‘this’, ‘▁is’, ‘▁a’, ‘▁python’, ‘▁code’, ‘:"’]
  • 第二步将token string转变为 token id -> Converts a token string (or a sequence of tokens) in a single integer id (or a sequence of ids), using the vocabulary. 具体就是个for循环,对之前分好的tokens一个一个转。

最后我们得到:

input_ids  
tensor([[   0,  376, 1366,  338,  263, 3017,  775, 6160]], device='cuda:0')  
input_ids.shape  
torch.Size([1, 8])  

至于如何转换为embedding,之后会调用:

inputs_embeds = self.embed_tokens(input_ids),其中embeds的shape是torch.Size([1, 8, 4096])

在自然语言处理(NLP)中,嵌入(Embedding)是一种将离散变量(如单词、短语、或者文档)转换为连续向量的方法。这种转换的目的是让计算机能更好地理解和处理自然语言数据。embedding矩阵的本质是一个查找表 ,每个单词会定位这个表中的某一行,而这一行就是这个单词学习到的在嵌入空间的语义。

更多信息可以参考:

  • https://zhuanlan.zhihu.com/p/626308831
  • https://zhuanlan.zhihu.com/p/631463712

自注意力 Self-Attention

Transformer模型的一个关键特点是使用了称为注意力层的特殊层。“Attention Is All You Need”。

这一层会告诉模型,在处理每个单词的表示时,要对你传递给它的句子中某些单词特别关注(并且忽略其他单词)。

把这个概念放到背景中,考虑从英语翻译成法语的任务。给定输入“你喜欢这门课程”,翻译模型还需要关注相邻单词“你”,以获得正确翻译动词“like”的形式,因为在法语中,“like”根据主语不同而有不同变化形式。然而,句子其余部分对于该单次翻转来说没有用处。同样地,在翻转“This”时,模型也需要注意到单次“course”,因为“This”根据相关名字是否男性或女性而有不同意思表达方式。再次强调,在更复杂的句子(和更复杂的语法规则)中,模型需要特别关注可能出现在句子较远位置上以正确翻译每个单次的单词。

同样的概念适用于与自然语言相关的任何任务:一个单次本身具有意义,但是该意义深受上下文影响,这可以是正在研究的单次之前或之后的任何其他单次(或多个)。

在这里插入图片描述

MHA

来自 https://twitter.com/akshay_pachaar/status/1741074200662856102/photo/1

Self-attention是Transformer的核心,其允许模型考虑到序列中的其他标记,以便更好地理解每个标记的上下文。每个标记的新表示形式是由它自己和其他标记的交互得到的。

具体可以参考:

  • https://zhuanlan.zhihu.com/p/420820453
位置编码

由于Transformer的结构没有考虑到标记的顺序,所以我们需要加入位置编码来给模型提供词元在序列中的位置信息。这些编码会被添加到词嵌入向量中。

多头注意力(Multi-head Attention)

多头注意力是对自注意力机制的扩展。它将自注意力分解为多个“头”,每个头在不同的表示空间中学习和应用自注意力。这允许模型同时捕捉到各种不同类型的信息。在有掩码的多头注意力中,掩码被用于阻止模型查看某些不应该看到的信息,例如在生成新的标记时阻止查看未来的信息。现在基本都使用MHA,一般不用单头。

批标准化(Batch Norm) & 层标准化(Layer Norm)

这些都是用于正规化激活的技术,可以加速学习,提高模型的性能。

批标准化是在整个批次的数据上进行标准化,而层标准化则是在单个数据样本上进行标准化。RMSNorm是一种新的归一化方法,是对LayerNorm的一个改进,没有做re-center操作(移除了其中的均值项),可以看作LayerNorm在均值为0时的一个特例。

残差网络(ResNet)

老熟人了。通过在网络中添加跳跃连接(或称为“skip”连接),可以使得模型更容易地学习到恒等映射,从而避免了训练深度网络时常见的梯度消失问题。在Transformer中,每个子层(如自注意力层和前馈神经网络层)都有一个对应的残差连接,并且每个子层的输出都会进行层标准化。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

在这里插入图片描述
在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型落地应用案例PPT👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)

在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

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

相关文章

普元EOS-微前端调用base基座的ajax

1 前言 微前端调用EOS应用的服务或API,需要引入base基座,然后使用base基座中的ajax方法。 本文将介绍微前端的高开和低开使用base基座的Ajax的方法。 强烈建议不要自己引入axios或其他ajax库,因为EOS的服务接口都要求身份验证和授权&#…

分页查询面试记录和面试详情

文章目录 1.分页查询面试记录1.req和vo1.InterviewHistoryReq.java2.InterviewHistoryVO.java 2.InterviewController.java3.service1.InterviewHistoryService.java2.InterviewHistoryServiceImpl.java 4.测试 2.查询面试详情1.InterviewQuestionHistoryVO.java2.InterviewCon…

适合开发人员的网页爬虫工具DrissionPage

DrissionPage是一个基于Python的网页自动化工具,它集成了Selenium和Requests的功能,既能够控制浏览器进行用户界面的模拟操作,也能够直接收发数据包进行数据的获取和处理。 开源地址:DrissionPage: 基于python的网页自动化工具。既能控制浏览器,也能收发数据包。可兼顾浏…

CLion调试ROS(包括launch启动的ROS)

打开一个终端,切换到工作空间目录(形如:~/catkin_ws)。 在终端输入,source ./devel/setup.bash 启动Clion,一定要在输入上述命令的窗口启动Clion,否则会存在一些问题。 打开工程,这里也是一个…

【Java】——Java实现数组元素反转的两种方法

在编程中,我们经常会遇到需要对数组元素进行反转的需求。例如,给定一个整数数组arr {1, 2, 3, 4, 5},我们需要将其反转为{5, 4, 3, 2, 1}。下面我们将介绍两种实现数组元素反转的方法。 方法一:遍历数组一半的长度进行元素互换 …

Spring注解:优雅管理依赖的艺术

在Java企业级开发的广阔天地中,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力,成为了众多开发者的首选。而Spring注解,作为这一框架的核心特性之一,更是将依赖管理提升到…

如何通过数字化资产管理提升企业运营效率

在当今快速发展的商业环境中,企业的资产管理正逐步向数字化迈进。数字化资产管理系统不仅帮助企业提高资产利用率,还能降低管理成本,提升整体运营效率。常达智能物联为各行业企业提供了领先的数字化资产管理解决方案,帮助企业实现…

AI入门指南(四):分类问题、回归问题、监督、半监督、无监督学习是什么?

文章目录 一、前言二、分类问题、回归问题是什么?分类问题概念常见算法分类问题的实际应用:银行贷款审批案例 回归问题概念常见算法回归问题实际应用:线性回归模型预测房价 小结 三、监督、半监督、非监督学习是什么?监督学习非监…

C语言基础(十五)

指针的使用&#xff1a; 测试代码1&#xff1a; #include <stdio.h> // 标准的 main 函数声明&#xff0c;包括可选的 envp 参数 int main(int argc, char *argv[], char *envp[]) { // argc 命令行参数的数量&#xff08;包括程序名&#xff09; // argv 指向字…

github源码指引:一个自制代码生成器(嵌入式脚本语言)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码目录&#xff1a;CodeTemp…

Global Illumination_Reflective Shadow Maps Deep Optimizations

之前写过一篇Global Illumination_Reflective Shadow Maps&#xff08;RSM&#xff09;、Virtual Point Light&#xff08;VPL&#xff09;&#xff0c;近期重拾传统GI技术的实际工程场景中的应用&#xff0c;于是从效率方面对RSM、LPV、VCT技术进行效率优化&#xff0c;后续逐…

HTML 全解析:从基础到实战

一、简介 HTML&#xff08;HyperText Markup Language&#xff09;即超文本标记语言&#xff0c;是用于创建网页的标准标记语言。它通过各种标签来定义网页的结构和内容&#xff0c;使得浏览器能够正确地显示网页。HTML 文档由 HTML 元素组成&#xff0c;这些元素通过标签来表…

桌面整理大师 - Mac(苹果电脑)桌面整理工具软件

桌面整理大师 与 DeskWidgets 来自同一开发者&#xff0c;是一款专为 macOS 打造的桌面分区整理工具。 与 DeskWidgets 的文件分区组件相比&#xff0c;桌面整理大师拥有更加强大的功能&#xff0c;支持调整分区的大小和样式、可快速查看非桌面目录的文件…… 桌面整理大师的宗…

【Docker】Docker学习02 | docker-cli的基本命令

本文首发于 ❄️慕雪的寒舍 简单了解一下docker client的常用命令&#xff0c;更多命令可以查看完整命令列表。不同命令之间的关系&#xff0c;可以查看下图。 如果你看不到图片&#xff0c;不用担心&#xff0c;后面对每个命令进行介绍的时候&#xff0c;会提到它们的作用的。…

内存之RAM、SRAM、DRAM、ROM、FLASH、SDRAM、DDR*(一篇文章就懂)

内存之RAM、SRAM、DRAM、ROM、FLASH、SDRAM、DDR* 内存 内存&#xff08;Memory&#xff09;指的是内存存储器&#xff0c;又称为主存&#xff0c;是CPU用来直接寻址和存储的空间&#xff0c;它相当于一座桥梁&#xff0c;用以负责诸如硬盘、主板、显卡等硬件上的数据与处理器…

高性价比开放式运动耳机有哪些?五大高性价比开放式耳机分享

作为一名数码爱好者&#xff0c;从93年入坑耳机、音响等各类电子产品以来&#xff0c;一直在测试不同品牌、不同价位的产品。现在开放式耳机比较热门&#xff0c;我自然也是不能错过的&#xff0c;开放式耳机拥有很多优点&#xff0c;很多采用人体工学设计&#xff0c;能够更加…

UE5打包iOS运行查看Crash日志

1、查看Crash 1、通过xCode打开设备 2、选择APP打开最近的日志 3、选择崩溃时间点对应的日志 4、选择对应的工程打开 5、就能看到对应的Crash日志 2、为了防止Crash写代码需要注意 1、UObject在RemoveFromRoot之前先判断是否Root if (SelectedImage && Selecte…

fl studio mobile2024最新官方版V4.6.8安卓版+iOS苹果版

fl studio mobile&#xff0c;一款非常好用的音乐制作软件。该软件具有丰富多样的音乐类型让大家选择&#xff0c;内置多个好用的编辑工具、渲染工具、特效工具等可以使用。用户可以自由使用软件中的任何道具&#xff0c;直接在手机上编曲&#xff0c;进行音乐创作&#xff0c;…

买超声波清洗机什么牌子好?好用的超声波清洗机推荐

尽管超声波清洗机对不少人而言较为新鲜&#xff0c;尤其是对非眼镜佩戴者&#xff0c;但它其实并不陌生&#xff0c;常现身于眼镜店作为专业清洁工具。有人或许认为&#xff0c;拂去眼镜尘埃仅需一擦即可&#xff0c;实际上&#xff0c;长时间佩戴后&#xff0c;镜片与框架累积…

【日常总结】阿里云:windows server 过一段时间登录不进去,或提示:出现身份验证错误。 无法连接到本地安全机构

场景 阿里云 : ESC系统&#xff1a;windows server 2022 问题 无法登录&#xff0c;或者登录浸提提示密码已过期 原因 密码设置了过期时间 解决方案 修改密码策略&#xff1a;密码设置永不过期 打开“本地安全策略”编辑器&#xff1a;运行 secpol.msc。 导航至“账户…