Llama.cpp

llama.cpp是用來在多種大型语言模型（例如LLaMA）上執行推理的开放源代码函式庫。此函式庫中也包含了命令列工具以及介面簡易的网络应用程序伺服器。

 背景 
2022年9月底，Georgi Gerganov開始開發GGML函式庫，這是實作张量代数的C語言函式庫。Gerganov開發GGML函式庫的目的是實現嚴格的記憶體管理與多執行緒。GGML的建立則是受到法布里斯·贝拉開發LibNC的啟發。

在開發llama.cpp之前，Gerganov曾經開發過類似的函式庫，為使用OpenAI語音轉文字模型的whisper.cpp。

 開發 
Georgi Gerganov從2023年3月開始開發llama.cpp，llama.cpp是LLaMA推理程式碼的無外部依賴關係純C/C++實作。llama.cpp改善了在沒有圖形處理器或其他專用硬體的電腦上的效能，這也是此專案的其中一個目標。因為可以僅在中央处理器上執行（甚至可以在Android上運作），llama.cpp得到了缺乏專用硬體的使用者青睞。雖然一開始是為CPU設計的，但後來還是新增了GPU推理支援。

2024年3月，Justine Tunney為x86與ARM CPU引入新的最佳化矩陣乘法核心至此專案，改善了FP16與8位元量化資料類型的提示詞評估效能。Tunney也製作了llamafile這套工具，這套工具把模型與llama.cpp整合到單一個檔案中，並可透過同樣由Tunney開發的Cosmopolitan Libc函式庫在多個作業系統上執行。

 架構 
llama.cpp支援多種硬體目標，包含x86、ARM、CUDA、Metal、Vulkan（1.2或更新版本）與SYCL。這些後端構成了GGML張量函式庫，並供llama.cpp中不同模型的程式碼使用。llama.cpp支援提前而非即時量化模型。llama.cpp也使用了多種CPU擴充指令集最佳化效能：x86-64的AVX、AVX2與AVX-512，以及ARM上的Neon。Apple晶片也是此專案的重要目標。

 GGUF檔案格式 

GGUF（GGML通用檔案）檔案格式是二進位格式，將張量與元数据儲存在同一個檔案中，用以快速儲存與載入模型資料。此檔案格式是llama.cpp專案於2023年8月開始使用，在新增對其他模型架構的支援時也維持向後相容性。

GGUF檔案通常是透過轉換以PyTorch等其他機器學習函式庫開發的模型所建立的。

 設計 
此格式著重於量化，亦即降低模型權重的精確度。如此可以降低記憶體使用量，提昇速度，缺點是會降低模型精度。

GGUF支援2位元至8位元的量化整數類型，以及常見的浮點資料格式（如float32、float16與bfloat16）與1.56位元量化。

 參考資料 

Category:大型语言模型
Category:开源人工智能
Category:自由软件