本地LLM部署--llama.cpp


–图源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.mzph.cn/web/64858.shtml

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

相关文章

uniapp中使用ruoyiPlus中的加密使用(crypto-js)

package.json中添加 "crypto-js": "^4.2.0", "jsencrypt": "^3.3.2",但是vue2中使用 import CryptoJS from cryptojs; 这一步就会报错 参照 参照这里:vue2使用CryptoJS实现信息加解密 根目录下的js文档中新增一个AESwork.…

go项目使用gentool生成model的gen.go问题

Gen Tool 是一个没有依赖关系的二进制文件,可以用来从数据库生成结构。 使用方法: go install gorm.io/gen/tools/gentoollatest在项目根目录,执行连接的数据库中指定某几张表结构生成数据库model层 gentool -dsn "root:123456tcp(localhost:330…

路由基本配置实验

路由器用于实现不同类型网络之间的互联。 路由器转发ip分组的基础是路由表。 路由表中的路由项分为直连路由项、静态路由项和动态路由项。 通过配置路由器接口的ip地址和子网掩码自动生成直连路由项。 通过手工配置创建静态路由项。 热备份路由器协议允许将由多个路由器组…

产品原型设计

🤣🤣目录🤣🤣 一、Axure原型设计(Axure RP 9 )1.1 软件下载安装1.2 产品原型展示1.3 产品原型下载1.4 视频课程推荐 二、磨刀原型设计2.1 软件下载安装2.2 产品原型展示2.3 产品原型下载2.4 视频课程推荐 什…

Android反编译

安卓反编译要用到三个工具, 工具1:apktool反编译出来资源文件和源码 工具2:d2j-dex2jar生成classes_dex2jar.jar文件工具3:jd-gui.exe 打开classes_dex2jar.jar文件查看java代码一、 反编译得到资源文件(工具1&#xf…

计算机网络 (17)点对点协议PPP

一、PPP协议的基本概念 PPP协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议,它替代了原来非标准的第二层协议(如SLIP)。在TCP/IP协议集中,PPP是一种用来同步调制连接的数据链路层协议(OSI模式中的第二层…

Tailwind CSS 实战:表单设计与验证实现

在 Web 开发中,表单就像是一位尽职的接待员,负责收集和验证用户的输入信息。记得在一个企业级项目中,我们通过重新设计表单交互流程,将表单的完成率提升了 42%。今天,我想和大家分享如何使用 Tailwind CSS 打造一个既美观又实用的表单系统。 设计理念 设计表单就像是在设计一…

信息系统项目管理师——第8章章 项目整合管理 笔记

8 项目整合管理(最后反过来看) 项目整合过程:①制定项目章程(启动过程)、②制订项目管理计划(规划过程)、③指导和管理项目工作、管理项目知识(执行过程)、④监控项目工…

MLP、CNN、Transformer 的区别解析

亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…

WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑: while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在执行函数内部,就是一个while死循环,只做两件事,从队列里Get取…

CSS 学习之 padding 与图形绘制

padding 属性和 background-clip 属性配合,可以在有限的标签下实现一些 CSS 图形绘制效果,我这里举两个小例子,重在展示可行性。 例 1:不使用伪元素,仅一层标签实现大队长的“三道杠”分类图标效果。此效果在移动端比较常见&…

yolov5核查数据标注漏报和误报

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、误报二、漏报三、源码总结 前言 本文主要用于记录数据标注和模型预测之间的漏报和误报思想及其源码 提示:以下是本篇文章正文内容,…

UnityRenderStreaming使用记录(四)

测试把UnityRenderStreaming部署在docker,剧透一下,嘎了…… 当然webserver运行的妥妥的 那么打包出的程序运行log Mono path[0] /home/unity/Broadcast/Broadcast_Data/Managed Mono config path /home/unity/Broadcast/Broadcast_Data/MonoBleedingE…

salesforce addMonths()的问题

如果使用 Salesforce 的 addMonths(1) 方法,将 1月30日 或 1月31日 加一个月,都会得到 2月28日(或 2月29日,如果是闰年)。这是因为 Salesforce 的 addMonths 方法在跨月份时会自动调整日期,确保结果是有效日…

3. C语言 数据类型

本章目录: 前言:C语言中的数据类型分类1. 基本数据类型1.1 整数类型1.2 浮点类型1.3 字符型常量1.4 字符串常量 2. 枚举类型3. void 类型void类型的使用示例: 4. 类型转换4.1 隐式类型转换4.2 显式类型转换类型转换的注意事项 5. 小结 前言&a…

JUnit注解,枚举

一、JUnit注解(Annotations) JUnit 是 Java 中用于编写和运行单元测试的框架。JUnit 提供了许多注解,用于控制测试的执行顺序、测试生命周期、断言结果等。以下是一些常用的 JUnit 注解及其作用: 1. Test 用于标记一个方法是测…

富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)

文章目录 一、IDE(集成开发环境)二、编译器三、调试器四、其他辅助工具五、小结 FR800x系列作为一款低功耗蓝牙芯片,其软件开发工具链对于开发者来说至关重要。以下是对FR800x软件开发工具链的详细介绍,包括IDE(集成开…

数据赋能电商:API如何助力品牌成长

在数字时代,数据已成为电商品牌发展的核心驱动力。API(应用程序编程接口)作为数据交互的桥梁,不仅促进了数据的高效流通,更为电商品牌带来了前所未有的增长机遇。本文将深入探讨API如何助力电商品牌实现数据赋能&#…

「Java 数据结构全面解读」:从基础到进阶的实战指南

「Java 数据结构全面解读」:从基础到进阶的实战指南 数据结构是程序设计中的核心部分,用于组织和管理数据。Java 提供了丰富的集合框架和工具类,涵盖了常见的数据结构如数组、链表、栈、队列和树等。本文将系统性地介绍这些数据结构的概念、…

LeetCode - 初级算法 数组(旋转数组)

旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,