使用llama.cpp把huggingface模型转换为ollama所需要的gguf格式

部署运行你感兴趣的模型镜像

注:此文章用于记录自己在模型格式转换所遇到的一些问题和过程

1. 下载llama.cpp

这里直接给出git链接,你可以克隆下载,也可以下载zip然后解压。

ggml-org/llama.cpp: LLM inference in C/C++

2. 直接拉取原生huggingface模型进行转换

        第一次实验是直接拉取huggingface上的模型然后保存后就进行转换,这里直接贴出最简单的代码

from transformers import AutoTokenizer, AutoModelForCausalLM

model_dir = "./model"
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
save_dir = "./my_models/Qwen2.5-0.5-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir=model_dir, torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)


tokenizer.save_pretrained(save_dir)
model.save_pretrained(save_dir)

说明几个AutoModelForCausalLM.from_pretrained的参数:

        cache_dir :指定模型保存的路径,避免下到C盘

        torch_dtype:自动选择适合自己电脑的张量类型

接下来就是进入llama.cpp文件夹下,运行如下命令

python convert_hf_to_gguf.py 你保存的hf模型路径 --outfile 你要保存的gguf模型路径 --outtype f16

当然你还可以通过llama.cpp进行量化,这里先不做演示,后续有空会更新。

3. lora微调模型转换

       总体步骤分为:保存模型——合并模型——转换模型

        3.1 保存模型

        在TrainingArguments里面定义好output_dir即可,保存后的模型目录应该包含以下文件

        3.2 合并模型

        这里我直接放上我自己的合并代码,比较简单

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
model_path = './models/models--Qwen--Qwen2.5-1.5B-Instruct/snapshots/989aa7980e4cf806f80c7fef2b1adb7bc71aa306' # 基座模型路径
lora_path = './output/Qwen2.5-1.5b-医疗数据/checkpoint-98' # lora模型路径
save_path = './models/Qwen2.5_1.5B_Instruct_lora_医疗数据' # 保存路径

base_model = AutoModelForCausalLM.from_pretrained(model_path,trust_remote_code=True) # 加载基座模型

tokenizer = AutoTokenizer.from_pretrained(model_path,trust_remote_code=True) # 加载分词器

lora_model = PeftModel.from_pretrained(base_model, lora_path) # 加载lora模型

merged_model = lora_model.merge_and_unload() # 合并模型

print("模型合并完成\n")

# 保存模型
merged_model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)

print("模型保存完成")

         生成的模型文件如下图

         3.3 转换模型

        使用的代码与第二节的代码是一样的,模型文件如下图

4. Ollama部署 

        选择一个文件夹下创建一个 mf 后缀文件,然后在 mf 文件下加入以下内容

FROM ./Qwen3-Embedding-8B-Q4_K_M.gguf

        然后在当天文件目录下终端执行

