最强英文开源模型Llama2架构与技术细节探秘

news/2023/12/5 22:53:47

prerequisite: 最强英文开源模型LLaMA架构探秘,从原理到源码

Llama2

在这里插入图片描述
Meta AI于2023年7月19日宣布开源LLaMA模型的二代版本Llama2,并在原来基础上允许免费用于研究和商用。

作为LLaMA的延续和升级,Llama2的训练数据扩充了40%,达到2万亿token,并且可处理的上下文增倍,达到4096个token。整体finetuning过程使用了1百万人工标记数据。开源的基座模型包括7B13B70B3个版本,并提供了对话增强版本的Llama chat和代码增强版本的Code Llama,供开发者和研究人员使用。
在这里插入图片描述
在这里插入图片描述

两代模型架构区别

请添加图片描述
Llama 2和初代模型相比,仍然延续Transformer’s decoder-only架构,仍然使用Pre-normalization、SwiGLU激活函数、旋转嵌入编码(RoPE),区别仅在于前述的40%↑的训练数据、更长的上下文和分组查询注意力机制(GQA, Grouped-Query Attention)。

Group-Query Attention

GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints

引入GQA的主要目的是提升推理速度,这种注意力机制有transformer的Multi-head Attention简化而来,再辅以KV cache的checkpoint机制进一步提速。
在这里插入图片描述
如上图:

  • 左边是transformer原始的Multi-head Attention,它有H个query,key,value,即每个query单独配一个key和value
  • 右边是其他研究者提出的Multi-query Attention,它在多个query共享同一个key和value
  • 中间则是折中的Grouped-query Attention,它将query进行了分组,仅在组内共享同一个key和value

具体而言,Llama2使用了8组KV映射,即GQA-8,实测效果上接近MHA,推理速度上接近MQA,尽可能做到了效果和速度兼得。
在这里插入图片描述
在这里插入图片描述

对比其他模型

在这里插入图片描述
Llama2在一众开源模型中遥遥领先。

笔者注:模型架构没有太大变化,GQA只是推理加速,但效果提升,那也就是说明主要得益于新增的那40%的数据。坦白讲,大模型阶段模型架构已经不那么重要了,可以保证一定的推理速度即可,效果上dataset is all you need。
在这里插入图片描述
但在闭源模型的比较上,Llama2仅领先PaLM,且仅能做到在MMLUGSM8K两个数据集上接近GPT3.5,与PaLM-2-L和GPT-4相比,仍然落后不少。

Llama-chat训练流程

请添加图片描述
下面我们来聊一聊llama-chat的训练流程,详见原技术论文,以下仅做流程概述:

  1. 自监督预训练
  2. 监督精调
  3. RLHF
    a. 自人类偏好数据集中训练2个奖励模型,分别是Safety Reward ModelHelpful Reward Model ,一个用于对人类偏好进行奖励建模,一个对安全合规进行奖励建模
    b. 先使用Helpful Reward模型进行RLHF,基于Rejection Sampling和PPO
    c. 在helpful的基础上进一步提升安全性,使用Safety Reward Model进行RLHF,也是基于Reject Sampling和PPO,实验证明,Safety RLHF能在不损害helpfulness的前提下有更好的长尾safety棒性

重要的细节上:

  1. PPO(Proximal Policy Optimization),即标准的RLHF使用的方法
  2. Rejection Sampling fine-tuning(拒绝采样微调):采样模型的k个输出,并选择奖励模型认为最好的样本作为输出进行梯度更新

两种RL算法的区别是:

  • 广度上:PPO仅进行一次生成;Reject Sampling会生成k个样本,从中选取奖励最大化的样本
  • 深度上:PPO的第t步训练过程的样本是t-1步更新的模型策略函数;Reject Sampling的训练过程相当于对模型当前策略下的所有输出进行采样,相当于是构建了一个新的数据集,然后在进行类似于SFT的微调

Meta仅在最大的Llama2 70B使用了Reject Sampling,其余模型仅使用了PPO。

Code-Llama

