本地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.pswp.cn/web/64858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64858.shtml
英文地址,請注明出處:http://en.pswp.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,