Tinh chỉnh một mô hình ngôn ngữ lớn 65 tỷ tham số thường đòi hỏi cụm GPU với hàng trăm GB VRAM. QLoRA giải quyết bài toán này bằng cách nén mô hình gốc xuống 4-bit rồi chỉ huấn luyện các adapter nhỏ ở định dạng BF16, cho phép toàn bộ quá trình chạy trên một GPU 48GB duy nhất mà không mất chất lượng đáng kể.
4-bit NormalFloat: Kiểu dữ liệu tối ưu cho trọng số
Trọng số của các mô hình ngôn ngữ lớn thường có phân bố chuẩn. QLoRA đề xuất kiểu dữ liệu NF4, chia đều các mức lượng tử hóa theo phân phối chuẩn thay vì chia đều trên trục số. Vì vậy, NF4 tối ưu về mặt lý thuyết thông tin: mỗi bit mang lượng thông tin tối đa khi biểu diễn trọng số của mạng nơ-ron. So với INT4 thông thường, NF4 giảm sai số lượng tử hóa đáng kể mà không tốn thêm bộ nhớ.
Double Quantization: Nén cả hằng số lượng tử
Mỗi block trọng số 4-bit cần một hằng số tỷ lệ (quantization constant) ở FP32 để giải nén. Với hàng triệu block, riêng các hằng số này đã chiếm vài GB. Double Quantization nén tiếp các hằng số đó xuống FP8, tiết kiệm thêm khoảng 0,37 bit trên mỗi tham số. Con số này nghe có vẻ nhỏ, nhưng với mô hình 65B tham số, nó tương đương khoảng 3 GB VRAM được giải phóng.
Paged Optimizers: Xử lý đỉnh bộ nhớ
Trong quá trình huấn luyện, trạng thái của bộ tối ưu, chẳng hạn Adam phải lưu momentum và variance cho từng tham số, có thể làm bộ nhớ tăng vọt khi xử lý lô lớn hoặc chuỗi dài. QLoRA sử dụng cơ chế phân trang của NVIDIA Unified Memory: khi VRAM đầy, các trang ít dùng sẽ tự động chuyển sang RAM hệ thống rồi nạp lại khi cần. Cách này giúp tránh lỗi hết bộ nhớ mà không cần giảm kích thước lô.
Phân tích mức dùng bộ nhớ
Một mô hình 65B ở FP16 chiếm khoảng 130GB, vượt xa mọi GPU đơn hiện có. Với QLoRA, mô hình gốc ở NF4 chỉ còn khoảng 33GB. Các adapter LoRA (rank 64, áp dụng cho toàn bộ lớp tuyến tính) làm tăng thêm khoảng 1-2 GB ở BF16. Trạng thái bộ tối ưu cho riêng adapter chiếm thêm 2–4 GB. Tổng cộng khoảng 38-40 GB, vừa đủ cho một A6000 48 GB hoặc A100 40 GB nếu dùng lô nhỏ.
Chất lượng so với LoRA truyền thống
Điểm bất ngờ lớn nhất của QLoRA là chất lượng hầu như không giảm. Trên bộ đánh giá Vicuna, mô hình Guanaco 65B được tinh chỉnh bằng QLoRA đạt 99,3% hiệu năng so với ChatGPT, chỉ cần 24 giờ huấn luyện trên một GPU duy nhất. So với LoRA chạy ở FP16 trên cùng dữ liệu và cùng rank, QLoRA cho kết quả tương đương, thậm chí nhỉnh hơn, nhờ có thể dùng mô hình nền lớn hơn trong cùng ngân sách phần cứng.
Ý nghĩa thực tiễn
QLoRA dân chủ hóa việc fine-tune mô hình ngôn ngữ lớn. Trước đây, chỉ các phòng thí nghiệm lớn với cụm A100 mới làm được việc này. Nay, một nhà nghiên cứu với GPU phổ thông cũng có thể tùy chỉnh mô hình 33B, hoặc thuê một A100 đơn trên đám mây để tinh chỉnh mô hình 65B. Kỹ thuật này đã trở thành chuẩn mực trong cộng đồng mã nguồn mở và được tích hợp sẵn trong Hugging Face PEFT cùng bitsandbytes.





