使用 llama.cpp 在本地部署 AI 大模型的一次嘗試

對于剛剛落下帷幕的2023年,人們曾經給予其高度評價——AIGC元年。隨著 ChatGPT 的火爆出圈,大語言模型、AI 生成內容、多模態、提示詞、量化…等等名詞開始相繼頻頻出現在人們的視野當中,而在這場足以引發第四次工業革命的技術浪潮里,人們對于人工智能的態度,正從一開始的驚喜慢慢地變成擔憂。因為 AI 在生成文字、代碼、圖像、音頻和視頻等方面的能力越來越強大,強大到需要 “冷門歌手” 孫燕姿親自發文回應,強大到連山姆·奧特曼都被 OpenAI 解雇。在經歷過 OpenAI 套殼、New Bing、GitHub Copilot 以及各式 AI 應用、各類大語言模型的持續轟炸后,我們終于迎來了人工智能的 “安卓時刻”,即除了 ChatGPT、Gemini 等專有模型以外,我們現在有更多的開源大模型可以選擇。可這難免會讓我們感到困惑,人工智能的盡頭到底是什么呢?2013年的時候,我以為未來屬于提示詞工程(Prompt Engineering),可后來好像是 RAG 以及 GPTs 更受歡迎?

從哪里開始

在經歷過早期調用 OpenAI API 各種障礙后,我覺得大語言模型,最終還是需要回歸到私有化部署這條路上來。畢竟,連最近新上市的手機都開始內置大語言模型了,我先后在手機上體驗了有大語言模型加持的小愛同學,以及抖音的豆包,不能說體驗有多好,可終歸是聊勝于無。目前,整個人工智能領域大致可以分為三個層次,即:算力、模型和應用。其中,算力,本質上就是芯片,對大模型來說特指高性能顯卡;模型,現在在 Hugging Face 可以找到各種開源的模型,即便可以節省訓練模型的成本,可對這些模型的微調和改進依然是 “最后一公里” 的痛點;應用,目前 GPTs 極大地推動了各類 AI 應用的落地,而像 Poe 這類聚合式的 AI 應用功能要更強大一點。最終,我決定先在 CPU 環境下利用 llama.cpp 部署一個 AI 大模型,等打通上下游關節后,再考慮使用 GPU 環境實現最終落地。從頭開始訓練一個模型是不大現實的,可如果通過 LangChain 這類框架接入本地知識庫還是有希望的。

編譯 llama.cpp

llama.cpp 是一個純 C/C++ 實現的 LLaMA 模型推理工具,由于其具有極高的性能,因此,它可以同時在 GPU 和 CPU 環境下運行,這給了像博主這種尋常百姓可操作的空間。在 Meta 半開源了其 LLaMA 模型以后,斯坦福大學發布了其基于 LLaMA-7B 模型微調而來的模型 Alpaca,在開源社區的積極響應下,在 Hugging Face 上面相繼衍生出了更多的基于 LLaMA 模型的模型,這意味著這些由 LLaMA 衍生而來的模型,都可以交給 llama.cpp 這個項目來進行推理。對硬件要求低、可供選擇的模型多,這是博主選擇 llama.cpp 的主要原因。在這篇文章里,博主使用的是一臺搭配 i7-1360P 處理器、32G 內存的筆記本,按照 LLaMA 的性能要求,運行 GGML 格式的 7B 模型至少需要 13G 內存,而運行 GGML 格式的 13B 模型至少需要 24G 內存,大家可以根據自身配置選擇合適的模型,個人建議選擇 7B 即可,因為 13B 運行時間一長以后還是會感到吃力,哎??。

在這里插入圖片描述

準備工作

在正式開始前,請確保你可以熟練使用 Git,以及具備科學上網的條件,因為我們需要從 Hugging Face 上下載模型。此外,你還需要下載并安裝以下軟件:

  • Python: 官方網站、華為鏡像,建議選擇 3.9 及其以上版本
  • w64devkit:便攜式 C/C++ 編譯環境,集成了 gcc、make 等常見的工具
  • OpenBLAS(可選): 可以提供 CPU 加速的高性能矩陣計算庫,建議安裝

w64devkit 和 OpenBLAS 下載下來都是壓縮包,直接解壓即可,建議將 w64devkit 解壓在一個不含空格和中文的路徑下,例如:C:\w64devkit。接下來,我們還需要 OpenBLAS 的庫文件和頭文件,請將其 include 目錄下的內容,全部復制到 C:\w64devkit\x86_64-w64-mingw32\include 目錄下;請將其 lib 目錄下的 libopenblas.a 文件復制到 C:\w64devkit\x86_64-w64-mingw32\lib 目錄下。保險起見,個人建議將 C:\w64devkit 目錄添加到 Path 環境變量中,如下圖所示:

