llama.cpp是一個高性能的CPU/GPU大語言模型推理框架,適用于消費級設(shè)備或邊緣設(shè)備。開發(fā)者可以通過工具將各類開源大語言模型轉(zhuǎn)換并量化成gguf格式的文件,然后通過llama.cpp實現(xiàn)本地推理。經(jīng)過我的調(diào)研,相比較其它大模型落地方案,中小型研發(fā)企業(yè)使用llama.cpp可能是唯一的產(chǎn)品落地
llama.cpp是一個高性能的CPU/GPU大語言模型推理框架,適用于消費級設(shè)備或邊緣設(shè)備。開發(fā)者可以通過工具將各類開源大語言模型轉(zhuǎn)換并量化成gguf格式的文件,然后通過llama.cpp實現(xiàn)本地推理。經(jīng)過我的調(diào)研,相比較其它大模型落地方案,中小型研發(fā)企業(yè)使用llama.cpp可能是唯一的產(chǎn)品落地方案。關(guān)鍵詞:“中小型研發(fā)企業(yè)”,“產(chǎn)品落地方案”。
中小型研發(fā)企業(yè):相較動輒千萬+的硬件投入,中小型研發(fā)企業(yè)只能支撐少量硬件投入,并且也缺少專業(yè)的研發(fā)人員。
產(chǎn)品落地方案:項目需要具備在垂直領(lǐng)域落地的能力,大多數(shù)情況下還需要私有化部署。
網(wǎng)上有不少介紹的文章,B站上甚至有一些收費課程。但是版本落后較多,基本已經(jīng)沒有參考價值。本文采用b3669版本,發(fā)布日期是2024年9月,參考代碼:examples/main.cpp。由于作者(Georgi Gerganov)沒有提供詳細的接口文檔,examples的代碼質(zhì)量也確實不高,因此學(xué)習(xí)曲線比較陡峭。本文旨在介紹如何使用llama.cpp進行推理和介紹重點函數(shù),幫助開發(fā)人員入門,深入功能還有待研究。
系統(tǒng)初始化函數(shù):
系統(tǒng)資源釋放函數(shù):
創(chuàng)建模型和推理上下文:
它聲明在common.h中。如果你需要將模型和上下文分開創(chuàng)建可以使用llama.h中的另外兩對函數(shù):
創(chuàng)建ggml的線程池,這個過程可能和模型加速有關(guān),代碼中沒有對它的詳細解釋:
除了完成一般的推理任務(wù),llama.cpp還實現(xiàn)了上下文存儲與讀取。上下文切換的前提是不能換模型,且僅首次推理接收用戶輸入的prompt。利用這個特性,可以實現(xiàn)上下文的動態(tài)切換。
至此,有關(guān)系統(tǒng)初始化模塊的過程已經(jīng)完成。
檢查編碼器,現(xiàn)代模型大多都沒有明確定義的encodec
邏輯的重點是:首先,如果推理的上下文長度超限,會丟棄超出部分。實際開發(fā)中可以考慮重構(gòu)這個部分的邏輯。其次,每次推理都有一個處理數(shù)量限制(n_batch),這主要是為了當(dāng)一次性輸入的內(nèi)容太多,系統(tǒng)不至于長時間無響應(yīng)。最后,每次推理完成,embd都會被清理,推理完成后的信息會保存在ctx中。
首先要關(guān)注第2部分,這一段的邏輯是將用戶的輸入載入上下文中,由于用戶的輸入不需要推理,因此只需要調(diào)用llama_sampling_accept函數(shù)。第1部分只有當(dāng)用戶輸入都完成以后才會進入,每次采樣一個token,寫進embd。這個過程和分析預(yù)測交替進行,直到遇到eos。
chat_add_and_format函數(shù)只負責(zé)將所有交互過程記錄在char_msgs中,對整個推理過程沒有影響。如果要實現(xiàn)用戶輸出,可以在這里處理。
通過gpt_params初始化llama_model_params
創(chuàng)建大模型指針
創(chuàng)建ggml線程池和設(shè)置線程池
通過gpt_params初始化llama_context_params
對輸入進行分詞并轉(zhuǎn)換成token
獲取特殊token
批量處理token并進行預(yù)測
執(zhí)行采樣和接收采樣
將token轉(zhuǎn)成自然語言
判斷推理是否結(jié)束,注意,這個token可能和llama_token_eos獲取的不一致。因此一定要通過這個函數(shù)判斷
本文旨在介紹llama.cpp的基礎(chǔ)用法,由于Georgi Gerganov更新較快,且缺少文檔。因此可能有些解釋不夠準確。如果大家對框架和本文敢興趣可以給我留言深入討論。
小編推薦閱讀機器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實現(xiàn)對象集合與DataTable的相互轉(zhuǎn)換
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細使用
閱讀Java代理模式:靜態(tài)代理和動態(tài)代理的對比分析
閱讀Win11筆記本“自動管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)