本地LLM部署--llama.cpp

news2025/1/4 19:21:09


–图源GitHub项目主页

概述

llama.cpp是以一个开源项目(GitHub主页:llamma.cpp),也是本地化部署LLM模型的方式之一,除了自身能够作为工具直接运行模型文件,也能够被其他软件或框架进行调用进行集成。

其自身支持C++编译,也兼容其他语言,如python(GitHub主页:llama-cpp-python)。默认编译流程设计更多针对 Linux/macOS,所以在 Windows 上需要额外设置和工具支持。

4种部署使用方案

以下是列举的已知的几种运行方案,推荐方案三的第二个,使用本地编译器编译再运行。

方案一:使用预编译可执行文件(不推荐)

  1. 下载预编译可执行文件:
    • 打开 llama.cpp Releases 页面。 ![[Pasted image 20241227172748.png]]

基于 CPU 的版本,这些版本针对不同的 CPU 指令集进行了优化:

  • llama-b4393-bin-win-avx-x64.zip:支持 AVX 指令集的 64 位 Windows 版本。
  • llama-b4393-bin-win-avx2-x64.zip:支持 AVX2 指令集的 64 位 Windows 版本。
  • llama-b4393-bin-win-avx512-x64.zip:支持 AVX-512 指令集的 64 位 Windows 版本。
  • llama-b4393-bin-win-noavx-x64.zip:不支持 AVX 指令集的 64 位 Windows 版本(适用于较旧的 CPU)。
  • llama-b4393-bin-win-openblas-x64.zip:使用 OpenBLAS 优化的 64 位 Windows 版本。
    基于 GPU 的版本,这些版本针对不同的 GPU 和计算框架进行了优化:
  • cudart-llama-bin-win-cu11.7-x64.zip:支持 CUDA 11.7 的 64 位 Windows 版本。
  • cudart-llama-bin-win-cu12.4-x64.zip:支持 CUDA 12.4 的 64 位 Windows 版本。
  • llama-b4393-bin-win-cuda-cu11.7-x64.zip:支持 CUDA 11.7 的 64 位 Windows 版本。
  • llama-b4393-bin-win-cuda-cu12.4-x64.zip:支持 CUDA 12.4 的 64 位 Windows 版本。
  • llama-b4393-bin-win-hip-x64-gfx1030.zip:支持 AMD HIP 框架(针对 RDNA2 架构 GPU,如 RX 6000 系列)。
  • llama-b4393-bin-win-hip-x64-gfx1100.zip:支持 AMD HIP 框架(针对 RDNA3 架构 GPU,如 RX 7000 系列)。
  • llama-b4393-bin-win-hip-x64-gfx1101.zip:支持 AMD HIP 框架(针对 RDNA3 架构 GPU 的特定型号)。
  • llama-b4393-bin-win-vulkan-x64.zip:支持 Vulkan API 的 64 位 Windows 版本。
  • llama-b4393-bin-win-sycl-x64.zip:支持 SYCL 框架的 64 位 Windows 版本(适用于 Intel GPU)。
  • llama-b4393-bin-win-kompute-x64.zip:支持 Kompute 框架的 64 位 Windows 版本(适用于 Vulkan GPU)。

针对特定平台的版本:这些版本针对特定的操作系统和硬件平台:

  • llama-b4393-bin-macos-arm64.zip:针对 Apple Silicon(ARM64)的 macOS 版本。
  • llama-b4393-bin-macos-x64.zip:针对 Intel x64 的 macOS 版本。
  • llama-b4393-bin-ubuntu-x64.zip:针对 Ubuntu 的 64 位 Linux 版本。
  • llama-b4393-bin-win-llvm-arm64-opencl-adreno.zip:针对 ARM64 设备(如 Adreno GPU)的 Windows 版本,支持 OpenCL。
  • llama-b4393-bin-win-lvm-arm64.zip:针对 ARM64 设备的 Windows 版本。
  • llama-b4393-bin-win-msvc-arm64.zip:针对 ARM64 设备的 Windows 版本,使用 MSVC 编译器。
  1. 根据硬件和操作系统选择合适的版本,不知道指令集可以使用CPU-Z软件查看。下载并解压到本地文件夹,可以看到非常多的可执行文件。

