定位:代码复现贴
教程:https://datawhaler.feishu.cn/wiki/PLCHwQ8pai12rEkPzDqcufWKnDd
模型加载
model = AutoModelForCausalLM.from_pretrained(
path,
device_map="auto",
torch_dtype=torch.bfloat16,
trust_remote_code=True
)
-
AutoModelForCausalLM.from_pretrained(path)
:- 这是
transformers
库中的一种通用方法,用于从预训练模型路径(path
)加载一个因果语言模型(Causal Language Model,CLM)。 - 因果语言模型是一种序列到序列的模型,通常用于生成任务,例如自动完成或文本生成。
- 这是
-
device_map="auto"
:- 该参数用于自动选择计算设备(如 GPU 或 CPU)来加载模型。设置为
"auto"
后,模型会根据可用资源自动映射到适当的设备。
- 该参数用于自动选择计算设备(如 GPU 或 CPU)来加载模型。设置为
-
torch_dtype=torch.bfloat16
:- 这将模型的计算精度设置为
bfloat16
(一种 16 位浮点格式),这通常用于加速计算和减少显存占用,同时保持数值稳定性。
- 这将模型的计算精度设置为
-
trust_remote_code=True
:- 这个参数表示信任远程代码,允许加载自定义模型结构。如果预训练模型所在的路径中包含自定义的模型定义文件(而不是标准的
transformers
库模型),这个选项允许这些自定义代码被执行。
- 这个参数表示信任远程代码,允许加载自定义模型结构。如果预训练模型所在的路径中包含自定义的模型定义文件(而不是标准的
输出的模型如下:
模型结构分析
Yuan 在 Transformer 的 Decoder 进行改进,引入了一种新的注意力机制 Localized Filtering-based Attention(LFA)
-
YuanForCausalLM
:- 这是一个自定义的因果语言模型类,可能来自于远程代码定义。该模型包含了实际的
YuanModel
和一个lm_head
(语言模型的输出头)。
- 这是一个自定义的因果语言模型类,可能来自于远程代码定义。该模型包含了实际的
-
YuanModel
:- 该模型是
YuanForCausalLM
的核心部分,包含嵌入层、多个解码器层(YuanDecoderLayer
)、和一个归一化层。
- 该模型是
-
embed_tokens
:- 这是词嵌入层,用于将输入的标记(tokens)转换为高维向量表示。这里的词表大小为
135040
,每个标记被嵌入到一个2048
维的向量空间中。
- 这是词嵌入层,用于将输入的标记(tokens)转换为高维向量表示。这里的词表大小为
-
layers
:- 这是模型的主体,由
24
个YuanDecoderLayer
组成,每个解码器层包含自注意力机制、MLP(多层感知器)层、和归一化层。
- 这是模型的主体,由
-
<YuanAttention
: