大家好,我們今天要講的內容是,windows 本地部署 llama2 大模型。
在本節課中,我們將在 windows 環境,不使用 GPU,只使用 CPU 的情況下,基於 llama.cpp 這個庫,部署並運行 llama2 大模型。
完成部署後,會直接使用 python 接口,進行文本生成。
1. 什麼是 llama2 大模型
2023 年 7 月 19 日,Meta 發布了免費並且可商用的大語言模型 Llama 2。
這一舉措,足以讓大模型領域的格局,發生巨大變化。
lama 2 系列模型,有 70 億、130 億和 700 億,三種不同規模參數的模型。
經過評估 Llama2 的實際效果,已超過 GPT3,甚至已經接近 GPT3.5。
關於 Llama 2 本身,有非常多值得討論的地方,尤其是對國內 AI 領域的深遠影響,將來我會再專門出視頻來討論。
下面,我們進入正題,就用手頭的個人電腦,來體驗一下 Llama2。
2.llama-cpp 和 llama-cpp-python
我們都知道,大語言模型,動輒就是上百億的參數,本身就不是在單機環境下使用的。
即使是 Llama 系列,最小的也有 70 億參數,也需要英偉達 RTX4090 或 A10 來運行。
但是,有位超級大神,他基於 Meta 發布的 LLaMA 模型,開發出了一個運行 llama 模型的模塊 llama.cpp。
該項目純手工基於 C++ 打造,沒有任何第 3 方編譯依賴,使我們可以基於 cpu 條件,進行大模型推理。
另外,llama.cpp 不僅支持 llama2 模型,還支持 Alpaca、chiness-llama、WizardLM 等等其他模型,並且還提供了 Python、Go、Node.js 等其他語言的接口。
接下來,我們來一步步搭建 llama-cpp 的 python 環境,實現大語言模型的單機運行。
3. 基於 anaconda 搭建環境
在搭建環境前,需要提前安裝 visual studio,在安裝 llama-cpp-python 的過程中,用於編譯 llama-cpp。
我們可以直接在 VS 的官網,下載 VS 2022 社區版,進行安裝。
完成 VS 的安裝後,使用 anaconda,創建一個新的 python 環境,其中 python 版本選擇 3.10。
接著打開環境,使用 pip install llama-cpp-python 命令,安裝 python 接口的 llama-cpp。
4. 在 huggingface 上,下載模型
我們可以在 huggingface 上,下載量化後的 llama2 模型。
具體登錄 huggingface 後,找到 TheBloke 這個項目,再在其中找到 Llama-2-7B-Chat-GGML 模型。
這裡要說明的是,Llama-2-7B 是原始的 7B 版本,Chat 代表聊天微調版本,而 GGML 代表量化模型。
所謂模型量化,可以簡單的理解為一種模型壓縮技術。
在下載列表中,我們選擇下載其中的 q4_0 這個版本。
列表中還有很多其他版本。
簡單來說,q4_0 表示每 4 個比特一個權重,q5_0 就是每 5 個比特一個權重。
其中的數越大,那麼精度就越高,我們選擇一個差不多的來使用就可以了。
5. 編寫 python 程序,進行文本生成
完成環境的搭建和模型的下載後,就可以編寫 python 代碼了。
程序會依賴 llama-cpp-python 這個模塊,它的接口使用方法,可以在項目的文檔中找到。
打開項目文檔,可以找到接口中的各個參數都怎麼使用,這裡就不過多介紹了,具體的使用效果,還需要大家自行調試。
下面,我們就來寫一個簡單的樣例程序。
首先導入 llama_cpp。
在 main 函數中,首先創建 Llama 模型,模型使用我們剛剛下好 q4_0 模型。
然後對模型輸入 hello、who are you、how old are you,看一看模型的反應如何。
這裡我們實現一個功能函數 generate_text。函數傳入模型 model 和輸入信息 message,函數返回模型的輸出結果。
在函數中,首先需要將 message 轉換為 prompt,然後將 prompt 輸入至模型,得到輸出 output。
輸出結果的格式可以參考文檔,我們將其中的 choices 中的 text 字符串取出,保存到 answer 中,並將 answer 返回。
運行程序,可以得到三個測試結果。
發送 hello,llama2 會回復一個友善的回復。
發送 who are you,llama2 會自我介紹。
發送 how old are you,llama2 也會給出合適的結果。