核心可执行文件,用于模型推理、转换、量化等任务:

  • llama-cli.exe:命令行工具,用于与 LLaMA 模型交互。
  • llama-server.exe:启动一个本地服务器,提供模型推理服务。
  • llama-simple.exe / llama-simple-chat.exe:简单的模型推理工具,支持聊天模式。
  • llama-quantize.exe:用于量化模型,减少模型大小并提高推理速度。
  • llama-convert-llama2c-to-ggml.exe:将 LLaMA 2 模型转换为 GGML 格式。
  • llama-gguf.exe:处理 GGUF 格式的模型文件(GGUF 是 GGML 的升级版)。
  • llama-embedding.exe:生成文本嵌入向量。
  • llama-tokenize.exe:对文本进行分词。

依赖库,运行所需的动态链接库(DLL):

  • ggml.dll / ggml-base.dll / ggml-cpu.dll:GGML 库的核心文件,用于张量计算和模型推理。
  • ggml-rpc.dll:用于远程过程调用(RPC)的 GGML 库。
  • llava-shared.dll:与 LLaVA(LLaMA 视觉模型)相关的共享库。

测试和工具,用于测试和开发的可执行文件:

  • test-gguf.exe:测试 GGUF 格式的模型文件。
  • test-quantize-fns.exe / test-quantize-perf.exe:测试量化函数和性能。
  • test-tokenizer-0.exe:测试分词器功能。
  • test-c.exe
  • test-log.exe:测试日志功能。

其他工具,用于特定任务:

  • llama-batched.exe:支持批量推理的工具。
  • llama-parallel.exe:支持并行推理的工具。
  • llama-speculative.exe / llama-speculative-simple.exe:支持推测解码的工具。
  • llama-tts.exe:可能与文本到语音(TTS)相关的工具。
  • llama-retrieval.exe:用于检索任务。
  • llama-export-lora.exe:导出 LoRA(低秩适配)模型。
  1. 准备模型文件:确保有 GGUF 格式的模型文件(如 Llama-3.2-1B-Instruct-Q8.gguf)。将文件放在与可执行文件相同的目录下,或者记住模型文件的路径。

  2. 运行推理:使用命令行工具(如 llama-cli.exe)加载模型并生成文本。例如:

    llama-cli.exe -m Llama-3.2-1B-Instruct-Q8.gguf -p "hello,LLaMA!" -n 50 --temp 0.7
    

方法二:使用 Python 封装库(简单且灵活,但不推荐在Windows下配置,或者用anaconda或者推荐Linux或者MacOS)

![[Pasted image 20241229152518.png]]

  1. 安装 Python 和 llama-cpp-python

    • 确保你已安装 Python 和 pip,而且不满足环境要求很大概率会出现图片的失败:
      • Linux: gcc or clang
      • Windows: Visual Studio or MinGW
      • MacOS: Xcode
    • 在命令提示符运行:
      pip install llama-cpp-python
      
  2. 准备模型文件: 下载 gguf 格式的模型文件。

  3. 运行 Python 脚本: 创建并运行以下 Python 脚本:

    from llama_cpp import Llama
    
    # 替换为你的模型路径
    llm = Llama(model_path="path/to/model.gguf")
    response = llm("hello,世界!")
    print(response)
    

方法三:自行编译(适合需要自定义功能或最新版本的用户)

