LoRA là gì? Kỹ thuật tinh chỉnh mô hình AI tiết kiệm bộ nhớ

Sơ đồ kiến trúc LoRA: trọng số tiền huấn luyện W0 cộng ma trận hạng thấp B nhân A

LoRA là viết tắt của Low-Rank Adaptation, một kỹ thuật cho phép tinh chỉnh mô hình ngôn ngữ lớn bằng cách chỉ huấn luyện một phần rất nhỏ tham số thay vì toàn bộ trọng số. Nhờ đó, bạn có thể tạo bản tùy biến riêng cho từng tác vụ chỉ với vài chục MB thay vì hàng trăm GB. Bài viết này giải thích cơ chế phân rã hạng thấp, cách chọn tham số, và những sai lầm thường gặp khi áp dụng.

Sơ đồ kiến trúc LoRA: trọng số tiền huấn luyện W0 cộng với ma trận hạng thấp B nhân A, quy trình trong và sau khi huấn luyện

LoRA giải quyết vấn đề gì

Bài toán gốc rất đơn giản: bạn có một mô hình ngôn ngữ đã huấn luyện sẵn và muốn nó giải quyết tốt một miền riêng, ví dụ văn bản pháp lý tiếng Việt hay dữ liệu hỗ trợ khách hàng nội bộ. Cách hiển nhiên nhất là tinh chỉnh toàn phần (full fine-tuning), tức mở khoá mọi trọng số và cho tất cả chúng cập nhật theo gradient. Cách này cho chất lượng tốt nhất nhưng đắt: mỗi lần chạy đều phải giữ trọng số gốc, gradient và trạng thái của bộ tối ưu hoá trong bộ nhớ. Với một mô hình khoảng 175 tỉ tham số, con số này lên tới trăm gigabyte.

LoRA đặt một giả định: phần thay đổi cần thiết để thích nghi với tác vụ mới không có hạng đầy đủ, mà chỉ có hạng rất thấp. Với một ma trận trọng số W có kích thước d x k, LoRA thay vì học trực tiếp một ma trận cập nhật d x k, chỉ học hai ma trận B (d x r) và A (r x k), với r nhỏ hơn rất nhiều so với cả d và k. Bản cập nhật là tích của hai ma trận, có hạng không vượt quá r.

Cơ chế phân rã hạng thấp và hệ số alpha

Công thức cốt lõi rất gọn: trọng số hiệu tại bằng tổng của trọng số đóng băng W0 cộng với tích B nhân A. Phần W0 giữ nguyên trong suốt quá trình huấn luyện, chỉ A và B được cập nhật. Để quy trình bắt đầu từ trạng thái “chưa thay đổi gì”, A được khởi tạo bằng phân phối ngẫu nhiên còn B được khởi tạo bằng toàn số không, nhờ vậy tích B nhân A bằng không ngay từ đầu và mô hình hành xử y hệt bản gốc.

Do kết quả nhân với x rất nhỏ so với hàm chuyển đổi chính, LoRA nhân thêm một hệ số alpha chia cho r. Hệ số này giữ biên độ đầu ra ổn định khi bạn thay đổi bậc r mà không phải huấn luyện lại từ đầu. Trong cấu hình mặc định của thư viện PEFT, bậc r bằng 8 và alpha cũng bằng 8.

Hình ảnh hoạt nghiệm minh họa phép xấp xỉ ma trận hạng thấp với sai số trung bình bình phương giảm dần theo số bước

LoRA và QLoRA khác nhau ở điểm nào

QLoRA là biến thể bổ sung thêm lớp lượng tử hoá 4 bit cho trọng số đóng băng. Trọng số gốc nén xuống 4 bit, phần cập nhật LoRA vẫn giữ ở độ chính xác cao, nên phần tính toán và bộ nhớ ở độ chính xác đầy đủ chỉ dành cho phần nhỏ tham số đang học. QLoRA dùng định dạng NormalFloat 4 bit, được thiết kế để gần đúng phân phối trọng số hơn so với số nguyên thống nhất, kèm lượng tử hoá kép cho chính các hằng số lượng tử hoá để tiết kiệm thêm vài gigabyte.

Tiêu chí Full fine-tuning LoRA QLoRA
Tham số huấn luyện Toàn bộ Dưới 1% Dưới 1%
Định dạng trọng số gốc Đầy đủ Đầy đủ 4 bit
Bộ nhớ cho mô hình rất lớn Rất cao Cao Thấp
Chất lượng sau tinh chỉnh Tham chiếu Gần tham chiếu Gần tham chiếu
Độ phức tạp triển khai Thấp Trung bình Trung bình