2023年8月24日,Meta推出了面向代码的可商用代码大模型Code Llama,开源了3个版本7B/13B/34B。支持多种编程语言,包括Python、C++、Java、PHP、Typescript (Javascript)、C#和Bash。
在这里插入图片描述
训练流程如下图:
在这里插入图片描述
如图所示,包含3个分支模型,每个分支模型的第一步都是使用500B的token进行Code TrainingInfilling code training

  1. Code Llama-Python(面向python语言的代码模型),第一步之后先用100B token的python代码进行训练,然后再使用20B的token在长上下文的场景上进行finetuning得到最终模型
  2. Code Llama(通用代码模型),第一步之后使用20B的token在长上下文的场景上进行finetuning得到最终模型
  3. Code Llama-Instruct(面向对话的代码模型),第一步之后同Code Llama使用20B的token在长上下文的场景上进行finetuning,然后再在5B的token上进行指令精调

训练集详情如下:
在这里插入图片描述
细节上:

  1. Code Training即使用代码数据进行训练
  2. Code Infilling值得是根据代码上下文预测残缺的代码部分,仅针对代码文本进行挖空预测,方法与Bert的挖空预测类似:
    a. 从完整的代码中选择一部分进行掩码(mask)并替换为<MASK>符号,构成上下文作为输入
    b. 然后采用自回归的方式对mask进行预测

模型效果对比上,神秘的unnatural版本在HumanEval的pass@1上领先GPT-3,接近于GPT-4(5%左右差距),其余部分明显领先PaLM系列和StarCoder系列模型:
在这里插入图片描述

参考文献

  1. https://ai.meta.com/llama/
  2. Llama 2: Open Foundation and Fine-Tuned Chat Models
  3. 大模型技术实践(二)|关于Llama 2你需要知道的那些事儿
  4. GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
  5. 大规模预训练语言模型方法与实践,崔一鸣,北京BAAI,2023年8月26日
  6. https://ai.meta.com/blog/code-llama-large-language-model-coding/
  7. Code Llama: Open Foundation Models for Code

http://www.ppmy.cn/news/1230152.html

相关文章

gitlab利用CI多工程持续构建

搭建CI的过程中有多个工程的时候&#xff0c;一个完美的构建过程往往是子工程上的更新(push 或者是merge)触发父工程的构建&#xff0c;这就需要如下建立一个downstream pipeline 子仓库1 .gitlab-ci.yml stages:- buildbuild_job:stage: buildtrigger:project: test_user/tes…

Zotero在word中插入带超链接的参考文献/交叉引用/跳转参考文献

Zotero以其丰富的插件而闻名&#xff0c;使用起来十分的带劲&#xff0c;最重要的是它是免费的、不卡顿&#xff0c;不像某专业软件。 然而Zotero在word插入参考文献时&#xff0c;无法为参考文献添加超链接&#xff0c;这是一个不得不提的遗憾。 不过&#xff0c;有大佬已经…

优秀智慧园区案例 - 佛山美的工业城零碳智慧园区,先进智慧园区建设方案经验

一、项目背景 美的工业园区西区最早建于上世纪90年代&#xff0c;到现在已经过去近30年&#xff0c;而这三十年恰恰是信息科技大发展的30年&#xff0c;原有的生产办公条件已不能很好的承载新时期办公和参观接待的需求。所以在21年美的楼宇科技事业部决定对原来的园区进行改造…

汽车级低压差稳压器LDO LM317BD2TR4G原理、参数及应用

LM317BD2TR4G主要功能特性分析 &#xff1a; LM317BD2TR4G 低漏 (LDO) 线性电压稳压器是一款可调 3 端子正向 LDO 电压器&#xff0c;能够在 1.2 V 至 37 V 的输出电压范围内提供 1.5 A 以上的电流。此电压稳压器使用非常简便&#xff0c;仅需两个外部电阻即可设置输出电压。另…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十六)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

Nginx(反向代理,负载均衡,动静分离)

反向代理 Nginx反向代理是一种将客户端请求转发给后端服务器的技术&#xff0c;即反向代理服务器。在这种架构中&#xff0c;客户端请求首先到达Nginx服务器&#xff0c;然后由Nginx服务器将请求转发给后端服务器&#xff0c;后端服务器响应请求&#xff0c;并将响应传递回Ngi…

FPGA实现双向电平转换

网上搜了一圈&#xff0c;好像没看到的类似的中文资料&#xff0c;不过MicroSemi有个文档AC349上给出了完整的解决方案&#xff0c;还有参考代码。 话不多说&#xff0c;看图&#xff1a; 欲知详情的朋友&#xff0c;请参考 AC349

算法笔记-第九章-堆(未完成-=需要好好搞搞题目)

算法笔记-第九章-堆 堆的基础知识堆的相关性质堆序性堆的存储堆的基础操作下滤操作上滤操作 建堆自顶向下建堆法自下而上建堆法 堆的应用优先队列 大佬讲解向下调整够建大顶堆 堆的基础知识 堆的相关性质 大佬视频总结 堆必须是一个完全二叉树完全二叉树只允许最后一行不为满…

【Linux】22、CPU 评价指标、性能工具、定位瓶颈、优化方法论:应用程序和系统

文章目录 一、评价 CPU 的指标1.1 CPU 使用率1.2 平均负载&#xff08;Load Average&#xff09;1.3 上下文切换1.4 CPU 缓存命中率 二、性能工具2.1 维度&#xff1a;从 CPU 性能指标出发&#xff0c;即当你查看某性能指标时&#xff0c;要清除知道哪些工具可以做到2.2 维度&a…

Ribbon

在Spring Cloud中&#xff0c;Ribbon是一个用于客户端负载均衡的组件&#xff0c;它可以与其他服务发现组件&#xff08;例如Eureka&#xff09;集成&#xff0c;以提供更强大的负载均衡功能。Ribbon使得微服务架构中的客户端能够更加智能地调用其他服务的实例&#xff0c;从而…

人力资源小程序

人力资源管理对于企业的运营至关重要&#xff0c;而如今随着科技的发展&#xff0c;制作一个人力资源小程序已经变得非常简单和便捷。在本文中&#xff0c;我们将为您介绍如何通过乔拓云网制作一个人力资源小程序&#xff0c;只需五个简单的步骤。 第一步&#xff1a;注册登录乔…

异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (二)

继上一章: CSDN 本次需要做的是进行有效ip的验证! 我们知道,从网页上爬取上千上万个ip之后,因为是免费的代理,所以,对这上千上万个ip进行验证有效性就需要考虑效率上的问题了; 而验证ip有效性的唯一办法,就是通过对网络发起请求;如果state200,就是有效,否则就是无效; 而上…

视频转码方法:多种格式视频批量转FLV视频的技巧

随着互联网的发展&#xff0c;视频已成为日常生活中不可或缺的一部分。然而&#xff0c;不同的视频格式可能适用于不同的设备和平台&#xff0c;因此需要进行转码。在转码之前&#xff0c;要了解各种视频格式的特点和适用场景。常见的视频格式包括MP4、AVI、MKV、FLV等。其中&a…

BP神经网络原理与如何实现BP神经网络

本文部分图文来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、BP神经网络的背景生物学原理 二、BP神经网络模型 2.1 BP神经网络的结构 2.2 BP神经网络的激活函数 三、BP神经网络的误差函数 四、BP神经网络的训练 4.1 BP神经网络的训练流程 4.2 BP神经网络的训练流…

Android Studio常见问题

Run一直是上次的apk 内存占用太大&#xff0c;导致闪退

《 机器人基础 》期末试卷(A)

一、填空题&#xff08;30分&#xff0c;每空2分&#xff09; 1. 按照相机的工作方式&#xff0c;机器人常用相机分为1&#xff09;__ 单目摄像头 2&#xff09;__ 双目摄像头 _ 3&#xff09;_深度摄像头_ 三类。 2. 度量地图强调…

PTA 7-7 分解质因数(c++)

求出区间[a,b]中所有整数的质因数分解。 输入格式: 输入两个整数a&#xff0c;b。数据规模和约定  2<a<b<10000 输出格式: 每行输出一个数的分解&#xff0c;形如ka1a2a3...(a1<a2<a3...&#xff0c;k也是从小到大的)(具体可看样例) 输入样例: 在这里给…

java mybatisplus generator 修改字段类型

最新版生成代码的指定字段类型 FastAutoGenerator .dataSourceConfig(config -> {config.typeConvertHandler(new ITypeConvertHandler() {Overridepublic NotNull IColumnType convert(GlobalConfig globalConfig, TypeRegistry typeRegistry, TableField.MetaInfo metaIn…

react的组件和元素的类型总结

先来一小段代码 const Demo <div>Demo</div>const App () > {return (<div><Demo></Demo></div>); }不知道这段代码大家会不会发现是错误的&#xff0c;这里的Demo 是一个JSX&#xff0c;并不是一个组件&#xff0c;所有不能使用<…

【开源】基于JAVA的超市自助付款系统

项目编号&#xff1a; S 008 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S008&#xff0c;文末获取源码。} 项目编号&#xff1a;S008&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 商品类型模块2.2 商品模块2.3 超市账…
最新文章