Chuyển đến nội dung chính

Định dạng GGUF: Hướng dẫn đầy đủ về suy luận LLM cục bộ

GGUF đóng gói trọng số mô hình, dữ liệu tokenizer và siêu dữ liệu vào một tệp di động duy nhất. Tìm hiểu cách chọn mức lượng tử hóa phù hợp và bắt đầu với Ollama.
Đã cập nhật 17 thg 6, 2026  · 15 phút đọc

Giả sử bạn đã tìm được một mô hình ngôn ngữ 7B tham số muốn chạy cục bộ. Bạn sẽ gặp một vấn đề: chỉ riêng trọng số FP16 đã khoảng 14 GB, trong khi laptop của bạn chỉ có 16 GB RAM. 

Ngay cả trước khi tính đến hệ điều hành, thời gian chạy suy luận, bộ đệm ngữ cảnh và bộ đệm tạm thời, mô hình đã gần chạm ngưỡng phần cứng của bạn. Đây chính là vấn đề mà GGUF được thiết kế để giải quyết.

GGUF đã trở thành một trong những định dạng quan trọng nhất để chạy cục bộ các mô hình ngôn ngữ lớn dùng trọng số mở. Thay vì cần GPU doanh nghiệp hoặc API đám mây, GGUF giúp việc chạy mô hình đã lượng tử hóa trên laptop, desktop, máy Apple Silicon, thậm chí một số thiết bị di động hoặc biên, trở nên khả thi.

Trong bài viết này, tôi sẽ giới thiệu định dạng GGUF và cách thức hoạt động, giải thích lượng tử hóa giúp giảm kích thước mô hình như thế nào và cách chọn mức lượng tử hóa phù hợp, và cuối cùng là cách bắt đầu với Ollama và llama.cpp.

Tóm tắt ngắn gọn

  • GGUF (GGML Unified Format) là định dạng tệp nhị phân đóng gói trọng số mô hình, dữ liệu tokenizer, siêu dữ liệu kiến trúc và thông tin lượng tử hóa vào một tệp di động duy nhất
  • Nó thay thế định dạng GGML cũ vào năm 2023 và hiện là định dạng thống trị để phân phối LLM đã lượng tử hóa trên Hugging Face
  • GGUF được sử dụng bởi llama.cpp, Ollama, LM Studio, GPT4All, KoboldCpp và các công cụ suy luận cục bộ khác
  • Lượng tử hóa là tính năng then chốt: một mô hình 7B ở FP16 khoảng ~14 GB; phiên bản Q4_K_M khoảng ~4–5 GB
  • Các mức lượng tử hóa phổ biến dao động từ Q2_K (nhỏ nhất, chất lượng thấp nhất) đến Q8_0 (lớn nhất, gần độ chính xác đầy đủ) — Q4_K_M là điểm khởi đầu tiêu chuẩn cho đa số phần cứng
  • GGUF chạy trên CPU, Apple Silicon (Metal), GPU NVIDIA (CUDA), GPU AMD (ROCm/Vulkan), và nhiều hơn nữa
  • Chọn mức lượng tử phù hợp nghĩa là cân bằng giữa bộ nhớ, chất lượng đầu ra, tốc độ suy luận và độ dài ngữ cảnh

GGUF là gì?

GGUF, viết tắt của GGML Unified Format, là định dạng tệp nhị phân đóng gói trọng số mô hình, dữ liệu tokenizer, siêu dữ liệu kiến trúc và thông tin lượng tử hóa vào một tệp di động duy nhất để suy luận với các môi trường chạy dựa trên GGML — đặc biệt là llama.cpp.

GGUF giải quyết một vấn đề triển khai LLM. Nhiều định dạng mô hình yêu cầu người dùng giữ nhiều tệp cùng nhau, bao gồm trọng số, tệp tokenizer, tệp cấu hình và mã nạp chuyên biệt cho từng kiến trúc. GGUF đơn giản hóa điều này bằng cách khiến tệp mô hình phần lớn tự mô tả.

Một tệp GGUF thường chứa:

  • Các tensor của mô hình
  • Trọng số đã hoặc chưa lượng tử hóa
  • Từ vựng của tokenizer
  • Cấu hình tokenizer
  • Siêu dữ liệu kiến trúc mô hình
  • Thiết lập độ dài ngữ cảnh
  • Kích thước embedding
  • Số lượng head attention
  • Cấu hình RoPE
  • Tên, hình dạng và kiểu dữ liệu của tensor

Ý tưởng then chốt là tệp tự mô tả. Thời gian chạy có thể kiểm tra siêu dữ liệu, hiểu kiến trúc, tải tokenizer và ánh xạ các tensor mà không cần dựa vào config.json riêng hay thư mục tokenizer riêng.

Điều này không có nghĩa là mọi tệp GGUF đều tương thích phổ quát với mọi thời gian chạy mãi mãi. Thời gian chạy vẫn cần hỗ trợ kiến trúc mô hình và kiểu tensor được dùng trong tệp. Tuy nhiên, GGUF khiến khả năng tương thích đó dễ dàng hơn nhiều so với các định dạng cũ vì tệp mang theo nhiều thông tin có cấu trúc hơn.

