玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek

系列文章目录

玩转大语言模型——使用langchain和Ollama本地部署大语言模型
玩转大语言模型——三分钟教你用langchain+提示词工程获得猫娘女友
玩转大语言模型——ollama导入huggingface下载的模型
玩转大语言模型——langchain调用ollama视觉多模态语言模型
玩转大语言模型——使用transformers中的pipeline调用huggingface中模型
玩转大语言模型——transformers微调huggingface格式的中文Bert模型
玩转大语言模型——使用GraphRAG+Ollama构建知识图谱
玩转大语言模型——完美解决GraphRAG构建的知识图谱全为英文的问题
玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱
玩转大语言模型——本地部署带聊天界面deepseek R1的小白教程
玩转大语言模型——本地部署deepseek R1和本地数据库的小白教程(Ollama+AnythingLLM)
玩转大语言模型——使用LM Studio在本地部署deepseek R1的零基础)教程
玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
玩转大语言模型——使用Kiln AI可视化环境进行大语言模型微调数据合成



前言

llama.cpp是一个基于C/C++的开源项目,旨在高效地运行大型语言模型推理。纯采用纯C/C++编写,不依赖其他外部库,可移植性强,只要环境支持C/C++运行,就能运行llama.cpp。支持Apple芯片,通过ARM NEON等框架进行优化;支持x86架构的AVX等指令集;提供自定义CUDA内核,支持NVIDIA、AMD等GPU,还支持Vulkan和SYCL后端,可实现CPU+GPU混合推理。除此之外还支持1.5位到8位的整数量化,加快推理速度并减少内存使用,便于在资源有限的设备上运行。从推理速度上来看,相比原始Python实现,采用C++开发的llama.cpp推理速度更快。通过4-bit、GGUF等量化技术,大幅降低显存需求,能在8GB显存的消费级显卡上运行大模型。本篇将以deepseek为例,介绍如何使用llama.cpp部署大语言模型并进行简单应用

下载并配置llama.cpp

在本篇中仅介绍Linux系统、Nvidia显卡下的配置
更多配置的操作见官网:https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md

更新apt-get

sudo apt-get update

下载依赖

sudo apt-get install build-essential cmake curl libcurl4-openssl-dev -y

其中:

  • build-essential :必需的工具和库,确保系统能正常进行编译。
  • cmake :跨平台的构建系统,用于管理项目的编译过程。
  • curl :命令行工具,用于通过 URL 发送和接收数据。
  • libcurl4-openssl-dev :cURL的一个库文件,允许在编程中通过 cURL 发送 HTTP 请求。libcurl4-openssl-dev 是与 OpenSSL配合使用的版本,提供了 SSL/TLS 加密支持,用于安全的 HTTP 请求。

克隆代码

github链接:https://github.com/ggml-org/llama.cpp
也可以直接使用git方式下载

git clone https://github.com/ggml-org/llama.cpp

下载后进入到llama.cpp路径

cd llama.cpp

编译项目

构建项目文件

使用CMake构建项目文件

cmake -B build -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON

其中参数

参数含义
-B构建目录,在此命令中为build目录
-DBUILD_SHARED_LIBS创建共享库选项,设置为OFF则不创建共享库,仅使用静态库
-DGGML_CUDA在有 GPU 的情况下使用 GPU 加速
-DLLAMA_CURL支持网络请求

进一步编译

cmake --build build --config Release --clean-first --target llama-quantize llama-cli llama-gguf-split

其中参数:

参数含义
–build用来指示构建文件的路径
–config指定构建配置,可选参数Debug(调试版本,包含调试信息但没有优化)Release(没有调试信息,但运行效率更高)
-j构建过程使用的并行CPU数
–clean-first是否在构建之前清空以前的构建结果,一般建议是情况,防止出现错误
–target指定构建的目标,不设置这一参数默认是构建所有的目标

本篇中编译的目标以及解释

目标解释
llama-quantize将模型的精度从浮点数降低到整数,从而减少内存占用和提高推理速度
llama-cli用于运行模型或与用户交互
llama-gguf-split于将一个大模型文件拆分成多个小文件,方便存储和加载

推理

推理时需要先切换到编译后的bin文件目录下

cd /build/bin

CLI工具推理

使用llama-cli可以实现与模型的交互模式推理

 ./llama-cli -m /home/aixing/learn_llm/gguf_model/deepseek/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf

交互如下
在这里插入图片描述
如果觉得每次执行都要输入一大堆很麻烦,也可以将命令写入sh文件

echo ./llama-cli -m /home/aixing/learn_llm/gguf_model/deepseek/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf > llama-cli-test.sh

下次执行时仅运行sh文件即可

bash llama-cli-test.sh

推理模板

使用以下命令查看相关参数

llama-cli - h

我们可以看到相关的可选模板
在这里插入图片描述
随后可以通过设置--chat-template来设定模板,除此之外还可以通过以下命令自定义模板

llama-cli -m model.gguf -cnv --in-prefix 'User: ' --reverse-prompt 'User:'

在这里插入图片描述

server工具

使用llama-server可以提供API服务

./llama-server -m /home/aixing/learn_llm/gguf_model/deepseek/DeepSeek-R1-Distill-Qwen-1.5B-Q2_K/DeepSeek-R1-Distill-Qwen-1.5B-Q2_K.gguf --port 8080 --host 0.0.0.0 -ngl 5 --parallel 10

其中参数及其含义

参数含义
-m模型路径
–port端口号,默认是8080
host设置为全零代表全都可以访问
-ngl卸载到GPU的层数
–parallel并发访问数

llama-server提供的是类似于OpenAI的接口,如果是本机访问,使用127.0.0.1:8080/v1localhost:8080,如果是局域网内其他机子,需要将127.0.0.1换成服务器的IP地址。

如果服务器本地可以访问,局域网内访问不了,查看一下防火墙有没有允许外界访问端口,或者如果是自己做测试,且没有其他应用,可以直接关掉防火墙。

如果是使用WSL的Ubuntu系统,最好是用本地访问,由于Windows本身防火墙或者与Windows本身端口冲突都可能会导致远程访问失败,调节起来非常的麻烦。

与此同时,llama.cpp还提供了一个WebUI界面
直接访问localhost:8080就可以使用
在这里插入图片描述

结尾

在本章中简单介绍了llama.cpp的使用,实际上llama.cpp的操作细节和参数设置有很多,后续会专门出一个参数的详解

<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.cppUbuntu上的编译选项以提升性能?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
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值