Hugging Face模型转换GGUF格式模型

LLaMA-Factory微调大模型导出的模型时HF格式的而Ollama框架只支持gguf文件格式的自定义模型,所以需要将模型进行转换
开源项目llama.cpp提供的有模型格式转换工具
项目地址:https://github.com/ggerganov/llama.cpp
先下载项目
在这里插入图片描述

解压,在项目下打开cmd命令窗口
在这里插入图片描述

创建虚拟环境

conda create -n  llama_cpp python==3.10 

激活

 activate llama_cpp 

torch 安装

conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorchcuda=12.1 -c pytorch -c nvidia

依赖安装

pip install --editable . 

安装完成
在这里插入图片描述
llama.cpp官方提供的 convert-hf-to-gguf.py 脚本,用于完成huggingface格式到gguf格式的转换
在这里插入图片描述
格式转换

python convert_hf_to_gguf.py F:\tools\models\export

这里的 F:\tools\models\export 是我微调大模型后导出的模型路径
在这里插入图片描述
在这里插入图片描述
转换后的模型就可以使用ollama进行加载:ollama加载本地自定义模型

### 将 GGUF 格式转换为 BIN 文件的方法 要将 GGUF 格式模型文件转换为 PyTorch 的 `.bin` 文件,需要完成以下几个核心操作: 1. **解析 GGUF 文件** 需要通过工具或库来读取 GGUF 文件的内容。GGUF 是一种二进制格式,包含了模型的权重、架构信息以及其他元数据[^1]。可以利用 `llama.cpp` 提供的相关工具或者自定义脚本来提取这些信息。 2. **重建 PyTorch 模型结构** 在获取到 GGUF 中存储的权重之后,需根据其架构信息重新构建一个与之匹配的 PyTorch 模型类。这一步依赖于对原生模型的理解以及 GGUF 文件中保存的具体参数名称和形状[^3]。 3. **加载权重并保存为 .bin 文件** 使用 PyTorch 的功能将提取出来的权重映射至新建好的模型实例上,并调用 `torch.save()` 方法将其序列化为标准的 `.bin` 文件格式[^2]。 以下是实现这一过程的一个示例代码片段: ```python import torch from collections import OrderedDict def load_gguf_to_dict(gguf_file_path): """ 加载 GGUF 文件并将其中的数据转化为字典形式。 这里假设存在某种方式能够直接从 gguf 转换成 Python 字典, 实际应用时可能需要用到特定库比如 llama-cpp-python 或其他社区开发的支持包。 """ # 假设有一个函数可以从 gguf 文件路径读取出键值对表示的张量集合 tensors = {} # 此处应替换为实际逻辑以真正处理 gguf 数据源 return tensors def convert_tensors_for_pytorch(tensor_dict, model_structure): """ 对齐 tensor 名称使其适配目标 pytorch 模型预期输入的名字列表; 同时调整任何必要的维度顺序 (例如 HuggingFace Transformers 库常用列优先布局 vs 行优先)。 参数: tensor_dict - 来源于 gguf 解析后的原始张量集合作为 dict 类型传入 model_structure - 已经初始化完毕等待填充权重的目标网络对象 返回值: 经过修正后可以直接赋给 state_dict() 的有序字典版本 """ converted_state_dict = OrderedDict() for key in model_structure.state_dict().keys(): if key not in tensor_dict: raise KeyError(f"Missing expected parameter '{key}' during conversion.") value = tensor_dict[key].to(torch.float32).clone().detach() # 可能还需要额外变换 shape converted_state_dict[key] = value return converted_state_dict if __name__ == "__main__": input_gguf_filepath = "./example_model.gguf" output_bin_filepath = "./converted_example_model.bin" loaded_data = load_gguf_to_dict(input_gguf_filepath) # 定义你的 PyTorch Model Class 并实例化它作为骨架框架待填充数值进去 class ExampleModel(torch.nn.Module): def __init__(self): super(ExampleModel, self).__init__() ... # 初始化层配置 def forward(self, x): ... example_instance = ExampleModel() aligned_weights = convert_tensors_for_pytorch(loaded_data, example_instance) example_instance.load_state_dict(aligned_weights) torch.save(example_instance.state_dict(), output_bin_filepath) ``` 上述流程展示了如何手动执行从 GGUF 到 `.bin` 的转换工作流。需要注意的是,在具体实践中可能会遇到更多细节上的差异,尤其是不同类型的神经网络之间可能存在显著的设计区别[^4]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值