Bốn đặc trưng xác định của GGUF là:

  1. Triển khai chỉ một tệp
  2. Hỗ trợ memory mapping để tải hiệu quả
  3. Siêu dữ liệu kiểu hóa theo cặp khóa-giá trị có thể mở rộng
  4. Hỗ trợ nhiều kiểu lượng tử hóa, từ định dạng bit thấp mạnh tay đến độ chính xác đầy đủ

GGUF được giới thiệu như một phần của hệ sinh thái llama.cpp và GGML vào năm 2023. Hiện đây là định dạng thống trị để phân phối các LLM cục bộ đã lượng tử hóa trên Hugging Face.

GGUF so với GGML

Định dạng GGML (Georgi Gerganov Machine Learning) là tiền thân của GGUF. Nó quan trọng vì giúp khả thi hóa suy luận cục bộ giai đoạn đầu. Tuy vậy, khi hệ sinh thái mở rộng vượt ra ngoài các mô hình LLaMA gốc, GGML bộc lộ các hạn chế thực tiễn.

Các điểm đau thường gặp của GGML gồm:

  • Xử lý siêu dữ liệu kém linh hoạt
  • Nhiều giả định nạp phụ thuộc vào kiến trúc cụ thể
  • Xử lý tokenizer và cấu hình ít tự bao hàm
  • Khó mở rộng khi xuất hiện các họ mô hình mới

GGUF khắc phục những hạn chế đó bằng một định dạng có cấu trúc hơn. Nó giới thiệu siêu dữ liệu kiểu hóa, nhúng tokenizer tốt hơn và bố cục tệp rõ ràng hơn. Điều này giúp llama.cpp và các công cụ liên quan hỗ trợ nhiều kiến trúc hơn mà không phải liên tục thiết kế lại quy trình nạp.

Với người dùng, khác biệt quan trọng rất đơn giản: GGUF là định dạng hiện đại. Nếu bạn tải mô hình ngày nay, gần như luôn nên chọn GGUF thay vì các tệp GGML cũ.

GGUF so với GPTQ và AWQ

Khi nghiên cứu các định dạng tệp, bạn hẳn đã gặp GGUF, GPTQ (Generative Post-Training Quantization) và AWQ (Activation-Aware Weight Quantization). Chúng thường được bàn luận cùng nhau vì cả ba đều dùng để làm suy luận LLM hiệu quả hơn. Tuy nhiên, chúng không cùng một loại.

GGUF chủ yếu là định dạng tệp và bộ chứa triển khai. Nó hỗ trợ nhiều kiểu lượng tử hóa và gắn liền với suy luận cục bộ kiểu llama.cpp.

GPTQ và AWQ là các phương pháp lượng tử hóa và hệ sinh thái thường dùng cho suy luận tối ưu hóa GPU, đặc biệt trên phần cứng NVIDIA thông qua các framework như Transformers, ExLlama, AutoGPTQ và các quy trình làm việc tương thích vLLM.

Tính năng

GGUF

GPTQ

AWQ

Mục tiêu chính

Suy luận cục bộ di động, linh hoạt

Suy luận trên GPU

Suy luận trên GPU

Phần cứng phổ biến

CPU, Apple Silicon, NVIDIA, AMD, Vulkan, di động

GPU NVIDIA

GPU NVIDIA

Hỗ trợ CPU

Mạnh

Hạn chế

Hạn chế

Tính di động

Rất cao

Trung bình

Trung bình

Hệ sinh thái điển hình

llama.cpp, Ollama, LM Studio, GPT4All

Transformers, ExLlama, AutoGPTQ

Transformers, quy trình kiểu TensorRT-LLM

Thông lượng GPU

Tốt, đặc biệt khi offload

Thường rất mạnh

Thường rất mạnh

Trường hợp sử dụng tốt nhất

Suy luận cục bộ và phần cứng hỗn hợp

Phục vụ GPU thông lượng cao

Phục vụ GPU thông lượng cao

Nếu mục tiêu của bạn là tương thích tối đa trên laptop, desktop, Apple Silicon và phần cứng hỗn hợp, GGUF thường là lựa chọn an toàn hơn.

Nếu mục tiêu là thông lượng tối đa trên các máy chủ suy luận NVIDIA chuyên dụng, GPTQ, AWQ, FP8 hoặc các định dạng phục vụ tối ưu cho GPU khác có thể phù hợp hơn.

Vì sao dùng GGUF?

GGUF trở nên phổ biến vì nó giải quyết các vấn đề triển khai thực tiễn. Bản thân tôi cũng thấy nó rất tiện khi triển khai cục bộ mà không phải bận tâm thiết lập rườm rà.

Chạy LLM cục bộ từng liên quan đến công cụ rời rạc, trọng số lớn chưa nén, định dạng mô hình không tương thích, và các bước thiết lập phức tạp. Giờ đây, GGUF có thể giúp bạn tiêu chuẩn hóa phần lớn quy trình đó.

Thay vì nghĩ về nhiều tệp và script nạp riêng lẻ, người dùng có thể tập trung vào chọn mô hình phù hợp, chọn mức lượng tử hóa và chạy suy luận.

Chạy mô hình cục bộ

GGUF cho phép bạn chạy LLM trên chính máy của mình. Điều này có nghĩa là:

  • Không tốn chi phí theo token qua API
  • Không phụ thuộc vào nhà cung cấp suy luận chạy sẵn
  • Không cần gửi prompt tới API bên thứ ba
  • Có thể suy luận ngoại tuyến sau khi tải mô hình

