Blog / AI / Deep Article
LoRA dùng ma trận hạng thấp để tinh chỉnh AI, còn QLoRA kết hợp lượng tử hóa 4-bit. Phân tích cách hoạt động, chi phí GPU, giới hạn và lúc nên áp dụng.
Bạn phát triển chatbot phục vụ khách hàng tại Việt Nam. Mô hình AI khá tốt, nhưng bạn muốn nó viết báo cáo theo mẫu riêng, phân loại câu hỏi và giữ cách trả lời nhất quán. Huấn luyện lại toàn bộ mô hình thì đắt; chỉ thêm vài ví dụ vào lời nhắc đôi khi lại không đủ. Vấn đề là làm sao thay đổi hành vi mà không phải sửa hàng tỷ trọng số? Một hướng giải quyết đáng chú ý là LoRA, viết tắt của *Low-Rank Adaptation*.
Đây mới là ý tưởng chính: LoRA giữ nguyên phần lớn trọng số đã học và chỉ huấn luyện những ma trận nhỏ biểu diễn phần điều chỉnh. Biến thể QLoRA đi thêm một bước: lưu mô hình nền ở dạng lượng tử hóa 4-bit trong quá trình tinh chỉnh, rồi huấn luyện các phần điều chỉnh LoRA. Hai kỹ thuật này giúp nhiều bài toán tùy biến AI khả thi trên phần cứng ít bộ nhớ hơn. Chúng không có nghĩa là mọi mô hình đều tinh chỉnh được trên một GPU nhỏ, càng không bảo đảm câu trả lời sẽ đúng hơn.
Mô hình ngôn ngữ gồm rất nhiều tham số, thường gọi là *trọng số*. Khi nhận dữ liệu đầu vào, mô hình sử dụng chúng để thực hiện phép tính và dự đoán token tiếp theo. Trong fine-tuning toàn phần, hệ thống cập nhật trọng số dựa trên dữ liệu mới. Với mô hình có hàng tỷ tham số, quá trình này không chỉ lưu trọng số mà còn cần bộ nhớ cho gradient, trạng thái bộ tối ưu và giá trị trung gian.
Hãy thử tính với mô hình giả định có 7 tỷ tham số. Nếu chỉ lưu trọng số dạng 16-bit, phép nhân đơn giản cho kết quả khoảng 14 GB theo hệ thập phân. Vấn đề là đó chưa phải dung lượng GPU cần để huấn luyện. Kích thước thực tế còn phụ thuộc kiến trúc, bộ tối ưu, độ dài chuỗi, kích thước lô và cách phân phối bộ nhớ. Vì vậy, câu “mô hình 7B chỉ cần 14 GB” dễ khiến người mới nhầm dung lượng lưu trọng số với dung lượng huấn luyện.
Nghiên cứu LoRA của Edward J. Hu và cộng sự, công bố năm 2021, xuất phát từ khó khăn này: tạo một bản tinh chỉnh toàn phần riêng cho từng nhiệm vụ ngày càng đắt khi mô hình nền lớn lên. Nhóm tác giả đặt câu hỏi liệu phần thay đổi cần học có thể được biểu diễn gọn hơn hay không.
Giả sử một lớp có ma trận trọng số W kích thước 4.096 × 4.096, chứa 16.777.216 phần tử. Trong tinh chỉnh toàn phần, ta có thể cập nhật từng phần tử. LoRA giữ nguyên W, rồi học hai ma trận A và B sao cho phần thay đổi được biểu diễn bằng tích BA.
Đầu ra có thể viết là y = Wx + (α/r)BAx. Ở đây, r là *rank* (hạng) của phần điều chỉnh, còn α là hệ số tỷ lệ. Nếu r = 16, A có kích thước 16 × 4.096 và B có kích thước 4.096 × 16. Tổng số phần tử phải học là 131.072, tương đương khoảng 0,78% số phần tử của W trong ví dụ.
Điểm dễ nhầm là đây chỉ là phép tính cho một ma trận, không phải tỷ lệ tham số có thể huấn luyện của mọi mô hình dùng LoRA. Tỷ lệ toàn mô hình còn phụ thuộc LoRA được gắn vào những lớp nào và có huấn luyện thêm thành phần khác hay không. Nó cũng không chứng minh rằng r = 16 luôn đủ tốt.
Thực tế là trong huấn luyện LoRA, chỉ A và B cần gradient và trạng thái tối ưu tương ứng. Trọng số nền được đóng băng, nên hệ thống không phải duy trì các thành phần huấn luyện cho toàn bộ trọng số ấy. Tệp chứa phần tinh chỉnh cũng có thể nhỏ hơn rất nhiều so với một bản sao mô hình hoàn chỉnh.
Thực tế là bài báo LoRA chỉ đưa ra kết quả trên những mô hình và nhiệm vụ cụ thể: so với tinh chỉnh GPT-3 175B bằng Adam, số tham số cần học có thể giảm tới 10.000 lần, còn yêu cầu bộ nhớ GPU giảm khoảng 3 lần trong thiết lập được nghiên cứu. Đây là số liệu của công trình, không phải tỷ lệ tiết kiệm mặc định cho mọi mô hình. Một nhóm dùng mô hình 7B, bộ tối ưu khác hoặc độ dài đầu vào khác có thể thu được kết quả rất khác.
Điểm đáng giá với một đội làm AI ở Việt Nam là giữ chung mô hình nền và lưu nhiều adapter LoRA cho các tác vụ. Chẳng hạn, cùng mô hình có adapter phân loại yêu cầu khách hàng và adapter chuẩn hóa cách tóm tắt. Việc thay adapter không đồng nghĩa phải lưu hai bản mô hình nền độc lập. Tuy nhiên, phục vụ nhiều adapter đồng thời vẫn đòi hỏi quản lý tải, bộ nhớ và tính tương thích.
Bạn có thể hỏi: ít tham số hơn thì AI chắc chắn chạy nhanh hơn chứ? Không hẳn. Cần phân biệt huấn luyện với suy luận. LoRA giảm lượng tham số phải cập nhật nhưng vẫn phải chạy mô hình nền để tính đầu ra và truyền tín hiệu học. Vì thế, ít tham số học hơn không có nghĩa thời gian huấn luyện giảm đúng bằng tỷ lệ tham số.
Khi triển khai, tích BA có thể cộng vào W để tạo trọng số hợp nhất. Về nguyên lý, phép hợp nhất này cho phép thực hiện lớp tuyến tính mà không cần chạy thêm nhánh adapter. Tài liệu PEFT của Hugging Face mô tả hàm merge_and_unload() cho mục đích đó. Nếu hệ thống giữ adapter tách rời để đổi tác vụ linh hoạt, việc nạp và thực thi adapter vẫn có thể phát sinh chi phí. Do vậy, “không tăng độ trễ suy luận” là khả năng của cách triển khai hợp nhất phù hợp, không phải cam kết về mọi máy chủ.
LoRA giảm phần lớn chi phí cập nhật trọng số, nhưng mô hình nền vẫn phải được lưu để tính toán. Với mô hình lớn, riêng trọng số nền đã có thể chiếm phần lớn VRAM (bộ nhớ GPU). QLoRA, được Tim Dettmers và cộng sự giới thiệu năm 2023, kết hợp adapter LoRA với lượng tử hóa mô hình nền.
Lượng tử hóa là biểu diễn giá trị bằng ít bit hơn. Trong QLoRA, trọng số nền được giữ ở dạng 4-bit phù hợp với phương pháp, trong khi tín hiệu gradient vẫn đi qua phép tính của mô hình nền để cập nhật adapter. Trọng số nền không được huấn luyện trực tiếp. QLoRA không đơn giản là “huấn luyện mọi trọng số ở 4-bit”; phần được học chủ yếu vẫn là adapter.
Công trình gốc sử dụng NF4 (*NormalFloat 4-bit*) để biểu diễn trọng số, double quantization để giảm chi phí lưu hằng số lượng tử hóa và paged optimizers nhằm xử lý những đỉnh sử dụng bộ nhớ. Trong thí nghiệm của nhóm tác giả, mô hình 65 tỷ tham số có thể được tinh chỉnh trên một GPU 48 GB. Kết quả có điều kiện về mô hình, phần mềm và thiết lập nghiên cứu; không nên suy ra bất kỳ mô hình 65B nào cũng chạy được trên mọi GPU 48 GB.
Hãy kiểm tra một phép tính: mô hình 7B nhân 7 tỷ với 4-bit cho khoảng 3,5 GB dữ liệu trọng số lý tưởng. Nhưng QLoRA thực tế còn cần bộ nhớ cho thông tin lượng tử hóa, adapter, kích hoạt, vùng tính toán và các thành phần hệ thống. Con số 3,5 GB không phải cấu hình VRAM tối thiểu để tinh chỉnh hay phục vụ mô hình 7B.
Một mô hình lượng tử hóa có thể dùng để giảm bộ nhớ khi suy luận mà không hề được tinh chỉnh. Ngược lại, LoRA có thể tinh chỉnh mô hình nền chưa lượng tử hóa. QLoRA kết hợp hai ý tưởng để giải quyết bài toán tinh chỉnh tiết kiệm bộ nhớ.
| Phương án | Trọng số nền khi huấn luyện | Phần được cập nhật | Đánh đổi nổi bật |
| --- | --- | --- | --- |
| Fine-tuning toàn phần | Giữ ở độ chính xác huấn luyện thích hợp | Phần lớn hoặc toàn bộ trọng số | Linh hoạt nhưng tốn tài nguyên |
| LoRA | Đóng băng | Ma trận adapter nhỏ | Tiết kiệm trạng thái tối ưu, vẫn cần tải mô hình nền |
| QLoRA | Đóng băng và lượng tử hóa, thường 4-bit | Adapter LoRA | Giảm bộ nhớ nền, thêm phức tạp lượng tử hóa |
Giả sử một đơn vị ở Việt Nam muốn chatbot tiếp nhận câu hỏi bằng tiếng Việt, xác định loại yêu cầu và trả lời theo cấu trúc thống nhất. Họ có vài nghìn cặp ví dụ đã được kiểm tra: câu hỏi, nhãn phân loại, mẫu phản hồi và trường hợp cần chuyển cho người phụ trách. LoRA có thể điều chỉnh cách mô hình thực hiện tác vụ mà không phải cập nhật toàn bộ trọng số.
Nhưng nếu chatbot phải trả lời đúng quy định thay đổi theo ngày, chỉ fine-tuning không giải quyết bài toán cập nhật tài liệu đâu nhé. Khi ấy, hệ thống truy xuất nguồn hiện hành — thường gọi là RAG — và cơ chế kiểm tra phiên bản văn bản quan trọng hơn. LoRA và RAG không loại trừ nhau: một bên có thể điều chỉnh hành vi, bên kia cung cấp chứng cứ mới tại thời điểm hỏi.
Trước khi huấn luyện, nhóm triển khai cần xác định mục tiêu đo được: tăng tỷ lệ phân loại đúng, giảm lỗi định dạng hay giảm số câu trả lời phải sửa thủ công. Một mô hình nền được đánh giá trên cùng tập kiểm thử là mốc so sánh bắt buộc. Chỉ nhìn vài câu trả lời “trông hay hơn” thì chưa thể kết luận LoRA hữu ích đâu nhé.
Bài học từ khâu dữ liệu: hãy tách tập huấn luyện khỏi tập đánh giá, loại bỏ bản ghi trùng hoặc rò rỉ đáp án, kiểm tra quyền sử dụng và ẩn thông tin cá nhân không cần thiết. Với tác vụ phân loại, có thể đo độ chính xác và tỷ lệ nhầm giữa các nhóm. Với tác vụ soạn phản hồi, nên đo mức tuân thủ cấu trúc, tính đúng căn cứ và mức ổn định trước các cách diễn đạt khác nhau.
Về kỹ thuật, phải ghi lại rank r, lora_alpha, các lớp target_modules gắn adapter, tốc độ học, độ dài chuỗi, kích thước lô, số bước huấn luyện và kiểu lượng tử hóa nếu dùng QLoRA. Tài liệu PEFT mô tả các tùy chọn này. Không nên đổi nhiều biến cùng lúc rồi quy mọi cải thiện cho rank.
Một phép thử nhỏ có thể so sánh mô hình nền, LoRA ở hai mức rank và QLoRA ở cấu hình phù hợp. Cần ghi cả chất lượng lẫn đỉnh VRAM, thời gian huấn luyện, tốc độ sinh và chi phí. Nếu QLoRA tiết kiệm VRAM nhưng chậm hơn trên phần cứng cụ thể, đó là đánh đổi cần ghi nhận, không phải thất bại cần che giấu.
Dữ liệu ít nhưng sai vẫn có thể làm hỏng kết quả. Dữ liệu nhiều nhưng lệch nhiệm vụ cũng không bảo đảm tốt hơn. LoRA giảm số tham số cần học, chứ không tự xác định ví dụ nào đáng tin hoặc ngăn mô hình bịa câu trả lời.
Rank nhỏ là giả định hữu ích, không phải định luật. Tác vụ cần thay đổi hành vi phức tạp có thể đòi hỏi rank khác, gắn adapter ở nhiều lớp hơn hoặc phương pháp huấn luyện khác. Nếu mô hình nền thiếu năng lực cốt lõi, adapter nhỏ khó thay thế việc chọn mô hình phù hợp.
Lượng tử hóa có thể tạo sai số số học; đừng mặc định tiếng Việt và dữ liệu chuyên ngành ở Việt Nam sẽ có kết quả giống benchmark tiếng Anh. Công trình QLoRA cho thấy hiệu quả trong đánh giá cụ thể, nhưng không chứng minh mọi mô hình, ngôn ngữ, tác vụ và phần cứng đều giữ nguyên chất lượng. Cần thử trên dữ liệu thực, nhất là với thuật ngữ chuyên ngành và trường hợp hiếm.
Nếu mục tiêu là sửa cách trình bày, phân loại hoặc tuân thủ định dạng với nhiều ví dụ chất lượng, LoRA đáng thử trước tinh chỉnh toàn phần. Nếu VRAM là nút thắt chính, QLoRA có thể mở rộng phạm vi thử nghiệm, đổi lại cấu hình phức tạp hơn. Nếu vấn đề chủ yếu là thông tin thay đổi liên tục, hãy ưu tiên truy xuất tài liệu và kiểm chứng nguồn trước khi đầu tư huấn luyện.
Bài học cho đội phát triển AI tại Việt Nam không nằm ở con số giảm bộ nhớ gây ấn tượng. Kỹ thuật tốt phải trả lời đúng nhu cầu người dùng chứ không chỉ đẹp trên bảng so sánh. Hãy đo trên dữ liệu tiếng Việt thực tế, với cùng tập câu hỏi, tiêu chí chấm, cấu hình và chi phí. LoRA giúp giảm giá của việc thử nghiệm điều chỉnh mô hình; nó không làm biến mất công việc khó nhất: định nghĩa thế nào là một câu trả lời tốt. Đó mới là câu hỏi cần giải trước khi thuê GPU.