llama.cpp-MiniCPM-V-2.6-IDE调试

最近在看llama.cpp项目里的MiniCPM-V,原来项目中都是终端启动的,不方便魔改。于是根据模型demo文件写了一个调试代码,在debug的过程中,看数据加载过程,学习模型结构。

新建一个python文件运行,自己改一下路径。

import torch
from PIL import Image
from transformers import AutoModel,AutoTokenizer
from modeling_minicpmv import MiniCPMV
#模型来源于https://huggingface.co/openbmb/MiniCPM-V-2_6,在代码里调用hugging预训练模型总是报错,所以每次一般都直接下载到服务器上,比较方便。

model_name_or_path = '/home/XXX/llama.cpp/MiniCPM-V-2_6'

model = MiniCPMV.from_pretrained(
    pretrained_model_name_or_path = model_name_or_path,
    trust_remote_code = True,
    attn_implementation = 'sdpa',
    torch_dtype = torch.bfloat16,
)
model = model.eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path=model_name_or_path,trust_remote_code = True)
image = Image.open('/home/XXX/llama.cpp/MiniCPM-V-2_6/assets/radar_final.png').convert('RGB')
question = 'Describe this image'
msgs = [{'role': 'user', 'content': [image, question]}]

prompt = model.chat(
    image=None,
    msgs=msgs,
    tokenizer=tokenizer
)
print(prompt)

过程中打断点看image tokens,模型层,加载过程等,主要文件modeling_minicpmv.py。 

这里用的是示例图片,最终结果如下:

  

### 实现 GGUF 封装于 `llama.cpp-master` 项目 在 `llama.cpp-master` 项目中实现或集成 GGUF(Ggml Universal File Format)封装涉及多个方面的工作。开发者 Georgi Gerganov 提供了一个纯 C/C++ 版本的 LLaMA 模型推理工具,这为处理大型语言模型提供了高效途径[^3]。 #### 修改构建配置文件以支持 GGUF 功能 为了使 `llama.cpp-master` 支持 GGUF 文件格式,在项目的根目录下找到并编辑 `CMakeLists.txt` 或其他相应的构建脚本文件。确保添加必要的编译选项和依赖库来解析 GGUF 文件结构: ```cmake option(USE_GGUF "Enable support for GGUF file format" ON) if (USE_GGUF) add_definitions(-DGGUF_ENABLED=1) endif() ``` 此部分修改允许通过定义宏 `-DGGUF_ENABLED=1` 来启用对 GGUF 的支持[^1]。 #### 编写读取 GGUF 文件的功能模块 创建一个新的源码文件 `gguf_loader.c` 并编写函数用于加载 GGUF 文件中的参数到内存中。这里提供一个简单的伪代码框架作为参考: ```c #include <stdio.h> #include <stdlib.h> // 假设已经包含了 gguf 相关头文件以及 llm 定义的数据结构 struct model_params load_gguf_model(const char *filename){ FILE* fp; struct model_params params; // 打开 GGUF 文件进行二进制读取操作 if ((fp = fopen(filename, "rb")) == NULL) { fprintf(stderr,"Error opening %s\n", filename); exit(EXIT_FAILURE); } // 解析 GGUF 头部信息... fclose(fp); return params; } ``` 上述代码展示了如何打开指定路径下的 `.gguf` 文件,并将其内容映射至内部使用的数据表示形式。实际应用时需根据具体需求调整细节逻辑[^2]。 #### 更新现有 API 接口以便利用新特性 最后一步是对现有的应用程序接口(API)做出相应更改,使得外部能够方便地传入经过量化的 GGUF 文件名或其他必要参数给底层执行环境。例如可以在初始化阶段增加如下方法签名: ```c void init_llama_with_gguf(const char *model_path); // 初始化带有 GGUF 参数的语言模型实例 ``` 这样就完成了基本层次上的 GGUF 集成工作流程概述。当然,具体的编码过程可能还会涉及到更多复杂的考量因素和技术挑战,比如性能优化、错误处理机制的设计等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值