Điều này đặc biệt hữu ích cho các quy trình nhạy cảm về quyền riêng tư. Nhà phát triển có thể không muốn gửi mã sở hữu, tài liệu nội bộ, hồ sơ khách hàng hoặc prompt bảo mật ra API bên ngoài.

Suy luận cục bộ không tự động an toàn. Bạn vẫn cần quản lý máy, log, ứng dụng và kiểm soát truy cập đúng cách. Nhưng GGUF giúp triển khai cục bộ riêng tư dễ tiếp cận hơn nhiều.

Để thực hành chạy mô hình cục bộ, xem các hướng dẫn của chúng tôi về phục vụ Mistral Medium 3.5 với SGLang, chạy DeepSeek V4 Flash cục bộ, chạy mô hình Bonsai 1-bit hiệu quả trên laptop cũ, và chạy MiniMax M2 cục bộ như một trợ lý lập trình.

Linh hoạt phần cứng

GGUF hữu ích vì hoạt động trên nhiều cấu hình phần cứng.

Tùy môi trường chạy và backend, mô hình GGUF có thể chạy trên:

  • Máy chỉ dùng CPU
  • GPU NVIDIA qua CUDA
  • Apple Silicon qua Metal
  • GPU AMD qua HIP hoặc Vulkan
  • GPU Intel qua SYCL hoặc Vulkan
  • Một số môi trường ARM và di động

Sự linh hoạt này là lý do lớn khiến llama.cpp có ảnh hưởng. Nó không chỉ thiết kế cho GPU máy chủ cao cấp, mà để khả thi hóa suy luận cục bộ trên phổ phần cứng rộng.

Ví dụ, người dùng Mac có thể dựa vào tăng tốc Metal, trong khi người dùng desktop Linux có thể dùng CUDA hoặc Vulkan. Người dùng chỉ có CPU vẫn có thể chạy các mô hình đã lượng tử hóa nhỏ hơn, dù tốc độ sinh sẽ chậm hơn.

Hệ sinh thái hỗ trợ rộng

GGUF được hỗ trợ bởi nhiều công cụ suy luận cục bộ. Ví dụ gồm:

  • llama.cpp cho suy luận dòng lệnh và máy chủ
  • Ollama cho quản lý mô hình qua CLI và truy cập API
  • LM Studio cho giao diện GUI desktop
  • GPT4All cho chat cục bộ tập trung vào quyền riêng tư
  • KoboldCpp cho nhập vai cục bộ và quy trình sinh văn bản
  • Jan và Open WebUI cho giao diện AI cục bộ

Điều này quan trọng vì người dùng không bị khóa vào một giao diện. Cùng một định dạng mô hình tổng quát có thể dùng trong nhiều quy trình khác nhau.

Một nhà phát triển có thể benchmark mô hình bằng llama.cpp, trò chuyện với nó trong LM Studio, phục vụ qua Ollama, và kết nối với giao diện trình duyệt qua Open WebUI.

Phân phối trên Hugging Face

Hugging Face đã trở thành trung tâm phân phối lớn cho các mô hình GGUF.

Nguồn: Hugging Face

Nhiều mô hình phổ biến dùng trọng số mở nhận được biến thể GGUF do cộng đồng tải lên ngay sau khi phát hành. Các repo này thường bao gồm nhiều tùy chọn lượng tử hóa để người dùng chọn mô hình phù hợp phần cứng.

Các biến thể tải lên phổ biến gồm:

  • Q4_K_M
  • Q5_K_M
  • Q6_K
  • Q8_0
  • IQ4_XS
  • IQ3_M
  • IQ2_XXS

Điều này có nghĩa thường không cần chuyển đổi thủ công. Với các mô hình phổ biến, đã có người trong cộng đồng tạo sẵn tệp GGUF cho những mức lượng tử hóa thường dùng.

Kiểm soát chi tiết cân bằng kích thước - chất lượng

GGUF cho phép người dùng điều chỉnh tinh vi giữa kích thước và chất lượng. Bạn có thể chọn:

  • Lượng tử hóa nhỏ hơn cho máy ít bộ nhớ
  • Lượng tử hóa tầm trung cho nhu cầu hằng ngày cân bằng
  • Lượng tử hóa bit cao hơn cho lập trình, suy luận hoặc đầu ra có cấu trúc
  • Độ chính xác đầy đủ hoặc gần đầy đủ khi bộ nhớ không phải rào cản

Sự linh hoạt này là một trong những lợi thế lớn nhất của định dạng. Thay vì một mục tiêu triển khai cố định, GGUF cho phép điều chỉnh cùng một họ mô hình cho nhiều phân khúc phần cứng.

GGUF hoạt động như thế nào?

Một tệp GGUF được tổ chức thành ba phần chính:

  1. Header
  2. Siêu dữ liệu và thông tin tensor
  3. Dữ liệu tensor

Cấu trúc chính xác được định nghĩa bởi đặc tả GGUF. Ý tưởng quan trọng là siêu dữ liệu và thông tin tensor xuất hiện trước dữ liệu tensor thô, cho phép thời gian chạy hiểu những gì sắp tải.

Header