Kết quả đáng chú ý từ bài báo gốc: khi chỉ tinh chỉnh hai ma trận chiếu của truy vấn và giá trị với bậc r bằng 4 trên mô hình 175 tỉ tham số, kích thước tệp trọng số của phần bổ sung chỉ khoảng 35 MB so với vài trăm GB nếu lưu toàn bộ. Tốc độ huấn luyện cũng tăng khoảng 25 phần trăm do phần lớn gradient không cần tính toán.

Chọn tham số LoRA như thế nào

Bậc r là tham số quan trọng nhất, thường bắt đầu ở 8 rồi thử 16 hoặc 32 khi tài nguyên cho phép. Nếu dữ liệu tinh chỉnh nhỏ, bậc thấp thường đã đủ vì bài báo gốc chỉ ra bậc 1 đến 2 đã đủ cho nhiều tác vụ. Danh sách module áp dụng mặc định là q_proj và v_proj, chỉ các ma trận phép chiếu trong lớp chú ý.

Lưu ý quan trọng về hiệu năng: LoRA không gây thêm độ trễ khi suy luận, vì bạn có thể gộp trọng số sau khi huấn luyện bằng cách cộng trực tiếp B nhân A vào W0, thu được một mô hình độc lập không kèm adapter. Việc đổi tác vụ chỉ cần thay lớp adapter tương ứng trước khi gộp.

Những lỗi thường gặp và cách tránh

  • Quên gộp trọng số trước khi xuất. Adapter độc lập cần thư viện PEFT ở phía suy luận. Gộp sớm giúp triển khai đơn giản hơn nhiều.
  • Dùng bậc r quá cao. Tăng bậc không tự động tăng chất lượng, chỉ tăng thời gian huấn luyện và kích thước adapter.
  • Áp LoRA cho mọi lớp. Áp cho cả mạng phép chiếu và lớp feed-forward làm tăng tham số mà độ chính xác không cải thiện rõ rệt.
  • Bộ nhớ tăng đột ngột khi dữ liệu biến động độ dài. Cần gom theo chiều dài tương đối đồng nhất hoặc dùng bộ tối ưu hoá phân trang như QLoRA để tránh đỉnh bộ nhớ.
  • Quên chính sách bản quyền dữ liệu. Adapter là sản phẩm có giá trị thương mại; cần ghi rõ nguồn dữ liệu và điều khoản sử dụng.

Khi nào nên chọn LoRA thay vì tinh chỉnh toàn phần

LoRA hợp lý khi bạn cần nhiều biến thể tác vụ từ cùng một mô hình gốc, khi ngân sách GPU giới hạn, hoặc khi dữ liệu tinh chỉnh chỉ vài nghìn mẫu. Ngược lại, nếu bạn có lượng dữ liệu lớn, cần thay đổi kiến thức nền tảng chứ không chỉ phong cách, và có đủ tài nguyên, tinh chỉnh toàn phần vẫn cho kết quả tốt hơn.

Hướng dẫn tham khảo: bài báo LoRA trên arXiv, bài báo QLoRA trên arXiv, hướng dẫn khái niệm LoRA của Hugging Face PEFT, tham chiếu LoraConfig của PEFT và hướng dẫn lượng tử hoá của PEFT.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Object detection là gì? Cách AI nhận diện vật thể trong ảnh

Object detection là gì? Cách AI nhận diện vật thể trong ảnh Object detection (phát hiện đối tượng) là bài toán thị giác máy tính, trong đó mô hình AI…

Xem thêm

Kiến trúc Transformer là gì? Nền tảng mô hình ngôn ngữ hiện đại

Kiến trúc Transformer là gì? Nền tảng của mô hình ngôn ngữ hiện đại Transformer là kiến trúc mạng nơ-ron deep learning được giới thiệu trong bài báo “Attention Is…

Xem thêm

Mô hình Seq2seq là gì? Cách mạng dịch máy và tổng hợp văn bản

Mô hình Seq2seq là gì? Cách mạng dịch máy và tổng hợp văn bản Seq2seq (Sequence-to-sequence) là kiến trúc học sâu dùng để chuyển đổi một chuỗi đầu vào thành…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất