了解 dbrx-instruct

0. 简介

DBRX 是一个基于 Transformer 的仅解码器大型语言模型 (LLM),它使用下一个令牌预测进行训练。它使用细粒度的专家混合 (MoE) 架构,总参数为 132B,其中 36B 参数在任何输入上都处于活动状态。它是在 12T 文本和代码数据标记上预先训练的。与 Mixtral-8x7B 和 Grok-1 等其他开放式 MoE 模型相比,DBRX 是细粒度的,这意味着它使用更多的小型专家。DBRX 有 16 名专家并选择 4 名,而 Mixtral-8x7B 和 Grok-1 有 8 名专家并选择 2 名。这提供了 65 倍以上的专家组合,我们发现这提高了模型质量。DBRX 使用旋转位置编码 (RoPE)、门控线性单元 (GLU) 和分组查询注意力 (GQA)。它使用 tiktoken 存储库中提供的 GPT-4 分词器。我们根据详尽的评估和规模实验做出了这些选择。

DBRX 在精心策划的 12T 令牌上进行了预训练,最大上下文长度为 32K 令牌。我们估计,这些数据比我们用于预训练 MPT 系列模型的数据至少要好 2 倍。这个新数据集是使用全套 Databricks 工具开发的,包括用于数据处理的 Apache Spark™ 和 Databricks 笔记本,以及用于数据管理和治理的 Unity Catalog。我们使用课程学习进行预训练,在训练过程中以我们发现可以显着提高模型质量的方式改变数据组合。

输入:DBRX 仅接受基于文本的输入,并接受最多 32768 个令牌的上下文长度。

输出:DBRX 仅生成基于文本的输出。

模型地址:https://huggingface.co/databricks/dbrx-instruct

如果您有大约550G的内存或交换区,可以在CPU情况下加载模型,打印模型类型

运行结果

1. 分析 model.safetensors.index.json 文件

此模型很大,从 model.safetensors.index.json 可以得知为 245GB:

模型的权重主要有4个参数,和大多数的模型参数差不多,只是名字稍微有区别

  1. m_head.weight,
  2. transformer.blocks, 40个(0-39)
  3. transformer.norm_f.weight,
  4. transformer.wte.weight

1.1 权重的大小

如果想要了解上面的四个权重的大小,参照 model.safetensors.index.json 文件,最少需要三个 .safetensors 文件,代码如下:

运行结果:

可以看到所有数据类型均是 bfloat16, 占两个字节

我们可以计算 lm_head.weigh 的实际大小:100352 * 6144 * 2 = 1233125376

1.2 保存每个权重为一个文件

运行结果:

1.3 分类存储张量

运行结果:

1.4 加载张量

运行结果:

2. 了解 transformer.blocks.0

从前面的分析来看,每一个 block 含有有 ffn 和 norm_attn_norm

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部