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
- 以 4 比特量化後模型大小的計算如下:
(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