ollama create qwen3-embedding:8b -f ./1.mf

        1.mf 就是你刚刚创建的文件,qwen3-embedding:8b就是你给模型起的别名

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>我们正在处理一个关于在Ubuntu系统上使用llama.cpp将QwenLong-L1-32B模型转换GGUF格式并导入的问题。根据引用[1]和[2],我们知道llama-cpp-python现在使用GGUF格式,并且可以通过转换工具将旧格式转换GGUF。同时,引用[2]提到通过LLaMA-Factory微调后需要转换格式并编写Modelfile,然后通过Ollama导入运行。步骤分解:1.环境准备:确保Ubuntu系统已安装必要的工具和依赖。2.获取模型:需要拥有QwenLong-L1-32B模型的原始文件(可能是PyTorch或HuggingFace格式)。3.转换模型GGUF格式使用llama.cpp中的转换脚本。4.导入到Ollama:编写Modelfile并导入。详细步骤:###1.环境准备首先,确保系统已安装基本编译工具和Python环境。然后克隆llama.cpp仓库并编译。```bash#更新系统sudoaptupdate&&sudoaptupgrade-y#安装编译依赖sudoaptinstallbuild-essentialcmakegit#安装Python相关(建议使用Python3.10或以上)sudoaptinstallpython3python3-pip#克隆llama.cpp仓库gitclonehttps://github.com/ggerganov/llama.cppcdllama.cpp#编译llama.cpp(启用GPU加速,如果有NVIDIA显卡)makeLLAMA_CUBLAS=1-j#如果没有GPU,则直接运行#make-j```###2.获取模型假设你已经从官方渠道获得了QwenLong-L1-32B模型的权重(例如HuggingFace格式的文件夹)。如果没有,需要先下载。这里假设模型文件夹为`qwen-long-l1-32b`。###3.转换模型GGUF格式llama.cpp提供了转换脚本将原始模型转换GGUF格式。首先需要将HuggingFace格式模型转换为GGML的FP16格式,然后再转换GGUF。但最新版本中,可以直接使用`convert.py`一步到位。注意:由于QwenLong是通义千问的长上下文版本,确保llama.cpp转换脚本支持该模型。如果不支持,可能需要使用特定的分支或修改。```bash#进入llama.cpp目录cdllama.cpp#安装Python依赖pipinstall-rrequirements.txt#转换模型(假设模型文件夹为qwen-long-l1-32b,位于当前目录的上一级)pythonconvert.py../qwen-long-l1-32b#上一步会生成FP16的GGML模型(文件名为ggml-model-f16.gguf),然后我们可以进行量化(可选)#量化(例如量化到Q4_K_M)./quantize../qwen-long-l1-32b/ggml-model-f16.gguf../qwen-long-l1-32b/qwen-long-l1-32b-Q4_K_M.ggufQ4_K_M```注意:如果转换脚本不支持QwenLong,可能需要查看llama.cpp的issue或文档,或者使用通义千问官方提供的转换方式。但通常,llama.cpp已经支持了大部分主流模型。###4.导入到Ollama现在,我们有了GGUF文件,需要将其导入Ollama运行。首先,安装Ollama(如果未安装):```bashcurl-fsSLhttps://ollama.com/install.sh|sh```然后,创建一个Modelfile(例如`Modelfile`)来定义模型:```textFROM./qwen-long-l1-32b-Q4_K_M.gguf#设置参数(可选)PARAMETERnum_ctx32768#设置长上下文```注意:Ollama要求Modelfile中的FROM路径可以是本地路径(相对或绝对)或者URL。这里使用相对路径(假设Modelfile和GGUF文件在同一目录)。最后,使用Ollama导入模型:```bashollamacreateqwen-long-l1-32b-fModelfile```导入完成后,即可运行:```bashollamarunqwen-long-l1-32b```###注意事项-模型转换可能需要大量内存(32B模型至少需要64GB以上内存)。-量化可以减少模型大小和运行内存,但会损失一定精度。-如果使用GPU加速,确保正确配置了CUDA。###引用说明以上步骤参考了引用[1]和[2]中提到的转换和部署流程。§§相关问题§§1.如何优化llama.cpp在Ubuntu上的编译选项以提升性能?2.量化模型时,不同量化级别(如Q4_K_M)对模型精度和速度的影响是什么?3.如何配置Ollama使用GPU加速运行大模型?4.通义千问模型转换过程中有哪些特殊注意事项?5.如何验证转换后的GGUF模型运行正常?</think>以下是在 Ubuntu 系统上使用 llama.cpp 将 QwenLong-L1-32B 模型转换GGUF 格式并导入的完整指南: --- ### 一、环境准备 1. **安装基础依赖**: ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential cmake git python3-pip ``` 2. **克隆并编译 llama.cpp**: ```bash git clone https://github.com/ggerganov/llama.cpp cd llama.cpp # 启用 GPU 加速 (需 NVIDIA 显卡) make LLAMA_CUBLAS=1 -j$(nproc) # 或纯 CPU 版本 # make -j$(nproc) ``` --- ### 二、模型转换步骤 1. **获取原始模型**: - 确保已有 QwenLong-L1-32B 的 PyTorch 权重文件(通常为 `.bin` 或 `.pth` 格式) - 若从 Hugging Face 下载,使用: ```bash pip install transformers python -c "from transformers import AutoModel; AutoModel.from_pretrained('Qwen/QwenLong-L1-32B').save_pretrained('./qwen-long')" ``` 2. **转换GGUF 格式**: ```bash # 安装转换依赖 pip install -r requirements.txt # 执行转换 (关键步骤) python convert.py ./qwen-long --outtype f16 \ --outfile qwen-long-l1-32b.gguf ``` *注:若需量化,添加 `--outtype q4_0` 等参数[^1]* --- ### 三、验证与测试 1. **运行测试推理**: ```bash ./main -m qwen-long-l1-32b.gguf -p "你好" -n 128 ``` *输出正常文本即转换成功* --- ### 四、导入 Ollama 部署 1. **创建 Modelfile**: ```text FROM ./qwen-long-l1-32b.gguf PARAMETER num_ctx 32768 # 适配长上下文 SYSTEM "你是一个专业AI助手" ``` 2. **导入模型Ollama**: ```bash ollama create qwen-long -f Modelfile ollama run qwen-long ``` --- ### 五、高级优化 - **量化加速**(减少显存占用): ```bash ./quantize qwen-long-l1-32b.gguf qwen-long-q4_0.gguf Q4_0 ``` - **GPU 加速配置**: 在 `Modelfile` 中添加: ```text PARAMETER numa PARAMETER num_gpu 80 # 根据显存调整 ``` --- ### 常见问题解决 1. **转换错误**: - 确认模型路径正确 - 更新 llama.cpp:`git pull && make clean && make` 2. **Ollama 加载失败**: - 检查 GGUF 文件权限:`chmod 644 *.gguf` - 确保 Ollama 版本 ≥ 0.1.29:`ollama --version` 3. **内存不足**: - 32B 模型需 ≥64GB RAM,建议使用量化: ```bash ./quantize input.gguf output.gguf Q4_K_M # 平衡精度/速度[^1] ``` > 关键提示:QwenLong 支持 **32K 长上下文**,务必在 Modelfile 中设置 `num_ctx 32768` 以发挥特性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值