Header xác định tệp là GGUF và cho thời gian chạy biết cách phân tích phần còn lại. Nó bao gồm:

  • Magic number cho GGUF
  • Phiên bản định dạng
  • Số lượng tensor
  • Số lượng cặp khóa-giá trị siêu dữ liệu

Các tệp GGUF hiện đại thường dùng GGUF phiên bản 3.

Các engine suy luận kiểm tra magic number trước tiên. Nếu tệp không bắt đầu bằng định danh GGUF như mong đợi, thời gian chạy có thể từ chối trước khi cố phân tích tensor hoặc cấp phát bộ nhớ.

Đây là bước đơn giản nhưng quan trọng về an toàn và độ tin cậy. Nó ngăn thời gian chạy vô tình xử lý một tệp nhị phân không liên quan như một mô hình.

Cặp khóa-giá trị siêu dữ liệu

Siêu dữ liệu GGUF là kho cặp khóa-giá trị có kiểu. Siêu dữ liệu này có thể mô tả:

  • Thông tin chung về mô hình
  • Họ kiến trúc
  • Độ dài ngữ cảnh
  • Kích thước embedding
  • Số lượng lớp
  • Số lượng attention head
  • Tham số RoPE
  • Từ vựng tokenizer
  • Token đặc biệt
  • Thông tin lượng tử hóa

Các khóa thường có tiền tố không gian tên. Ví dụ gồm:

  • general.architecture
  • general.alignment
  • llama.context_length
  • tokenizer.ggml.tokens

Không gian tên quan trọng vì cho phép GGUF hỗ trợ nhiều kiến trúc mà không phải thay đổi toàn bộ định dạng tệp. Một mô hình họ LLaMA có thể dùng các khóa llama.*, trong khi các họ mô hình khác có thể dùng siêu dữ liệu riêng theo kiến trúc của mình.

Đây là một lý do GGUF thích ứng tốt với các mô hình vượt ra ngoài LLaMA gốc, bao gồm các kiến trúc như Qwen, Mistral, Gemma, DeepSeek, Phi và những mô hình khác.

Thông tin tensor và dữ liệu tensor

Sau siêu dữ liệu, tệp lưu thông tin tensor và dữ liệu tensor.

Thông tin tensor mô tả:

  • Tên tensor
  • Hình dạng
  • Kiểu dữ liệu
  • Độ dời vào phần dữ liệu tensor

Phần dữ liệu tensor chứa trọng số của mô hình. Các trọng số này có thể được lưu ở độ chính xác đầy đủ hoặc ở một trong các kiểu tensor đã lượng tử hóa mà GGUF hỗ trợ.

GGUF dùng giá trị căn chỉnh (alignment) được định nghĩa trong siêu dữ liệu, thường là general.alignment. Nhiều tệp GGUF dùng căn chỉnh 32 byte, nhưng mô tả đúng là alignment được điều khiển bởi siêu dữ liệu thay vì mã hóa cố định.

Alignment quan trọng vì cho phép thời gian chạy truy cập các khối tensor hiệu quả.

Memory mapping

Một lợi thế thực tiễn của GGUF là memory mapping, thường gọi là mmap.

Với memory mapping, hệ điều hành có thể ánh xạ tệp mô hình vào bộ nhớ ảo thay vì buộc thời gian chạy sao chép toàn bộ tệp vào RAM ngay từ đầu.

Điều này có thể khiến khởi động mô hình nhanh hơn đáng kể, đặc biệt trên SSD. Nó cũng cho phép hệ điều hành hoán trang dữ liệu mô hình theo nhu cầu.

Tuy nhiên, memory mapping không phải đũa thần. Mô hình vẫn cần đủ băng thông bộ nhớ thực tế và RAM hoặc VRAM sẵn có để chạy tốt. Nếu hệ thống liên tục hoán trang từ đĩa, suy luận có thể chậm.

Một cách nghĩ đúng hơn về mmap là:

  • Cải thiện hiệu quả tải
  • Giảm sao chép không cần thiết
  • Cho phép hệ điều hành quản lý hoán trang
  • Không loại bỏ yêu cầu bộ nhớ của suy luận

Tìm hiểu các kiểu lượng tử hóa GGUF

Lượng tử hóa nén trọng số mô hình vào các biểu diễn độ chính xác thấp hơn.

Thay vì lưu mỗi trọng số dưới dạng số chấm động 16-bit, mô hình đã lượng tử hóa lưu các giá trị xấp xỉ bằng ít bit hơn. Điều này giảm kích thước đĩa, mức dùng RAM/VRAM và áp lực băng thông bộ nhớ.

Điểm mấu chốt là nhiều trọng số mạng nơ-ron không cần độ chính xác dấu chấm động đầy đủ trong suy luận. Một mô hình được lượng tử hóa cẩn thận có thể giữ lại phần lớn hành vi gốc trong khi nhỏ đi đáng kể.

Cách đặt tên lượng tử hóa GGUF

Tên các kiểu lượng tử hóa GGUF thường theo mẫu:

  • Q nghĩa là đã lượng tử hóa
  • Con số gợi ý số bit xấp xỉ mỗi trọng số
  • K chỉ họ k-quant
  • S, ML thường tương ứng biến thể nhỏ, trung bình và lớn

Ví dụ gồm:

  • Q4_K_M
  • Q5_K_M
  • Q6_K
  • Q8_0

