Quick Note #1: LoRA cho bài toán fine-tuning LLM

Low-Rank Adaptation

  • Phần lớn tính toán trong các mô hình ngôn ngữ lớn nói riêng và các mô hình Deep Learning nói chung là những phép nhân ma trận. Nếu tối ưu được quá trình này thì sẽ giảm được chi phí đáng kể.
  • Bản chất của quá trình fine-tune là tạo ra 1 bộ tham số ΔW\Delta W để cộng nó vào W0W_0 - bộ tham số đã được pre-trained - để tạo ra bộ tham số mới W=W0+ΔWW = W_0 + \Delta W.
  • Giả thuyết được đặt ra: ΔW\Delta W là một ma trận có rank (hạng) thấp.
  • Rank của ma trận càng nhỏ thì số lượng tham số cần tối ưu càng ít. Suy ra, cần ít bộ nhớ để lưu trữ và tài nguyên để tính toán hơn.
  • Công thức trên có thể được biểu diễn lại bằng W=W0+ΔW=W0+BAW = W_0 + \Delta W = W_0 + BA với BBAA là 2 ma trận có số chiều thấp hơn nhiều so với W0W_0.
  • Ví dụ: W0R1000×1000W_0 \in \mathbb{R}^{1000 \times 1000}, BR1000×10B \in \mathbb{R}^{1000 \times 10}, AR10×1000A \in \mathbb{R}^{10 \times 1000} thì số lượng tham số cần tối ưu là 1000×10+10×1000=200001000 \times 10 + 10 \times 1000 = 20000 thay vì 1000×1000=10000001000 \times 1000 = 1000000 như trước đây. Tức là giảm đi 98% số lượng tham số cần tối ưu!
  • Khi triển khai mô hình LoRA, cần phải tải W0W_0 lẫn BBAA vào bộ nhớ và thực hiện phép toán W=W0+BAW = W_0 + BA để sinh ra bộ tham số cho mô hình đã được fine-tune.
  • Nhược điểm:
    • Mỗi mô hình LoRA chỉ có thể xử lý được 1 tác vụ tại 1 thời điểm. Khi cần thực hiện tác vụ khác thì phải thực hiện chuyển đổi bộ tham số.
    • Giả sử có nhiều mô hình LoRA được triển khai, nhưng chỉ có 1 instance của W0W_0 được tải vào bộ nhớ. Nếu dữ liệu đầu vào buộc mô hình phải chuyển đổi qua lại giữa các LoRA khác nhau thì sẽ làm tăng chi phí tính toán và giảm hiệu năng của mô hình.
  • Giải pháp: Dùng Prompt Tuning.

Tài liệu tham khảo


Quick Note #1: LoRA cho bài toán fine-tuning LLM
https://www.kysuai.com/2023/05/28/Quick-Note-1-LoRA-cho-bai-toan-fine-tuning-LLM/
Tác giả
Vũ Đức Duy
Đăng vào
28 tháng 5 năm 2023
Licensed under