Meta Llama 3 大型语言模型的超参数

2024-05-31 20:04

本文主要是介绍Meta Llama 3 大型语言模型的超参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Meta Llama 3 大型语言模型的超参数

flyfish

介绍
https://github.com/meta-llama/llama3

我们正在释放大型语言模型的潜力。最新版本的Llama现已向个人、创作者、研究人员和各类企业开放,帮助他们负责任地进行实验、创新和规模化实现他们的想法。

此次发布包括预训练和指令调优的Llama 3语言模型的模型权重和起始代码,模型参数规模从80亿到700亿不等。

原始 Transformer 的超参数

d_model = 512
num_layers = 6
num_attention_heads = 8
ffn_hidden_dim = 2048  # 4 * d_model
norm_eps = 1e-6
max_seq_len = 512

Llama 3 示例的超参数

dim = 4096
n_layers = 32
n_heads = 32
n_kv_heads = None  # 或者是另外设定的值
vocab_size = -1  # 通常需要具体设定
multiple_of = 256
ffn_dim_multiplier = None  # 或者是另外设定的值
norm_eps = 1e-5
rope_theta = 500000
max_batch_size = 32
max_seq_len = 2048

配置源码

@dataclass
class ModelArgs:dim: int = 4096n_layers: int = 32n_heads: int = 32n_kv_heads: Optional[int] = Nonevocab_size: int = -1multiple_of: int = 256  # make SwiGLU hidden layer size multiple of large power of 2ffn_dim_multiplier: Optional[float] = Nonenorm_eps: float = 1e-5rope_theta: float = 500000max_batch_size: int = 32max_seq_len: int = 2048

这段代码定义了一个数据类 ModelArgs,用于存储和管理模型的参数配置。数据类(dataclass)是一种便捷的方式来创建类,这些类主要用作数据容器。下面是对每个参数的解释:

dim: int = 4096

模型的隐藏层维度,表示每层中有多少个神经元。
n_layers: int = 32

模型的层数,表示网络中有多少层(通常是Transformer的层数)。
n_heads: int = 32

注意力头的数量,表示在多头注意力机制中,有多少个独立的注意力头。
n_kv_heads: Optional[int] = None

可选的键和值的头数。如果设置为 None,则使用默认的注意力头数(n_heads)。
vocab_size: int = -1

词汇表的大小,通常在语言模型中用于定义词汇表的总数。初始化时可能使用 -1 表示未指定。
multiple_of: int = 256

SwiGLU(Swish-Gated Linear Unit)隐藏层大小必须是该值的倍数,通常是为了优化计算效率和内存对齐。
ffn_dim_multiplier: Optional[float] = None

前馈神经网络(FFN)维度的乘数。通常用于调整FFN层的大小。
norm_eps: float = 1e-5

用于层归一化的epsilon值,防止除零错误的小常数。
rope_theta: float = 500000

RoPE(Rotary Positional Encoding)中的theta参数,控制位置编码的参数。
max_batch_size: int = 32

最大批处理大小,指一次前向或后向传播中可以处理的样本数量。
max_seq_len: int = 2048

最大序列长度,指模型可以处理的最大输入序列长度。

@dataclass 是 Python 的 dataclasses 模块中的一个装饰器,用于简化类的定义,尤其是那些主要用于存储数据的类。使用 @dataclass 可以自动生成一些常见的特殊方法,如 initrepreq 等,从而减少了样板代码,提高了代码的可读性和维护性。

下面是一个 @dataclass 的使用示例:

from dataclasses import dataclass@dataclass
class Person:name: strage: intemail: str# 创建 Person 类的实例
person1 = Person(name="Alice", age=30, email="alice@example.com")
person2 = Person(name="Bob", age=25, email="bob@example.com")# 自动生成的 __repr__ 方法会生成易读的字符串表示
print(person1)  # 输出:Person(name='Alice', age=30, email='alice@example.com')# 自动生成的 __eq__ 方法允许比较两个实例是否相等
print(person1 == person2)  # 输出:False# 自动生成的 __init__ 方法使得初始化实例变得简单
person3 = Person("Charlie", 35, "charlie@example.com")
print(person3)  # 输出:Person(name='Charlie', age=35, email='charlie@example.com')

输出结果

Person(name='Alice', age=30, email='alice@example.com')
False
Person(name='Charlie', age=35, email='charlie@example.com')

在 Python 中,前后带双下划线的名称通常称为 “魔术方法”(或 “特殊方法”)。这些方法是 Python 内置的方法,具有特定的用途和行为,通常用于实现类的某些特性或操作。以下是一些常见的魔术方法及其含义:

__init__:

构造方法,用于初始化对象。当创建一个新的类实例时会自动调用。

class MyClass:def __init__(self, value):self.value = valueobj = MyClass(10)  # __init__ 方法被调用

repr:

返回对象的“官方”字符串表示,主要用于调试。

str:

返回对象的“非正式”字符串表示,适合人类阅读。当使用 print() 或 str() 时调用。

class MyClass:def __init__(self, value):self.value = valuedef __repr__(self):return f"MyClass(value={self.value})"def __str__(self):return f"Value is {self.value}"def __eq__(self, other):return self.value == other.valuedef __lt__(self, other):return self.value < other.value# 创建 MyClass 类的实例
obj1 = MyClass(10)
obj2 = MyClass(20)# 使用 __repr__ 方法
print(repr(obj1))  # 输出:MyClass(value=10)# 使用 __str__ 方法
print(str(obj1))  # 输出:Value is 10# 使用 __eq__ 方法
print(obj1 == obj2)  # 输出:False# 使用 __lt__ 方法
print(obj1 < obj2)  # 输出:True# 示例哈希方法
class MyClassWithHash:def __init__(self, value):self.value = valuedef __hash__(self):return hash(self.value)# 创建 MyClassWithHash 类的实例
obj3 = MyClassWithHash(10)
print(hash(obj3))  # 输出:10(或与值相关的哈希值)

输出

MyClass(value=10)
Value is 10
False
True
10

编写调用示例

from dataclasses import dataclass
from typing import Optional@dataclass
class ModelArgs:dim: int = 4096  # dim 是一个整数,默认值为 4096n_layers: int = 32  # n_layers 是一个整数,默认值为 32n_heads: int = 32  # n_heads 是一个整数,默认值为 32n_kv_heads: Optional[int] = None  # n_kv_heads 是一个可选整数,默认值为 Nonevocab_size: int = -1  # vocab_size 是一个整数,默认值为 -1multiple_of: int = 256  # multiple_of 是一个整数,默认值为 256ffn_dim_multiplier: Optional[float] = None  # ffn_dim_multiplier 是一个可选浮点数,默认值为 Nonenorm_eps: float = 1e-5  # norm_eps 是一个浮点数,默认值为 1e-5rope_theta: float = 500000  # rope_theta 是一个浮点数,默认值为 500000max_batch_size: int = 32  # max_batch_size 是一个整数,默认值为 32max_seq_len: int = 2048  # max_seq_len 是一个整数,默认值为 2048# 创建 ModelArgs 类的实例,使用默认值
args = ModelArgs()
print(args)# 创建 ModelArgs 类的实例,提供部分参数值
custom_args = ModelArgs(dim=512, n_layers=16)
print(custom_args)

输出

ModelArgs(dim=4096, n_layers=32, n_heads=32, n_kv_heads=None, vocab_size=-1, multiple_of=256, ffn_dim_multiplier=None, norm_eps=1e-05, rope_theta=500000, max_batch_size=32, max_seq_len=2048)
ModelArgs(dim=512, n_layers=16, n_heads=32, n_kv_heads=None, vocab_size=-1, multiple_of=256, ffn_dim_multiplier=None, norm_eps=1e-05, rope_theta=500000, max_batch_size=32, max_seq_len=2048)

这篇关于Meta Llama 3 大型语言模型的超参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1018907

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

ABAP怎么把传入的参数刷新到内表里面呢?

1.在执行相关的功能操作之前,优先执行这一段代码,把输入的数据更新入内表里面 DATA: lo_guid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_guid.CALL METHOD lo_guid->check_changed_data.CALL M

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

C语言 将“China”译成密码

将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。例如,字母“A”后面的第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。编译程序用付赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为“C”,“h”,“i”,“n”,“a”,经过运算,使c1,c2,c3,c4,c5分别变成“G”,“l”,“m”,“r”,“e”。分别用put

OpenCompass:大模型测评工具

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型数据侧总结大模型token等基本概念及参数和内存的关系大模型应用开发-华为大模型生态规划从零开始的LLaMA-Factor

模型压缩综述

https://www.cnblogs.com/shixiangwan/p/9015010.html

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级