Tên gọi hữu ích như một chỉ dẫn, nhưng không luôn phản ánh chính xác kích thước tệp. Kích thước thực phụ thuộc vào hỗn hợp tensor, kiến trúc, siêu dữ liệu, kích thước tokenizer, và việc một số tensor có giữ ở độ chính xác cao hơn không.

Các kiểu lượng tử hóa GGUF phổ biến

Lượng tử hóa

Hành vi xấp xỉ

Kích thước tệp 7B xấp xỉ

Ghi chú chất lượng

Q2_K

Lượng tử hóa bit rất thấp

Khoảng 2,5–3 GB

Nhỏ, nhưng suy giảm chất lượng thường rõ rệt

Q3_K_M

Lượng tử hóa cân bằng bit thấp

Khoảng 3,5–4 GB

Dùng được cho chat nhẹ, nhưng không lý tưởng cho suy luận

Q4_K_M

Lượng tử hóa 4-bit cân bằng

Khoảng 4–5 GB

Mặc định mạnh cho đa số người dùng cục bộ

Q5_K_M

Lượng tử hóa 5-bit chất lượng cao hơn

Khoảng 5,5–6,5 GB

Tốt hơn cho lập trình, suy luận và tác vụ có cấu trúc

Q6_K

Lượng tử hóa chất lượng cao

Khoảng 7–8 GB

Thường gần với hành vi độ chính xác cao

Q8_0

Lượng tử hóa 8-bit

Khoảng 8–9 GB

Chất lượng cao, nhưng lớn hơn nhiều so với Q4/Q5

Các con số này là xấp xỉ cho các mô hình dày đặc lớp 7B. Kiến trúc mới, mô hình mixture-of-experts, tokenizer lớn hơn và cách bố trí tensor khác có thể làm thay đổi kích thước tệp thực tế.

Trong thực tế, Q4_K_M trở thành mặc định phổ biến vì cân bằng tốt giữa kích thước và chất lượng. Nhiều người dùng thấy đủ tốt cho chat tổng quát, tóm tắt, diễn đạt lại và công việc AI thăm dò cục bộ.

Q5_K_M và Q6_K thường là lựa chọn tốt hơn cho khối lượng công việc đòi hỏi hơn, như lập trình hoặc làm theo hướng dẫn nhiều bước

Lý do rất đơn giản: những tác vụ này nhạy cảm hơn với suy giảm chất lượng nhỏ.

K-quant so với I-quant

K-quant là họ lượng tử hóa được dùng rộng rãi phía sau các định dạng như Q4_K_M, Q5_K_M và Q6_K.

Chúng sử dụng sơ đồ lượng tử hóa theo nhóm với thông tin tỉ lệ giúp giữ hành vi mô hình trong khi giảm yêu cầu bộ nhớ. Chúng phổ biến vì đáng tin cậy, được hỗ trợ rộng và dễ tìm trong các bản phát hành GGUF của cộng đồng.

I-quant, thường viết là các định dạng IQ, là các kiểu lượng tử hóa mới hơn như:

  • IQ4_XS
  • IQ3_M
  • IQ2_XXS
  • IQ1_S

I-quant được thiết kế để đạt chất lượng tốt hơn ở kích thước rất nhỏ. Chúng có thể dùng các kỹ thuật như lượng tử hóa có nhận thức tầm quan trọng và bảng mã lượng tử hóa phi tuyến. Một số quy trình sử dụng ma trận tầm quan trọng, thường gọi là imatrix, để giúp giữ các trọng số quan trọng hơn trong quá trình lượng tử hóa.

K quants vs I quants

Đánh đổi là độ phức tạp. I-quant có thể cho kết quả cân bằng kích thước-chất lượng xuất sắc, đặc biệt ở bitrate rất thấp, nhưng có thể đòi hỏi quy trình lượng tử hóa cẩn trọng hơn và hỗ trợ thời gian chạy phù hợp.

Với đa số người mới bắt đầu, K-quant vẫn là điểm khởi đầu dễ nhất.

Chọn mức lượng tử hóa cho phần cứng của bạn

Bảng sau đưa ra các điểm khởi đầu thực tiễn. Hãy coi đây là kinh nghiệm ngón tay cái, không phải bảo đảm nghiêm ngặt. Độ dài ngữ cảnh, chi phí hệ điều hành, offload GPU, kích thước bộ đệm KV và kiến trúc mô hình cụ thể đều có thể thay đổi yêu cầu bộ nhớ.

Tầng phần cứng

Mô hình 7B/8B

Mô hình 13B/14B

Mô hình 30B/34B

Mô hình lớp 70B

8 GB RAM/VRAM

Q4_K_M hoặc nhỏ hơn

Q2_K/Q3_K có thể chạy chậm

Không thực tế

Không thực tế

16 GB RAM/VRAM

Q5_K_M hoặc Q6_K

Q4_K_M

Không thực tế hoặc bị hạn chế nhiều

Không thực tế

24 GB RAM/VRAM

Q8_0 hoặc Q6_K

Q5_K_M/Q6_K

Q3_K/Q4_K với ràng buộc

Không thực tế với đa số người dùng

32 GB RAM/VRAM

Q8_0

Q6_K/Q8_0

Q4_K_M/Q5_K_M