在這里插入圖片描述

至此,我們就完成了全部的準備工作。需要說明的是,這里是以 Windows + Make + OpenBLAS 為例進行演示和寫作。如果你是 Mac 或者 Linux 系統用戶,或者你想 CMake 或者 CUDA,請參考官方文檔:https://github.com/ggerganov/llama.cpp,雖然這份文檔是純英文的,但是我相信這應該難不倒屏幕前的各位程序員朋友,哈哈??。

編譯過程

好的,對于 llama.cpp 而言,其實官方提供了預編譯的可執行程序,具體請參考這里:https://github.com/ggerganov/llama.cpp/releases。通常情況下,普通的 Windows 用戶只需要選擇類似 llama-b2084-bin-win-openblas-x64.zip 這樣的發行版本即可。如果你擁有高性能顯卡,可以選擇類似 llama-b2084-bin-win-cublas-cu12.2.0-x64.zip 這樣的發行版即可,其中的 cu 表示 CUDA,這是由顯卡廠商 Nvdia 推出的運算平臺。什么樣的顯卡算高性能顯卡呢?就我樸實無華的游戲史觀點而言,只要能流暢運行育碧旗下的《刺客信條:大革命》及其后續作品的,都可以算得上高性能顯卡。這里,我們選擇手動編譯,因為通讀整個文檔你就會發現,llama.cpp 里面提供了大量的編譯參數,這些參數或多或少地會影響到你編譯的產物。所以&#x

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715530.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715530.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715530.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM(5)

垃圾回收相關 垃圾收集器 警告:純八股文! 如果說上面我們講的收集算法是內存回收的方法論,那么垃圾收集器就是內存回收的具體體現. 垃圾收集器的作用:垃圾收集器是為了保證程序能夠正常,持久運行的一種技術,它是將程序中不用的死亡對象也就是垃圾對象進行清除,從而保證新的…

第四十五天| 322. 零錢兌換、279.完全平方數

Leetcode 322. 零錢兌換 題目鏈接:322 零錢兌換 題干:給你一個整數數組 coins ,表示不同面額的硬幣;以及一個整數 amount ,表示總金額。計算并返回可以湊成總金額所需的 最少的硬幣個數 。如果沒有任何一種硬幣組合能…

AI大語言模型【成像光譜遙感技術】ChatGPT應用指南

遙感技術主要通過衛星和飛機從遠處觀察和測量我們的環境,是理解和監測地球物理、化學和生物系統的基石。ChatGPT是由OpenAI開發的最先進的語言模型,在理解和生成人類語言方面表現出了非凡的能力。本文重點介紹ChatGPT在遙感中的應用,人工智能…

vscode + git

寫在前面: origin分支: 當我們在使用git clone的時候,git會自動地將這個遠程的repo命名為origin,拉取它所有的數據之后,創建一個指向它master的指針,命名為origin/master,之后會在本地創建一個…

C#單向鏈表實現:用泛型類在當前位置插入新數據的方法Insert()

一、涉及到的知識點 1.ListNode<T>類 ListNode<T>是一個泛型類&#xff0c;用于表示鏈表中的一個節點。Value和Next屬性是ListNode<T>最基本的屬性&#xff0c;用于表示節點的值和指向下一個節點的引用。但是&#xff0c;完全可以根據實際需求添加其他屬性&…

雙非二本找實習前的準備day5

學習目標&#xff1a; 每天2-3到簡單sql&#xff08;刷完即止&#xff09;&#xff0c;每天復習代碼隨想錄上的題目3道算法&#xff08;時間充足可以繼續&#xff09;&#xff0c;今天的八股背少一點&#xff0c;MySQL和Redis各1-2道好了&#xff0c;主攻復習是java基礎 今日…

C語言5道編程題簡單介紹(三)

1、打印楊輝三角 程序分析&#xff1a; 結構如下所示&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1代碼如下&#xff1a; #include <stdio.h>int main() {int i,j;int a[10][10];printf("\n");for(i0;i<10;i) {a[i][0]1;a…

Vuex 是什么?它在 Vue 應用中扮演什么角色?解釋一下 Vuex 的狀態管理模式。如何在 Vuex 中進行異步操作?

一、Vuex 是什么&#xff1f; Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態&#xff0c;并以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 的出現解決了多個組件間共享狀態的問題&#xff0c;使得狀態管理變得更加直…

#WEB前端(HTML屬性)

1.實驗&#xff1a;a,img 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; a: href插入超鏈接 默認情況下在本窗口打開鏈接, target可以設置打開的窗口,parent在父窗口打開&#xff0c;blank新開串口打開,top在頂層串口打開,self為默認在本窗口打開 img: 插入圖片 可以插…