使用 Visual Studio 编译
  1. 安装 Visual Studio:

    • 从 Visual Studio 官网 下载并安装。
    • 在安装时选择 C++ 桌面开发 工作负载。
  2. 下载和配置 llama.cpp 源码:

    • 克隆项目:
      git clone https://github.com/ggerganov/llama.cpp.git
      cd llama.cpp
      
    • 使用 cmake 生成工程文件:
      mkdir build
      cd build
      cmake .. -G "Visual Studio 17 2022"
      
    • 打开生成的 llama.cpp.sln,编译生成可执行文件。
  3. 运行: 按照需求运行相关的EXE文件。

使用 MSYS2 和 MinGW 编译(推荐,如果非得在Windows平台跑)

  1. 安装 MSYS2:
    MSYS2 是一个在 Windows 上提供类 Unix 环境的工具链,适合编译 C/C++ 项目。下载 MSYS2 安装程序:https://www.msys2.org/
    运行安装程序,按照提示完成安装。打开 MSYS2 UCRT64 终端。

    • 打开 MSYS2,安装必要工具MinGW和cmake:
      pacman -Syu
      pacman -S base-devel mingw-w64-x86_64-toolchain
      pacman -S mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-gcc
      
      
  2. 下载源码解压后在终端进入文件夹编译 llama.cpp:

    cd /path/to/llama.cpp-b4393
    mkdir build
    cd build
    cmake -G "MSYS Makefiles" ..
    make
    
    • .. 表示项目的根目录。
    • -G "MinGW Makefiles" 指定使用 MinGW 构建工具。
    • 如果有GPU:cmake -G "MSYS Makefiles" -DLLAMA_CUDA=ON ..
      ![[Pasted image 20241227231429.png]]![[Pasted image 20241227231752.png]]
      在这里插入图片描述
  3. 运行chat:
    请注意,MSYS2终端默认设置下不支持和模型中文对话,可以尝试更改字符编码或者在其他地方如LMstudio进行尝试。

    	./llama-simple-chat.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf
    

在这里插入图片描述

  • llama-cli.exe:命令行工具,支持交互式推理和批量推理。
    ./llama-cli.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf -p "hello,LLaMA!" -n 50 --temp 0.7
    
  • llama-simple.exe:简单的推理工具,适合快速测试。
    ./llama-simple.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf
    
  • llama-simple-chat.exe:简单的聊天工具,支持交互式对话。
    ./llama-simple-chat.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf
    
  • llama-server.exe:启动本地服务器,通过 HTTP 请求与模型交互。
    ./llama-server.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf
    
  • llama-convert-llama2c-to-ggml.exe:将 LLaMA 2 模型转换为 GGML 格式。
    ./llama-convert-llama2c-to-ggml.exe input_model.bin output_model.ggml
    
  • llama-quantize.exe:对模型进行量化,减少模型大小并提高推理速度。
    ./llama-quantize.exe Llama-3.2-1B-Instruct-Q8_0.gguf Llama-3.2-1B-Instruct-Q4_0.gguf Q4_0
    
  • llama-embedding.exe:生成文本嵌入向量。
    ./llama-embedding.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf -p "hello,LLaMA!"
    
  • llama-tokenize.exe:对文本进行分词。
    ./llama-tokenize.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf "hello,LLaMA!"
    
  • llama-batched.exe:支持批量推理的工具。
    ./llama-batched.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf -p "hello,LLaMA!" -n 50
    
  • llama-parallel.exe:支持并行推理的工具。
    ./llama-parallel.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf -p "hello,LLaMA!" -n 50
    
  • test-gguf.exe:测试 GGUF 格式的模型文件。
    ./test-gguf.exe Llama-3.2-1B-Instruct-Q8_0.gguf
    
  • test-quantize-fns.exe / test-quantize-perf.exe:测试量化函数和性能。
    ./test-quantize-fns.exe
    
  • test-tokenizer-0.exe:测试分词器功能。
    ./test-tokenizer-0.exe
    
  • 启动聊天
    ./llama-simple-chat.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf
    
  • 量化模型
    ./llama-quantize.exe Llama-3.2-1B-Instruct-Q8_0.gguf Llama-3.2-1B-Instruct-Q4_0.gguf Q4_0
    
  • 生成嵌入向量
    ./llama-embedding.exe -m Llama-3.2-1B-Instruct-Q8_0.gguf -p "hello,LLaMA!"
    

方法四:使用 Docker(适合熟悉容器的用户)

  1. 安装 Docker:

    • 从 Docker 官网 下载并安装。
  2. 运行 llama.cpp 容器:

    • 在命令行运行:
      docker run -v /path/to/model:/models llama-cpp -m /models/model.gguf -p "hello,世界!"
      

替换 /path/to/model 为模型文件所在路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基本算法——分类

目录 创建项目 导入依赖 加载数据 特征选择 学习算法 对新数据分类 评估与预测误差度量 混淆矩阵 通过模型的预测结果生成 ROC 曲线数据 选择分类算法 完整代码 结论 创建项目 首先创建spring boot项目,我这里用的JDK8,springboot2.7.6&…

【系统配置】3种方式修改用户登录显示名|统信|麒麟|方德

原文链接:【系统配置】3种方式修改用户登录显示名|统信|麒麟|方德 Hello,大家好啊!今天给大家带来一篇关于 通过修改 /etc/passwd 文件、usermod 命令,以及图形化界面三种方式修改用户登录名 的…

TTL 传输中过期问题定位

问题: 工作环境中有一个acap的环境,ac的wan口ip是192.168.186.195/24,ac上lan上有vlan205,其ip子接口地址192.168.205.1/24,ac采用非nat模式,而是路由模式,在上级路由器上有192.168.205.0/24指向…

Cocos2dx Lua绑定生成中间文件时参数类型与源码类型不匹配

这两天维护的一个项目&#xff0c;使用arm64-v8a指令集编译时遇到了报错&#xff0c;提示类型不匹配&#xff0c;具体报错的代码【脚本根据C源文件生成的中间文件】如下&#xff1a; const google::protobuf::RepeatedField<unsigned long long>& ret cobj->equi…

连接Milvus

连接到Milvus 验证Milvus服务器正在侦听哪个本地端口。将容器名称替换为您自己的名称。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用浏览器访问连接地址htt…

走方格(蓝桥杯2020年试题H)

【问题描述】在平面上有一些二维点阵。这些点的编号就像二维数组的编号一样&#xff0c;从上到下依次为第1~n行&#xff0c;从左到右依次为第1~m列&#xff0c;每个点可以用行号和列号表示。 现在有个人站在第1行第1列&#xff0c;他要走到第n行第m列&#xff0c;只能向右或者向…

28. 二叉树遍历

题目描述 根据给定的二叉树结构描述字符串&#xff0c;输出该二叉树按照中序遍历结果字符串。中序遍历顺序为:左子树&#xff0c;根结点&#xff0c;右子树。 输入描述 由大小写字母、左右大括号、逗号组成的字符串: 1、字母代表一个节点值&#xff0c;左右括号内包含该节点的子…

Swift White Hawkstrider

Swift White Hawkstrider 迅捷白色陆行鸟 Swift White Hawkstrider - Item - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Kaelthas Sunstrider (1) <Lord of the Blood Elves> 凯尔萨斯逐日者. 掉落 [80圣骑士][Alonsus-加丁][诺森德冒险补给品…

LeetCode算法题——有序数组的平方

题目描述 给你一个按非递减顺序排序的整数数组nums&#xff0c;返回每个数字的平方组成的新数组&#xff0c;要求也按非递减顺序排序。 题解 解法一&#xff1a;暴力解法 思路&#xff1a; 该题目可通过暴力解法解决&#xff0c;即利用for循环遍历数组&#xff0c;对数组每…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(四)

文章目录 一、管理员角色功能实现1、添加教师功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、教师管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码下…

DVWA靶场Brute Force (暴力破解) 漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程

目录 暴力破解low方法1方法2 mediumhighimpossible 暴力破解 暴力破解是一种尝试通过穷尽所有可能的选项来获取密码、密钥或其他安全凭证的攻击方法。它是一种简单但通常无效率的破解技术&#xff0c;适用于密码强度较弱的环境或当攻击者没有其他信息可供利用时。暴力破解的基…

基于feapder爬虫与flask前后端框架的天气数据可视化大屏

# 最近又到期末了&#xff0c;有需要的同学可以借鉴。 一、feapder爬虫 feapder是国产开发的新型爬虫框架&#xff0c;具有轻量且数据库操作方便、异常提醒等优秀特性。本次设计看来利用feapder进行爬虫操作&#xff0c;可以加快爬虫的速率&#xff0c;并且简化数据入库等操作…

抖音短视频矩阵系统源码开发技术解析

开发概览&#xff1a; 抖音短视频矩阵系统的构建基于一系列现代技术栈&#xff0c;主要包括VUE, Spring Boot和Django。本文档旨在为开发者提供关于短视频矩阵系统源代码的开发与部署指南。 技术框架分析&#xff1a; 前端技术选型&#xff1a; 对于前端界面的构建&#xf…

CentOS Stream 9 安装 JDK

安装前检查 java --version注&#xff1a;此时说明已安装过JDK&#xff0c;否则为未安装。如若已安装过JDK可以跳过安装步骤直接使用&#xff0c;或者先卸载已安装的JDK版本重新安装。 安装JDK 官网下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads…

【git】git生成rsa公钥的方法

git生成rsa公钥的方法 一&#xff0c;简介二&#xff0c;操作方法三&#xff0c;总结 一&#xff0c;简介 在工作的过程中&#xff0c;经常需要生成rsa的密钥&#xff0c;然后提供给别人&#xff0c;然后别人给你开通代码下载权限。本文介绍如何在本地生成rsa的密钥供参考。 …

Solon 加入 GitCode:助力国产 Java 应用开发新飞跃

在当今数字化快速发展的时代&#xff0c;Java 应用开发框架不断演进&#xff0c;开发者们始终在寻找更快、更小、更简单的解决方案。近期&#xff0c;Solon 正式加入 GitCode&#xff0c;为广大 Java 开发者带来全新的开发体验&#xff0c;尤其是在国产应用开发进程中&#xff…

如何通过深度学习提升大分辨率图像预测准确率?

随着科技的不断进步&#xff0c;图像处理在各个领域的应用日益广泛&#xff0c;特别是在医疗影像、卫星遥感、自动驾驶、安防监控等领域中&#xff0c;大分辨率图像的使用已经成为了一项不可或缺的技术。然而&#xff0c;大分辨率图像带来了巨大的计算和存储压力&#xff0c;同…

硬件基础知识笔记(2)——二级管、三极管、MOS管

Part 2 二级管、三极管、MOS管 1、二级管1.1肖特基二极管和硅二极管选型比较1.2到底是什么决定了二极管的最高工作频率&#xff1f;1.3二极管结电容和反向恢复时间都是怎么来的1.4肖特基二极管的工作原理1.5为什么要用肖特基二极管续流&#xff1f; 2、三极管2.1三极管工作原理…

操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个

Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析 目录 一、论文核心思想 二、基本定义 2.1 关键性指标 2.2 任务及相关参数定义 2.3 几个基础定义 三、可调度性分析 3.1 调度算法分…

word中文献引用[]符号的上下标格式修改

word中文献引用[]符号的上下标格式修改 百度网址 1、查找打开使用通配符&#xff0c;输入[[][0-9]{1,2}[]]&#xff0c;即可匹配所有的字[1],[12]这些字符&#xff0c;然后鼠标点击替换为的空白处&#xff0c;再点击特殊格式–>“字体”&#xff0c;选中上标&#xff0c;最…