Q2_K/Q3_K chỉ để thử nghiệm

48 GB+ RAM/VRAM

Q8_0 hoặc FP16/BF16 nếu được hỗ trợ

Q8_0

Q5_K_M/Q6_K

Q4_K_M khả thi với ràng buộc

64 GB+ RAM/VRAM

Độ chính xác cao

Độ chính xác cao

Q6_K/Q8_0

Q4_K_M/Q5_K_M thực tế hơn

Một vài nguyên tắc kinh nghiệm:

  • Dùng Q4_K_M như mặc định an toàn cho đa số suy luận cục bộ.
  • Dùng Q5_K_M khi chất lượng quan trọng hơn tiết kiệm từng gigabyte.
  • Dùng Q6_K hoặc Q8_0 khi bộ nhớ cho phép và bạn muốn độ trung thực tốt hơn.
  • Tránh Q2_K cho công việc nghiêm túc trừ khi bạn đang thử nghiệm các kịch bản cực kỳ hạn chế bộ nhớ.
  • Chừa thêm bộ nhớ cho bộ đệm KV, đặc biệt khi dùng cửa sổ ngữ cảnh dài.

Bộ đệm KV rất dễ bị bỏ qua. Một mô hình có thể vừa RAM ở độ dài ngữ cảnh ngắn nhưng lỗi hoặc chậm đi ở độ dài ngữ cảnh dài hơn nhiều vì bộ đệm tăng theo độ dài chuỗi.

Hệ sinh thái GGUF

Việc GGUF được đón nhận chịu tác động nhiều bởi công cụ không kém gì bản thân định dạng.

Một định dạng chỉ trở nên hữu ích khi người dùng có thể dễ dàng tải, chạy, kiểm tra, chuyển đổi và phục vụ mô hình. GGUF hưởng lợi từ hệ sinh thái mạnh trên công cụ dòng lệnh, ứng dụng desktop, API và kho mô hình được lưu trữ.

1. llama.cpp

llama.cpp là thời gian chạy GGUF gốc và quan trọng nhất. Đây là engine suy luận C/C++ gọn nhẹ do Georgi Gerganov tạo ra và cộng đồng GGML duy trì. Mục tiêu chính là cho phép suy luận LLM hiệu quả với thiết lập tối thiểu trên nhiều nền tảng phần cứng.

llama.cpp hiện đại hỗ trợ nhiều backend, bao gồm:

  • CPU
  • CUDA cho GPU NVIDIA
  • Metal cho thiết bị Apple
  • Vulkan
  • HIP cho GPU AMD qua ROCm
  • SYCL cho GPU Intel
  • OpenCL trong một số môi trường
  • Các backend chuyên biệt khác như CANN, OpenVINO và WebGPU tùy hỗ trợ nền tảng

Nó cũng bao gồm công cụ chuyển đổi, lượng tử hóa, phục vụ, benchmark và suy luận dòng lệnh. Các công cụ phổ biến gồm:

  • convert_hf_to_gguf.py
  • llama-quantize
  • llama-cli
  • llama-server
  • llama-bench

Các lệnh để tạo bản build CMake cho CPU cơ bản là:

cmake -B build
cmake --build build --config Release

Với một số cấu hình, cần thêm cờ vào lệnh đầu tiên trong hai lệnh đó:

  • Tắt Apple Metal trên macOS (mặc định bật): -DGGML_METAL=OFF
  • Build Vulkan: -DGGML_VULKAN=1
  • Build CUDA cho GPU NVIDIA: -DGGML_CUDA=ON

Lưu ý rằng các bản build hiện tại dùng các tùy chọn CMake GGML_* như GGML_CUDA, GGML_VULKANGGML_HIP.

2. Ollama

Ollama là một trong những cách dễ nhất để chạy mô hình cục bộ. Nó cung cấp:

  • Một CLI đơn giản
  • Kéo và quản lý mô hình
  • Một REST API cục bộ
  • Thư viện Python và JavaScript chính thức
  • Tích hợp với nhiều frontend AI cục bộ

Ollama lưu trữ và quản lý mô hình cho bạn, nên người dùng thường không tương tác trực tiếp với tệp .gguf. Tuy nhiên, Ollama được xây dựng dựa trên suy luận cục bộ tương thích llama.cpp và cũng có thể nhập tệp GGUF qua quy trình Modelfile.

Ollama cung cấp một API cục bộ tại:

http://localhost:11434/api

Hai endpoint thường dùng là:

  • /api/generate cho hoàn thành prompt
  • /api/chat cho tin nhắn kiểu hội thoại

Với người mới, Ollama thường là con đường nhanh nhất từ con số không đến suy luận cục bộ.

3. LM Studio

LM studio

Nguồn: LM Studio

LM Studio là ứng dụng desktop để khám phá, tải xuống và trò chuyện với các mô hình cục bộ. Hữu ích cho người dùng thích giao diện đồ họa thay vì công cụ dòng lệnh.

4. GPT4All

gpt4all

Nguồn: GPT4All

GPT4All là một ứng dụng AI cục bộ đa nền tảng khác, tập trung vào quy trình chatbot riêng tư, cục bộ. Nó hỗ trợ các mô hình GGUF và cung cấp môi trường thân thiện với người mới để suy luận cục bộ.

