對于剛剛落下帷幕的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