GGUF 文件詳解

目前,市面上有各種不同的大模型部署工具,比如 ollama、vllm、sglang 等,但是很多人還並不瞭解大模型文件格式之間的區別,本次我們來聊一下 ollama 專用的 GGUF 格式。

1、什麼是 GGUF

GGUF 格式的全名爲(GPT-Generated Unified Format),由 llama.cpp 創始人 Georgi Gerganov 設計的二進制文件格式,專爲高效存儲和加載大模型優化。

簡單來說就是,模型在訓練完成之後需要對架構、參數等進行存儲,用的格式是 GGUF。

以下爲 GGUF 文件示例:

2、爲什麼採用 GGUF

在傳統的大模型開發中多數使用 PyTorch 進行開發,但在部署時會面臨依賴包太多、版本管理等問題,因此纔有了 GGUF 格式(GGUF 是長時間優化後的產物)。

GGUF 文件主要是因爲它針對大模型的存儲、加載和部署場景進行了多項優化,解決了傳統格式的痛點。包含了所有的模型信息(如元數據、張量數據),同時支持跨平臺使用,無需依賴外部文件或複雜配置。

3、GGUF 的特點

3.1  高效性

GGUF 作爲一種二進制格式,相較於文本格式的文件,可以更快地被讀取和解析。二進制文件通常更緊湊,減少了讀取和解析時所需的 I/O 操作和處理時間。

3.2  量化支持

GGUF 支持多種量化類型(如 Q8_K、Q6_K 等),通過降低模型精度減少文件大小,適用於不同硬件資源場景。

GGUF 支持多種量化類型,每種類型都有其特定的位寬和量化方法,以滿足不同的性能和精度需求。以下是一些常見的量化類型:

4、GGUF 的適用框架

主要用於 llama.cpp 項目,支持 GPU、CPU 推理。

常見的 llama.cpp 項目有 ollama、LMStudio、LocalAI 等。

5、GGUF 壓縮計算示例

以 ollama 平臺爲例,其默認下載的模型通常是 4-bit 量化,也就是 Q4_0 的壓縮方式。

以 DeepSeek-R1:32B 模型爲例。B 指參數量爲 10 億,那麼 32B 就是存在 320 億模型參數。

(1)確定參數數量

模型有 32×10**9 個參數。

(2)確定每個參數的精度

原始精度爲 FP16,每個參數佔用 16 位或 2 字節

(3)計算總字節數

總字節數 = 32×109×2=64×109 字節 = 64GB

(1)理解 4 位量化

4 位量化意味着每個參數用 4 位表示

(2)計算量化後的總位數

總位數(量化後)=32×109×4=128×109 位

(3)將位轉換爲字節

總字節數(量化後)=128×109/8=16×109 字節 = 16GB

但是,通過實際加載模型可以看到,其佔用的顯存近 22G。

主要原因在於:

(1)量化元數據

量化過程中,每個參數組的權重需要存儲額外的元數據(如縮放因子和零點),用於反量化計算。

例如,若採用分組量化(Group-wise Quantization),每 64 個參數爲一組,每組需存儲 1 個 FP16 縮放因子(2 字節)和 1 個零點(1 字節)。

對於 32B 參數(320 億個參數),分組數 = 32B / 64 = 5 億組 → 元數據總大小 = 5 億組 × (2+1) 字節 ≈ 1.5GB

(2)中間激活值(Activations)

推理過程中,每層輸出的中間結果(激活值)需暫存在顯存中。

以 32B 模型爲例,處理 2048 tokens 的序列時,激活值佔用約 3-5GB 顯存(具體與模型架構和序列長度強相關)。

(3)推理框架的額外開銷

硬件(如 GPU)要求內存地址按特定字節對齊(如 128 位對齊),導致實際分配的顯存可能略大於理論值。

某些框架會預分配緩存空間以加速計算(如 KV Cache),進一步增加顯存佔用。

總之,對於 ollama 拉取的 32B 模型來說,24G 顯存是剛剛好。

6、離線加載 GGUF 模型

我們以 “DeepSeek-R1-Distill-Qwen-7B-Q8_0.gguf” 部署爲例:

1、創建一個 Modelfile 文件,文件內容如下。

FROM C:/Users/admin/.ollama/models/DeepSeek-R1-Distill-Qwen-7B-GGUF/DeepSeek-R1-Distill-Qwen-7B-Q8_0.gguf
PARAMETER temperature 0.6
SYSTEM """
你是樂於助人的幫手,擅長中文多輪對話,回答需嚴謹且符合事實。>
"""

其中 FROM 爲量化的 gguf 模型,根據自己電腦上模型位置進行修改。

2、引入離線模型

打開終端,運行以下命令創建模型:

ollama create model-name -f Modelfile

其中 model-name 爲自己命名,以下爲命名示例:

ollama create deepseek-r1-distill-qwen-7b -f ./Modelfile

3、離線模型測試

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/aIPsIe0JZZ8exroL-Jyg-A