Những công cụ này giúp GGUF tiếp cận với cả người không chuyên. Người dùng không cần hiểu CMake, bố trí tensor hay nội tình lượng tử hóa chỉ để thử một mô hình cục bộ.

Bắt đầu với các mô hình GGUF như thế nào

Có hai cách thực tiễn để bắt đầu:

  1. Dùng Ollama cho trải nghiệm đơn giản nhất.
  2. Dùng trực tiếp llama.cpp để có nhiều quyền kiểm soát hơn.

Chạy mô hình với Ollama

Quy trình đơn giản nhất là tải mô hình và bắt đầu phiên chat tương tác:

ollama pull llama3.3
ollama run llama3.3

Gọi mô hình từ Python qua REST API:

import requests

payload = {
    "model": "llama3.3",
    "prompt": "Give me three practical use cases for GGUF.",
    "stream": False
}

response = requests.post(
    "http://localhost:11434/api/generate",
    json=payload
)

print(response.json()["response"])

Với ứng dụng kiểu chat, dùng /api/chat:

import requests

payload = {
    "model": "llama3.3",
    "messages": [
        {"role": "user", "content": "What is GGUF used for?"}
    ],
    "stream": False
}

response = requests.post(
    "http://localhost:11434/api/chat",
    json=payload
)

print(response.json()["message"]["content"])

Trường stream: false quan trọng cho script đơn giản. Nếu không có nó, Ollama trả về luồng các đối tượng JSON thay vì một phản hồi JSON cuối cùng.

Bạn cũng có thể dùng thư viện Python chính thức của Ollama:

from ollama import chat

response = chat(
    model="llama3.3",
    messages=[
        {"role": "user", "content": "Explain GGUF quantization simply."}
    ]
)

print(response.message.content)

Chạy tệp GGUF với llama.cpp

Nếu bạn đã có tệp .gguf, bạn có thể chạy trực tiếp với llama.cpp sau khi build dự án.

Ví dụ:

./build/bin/llama-cli \
  -m models/model.Q4_K_M.gguf \
  -p "Explain the difference between GGUF and GPTQ." \
  -n 256

Nếu bạn bật hỗ trợ GPU, bạn có thể offload các layer lên GPU:

./build/bin/llama-cli \
  -m models/model.Q4_K_M.gguf \
  -p "Summarize GGUF in five bullet points." \
  -n 256 \
  -ngl 99

Cờ -ngl điều khiển số lượng lớp được offload lên GPU. Một giá trị cao như 99 thường được dùng để offload tối đa, miễn là mô hình vừa VRAM.

Để phục vụ API, dùng llama-server:

./build/bin/llama-server \
  -m models/model.Q4_K_M.gguf \
  -ngl 99 \
  --host 127.0.0.1 \
  --port 8080

Điều này cung cấp cho bạn một giao diện máy chủ cục bộ để tích hợp llama.cpp vào ứng dụng.

Chuyển đổi mô hình Hugging Face sang GGUF

Đa số người dùng không cần chuyển đổi thủ công vì các bản phát hành GGUF do cộng đồng cung cấp rất phổ biến.

Tuy nhiên, chuyển đổi thủ công hữu ích khi:

  • Bạn đã fine-tune mô hình của riêng mình
  • Chưa có phiên bản GGUF
  • Bạn muốn tự kiểm soát quá trình lượng tử hóa
  • Bạn cần một kiểu lượng tử hóa cụ thể

Quy trình điển hình là:

  1. Tải xuống một mô hình từ Hugging Face.
  2. Chuyển đổi sang GGUF.
  3. Lượng tử hóa tệp GGUF.

Ví dụ:

huggingface-cli download mistralai/Mistral-7B-Instruct-v0.3 \
  --local-dir mistral-7b

Sau đó chuyển đổi sang GGUF:

python convert_hf_to_gguf.py mistral-7b \
  --outfile mistral-f16.gguf \
  --outtype f16

Rồi lượng tử hóa:

./build/bin/llama-quantize \
  mistral-f16.gguf \
  mistral-q4_k_m.gguf \
  Q4_K_M

Trong các quy trình llama.cpp hiện tại, convert_hf_to_gguf.pyllama-quantize là những công cụ liên quan. Các hướng dẫn cũ có thể nhắc tới script chuyển đổi đã ngừng dùng hoặc tên binary cũ.

Ưu điểm và hạn chế của định dạng GGUF

GGUF được tối ưu cho suy luận cục bộ thực tiễn. Nó không phải là giải pháp thay thế phổ quát cho mọi định dạng mô hình hoặc ngăn xếp phục vụ.

Ưu điểm

Hạn chế

Triển khai mô hình dưới dạng một tệp

Không thiết kế cho huấn luyện từ đầu

Hệ sinh thái suy luận cục bộ mạnh

Lượng tử hóa bit rất thấp có thể làm giảm chất lượng

Hoạt động trên nhiều backend phần cứng

Mô hình lớn vẫn cần bộ nhớ đáng kể

Hỗ trợ memory mapping

Thông lượng GPU có thể thấp hơn các ngăn xếp phục vụ chuyên dụng cho GPU

Nhiều lựa chọn lượng tử hóa

Thời gian chạy vẫn phải hỗ trợ kiến trúc mô hình và kiểu tensor

Phân phối dễ dàng trên Hugging Face