解析/區分MOS管的三個引腳G、S、D(NMOS管和PMOS管)

MOS管的三個引腳分別是Gate&#xff08;柵極&#xff09;、Source&#xff08;源極&#xff09;和Drain&#xff08;漏極&#xff09;。以下是詳細介紹&#xff1a; Gate&#xff08;柵極&#xff09;。這是控制MOS管開關的關鍵引腳&#xff0c;用于控制電流的流通。Source&…

智能分析網關V4安全帽檢測/反光衣檢測/通用工服檢測算法及應用

TSINGSEE青犀視頻智能分析網關V4內置了近40種AI算法模型&#xff0c;支持對接入的視頻圖像進行人、車、物、行為等實時檢測分析&#xff0c;上報識別結果&#xff0c;并能進行語音告警播放。硬件管理平臺支持RTSP、GB28181協議、以及廠家私有協議接入&#xff0c;可兼容市面上常…

【DDD】學習筆記-實體和值對象:從領域模型的基礎單元看系統設計

今天我們來學習 DDD 戰術設計中的兩個重要概念&#xff1a;實體和值對象。 這兩個概念都是領域模型中的領域對象。它們在領域模型中起什么作用&#xff0c;戰術設計時如何將它們映射到代碼和數據模型中去&#xff1f;就是我們這一講重點要關注的問題。 另外&#xff0c;在戰略…

springboot238光影視頻

光影視頻平臺 摘 要 使用舊方法對光影視頻平臺的信息進行系統化管理已經不再讓人們信賴了&#xff0c;把現在的網絡信息技術運用在光影視頻平臺的管理上面可以解決許多信息管理上面的難題&#xff0c;比如處理數據時間很長&#xff0c;數據存在錯誤不能及時糾正等問題。這次開…

APS面試審核準備的常規問題

之前根據其他人的經驗貼&#xff0c;準備了一些可能APS 面試審核可能會遇到的常規問題&#xff0c;現在簡單分享一下。 一般會考慮到留學資金來源&#xff0c;在德國能不能順利畢業&#xff1b;學的是什么專業內容之類的&#xff0c;判斷去德國會不會好好學習&#xff1b;對德國…

Linux:上傳文件到虛擬機

常見的方法&#xff1a; 使用虛擬機軟件提供的文件共享功能&#xff1a; 對于VMware Workstation&#xff0c;可以使用“共享文件夾”功能。對于VirtualBox&#xff0c;可以使用“共享文件夾”或“拖放”功能。 使用網絡文件共享服務&#xff1a; 您可以在虛擬機中配置一個Sam…

【Python入門教程】Python實現雞兔同籠

今天跟大家分享一下很久之前自己做的雞兔同籠求解問題的小游戲&#xff0c;使用公式和基本的判斷語句即可實現&#xff0c;可以用來當練手或者消磨時間用。 大家在編代碼的時候最重要就是先理清邏輯思路&#xff0c;例如應該套幾層循環、分幾個模塊等等。然后在編碼時可以先隨意…

TS中符號的用法:?、??、 !、 !!

1) ? 的用法 示例&#xff1a; const obj res?.data || {}; // obj是從接口中取到的數據const dataError obj.a.b; // 若obj為空&#xff0c;則此時會報錯const dataSafe obj?.a?.b; // 相當于 const dataSafe obj && obj.a && obj.a.b ? obj.a.b…

wy的leetcode刷題記錄_Day80

wy的leetcode刷題記錄_Day80 聲明 本文章的所有題目信息都來源于leetcode 如有侵權請聯系我刪掉! 時間&#xff1a;2024-3-2 前言 目錄 wy的leetcode刷題記錄_Day80聲明前言2368. 受限條件下可到達節點的數目題目介紹思路代碼收獲 92. 反轉鏈表 II題目介紹思路代碼收獲 2368…

Redis持久化+Redis內存管理和優化+Redis三大緩存問題

Redis持久化Redis內存管理和優化Redis三大緩存問題一、Redis高可用二、Redis持久化1、RDB持久化1.1 觸發條件(1) 手動觸發(2) 自動觸發(3) 其他自動觸發機制 1.2 執行流程1.3 啟動時加載 2、AOF持久化2.1 開啟AOF2.2 執行流程(1) 命令追加(append)(2) 文件寫入(write)和文件同步…

讀書筆記-三國演義-荊州爭奪

荊州爭奪 赤壁之戰后&#xff0c;荊州成為蜀漢、曹魏和孫吳三方爭奪的焦點。劉備、曹操和孫權相繼占據荊州&#xff0c;展開了一系列激烈的軍事沖突和政治斗爭。 赤壁之戰后的荊州爭奪是三國時期曹操、劉備和孫權之間的一場激烈競爭&#xff0c;是繼赤壁之戰后三方勢力之間的…