欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > GLM-4V模型学习

GLM-4V模型学习

2025/6/8 18:01:48 来源:https://blog.csdn.net/qq_38915354/article/details/139878942  浏览:    关键词:GLM-4V模型学习

chatglm
智谱AI引领技术前沿,推出了新一代预训练模型GLM-4系列,其中的GLM-4-9B作为开源版本,展现了其在人工智能领域的深厚实力。在语义理解、数学运算、逻辑推理、代码编写以及广泛知识领域的数据集测评中,GLM-4-9B及其人类偏好对齐的版本GLM-4-9B-Chat均以超越Llama-3-8B的优异表现,证明了其卓越的性能。

GLM-4-9B-Chat不仅擅长进行流畅的多轮对话,还集成了网页浏览、代码执行、自定义工具调用(Function Call)和长文本推理(支持最大128K上下文)等高级功能,极大地扩展了其应用场景。此外,本代模型在语言支持上迈出了重要一步,现已支持包括日语、韩语、德语在内的26种语言,进一步促进了全球范围内的语言交流与技术融合。

为了满足不同用户的需求,智谱AI还推出了支持1M上下文长度(约200万中文字符)的GLM-4-9B-Chat-1M模型,以及基于GLM-4-9B的多模态模型GLM-4V-9B。GLM-4V-9B在1120 * 1120的高分辨率下,展现了其中英双语多轮对话的强大能力。在中英文综合能力、感知推理、文字识别、图表理解等多模态评测中,GLM-4V-9B的表现超越了GPT-4-turbo-2024-04-09、Gemini 1.0 Pro、Qwen-VL-Max和Claude 3 Opus等同类模型。

GLM结构

GLM(General Language Modeling)是一种自然语言处理模型,用于理解和生成人类语言。GLM的架构包括多个层次,每个层次都扮演着重要的角色。下面是GLM框架和模型的详细解释:

  1. 输入层:输入层负责将文本数据转换为模型可以理解的格式。首先,使用Tokenizer将输入的文本序列转换为字或词标记的序列。然后,将这些词标记转换为对应的ID,即Input_ids。
  2. Embedding层:Embedding层将每个ID映射到一个固定维度的向量。这样,每个文本序列都被转换为一个向量序列,作为模型的初始输入表示。
  3. GLMBlock28(或GLM4-9B-Chat的GLMBlock40):这是GLM模型的核心部分,由多个GLMBlock组成。每个GLMBlock包含两个主要部分:Self-Attention和Feed-Forward Network (MLP)。
    • Self-Attention:在Self-Attention部分,输入首先通过Q、K、V矩阵映射。然后,引入Rotary Position Embedding(RoPE)以更好地学习词之间的位置信息。接着,进行注意力计算,并将输出线性变换为与输入相同的维度。最后,使用残差连接网络(Residual Connection)、Dropout和RMSNorm等方法来防止过拟合。

    • Feed-Forward Network (MLP):在MLP部分,输入通过两层全连接变换,最多扩展到13696维度。使用Swiglu激活函数代替传统的Relu激活函数。与Self-Attention的输出类似,MLP的输出也引入了Dropout和RMSNorm方法。

  4. RMSNorm层:在GLM模型中,使用RMSNorm(均方根标准化)代替传统的LayerNorm(层标准化)。RMSNorm具有加速训练和改善模型泛化能力的效果。
  5. 输出层:输出层负责将模型的最终输出转换回文本格式。首先,将embedding转换回字词编码。然后,使用解码器将这些编码转换为人类可读的文本。
  6. 残差连接网络(Residual Connection):残差连接网络是一种在深度学习中常用的技巧。它在神经网络的层与层之间添加一个直接的连接,允许输入信号无损地传递到较深的层。这样设计的目的是为了缓解梯度消失和梯度爆炸问题,同时促进梯度在深层网络中的流畅传播,使得训练更高效,模型更容易学习复杂的特征。
  7. 旋转位置编码(Rotary Position Embedding,RoPE):RoPE是一种位置编码方法,用于更好地学习词之间的位置信息。它被广泛应用于各种NLP模型中,如Qwen、LLaMA等。

GLM-4V模型

ChatGLMForConditionalGeneration((transformer): ChatGLMModel((embedding): Embedding((word_embeddings): Embedding(151552, 4096))(rotary_pos_emb): RotaryEmbedding()(encoder): GLMTransformer((layers): ModuleList((0-39): 40 x GLMBlock((input_layernorm): RMSNorm()(self_attention): SelfAttention((query_key_value): Linear(in_features=4096, out_features=4608, bias=True)(core_attention): CoreAttention((attention_dropout): Dropout(p=0.0, inplace=False))(dense): Linear(in_features=4096, out_features=4096, bias=False))(post_attention_layernorm): RMSNorm()(mlp): MLP((dense_h_to_4h): Linear(in_features=4096, out_features=27392, bias=False)(dense_4h_to_h): Linear(in_features=13696, out_features=4096, bias=False))))(final_layernorm): RMSNorm())(output_layer): Linear(in_features=4096, out_features=151552, bias=False)(vision): EVA2CLIPModel((patch_embedding): PatchEmbedding((proj): Conv2d(3, 1792, kernel_size=(14, 14), stride=(14, 14))(position_embedding): Embedding(6401, 1792))(transformer): Transformer((layers): ModuleList((0-62): 63 x TransformerLayer((input_layernorm): LayerNorm((1792,), eps=1e-06, elementwise_affine=True)(attention): Attention((query_key_value): Linear(in_features=1792, out_features=5376, bias=True)(dense): Linear(in_features=1792, out_features=1792, bias=True)(output_dropout): Dropout(p=0.0, inplace=False))(mlp): MLP((activation_fn): GELUActivation()(fc1): Linear(in_features=1792, out_features=15360, bias=True)(fc2): Linear(in_features=15360, out_features=1792, bias=True))(post_attention_layernorm): LayerNorm((1792,), eps=1e-06, elementwise_affine=True))))(linear_proj): GLU((linear_proj): Linear(in_features=4096, out_features=4096, bias=False)(norm1): LayerNorm((4096,), eps=1e-05, elementwise_affine=True)(act1): GELU(approximate='none')(dense_h_to_4h): Linear(in_features=4096, out_features=13696, bias=False)(gate_proj): Linear(in_features=4096, out_features=13696, bias=False)(dense_4h_to_h): Linear(in_features=13696, out_features=4096, bias=False))(conv): Conv2d(1792, 4096, kernel_size=(2, 2), stride=(2, 2))))
)

GLM-4V-9B硬件要求

在这里插入图片描述
最低硬件要求
如果您希望运行官方提供的最基础代码 (transformers 后端) 您需要:

  • Python >= 3.10
  • 内存不少于 32 GB

如果您希望运行官方提供的本文件夹的所有代码,您还需要:

  • Linux 操作系统 (Debian 系列最佳)
  • 大于 8GB 显存的,支持 CUDA 或者 ROCM 并且支持 BF16 推理的 GPU 设备。(FP16 精度无法训练,推理有小概率出现问题)

多模态能力

GLM-4V-9B 是一个多模态语言模型,具备视觉理解能力,其相关经典任务的评测结果如下:

MMBench-EN-TestMMBench-CN-TestSEEDBench_IMGMMStarMMMUMMEHallusionBenchAI2DOCRBench
gpt-4o-2024-05-1383.482.177.163.969.22310.355.084.6736
gpt-4-turbo-2024-04-0981.080.273.056.061.72070.243.978.6656
gpt-4-1106-preview77.074.472.349.753.81771.546.575.9516
InternVL-Chat-V1.582.380.775.257.146.82189.647.480.6720
LLaVA-Next-Yi-34B81.179.075.751.648.82050.234.878.9574
Step-1V80.779.970.350.049.92206.448.479.2625
MiniCPM-Llama3-V2.577.673.872.351.845.82024.642.478.4725
Qwen-VL-Max77.675.772.749.552.02281.741.275.7684
Gemini 1.0 Pro73.674.370.738.649.02148.945.772.9680
Claude 3 Opus63.359.264.045.754.91586.837.870.6694
GLM-4V-9B81.179.476.858.747.22163.846.681.1786
import torch
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda"tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-4v-9b", trust_remote_code=True)query = '描述这张图片'
image = Image.open("your image").convert('RGB')
inputs = tokenizer.apply_chat_template([{"role": "user", "image": image, "content": query}],add_generation_prompt=True, tokenize=True, return_tensors="pt",return_dict=True)  # chat modeinputs = inputs.to(device)
model = AutoModelForCausalLM.from_pretrained("THUDM/glm-4v-9b",torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True
).to(device).eval()gen_kwargs = {"max_length": 2500, "do_sample": True, "top_k": 1}
with torch.no_grad():outputs = model.generate(**inputs, **gen_kwargs)outputs = outputs[:, inputs['input_ids'].shape[1]:]print(tokenizer.decode(outputs[0]))

未完待续

感谢LDG_AGI分享的《【机器学习】GLM-4V:图片识别多模态大模型(MLLs)初探》博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词