Độ dài ngữ cảnh có thể tăng sử dụng bộ nhớ qua bộ đệm KV

Với suy luận ưu tiên CPU, Apple Silicon, phần cứng hỗn hợp và tập trung quyền riêng tư, GGUF thường là lựa chọn tuyệt vời.

Với triển khai máy chủ NVIDIA thông lượng cao, các định dạng và engine khác có thể nhanh hơn tùy mô hình, kích thước batch, phương pháp lượng tử hóa và framework phục vụ.

Lời kết

GGUF làm cho suy luận LLM cục bộ trở nên thực tiễn bằng cách đóng gói mọi thứ thời gian chạy cần (trọng số, tokenizer, siêu dữ liệu, thông tin lượng tử hóa) vào một tệp di động. Sức mạnh thực sự của nó nằm ở hệ sinh thái xung quanh: llama.cpp, Ollama, LM Studio và Hugging Face đã khiến nó trở thành định dạng mặc định cho triển khai AI cục bộ.

Với đa số người dùng, lộ trình rất đơn giản: cài Ollama, kéo một mô hình và chạy. Q4_K_M là mặc định vững chắc; nâng lên Q5_K_M hoặc Q6_K khi bạn cần khả năng suy luận hoặc lập trình tốt hơn và có đủ bộ nhớ.

Nếu bạn muốn đi sâu vào triển khai LLM, tối ưu hóa mô hình và quy trình suy luận cục bộ, bạn nên khám phá lộ trình nghề nghiệp Associate AI Engineer for Data Scientists hoặc Associate AI Engineer for Developers.

Câu hỏi thường gặp về định dạng GGUF

GGUF là viết tắt của gì?

GGUF là viết tắt của GGML Unified Format. Đây là định dạng tệp nhị phân được thiết kế để lưu trữ và chạy các mô hình ngôn ngữ lớn cục bộ. GGUF đóng gói tensor, dữ liệu tokenizer, siêu dữ liệu và thông tin kiến trúc vào một tệp di động duy nhất, giúp triển khai cục bộ đơn giản hơn nhiều so với quy trình nhiều tệp cũ.

GGUF có tốt hơn GPTQ hay AWQ không?

GGUF không nhất thiết “tốt hơn” GPTQ hay AWQ trong mọi tình huống. GGUF được tối ưu cho tính di động và khả năng tương thích phần cứng rộng, đặc biệt cho suy luận trên CPU, Apple Silicon và phần cứng hỗn hợp qua các công cụ như llama.cpp và Ollama. GPTQ và AWQ thường được tối ưu hơn cho suy luận GPU thông lượng cao trong môi trường máy chủ NVIDIA.

Người mới nên dùng lượng tử hóa GGUF nào?

Với đa số người dùng, Q4_K_M là điểm khởi đầu an toàn nhất. Nó cân bằng tốt giữa chất lượng mô hình, mức dùng RAM và tốc độ suy luận. Người dùng có nhiều bộ nhớ hơn và muốn khả năng suy luận hoặc lập trình tốt hơn có thể thích Q5_K_M hoặc Q6_K, trong khi các định dạng bit thấp như Q2_K thường chỉ phù hợp để thử nghiệm.

Mô hình GGUF có thể chạy không cần GPU không?

Có. Một trong những lợi thế lớn nhất của GGUF là hỗ trợ CPU mạnh. Các công cụ như llama.cpp có thể chạy mô hình GGUF hoàn toàn trên CPU, dù tốc độ suy luận thường sẽ chậm hơn so với tăng tốc GPU. Các mô hình lượng tử hóa nhỏ, như biến thể 7B hoặc 8B Q4_K_M, thường khả thi trên CPU tiêu dùng hiện đại.

Tôi có cần tự chuyển đổi mô hình sang GGUF không?

Thường là không. Hầu hết mô hình trọng số mở phổ biến đã có phiên bản GGUF do cộng đồng tải lên trên Hugging Face. Chuyển đổi thủ công chủ yếu hữu ích nếu bạn đã fine-tune mô hình của riêng mình, cần một kiểu lượng tử hóa cụ thể hoặc muốn kiểm soát chặt chẽ quá trình chuyển đổi và lượng tử hóa bằng llama.cpp.


Austin Chia's photo
Author
Austin Chia
LinkedIn

Tôi là Austin, một blogger và cây bút công nghệ với nhiều năm kinh nghiệm làm nhà khoa học dữ liệu và nhà phân tích dữ liệu trong lĩnh vực chăm sóc sức khỏe. Khởi đầu hành trình công nghệ với nền tảng sinh học, tôi hiện hỗ trợ những người khác thực hiện chuyển đổi tương tự thông qua blog công nghệ của mình. Niềm đam mê công nghệ đã đưa tôi đến với việc cộng tác viết cho hàng chục công ty SaaS, truyền cảm hứng cho người khác và chia sẻ trải nghiệm của bản thân.

Chủ đề

Khóa học AI hàng đầu

Tracks

Cơ bản về Trí tuệ Nhân tạo

10 giờ
Khám phá những kiến thức cơ bản về Trí tuệ Nhân tạo (AI), học cách ứng dụng AI một cách hiệu quả trong công việc, và tìm hiểu sâu về các mô hình như ChatGPT để nắm bắt xu hướng phát triển của lĩnh vực AI.
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow